@aiwg/cockpit 2026.6.3

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.
Files changed (49) hide show
  1. package/README.md +337 -0
  2. package/bridge/package.json +13 -0
  3. package/bridge/src/public/index.html +395 -0
  4. package/bridge/src/server.mjs +1132 -0
  5. package/bridge/src/smoke.mjs +158 -0
  6. package/contrib/aiwg-core.json +15 -0
  7. package/contrib/contribution.schema.json +69 -0
  8. package/desktop/README.md +42 -0
  9. package/desktop/src-tauri/Cargo.toml +17 -0
  10. package/desktop/src-tauri/build.rs +3 -0
  11. package/desktop/src-tauri/frontend/index.html +11 -0
  12. package/desktop/src-tauri/src/main.rs +55 -0
  13. package/desktop/src-tauri/tauri.conf.json +20 -0
  14. package/package.json +49 -0
  15. package/runtime-docs/README.md +38 -0
  16. package/shell-core/runtime.mjs +45 -0
  17. package/shell-core/smoke.mjs +36 -0
  18. package/vscode/README.md +25 -0
  19. package/vscode/extension.js +59 -0
  20. package/vscode/package.json +29 -0
  21. package/web/dist/assets/index-B5anpdS1.js +67 -0
  22. package/web/dist/assets/index-CP3BF6uZ.css +32 -0
  23. package/web/dist/index.html +14 -0
  24. package/web/index.html +13 -0
  25. package/web/package.json +31 -0
  26. package/web/src/App.test.tsx +237 -0
  27. package/web/src/App.tsx +255 -0
  28. package/web/src/api.ts +20 -0
  29. package/web/src/components/Actions.tsx +60 -0
  30. package/web/src/components/Approvals.tsx +62 -0
  31. package/web/src/components/CapabilitySearch.tsx +73 -0
  32. package/web/src/components/Explore.tsx +41 -0
  33. package/web/src/components/Inventory.tsx +124 -0
  34. package/web/src/components/LaunchInstanceModal.test.tsx +97 -0
  35. package/web/src/components/LaunchInstanceModal.tsx +236 -0
  36. package/web/src/components/Library.tsx +76 -0
  37. package/web/src/components/Running.tsx +60 -0
  38. package/web/src/components/Sessions.test.tsx +125 -0
  39. package/web/src/components/Sessions.tsx +189 -0
  40. package/web/src/components/StartSessionModal.test.tsx +86 -0
  41. package/web/src/components/StartSessionModal.tsx +168 -0
  42. package/web/src/components/Welcome.tsx +474 -0
  43. package/web/src/main.tsx +11 -0
  44. package/web/src/styles.css +254 -0
  45. package/web/src/types.ts +47 -0
  46. package/web/src/useDebounce.ts +10 -0
  47. package/web/src/useSession.ts +220 -0
  48. package/web/src/util.test.ts +30 -0
  49. package/web/src/util.ts +17 -0
package/README.md ADDED
@@ -0,0 +1,337 @@
1
+ # AIWG Cockpit
2
+
3
+ A **UX-first control plane** over your AIWG install and the multi-stack agentic
4
+ sessions it runs — observe what agents are doing, take the wheel when you want, and
5
+ coordinate from one place. It fronts the CLI and the registry; it never replaces them.
6
+
7
+ > **The model (ADR):** the Cockpit is a *session-control surface, not a CLI runner*.
8
+ > **Agents run the CLI — you direct the agents.** An action button injects a command
9
+ > into an agentic session; the agent there runs it. The Cockpit only sources read-only
10
+ > catalog data for display. See `.aiwg/architecture/adr-cockpit-session-control-not-cli-runner.md`.
11
+
12
+ > **Opt-in, separately published.** Nothing here ships in the base `aiwg` npm package
13
+ > (guarded by `test/smoke/cockpit-base-footprint.test.js`).
14
+
15
+ ## Architecture
16
+
17
+ ```
18
+ operator / CLI: aiwg cockpit
19
+ │ spawns the Bridge; writes ~/.aiwg/cockpit/runtime/bridge.json (token+port, 0600)
20
+ ▼
21
+ ┌─────────────────────────────────────────────────────────────┐
22
+ │ Bridge (127.0.0.1, token-gated /api) │
23
+ │ · control plane: inventory, lifecycle, running, approvals, │
24
+ │ cost, sessions (create + attach_url), contributions │
25
+ │ · read-only catalog: aiwg discover / show (display only) │
26
+ │ · user asset library: clone/import/delete (never writes AIWG)│
27
+ │ · serves the built React app (token-injected) │
28
+ └─────────────────────────────────────────────────────────────┘
29
+ │ proxies / sources ▲ loads /?token=…
30
+ ▼ │
31
+ agentic-sandbox executor ┌──────┴──────┬───────────────┐
32
+ browser VS Code webview Tauri window
33
+ · A2A v2 + pty-ws/v1 (apps/cockpit/{web,vscode,desktop})
34
+ ```
35
+
36
+ - **Control plane** (lifecycle, approvals, actions) goes through the gated Bridge.
37
+ - **Data plane** (the pty session stream) connects browser→executor directly via the
38
+ `attach_url` the Bridge issues (WS masking differs per direction).
39
+
40
+ ## Surfaces (tabs)
41
+
42
+ | Tab | What it does |
43
+ |---|---|
44
+ | **Home** | Guided first-run: what-is-this, live status, the **Start a session** primary verb, first-run tour. |
45
+ | **Inventory** | Instances + lifecycle (Start/Stop/Destroy). |
46
+ | **Running** | Running work across stacks + cross-stack spend + per-task Stop. |
47
+ | **Sessions** | Live pty terminal — observe/drive, keyframe, non-destructive replay; inline **+ capability picker**. |
48
+ | **Approvals** | Unified HITL inbox (`hitl-prompt/v1`); decisions = operator authorization. |
49
+ | **Explore** | Read-only AIWG catalog — Tenor-style capability search (fortemi-react-modeled). |
50
+ | **Library** | Your own assets — clone from the catalog / import / remove. AIWG files never overwritten. |
51
+ | **Actions** | Contributed buttons that **inject a command into a session** (the agent runs it). |
52
+
53
+ ## Runtime, Session, and Trust Posture
54
+
55
+ Cockpit renders the runtime tier reported by agentic-sandbox instead of assuming
56
+ only VM/container instances. Known tiers are displayed as:
57
+
58
+ - `host` — full host access / least isolated. The host runtime daemon status is
59
+ shown separately from the Cockpit Bridge state (`available`, `stopped`,
60
+ `permission_denied`, `degraded`, etc.). Cockpit may show the documented
61
+ operator command to start or reconnect the daemon, but it does not silently
62
+ install or start it.
63
+ - `container` / `docker` — shared-kernel isolation.
64
+ - `vm` — stronger VM boundary.
65
+ - any future kind — opaque/degraded rather than broken UI.
66
+
67
+ Session creation uses sandbox-advertised backend pairs. Operators choose
68
+ direct/native or managed backends such as `tmux`, `screen`, or `zellij` when the
69
+ sandbox reports support. Attach remains observe-first; drive/control is explicit
70
+ and backend denial reasons stay visible in the session surface.
71
+
72
+ Transport trust is a separate badge from local Cockpit auth. Cockpit observes and
73
+ relays Bridge-to-agentic-sandbox posture (`loopback-rest`, UDS, vsock, mTLS local
74
+ CA, bootstrap-token enrollment, legacy shared-secret compatibility) without
75
+ storing tokens, private keys, CSRs, or bearer material in UI state, logs, or
76
+ activity payloads. Legacy shared-secret and TOFU paths render as compatibility or
77
+ degraded, not default-green. Agentic-sandbox owns transport provisioning and peer
78
+ identity enforcement; Cockpit owns visibility and audit presentation.
79
+
80
+ ## Run (dev/test, against a real agentic-sandbox executor)
81
+
82
+ One command (#1634) — prefers a reachable real executor, builds the web UI if
83
+ needed, and launches the Bridge on its off-range default port:
84
+
85
+ ```bash
86
+ npm --prefix apps/cockpit run dev # → apps/cockpit/scripts/cockpit-dev.sh
87
+ ```
88
+
89
+ It refuses to run against the bundled mock (automated-test-only). If no executor
90
+ is reachable, Bridge startup best-effort launches an installed `agentic-mgmt`
91
+ binary before serving Cockpit. Override `AIWG_COCKPIT_EXECUTOR_URL` (default
92
+ `http://127.0.0.1:8122`) or `PORT` (default `8140`). Set
93
+ `AIWG_COCKPIT_EXECUTOR_COMMAND` to pin the autostart command, or
94
+ `AIWG_COCKPIT_AUTOSTART_EXECUTOR=0` to require an already-running executor.
95
+ Equivalent manual steps:
96
+
97
+ ```bash
98
+ npm --prefix apps/cockpit run build:web # install + vite build → web/dist
99
+ AIWG_COCKPIT_EXECUTOR_URL=http://127.0.0.1:<executor-port> \
100
+ node apps/cockpit/bridge/src/server.mjs
101
+ ```
102
+
103
+ **Ports (sane defaults, #1634).** The agentic-sandbox canonical dev runner
104
+ (`management/dev.sh`) binds `8120` (gRPC) / `8121` (WS) / `8122` (HTTP). The
105
+ Bridge therefore defaults to **`8140`** — off that range — so `node
106
+ bridge/src/server.mjs` against a canonical executor on `8122` never collides.
107
+ Override with `PORT` (or `AIWG_COCKPIT_BRIDGE_PORT`); the Bridge refuses to start
108
+ on a reserved executor port (`8120/8121/8122`) rather than silently squat on it.
109
+
110
+ `EXECUTOR_URL` is accepted as a short alias, but new launch scripts should use
111
+ `AIWG_COCKPIT_EXECUTOR_URL`. Human dev/test launches must point at a real
112
+ agentic-sandbox executor. The bundled mock is reserved for automated tests and
113
+ PoCs; if a mock-like executor is detected, the Bridge refuses it unless
114
+ `AIWG_COCKPIT_ALLOW_MOCK_EXECUTOR=1` is set by an automated harness.
115
+
116
+ The Bridge keeps legacy admin-surface compatibility (`/admin/instances`,
117
+ `/admin/running`) for automated coverage, but dev/test launches should target
118
+ real agentic-sandbox v2 admin surfaces (`/api/v2/admin/instances`,
119
+ `/api/v2/admin/running`). Field normalization covers snake_case and camelCase
120
+ payloads so live sandboxes can evolve without breaking the operator UI; unknown
121
+ fields degrade to opaque posture rather than failing the screen.
122
+
123
+ The top-bar **Launch instance** command provisions additive runtime targets
124
+ through the real executor (`POST /api/v2/admin/instances`) for host, Docker, and
125
+ QEMU/VM launches. Cockpit does not replace attached sessions when provisioning;
126
+ it refreshes inventory and leaves concurrency and resource admission to
127
+ agentic-sandbox.
128
+
129
+ `aiwg cockpit` (the operator command) will wrap this; the Bridge serves the built
130
+ React app token-injected, falling back to a legacy page when no build is present.
131
+
132
+ ## Components
133
+
134
+ | Path | Role |
135
+ |---|---|
136
+ | `web/` | React 19 + Vite + TS UI (the surfaces above) |
137
+ | `mock-executor/` | **automated-test-only** wire-faithful agentic-sandbox A2A v2 stand-in (conformance 33/0/17). The Bridge refuses it for human launches (needs `AIWG_COCKPIT_ALLOW_MOCK_EXECUTOR=1`); a contract guard (#1636) pins its legacy `/admin/{running,approvals,cost}` divergence from real v2 so new drift fails CI. |
138
+ | `bridge/` | the registry-bound control-plane server + static serving |
139
+ | `shell-core/` | the cross-shell handshake (runtime token → connect) |
140
+ | `vscode/` · `desktop/` | VS Code extension + Tauri shells over the same Bridge |
141
+ | `contrib/` | declarative UI contributions + schema (actions inject commands) |
142
+ | `poc/` | Iteration-1 risk-gate PoCs (kill-bridge isolation, security) |
143
+
144
+ ## Verify
145
+
146
+ Tests run **at stages** — committed harnesses, never `/tmp` rigs (#1635):
147
+
148
+ | Stage | Command | Executor | CI |
149
+ |---|---|---|---|
150
+ | **Unit / integration** | `npm --prefix apps/cockpit run check` · `npx vitest run test/integration/cockpit-bridge.test.js` | **mock** (automated-test-only) | always |
151
+ | **Dev e2e** (full control-plane chain: health→inventory→create session→attach) | `npm run e2e:cockpit-dev` | **real**, safe-skip when absent | non-blocking |
152
+ | **Release matrix** (host/docker/vm + provider workload, #1621) | `npm run uat:cockpit-live:matrix` | **real**, all three families | release gate |
153
+
154
+ ```bash
155
+ npm --prefix apps/cockpit run check # build web + typecheck + render/a11y tests + smokes + PoCs
156
+ npx vitest run test/integration/cockpit-bridge.test.js # Bridge contract + mock guard + port defaults (CI)
157
+ npx vitest run test/smoke/cockpit-base-footprint.test.js # base-npm guard (CI)
158
+ npm run e2e:cockpit-dev # dev full-system e2e — real executor, skips cleanly
159
+ npm run uat:cockpit-live # opt-in real sandbox posture gate
160
+ npm run uat:cockpit-live:matrix # required host/docker/vm live matrix (#1621)
161
+ ```
162
+
163
+ The React UI is also browser-verified per surface (see `.playwright-mcp/cockpit-*.png`).
164
+ Conformance (`agentic-sandbox-conformance`) was 33 pass / 0 fail / 17 skip; the
165
+ Bridge-only additions since (session-create, library) don't touch the conformant
166
+ discovery/A2A/pty surfaces — re-run the harness after executor-surface changes.
167
+
168
+ `npm run uat:cockpit-live` targets `AIWG_COCKPIT_EXECUTOR_URL`, then
169
+ `AIWG_SANDBOX_ENDPOINT`, then `http://127.0.0.1:8122`. It skips with a clear
170
+ reason when no live sandbox is reachable so ordinary CI stays deterministic. Set
171
+ `AIWG_COCKPIT_LIVE_REQUIRED=1` for release/local validation where the live gate
172
+ must be green. The command writes `test-results/cockpit-live-uat.json` and
173
+ `test-results/cockpit-live-uat.md` by default; set
174
+ `AIWG_COCKPIT_LIVE_REPORT=.aiwg/testing/cockpit-live-uat-<date>` when the report
175
+ should be kept as a project artifact. If the upstream
176
+ `agentic-sandbox-conformance` harness is also run, set
177
+ `AIWG_SANDBOX_CONFORMANCE_REPORT=<path>` so the Cockpit live report links the
178
+ external conformance output. The harness also probes common executor identity
179
+ endpoints (`/health`, `/version`, `/api/version`, `/api/v2/version`) and records
180
+ safe version/build fields in the report. When the executor build does not expose
181
+ that metadata, set `AIWG_COCKPIT_EXECUTOR_VERSION=<tag-or-commit>` so release
182
+ evidence still names the tested agentic-sandbox build. A manual run against
183
+ agentic-sandbox `v2026.6.15` or newer should attach its markdown/JSON result to
184
+ epic roctinam/aiwg#1588 before the epic is considered done-done.
185
+
186
+ The executable release-validation procedure is
187
+ `.aiwg/testing/cockpit-real-integration-uat-runbook.md`. Use that runbook for
188
+ real executor smoke, Codex provider evidence (#1631), Claude auth/evidence
189
+ (#1632), strict host/container/VM matrix evidence (#1621), artifact naming, and
190
+ safe evidence handling. The older
191
+ `.aiwg/testing/cockpit-real-integration-uat-plan-2026-06-19.md` is the planning
192
+ source, not the operator procedure.
193
+
194
+ The stricter matrix gate for #1621 is intentionally separate from the mock lane:
195
+
196
+ ```bash
197
+ AIWG_COCKPIT_EXECUTOR_URL=http://127.0.0.1:<real-executor-port> \
198
+ AIWG_COCKPIT_LIVE_PROVIDER=codex \
199
+ npm run uat:cockpit-live:matrix
200
+ ```
201
+
202
+ Use `AIWG_COCKPIT_LIVE_PROVIDER=claude` instead when the live workload should
203
+ exercise the pre-authenticated Claude session.
204
+
205
+ Matrix mode requires real `host`, `docker`/`container`, and `vm` runtime
206
+ families in inventory. For each target it verifies inventory normalization,
207
+ runtime and transport posture, session backend evidence, session create/list,
208
+ observe attach, and a minimal provider-backed workload through a controller
209
+ session when control is advertised. The selected provider is invoked through the
210
+ attached session (`codex exec -s read-only ...`
211
+ or `claude --print --permission-mode dontAsk --output-format text ...`) and must
212
+ emit `AIWG_COCKPIT_LIVE_OK` and the expected discovery result (`issue-audit` by
213
+ default). This proves a pre-authenticated agentic framework actually launched in
214
+ the target session and could use AIWG discovery from that environment, rather
215
+ than only proving shell plumbing or provider login. Set
216
+ `AIWG_COCKPIT_LIVE_DISCOVERY_EXPECT=<capability-name>` to validate a different
217
+ discovered framework capability, or `AIWG_COCKPIT_LIVE_WORKLOAD=<prompt>` to
218
+ replace the full prompt while still satisfying the marker and discovery checks.
219
+ Set `AIWG_COCKPIT_LIVE_MATRIX_TARGETS=host` only for scoped rehearsal/evidence
220
+ when Docker/container or VM are intentionally out of scope; the default remains
221
+ `host,container,vm` for the release matrix. To prove controller-side PTY command
222
+ injection can mutate target data, set
223
+ `AIWG_COCKPIT_LIVE_MUTATION_FILE=<absolute-safe-test-path>` and optionally
224
+ `AIWG_COCKPIT_LIVE_MUTATION_TEXT=<expected-content>`. The harness opens a fresh
225
+ managed PTY session on the same target, observes it, drives a shell command via
226
+ `pty.session_input`, waits for `AIWG_COCKPIT_MUTATION_OK`, then reads the file
227
+ from the test runner and verifies the exact content.
228
+ The matrix report records each target family independently (`matrix host`,
229
+ `matrix container`, `matrix vm`) with the instance, runtime family, selected
230
+ session backend, provider, discovery expectation, and exact failure reason; the
231
+ test aggregates those records and fails only after all three target families have
232
+ been attempted. Mock-only success does not satisfy this gate;
233
+ `AIWG_COCKPIT_LIVE_ALLOW_MOCK_MATRIX=1` exists only for harness development.
234
+
235
+ To prove the launch path itself, set `AIWG_COCKPIT_LIVE_PROVISION=1`. In this
236
+ mode the matrix harness first calls the real executor admin API
237
+ (`POST /api/v2/admin/instances`) for each requested target, waits for the
238
+ operation to complete, waits for the instance to appear as running with a
239
+ registered agent and session backend, then sends the selected provider command
240
+ over the managed PTY interface. Provisioned instances are tracked by exact id so
241
+ the workload is driven against the instance created by the UAT run. Optional
242
+ overrides:
243
+
244
+ - `AIWG_COCKPIT_LIVE_PROVISION_NAME_PREFIX` names launched instances; default is
245
+ `cockpit-uat`.
246
+ - `AIWG_COCKPIT_LIVE_PROVISION_LOADOUT` overrides the default host or VM loadout.
247
+ - `AIWG_COCKPIT_LIVE_PROVISION_IMAGE` overrides the Docker/container image.
248
+ - `AIWG_COCKPIT_LIVE_PROVISION_PROFILE` passes an executor profile.
249
+ - `AIWG_COCKPIT_LIVE_PROVISION_TIMEOUT_MS` controls operation and boot readiness
250
+ timeout; default is `180000`.
251
+
252
+ ### Live matrix prerequisites (#1621)
253
+
254
+ Before treating `uat:cockpit-live:matrix` as release evidence, provision all
255
+ three runtime families in the same real agentic-sandbox executor:
256
+
257
+ 1. **Host** — a connected host agent must appear in `GET /api/v1/agents` with an
258
+ `instance_id` matching a `host` item from `GET /api/v2/admin/instances`.
259
+ Cockpit resolves this instance-to-agent mapping before session create/list.
260
+ 2. **Docker/container** — a `docker` or `container` instance must register an
261
+ agent and support managed session creation via
262
+ `POST /api/v1/agents/{agent_id}/sessions`.
263
+ 3. **VM** — a `vm` instance must register an agent and expose the same managed
264
+ session API.
265
+
266
+ For each family, the executor must return enough metadata for Cockpit to prove
267
+ runtime posture, transport posture, session backend capability, session
268
+ create/list, observe attach, and the provider-backed controller workload. Set
269
+ `AIWG_COCKPIT_EXECUTOR_VERSION=<tag-or-commit>` when the executor does not expose
270
+ version metadata through `/health` or `/version`.
271
+
272
+ Known state as of the 2026-06-19 host live run:
273
+
274
+ - Host target passes against the local agentic-sandbox `4cb1c90` build using a
275
+ real mTLS-registered host agent and a managed `tmux` session.
276
+ - Codex launched inside that managed host session and returned
277
+ `AIWG_COCKPIT_LIVE_OK` plus `issue-audit`; evidence lives at
278
+ `.aiwg/testing/cockpit-real-codex-matrix-2026-06-19.md/.json`.
279
+ - Cockpit also proved direct PTY command injection and mutation on the same real
280
+ host path with `AIWG_COCKPIT_LIVE_MATRIX_TARGETS=host` and
281
+ `AIWG_COCKPIT_LIVE_MUTATION_FILE`; evidence lives at
282
+ `.aiwg/testing/cockpit-real-codex-mutation-2026-06-19.md/.json`, and the
283
+ verified mutation artifact is
284
+ `.aiwg/testing/cockpit-pty-mutation-2026-06-19.txt`.
285
+ - Claude launched inside the same real host-session path and also returned
286
+ `AIWG_COCKPIT_LIVE_OK` plus `issue-audit`; evidence lives at
287
+ `.aiwg/testing/cockpit-real-claude-matrix-2026-06-19.md/.json`.
288
+ - The previous Claude login-required blocker remains linked as
289
+ roctinam/agentic-sandbox#499 for upstream regression tracking, but it was not
290
+ reproduced by this isolated host proof.
291
+ - Docker/container secure bootstrap is fixed from the agentic-sandbox side in
292
+ `v2026.6.24`; roctinam/agentic-sandbox#497 is closed. AIWG still needs to
293
+ rerun this matrix against that release and record Cockpit-side evidence.
294
+ - VM bootstrap/readiness is fixed from the agentic-sandbox side in
295
+ `v2026.6.24`; roctinam/agentic-sandbox#498 is closed. AIWG still needs to
296
+ rerun this matrix against that release and record Cockpit-side evidence.
297
+ - Remaining upstream follow-ups are Claude auth-state propagation
298
+ (roctinam/agentic-sandbox#499) and agent-scoped PTY sessions not appearing in
299
+ the formal/global session registry (roctinam/agentic-sandbox#500).
300
+
301
+ This gate extends #1617: #1617 proves Cockpit can talk to a reachable real
302
+ executor; #1621 proves coverage across the intended base host, container, and VM
303
+ runtime families. It also complements #1529 by exercising the operator-ready
304
+ provider session path instead of only the mock or shell plumbing.
305
+
306
+ ## Status
307
+
308
+ Built and browser-verified, with release evidence wired to a real
309
+ agentic-sandbox executor through `AIWG_COCKPIT_EXECUTOR_URL`. The host target
310
+ (agentic-sandbox#460) and direct/managed multiplexer sessions
311
+ (agentic-sandbox#461) have landed upstream; the Bridge seam is now the
312
+ AIWG-side integration point for #1589. Runtime-tier provisioning and
313
+ host-daemon UX are tracked in roctinam/aiwg#1615, direct/managed PTY negotiation
314
+ in #1616, the live real-sandbox gate in #1617, and transport-trust visibility in
315
+ #1618. Secure transport details map back to agentic-sandbox#409/#410/#412; local
316
+ Browser/Tauri/VS Code-to-Bridge auth remains roctinam/aiwg#1595.
317
+
318
+ ### Operator-wall review modes (#1622)
319
+
320
+ Connected Home exposes a `Wall review mode` control for the active design review:
321
+
322
+ - `Topology` is the default A1-style eleven-stack operator wall.
323
+ - `Handoff` emphasizes the A2-style mission route while keeping the same live
324
+ data-bound nodes.
325
+ - Open `/?wall=handoff` to load the handoff review layout directly for browser
326
+ capture or operator comparison.
327
+
328
+ The detailed review script and screenshot commands live in
329
+ `.aiwg/ux/cockpit-operator-wall-layout-review.md`.
330
+
331
+ ## See also
332
+
333
+ - `apps/cockpit/RELEASE.md` — cockpit release pattern (channels, publish leg, config-defaults gate)
334
+ - `.aiwg/architecture/adr-cockpit-session-control-not-cli-runner.md` — the core model
335
+ - `.aiwg/architecture/cockpit-sad.md` + `cockpit-instance-control-interface.md`
336
+ - `.aiwg/ux/cockpit-ux-design.md` · `.aiwg/reports/cockpit-abm-gate.md`
337
+ - Epic roctinam/aiwg#1588
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "@aiwg/cockpit-bridge",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "description": "AIWG Cockpit Bridge — local 127.0.0.1 client of AIWG surfaces + agentic-sandbox A2A; serves the registry-driven UI. Dev skeleton: reads instance inventory and serves a minimal screen.",
7
+ "bin": { "cockpit-bridge": "src/server.mjs" },
8
+ "scripts": {
9
+ "start": "node src/server.mjs",
10
+ "smoke": "node src/smoke.mjs"
11
+ },
12
+ "engines": { "node": ">=18" }
13
+ }