@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,567 @@
1
+ /**
2
+ * Pure claude stream-json → protocol-v2 mapper. `mapClaudeMessage` folds one
3
+ * parsed NDJSON stdout line into `UiEvent`s plus the next mapper state; the
4
+ * runner calls it ALONGSIDE the v1 path (v1 events keep flowing unchanged).
5
+ *
6
+ * Contract: `.ai/analysis/cockpit-ui-redesign/agent-event-protocols.md` §1
7
+ * (wire format) and §7.1 "Claude (stream-json)" (the mapping). Golden
8
+ * fixtures replaying real wire shapes live in `__fixtures__/claude/`.
9
+ *
10
+ * Robustness rule: input is untrusted wire data — the mapper never throws;
11
+ * unknown message/block types map to zero events.
12
+ *
13
+ * State is explicit and treated as immutable: callers thread the returned
14
+ * `state` into the next call. Item ids are deterministic — tool items reuse
15
+ * the wire `tool_use` id; text/thinking blocks (which have no wire id) get
16
+ * sequential `item_<n>` ids, turns get `turn_<n>` — so replaying a stored
17
+ * transcript reproduces the exact event sequence.
18
+ *
19
+ * Plan/task rule: task ids are the harness's, and it only ever reports them in
20
+ * tool RESULT text (`Task #3 created successfully: …`, `#3 [pending] …`), never
21
+ * in the call. So a `TaskCreate` parks until its result lands. Inferring ids by
22
+ * counting creates looks equivalent and is not: `--resume` reopens a session
23
+ * whose list is already at 1..N while a fresh mapper state starts at zero, and
24
+ * the two id spaces then drift silently — updates land on the wrong row.
25
+ */
26
+ import { toolDisplay } from './tool-display.js';
27
+ export function createClaudeUiState(opts = {}) {
28
+ return {
29
+ fallbackSessionId: opts.fallbackSessionId,
30
+ sessionStarted: false,
31
+ pendingTurnIds: [],
32
+ turnSeq: 0,
33
+ currentTurnId: null,
34
+ itemSeq: 0,
35
+ openTools: new Map(),
36
+ tasks: new Map(),
37
+ pendingTaskCreates: new Map(),
38
+ };
39
+ }
40
+ /**
41
+ * Claude has no wire-level turn-start — the runner writing a user message to
42
+ * stdin IS the turn boundary, so the runner calls this on each send. Until
43
+ * `init` arrives the event is queued (the seed message is written before the
44
+ * first stdout line is read).
45
+ */
46
+ export function claudeTurnStarted(state) {
47
+ const turnId = `turn_${state.turnSeq + 1}`;
48
+ const next = { ...state, turnSeq: state.turnSeq + 1, currentTurnId: turnId };
49
+ if (!state.sessionStarted) {
50
+ return { events: [], state: { ...next, pendingTurnIds: [...state.pendingTurnIds, turnId] } };
51
+ }
52
+ return { events: [{ type: 'turn.started', turnId }], state: next };
53
+ }
54
+ /** Fold one parsed stream-json message into v2 events. Never throws. */
55
+ export function mapClaudeMessage(msg, state) {
56
+ if (!isRecord(msg))
57
+ return { events: [], state };
58
+ switch (msg.type) {
59
+ case 'system':
60
+ return msg.subtype === 'init' ? mapInit(msg, state) : { events: [], state };
61
+ case 'assistant':
62
+ return mapAssistant(msg, state);
63
+ case 'user':
64
+ return mapToolResults(msg, state);
65
+ case 'result':
66
+ return mapResult(msg, state);
67
+ default:
68
+ // stream_event, control_request, … — nothing to render yet.
69
+ return { events: [], state };
70
+ }
71
+ }
72
+ // ---- system/init → session.started ----------------------------------------
73
+ function mapInit(msg, state) {
74
+ const event = {
75
+ type: 'session.started',
76
+ sessionId: str(msg.session_id) ?? state.fallbackSessionId ?? '',
77
+ backend: 'claude',
78
+ };
79
+ const model = str(msg.model);
80
+ if (model !== undefined)
81
+ event.model = model;
82
+ const cwd = str(msg.cwd);
83
+ if (cwd !== undefined)
84
+ event.cwd = cwd;
85
+ if (Array.isArray(msg.tools)) {
86
+ event.tools = msg.tools.filter((tool) => typeof tool === 'string');
87
+ }
88
+ const events = [event];
89
+ // Flush turns that began before init (the seeded first user message).
90
+ for (const turnId of state.pendingTurnIds)
91
+ events.push({ type: 'turn.started', turnId });
92
+ return { events, state: { ...state, sessionStarted: true, pendingTurnIds: [] } };
93
+ }
94
+ // ---- assistant blocks → message/reasoning/tool items -----------------------
95
+ function mapAssistant(msg, state) {
96
+ const content = messageContent(msg);
97
+ const parentItemId = str(msg.parent_tool_use_id);
98
+ const events = [];
99
+ let itemSeq = state.itemSeq;
100
+ let openTools = null;
101
+ let tasks = state.tasks;
102
+ let pendingTaskCreates = state.pendingTaskCreates;
103
+ for (const raw of content) {
104
+ if (!isRecord(raw))
105
+ continue;
106
+ if (raw.type === 'text' && typeof raw.text === 'string') {
107
+ // Whole blocks per API round-trip — claude sends no deltas in this
108
+ // mode, so we never fake `item.delta`s: started + completed.
109
+ const item = { kind: 'message', id: `item_${++itemSeq}`, role: 'assistant', text: raw.text };
110
+ if (parentItemId !== undefined)
111
+ item.parentItemId = parentItemId;
112
+ events.push({ type: 'item.started', item }, { type: 'item.completed', item });
113
+ }
114
+ else if (raw.type === 'thinking' && typeof raw.thinking === 'string') {
115
+ const item = { kind: 'reasoning', id: `item_${++itemSeq}`, text: raw.thinking };
116
+ if (parentItemId !== undefined)
117
+ item.parentItemId = parentItemId;
118
+ events.push({ type: 'item.started', item }, { type: 'item.completed', item });
119
+ }
120
+ else if (raw.type === 'tool_use' && typeof raw.id === 'string' && typeof raw.name === 'string') {
121
+ const display = toolDisplay(raw.name, raw.input);
122
+ const item = {
123
+ kind: 'tool',
124
+ id: raw.id,
125
+ name: raw.name,
126
+ toolKind: display.toolKind,
127
+ title: display.title,
128
+ // claude has no pending phase — a tool_use is already executing.
129
+ status: 'running',
130
+ };
131
+ if (raw.input !== undefined)
132
+ item.input = raw.input;
133
+ const edit = editArtifacts(raw.name, raw.input);
134
+ if (edit) {
135
+ if (edit.diffs)
136
+ item.diffs = edit.diffs;
137
+ item.locations = edit.locations;
138
+ }
139
+ if (parentItemId !== undefined)
140
+ item.parentItemId = parentItemId;
141
+ events.push({ type: 'item.started', item });
142
+ if (raw.name === 'TodoWrite') {
143
+ const entries = planEntries(raw.input);
144
+ if (entries)
145
+ events.push({ type: 'plan.updated', entries });
146
+ }
147
+ else if (parentItemId === undefined) {
148
+ // Task tools are main-agent-only: a subagent's tool list has no
149
+ // TaskCreate/TaskUpdate/TaskList at all (verified against the live
150
+ // harness). Should that change, its id space is its own, so folding a
151
+ // subagent's ids into this map would corrupt the main plan — ignore
152
+ // them until the shared-or-separate question is answered on the wire.
153
+ const pending = pendingTaskCreate(raw.name, raw.input);
154
+ if (pending) {
155
+ // The id is minted by the harness and only revealed in the result, so
156
+ // the entry parks here until then (`applyTaskCreateResult`). Counting
157
+ // creates to guess it desyncs the moment a create is rejected or the
158
+ // session resumes with a task list already at 1..N.
159
+ pendingTaskCreates = new Map(pendingTaskCreates).set(raw.id, pending);
160
+ }
161
+ else {
162
+ const folded = applyTaskUpdate(raw.name, raw.input, tasks);
163
+ if (folded) {
164
+ tasks = folded;
165
+ events.push({ type: 'plan.updated', entries: [...tasks.values()] });
166
+ }
167
+ }
168
+ }
169
+ openTools ??= new Map(state.openTools);
170
+ openTools.set(raw.id, item);
171
+ }
172
+ // Unknown block types (redacted_thinking, server_tool_use, …): ignored.
173
+ }
174
+ if (events.length === 0)
175
+ return { events, state };
176
+ return {
177
+ events,
178
+ state: { ...state, itemSeq, openTools: openTools ?? state.openTools, tasks, pendingTaskCreates },
179
+ };
180
+ }
181
+ /** claude `Edit`/`Write` inputs carry the diff inline (§7.1). */
182
+ function editArtifacts(name, input) {
183
+ const key = name.toLowerCase();
184
+ if (key !== 'edit' && key !== 'write')
185
+ return undefined;
186
+ if (!isRecord(input) || typeof input.file_path !== 'string' || input.file_path === '')
187
+ return undefined;
188
+ const path = input.file_path;
189
+ const locations = [{ path }];
190
+ if (key === 'edit') {
191
+ if (typeof input.old_string === 'string' && typeof input.new_string === 'string') {
192
+ return { diffs: [{ path, oldText: input.old_string, newText: input.new_string }], locations };
193
+ }
194
+ return { locations };
195
+ }
196
+ // Write: a created (or fully replaced) file — `oldText: null` per FileDiff.
197
+ const diff = { path, oldText: null };
198
+ if (typeof input.content === 'string')
199
+ diff.newText = input.content;
200
+ return { diffs: [diff], locations };
201
+ }
202
+ const PLAN_STATUSES = ['pending', 'in_progress', 'completed'];
203
+ /** `TaskUpdate.status` is `pending | in_progress | completed | deleted`. `deleted`
204
+ * is handled by the caller — it drops the entry, since PlanStatus has no such
205
+ * state. `running` is tolerated defensively as an alias for `in_progress`. */
206
+ function normalizePlanStatus(value) {
207
+ if (value === 'running')
208
+ return 'in_progress';
209
+ return PLAN_STATUSES.find((status) => status === value);
210
+ }
211
+ /** `TaskCreate` result: `Task #12 created successfully: Ship it`. The id here is
212
+ * the harness's own, which is why it — not a count of creates — is the key. */
213
+ const TASK_CREATED_RE = /^Task #(\d+) created successfully\b/;
214
+ /** `TaskList` line: `#12 [in_progress] Ship it`. */
215
+ const TASK_LIST_LINE_RE = /^#(\d+) \[([a-z_]+)\] (.*)$/;
216
+ /** A `TaskCreate` call parked until its result reveals the harness id, or
217
+ * `undefined` when this is not a renderable create. */
218
+ function pendingTaskCreate(name, input) {
219
+ if (name.toLowerCase() !== 'taskcreate')
220
+ return undefined;
221
+ // `subject` is required by the schema; without one there is nothing to render.
222
+ if (!isRecord(input) || typeof input.subject !== 'string')
223
+ return undefined;
224
+ const content = input.subject.trim();
225
+ if (content === '')
226
+ return undefined;
227
+ const entry = { content, status: 'pending' };
228
+ if (typeof input.activeForm === 'string' && input.activeForm !== '')
229
+ entry.activeForm = input.activeForm;
230
+ return entry;
231
+ }
232
+ /** Land a parked create under the id the harness reported. A result that does
233
+ * not confirm creation (the tool errored, or the wording changed) drops the
234
+ * entry rather than inventing an id for it. */
235
+ function applyTaskCreateResult(entry, resultText, tasks) {
236
+ const id = TASK_CREATED_RE.exec(resultText.trim())?.[1];
237
+ if (id === undefined)
238
+ return undefined;
239
+ return new Map(tasks).set(id, entry);
240
+ }
241
+ /** Rebuild the plan from a `TaskList` result — the only wire message carrying
242
+ * the harness's whole task list, and so the one way a resumed session (whose
243
+ * tasks were created before this mapper existed) recovers them.
244
+ *
245
+ * Returns `undefined` unless every non-blank line parses: a partial parse of an
246
+ * unrecognized format would silently drop live rows. `TaskList` omits
247
+ * `activeForm`, so it is carried over from the entry already held for that id. */
248
+ function applyTaskListResult(resultText, tasks) {
249
+ const lines = resultText.split('\n').map((line) => line.trim()).filter((line) => line !== '');
250
+ if (lines.length === 0)
251
+ return undefined;
252
+ const next = new Map();
253
+ for (const line of lines) {
254
+ const match = TASK_LIST_LINE_RE.exec(line);
255
+ if (!match)
256
+ return undefined;
257
+ const [, id, rawStatus, rawSubject] = match;
258
+ const status = normalizePlanStatus(rawStatus);
259
+ const content = (rawSubject ?? '').trim();
260
+ if (id === undefined || status === undefined || content === '')
261
+ return undefined;
262
+ const entry = { content, status };
263
+ const activeForm = tasks.get(id)?.activeForm;
264
+ if (activeForm !== undefined)
265
+ entry.activeForm = activeForm;
266
+ next.set(id, entry);
267
+ }
268
+ return next;
269
+ }
270
+ /** Fold one `TaskUpdate` into the plan. Its `taskId` is already the harness's
271
+ * own id, so it applies at call time; an id this mapper never saw created is
272
+ * dropped (a resumed session's pre-existing tasks land via `TaskList`). */
273
+ function applyTaskUpdate(name, input, tasks) {
274
+ if (name.toLowerCase() !== 'taskupdate')
275
+ return undefined;
276
+ if (!isRecord(input))
277
+ return undefined;
278
+ const id = typeof input.taskId === 'string'
279
+ ? input.taskId
280
+ : typeof input.taskId === 'number'
281
+ ? String(input.taskId)
282
+ : undefined;
283
+ if (id === undefined)
284
+ return undefined;
285
+ const existing = tasks.get(id);
286
+ if (existing === undefined)
287
+ return undefined;
288
+ // `deleted` removes the task outright ("permanently removes the task"). The
289
+ // harness does not renumber what is left, so surviving ids stay valid.
290
+ if (input.status === 'deleted') {
291
+ const next = new Map(tasks);
292
+ next.delete(id);
293
+ return next;
294
+ }
295
+ const entry = { ...existing };
296
+ let changed = false;
297
+ const status = normalizePlanStatus(input.status);
298
+ if (status !== undefined && status !== existing.status) {
299
+ entry.status = status;
300
+ changed = true;
301
+ }
302
+ if (typeof input.subject === 'string') {
303
+ const content = input.subject.trim();
304
+ if (content !== '' && content !== existing.content) {
305
+ entry.content = content;
306
+ changed = true;
307
+ }
308
+ }
309
+ // An empty activeForm would blank the dock's label exactly while the row is
310
+ // in progress, so it is ignored like an empty subject.
311
+ if (typeof input.activeForm === 'string' && input.activeForm !== '' && input.activeForm !== existing.activeForm) {
312
+ entry.activeForm = input.activeForm;
313
+ changed = true;
314
+ }
315
+ if (!changed)
316
+ return undefined;
317
+ return new Map(tasks).set(id, entry);
318
+ }
319
+ /** TodoWrite input `{todos:[{content,status,activeForm}]}` → plan entries
320
+ * (full-replacement semantics — an empty list is a valid plan). */
321
+ function planEntries(input) {
322
+ if (!isRecord(input) || !Array.isArray(input.todos))
323
+ return undefined;
324
+ const entries = [];
325
+ for (const todo of input.todos) {
326
+ if (!isRecord(todo) || typeof todo.content !== 'string')
327
+ continue;
328
+ const status = PLAN_STATUSES.find((s) => s === todo.status);
329
+ if (status === undefined)
330
+ continue;
331
+ const entry = { content: todo.content, status };
332
+ if (typeof todo.activeForm === 'string')
333
+ entry.activeForm = todo.activeForm;
334
+ entries.push(entry);
335
+ }
336
+ return entries;
337
+ }
338
+ // ---- user tool_result blocks → item.completed (+ image events) -------------
339
+ function mapToolResults(msg, state) {
340
+ const content = messageContent(msg);
341
+ const parentItemId = str(msg.parent_tool_use_id);
342
+ const events = [];
343
+ let openTools = null;
344
+ let tasks = state.tasks;
345
+ let pendingTaskCreates = state.pendingTaskCreates;
346
+ for (const raw of content) {
347
+ if (!isRecord(raw) || raw.type !== 'tool_result' || typeof raw.tool_use_id !== 'string')
348
+ continue;
349
+ const open = (openTools ?? state.openTools).get(raw.tool_use_id);
350
+ // A result for a tool we never saw start (state loss) still completes an
351
+ // item — consumers upsert by id, so a lone snapshot renders fine.
352
+ const item = open
353
+ ? { ...open }
354
+ : { kind: 'tool', id: raw.tool_use_id, name: 'unknown', toolKind: 'other', title: 'Tool', status: 'running' };
355
+ if (!open && parentItemId !== undefined)
356
+ item.parentItemId = parentItemId;
357
+ const text = stringifyToolResultContent(raw.content);
358
+ if (raw.is_error === true) {
359
+ item.status = 'failed';
360
+ item.error = text;
361
+ }
362
+ else {
363
+ item.status = 'completed';
364
+ item.output = text;
365
+ }
366
+ events.push({ type: 'item.completed', item });
367
+ for (const img of toolResultImageBlocks(raw.content)) {
368
+ events.push({ type: 'image', itemId: raw.tool_use_id, mediaType: img.media_type, data: img.data });
369
+ }
370
+ // The task tools report their outcome only as result text — `is_error` stays
371
+ // unset even for a rejected update ("Task not found"), so the text is the
372
+ // only signal there is.
373
+ const parked = pendingTaskCreates.get(raw.tool_use_id);
374
+ if (parked !== undefined) {
375
+ const next = new Map(pendingTaskCreates);
376
+ next.delete(raw.tool_use_id);
377
+ pendingTaskCreates = next;
378
+ if (raw.is_error !== true) {
379
+ const landed = applyTaskCreateResult(parked, text, tasks);
380
+ if (landed) {
381
+ tasks = landed;
382
+ events.push({ type: 'plan.updated', entries: [...tasks.values()] });
383
+ }
384
+ }
385
+ // `parentItemId` here mirrors the call-side subagent guard: a subagent's
386
+ // list describes its own tasks, so it must not rewrite the main plan.
387
+ }
388
+ else if (open?.name.toLowerCase() === 'tasklist' &&
389
+ open.parentItemId === undefined &&
390
+ raw.is_error !== true) {
391
+ const resynced = applyTaskListResult(text, tasks);
392
+ if (resynced && !samePlan(resynced, tasks)) {
393
+ tasks = resynced;
394
+ events.push({ type: 'plan.updated', entries: [...tasks.values()] });
395
+ }
396
+ }
397
+ openTools ??= new Map(state.openTools);
398
+ openTools.delete(raw.tool_use_id);
399
+ }
400
+ if (events.length === 0)
401
+ return { events, state };
402
+ return { events, state: { ...state, openTools: openTools ?? state.openTools, tasks, pendingTaskCreates } };
403
+ }
404
+ /** Whether a `TaskList` resync would change the rendered plan — it usually just
405
+ * restates what the mapper already has, and re-emitting is pure dock churn. */
406
+ function samePlan(a, b) {
407
+ if (a.size !== b.size)
408
+ return false;
409
+ for (const [id, entry] of a) {
410
+ const other = b.get(id);
411
+ if (other === undefined ||
412
+ other.content !== entry.content ||
413
+ other.status !== entry.status ||
414
+ other.activeForm !== entry.activeForm) {
415
+ return false;
416
+ }
417
+ }
418
+ return true;
419
+ }
420
+ // ---- result → declined tools + turn.completed + usage.updated --------------
421
+ function mapResult(msg, state) {
422
+ const events = [];
423
+ let itemSeq = state.itemSeq;
424
+ let turnSeq = state.turnSeq;
425
+ let openTools = null;
426
+ if (Array.isArray(msg.permission_denials)) {
427
+ for (const raw of msg.permission_denials) {
428
+ if (!isRecord(raw) || typeof raw.tool_name !== 'string')
429
+ continue;
430
+ const id = typeof raw.tool_use_id === 'string' ? raw.tool_use_id : `item_${++itemSeq}`;
431
+ const open = (openTools ?? state.openTools).get(id);
432
+ let item;
433
+ if (open) {
434
+ item = { ...open, status: 'declined' };
435
+ openTools ??= new Map(state.openTools);
436
+ openTools.delete(id);
437
+ }
438
+ else {
439
+ const display = toolDisplay(raw.tool_name, raw.tool_input);
440
+ item = {
441
+ kind: 'tool',
442
+ id,
443
+ name: raw.tool_name,
444
+ toolKind: display.toolKind,
445
+ title: display.title,
446
+ status: 'declined',
447
+ };
448
+ if (raw.tool_input !== undefined)
449
+ item.input = raw.tool_input;
450
+ }
451
+ events.push({ type: 'item.completed', item });
452
+ }
453
+ }
454
+ const turnId = state.currentTurnId ?? `turn_${++turnSeq}`;
455
+ const usage = rawTokenUsage(msg.usage);
456
+ const costUsd = typeof msg.total_cost_usd === 'number' && Number.isFinite(msg.total_cost_usd)
457
+ ? msg.total_cost_usd
458
+ : undefined;
459
+ const turnEvent = { type: 'turn.completed', turnId, stopReason: resultStopReason(msg) };
460
+ if (usage)
461
+ turnEvent.usage = usage;
462
+ if (costUsd !== undefined)
463
+ turnEvent.costUsd = costUsd;
464
+ events.push(turnEvent);
465
+ if (usage) {
466
+ const usageEvent = { type: 'usage.updated', usage };
467
+ if (costUsd !== undefined)
468
+ usageEvent.costUsd = costUsd;
469
+ events.push(usageEvent);
470
+ }
471
+ return {
472
+ events,
473
+ state: { ...state, itemSeq, turnSeq, currentTurnId: null, openTools: openTools ?? state.openTools },
474
+ };
475
+ }
476
+ /** §7.1: success→end_turn, error_max_turns→max_tokens,
477
+ * error_during_execution→error; unknown subtypes fall back on `is_error`. */
478
+ function resultStopReason(msg) {
479
+ switch (msg.subtype) {
480
+ case 'success':
481
+ return 'end_turn';
482
+ case 'error_max_turns':
483
+ return 'max_tokens';
484
+ case 'error_during_execution':
485
+ return 'error';
486
+ default:
487
+ return msg.is_error === true ? 'error' : 'end_turn';
488
+ }
489
+ }
490
+ /** Raw counts straight off the wire — never cost-weighted (that stays a
491
+ * presentation concern; v1's `token-usage` keeps the weighted number). */
492
+ function rawTokenUsage(usage) {
493
+ if (!isRecord(usage))
494
+ return undefined;
495
+ const input = num(usage.input_tokens) ?? 0;
496
+ const output = num(usage.output_tokens) ?? 0;
497
+ const cacheRead = num(usage.cache_read_input_tokens);
498
+ const cacheWrite = num(usage.cache_creation_input_tokens);
499
+ const result = {
500
+ input,
501
+ output,
502
+ total: input + output + (cacheRead ?? 0) + (cacheWrite ?? 0),
503
+ };
504
+ if (cacheRead !== undefined)
505
+ result.cacheRead = cacheRead;
506
+ if (cacheWrite !== undefined)
507
+ result.cacheWrite = cacheWrite;
508
+ return result;
509
+ }
510
+ // ---- shared wire helpers (also used by the v1 path in the runner) ----------
511
+ /** Flatten a `tool_result.content` (string or block array) to display text.
512
+ * Image blocks become a placeholder — they ride as their own events. */
513
+ export function stringifyToolResultContent(content) {
514
+ if (typeof content === 'string')
515
+ return content;
516
+ if (Array.isArray(content)) {
517
+ return content
518
+ .map((c) => {
519
+ const b = c;
520
+ if (b.type === 'text' && typeof b.text === 'string')
521
+ return b.text;
522
+ if (b.type === 'image')
523
+ return '[screenshot]'; // emitted as its own image event
524
+ try {
525
+ return JSON.stringify(b);
526
+ }
527
+ catch {
528
+ return String(b);
529
+ }
530
+ })
531
+ .join('\n');
532
+ }
533
+ try {
534
+ return JSON.stringify(content);
535
+ }
536
+ catch {
537
+ return String(content);
538
+ }
539
+ }
540
+ /** base64 image blocks inside a tool_result's content, if any. */
541
+ export function toolResultImageBlocks(content) {
542
+ if (!Array.isArray(content))
543
+ return [];
544
+ const out = [];
545
+ for (const c of content) {
546
+ const b = c;
547
+ if (b.type === 'image' && b.source?.type === 'base64' && b.source.media_type && b.source.data) {
548
+ out.push({ media_type: b.source.media_type, data: b.source.data });
549
+ }
550
+ }
551
+ return out;
552
+ }
553
+ // ---- tiny guards ------------------------------------------------------------
554
+ function isRecord(value) {
555
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
556
+ }
557
+ function messageContent(msg) {
558
+ const message = isRecord(msg.message) ? msg.message : undefined;
559
+ return message && Array.isArray(message.content) ? message.content : [];
560
+ }
561
+ function str(value) {
562
+ return typeof value === 'string' && value !== '' ? value : undefined;
563
+ }
564
+ function num(value) {
565
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
566
+ }
567
+ //# sourceMappingURL=claude-ui-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-ui-mapper.js","sourceRoot":"","sources":["../../src/core/claude-ui-mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { AgentEvent, AgentRunResult, AgentRunSpec, AgentRunner, AgentSession, SessionOptions } from './agent-runner.js';
2
+ export interface CodexRunnerOptions {
3
+ /** Override the binary name/path; defaults to `codex` on PATH. */
4
+ bin?: string;
5
+ /** Wall-clock timeout for a run (ms); per-spec `timeoutMs` still wins. */
6
+ timeoutMs?: number;
7
+ }
8
+ /**
9
+ * `AgentRunner` over `codex app-server` — the same JSONL transport the VS Code
10
+ * extension and desktop app use (JSON-RPC 2.0, newline-delimited, over
11
+ * stdin/stdout). One long-lived process per session gives Codex the same
12
+ * multi-turn shape as the Claude runner: `turn/start` for a new turn,
13
+ * `turn/steer` for a mid-turn follow-up, `turn/interrupt` to cancel, and
14
+ * `thread/resume` to reopen a stored thread for "Continue".
15
+ *
16
+ * Auth = the host's logged-in ChatGPT/Codex session (or CODEX_API_KEY). The
17
+ * agent runs autonomously via `sandbox: workspace-write` + `approvalPolicy:
18
+ * never` — Codex has no per-tool allowlist, so `spec.allowedTools` is ignored.
19
+ */
20
+ export declare class CodexAppServerRunner implements AgentRunner {
21
+ readonly backend: "codex";
22
+ private readonly bin;
23
+ private readonly timeoutMs;
24
+ private lastSession;
25
+ constructor(opts?: CodexRunnerOptions);
26
+ run(spec: AgentRunSpec, onEvent?: (event: AgentEvent) => void): Promise<AgentRunResult>;
27
+ interrupt(): Promise<void>;
28
+ startSession(spec: AgentRunSpec, onEvent?: (event: AgentEvent) => void, opts?: SessionOptions): AgentSession;
29
+ }