@dotobokuri/fleet-console 1.16.1 → 1.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +5 -2
- package/dist/cli.mjs +499 -299
- package/dist/client/assets/{_baseUniq-Bvbp_jlP.js → _baseUniq-B7sqIsqm.js} +1 -1
- package/dist/client/assets/{arc-BIE5Buf8.js → arc-CvtYLN8U.js} +1 -1
- package/dist/client/assets/{architectureDiagram-Q4EWVU46-D5XMG93D.js → architectureDiagram-Q4EWVU46-rlI7pNrR.js} +1 -1
- package/dist/client/assets/{blockDiagram-DXYQGD6D-DF6L79td.js → blockDiagram-DXYQGD6D-nwx9BNRz.js} +1 -1
- package/dist/client/assets/{c4Diagram-AHTNJAMY-DhF1h0OW.js → c4Diagram-AHTNJAMY-CRL_0Ism.js} +1 -1
- package/dist/client/assets/channel-Ct9EqqyG.js +1 -0
- package/dist/client/assets/{chunk-4BX2VUAB-HIDhmpsY.js → chunk-4BX2VUAB-DEkncDR3.js} +1 -1
- package/dist/client/assets/{chunk-4TB4RGXK-WM3UvlRe.js → chunk-4TB4RGXK-Bnot0Ti1.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-D9kCAM0-.js → chunk-55IACEB6-EgKmMTlI.js} +1 -1
- package/dist/client/assets/{chunk-EDXVE4YY-CHGSf6YA.js → chunk-EDXVE4YY-BKiKnVQE.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-saa1UCmo.js → chunk-FMBD7UC4-BRC398vL.js} +1 -1
- package/dist/client/assets/{chunk-OYMX7WX6-BrlxxClZ.js → chunk-OYMX7WX6-D82gQaXN.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-CVnd5MX8.js → chunk-QZHKN3VN-BYdI5fky.js} +1 -1
- package/dist/client/assets/{chunk-YZCP3GAM-BpsFNlbM.js → chunk-YZCP3GAM-BhBgOoc0.js} +1 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-CPMS8Qpo.js +1 -0
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-CPMS8Qpo.js +1 -0
- package/dist/client/assets/clone-C5XNYXHD.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-AdFIrmD1.js → cose-bilkent-S5V4N54A-J8dfEdWD.js} +1 -1
- package/dist/client/assets/{dagre-KV5264BT-YPE_DPjG.js → dagre-KV5264BT-zGd_6_Kv.js} +1 -1
- package/dist/client/assets/{diagram-5BDNPKRD-sW7JSe_o.js → diagram-5BDNPKRD-BQpQGgZ3.js} +1 -1
- package/dist/client/assets/{diagram-G4DWMVQ6-CdoUA7HM.js → diagram-G4DWMVQ6-BbgPVITm.js} +1 -1
- package/dist/client/assets/{diagram-MMDJMWI5-Dr_Q44k2.js → diagram-MMDJMWI5-lJsMf0Ic.js} +1 -1
- package/dist/client/assets/{diagram-TYMM5635-CgWLDdO4.js → diagram-TYMM5635-BpEKTzOh.js} +1 -1
- package/dist/client/assets/{erDiagram-SMLLAGMA-BS5jKQII.js → erDiagram-SMLLAGMA-CHHVwJ_a.js} +1 -1
- package/dist/client/assets/{flowDiagram-DWJPFMVM-DM_ZIfsi.js → flowDiagram-DWJPFMVM-Cun8a4NF.js} +1 -1
- package/dist/client/assets/{ganttDiagram-T4ZO3ILL-D1ASi2pt.js → ganttDiagram-T4ZO3ILL-CGCwH_yf.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-DTS8qu5f.js → gitGraphDiagram-UUTBAWPF-BkY4qdoV.js} +1 -1
- package/dist/client/assets/{graph-BSP3V12O.js → graph-HbRzXQtt.js} +1 -1
- package/dist/client/assets/{index-DNtncJ2Y.css → index-CfNSyAUJ.css} +1 -1
- package/dist/client/assets/index-CzCMC0e-.js +402 -0
- package/dist/client/assets/{infoDiagram-42DDH7IO-C6rS44Vv.js → infoDiagram-42DDH7IO-B21Xtz8v.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-BysMV0Yj.js → ishikawaDiagram-UXIWVN3A-DiABngEH.js} +1 -1
- package/dist/client/assets/{journeyDiagram-VCZTEJTY-Cq1tDTjK.js → journeyDiagram-VCZTEJTY-BKZ-Uivu.js} +1 -1
- package/dist/client/assets/{kanban-definition-6JOO6SKY-CV7fuoIo.js → kanban-definition-6JOO6SKY-CoJzTtsH.js} +1 -1
- package/dist/client/assets/{layout-mBwNdhT9.js → layout-D5tmQpxt.js} +1 -1
- package/dist/client/assets/{linear-B8Mqzhqu.js → linear-B_riNOXk.js} +1 -1
- package/dist/client/assets/{mermaid.core-mTVIRAe-.js → mermaid.core-CyRCP3U3.js} +4 -4
- package/dist/client/assets/{min-LkS4GBrL.js → min-Cn8LZZXB.js} +1 -1
- package/dist/client/assets/{mindmap-definition-QFDTVHPH-CuK4DHsN.js → mindmap-definition-QFDTVHPH-BN_7mZUt.js} +1 -1
- package/dist/client/assets/{pieDiagram-DEJITSTG-yKtYS0aG.js → pieDiagram-DEJITSTG-DPP2-sYA.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-34T5L4WZ-CQYBuUXw.js → quadrantDiagram-34T5L4WZ-CQ_oo-f9.js} +1 -1
- package/dist/client/assets/{requirementDiagram-MS252O5E-DExCsGb_.js → requirementDiagram-MS252O5E-BkGq7nxD.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-XADWPNL6-kqoN-VmQ.js → sankeyDiagram-XADWPNL6-BVcoktBR.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-FGHM5R23-Dsk6zp0F.js → sequenceDiagram-FGHM5R23-B5rr_VYJ.js} +1 -1
- package/dist/client/assets/{stateDiagram-FHFEXIEX-Bg-kY2ci.js → stateDiagram-FHFEXIEX-BV8RqzB9.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-Bx_fpQWQ.js +1 -0
- package/dist/client/assets/{timeline-definition-GMOUNBTQ-DkeszYPW.js → timeline-definition-GMOUNBTQ-CJ8TM-3t.js} +1 -1
- package/dist/client/assets/{vennDiagram-DHZGUBPP-a9aq_CaS.js → vennDiagram-DHZGUBPP-BETSq-Pu.js} +1 -1
- package/dist/client/assets/{wardley-RL74JXVD-BioIIFLl.js → wardley-RL74JXVD-CyT2qapq.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-NUSXRM2D-Bpy2nx7x.js → wardleyDiagram-NUSXRM2D-CWHaiUEG.js} +1 -1
- package/dist/client/assets/{xychartDiagram-5P7HB3ND-N7vhpanC.js → xychartDiagram-5P7HB3ND-oVPlZ_Yn.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/fleet-plugins/diff/routes.mjs +224 -57
- package/dist/fleet-plugins/file-explorer/routes.mjs +130 -0
- package/dist/fleet-plugins/skills/routes.mjs +17052 -0
- package/dist/fleet-plugins/terminal/routes.mjs +164 -67
- package/package.json +1 -1
- package/dist/client/assets/channel-BSjWiXu9.js +0 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-DIEVc5gp.js +0 -1
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-DIEVc5gp.js +0 -1
- package/dist/client/assets/clone-VuQnnBA0.js +0 -1
- package/dist/client/assets/index-D3a51i1X.js +0 -402
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-Dlqv8bJ9.js +0 -1
package/AGENTS.md
CHANGED
|
@@ -125,7 +125,9 @@ These guards are robustness measures on top of the trust model, not a replacemen
|
|
|
125
125
|
- `notifications.emit` feeds `operationNotifications` (ALERTS are shown only for Operations that are not currently visible).
|
|
126
126
|
- `status.set` / `status.clear` feed `operationStatus`, which drives the running-panel perimeter progress rim and beacon.
|
|
127
127
|
- `theme` is passed to plugins through `OperationRenderContext` (not through a capability), so plugins receive the current `ConsoleTheme` reactively on every canvas render. Host token boundaries remain unchanged: these are transient client-only values; no tokens, paths, or credentials cross into plugin code.
|
|
128
|
-
- Terminal renderer and font preferences are **not** in `OperationRenderContext`. The Terminal plugin owns these prefs end-to-end through a module-scoped `useSyncExternalStore` store (`client/shared/terminal-prefs-store.ts`)
|
|
128
|
+
- Terminal renderer and font preferences are **not** in `OperationRenderContext`. The Terminal plugin owns these prefs end-to-end through a module-scoped `useSyncExternalStore` store (`client/shared/terminal-prefs-store.ts`). All mounted terminal panels subscribe directly and react instantly to settings changes. **Terminal Renderer** is persisted in localStorage under `fleet-plugin.terminal.renderer` (per-browser volatile). **Terminal Font** (name + size) is persisted on the console server under `plugins.terminal.font` via `ClientSettingsCapability` (`GET`/`PUT /api/v1/settings/plugins/terminal`); it survives browser changes and console restarts. On first load the store seeds the server from `fleet-plugin.terminal.font` localStorage if the server has no value (1-time migration), then removes the local key. `fleet-plugin.terminal.*` localStorage keys are Terminal plugin-owned; core and other plugins must not read or write them.
|
|
129
|
+
- **Preferences vs Settings semantics**: `ClientPreferencesCapability` is per-browser volatile (localStorage). `ClientSettingsCapability` is per-server durable (stored in the console `settings.json` `plugins` record; the server is the SSoT). Use preferences for transient display choices (e.g. renderer backend); use settings for durable configuration (e.g. font, feature toggles) that must survive browser changes and console restarts.
|
|
130
|
+
- **Plugin settings safety**: Values written through `ClientSettingsCapability` must not contain secrets, tokens, credentials, or raw filesystem paths. The Token Boundary applies to plugin settings payloads the same as to all other browser-facing payloads. Model API keys persist through `@dotobokuri/fleet-infra` auth storage, not plugin settings.
|
|
129
131
|
- The SDK contract is invariant. Host code may only extend capability implementations; it must not add new capability surface areas or require plugins to import core modules.
|
|
130
132
|
|
|
131
133
|
## Window System
|
|
@@ -157,6 +159,7 @@ Operation chrome (maximize, minimize, focus, and the Operations Left SideBar) is
|
|
|
157
159
|
- `../fleet-plugins/terminal/` — the built-in Terminal plugin package. It provides the Shell and Agent browser panels, plugin route handlers, launch metadata, and absorbed shared/server-shared/client-shared helpers for the single `terminal` plugin.
|
|
158
160
|
- `../fleet-plugins/diff/` — the built-in Diff plugin package. It owns git diff backend routes (`/plugins/diff/changed`, `/plugins/diff/file`), `isSafeGitRef` validation, and the Diff rail panel client. Server code (`server/`) and client code (`client/`) are self-contained; no git or file helpers live in `core/host/`.
|
|
159
161
|
- `../fleet-plugins/file-explorer/` — the built-in File Explorer plugin package. It owns file listing (`/plugins/file-explorer/files/list`), file reading (`/plugins/file-explorer/files/read`), image serving (`/plugins/file-explorer/files/image`), symlink-aware containment, and the File Explorer rail panel client. Server code (`server/`) and client code (`client/`) are self-contained.
|
|
162
|
+
- `../fleet-plugins/skills/` — the built-in Skills plugin package. It wraps the Vercel Labs `skills` CLI (pinned version, self-bootstrapped into the plugin data directory via `npm install --prefix --global=false --force=false` and executed directly as `node <…>/node_modules/skills/bin/cli.mjs` — never `npx`, whose multi-bin resolution breaks under non-default user npm configs) to provide skill list, install, update, remove, and SKILL.md preview routes under `/plugins/skills/*`, proxies the skills.sh registry search API, manages an in-memory job registry with 750ms cursor polling, and renders the Skills Activity Rail panel (Installed/Find tabs, inline install flow, reading overlay).
|
|
160
163
|
- `tests/` — vitest suites for the reducer, SSE parser, store, terminal, and CLI lifecycle.
|
|
161
164
|
|
|
162
165
|
## Tech Stack (deliberate)
|
|
@@ -237,7 +240,7 @@ imports -> types/interfaces -> constants -> functions/components
|
|
|
237
240
|
|
|
238
241
|
## Build & Serve Contract
|
|
239
242
|
|
|
240
|
-
- `pnpm --filter @dotobokuri/fleet-console build` runs tsup (`core/host/cli.ts` → `dist/cli.mjs`, `core/host/cli-bin.ts` → `dist/cli-bin.mjs`, `../fleet-plugins/terminal/routes.ts` → `dist/fleet-plugins/terminal/routes.mjs`, `../fleet-plugins/diff/routes.ts` → `dist/fleet-plugins/diff/routes.mjs`, `../fleet-plugins/file-explorer/routes.ts` → `dist/fleet-plugins/file-explorer/routes.mjs`) and Vite (`core/client/` → `dist/client/` with `base: "/console/"`). There is **no** embed step: the console backend serves its own `dist/client/` directly under `/console/` (loopback-only). Changing `base` or the output layout breaks the static-serving contract.
|
|
243
|
+
- `pnpm --filter @dotobokuri/fleet-console build` runs tsup (`core/host/cli.ts` → `dist/cli.mjs`, `core/host/cli-bin.ts` → `dist/cli-bin.mjs`, `../fleet-plugins/terminal/routes.ts` → `dist/fleet-plugins/terminal/routes.mjs`, `../fleet-plugins/diff/routes.ts` → `dist/fleet-plugins/diff/routes.mjs`, `../fleet-plugins/file-explorer/routes.ts` → `dist/fleet-plugins/file-explorer/routes.mjs`, `../fleet-plugins/skills/routes.ts` → `dist/fleet-plugins/skills/routes.mjs`) and Vite (`core/client/` → `dist/client/` with `base: "/console/"`). There is **no** embed step: the console backend serves its own `dist/client/` directly under `/console/` (loopback-only). Changing `base` or the output layout breaks the static-serving contract.
|
|
241
244
|
- This package **is** the HTTP server. The backend owns its own loopback server, lifecycle, and `/console/` serving; the CLI starts and stops that server rather than launching a separate daemon.
|
|
242
245
|
- **npm publish contract**: tsup bundles every `@dotobokuri/*` workspace dependency and `@fleet-console/sdk` inline (`noExternal: [/^@dotobokuri\//, /^@fleet-console\/sdk(\/|$)/]`) so the published package is self-contained; only `node-pty` (native binding) and `ws` (dynamic `require`) stay external. `scripts/publish-fleet-console.mjs` drops `private`, replaces `dependencies` with just those two externals, and injects the `node-pty` `postinstall`. Do **not** add a statically-imported workspace package without confirming it bundles, and re-verify the published manifest with `npm pack` after touching `noExternal` or runtime deps — leaving a `workspace:*` dependency in the manifest breaks `npm install`.
|
|
243
246
|
- **Plugin native/external module resolution**: a built-in plugin's server code that `require()`s a native or `external` module (`node-pty`, `ws`) must resolve it against the `@dotobokuri/fleet-console` package, not via a bare `createRequire(import.meta.url)`. Plugins load from an esbuild **cache bundle** (`node_modules/.cache/fleet-console-plugin-*`), so a `createRequire` rooted there can resolve a **stale copy from a parent-workspace `node_modules`** and fail at runtime with `posix_spawnp failed` — typecheck and build stay green, so only a runtime/e2e run catches it. The Terminal plugin's `server/shared/pty.ts` (`findConsolePackageRequire`) is the reference, guarded by a `launch.test.ts` regression test.
|