@open-mercato/cezar 0.1.5-pr506.357

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 (264) hide show
  1. package/README.md +573 -0
  2. package/dist/config.d.ts +144 -0
  3. package/dist/config.js +106 -0
  4. package/dist/config.js.map +1 -0
  5. package/dist/core/agent-runner.d.ts +169 -0
  6. package/dist/core/agent-runner.js +23 -0
  7. package/dist/core/agent-runner.js.map +1 -0
  8. package/dist/core/backend-detect.d.ts +16 -0
  9. package/dist/core/backend-detect.js +118 -0
  10. package/dist/core/backend-detect.js.map +1 -0
  11. package/dist/core/claude-cli-runner.d.ts +56 -0
  12. package/dist/core/claude-cli-runner.js +416 -0
  13. package/dist/core/claude-cli-runner.js.map +1 -0
  14. package/dist/core/claude-ui-mapper.d.ts +71 -0
  15. package/dist/core/claude-ui-mapper.js +567 -0
  16. package/dist/core/claude-ui-mapper.js.map +1 -0
  17. package/dist/core/codex-app-server-runner.d.ts +29 -0
  18. package/dist/core/codex-app-server-runner.js +489 -0
  19. package/dist/core/codex-app-server-runner.js.map +1 -0
  20. package/dist/core/codex-ui-mapper.d.ts +63 -0
  21. package/dist/core/codex-ui-mapper.js +491 -0
  22. package/dist/core/codex-ui-mapper.js.map +1 -0
  23. package/dist/core/ndjson.d.ts +6 -0
  24. package/dist/core/ndjson.js +23 -0
  25. package/dist/core/ndjson.js.map +1 -0
  26. package/dist/core/opencode-server-runner.d.ts +30 -0
  27. package/dist/core/opencode-server-runner.js +488 -0
  28. package/dist/core/opencode-server-runner.js.map +1 -0
  29. package/dist/core/opencode-ui-mapper.d.ts +105 -0
  30. package/dist/core/opencode-ui-mapper.js +588 -0
  31. package/dist/core/opencode-ui-mapper.js.map +1 -0
  32. package/dist/core/process-usage.d.ts +63 -0
  33. package/dist/core/process-usage.js +181 -0
  34. package/dist/core/process-usage.js.map +1 -0
  35. package/dist/core/runner-factory.d.ts +8 -0
  36. package/dist/core/runner-factory.js +22 -0
  37. package/dist/core/runner-factory.js.map +1 -0
  38. package/dist/core/tool-display.d.ts +30 -0
  39. package/dist/core/tool-display.js +156 -0
  40. package/dist/core/tool-display.js.map +1 -0
  41. package/dist/core/ui-events.d.ts +308 -0
  42. package/dist/core/ui-events.js +25 -0
  43. package/dist/core/ui-events.js.map +1 -0
  44. package/dist/core/usage.d.ts +11 -0
  45. package/dist/core/usage.js +15 -0
  46. package/dist/core/usage.js.map +1 -0
  47. package/dist/git-worktree.d.ts +88 -0
  48. package/dist/git-worktree.js +297 -0
  49. package/dist/git-worktree.js.map +1 -0
  50. package/dist/handoff.d.ts +62 -0
  51. package/dist/handoff.js +147 -0
  52. package/dist/handoff.js.map +1 -0
  53. package/dist/index.d.ts +2 -0
  54. package/dist/index.js +466 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/install-as-command.d.ts +39 -0
  57. package/dist/install-as-command.js +51 -0
  58. package/dist/install-as-command.js.map +1 -0
  59. package/dist/pack-check.d.ts +17 -0
  60. package/dist/pack-check.js +27 -0
  61. package/dist/pack-check.js.map +1 -0
  62. package/dist/paths.d.ts +23 -0
  63. package/dist/paths.js +34 -0
  64. package/dist/paths.js.map +1 -0
  65. package/dist/planner.d.ts +17 -0
  66. package/dist/planner.js +248 -0
  67. package/dist/planner.js.map +1 -0
  68. package/dist/release/snapshot.d.ts +64 -0
  69. package/dist/release/snapshot.js +75 -0
  70. package/dist/release/snapshot.js.map +1 -0
  71. package/dist/release/stable.d.ts +46 -0
  72. package/dist/release/stable.js +57 -0
  73. package/dist/release/stable.js.map +1 -0
  74. package/dist/runs/auto-name.d.ts +75 -0
  75. package/dist/runs/auto-name.js +168 -0
  76. package/dist/runs/auto-name.js.map +1 -0
  77. package/dist/runs/retention.d.ts +60 -0
  78. package/dist/runs/retention.js +86 -0
  79. package/dist/runs/retention.js.map +1 -0
  80. package/dist/runs/review-gate.d.ts +18 -0
  81. package/dist/runs/review-gate.js +21 -0
  82. package/dist/runs/review-gate.js.map +1 -0
  83. package/dist/runs/store.d.ts +408 -0
  84. package/dist/runs/store.js +526 -0
  85. package/dist/runs/store.js.map +1 -0
  86. package/dist/runs/task-refs.d.ts +24 -0
  87. package/dist/runs/task-refs.js +74 -0
  88. package/dist/runs/task-refs.js.map +1 -0
  89. package/dist/runs/ui-event-sink.d.ts +81 -0
  90. package/dist/runs/ui-event-sink.js +210 -0
  91. package/dist/runs/ui-event-sink.js.map +1 -0
  92. package/dist/server/capabilities.d.ts +33 -0
  93. package/dist/server/capabilities.js +43 -0
  94. package/dist/server/capabilities.js.map +1 -0
  95. package/dist/server/forge/github.d.ts +70 -0
  96. package/dist/server/forge/github.js +375 -0
  97. package/dist/server/forge/github.js.map +1 -0
  98. package/dist/server/forge/index.d.ts +24 -0
  99. package/dist/server/forge/index.js +45 -0
  100. package/dist/server/forge/index.js.map +1 -0
  101. package/dist/server/forge/types.d.ts +80 -0
  102. package/dist/server/forge/types.js +2 -0
  103. package/dist/server/forge/types.js.map +1 -0
  104. package/dist/server/git-changes.d.ts +195 -0
  105. package/dist/server/git-changes.js +497 -0
  106. package/dist/server/git-changes.js.map +1 -0
  107. package/dist/server/git.d.ts +26 -0
  108. package/dist/server/git.js +103 -0
  109. package/dist/server/git.js.map +1 -0
  110. package/dist/server/github.d.ts +8 -0
  111. package/dist/server/github.js +8 -0
  112. package/dist/server/github.js.map +1 -0
  113. package/dist/server/launch-key.d.ts +7 -0
  114. package/dist/server/launch-key.js +33 -0
  115. package/dist/server/launch-key.js.map +1 -0
  116. package/dist/server/open-in-app.d.ts +51 -0
  117. package/dist/server/open-in-app.js +189 -0
  118. package/dist/server/open-in-app.js.map +1 -0
  119. package/dist/server/open-in-terminal.d.ts +25 -0
  120. package/dist/server/open-in-terminal.js +120 -0
  121. package/dist/server/open-in-terminal.js.map +1 -0
  122. package/dist/server/pr.d.ts +7 -0
  123. package/dist/server/pr.js +7 -0
  124. package/dist/server/pr.js.map +1 -0
  125. package/dist/server/server.d.ts +41 -0
  126. package/dist/server/server.js +1390 -0
  127. package/dist/server/server.js.map +1 -0
  128. package/dist/server/static-ui.d.ts +49 -0
  129. package/dist/server/static-ui.js +92 -0
  130. package/dist/server/static-ui.js.map +1 -0
  131. package/dist/server/wsl.d.ts +25 -0
  132. package/dist/server/wsl.js +92 -0
  133. package/dist/server/wsl.js.map +1 -0
  134. package/dist/server-install/engine.d.ts +33 -0
  135. package/dist/server-install/engine.js +314 -0
  136. package/dist/server-install/engine.js.map +1 -0
  137. package/dist/server-install/platforms/macosx-ngrok.d.ts +6 -0
  138. package/dist/server-install/platforms/macosx-ngrok.js +345 -0
  139. package/dist/server-install/platforms/macosx-ngrok.js.map +1 -0
  140. package/dist/server-install/platforms/ubuntu-vps.d.ts +39 -0
  141. package/dist/server-install/platforms/ubuntu-vps.js +746 -0
  142. package/dist/server-install/platforms/ubuntu-vps.js.map +1 -0
  143. package/dist/server-install/state.d.ts +26 -0
  144. package/dist/server-install/state.js +125 -0
  145. package/dist/server-install/state.js.map +1 -0
  146. package/dist/server-install/steps.d.ts +109 -0
  147. package/dist/server-install/steps.js +330 -0
  148. package/dist/server-install/steps.js.map +1 -0
  149. package/dist/server-install/strategies.d.ts +4 -0
  150. package/dist/server-install/strategies.js +20 -0
  151. package/dist/server-install/strategies.js.map +1 -0
  152. package/dist/server-install/types.d.ts +597 -0
  153. package/dist/server-install/types.js +98 -0
  154. package/dist/server-install/types.js.map +1 -0
  155. package/dist/server-install/ui.d.ts +42 -0
  156. package/dist/server-install/ui.js +130 -0
  157. package/dist/server-install/ui.js.map +1 -0
  158. package/dist/skills-banner.d.ts +21 -0
  159. package/dist/skills-banner.js +40 -0
  160. package/dist/skills-banner.js.map +1 -0
  161. package/dist/skills-remote.d.ts +35 -0
  162. package/dist/skills-remote.js +266 -0
  163. package/dist/skills-remote.js.map +1 -0
  164. package/dist/skills.d.ts +45 -0
  165. package/dist/skills.js +182 -0
  166. package/dist/skills.js.map +1 -0
  167. package/dist/todos.d.ts +63 -0
  168. package/dist/todos.js +168 -0
  169. package/dist/todos.js.map +1 -0
  170. package/dist/ui-state.d.ts +12 -0
  171. package/dist/ui-state.js +25 -0
  172. package/dist/ui-state.js.map +1 -0
  173. package/dist/update-check.d.ts +12 -0
  174. package/dist/update-check.js +41 -0
  175. package/dist/update-check.js.map +1 -0
  176. package/dist/workflows/load.d.ts +15 -0
  177. package/dist/workflows/load.js +56 -0
  178. package/dist/workflows/load.js.map +1 -0
  179. package/dist/workflows/run.d.ts +281 -0
  180. package/dist/workflows/run.js +1511 -0
  181. package/dist/workflows/run.js.map +1 -0
  182. package/dist/workflows/types.d.ts +307 -0
  183. package/dist/workflows/types.js +171 -0
  184. package/dist/workflows/types.js.map +1 -0
  185. package/package.json +90 -0
  186. package/scripts/check-pack.mjs +46 -0
  187. package/scripts/dev.mjs +74 -0
  188. package/scripts/install-as-command.mjs +120 -0
  189. package/scripts/mock-claude.mjs +310 -0
  190. package/scripts/release-snapshot.mjs +130 -0
  191. package/scripts/release.mjs +119 -0
  192. package/scripts/test-process-usage.mjs +47 -0
  193. package/web/dist/assets/arrow-left-BE957rJs.js +1 -0
  194. package/web/dist/assets/bundle-mjs-DLPpRFyl.js +1 -0
  195. package/web/dist/assets/centered-state-BddhEEtO.js +43 -0
  196. package/web/dist/assets/chunk-BO2N2NFS-f5igTtpB.js +131 -0
  197. package/web/dist/assets/command-CjhFbABo.js +1 -0
  198. package/web/dist/assets/compare-variants-Cs52IAEG.js +1 -0
  199. package/web/dist/assets/core-BuMqAF_1.js +12 -0
  200. package/web/dist/assets/css-BsVw1vtW.js +1 -0
  201. package/web/dist/assets/dialog-DFvXTkFv.js +1 -0
  202. package/web/dist/assets/diff-view-C9b8AITq.js +4 -0
  203. package/web/dist/assets/diff-woXpYk--.js +1 -0
  204. package/web/dist/assets/dist-FBs4wmIY.js +1 -0
  205. package/web/dist/assets/dist-o_kVMXjg.js +1 -0
  206. package/web/dist/assets/engine-javascript-FQvzRocB.js +141 -0
  207. package/web/dist/assets/file-BVuztAOd.js +1 -0
  208. package/web/dist/assets/folder-0pJ1NZ_S.js +1 -0
  209. package/web/dist/assets/git-pull-request-DJkAMT0f.js +1 -0
  210. package/web/dist/assets/git-toolbar-CwhQdx3J.js +1 -0
  211. package/web/dist/assets/github-D0rAX4-r.js +1 -0
  212. package/web/dist/assets/go-rLFTqkRN.js +1 -0
  213. package/web/dist/assets/highlighted-body-OFNGDK62-DGHHie_q.js +1 -0
  214. package/web/dist/assets/highlighter-BKVEsACy.js +3 -0
  215. package/web/dist/assets/html-BY76lXLH.js +1 -0
  216. package/web/dist/assets/index-CEkI7QxN.css +2 -0
  217. package/web/dist/assets/index-CO2lH2et.js +11 -0
  218. package/web/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  219. package/web/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  220. package/web/dist/assets/javascript-BgS3c2Ky.js +1 -0
  221. package/web/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  222. package/web/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  223. package/web/dist/assets/json-qhed-kSA.js +1 -0
  224. package/web/dist/assets/jsonc-CYpm1nAK.js +1 -0
  225. package/web/dist/assets/jsx-Bz0zcwM4.js +1 -0
  226. package/web/dist/assets/lib-CNGa3Dig.js +1 -0
  227. package/web/dist/assets/loader-circle-BV3DO9mE.js +1 -0
  228. package/web/dist/assets/markdown-BYOwaDjH.js +1 -0
  229. package/web/dist/assets/markdown-D4-ADgH9.js +1 -0
  230. package/web/dist/assets/mermaid-GHXKKRXX-DM2VsGBG.js +1 -0
  231. package/web/dist/assets/open-mercato-toBr6SOa.svg +11 -0
  232. package/web/dist/assets/prompt-templates-C7ptKvDd.js +15 -0
  233. package/web/dist/assets/python-gzcpVVnB.js +1 -0
  234. package/web/dist/assets/react-dom-Ddtik4qM.js +1 -0
  235. package/web/dist/assets/refresh-cw-DCa-Rlwz.js +1 -0
  236. package/web/dist/assets/repo-git-DIhryGDx.js +1 -0
  237. package/web/dist/assets/run-diff-Dyow8B1q.js +3 -0
  238. package/web/dist/assets/run-header-jx9-18b8.js +1 -0
  239. package/web/dist/assets/rust-Cfkwpbl8.js +1 -0
  240. package/web/dist/assets/search-x-CoCyl7zT.js +1 -0
  241. package/web/dist/assets/shellscript-CLZ0U2zV.js +1 -0
  242. package/web/dist/assets/skill-detail-DB7x_FQp.js +1 -0
  243. package/web/dist/assets/skills-98vCroU8.js +1 -0
  244. package/web/dist/assets/skills-BKIoqD6K.js +1 -0
  245. package/web/dist/assets/sql-BsFa4tDR.js +1 -0
  246. package/web/dist/assets/square-terminal-B6PZX4Qp.js +1 -0
  247. package/web/dist/assets/tab-link-C5--YMQd.js +1 -0
  248. package/web/dist/assets/task-changes-ejxPGVJw.js +1 -0
  249. package/web/dist/assets/task-commits-C6GO5qT-.js +1 -0
  250. package/web/dist/assets/task-files-CatpCBXa.js +2 -0
  251. package/web/dist/assets/task-thread-BMbXDM3d.js +5 -0
  252. package/web/dist/assets/tasks-table-dgezlCcg.js +1 -0
  253. package/web/dist/assets/trash-2-CDtxmmc8.js +1 -0
  254. package/web/dist/assets/triangle-alert-6su4Js5O.js +1 -0
  255. package/web/dist/assets/tsx-udAQXfEw.js +1 -0
  256. package/web/dist/assets/typescript-bsJCZSQ-.js +1 -0
  257. package/web/dist/assets/upload-Bp7hQxll.js +1 -0
  258. package/web/dist/assets/use-desktop-CvTwojOJ.js +3 -0
  259. package/web/dist/assets/utils-rQGbOrwc.js +1 -0
  260. package/web/dist/assets/workflows-Dy2c6790.js +11 -0
  261. package/web/dist/assets/x-Br_jIDBw.js +1 -0
  262. package/web/dist/assets/yaml-rwi0_p6S.js +1 -0
  263. package/web/dist/index.html +70 -0
  264. package/web/open-mercato.svg +11 -0
@@ -0,0 +1,491 @@
1
+ /**
2
+ * Pure codex app-server JSON-RPC → protocol-v2 mapper. `mapCodexNotification`
3
+ * folds one parsed JSONL frame into `UiEvent`s plus the next mapper state;
4
+ * the runner calls it ALONGSIDE the v1 path (v1 events keep flowing
5
+ * unchanged).
6
+ *
7
+ * Contract: `.ai/analysis/cockpit-ui-redesign/agent-event-protocols.md` §3
8
+ * (wire format) and §7.1 "Codex (app-server)" (the mapping). Golden fixtures
9
+ * replaying wire-faithful frame sequences live in `__fixtures__/codex/`.
10
+ *
11
+ * Robustness rule: input is untrusted wire data — the mapper never throws;
12
+ * responses, server→client requests (approval prompts — reserved for the
13
+ * `permission.*` events later) and unknown methods map to zero events.
14
+ *
15
+ * State is explicit and treated as immutable: callers thread the returned
16
+ * `state` into the next call. Ids are deterministic — codex items and turns
17
+ * carry stable wire ids which are reused verbatim (`turn_<n>` is minted only
18
+ * when a turn frame arrives without one) — so replaying a stored transcript
19
+ * reproduces the exact event sequence.
20
+ *
21
+ * Status map (§7.1, kills v1's regex-on-status hack): `inProgress→running`,
22
+ * `completed→completed`, `failed→failed`, `declined→declined`.
23
+ */
24
+ import { toolDisplay } from './tool-display.js';
25
+ export function createCodexUiState() {
26
+ return {
27
+ sessionStarted: false,
28
+ turnSeq: 0,
29
+ currentTurnId: null,
30
+ knownItems: new Set(),
31
+ outputs: new Map(),
32
+ planFromNotification: false,
33
+ };
34
+ }
35
+ /**
36
+ * Codex confirms the thread via the `thread/start`/`thread/resume` RESULT
37
+ * (a response frame the mapper cannot attribute), so the runner calls this
38
+ * once the thread id is known. Deduplicated against the `thread/started`
39
+ * notification — whichever arrives first emits `session.started`.
40
+ */
41
+ export function codexSessionStarted(threadId, state) {
42
+ if (state.sessionStarted || threadId === '')
43
+ return { events: [], state };
44
+ return {
45
+ events: [{ type: 'session.started', sessionId: threadId, backend: 'codex' }],
46
+ state: { ...state, sessionStarted: true },
47
+ };
48
+ }
49
+ /** Fold one parsed JSON-RPC frame into v2 events. Never throws. */
50
+ export function mapCodexNotification(frame, state) {
51
+ if (!isRecord(frame) || typeof frame.method !== 'string')
52
+ return { events: [], state };
53
+ // A frame with both `method` and `id` is a server→client REQUEST (the
54
+ // approval prompts) — reserved for `permission.requested` later.
55
+ if (frame.id !== undefined)
56
+ return { events: [], state };
57
+ const params = isRecord(frame.params) ? frame.params : {};
58
+ switch (frame.method) {
59
+ case 'thread/started':
60
+ return codexSessionStarted(threadIdOf(params) ?? '', state);
61
+ case 'turn/started':
62
+ return mapTurnStarted(params, state);
63
+ case 'turn/completed':
64
+ return mapTurnEnd(params, state, /* failed */ false);
65
+ case 'turn/failed':
66
+ return mapTurnEnd(params, state, /* failed */ true);
67
+ case 'turn/plan/updated':
68
+ return mapTurnPlanUpdated(params, state);
69
+ case 'item/started':
70
+ return mapItemLifecycle(params, state, 'item.started');
71
+ case 'item/updated':
72
+ return mapItemLifecycle(params, state, 'item.updated');
73
+ case 'item/completed':
74
+ return mapItemLifecycle(params, state, 'item.completed');
75
+ case 'item/agentMessage/delta':
76
+ return mapDelta(params, state, 'text');
77
+ case 'item/reasoning/textDelta':
78
+ case 'item/reasoning/summaryDelta':
79
+ case 'item/reasoning/summaryTextDelta':
80
+ return mapDelta(params, state, 'reasoning');
81
+ case 'item/commandExecution/outputDelta':
82
+ return mapDelta(params, state, 'output');
83
+ case 'thread/tokenUsage/updated':
84
+ return mapTokenUsage(params, state);
85
+ default:
86
+ // thread/status/changed, thread/closed, … — nothing to render yet.
87
+ return { events: [], state };
88
+ }
89
+ }
90
+ // ---- turn lifecycle ---------------------------------------------------------
91
+ function mapTurnStarted(params, state) {
92
+ const turnSeq = state.turnSeq + 1;
93
+ const turnId = turnIdOf(params) ?? `turn_${turnSeq}`;
94
+ return {
95
+ events: [{ type: 'turn.started', turnId }],
96
+ // planFromNotification is turn-scoped — a new turn re-opens the item arm.
97
+ state: { ...state, turnSeq, currentTurnId: turnId, planFromNotification: false },
98
+ };
99
+ }
100
+ function mapTurnEnd(params, state, failed) {
101
+ let turnSeq = state.turnSeq;
102
+ const turnId = turnIdOf(params) ?? state.currentTurnId ?? `turn_${++turnSeq}`;
103
+ return {
104
+ events: [{ type: 'turn.completed', turnId, stopReason: turnStopReason(params, failed) }],
105
+ state: { ...state, turnSeq, currentTurnId: null },
106
+ };
107
+ }
108
+ /** §7.1: turn/completed→end_turn, turn/failed→error — except an interrupted
109
+ * turn (turn.status `interrupted`, or an interrupt-shaped error message,
110
+ * the only wire signals codex gives us) → cancelled. */
111
+ function turnStopReason(params, failed) {
112
+ const turn = isRecord(params.turn) ? params.turn : {};
113
+ if (turn.status === 'interrupted')
114
+ return 'cancelled';
115
+ if (!failed)
116
+ return 'end_turn';
117
+ return /interrupt/i.test(errorMessage(params.error) ?? '') ? 'cancelled' : 'error';
118
+ }
119
+ // ---- plan -------------------------------------------------------------------
120
+ /**
121
+ * `turn/plan/updated` → the plan dock. This is the ONLY channel codex's
122
+ * `update_plan` tool reaches the client on: the app-server `ThreadItem` union
123
+ * has no todo/`todoList` variant, so the plan is a turn-level notification
124
+ * rather than an item (verified against
125
+ * `app-server-protocol/schema/typescript/v2/TurnPlanUpdatedNotification.ts`).
126
+ *
127
+ * Full replacement: `plan` carries the entire list on every notification and
128
+ * the steps have no wire ids, so the snapshot IS the plan — no accumulation
129
+ * (contrast the claude mapper's id-keyed TaskCreate/TaskUpdate fold).
130
+ *
131
+ * `explanation` (the model's prose rationale) is deliberately dropped: the dock
132
+ * renders entries only, and PlanEntry has nowhere to put it.
133
+ */
134
+ function mapTurnPlanUpdated(params, state) {
135
+ const entries = turnPlanEntries(params.plan);
136
+ if (!entries)
137
+ return { events: [], state };
138
+ return {
139
+ events: [{ type: 'plan.updated', entries }],
140
+ state: state.planFromNotification ? state : { ...state, planFromNotification: true },
141
+ };
142
+ }
143
+ /** `plan: [{step, status}]` → plan entries. An EMPTY array is a legitimate
144
+ * snapshot (the agent cleared its plan) and clears the dock; anything else that
145
+ * yields no entries — a non-array, or rows we could not read a step out of —
146
+ * is malformed and maps to zero events, so a garbled frame cannot wipe a good
147
+ * plan. The distinction matters: "the agent has no steps" and "we failed to
148
+ * parse the steps" look identical downstream once they are both `[]`. */
149
+ function turnPlanEntries(plan) {
150
+ if (!Array.isArray(plan))
151
+ return undefined;
152
+ const entries = [];
153
+ for (const step of plan) {
154
+ if (!isRecord(step))
155
+ continue;
156
+ const content = str(step.step);
157
+ if (content === undefined)
158
+ continue;
159
+ entries.push({ content, status: turnPlanStatus(step.status) });
160
+ }
161
+ if (plan.length > 0 && entries.length === 0)
162
+ return undefined;
163
+ return entries;
164
+ }
165
+ /** `TurnPlanStepStatus` is camelCase ON THE APP-SERVER WIRE (`inProgress`) even
166
+ * though codex's core protocol type is snake_case — the app-server layer
167
+ * re-serializes. Accept both spellings rather than depend on that detail, and
168
+ * treat anything unknown as `pending` (a step the agent has not reached). */
169
+ function turnPlanStatus(status) {
170
+ if (status === 'completed')
171
+ return 'completed';
172
+ if (status === 'inProgress' || status === 'in_progress')
173
+ return 'in_progress';
174
+ return 'pending';
175
+ }
176
+ function mapItemLifecycle(params, state, eventType) {
177
+ const raw = isRecord(params.item) ? params.item : undefined;
178
+ if (!raw || typeof raw.type !== 'string')
179
+ return { events: [], state };
180
+ const type = raw.type;
181
+ // `plan` / `todoList` items never render as items — they ARE the plan
182
+ // (full-replacement semantics on every lifecycle phase, §7.1).
183
+ //
184
+ // `plan` is the plan-MODE item (`{type:'plan', id, text}`, streamed via
185
+ // `item/plan/delta`) — prose, not a checklist, and mutually exclusive with
186
+ // `update_plan` (codex rejects that tool in plan mode). It becomes the single
187
+ // entry the agent is executing.
188
+ //
189
+ // `todoList` is NOT an app-server item type — the v2 `ThreadItem` union has no
190
+ // todo variant, so this arm is dead on the transport cezar spawns. It is kept
191
+ // as cheap tolerance: these types are marked EXPERIMENTAL upstream, codex's
192
+ // exec transport does emit a `todo_list` item, and a stray snapshot is better
193
+ // rendered than dropped. The real plan channel is `turn/plan/updated`.
194
+ //
195
+ // That makes this the SECOND writer of `plan.updated`, so it yields to the
196
+ // first: once the notification has delivered a real checklist, a prose `plan`
197
+ // item must not flatten it back into a single entry. Upstream says the two are
198
+ // mutually exclusive (codex rejects `update_plan` in plan mode) — this does not
199
+ // depend on that holding.
200
+ if (type === 'todoList' || type === 'todo_list' || type === 'plan') {
201
+ if (state.planFromNotification)
202
+ return { events: [], state };
203
+ const entries = planEntriesOf(raw);
204
+ if (!entries)
205
+ return { events: [], state };
206
+ return { events: [{ type: 'plan.updated', entries }], state };
207
+ }
208
+ // The user's own message echoed back — the client already rendered what it
209
+ // sent, so it maps to zero events (matching the claude mapper).
210
+ if (type === 'userMessage')
211
+ return { events: [], state };
212
+ const id = str(raw.id);
213
+ if (id === undefined)
214
+ return { events: [], state };
215
+ const item = type === 'agentMessage'
216
+ ? messageItem(raw, id)
217
+ : type === 'reasoning'
218
+ ? reasoningItem(raw, id)
219
+ : toolItem(raw, id, type, eventType, state);
220
+ const events = [{ type: eventType, item }];
221
+ // Track live ids (for delta synthesis) and drop bookkeeping on completion.
222
+ if (eventType === 'item.completed') {
223
+ if (!state.knownItems.has(id) && !state.outputs.has(id))
224
+ return { events, state };
225
+ const knownItems = new Set(state.knownItems);
226
+ knownItems.delete(id);
227
+ const outputs = new Map(state.outputs);
228
+ outputs.delete(id);
229
+ return { events, state: { ...state, knownItems, outputs } };
230
+ }
231
+ if (state.knownItems.has(id))
232
+ return { events, state };
233
+ return { events, state: { ...state, knownItems: new Set(state.knownItems).add(id) } };
234
+ }
235
+ /** `agentMessage` → message item; `phase` commentary|final_answer→'commentary'|'final'. */
236
+ function messageItem(raw, id) {
237
+ const item = {
238
+ kind: 'message',
239
+ id,
240
+ role: 'assistant',
241
+ text: typeof raw.text === 'string' ? raw.text : '',
242
+ };
243
+ if (raw.phase === 'commentary')
244
+ item.phase = 'commentary';
245
+ else if (raw.phase === 'final_answer')
246
+ item.phase = 'final';
247
+ return item;
248
+ }
249
+ /** `reasoning` → reasoning item — full `content` when present, else the summary. */
250
+ function reasoningItem(raw, id) {
251
+ return { kind: 'reasoning', id, text: str(raw.content) ?? str(raw.summary) ?? '' };
252
+ }
253
+ /** The §7.1 status map — the wire word wins; an item without one derives its
254
+ * status from the lifecycle phase it arrived in. */
255
+ const STATUS_MAP = {
256
+ inProgress: 'running',
257
+ completed: 'completed',
258
+ failed: 'failed',
259
+ declined: 'declined',
260
+ };
261
+ function toolStatus(raw, eventType) {
262
+ const mapped = typeof raw.status === 'string' ? STATUS_MAP[raw.status] : undefined;
263
+ return mapped ?? (eventType === 'item.completed' ? 'completed' : 'running');
264
+ }
265
+ function toolItem(raw, id, type, eventType, state) {
266
+ const status = toolStatus(raw, eventType);
267
+ let item;
268
+ switch (type) {
269
+ case 'commandExecution': {
270
+ const display = toolDisplay('commandExecution', raw);
271
+ item = { kind: 'tool', id, name: type, toolKind: display.toolKind, title: display.title, status };
272
+ if (raw.command !== undefined)
273
+ item.input = { command: raw.command };
274
+ // Wire output wins; else the final snapshot carries what outputDelta streamed.
275
+ const output = str(raw.aggregatedOutput) ??
276
+ str(raw.output) ??
277
+ (eventType === 'item.completed' ? state.outputs.get(id) : undefined);
278
+ if (output !== undefined)
279
+ item.output = output;
280
+ const exitCode = num(raw.exitCode);
281
+ if (exitCode !== undefined)
282
+ item.exitCode = exitCode;
283
+ break;
284
+ }
285
+ case 'fileChange': {
286
+ const display = toolDisplay('fileChange', raw);
287
+ item = { kind: 'tool', id, name: type, toolKind: display.toolKind, title: display.title, status };
288
+ const artifacts = changeArtifacts(raw.changes);
289
+ if (artifacts) {
290
+ item.diffs = artifacts.diffs;
291
+ item.locations = artifacts.locations;
292
+ }
293
+ break;
294
+ }
295
+ case 'mcpToolCall': {
296
+ const server = str(raw.server);
297
+ const tool = str(raw.tool);
298
+ const display = toolDisplay('mcpToolCall', raw);
299
+ item = {
300
+ kind: 'tool',
301
+ id,
302
+ // §7.1: the item is named after what it called, `server.tool`.
303
+ name: server && tool ? `${server}.${tool}` : type,
304
+ toolKind: display.toolKind,
305
+ title: display.title,
306
+ status,
307
+ };
308
+ if (raw.arguments !== undefined)
309
+ item.input = raw.arguments;
310
+ const result = raw.result;
311
+ if (typeof result === 'string')
312
+ item.output = result;
313
+ else if (result !== undefined)
314
+ item.output = safeStringify(result);
315
+ break;
316
+ }
317
+ case 'webSearch': {
318
+ const display = toolDisplay('webSearch', raw);
319
+ item = { kind: 'tool', id, name: type, toolKind: display.toolKind, title: display.title, status };
320
+ break;
321
+ }
322
+ case 'enteredReviewMode':
323
+ case 'exitedReviewMode':
324
+ // §7.1: review-mode items → tool(kind task).
325
+ item = {
326
+ kind: 'tool',
327
+ id,
328
+ name: type,
329
+ toolKind: 'task',
330
+ title: type === 'enteredReviewMode' ? 'Entered review mode' : 'Exited review mode',
331
+ status,
332
+ };
333
+ break;
334
+ default: {
335
+ // Unknown item types stay visible as generic tool cards (v1 parity —
336
+ // a future codex tool must not silently vanish from the thread).
337
+ const display = toolDisplay(type, raw);
338
+ item = { kind: 'tool', id, name: type, toolKind: display.toolKind, title: display.title, status, input: raw };
339
+ }
340
+ }
341
+ const error = errorMessage(raw.error);
342
+ if (error !== undefined)
343
+ item.error = error;
344
+ return item;
345
+ }
346
+ /** `fileChange.changes[]` `{path, kind, diff}` → `diffs[]` (unified) + locations. */
347
+ function changeArtifacts(changes) {
348
+ if (!Array.isArray(changes))
349
+ return undefined;
350
+ const diffs = [];
351
+ const locations = [];
352
+ for (const change of changes) {
353
+ if (!isRecord(change) || typeof change.path !== 'string' || change.path === '')
354
+ continue;
355
+ // Codex sends unified diffs only — the old text is unknown, not "empty".
356
+ const diff = { path: change.path, oldText: null };
357
+ const unified = str(change.diff);
358
+ if (unified !== undefined)
359
+ diff.unified = unified;
360
+ diffs.push(diff);
361
+ locations.push({ path: change.path });
362
+ }
363
+ if (diffs.length === 0)
364
+ return undefined;
365
+ return { diffs, locations };
366
+ }
367
+ /** `todoList` items `{text, completed}` (and plan step arrays) → plan entries;
368
+ * a text-only `plan` item becomes the single entry the agent is executing. */
369
+ function planEntriesOf(raw) {
370
+ const list = Array.isArray(raw.items) ? raw.items : Array.isArray(raw.plan) ? raw.plan : undefined;
371
+ if (list) {
372
+ const entries = [];
373
+ for (const entry of list) {
374
+ if (!isRecord(entry))
375
+ continue;
376
+ const content = str(entry.text) ?? str(entry.step) ?? str(entry.content);
377
+ if (content === undefined)
378
+ continue;
379
+ if (typeof entry.completed === 'boolean') {
380
+ entries.push({ content, status: entry.completed ? 'completed' : 'pending' });
381
+ }
382
+ else if (entry.status === 'pending' || entry.status === 'completed') {
383
+ entries.push({ content, status: entry.status });
384
+ }
385
+ else if (entry.status === 'inProgress' || entry.status === 'in_progress') {
386
+ entries.push({ content, status: 'in_progress' });
387
+ }
388
+ else {
389
+ entries.push({ content, status: 'pending' });
390
+ }
391
+ }
392
+ return entries;
393
+ }
394
+ const text = str(raw.text);
395
+ if (text === undefined)
396
+ return undefined;
397
+ return [{ content: text, status: 'in_progress' }];
398
+ }
399
+ // ---- streaming deltas -------------------------------------------------------
400
+ /** Minimal item synthesized when a delta outruns its `item/started` — gives
401
+ * consumers a valid target to upsert; the completed snapshot reconciles. */
402
+ function synthesizedItem(itemId, field) {
403
+ if (field === 'text')
404
+ return { kind: 'message', id: itemId, role: 'assistant', text: '' };
405
+ if (field === 'reasoning')
406
+ return { kind: 'reasoning', id: itemId, text: '' };
407
+ const display = toolDisplay('commandExecution');
408
+ return { kind: 'tool', id: itemId, name: 'commandExecution', toolKind: display.toolKind, title: display.title, status: 'running' };
409
+ }
410
+ function mapDelta(params, state, field) {
411
+ const itemId = str(params.itemId);
412
+ const delta = typeof params.delta === 'string' ? params.delta : '';
413
+ if (itemId === undefined || delta === '')
414
+ return { events: [], state };
415
+ const events = [];
416
+ let knownItems = state.knownItems;
417
+ if (!knownItems.has(itemId)) {
418
+ events.push({ type: 'item.started', item: synthesizedItem(itemId, field) });
419
+ knownItems = new Set(knownItems).add(itemId);
420
+ }
421
+ events.push({ type: 'item.delta', itemId, field, delta });
422
+ let outputs = state.outputs;
423
+ if (field === 'output') {
424
+ const next = new Map(state.outputs);
425
+ next.set(itemId, (next.get(itemId) ?? '') + delta);
426
+ outputs = next;
427
+ }
428
+ return { events, state: { ...state, knownItems, outputs } };
429
+ }
430
+ // ---- telemetry ---------------------------------------------------------------
431
+ /** `thread/tokenUsage/updated` → usage.updated. Raw CUMULATIVE totals from
432
+ * `tokenUsage.total`; codex reports no USD cost, so none is ever fabricated. */
433
+ function mapTokenUsage(params, state) {
434
+ if (!isRecord(params.tokenUsage))
435
+ return { events: [], state };
436
+ const tokenUsage = params.tokenUsage;
437
+ const total = isRecord(tokenUsage.total) ? tokenUsage.total : undefined;
438
+ if (!total)
439
+ return { events: [], state };
440
+ const input = num(total.inputTokens) ?? 0;
441
+ const output = num(total.outputTokens) ?? 0;
442
+ const cacheRead = num(total.cachedInputTokens);
443
+ const reasoning = num(total.reasoningOutputTokens);
444
+ const usage = {
445
+ input,
446
+ output,
447
+ total: num(total.totalTokens) ?? input + output,
448
+ };
449
+ if (cacheRead !== undefined)
450
+ usage.cacheRead = cacheRead;
451
+ if (reasoning !== undefined)
452
+ usage.reasoning = reasoning;
453
+ const contextWindow = num(tokenUsage.modelContextWindow);
454
+ if (contextWindow !== undefined)
455
+ usage.contextWindow = contextWindow;
456
+ return { events: [{ type: 'usage.updated', usage }], state };
457
+ }
458
+ // ---- tiny guards --------------------------------------------------------------
459
+ function isRecord(value) {
460
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
461
+ }
462
+ function str(value) {
463
+ return typeof value === 'string' && value !== '' ? value : undefined;
464
+ }
465
+ function num(value) {
466
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
467
+ }
468
+ function turnIdOf(params) {
469
+ const turn = isRecord(params.turn) ? params.turn : undefined;
470
+ return (turn && str(turn.id)) ?? str(params.turnId);
471
+ }
472
+ function threadIdOf(params) {
473
+ const thread = isRecord(params.thread) ? params.thread : undefined;
474
+ return (thread && str(thread.id)) ?? str(params.threadId);
475
+ }
476
+ function errorMessage(error) {
477
+ if (typeof error === 'string')
478
+ return str(error);
479
+ if (isRecord(error))
480
+ return str(error.message);
481
+ return undefined;
482
+ }
483
+ function safeStringify(value) {
484
+ try {
485
+ return JSON.stringify(value);
486
+ }
487
+ catch {
488
+ return String(value);
489
+ }
490
+ }
491
+ //# sourceMappingURL=codex-ui-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-ui-mapper.js","sourceRoot":"","sources":["../../src/core/codex-ui-mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Async line iterator over a readable stream of UTF-8 NDJSON — one trimmed,
3
+ * non-empty line per yield. Shared by every stdout/stdin-JSONL runner
4
+ * (the claude CLI's stream-json and codex app-server's JSON-RPC transport).
5
+ */
6
+ export declare function readNdjson(stream: NodeJS.ReadableStream): AsyncGenerator<string>;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Async line iterator over a readable stream of UTF-8 NDJSON — one trimmed,
3
+ * non-empty line per yield. Shared by every stdout/stdin-JSONL runner
4
+ * (the claude CLI's stream-json and codex app-server's JSON-RPC transport).
5
+ */
6
+ export async function* readNdjson(stream) {
7
+ stream.setEncoding('utf8');
8
+ let buffer = '';
9
+ for await (const chunk of stream) {
10
+ buffer += chunk;
11
+ let idx;
12
+ while ((idx = buffer.indexOf('\n')) >= 0) {
13
+ const line = buffer.slice(0, idx).trim();
14
+ buffer = buffer.slice(idx + 1);
15
+ if (line)
16
+ yield line;
17
+ }
18
+ }
19
+ const tail = buffer.trim();
20
+ if (tail)
21
+ yield tail;
22
+ }
23
+ //# sourceMappingURL=ndjson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ndjson.js","sourceRoot":"","sources":["../../src/core/ndjson.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,UAAU,CAAC,MAA6B;IAC7D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAA+B,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC;QAChB,IAAI,GAAW,CAAC;QAChB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC/B,IAAI,IAAI;gBAAE,MAAM,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,IAAI;QAAE,MAAM,IAAI,CAAC;AACvB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { AgentEvent, AgentRunResult, AgentRunSpec, AgentRunner } from './agent-runner.js';
2
+ import type { AgentSession, SessionOptions } from './agent-runner.js';
3
+ export interface OpencodeRunnerOptions {
4
+ /** Override the binary name/path; defaults to `opencode` on PATH. */
5
+ bin?: string;
6
+ /** Wall-clock timeout for a run (ms); per-spec `timeoutMs` still wins. */
7
+ timeoutMs?: number;
8
+ }
9
+ /**
10
+ * `AgentRunner` over `opencode serve` — a headless HTTP server (the same one
11
+ * the opencode TUI talks to) with an SSE event stream. One server per session,
12
+ * bound to the run's `cwd` (worktree), gives OpenCode the same multi-turn shape
13
+ * as the Claude runner: each `sendMessage` posts another prompt to the same
14
+ * session (history is kept server-side), `session/abort` cancels, and reusing
15
+ * the session id resumes for "Continue".
16
+ *
17
+ * Auth = the host's opencode config/logins. The agent runs autonomously
18
+ * (auto-approved permissions); OpenCode has no per-tool allowlist, so
19
+ * `spec.allowedTools` is ignored. `spec.model` is `provider/model`.
20
+ */
21
+ export declare class OpencodeServerRunner implements AgentRunner {
22
+ readonly backend: "opencode";
23
+ private readonly bin;
24
+ private readonly timeoutMs;
25
+ private lastSession;
26
+ constructor(opts?: OpencodeRunnerOptions);
27
+ run(spec: AgentRunSpec, onEvent?: (event: AgentEvent) => void): Promise<AgentRunResult>;
28
+ interrupt(): Promise<void>;
29
+ startSession(spec: AgentRunSpec, onEvent?: (event: AgentEvent) => void, opts?: SessionOptions): AgentSession;
30
+ }