- drop quota / repos / headless-task panels; page is now GPU board +
Live Agents (frontend only, headless task API still available)
- Live Agents: grouped by tmux session, launch form (engine/session/cwd/
window name), open-terminal link per agent
- compact GPU board: multi-column host cards, fixed 4-per-row GPU thumbs
with status glow, expanded host spans full row
- permanent dark theme tuned for a monitoring dashboard; terminal-styled
session group headers; refresh now polls three light endpoints instead
of the full dashboard aggregate
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- tmux-web-attach.sh: attach browser to one window via link-window into a
private temp session (no session-group pollution); window-size smallest
while attached so the browser never gets cut off; mouse on for natural
wheel/touch scrolling; status bar off; destroy-unattached cleanup
- start-ttyd.sh: ttyd on 127.0.0.1:7681, base path /term, url-arg enabled,
Tokyo Night theme, system mono stack, fontSize 14
- systemd user unit + install script registration
- nginx: /term/ proxied with websocket upgrade, gated by auth_request to
the kanban cookie check; unauthenticated -> 302 /login
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- src/services/tmux.js: parse tmux panes (claude/node->codex engine match),
collect running agents, launch agent in new or existing session via
new-window/new-session + send-keys (window survives agent exit)
- routes: GET/POST /api/tmux/agents, GET /api/auth/check (for nginx
auth_request), liveAgents in /api/dashboard aggregate
- tests for the pure parser
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Remember history task and stdout/stderr terminal open state across the 60s refresh so they no longer collapse on every poll.
- Mark GPUs with allocated memory but near-zero utilization as `abnormal` (orange) — covers stuck processes that previously rendered as busy.
- Bump dashboard auto-refresh from 30s to 60s.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Introduce `engine` field on agent profiles (codex/claude/qoder); auto-inferred from command when omitted.
- Default profiles now include `claude-bypass` (mirrors `ccx='claude --permission-mode bypassPermissions'`) and `qoder-yolo` (mirrors `qxx='qodercli --yolo'`), both running headless with `-p --output-format stream-json` so session ids can be extracted for resume.
- Stream-json engines share parsing: session_id pulled from `system.init`, task stdout shows only assistant text plus a `[done]` line, tool_use/tool_result noise dropped.
- Resume builds `--resume <sid> <prompt>` for stream-json engines, keeps Codex's `resume <sid> <prompt>` positional form.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Document how to start, configure, and deploy the local Kanban app
including auth, GPU hosts, Gitea integration, quota checking, and
agent session management.
Scripts for installing and starting the app and nginx proxy.
Includes systemd user service units and nginx configs for
both user-mode 8443 and system-mode 443.
Public directory contains the Kanban SPA with dashboard UI, login
page, and styles. Portal directory provides a standalone service
entry page with CSS styling.
Includes HTTP server with auth, static file serving, and API routes.
Services cover GPU monitoring, quota checking, Gitea repo listing,
workspace management, agent task orchestration, and settings persistence.