@dotobokuri/fleet-console 1.17.1 → 1.18.0
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 -5
- package/dist/cli.d.ts +0 -2
- package/dist/cli.mjs +1055 -2270
- package/dist/client/assets/{_baseUniq-B7sqIsqm.js → _baseUniq-DFEDX4NY.js} +1 -1
- package/dist/client/assets/{arc-CvtYLN8U.js → arc-CGwMrR6o.js} +1 -1
- package/dist/client/assets/{architectureDiagram-Q4EWVU46-rlI7pNrR.js → architectureDiagram-Q4EWVU46-BqLyvIOK.js} +1 -1
- package/dist/client/assets/{blockDiagram-DXYQGD6D-nwx9BNRz.js → blockDiagram-DXYQGD6D-DoiPMLdv.js} +1 -1
- package/dist/client/assets/{c4Diagram-AHTNJAMY-CRL_0Ism.js → c4Diagram-AHTNJAMY-DfGxDkah.js} +1 -1
- package/dist/client/assets/channel-DlT8zCVq.js +1 -0
- package/dist/client/assets/{chunk-4BX2VUAB-DEkncDR3.js → chunk-4BX2VUAB-3zXv74oY.js} +1 -1
- package/dist/client/assets/{chunk-4TB4RGXK-Bnot0Ti1.js → chunk-4TB4RGXK-MkXUmjUE.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-EgKmMTlI.js → chunk-55IACEB6-mhkgqlI_.js} +1 -1
- package/dist/client/assets/{chunk-EDXVE4YY-BKiKnVQE.js → chunk-EDXVE4YY-B0_ZDihs.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-BRC398vL.js → chunk-FMBD7UC4-BQAuE4pL.js} +1 -1
- package/dist/client/assets/{chunk-OYMX7WX6-D82gQaXN.js → chunk-OYMX7WX6-CY8Eyj9X.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-BYdI5fky.js → chunk-QZHKN3VN-CaZoMwKH.js} +1 -1
- package/dist/client/assets/{chunk-YZCP3GAM-BhBgOoc0.js → chunk-YZCP3GAM-DV1YOEUH.js} +1 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-B-UN9f9r.js +1 -0
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-B-UN9f9r.js +1 -0
- package/dist/client/assets/clone-CDPRFCO0.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-J8dfEdWD.js → cose-bilkent-S5V4N54A-Cy3v0C_N.js} +1 -1
- package/dist/client/assets/{dagre-KV5264BT-zGd_6_Kv.js → dagre-KV5264BT-CGJ6x_VR.js} +1 -1
- package/dist/client/assets/{diagram-5BDNPKRD-BQpQGgZ3.js → diagram-5BDNPKRD-MyyXeHKQ.js} +1 -1
- package/dist/client/assets/{diagram-G4DWMVQ6-BbgPVITm.js → diagram-G4DWMVQ6-D52Q2132.js} +1 -1
- package/dist/client/assets/{diagram-MMDJMWI5-lJsMf0Ic.js → diagram-MMDJMWI5-DCypusCr.js} +1 -1
- package/dist/client/assets/{diagram-TYMM5635-BpEKTzOh.js → diagram-TYMM5635-c5UBqE9-.js} +1 -1
- package/dist/client/assets/{erDiagram-SMLLAGMA-CHHVwJ_a.js → erDiagram-SMLLAGMA-BlF0Lxy7.js} +1 -1
- package/dist/client/assets/{flowDiagram-DWJPFMVM-Cun8a4NF.js → flowDiagram-DWJPFMVM-lo8xyzfx.js} +1 -1
- package/dist/client/assets/{ganttDiagram-T4ZO3ILL-CGCwH_yf.js → ganttDiagram-T4ZO3ILL-BXVZMpon.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-BkY4qdoV.js → gitGraphDiagram-UUTBAWPF-DB1A6uYk.js} +1 -1
- package/dist/client/assets/{graph-HbRzXQtt.js → graph-Ck2AX1p2.js} +1 -1
- package/dist/client/assets/index-Cf9MmpwN.css +1 -0
- package/dist/client/assets/index-DWgndVkX.js +404 -0
- package/dist/client/assets/{infoDiagram-42DDH7IO-B21Xtz8v.js → infoDiagram-42DDH7IO-NEVE42fw.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-DiABngEH.js → ishikawaDiagram-UXIWVN3A-MbFr_8pL.js} +1 -1
- package/dist/client/assets/{journeyDiagram-VCZTEJTY-BKZ-Uivu.js → journeyDiagram-VCZTEJTY-Sq2ja3q8.js} +1 -1
- package/dist/client/assets/{kanban-definition-6JOO6SKY-CoJzTtsH.js → kanban-definition-6JOO6SKY-C63qPhtK.js} +1 -1
- package/dist/client/assets/{layout-D5tmQpxt.js → layout-CFEuVj4N.js} +1 -1
- package/dist/client/assets/{linear-B_riNOXk.js → linear-B626G8Op.js} +1 -1
- package/dist/client/assets/{mermaid.core-CyRCP3U3.js → mermaid.core-BT7SVKBR.js} +4 -4
- package/dist/client/assets/{min-Cn8LZZXB.js → min-MbEOApMw.js} +1 -1
- package/dist/client/assets/{mindmap-definition-QFDTVHPH-BN_7mZUt.js → mindmap-definition-QFDTVHPH-DMpht5Mg.js} +1 -1
- package/dist/client/assets/{pieDiagram-DEJITSTG-DPP2-sYA.js → pieDiagram-DEJITSTG-B4XS0haZ.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-34T5L4WZ-CQ_oo-f9.js → quadrantDiagram-34T5L4WZ-CReo5Ajb.js} +1 -1
- package/dist/client/assets/{requirementDiagram-MS252O5E-BkGq7nxD.js → requirementDiagram-MS252O5E-A50aqG-K.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-XADWPNL6-BVcoktBR.js → sankeyDiagram-XADWPNL6-471VOdlW.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-FGHM5R23-B5rr_VYJ.js → sequenceDiagram-FGHM5R23-BAvOyUC-.js} +1 -1
- package/dist/client/assets/{stateDiagram-FHFEXIEX-BV8RqzB9.js → stateDiagram-FHFEXIEX-gCtZrvR-.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-Bdb0YU66.js +1 -0
- package/dist/client/assets/{timeline-definition-GMOUNBTQ-CJ8TM-3t.js → timeline-definition-GMOUNBTQ-CTHf-uxq.js} +1 -1
- package/dist/client/assets/{vennDiagram-DHZGUBPP-BETSq-Pu.js → vennDiagram-DHZGUBPP-5gvXi0dO.js} +1 -1
- package/dist/client/assets/{wardley-RL74JXVD-CyT2qapq.js → wardley-RL74JXVD-XR-qQTWZ.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-NUSXRM2D-CWHaiUEG.js → wardleyDiagram-NUSXRM2D-EwPsMHdt.js} +1 -1
- package/dist/client/assets/{xychartDiagram-5P7HB3ND-oVPlZ_Yn.js → xychartDiagram-5P7HB3ND-CePwuUb7.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/fleet-plugins/diff/routes.mjs +76 -21
- package/dist/fleet-plugins/skills/routes.mjs +7 -118
- package/dist/fleet-plugins/terminal/routes.mjs +281 -974
- package/package.json +1 -1
- package/dist/client/assets/channel-Ct9EqqyG.js +0 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-CPMS8Qpo.js +0 -1
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-CPMS8Qpo.js +0 -1
- package/dist/client/assets/clone-C5XNYXHD.js +0 -1
- package/dist/client/assets/index-CfNSyAUJ.css +0 -1
- package/dist/client/assets/index-CzCMC0e-.js +0 -402
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-Bx_fpQWQ.js +0 -1
package/AGENTS.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
- Console durable state is persisted in the console data directory's `state.json` (`createDurableJsonStore`, `sensitivity: "sensitive"`). The data directory follows the release channel: published stable builds use `~/.fleet/console/state.json`, while unpublished local runs (`pnpm fleet-console`/`tsx`) use the project workspace `.fleet/console/state.json` co-located with the lock, so a dev console never shares Theaters/Operations with a globally installed one. Setting `FLEET_CONSOLE_DIR` relocates the durable state (and captures) into that directory too — co-located with the lock, matching the runtime-file escape hatch — so a read-only checkout can point its writable runtime slot away from the project tree. The console server is the sole writer; the file stores `{ version: 2, theaters, operations }`. On startup the server restores Theaters and Operations into a dormant state (no PTY), and Operation state survives console restarts.
|
|
12
12
|
- A capture inbound channel writes `{fleetSessionId}.json` under the same console data directory's `captures/` (`~/.fleet/console/captures/` for stable, the project `.fleet/console/captures/` for local runs). Provider CLI SessionStart hooks record provider session ids via `fleet-console hook capture-session <provider>`; the server reads the capture file, merges the provider session id into durable state, and cleans up the capture file. This is separate from the console lock file in `os.tmpdir()` (stable) / the project `.fleet/console` lock (local).
|
|
13
13
|
- The React SPA served from the console backend at `/console/`: layout, components, styles, and visual identity. The global navigation bar owns **Theater** selection — a project root directory that groups console-owned terminal sessions and Codex wiki context. The Operations surface renders a single spatial Map canvas of terminal sessions filtered to the active Theater; operators create sessions directly on the canvas (Shift-drag or right-click), choosing an Agent CLI before a new terminal session starts. Each session panel lists its active carrier jobs in a floating job dock, and selecting a job opens a centered streaming overlay scoped to that session's jobs. The canvas also hosts free shell panels (right-click) that resolve their cwd from the active Theater. A console-wide Operation quick-search (Cmd/Ctrl+K) searches terminal sessions across all Theaters, switches to the selected Operation's Theater, selects that Operation, and navigates to `/operations`; on `/codex` paths the same shortcut yields to Codex's own search.
|
|
14
|
-
- The built-in Terminal plugin (`runtime/fleet-plugins/terminal`, package `@fleet-plugins/terminal`): one plugin id, `terminal`, owns the Shell and Agent operation kinds plus plugin-scoped WebSocket, ticket registry, PTY session lifecycle, and launch runtime. It absorbs the server-shared and client-shared helpers, keeps operation type ids `shell` and `agent` (carrier streaming renders inside the Agent panel as
|
|
14
|
+
- The built-in Terminal plugin (`runtime/fleet-plugins/terminal`, package `@fleet-plugins/terminal`): one plugin id, `terminal`, owns the Shell and Agent operation kinds plus plugin-scoped WebSocket, ticket registry, PTY session lifecycle, and launch runtime. It absorbs the server-shared and client-shared helpers, keeps operation type ids `shell` and `agent` (carrier streaming renders inside the Agent panel as a resident collapsible stream dock pinned to the panel bottom — live output always visible without a click, per-browser collapsed state persisted — plus a detail modal for full track history accessed via the dock header, not a separate child operation), serves plugin HTTP routes under `/plugins/terminal/{shell,agent}/*`, and uses the plugin-scoped `ws` route for PTY transport. The Shell launch label is `Shell`.
|
|
15
15
|
- The Codex/Fleet Wiki web surface under `/console/codex`: the console-owned Codex server gateway, workspace registry, wiki API routes, and migrated vanilla TypeScript Maritime Codex client. The console-level **TheaterRegistry** is the source of truth for project roots and does not require a Fleet Wiki knowledge root; the Codex `WorkspaceRegistry` is the subset of Theaters whose directories contain a Fleet Wiki knowledge root. Codex is mounted as a Right Rail built-in panel under the Fleet Console GNB without an iframe or proxy daemon.
|
|
16
16
|
- The observer-side client contract: REST snapshot fetches and the SSE consumption loop with reconnect/resync.
|
|
17
17
|
- The streaming view model: the event reducer that folds `CarrierJobStreamEvent` timelines into per-job, per-track views with incremental text accumulation.
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
|
|
49
49
|
- `runtime/fleet-console/core/host/**` may import `@dotobokuri/fleet-carriers` public root exports to consume Carrier Readiness read models and mutate global Carrier Settings through the carrier store.
|
|
50
50
|
- `runtime/fleet-console/core/client/**` must not import `@dotobokuri/fleet-carriers`, carrier persona modules, deep carrier paths, or Node-only carrier runtime modules.
|
|
51
|
-
- Fleet Console may render and edit display-safe carrier settings data such as carrier id, display name, role/category, resolved CLI/model/effort, Task Force backend count/configuration
|
|
51
|
+
- Fleet Console may render and edit display-safe carrier settings data such as carrier id, display name, role/category, resolved CLI/model/effort, and Task Force backend count/configuration.
|
|
52
52
|
- `fleet-carriers` remains the source of truth for carrier persona defaults, carrier-store interpretation, store mutation, and carrier read-model construction. Console must not copy or reconstruct carrier persona policy or carrier runtime state.
|
|
53
53
|
- Console must not deep-import `@dotobokuri/fleet-carriers/src/**`, `packages/fleet-carriers/src/**`, `runtime/fleet-cli/**`, or `@dotobokuri/fleet-cli`.
|
|
54
54
|
- Carrier readiness/settings browser payloads must not serialize prompt bodies, raw persona instructions, executor tool allowlists, tokens, credential values, auth env details, terminal/session/admin tickets, or raw filesystem paths.
|
|
@@ -56,7 +56,6 @@
|
|
|
56
56
|
## Settings Plugin Boundary
|
|
57
57
|
|
|
58
58
|
- Core Settings owns the `Console` group and core console settings such as the console port controls.
|
|
59
|
-
- Model sign-in settings are Terminal plugin-owned, not core-owned.
|
|
60
59
|
- Plugin Settings sections are discovered from `plugins[].settingsSections` and rendered under the `Plugins` group. The host derives plugin ownership from the plugin registration id and normalizes plugin active ids as `${pluginId}:${sectionId}`.
|
|
61
60
|
- SDK settings descriptors remain minimal: `{ id, title, render }`. Do not add grouping, ordering, plugin ownership, or sensitivity metadata to `SettingsSectionDescriptor`.
|
|
62
61
|
|
|
@@ -157,7 +156,7 @@ Operation chrome (maximize, minimize, focus, and the Operations Left SideBar) is
|
|
|
157
156
|
- `core/host/` — Node-side backend and CLI lifecycle: the HTTP server (`server.ts`), security headers, static serving (`static-console.ts`), observer routes (including Theater registry and cascading Operation/capture removal), generic plugin route and upgrade registration, Theater folder routes (`theater-folder-browser.ts`, `theater-folder-grants.ts`), the SSE helper, `codex/` (Fleet Wiki/Codex API gateway and workspace registration), `theaters.ts` (console-level in-memory TheaterRegistry backed by durable state), `theater.ts` (Theater id hash, realpath canonicalization, and label helpers), the lifecycle modules (`lock.ts`, `paths.ts`, `health.ts`, `stale.ts`), the self-update orchestrator (`update-apply.ts`), and the CLI (`cli.ts`, `cli-bin.ts`, `browser.ts`, `help-style.ts`). Terminal PTY tickets, WebSocket upgrade, session lifecycle, shell launch, and agent launch live in the Terminal plugin under `../fleet-plugins/terminal/server/`. Built by tsup to `dist/cli.mjs` and `dist/cli-bin.mjs`. `help-style.ts` is a CLI-help-only **self-hosted** style helper shared by the console and Codex compatibility CLIs; it must not import from `fleet-cli`, `packages/*`, or `core/client/`, and changes to the shared banner/SGR vocabulary require manual sync across those copies.
|
|
158
157
|
- `core/client/` — the Vite React SPA (`core/client/src/`, `core/client/index.html`, `core/client/vite.config.ts`). Must not import Node-only modules or the console backend (`core/host/`).
|
|
159
158
|
- `../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.
|
|
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
|
+
- `../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/`. **Extended Bridge layout**: selecting a file expands the panel 400 px to the left via `ctx.requestExtraWidth(400)` (single `useLayoutEffect` call site) and renders an inline two-pane layout — left diff document pane (`hunk-view.tsx` with `hunk-parse.ts` line-number gutter and `@@` summary labels) / right file list pane. A 4 px drag divider between the panes adjusts the split ratio (persisted per browser as `PREFS_SPLIT_RATIO`, default 0.56 ≈ a 400 px document pane at the extended width; pane minimums 140 px document / 220 px list, so the document pane yields first under viewport clamping, and dragging is a no-op when the container is narrower than both minimums combined). Deselecting or closing resets to 0. The repository picker opens as an opaque in-panel Command Deck (`var(--ink-deep)` background, `inset: 0`) with worktree children always rendered inline, ROOT badge = brass, WORKTREE badge = aurora, and DEPTH + Rescan footer preserved.
|
|
161
160
|
- `../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
161
|
- `../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).
|
|
163
162
|
- `tests/` — vitest suites for the reducer, SSE parser, store, terminal, and CLI lifecycle.
|
|
@@ -197,7 +196,8 @@ These CSS variables are declared in `rail.css` and must not be inlined elsewhere
|
|
|
197
196
|
- Plugins — both statically-resolved built-in plugins (File Explorer, Diff) and external plugins — register rail panels via `FleetClientPlugin.railPanels[]`, which flow through `rail-registry.ts` → `useRailPanels()` and render **after** the divider. `right-rail.tsx` resolves the active panel against the combined `[...builtInPanels, ...pluginPanels]` set.
|
|
198
197
|
- Rail panel id deduplication is enforced in `plugin-registry.ts#createPluginRegistry`; the first plugin wins and subsequent duplicates are warned and skipped.
|
|
199
198
|
- `apiVersion` compatibility gate applies to external plugins only (enforced in `plugin-registry.ts#loadExternalPlugin`).
|
|
200
|
-
- `RailPanelDescriptor.preferredExtraWidth?: number` — when set, the host adds this many px to the active panel slot width; the host reads only the declared value and remains panel-id-agnostic (
|
|
199
|
+
- `RailPanelDescriptor.preferredExtraWidth?: number` — **static extra width**: when set, the host adds this many px to the active panel slot width at all times while the panel is open; the host reads only the declared value and remains panel-id-agnostic (additive with `useCodexSplitExtraWidth`).
|
|
200
|
+
- `RailPanelContext.requestExtraWidth?: (px: number | null) => void` — **dynamic extra width**: the active panel calls this to request additional width based on its own state changes (e.g. file selection). SSoT is `rail-store.ts` `panelExtraWidth`; semantics: positive integer = extra px to add, `null` = reset to 0. Guards: (1) only the active panelId is honoured (stale-closure calls from inactive panels are dropped); (2) `px` is normalized to `Math.max(0, Math.round(px))`, non-finite and null → 0; (3) viewport clamp: `Math.min(normalized, Math.max(0, window.innerWidth - 548))` (skipped in Node/test env); (4) same-value no-op (no listener notify); (5) render-time backstop: `.right-rail-panel-slot` carries `max-width: calc(100vw - 148px)` so a viewport shrink after the request never pushes the slot over the canvas. Reset paths: `setActiveRailPanel`, `toggleRailPanel`, and `closeRailPanel` all zero `panelExtraWidth` on state change. Value is transient — never persisted to localStorage. Call site must be a single `useLayoutEffect` keyed on state that triggers the request; do not scatter calls across event handlers.
|
|
201
201
|
|
|
202
202
|
**Layout contract**:
|
|
203
203
|
|
package/dist/cli.d.ts
CHANGED
|
@@ -84,8 +84,6 @@ declare function parseConsoleCliMode(argv: readonly string[]): ConsoleCliMode;
|
|
|
84
84
|
declare function parseConsoleHookCommand(argv: readonly string[]): {
|
|
85
85
|
readonly command: "capture-session";
|
|
86
86
|
readonly provider: string;
|
|
87
|
-
} | {
|
|
88
|
-
readonly command: "subagents-context";
|
|
89
87
|
} | {
|
|
90
88
|
readonly command: "turn-start";
|
|
91
89
|
} | {
|