A plugin update applied mid-session (/plugin followed by /reload-plugins) fires no SessionStart, so the bootstrap's version handover never runs and the dashboard server keeps executing a cache directory Claude Code has already discarded. /ccam-open then rebuilt the bundle from the new root against that old server, and the new bundle called routes the old server never had: /api/lanes/pipeline-stats fell through to /:id and rendered "lane not found", /api/workflows/skill-usage fell through to the SPA catch-all and broke JSON.parse on the returned HTML. Both Workflows panels showed an error while the code they needed was sitting on disk. plugin-open now re-runs bootstrap when the live server's recorded pluginRoot differs from the current one, or when no server is live at all. Bootstrap already owns the stop/start and the dependency install the new root may need, so this only restores the trigger that a mid-session update skips.
1.1 KiB
description
| description |
|---|
| Rebuild the dashboard UI and print its URL |
Rebuild the dashboard bundle, then print the URL. Always forces a rebuild so a
stale bundle (e.g. after a fix commit landed but the bootstrap's build predates
it) never serves silently. Also finishes the build if the bootstrap's own
attempt failed (check ~/.claude/agent-dashboard/runtime/client-build.log).
node "${CLAUDE_PLUGIN_ROOT}/scripts/plugin-open.js" --force
Install + build takes a few minutes if the client toolchain isn't already
installed; otherwise the rebuild itself takes ~10-15s. The server serves from
that directory, so it usually needs no restart — but if it is down, or still
running from a plugin root a mid-session /plugin update retired, the command
re-runs bootstrap first and prints Server restarted on the current plugin version. (without it, the fresh bundle would call routes that old server
never had).
Then help the user open it:
uname -s
Darwin→open <url>Linux→xdg-open <url>- otherwise → tell them to open the URL in a browser.
Keep the output to a few lines.