简体中文 | English | 한국어 | Français | Deutsch | 日本語 | Русский | Español | Português | Italiano | Tiếng Việt | العربية
Пиксельный «офисный» дашборд для совместной работы нескольких агентов: в реальном времени показывает, что делают ваши ИИ‑помощники (OpenClaw, Lobster и т.д.) — кто активен, что было «вчера», кто в сети.
Репозиторий — реализация идеи Star-Office-UI на Node.js / Express: тот же внешний вид и HTTP‑контракт, чтобы существующие агенты почти не менялись; бэкенд рассчитан на долгоживущий сервис, а не один большой скрипт.
Четыре стиля интерфейса: пиксель, мягкий, полночь, бумага — по умолчанию пиксель.

src/, а не один монолитный файл.engines, only-allow, engine-strict, проверка в src/bootstrap/env-check.js).SIGTERM / SIGINT. GET /health, GET /ready после инициализации хранилища.memory/ (GET /yesterday-memo).Нужны Node ≥ 20 и pnpm ≥ 9 (установка pnpm).
git clone https://github.com/wangmiaozero/Star-Office-UI-Node.git
cd Star-Office-UI-Node
pnpm install
pnpm start
URL по умолчанию: http://127.0.0.1:18791
Разработка с перезапуском:
pnpm dev
Порт занят:
PORT=18792 pnpm start
Пример env:
cp .env.example .env
SKIP_PNPM_CHECK=1 только для случаев без pnpm — не для продакшена.
docker compose up -d
Откройте: http://127.0.0.1:18791
Состояние основного агента:
pnpm set-state writing "Черновик документации"
Health / ready:
curl -s http://127.0.0.1:18791/health curl -s http://127.0.0.1:18791/ready
GET /health — livenessGET /ready — readiness (после проверок)GET /status — статус основного агентаPOST /set_state — задать статусGET /agents — список агентов (очистка гостей / офлайн)POST /join-agent — вход гостяPOST /agent-push — пуш статуса гостяPOST /leave-agent — выход гостяPOST /agent-approve / POST /agent-reject — одобрить / отклонитьGET /yesterday-memo — заметка из memory/ГГГГ-ММ-ДД.mdGET /, /join, /invite — страницы; статика под /staticidle, writing, researching, executing, syncing, errorСопоставление:
working / busy / write → writingrun / running / execute / exec → executingsync → syncingresearch / search → researchingcurl -s -X POST http://127.0.0.1:18791/join-agent \
-H "Content-Type: application/json" \
-d '{
"name": "openclaw-agent-01",
"joinKey": "ocj_starteam02",
"state": "idle",
"detail": "just joined"
}'
curl -s -X POST http://127.0.0.1:18791/agent-push \
-H "Content-Type: application/json" \
-d '{
"agentId": "agent_xxx",
"joinKey": "ocj_starteam02",
"name": "openclaw-agent-01",
"state": "writing",
"detail": "working on current task context"
}'
curl -s -X POST http://127.0.0.1:18791/leave-agent \
-H "Content-Type: application/json" \
-d '{"agentId":"agent_xxx"}'
Рекомендуемый цикл: при старте join-agent → сохранить agentId → интервальный agent-push → при остановке leave-agent → при 403/404 прекратить push и переподключиться или оповестить.
Если проект полезен — буду благодарен за звезду.
Made with ❤️ by wangmiaozero