|
1 | 1 | # 000 — Multi-agent workstation and self-contained macOS app |
2 | 2 |
|
3 | | -Status: IMPLEMENTED — TARGET RUNTIME GATE INCOMPLETE ON HOST TIMING |
| 3 | +Status: IMPLEMENTED — LIVE MIXED-PROVIDER V2 ACCEPTANCE GREEN; SIGNED DISTRIBUTION OPEN |
| 4 | + |
4 | 5 | Created: 2026-08-08 |
| 6 | +Updated: 2026-08-08 |
5 | 7 | Branch: `codex/multi-agent-workstation` |
6 | | -Base: `main` at `6f88fc3f101d32947ebf11a25c33640ff50a313e` |
7 | | -Integration target: `dev` for review, then maintainer promotion to `main` |
| 8 | +Base: fork `main` at `6f88fc3f101d32947ebf11a25c33640ff50a313e` |
8 | 9 |
|
9 | 10 | ## Objective |
10 | 11 |
|
11 | | -Turn the existing OpenCodex provider proxy into a dependable multi-model |
12 | | -workstation without inventing a second orchestration engine: |
13 | | - |
14 | | -1. make the Agent Command Center explain the behavior it already owns; |
15 | | -2. keep the five-model roster as advertised worker guidance, while every |
16 | | - catalog model remains callable by exact id; |
17 | | -3. prevent automatic V2 guidance from recommending child routes whose native |
18 | | - encrypted task payload cannot cross the provider boundary; |
19 | | -4. retain the current fail-closed guard for explicit incompatible overrides; |
20 | | -5. provide an explicit product-owned plaintext compatibility contract for |
21 | | - heterogeneous V2 trees while retaining encrypted fail-closed behavior; and |
22 | | -6. ship a macOS app that contains the runtime and dashboard instead of |
23 | | - requiring a separate npm/Bun/OpenCodex installation. |
24 | | - |
25 | | -This unit does **not** add role graphs, team profiles, game-development |
26 | | -workflows, prompt templates, file inboxes, guessed decryption, proxy |
27 | | -re-encryption, or a blanket `agent_message` rewrite. |
28 | | - |
29 | | -## Verified starting state |
30 | | - |
31 | | -- The active roster is capped at five because Codex advertises the first five |
32 | | - featured picker-visible rows to `spawn_agent`; catalog models outside the |
33 | | - roster remain callable by exact id. |
34 | | -- V2 guidance already includes the effective roster when |
35 | | - `multiAgentGuidanceEnabled` is on. The UI hides that fact under an advanced |
36 | | - toggle and overstates the preferred/fallback relationship. |
37 | | -- `multiAgentMode = default` restores upstream model pins and the current |
38 | | - Codex feature setting. It does not select a worker. |
39 | | -- V2 is selected by the root task and inherited by its tree. Changing the |
40 | | - setting does not retrofit an already-running task. |
41 | | -- Issue #92 is reproducible: a native Sol parent can select a routed child, |
42 | | - but the child assignment arrives only as backend ciphertext. OpenCodex |
43 | | - correctly refuses to dispatch an empty task or leak the ciphertext. |
44 | | -- The Swift menu-bar bundle is a companion only. It finds an external `ocx` |
45 | | - and Bun runtime; it does not contain the proxy, CLI, dependencies, or |
46 | | - `gui/dist`. |
47 | | -- A temporary `bun build --compile` probe bundled 769 modules, but |
48 | | - `--version` failed because runtime metadata resolved `/package.json` from |
49 | | - the compiled `$bunfs` layout. Dynamic workers, subprocesses, GUI assets, |
50 | | - services, and npm updater assumptions make a compiled helper a later |
51 | | - refactor rather than the first reliable app release. |
52 | | - |
53 | | -## Workstream map |
54 | | - |
55 | | -| ID | Workstream | Primary scope | Terminal gate | |
56 | | -|---|---|---|---| |
57 | | -| WS-01 | Truthful Agent Command Center | `gui/`, docs locales | COMPLETE — GUI tests, lint, i18n lint, build, and retained visual QA | |
58 | | -| WS-02 | Compatibility-aware roster guidance | `src/server/responses/`, catalog helpers, runtime tests | COMPLETE — native V2 guidance excludes unreadable routed children; exact overrides still fail closed | |
59 | | -| WS-03 | Product-owned plaintext V2 compatibility | native Responses request/response wire, Run Policy, docs | INTEGRATED — focused, GUI, docs, typecheck, privacy, and diff gates pass; required full runtime invocation is red only on four pre-existing cold-subprocess files under current host load | |
60 | | -| WS-04 | Self-contained macOS runtime | `app/`, `scripts/`, runtime resource resolution, docs | COMPLETE FOR TEST DISTRIBUTION — bundled-runtime lifecycle smoke passed without global Bun/npm/ocx | |
61 | | -| WS-05 | Distribution hardening | packaging/release follow-up | Developer ID signing, notarization, stapling, DMG, updater, clean-VM gate | |
62 | | - |
63 | | -WS-05 is a separately credentialed release phase. No publish, deployment, |
64 | | -version bump, signing credential use, notarization submission, or App Store |
65 | | -submission is authorized by this unit. |
66 | | - |
67 | | -## Commit and review strategy |
68 | | - |
69 | | -Work stays on one delivery branch but lands as scoped checkpoint commits: |
70 | | - |
71 | | -1. `13eccd9b` — `docs(plan): track multi-agent workstation delivery` |
72 | | -2. `aebd7278` — `fix(agents): filter encrypted v2 worker guidance` |
73 | | -3. `0cfe71f4` — `docs(agents): propose provider-aware v2 delivery` |
74 | | -4. `f9ac7819` — `feat(gui): make agent command center truthful` |
75 | | -5. `108752a9` — `docs(plan): retain agent command center qa` |
76 | | -6. `1b8e2f6e` — `test(agents): cover mixed roster protocol modes` |
77 | | -7. `0ca85586` — `feat(macos): bundle self-contained universal runtime` |
78 | | -8. `0df6a52f` — `test: keep prepush expectations deterministic` |
79 | | -9. `33425358` — `fix(gui): clear command center review findings` |
80 | | -10. `bef7c19a` — `feat(agents): enable plaintext mixed-provider v2` |
81 | | -11. `796a7b02` — `test: make subprocess output reads single-owner` |
82 | | -12. `f0962e42` — `fix(agents): harden plaintext v2 integration` |
83 | | - |
84 | | -Commits may be split further when review boundaries demand it. A checkpoint is |
85 | | -created only after its focused tests pass. The branch is not merged directly |
86 | | -to `main`: repository policy requires review against `dev`, followed by the |
87 | | -maintainer-controlled `dev` to `main` promotion. |
88 | | - |
89 | | -## Global acceptance gates |
90 | | - |
91 | | -Completed target-integration gates: |
92 | | - |
93 | | -1. `bun run typecheck` |
94 | | -2. focused plaintext/V2/fail-closed runtime suites |
95 | | -3. `bun run privacy:scan` |
96 | | -4. `cd gui && bun test tests && bun run lint:i18n && bun run lint && bun run build` |
97 | | -5. `cd docs-site && bunx --bun astro build` |
98 | | -6. `git diff --check` |
99 | | - |
100 | | -The exact required `OCX_TEST_SHARD_SIZE=1 bun run test` target gate remains |
101 | | -red. Shards 1-153 passed before shard 154 stopped the runner. Continued |
102 | | -one-file coverage exercised shards 155-602; every file passed except four |
103 | | -pre-existing cold-subprocess suites whose fixed 5-10 second deadlines expired |
104 | | -under sustained host load. Targeted retries reproduced the same delays without |
105 | | -touching feature code. No timeout, fixture boundary, or assertion was changed. |
106 | | - |
107 | | -Earlier branch gates retained by this integration: |
108 | | - |
109 | | -1. `bun run test:macos` |
110 | | -2. `bun run build:macos` |
111 | | -3. packaged-app smoke from a sanitized environment with no usable global |
112 | | - `bun`, `node`, `npm`, or `ocx` |
113 | | - |
114 | | -Remaining review-readiness gates are an idle-host rerun of the full runtime |
115 | | -command and a fresh Codex task after catalog sync for the live model matrix: |
116 | | -Sol/Luna parents with Kimi, Grok, and DeepSeek children. |
117 | | - |
118 | | -The fresh-session matrix is intentionally last: the protocol and catalog are |
119 | | -sticky for an existing task, so running it inside the task that changed the |
120 | | -setting would produce false evidence. |
121 | | - |
122 | | -## Branch completion |
123 | | - |
124 | | -The pre-feature repository-wide pre-push gate is green. The product-owned |
125 | | -plaintext V2 feature was verified in its isolated worktree and is now integrated |
126 | | -here. Keep this unit open until the idle-host runtime gate and fresh-task |
127 | | -mixed-roster run are recorded. Then move this unit to |
128 | | -`devlog/_fin/260808_multi_agent_workstation/` and record the remaining |
129 | | -upstream/distribution dependencies and review/promotion path. |
| 12 | +Make OpenCodex a dependable multi-model workstation without adding a second |
| 13 | +orchestration engine: |
| 14 | + |
| 15 | +1. explain the five-model roster and Run Policy truthfully; |
| 16 | +2. keep automatic guidance compatible with the resolved parent route; |
| 17 | +3. support explicit, fail-closed plaintext V2 delivery for mixed providers; |
| 18 | +4. keep routed catalogs durable and make stale Codex workers easy to refresh; |
| 19 | +5. ship a macOS app containing the Bun runtime, OpenCodex source, production |
| 20 | + dependencies, and dashboard. |
| 21 | + |
| 22 | +The unit deliberately excludes role graphs, team profiles, prompt templates, |
| 23 | +file inboxes, guessed decryption, proxy re-encryption, blanket |
| 24 | +`agent_message` rewriting, silent worker restarts, and silent plaintext |
| 25 | +activation. |
| 26 | + |
| 27 | +## Delivered workstreams |
| 28 | + |
| 29 | +| ID | Result | |
| 30 | +| --- | --- | |
| 31 | +| WS-01 Agent Command Center | The Subagents page now exposes Active Roster, Agent Library, and Run Policy with truthful copy and six synchronized GUI locales. | |
| 32 | +| WS-02 Compatibility-aware guidance | Encrypted native V2 guidance excludes unreadable external routes while exact overrides retain the existing fail-closed behavior. | |
| 33 | +| WS-03 Plaintext V2 compatibility | Explicit `multiAgentV2MessageDelivery: "plaintext"` enables the recognized mixed-provider V2 contract; encrypted delivery remains the default. | |
| 34 | +| WS-04 Self-contained macOS app | The application bundles its runtime and dashboard, auto-syncs the catalog, and offers a confirmed **Apply agent catalog** action for stale Codex workers. | |
| 35 | +| WS-05 Signed distribution | Developer ID signing, notarization, stapling, quarantine testing, and the public updater remain a separately credentialed release phase. | |
| 36 | + |
| 37 | +## Verification retained for the functional branch |
| 38 | + |
| 39 | +- All 604 one-file runtime shards were exercised on the same functional |
| 40 | + revision and worktree. A contention-only serialization shard was rerun with |
| 41 | + the repository fixture and the continuation completed green; no assertion, |
| 42 | + production timeout, or safety guard was weakened. |
| 43 | +- The full GUI suite passed 715 tests, localization lint, ESLint, React Doctor, |
| 44 | + and the production build. |
| 45 | +- The documentation site built all 226 pages. Typecheck, privacy scan, and |
| 46 | + `git diff --check` passed. |
| 47 | +- The native macOS suites passed 95 core and 31 UI tests. The bundled app |
| 48 | + started the proxy without a global `bun`, `npm`, or `ocx`, and the dashboard |
| 49 | + returned HTTP 200. |
| 50 | +- A fresh Sol V2 parent dispatched the exact models |
| 51 | + `opencode-go/deepseek-v4-flash`, `kimi/k3[1m]`, |
| 52 | + `opencode-go/glm-5.2`, and `xai/grok-4.5`. All four completed with their |
| 53 | + required markers, and a Kimi follow-up completed without substitution, |
| 54 | + timeout, or catalog exclusion. |
| 55 | + |
| 56 | +## Remaining release work |
| 57 | + |
| 58 | +- Run the signed/notarized build and clean-machine quarantine matrix when the |
| 59 | + required Apple credentials are available. |
| 60 | +- Add a signed app update and rollback channel before calling the macOS bundle |
| 61 | + a public auto-updating release. |
| 62 | +- Keep plaintext V2 explicit and experimental until additional client-schema |
| 63 | + versions are feature-detected in production. |
| 64 | + |
| 65 | +Repository policy targets feature review at `dev` followed by maintainer |
| 66 | +promotion to `main`. A fork owner may still use a direct fork-main comparison |
| 67 | +for private integration review. |
0 commit comments