@pat-lewczuk/cezar 0.1.3 → 0.1.4

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 (123) hide show
  1. package/dist/core/claude-ui-mapper.d.ts +57 -0
  2. package/dist/core/claude-ui-mapper.js +370 -0
  3. package/dist/core/claude-ui-mapper.js.map +1 -0
  4. package/dist/core/codex-ui-mapper.d.ts +53 -0
  5. package/dist/core/codex-ui-mapper.js +411 -0
  6. package/dist/core/codex-ui-mapper.js.map +1 -0
  7. package/dist/core/opencode-ui-mapper.d.ts +105 -0
  8. package/dist/core/opencode-ui-mapper.js +578 -0
  9. package/dist/core/opencode-ui-mapper.js.map +1 -0
  10. package/dist/core/process-usage.d.ts +63 -0
  11. package/dist/core/process-usage.js +181 -0
  12. package/dist/core/process-usage.js.map +1 -0
  13. package/dist/core/tool-display.d.ts +27 -0
  14. package/dist/core/tool-display.js +150 -0
  15. package/dist/core/tool-display.js.map +1 -0
  16. package/dist/core/ui-events.d.ts +294 -0
  17. package/dist/core/ui-events.js +25 -0
  18. package/dist/core/ui-events.js.map +1 -0
  19. package/dist/index.js +0 -0
  20. package/dist/pack-check.d.ts +17 -0
  21. package/dist/pack-check.js +27 -0
  22. package/dist/pack-check.js.map +1 -0
  23. package/dist/runs/title-summary.d.ts +15 -0
  24. package/dist/runs/title-summary.js +84 -0
  25. package/dist/runs/title-summary.js.map +1 -0
  26. package/dist/runs/ui-event-sink.d.ts +81 -0
  27. package/dist/runs/ui-event-sink.js +210 -0
  28. package/dist/runs/ui-event-sink.js.map +1 -0
  29. package/dist/server/capabilities.d.ts +18 -0
  30. package/dist/server/capabilities.js +23 -0
  31. package/dist/server/capabilities.js.map +1 -0
  32. package/dist/server/forge/github.d.ts +39 -0
  33. package/dist/server/forge/github.js +369 -0
  34. package/dist/server/forge/github.js.map +1 -0
  35. package/dist/server/forge/index.d.ts +24 -0
  36. package/dist/server/forge/index.js +45 -0
  37. package/dist/server/forge/index.js.map +1 -0
  38. package/dist/server/forge/types.d.ts +80 -0
  39. package/dist/server/forge/types.js +2 -0
  40. package/dist/server/forge/types.js.map +1 -0
  41. package/dist/server/git-changes.d.ts +182 -0
  42. package/dist/server/git-changes.js +424 -0
  43. package/dist/server/git-changes.js.map +1 -0
  44. package/dist/server/open-in-app.d.ts +19 -0
  45. package/dist/server/open-in-app.js +134 -0
  46. package/dist/server/open-in-app.js.map +1 -0
  47. package/dist/server/static-ui.d.ts +49 -0
  48. package/dist/server/static-ui.js +92 -0
  49. package/dist/server/static-ui.js.map +1 -0
  50. package/dist/update-check.d.ts +12 -0
  51. package/dist/update-check.js +41 -0
  52. package/dist/update-check.js.map +1 -0
  53. package/package.json +1 -1
  54. package/web/app/node_modules/.vite/vitest/ca84d1343b96baa8137c943ed1860e522cacb238/results.json +1 -0
  55. package/web/app/src/components/app-shell-container.tsx +76 -0
  56. package/web/dist/assets/arrow-left-BE957rJs.js +1 -0
  57. package/web/dist/assets/bundle-mjs-DLPpRFyl.js +1 -0
  58. package/web/dist/assets/chunk-BO2N2NFS-f5igTtpB.js +131 -0
  59. package/web/dist/assets/compare-variants-D6fPL9cS.js +1 -0
  60. package/web/dist/assets/core-BuMqAF_1.js +12 -0
  61. package/web/dist/assets/css-BsVw1vtW.js +1 -0
  62. package/web/dist/assets/dialog-BEgEWFDS.js +1 -0
  63. package/web/dist/assets/diff-view-CctnJHWe.js +4 -0
  64. package/web/dist/assets/diff-woXpYk--.js +1 -0
  65. package/web/dist/assets/dist-CW7M_Jhs.js +1 -0
  66. package/web/dist/assets/ellipsis-vertical-DJPAfccS.js +1 -0
  67. package/web/dist/assets/engine-javascript-FQvzRocB.js +141 -0
  68. package/web/dist/assets/folder-RbRLfIX-.js +1 -0
  69. package/web/dist/assets/git-pull-request-DJkAMT0f.js +1 -0
  70. package/web/dist/assets/git-toolbar-D8OPPqBP.js +1 -0
  71. package/web/dist/assets/github-BYIHwIJB.js +1 -0
  72. package/web/dist/assets/go-rLFTqkRN.js +1 -0
  73. package/web/dist/assets/highlighted-body-OFNGDK62-DGHHie_q.js +1 -0
  74. package/web/dist/assets/highlighter-BKVEsACy.js +3 -0
  75. package/web/dist/assets/html-BY76lXLH.js +1 -0
  76. package/web/dist/assets/index-9qG98Orw.js +11 -0
  77. package/web/dist/assets/index-Bz_r8Jt3.css +2 -0
  78. package/web/dist/assets/input-BRsSo4xH.js +1 -0
  79. package/web/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  80. package/web/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  81. package/web/dist/assets/javascript-BgS3c2Ky.js +1 -0
  82. package/web/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  83. package/web/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  84. package/web/dist/assets/json-qhed-kSA.js +1 -0
  85. package/web/dist/assets/jsonc-CYpm1nAK.js +1 -0
  86. package/web/dist/assets/jsx-Bz0zcwM4.js +1 -0
  87. package/web/dist/assets/lib-CNGa3Dig.js +1 -0
  88. package/web/dist/assets/loader-circle-BV3DO9mE.js +1 -0
  89. package/web/dist/assets/markdown-BYOwaDjH.js +1 -0
  90. package/web/dist/assets/markdown-CR_HLGTs.js +1 -0
  91. package/web/dist/assets/mermaid-GHXKKRXX-DM2VsGBG.js +1 -0
  92. package/web/dist/assets/open-mercato-toBr6SOa.svg +11 -0
  93. package/web/dist/assets/python-gzcpVVnB.js +1 -0
  94. package/web/dist/assets/react-dom-Ddtik4qM.js +1 -0
  95. package/web/dist/assets/refresh-cw-DCa-Rlwz.js +1 -0
  96. package/web/dist/assets/repo-git-XTqlVOl2.js +1 -0
  97. package/web/dist/assets/run-diff-C7mfxj7f.js +3 -0
  98. package/web/dist/assets/run-header-CfVeY3uM.js +1 -0
  99. package/web/dist/assets/rust-Cfkwpbl8.js +1 -0
  100. package/web/dist/assets/search-x-CoCyl7zT.js +1 -0
  101. package/web/dist/assets/shellscript-CLZ0U2zV.js +1 -0
  102. package/web/dist/assets/skill-detail-C9cniyId.js +1 -0
  103. package/web/dist/assets/skills-DXgY1uXJ.js +1 -0
  104. package/web/dist/assets/skills-ynuO5oCr.js +1 -0
  105. package/web/dist/assets/sql-BsFa4tDR.js +1 -0
  106. package/web/dist/assets/square-terminal-B6PZX4Qp.js +1 -0
  107. package/web/dist/assets/tab-link-phWEqSBy.js +1 -0
  108. package/web/dist/assets/task-changes-DYwnPnTN.js +1 -0
  109. package/web/dist/assets/task-commits-DZzxEzbn.js +1 -0
  110. package/web/dist/assets/task-files-FOAAz2FB.js +2 -0
  111. package/web/dist/assets/task-thread-Bncxe8Os.js +5 -0
  112. package/web/dist/assets/toaster-BS2E1bhz.js +43 -0
  113. package/web/dist/assets/trash-2-CDtxmmc8.js +1 -0
  114. package/web/dist/assets/triangle-alert-6su4Js5O.js +1 -0
  115. package/web/dist/assets/tsx-udAQXfEw.js +1 -0
  116. package/web/dist/assets/typescript-bsJCZSQ-.js +1 -0
  117. package/web/dist/assets/upload-Bp7hQxll.js +1 -0
  118. package/web/dist/assets/use-desktop-eHm2iTXX.js +3 -0
  119. package/web/dist/assets/utils-rQGbOrwc.js +1 -0
  120. package/web/dist/assets/workflows-Dg2wQg6i.js +11 -0
  121. package/web/dist/assets/x-Br_jIDBw.js +1 -0
  122. package/web/dist/assets/yaml-rwi0_p6S.js +1 -0
  123. package/web/dist/index.html +67 -0
@@ -0,0 +1,578 @@
1
+ /**
2
+ * Pure opencode SSE-bus → protocol-v2 mapper. `mapOpencodeEvent` folds one
3
+ * parsed `{type, properties}` bus event into `UiEvent`s plus the next mapper
4
+ * state; the runner calls it ALONGSIDE the v1 path (v1 events keep flowing
5
+ * unchanged — including v1's HTTP-response-synthesized `turn-end`; only the
6
+ * v2 stream uses the correct `session.idle` signal, fixing gap §5.9).
7
+ *
8
+ * Contract: `.ai/analysis/cockpit-ui-redesign/agent-event-protocols.md` §4
9
+ * (wire format: Message/Part model, ToolState lifecycle) and §7.1
10
+ * "OpenCode (SSE)" (the mapping). Golden fixtures replaying wire-faithful
11
+ * bus-event sequences live in `__fixtures__/opencode/`.
12
+ *
13
+ * Robustness rule: input is untrusted wire data — the mapper never throws;
14
+ * unknown event/part types map to zero events.
15
+ *
16
+ * State is explicit and treated as immutable: callers thread the returned
17
+ * `state` into the next call. Ids are deterministic — items reuse the wire
18
+ * part ids, turns get `turn_<n>` minted at each prompt POST — so replaying
19
+ * a stored transcript reproduces the exact event sequence.
20
+ *
21
+ * Opencode-specific mechanics baked in:
22
+ * - text/reasoning parts carry the FULL accumulated text on every update;
23
+ * a per-part cursor diffs it into true `item.delta`s (a server-provided
24
+ * `delta` field wins when present — newer servers send it);
25
+ * - tool parts have the ONLY real `pending` phase of the three backends
26
+ * (`pending→pending`, `running→running`, `completed→completed`,
27
+ * `error→failed`);
28
+ * - the SSE bus is server-wide: parts from a foreign session id are the
29
+ * active subtask's child session and nest via `parentItemId` (§7.1);
30
+ * anything foreign outside a subtask scope is dropped.
31
+ */
32
+ import { toolDisplay } from './tool-display.js';
33
+ export function createOpencodeUiState() {
34
+ return {
35
+ sessionId: null,
36
+ sessionStarted: false,
37
+ turnSeq: 0,
38
+ currentTurnId: null,
39
+ turnErrored: false,
40
+ msgRoles: new Map(),
41
+ cursors: new Map(),
42
+ startedItems: new Set(),
43
+ endedItems: new Set(),
44
+ tools: new Map(),
45
+ lastPlanJson: null,
46
+ subtask: null,
47
+ usageByMessage: new Map(),
48
+ lastUsage: null,
49
+ };
50
+ }
51
+ /**
52
+ * Opencode has no wire-level session-start event — the session is created by
53
+ * the runner's `POST /session`, so the runner calls this once the response
54
+ * carries the id (like codex's out-of-band thread/start result).
55
+ */
56
+ export function opencodeSessionStarted(sessionId, state) {
57
+ if (state.sessionStarted || sessionId === '')
58
+ return { events: [], state };
59
+ return {
60
+ events: [{ type: 'session.started', sessionId, backend: 'opencode' }],
61
+ state: { ...state, sessionId, sessionStarted: true },
62
+ };
63
+ }
64
+ /**
65
+ * Opencode has no wire-level turn-start either — the runner POSTing a prompt
66
+ * IS the turn boundary, so the runner calls this on each prompt POST. The
67
+ * matching `turn.completed` comes from the wire `session.idle` (never from
68
+ * the HTTP prompt response — that is v1's known fidelity gap).
69
+ */
70
+ export function opencodeTurnStarted(state) {
71
+ const turnId = `turn_${state.turnSeq + 1}`;
72
+ return {
73
+ events: [{ type: 'turn.started', turnId }],
74
+ state: { ...state, turnSeq: state.turnSeq + 1, currentTurnId: turnId, turnErrored: false },
75
+ };
76
+ }
77
+ /** Fold one parsed SSE bus event into v2 events. Never throws. */
78
+ export function mapOpencodeEvent(evt, state) {
79
+ if (!isRecord(evt) || typeof evt.type !== 'string')
80
+ return { events: [], state };
81
+ const props = isRecord(evt.properties) ? evt.properties : {};
82
+ switch (evt.type) {
83
+ case 'message.updated':
84
+ case 'message.created':
85
+ case 'message.completed':
86
+ return mapMessageInfo(props, state);
87
+ case 'message.part.updated':
88
+ case 'message.part.created':
89
+ return mapPart(props, state);
90
+ case 'session.idle':
91
+ return mapIdle(props, state);
92
+ case 'session.error':
93
+ return mapSessionError(props, state);
94
+ default:
95
+ // server.connected, session.updated, message.part.removed,
96
+ // permission.* (reserved for the permission.* events later), …
97
+ return { events: [], state };
98
+ }
99
+ }
100
+ // ---- message info → roles + usage.updated -----------------------------------
101
+ function mapMessageInfo(props, state) {
102
+ const info = isRecord(props.info) ? props.info : props;
103
+ const id = str(info.id);
104
+ const role = str(info.role);
105
+ let next = state;
106
+ if (id !== undefined && role !== undefined && state.msgRoles.get(id) !== role) {
107
+ const msgRoles = new Map(state.msgRoles);
108
+ msgRoles.set(id, role);
109
+ next = { ...next, msgRoles };
110
+ }
111
+ // Telemetry rides only on assistant messages (cumulative per message).
112
+ if (id !== undefined && role === 'assistant') {
113
+ const usage = tokensToUsage(info.tokens);
114
+ const cost = num(info.cost);
115
+ if (usage || cost !== undefined) {
116
+ const prev = next.usageByMessage.get(id) ?? EMPTY_MESSAGE_USAGE;
117
+ const merged = {
118
+ // Monotonic guard: a stale/zero snapshot never shrinks the record.
119
+ info: usage && (prev.info === null || usage.total >= prev.info.total) ? usage : prev.info,
120
+ infoCost: maxCost(prev.infoCost, cost),
121
+ steps: prev.steps,
122
+ stepsCost: prev.stepsCost,
123
+ };
124
+ const usageByMessage = new Map(next.usageByMessage);
125
+ usageByMessage.set(id, merged);
126
+ return emitUsage({ ...next, usageByMessage });
127
+ }
128
+ }
129
+ return { events: [], state: next };
130
+ }
131
+ // ---- parts -------------------------------------------------------------------
132
+ function mapPart(props, state) {
133
+ const part = isRecord(props.part) ? props.part : props;
134
+ const type = str(part.type);
135
+ const messageID = str(part.messageID);
136
+ const id = str(part.id) ?? messageID;
137
+ if (type === undefined || id === undefined)
138
+ return { events: [], state };
139
+ // Foreign-session parts are the active subtask's child session — they nest
140
+ // under it; without a subtask scope they are another session's traffic.
141
+ const partSession = str(part.sessionID);
142
+ const foreign = partSession !== undefined && state.sessionId !== null && partSession !== state.sessionId;
143
+ if (foreign && state.subtask === null)
144
+ return { events: [], state };
145
+ const parentItemId = foreign && state.subtask !== null ? state.subtask.id : undefined;
146
+ // Only assistant parts surface — the user's own prompt streams as parts
147
+ // over the same feed. Role is known early (message.updated precedes its
148
+ // parts); an unknown role means "not assistant yet" → skip.
149
+ if (messageID !== undefined && state.msgRoles.get(messageID) !== 'assistant') {
150
+ return { events: [], state };
151
+ }
152
+ switch (type) {
153
+ case 'text':
154
+ return mapTextLike(part, id, 'text', props.delta, parentItemId, state);
155
+ case 'reasoning':
156
+ return mapTextLike(part, id, 'reasoning', props.delta, parentItemId, state);
157
+ case 'tool':
158
+ return mapTool(part, id, parentItemId, state);
159
+ case 'patch':
160
+ return mapPatch(part, id, parentItemId, state);
161
+ case 'subtask':
162
+ return mapSubtask(part, id, state);
163
+ case 'step-finish':
164
+ return mapStepFinish(part, messageID, state);
165
+ default:
166
+ // file, snapshot, step-start, agent, retry, compaction, … — nothing to
167
+ // render yet.
168
+ return { events: [], state };
169
+ }
170
+ }
171
+ /** Text/reasoning parts carry the FULL accumulated text each update — the
172
+ * cursor diffs it into true deltas; a server-sent `delta` wins when present.
173
+ * `time.end` marks the part finished → `item.completed` (once). */
174
+ function mapTextLike(part, id, field, serverDelta, parentItemId, state) {
175
+ const full = typeof part.text === 'string' ? part.text : '';
176
+ const events = [];
177
+ let startedItems = state.startedItems;
178
+ let cursors = state.cursors;
179
+ let endedItems = state.endedItems;
180
+ const makeItem = (text) => {
181
+ const item = field === 'text'
182
+ ? { kind: 'message', id, role: 'assistant', text }
183
+ : { kind: 'reasoning', id, text };
184
+ if (parentItemId !== undefined)
185
+ item.parentItemId = parentItemId;
186
+ return item;
187
+ };
188
+ if (!startedItems.has(id)) {
189
+ events.push({ type: 'item.started', item: makeItem('') });
190
+ startedItems = new Set(startedItems).add(id);
191
+ }
192
+ const cursor = cursors.get(id) ?? 0;
193
+ const winning = str(serverDelta);
194
+ let delta;
195
+ let nextCursor = cursor;
196
+ if (winning !== undefined) {
197
+ delta = winning;
198
+ // Keep the cursor consistent with the accumulated text so a later
199
+ // full-text-only update doesn't re-emit what the server delta covered.
200
+ nextCursor = Math.max(cursor + winning.length, full.length);
201
+ }
202
+ else if (full.length > cursor) {
203
+ delta = full.slice(cursor);
204
+ nextCursor = full.length;
205
+ }
206
+ if (delta !== undefined) {
207
+ events.push({ type: 'item.delta', itemId: id, field, delta });
208
+ const nextCursors = new Map(cursors);
209
+ nextCursors.set(id, nextCursor);
210
+ cursors = nextCursors;
211
+ }
212
+ const time = isRecord(part.time) ? part.time : undefined;
213
+ if (time && num(time.end) !== undefined && !endedItems.has(id)) {
214
+ events.push({ type: 'item.completed', item: makeItem(full) });
215
+ endedItems = new Set(endedItems).add(id);
216
+ }
217
+ if (events.length === 0)
218
+ return { events, state };
219
+ return { events, state: { ...state, startedItems, cursors, endedItems } };
220
+ }
221
+ /** The §7.1 direct status map — opencode is the only backend with a real
222
+ * pending phase, and its `error` state is v2's `failed`. */
223
+ const STATUS_MAP = {
224
+ pending: 'pending',
225
+ running: 'running',
226
+ completed: 'completed',
227
+ error: 'failed',
228
+ };
229
+ function mapTool(part, id, parentItemId, state) {
230
+ const name = str(part.tool) ?? str(part.name) ?? 'tool';
231
+ const toolState = isRecord(part.state) ? part.state : {};
232
+ const prev = state.tools.get(id);
233
+ const mapped = typeof toolState.status === 'string' ? STATUS_MAP[toolState.status] : undefined;
234
+ const status = mapped ?? prev?.status ?? 'pending';
235
+ const display = toolDisplay(name, toolState.input);
236
+ // The running/completed states carry a live human title ("npm test") — the
237
+ // wire word wins over the derived one (§7.1). The error state has no title
238
+ // field (§4.2), so the last live title carries over instead of regressing.
239
+ const title = str(toolState.title) ?? prev?.title ?? display.title;
240
+ const item = { kind: 'tool', id, name, toolKind: display.toolKind, title, status };
241
+ if (toolState.input !== undefined)
242
+ item.input = toolState.input;
243
+ if (status === 'completed') {
244
+ const output = str(toolState.output);
245
+ if (output !== undefined)
246
+ item.output = output;
247
+ }
248
+ if (status === 'failed') {
249
+ const error = errorText(toolState.error);
250
+ if (error !== undefined)
251
+ item.error = error;
252
+ }
253
+ const metadata = isRecord(toolState.metadata) ? toolState.metadata : undefined;
254
+ const exitCode = metadata ? num(metadata.exit) : undefined;
255
+ if (exitCode !== undefined)
256
+ item.exitCode = exitCode;
257
+ if (parentItemId !== undefined)
258
+ item.parentItemId = parentItemId;
259
+ const events = [];
260
+ const settled = status === 'completed' || status === 'failed';
261
+ if (prev === undefined) {
262
+ // First sight — a part already settled is a lone final snapshot
263
+ // (consumers upsert by id, so it renders fine).
264
+ events.push({ type: settled ? 'item.completed' : 'item.started', item });
265
+ }
266
+ else if (prev.status !== status) {
267
+ events.push({ type: settled ? 'item.completed' : 'item.updated', item });
268
+ }
269
+ else if (prev.title !== title && !settled) {
270
+ // Same state, new live title (running-state metadata updates).
271
+ events.push({ type: 'item.updated', item });
272
+ }
273
+ let next = state;
274
+ if (events.length > 0) {
275
+ const tools = new Map(state.tools);
276
+ tools.set(id, { status, title });
277
+ next = { ...next, tools };
278
+ }
279
+ // todowrite IS the plan (full-replacement semantics, deduplicated).
280
+ if (name.toLowerCase() === 'todowrite') {
281
+ const entries = planEntriesOf(toolState.input);
282
+ if (entries) {
283
+ const json = JSON.stringify(entries);
284
+ if (json !== next.lastPlanJson) {
285
+ events.push({ type: 'plan.updated', entries });
286
+ next = { ...next, lastPlanJson: json };
287
+ }
288
+ }
289
+ }
290
+ if (events.length === 0 && next === state)
291
+ return { events, state };
292
+ return { events, state: next };
293
+ }
294
+ /** todowrite input `{todos:[{content,status,priority}]}` → plan entries
295
+ * (an empty list is a valid plan; malformed rows are filtered). */
296
+ function planEntriesOf(input) {
297
+ if (!isRecord(input) || !Array.isArray(input.todos))
298
+ return undefined;
299
+ const entries = [];
300
+ for (const todo of input.todos) {
301
+ if (!isRecord(todo) || typeof todo.content !== 'string')
302
+ continue;
303
+ const status = PLAN_STATUSES.find((s) => s === todo.status);
304
+ if (status === undefined)
305
+ continue;
306
+ const entry = { content: todo.content, status };
307
+ if (todo.priority === 'high' || todo.priority === 'medium' || todo.priority === 'low') {
308
+ entry.priority = todo.priority;
309
+ }
310
+ entries.push(entry);
311
+ }
312
+ return entries;
313
+ }
314
+ const PLAN_STATUSES = ['pending', 'in_progress', 'completed'];
315
+ /** `patch` parts snapshot applied file changes → a completed edit-tool item
316
+ * carrying `diffs` (unified when the wire includes content; the older
317
+ * paths-only shape still yields per-file entries + locations). */
318
+ function mapPatch(part, id, parentItemId, state) {
319
+ if (state.endedItems.has(id))
320
+ return { events: [], state };
321
+ const artifacts = patchArtifacts(part.files);
322
+ if (!artifacts)
323
+ return { events: [], state };
324
+ const { diffs, locations } = artifacts;
325
+ const label = locations.length === 1 ? locations[0]?.path : locations.length > 1 ? `${locations.length} files` : undefined;
326
+ const item = {
327
+ kind: 'tool',
328
+ id,
329
+ name: 'patch',
330
+ toolKind: 'edit',
331
+ title: label !== undefined ? `Edit ${label}` : 'Edit',
332
+ status: 'completed',
333
+ diffs,
334
+ locations,
335
+ };
336
+ if (parentItemId !== undefined)
337
+ item.parentItemId = parentItemId;
338
+ return {
339
+ events: [{ type: 'item.completed', item }],
340
+ state: { ...state, endedItems: new Set(state.endedItems).add(id) },
341
+ };
342
+ }
343
+ /** `files` as `{path: unifiedDiff}` record (or `[{path, diff}]`) carries the
344
+ * content; the paths-only `string[]` shape still yields diff entries.
345
+ * Opencode sends unified diffs only — old text is unknown, never "empty". */
346
+ function patchArtifacts(files) {
347
+ const diffs = [];
348
+ const push = (path, unified) => {
349
+ const diff = { path, oldText: null };
350
+ if (unified !== undefined)
351
+ diff.unified = unified;
352
+ diffs.push(diff);
353
+ };
354
+ if (Array.isArray(files)) {
355
+ for (const entry of files) {
356
+ if (typeof entry === 'string' && entry !== '')
357
+ push(entry);
358
+ else if (isRecord(entry)) {
359
+ const path = str(entry.path) ?? str(entry.file) ?? str(entry.filename);
360
+ if (path !== undefined)
361
+ push(path, str(entry.diff) ?? str(entry.patch));
362
+ }
363
+ }
364
+ }
365
+ else if (isRecord(files)) {
366
+ for (const [path, value] of Object.entries(files)) {
367
+ if (path === '')
368
+ continue;
369
+ if (typeof value === 'string')
370
+ push(path, str(value));
371
+ else if (isRecord(value))
372
+ push(path, str(value.diff) ?? str(value.patch));
373
+ else
374
+ push(path);
375
+ }
376
+ }
377
+ if (diffs.length === 0)
378
+ return undefined;
379
+ return { diffs, locations: diffs.map((d) => ({ path: d.path })) };
380
+ }
381
+ /** `subtask` parts spawn a child session → a task-kind tool item whose id
382
+ * scopes subsequent foreign-session items via `parentItemId` (§7.1); the
383
+ * child's `session.idle` completes it. */
384
+ function mapSubtask(part, id, state) {
385
+ if (state.startedItems.has(id))
386
+ return { events: [], state };
387
+ const description = str(part.description);
388
+ const display = toolDisplay('task', { description });
389
+ const item = {
390
+ kind: 'tool',
391
+ id,
392
+ name: 'subtask',
393
+ toolKind: display.toolKind,
394
+ title: display.title,
395
+ status: 'running',
396
+ };
397
+ const input = {};
398
+ if (str(part.prompt) !== undefined)
399
+ input.prompt = part.prompt;
400
+ if (description !== undefined)
401
+ input.description = description;
402
+ if (str(part.agent) !== undefined)
403
+ input.agent = part.agent;
404
+ if (Object.keys(input).length > 0)
405
+ item.input = input;
406
+ return {
407
+ events: [{ type: 'item.started', item }],
408
+ state: {
409
+ ...state,
410
+ startedItems: new Set(state.startedItems).add(id),
411
+ subtask: { id, title: item.title, input: item.input },
412
+ },
413
+ };
414
+ }
415
+ /** `step-finish` parts carry per-LLM-round-trip cost + tokens → summed as
416
+ * usage increments (the larger of this sum and the `message.updated`
417
+ * snapshot wins per message — see `MessageUsage`). */
418
+ function mapStepFinish(part, messageID, state) {
419
+ if (messageID === undefined)
420
+ return { events: [], state };
421
+ const tokens = tokensToUsage(part.tokens);
422
+ const cost = num(part.cost);
423
+ if (!tokens && cost === undefined)
424
+ return { events: [], state };
425
+ const prev = state.usageByMessage.get(messageID) ?? EMPTY_MESSAGE_USAGE;
426
+ const merged = {
427
+ info: prev.info,
428
+ infoCost: prev.infoCost,
429
+ steps: tokens ? addUsage(prev.steps, tokens) : prev.steps,
430
+ stepsCost: cost !== undefined ? (prev.stepsCost ?? 0) + cost : prev.stepsCost,
431
+ };
432
+ const usageByMessage = new Map(state.usageByMessage);
433
+ usageByMessage.set(messageID, merged);
434
+ return emitUsage({ ...state, usageByMessage });
435
+ }
436
+ // ---- session lifecycle -------------------------------------------------------
437
+ /** `session.idle` is THE turn-end signal (§4.1). The main session's idle
438
+ * closes the current turn; a foreign idle is the subtask's child session
439
+ * going quiet → the subtask item completes. */
440
+ function mapIdle(props, state) {
441
+ const sid = str(props.sessionID);
442
+ const isMain = sid === undefined || state.sessionId === null || sid === state.sessionId;
443
+ if (!isMain) {
444
+ if (state.subtask === null)
445
+ return { events: [], state };
446
+ const item = {
447
+ kind: 'tool',
448
+ id: state.subtask.id,
449
+ name: 'subtask',
450
+ toolKind: 'task',
451
+ title: state.subtask.title,
452
+ status: 'completed',
453
+ };
454
+ if (state.subtask.input !== undefined)
455
+ item.input = state.subtask.input;
456
+ return { events: [{ type: 'item.completed', item }], state: { ...state, subtask: null } };
457
+ }
458
+ // Idle with no turn in flight (or a repeated idle) closes nothing.
459
+ if (state.currentTurnId === null)
460
+ return { events: [], state };
461
+ return {
462
+ events: [
463
+ {
464
+ type: 'turn.completed',
465
+ turnId: state.currentTurnId,
466
+ stopReason: state.turnErrored ? 'error' : 'end_turn',
467
+ },
468
+ ],
469
+ state: { ...state, currentTurnId: null, turnErrored: false },
470
+ };
471
+ }
472
+ /** `session.error` → non-fatal `session.error` (the mapper can't know the
473
+ * session died — the runner owns fatality) + the turn closes as 'error'. */
474
+ function mapSessionError(props, state) {
475
+ const sid = str(props.sessionID);
476
+ const foreign = sid !== undefined && state.sessionId !== null && sid !== state.sessionId;
477
+ if (foreign && state.subtask === null)
478
+ return { events: [], state };
479
+ const message = errorText(props.error) ?? 'opencode session error';
480
+ return {
481
+ events: [{ type: 'session.error', message, fatal: false }],
482
+ state: { ...state, turnErrored: state.currentTurnId !== null ? true : state.turnErrored },
483
+ };
484
+ }
485
+ // ---- telemetry ----------------------------------------------------------------
486
+ const EMPTY_MESSAGE_USAGE = { info: null, infoCost: null, steps: null, stepsCost: null };
487
+ /** `{input, output, reasoning, cache:{read,write}}` → raw TokenUsage
488
+ * (opencode reports no total — the sum of the parts is the total). */
489
+ function tokensToUsage(tokens) {
490
+ if (!isRecord(tokens))
491
+ return undefined;
492
+ const input = num(tokens.input) ?? 0;
493
+ const output = num(tokens.output) ?? 0;
494
+ const reasoning = num(tokens.reasoning);
495
+ const cache = isRecord(tokens.cache) ? tokens.cache : undefined;
496
+ const cacheRead = cache ? num(cache.read) : undefined;
497
+ const cacheWrite = cache ? num(cache.write) : undefined;
498
+ const usage = {
499
+ input,
500
+ output,
501
+ total: input + output + (reasoning ?? 0) + (cacheRead ?? 0) + (cacheWrite ?? 0),
502
+ };
503
+ if (cacheRead !== undefined)
504
+ usage.cacheRead = cacheRead;
505
+ if (cacheWrite !== undefined)
506
+ usage.cacheWrite = cacheWrite;
507
+ if (reasoning !== undefined)
508
+ usage.reasoning = reasoning;
509
+ return usage;
510
+ }
511
+ function addUsage(a, b) {
512
+ if (a === null)
513
+ return b;
514
+ const sum = { input: a.input + b.input, output: a.output + b.output, total: a.total + b.total };
515
+ const cacheRead = optSum(a.cacheRead, b.cacheRead);
516
+ if (cacheRead !== undefined)
517
+ sum.cacheRead = cacheRead;
518
+ const cacheWrite = optSum(a.cacheWrite, b.cacheWrite);
519
+ if (cacheWrite !== undefined)
520
+ sum.cacheWrite = cacheWrite;
521
+ const reasoning = optSum(a.reasoning, b.reasoning);
522
+ if (reasoning !== undefined)
523
+ sum.reasoning = reasoning;
524
+ return sum;
525
+ }
526
+ function optSum(a, b) {
527
+ if (a === undefined && b === undefined)
528
+ return undefined;
529
+ return (a ?? 0) + (b ?? 0);
530
+ }
531
+ function maxCost(a, b) {
532
+ if (b === undefined)
533
+ return a;
534
+ return a === null ? b : Math.max(a, b);
535
+ }
536
+ /** Session totals = per-message effective usage summed across messages;
537
+ * emitted only when the snapshot actually changed and is non-zero. */
538
+ function emitUsage(state) {
539
+ let usage = { input: 0, output: 0, total: 0 };
540
+ let cost = null;
541
+ for (const mu of state.usageByMessage.values()) {
542
+ const effective = mu.info !== null && (mu.steps === null || mu.info.total >= mu.steps.total) ? mu.info : mu.steps;
543
+ if (effective !== null)
544
+ usage = addUsage(usage, effective);
545
+ const effCost = maxCost(mu.infoCost, mu.stepsCost ?? undefined);
546
+ if (effCost !== null)
547
+ cost = (cost ?? 0) + effCost;
548
+ }
549
+ if (usage.total === 0 && (cost === null || cost === 0))
550
+ return { events: [], state };
551
+ if (state.lastUsage !== null && state.lastUsage.total === usage.total && state.lastUsage.cost === cost) {
552
+ return { events: [], state };
553
+ }
554
+ const event = { type: 'usage.updated', usage };
555
+ if (cost !== null)
556
+ event.costUsd = cost;
557
+ return { events: [event], state: { ...state, lastUsage: { total: usage.total, cost } } };
558
+ }
559
+ // ---- tiny guards ---------------------------------------------------------------
560
+ function isRecord(value) {
561
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
562
+ }
563
+ function str(value) {
564
+ return typeof value === 'string' && value !== '' ? value : undefined;
565
+ }
566
+ function num(value) {
567
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
568
+ }
569
+ /** Opencode error objects are `{name, data:{message}}` (or plain strings). */
570
+ function errorText(error) {
571
+ if (typeof error === 'string')
572
+ return str(error);
573
+ if (!isRecord(error))
574
+ return undefined;
575
+ const data = isRecord(error.data) ? error.data : undefined;
576
+ return str(error.message) ?? (data && str(data.message)) ?? str(error.name);
577
+ }
578
+ //# sourceMappingURL=opencode-ui-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-ui-mapper.js","sourceRoot":"","sources":["../../src/core/opencode-ui-mapper.ts"],"names":[],"mappings":"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"}