refactor(gui): host graph from dshClient discovery; webserver self-watches bundles for HMR

The registry scans mounted Loader entries' dshClient declarations and
composes __DSH_BOOT__ {rev, entries} — inject edges and the immediately
mark come from manifests, never hand-copied; malformed fields fail loud
at load. The composing app owns one flat roster plus the --dev switch
(hmr row and bundle watching are dev-graph decisions).

The rebuild signal is the webserver's own observation: in dev mode the
registry stat-polls each scanned bundle (fs.watchFile; polling because
network mounts deliver no inotify), re-hashes on change, and broadcasts
a rebuilt frame on the /plugins/events SSE channel only when the rev
actually changed. Watch membership follows the table across rescans;
dispose drops all watches; a torn read self-heals on the next tick.
The POST /plugins/rebuilt endpoint is gone — builders and the host
share zero protocol. dsh web --dev logs the watched bundle list and
each rebuilt id with its rev transition.
This commit is contained in:
imccyu
2026-07-23 21:56:18 +08:00
parent c2e0c16d6a
commit fb47f61a83
16 changed files with 563 additions and 312 deletions

View File

@@ -68,9 +68,6 @@
{
"path": "../../fs/tool-fs-search"
},
{
"path": "../../context/workspace-context"
},
{
"path": "../../llm/token-meter"
},
@@ -124,33 +121,6 @@
},
{
"path": "../../../vendor/loader"
},
{
"path": "../../client/connection"
},
{
"path": "../../client/runtime"
},
{
"path": "../../client/ui-theme"
},
{
"path": "../../client/i18n"
},
{
"path": "../../client/ui-layout"
},
{
"path": "../../client/ui-sidebar"
},
{
"path": "../../client/ui-conversation"
},
{
"path": "../../client/ui-question"
},
{
"path": "../../client/ui-trajectory"
}
]
}