feat(dashboard): Phase 3 — embedded web dashboard #138
Reference in New Issue
Block a user
Delete Branch "feat/133-phase3-web-dashboard"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Phase 3 of RFC #133: Embedded single-page web dashboard for daemon monitoring and control.
Why
Phase 1+2 built the HTTP API + auth + CLI remote access. Phase 3 adds a visual interface — open
http://host:port/in a browser to see daemon status, senses, and workflows at a glance, with trigger/kill controls.Changes
packages/daemon/src/dashboard.html(NEW — 569 lines)packages/daemon/src/load-dashboard-html.ts(NEW)getDashboardHtml(): reads dashboard.html viafs.readFileSync+import.meta.urlpackages/daemon/src/http-api.tsGET /serves dashboard HTML (text/html, Cache-Control: no-store)packages/daemon/rslib.config.tsoutput.copycopiessrc/dashboard.htmltodist/alongside bundled JSpackages/core/src/sense-trigger-labels.ts(NEW)packages/core/src/sense.tsSenseInfogainstriggers: string[]fieldpackages/core/src/daemon-ipc-protocol.tsWorkflowStatusgainsactiveRunIds: string[]fieldpackages/daemon/src/workflow-manager.tslistWorkflows()populatesactiveRunIds(sorted)packages/daemon/src/kernel.tspackages/cli/src/commands/sense.tsandworkflow.tsTest updates
http-api.test.ts: GET / returns 200 HTML even when token is configureddaemon-ipc.test.ts,sense-list.test.ts: updated fixtures for new fieldsRef
LGTM with one bug 🐛
Bug:
dashboard.html的onKillWorkflow发{ threadId, name }但/api/kill-workflow端点期望{ runId },Kill 按钮会永远 400。修复:body: JSON.stringify({ runId: threadId })即可。其余很漂亮:
SenseInfo.triggers+WorkflowStatus.activeRunIds扩展自然修完那个字段名就可以合了。
LGTM ✅ runId 字段已统一,三处修复干净利落。RFC #133 三个 Phase 全部完成,漂亮!🎉