@wjarka/cezarion 0.16.0-dev.1503 → 0.16.0-pr923.1504

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 (79) hide show
  1. package/README.md +15 -4
  2. package/dist/contract/index.js +3 -0
  3. package/dist/contract/runs.d.ts +30 -0
  4. package/dist/contract/skills.d.ts +4 -0
  5. package/dist/core/agent-runner.d.ts +9 -6
  6. package/dist/core/agent-runner.js +4 -2
  7. package/dist/core/agent-runner.js.map +1 -1
  8. package/dist/core/cursor-print-capabilities.d.ts +12 -0
  9. package/dist/core/cursor-print-capabilities.js +77 -0
  10. package/dist/core/cursor-print-capabilities.js.map +1 -0
  11. package/dist/core/cursor-print-process.d.ts +31 -0
  12. package/dist/core/cursor-print-process.js +129 -0
  13. package/dist/core/cursor-print-process.js.map +1 -0
  14. package/dist/core/cursor-print-runner.d.ts +26 -0
  15. package/dist/core/cursor-print-runner.js +512 -0
  16. package/dist/core/cursor-print-runner.js.map +1 -0
  17. package/dist/core/cursor-print-tool-catalog.d.ts +6 -0
  18. package/dist/core/cursor-print-tool-catalog.js +78 -0
  19. package/dist/core/cursor-print-tool-catalog.js.map +1 -0
  20. package/dist/core/cursor-print-ui-mapper.d.ts +47 -0
  21. package/dist/core/cursor-print-ui-mapper.js +573 -0
  22. package/dist/core/cursor-print-ui-mapper.js.map +1 -0
  23. package/dist/core/cursor-runner.d.ts +24 -0
  24. package/dist/core/cursor-runner.js +146 -0
  25. package/dist/core/cursor-runner.js.map +1 -0
  26. package/dist/core/process-usage.d.ts +5 -0
  27. package/dist/core/process-usage.js +24 -4
  28. package/dist/core/process-usage.js.map +1 -1
  29. package/dist/core/runner-factory.d.ts +4 -1
  30. package/dist/core/runner-factory.js +3 -3
  31. package/dist/core/runner-factory.js.map +1 -1
  32. package/dist/delegation/transport.d.ts +13 -13
  33. package/dist/runs/store.d.ts +9 -0
  34. package/dist/runs/store.js +1 -0
  35. package/dist/runs/store.js.map +1 -1
  36. package/dist/server/server.d.ts +118 -92
  37. package/dist/workflows/run.js +39 -8
  38. package/dist/workflows/run.js.map +1 -1
  39. package/package.json +3 -3
  40. package/scripts/mock-ci-tool.mjs +12 -4
  41. package/scripts/mock-cursor-acp.mjs +1 -0
  42. package/scripts/mock-cursor-print.mjs +196 -0
  43. package/scripts/probe-cursor-print.mjs +616 -0
  44. package/web/dist/assets/{agent-accounts-CFOBMVHc.js → agent-accounts-CDhVzwnd.js} +1 -1
  45. package/web/dist/assets/{alert-dialog-BrpNUwMt.js → alert-dialog-A0-kEfJK.js} +1 -1
  46. package/web/dist/assets/{button-C_rd7CPp.js → button-Jj1Itx83.js} +1 -1
  47. package/web/dist/assets/{compare-variants-D6WXhvXA.js → compare-variants-aor2j4bO.js} +1 -1
  48. package/web/dist/assets/{diff-DrEARXTV.js → diff-CDL5SDNO.js} +2 -2
  49. package/web/dist/assets/{diff-controls-B1-j7nFg.js → diff-controls-BWAkxipD.js} +1 -1
  50. package/web/dist/assets/{diff-view-DvGLjdTk.js → diff-view-DWh9FnNY.js} +1 -1
  51. package/web/dist/assets/{dropdown-menu-BegOZFrj.js → dropdown-menu-Ddqp8eUw.js} +1 -1
  52. package/web/dist/assets/{format-DpNe3S0A.js → format-DTNjugyE.js} +1 -1
  53. package/web/dist/assets/{git-toolbar-Cw4ljmhB.js → git-toolbar-B4rwm9Lr.js} +1 -1
  54. package/web/dist/assets/{github-CfV5sqL0.js → github-DgMD1v4U.js} +1 -1
  55. package/web/dist/assets/{image-preview-FOEfqpZP.js → image-preview-Dy5i96RC.js} +1 -1
  56. package/web/dist/assets/{index-DgWWlOLy.js → index-BfAearY6.js} +4 -4
  57. package/web/dist/assets/{nav-row-styles-vp2JbhuJ.js → nav-row-styles-Ci-Ke7wG.js} +1 -1
  58. package/web/dist/assets/{popover-BohP6WTx.js → popover-BjjDOSGv.js} +1 -1
  59. package/web/dist/assets/{preview-pane-connected-qTA5KNoJ.js → preview-pane-connected-Nv_nhV63.js} +1 -1
  60. package/web/dist/assets/{preview-state-vuMviq6q.js → preview-state-D8-YBJ6m.js} +1 -1
  61. package/web/dist/assets/{prompt-templates-Cubdut_C.js → prompt-templates-DFeXUVOZ.js} +1 -1
  62. package/web/dist/assets/{repo-git-Cf4t5PD0.js → repo-git-DcWh5s_b.js} +1 -1
  63. package/web/dist/assets/{run-diff-BpkUW37Z.js → run-diff-1ZzFrOx1.js} +1 -1
  64. package/web/dist/assets/{run-header-68WHf9wV.js → run-header-CPoYzbAy.js} +1 -1
  65. package/web/dist/assets/{skills-DiVIgKeU.js → skills-CnLazLgF.js} +1 -1
  66. package/web/dist/assets/{status-dot-CqTJHSP9.js → status-dot-DwFmt_Jg.js} +1 -1
  67. package/web/dist/assets/{tab-link-B07Hu4QX.js → tab-link-COpvArgR.js} +1 -1
  68. package/web/dist/assets/{task-changes--lQF6EYf.js → task-changes-CY-mi-mC.js} +1 -1
  69. package/web/dist/assets/{task-commits-Cx0qy4DN.js → task-commits-EvLi8T4a.js} +1 -1
  70. package/web/dist/assets/{task-files-D50s-gKW.js → task-files-BR3d8X2U.js} +1 -1
  71. package/web/dist/assets/{task-github-item-DaqmSwYT.js → task-github-item-BVsPg9RI.js} +1 -1
  72. package/web/dist/assets/{task-thread-BPQ64lui.js → task-thread-DQCsu_v8.js} +1 -1
  73. package/web/dist/assets/{textarea-D20O4Pw0.js → textarea-BbNV5Uo2.js} +1 -1
  74. package/web/dist/assets/{thread-state-DWcFMrvb.js → thread-state-DTkIvHsU.js} +1 -1
  75. package/web/dist/assets/{use-hand-to-agent-state-Cy9eyyfL.js → use-hand-to-agent-state-DT-QBsPC.js} +1 -1
  76. package/web/dist/assets/{utils-JsL3ZsJf.js → utils-POVs3UKu.js} +1 -1
  77. package/web/dist/assets/{workflows-jwG7uxqi.js → workflows-BTE-5RwX.js} +1 -1
  78. package/web/dist/assets/{zoomable-image-BJJ64KGc.js → zoomable-image-cL1VgYK4.js} +1 -1
  79. package/web/dist/index.html +13 -13
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Cursor Agent CLI `stream-json` → protocol v2 mapper (+ v1 helpers).
3
+ * Adapted from open-mercato/cezar PR #807's fresh-turn print mapper. This
4
+ * version retains state across exact-resume processes and maps the native
5
+ * question rejection observed on Cursor 2026.10.01-e373342.
6
+ *
7
+ * Wire shapes: https://cursor.com/docs/cli/reference/output-format
8
+ * (`system/init`, `assistant`, `tool_call` started/completed, `result`).
9
+ *
10
+ * Per the docs above, `thinking` events are suppressed in print mode and the
11
+ * terminal `result` frame carries no `usage`/`total_cost_usd` — reasoning and
12
+ * usage.updated/turn.completed-usage are therefore documented `except`
13
+ * exclusions in `ui-parity.test.ts` (AGENT_PROTOCOL.md §6), not capabilities
14
+ * this mapper produces. The `usage`/`total_cost_usd` reads below are kept as a
15
+ * defensive no-op against real output, per the docs' own "field additions may
16
+ * occur… backward-compatible" note — see `cursor-ui-mapper.test.ts`'s header
17
+ * for the full verified-vs-unverified provenance split.
18
+ *
19
+ * Never throws on malformed input. State is immutable — callers thread the
20
+ * returned `state` into the next call.
21
+ */
22
+ import type { AgentEvent } from './agent-runner.ts';
23
+ import type { PlanEntry, UiEvent, UiToolItem } from './ui-events.ts';
24
+ export interface CursorPrintUiState {
25
+ readonly fallbackSessionId?: string;
26
+ readonly sessionStarted: boolean;
27
+ readonly turnSeq: number;
28
+ readonly currentTurnId: string | null;
29
+ readonly itemSeq: number;
30
+ readonly sawAssistantText: boolean;
31
+ readonly openTools: ReadonlyMap<string, UiToolItem>;
32
+ readonly todos: ReadonlyMap<string, PlanEntry>;
33
+ }
34
+ export interface CursorPrintUiMapping {
35
+ events: UiEvent[];
36
+ state: CursorPrintUiState;
37
+ }
38
+ export declare function createCursorPrintUiState(opts?: {
39
+ fallbackSessionId?: string;
40
+ }): CursorPrintUiState;
41
+ /** Fold one parsed stream-json line into v2 events. Never throws. */
42
+ export declare function mapCursorPrintMessage(msg: unknown, state: CursorPrintUiState): CursorPrintUiMapping;
43
+ /**
44
+ * Convert one Cursor stream-json object into zero or more v1 AgentEvents.
45
+ * With default (non-partial) stream-json, every assistant event is used.
46
+ */
47
+ export declare function mapCursorPrintStreamEvent(raw: unknown): AgentEvent[];
@@ -0,0 +1,573 @@
1
+ /**
2
+ * Cursor Agent CLI `stream-json` → protocol v2 mapper (+ v1 helpers).
3
+ * Adapted from open-mercato/cezar PR #807's fresh-turn print mapper. This
4
+ * version retains state across exact-resume processes and maps the native
5
+ * question rejection observed on Cursor 2026.10.01-e373342.
6
+ *
7
+ * Wire shapes: https://cursor.com/docs/cli/reference/output-format
8
+ * (`system/init`, `assistant`, `tool_call` started/completed, `result`).
9
+ *
10
+ * Per the docs above, `thinking` events are suppressed in print mode and the
11
+ * terminal `result` frame carries no `usage`/`total_cost_usd` — reasoning and
12
+ * usage.updated/turn.completed-usage are therefore documented `except`
13
+ * exclusions in `ui-parity.test.ts` (AGENT_PROTOCOL.md §6), not capabilities
14
+ * this mapper produces. The `usage`/`total_cost_usd` reads below are kept as a
15
+ * defensive no-op against real output, per the docs' own "field additions may
16
+ * occur… backward-compatible" note — see `cursor-ui-mapper.test.ts`'s header
17
+ * for the full verified-vs-unverified provenance split.
18
+ *
19
+ * Never throws on malformed input. State is immutable — callers thread the
20
+ * returned `state` into the next call.
21
+ */
22
+ import { toolDisplay } from './tool-display.js';
23
+ export function createCursorPrintUiState(opts = {}) {
24
+ return {
25
+ fallbackSessionId: opts.fallbackSessionId,
26
+ sessionStarted: false,
27
+ turnSeq: 0,
28
+ currentTurnId: null,
29
+ itemSeq: 0,
30
+ sawAssistantText: false,
31
+ openTools: new Map(),
32
+ todos: new Map(),
33
+ };
34
+ }
35
+ /** Fold one parsed stream-json line into v2 events. Never throws. */
36
+ export function mapCursorPrintMessage(msg, state) {
37
+ try {
38
+ if (!isRecord(msg))
39
+ return { events: [], state };
40
+ switch (msg.type) {
41
+ case 'system':
42
+ return msg.subtype === 'init' ? mapInit(msg, state) : { events: [], state };
43
+ case 'assistant':
44
+ return mapAssistant(msg, state);
45
+ case 'tool_call':
46
+ return mapToolCall(msg, state);
47
+ case 'result':
48
+ return mapResult(msg, state);
49
+ default:
50
+ return { events: [], state };
51
+ }
52
+ }
53
+ catch {
54
+ return { events: [], state };
55
+ }
56
+ }
57
+ function mapInit(msg, state) {
58
+ const sessionId = str(msg.session_id) ?? state.fallbackSessionId ?? '';
59
+ if (!sessionId || state.currentTurnId !== null)
60
+ return { events: [], state };
61
+ const event = {
62
+ type: 'session.started',
63
+ sessionId,
64
+ backend: 'cursor',
65
+ };
66
+ const model = str(msg.model);
67
+ if (model !== undefined)
68
+ event.model = model;
69
+ const cwd = str(msg.cwd);
70
+ if (cwd !== undefined)
71
+ event.cwd = cwd;
72
+ // Every print process starts one turn, but a resumed process belongs to the
73
+ // same logical session. Only its first init announces session.started.
74
+ const turnId = `turn_${state.turnSeq + 1}`;
75
+ return {
76
+ events: [...(state.sessionStarted ? [] : [event]), { type: 'turn.started', turnId }],
77
+ state: {
78
+ ...state,
79
+ sessionStarted: true,
80
+ turnSeq: state.turnSeq + 1,
81
+ currentTurnId: turnId,
82
+ sawAssistantText: false,
83
+ },
84
+ };
85
+ }
86
+ function mapAssistant(msg, state) {
87
+ // Skip partial-stream duplicates (docs: timestamp_ms + model_call_id table).
88
+ if ('model_call_id' in msg)
89
+ return { events: [], state };
90
+ const content = messageContent(msg);
91
+ const events = [];
92
+ let itemSeq = state.itemSeq;
93
+ let sawAssistantText = state.sawAssistantText;
94
+ for (const raw of content) {
95
+ if (!isRecord(raw))
96
+ continue;
97
+ if (raw.type === 'text' && typeof raw.text === 'string' && raw.text) {
98
+ sawAssistantText = true;
99
+ const item = { kind: 'message', id: `item_${++itemSeq}`, role: 'assistant', text: raw.text };
100
+ events.push({ type: 'item.started', item }, { type: 'item.completed', item });
101
+ }
102
+ else if (raw.type === 'thinking' && typeof raw.thinking === 'string' && raw.thinking.trim() !== '') {
103
+ // Print mode suppresses dedicated thinking events; content-block thinking
104
+ // is the documented substitute when a model still emits it.
105
+ const item = { kind: 'reasoning', id: `item_${++itemSeq}`, text: raw.thinking };
106
+ events.push({ type: 'item.started', item }, { type: 'item.completed', item });
107
+ }
108
+ }
109
+ if (events.length === 0)
110
+ return { events, state };
111
+ return { events, state: { ...state, itemSeq, sawAssistantText } };
112
+ }
113
+ function mapToolCall(msg, state) {
114
+ const callId = str(msg.call_id);
115
+ if (!callId)
116
+ return { events: [], state };
117
+ const subtype = str(msg.subtype);
118
+ const parsed = parseCursorToolCall(msg.tool_call);
119
+ if (subtype === 'started') {
120
+ const display = toolDisplay(parsed.name, parsed.input);
121
+ const item = {
122
+ kind: 'tool',
123
+ id: callId,
124
+ name: parsed.name,
125
+ toolKind: display.toolKind,
126
+ title: display.title,
127
+ status: 'running',
128
+ };
129
+ if (parsed.input !== undefined)
130
+ item.input = parsed.input;
131
+ const edit = editArtifacts(parsed.name, parsed.input);
132
+ if (edit) {
133
+ if (edit.diffs)
134
+ item.diffs = edit.diffs;
135
+ item.locations = edit.locations;
136
+ }
137
+ const events = [{ type: 'item.started', item }];
138
+ if (parsed.name === 'UpdateTodos') {
139
+ const updated = nativeTodoUpdate(parsed.input, state.todos);
140
+ if (updated) {
141
+ events.push({ type: 'plan.updated', entries: [...updated.values()] });
142
+ const openTools = new Map(state.openTools);
143
+ openTools.set(callId, item);
144
+ return { events, state: { ...state, openTools, todos: updated } };
145
+ }
146
+ }
147
+ else if (parsed.name === 'TodoWrite') {
148
+ const entries = planEntries(parsed.input);
149
+ if (entries)
150
+ events.push({ type: 'plan.updated', entries });
151
+ }
152
+ const openTools = new Map(state.openTools);
153
+ openTools.set(callId, item);
154
+ return { events, state: { ...state, openTools } };
155
+ }
156
+ if (subtype === 'completed') {
157
+ const open = state.openTools.get(callId);
158
+ if (!open)
159
+ return { events: [], state };
160
+ const failed = toolFailed(parsed);
161
+ const item = {
162
+ ...open,
163
+ status: failed ? 'failed' : 'completed',
164
+ };
165
+ const output = toolOutput(parsed);
166
+ if (output !== undefined)
167
+ item.output = output;
168
+ if (failed) {
169
+ const err = toolErrorMessage(parsed);
170
+ if (err)
171
+ item.error = err;
172
+ }
173
+ // Prefer completed-side diffs (editToolCall.result.success.diffString).
174
+ const completedDiffs = completedEditDiffs(parsed);
175
+ if (completedDiffs) {
176
+ item.diffs = completedDiffs.diffs;
177
+ item.locations = completedDiffs.locations;
178
+ }
179
+ const openTools = new Map(state.openTools);
180
+ openTools.delete(callId);
181
+ return {
182
+ events: [{ type: 'item.completed', item }],
183
+ state: { ...state, openTools },
184
+ };
185
+ }
186
+ return { events: [], state };
187
+ }
188
+ function mapResult(msg, state) {
189
+ if (state.currentTurnId === null)
190
+ return { events: [], state };
191
+ const events = [];
192
+ let itemSeq = state.itemSeq;
193
+ let sawAssistantText = state.sawAssistantText;
194
+ // A tool that never got a `completed` tool_call event before the turn ended
195
+ // (the turn was interrupted or errored) would otherwise stay "running"
196
+ // forever in the UI — give it a terminal snapshot now.
197
+ for (const open of state.openTools.values()) {
198
+ events.push({ type: 'item.completed', item: { ...open, status: 'failed' } });
199
+ }
200
+ // If no assistant text streamed, surface the terminal result string once.
201
+ if (!sawAssistantText && typeof msg.result === 'string' && msg.result.trim() !== '' && msg.is_error !== true) {
202
+ sawAssistantText = true;
203
+ const item = {
204
+ kind: 'message',
205
+ id: `item_${++itemSeq}`,
206
+ role: 'assistant',
207
+ text: msg.result,
208
+ };
209
+ events.push({ type: 'item.started', item }, { type: 'item.completed', item });
210
+ }
211
+ const turnId = state.currentTurnId ?? `turn_${Math.max(1, state.turnSeq)}`;
212
+ const turnEvent = {
213
+ type: 'turn.completed',
214
+ turnId,
215
+ stopReason: resultStopReason(msg),
216
+ };
217
+ const usage = tokenUsage(msg);
218
+ if (usage)
219
+ turnEvent.usage = usage;
220
+ if (typeof msg.total_cost_usd === 'number')
221
+ turnEvent.costUsd = msg.total_cost_usd;
222
+ events.push(turnEvent);
223
+ if (usage) {
224
+ const usageEvent = { type: 'usage.updated', usage };
225
+ if (typeof msg.total_cost_usd === 'number')
226
+ usageEvent.costUsd = msg.total_cost_usd;
227
+ events.push(usageEvent);
228
+ }
229
+ return {
230
+ events,
231
+ state: {
232
+ ...state,
233
+ itemSeq,
234
+ sawAssistantText,
235
+ currentTurnId: null,
236
+ openTools: new Map(),
237
+ },
238
+ };
239
+ }
240
+ function resultStopReason(msg) {
241
+ if (msg.is_error === true)
242
+ return 'error';
243
+ if (msg.subtype === 'error_max_turns')
244
+ return 'max_tokens';
245
+ return 'end_turn';
246
+ }
247
+ function tokenUsage(msg) {
248
+ if (!isRecord(msg.usage))
249
+ return undefined;
250
+ const input = num(msg.usage.input_tokens) ?? 0;
251
+ const output = num(msg.usage.output_tokens) ?? 0;
252
+ const cacheRead = num(msg.usage.cache_read_input_tokens) ?? 0;
253
+ const cacheWrite = num(msg.usage.cache_creation_input_tokens) ?? 0;
254
+ const total = input + output + cacheRead + cacheWrite;
255
+ if (total <= 0)
256
+ return undefined;
257
+ const usage = { input, output, total };
258
+ if (cacheRead > 0)
259
+ usage.cacheRead = cacheRead;
260
+ if (cacheWrite > 0)
261
+ usage.cacheWrite = cacheWrite;
262
+ return usage;
263
+ }
264
+ function parseCursorToolCall(toolCall) {
265
+ if (!isRecord(toolCall))
266
+ return { name: 'tool', input: {} };
267
+ if (isRecord(toolCall.function)) {
268
+ const name = typeof toolCall.function.name === 'string' ? toolCall.function.name : 'function';
269
+ let input = toolCall.function.arguments ?? toolCall.function.args ?? {};
270
+ if (typeof input === 'string') {
271
+ try {
272
+ input = JSON.parse(input);
273
+ }
274
+ catch {
275
+ input = { raw: input };
276
+ }
277
+ }
278
+ return { name, input, result: toolCall.function.result, rawKey: 'function' };
279
+ }
280
+ for (const [key, value] of Object.entries(toolCall)) {
281
+ if (!key.endsWith('ToolCall') || !isRecord(value))
282
+ continue;
283
+ const name = cursorToolKeyToName(key);
284
+ return {
285
+ name,
286
+ input: value.args ?? {},
287
+ result: value.result,
288
+ rawKey: key,
289
+ };
290
+ }
291
+ return { name: 'tool', input: toolCall };
292
+ }
293
+ function cursorToolKeyToName(key) {
294
+ const base = key.replace(/ToolCall$/, '');
295
+ switch (base) {
296
+ case 'read':
297
+ return 'Read';
298
+ case 'write':
299
+ return 'Write';
300
+ case 'edit':
301
+ return 'Edit';
302
+ case 'shell':
303
+ return 'Bash';
304
+ case 'ls':
305
+ return 'Ls';
306
+ case 'grep':
307
+ return 'Grep';
308
+ case 'task':
309
+ return 'Task';
310
+ default:
311
+ return base.charAt(0).toUpperCase() + base.slice(1);
312
+ }
313
+ }
314
+ function editArtifacts(name, input) {
315
+ const key = name.toLowerCase();
316
+ if (key !== 'edit' && key !== 'write')
317
+ return undefined;
318
+ if (!isRecord(input))
319
+ return undefined;
320
+ const path = (typeof input.path === 'string' && input.path) ||
321
+ (typeof input.file_path === 'string' && input.file_path) ||
322
+ (typeof input.filePath === 'string' && input.filePath) ||
323
+ '';
324
+ if (!path)
325
+ return undefined;
326
+ const locations = [{ path }];
327
+ if (key === 'edit') {
328
+ const oldText = typeof input.old_string === 'string'
329
+ ? input.old_string
330
+ : typeof input.oldString === 'string'
331
+ ? input.oldString
332
+ : null;
333
+ const newText = typeof input.new_string === 'string'
334
+ ? input.new_string
335
+ : typeof input.newString === 'string'
336
+ ? input.newString
337
+ : typeof input.fileText === 'string'
338
+ ? input.fileText
339
+ : undefined;
340
+ if (oldText !== null || newText !== undefined) {
341
+ return { diffs: [{ path, oldText, newText }], locations };
342
+ }
343
+ return { locations };
344
+ }
345
+ const diff = { path, oldText: null };
346
+ if (typeof input.fileText === 'string')
347
+ diff.newText = input.fileText;
348
+ else if (typeof input.content === 'string')
349
+ diff.newText = input.content;
350
+ return { diffs: [diff], locations };
351
+ }
352
+ function completedEditDiffs(parsed) {
353
+ const key = parsed.name.toLowerCase();
354
+ if (key !== 'edit' && key !== 'write')
355
+ return undefined;
356
+ if (!isRecord(parsed.input))
357
+ return undefined;
358
+ const path = (typeof parsed.input.path === 'string' && parsed.input.path) ||
359
+ (typeof parsed.input.file_path === 'string' && parsed.input.file_path) ||
360
+ '';
361
+ if (!path || !isRecord(parsed.result) || !isRecord(parsed.result.success))
362
+ return undefined;
363
+ const success = parsed.result.success;
364
+ const oldText = key === 'edit'
365
+ ? typeof parsed.input.old_string === 'string'
366
+ ? parsed.input.old_string
367
+ : typeof parsed.input.oldString === 'string'
368
+ ? parsed.input.oldString
369
+ : null
370
+ : null;
371
+ const diff = { path, oldText };
372
+ if (typeof success.afterFullFileContent === 'string')
373
+ diff.newText = success.afterFullFileContent;
374
+ else if (typeof success.diffString === 'string')
375
+ diff.unified = success.diffString;
376
+ else if (typeof parsed.input.fileText === 'string')
377
+ diff.newText = parsed.input.fileText;
378
+ else
379
+ return undefined;
380
+ if (typeof success.diffString === 'string')
381
+ diff.unified = success.diffString;
382
+ return { diffs: [diff], locations: [{ path }] };
383
+ }
384
+ function toolFailed(parsed) {
385
+ if (!isRecord(parsed.result))
386
+ return false;
387
+ if (isRecord(parsed.result.rejected))
388
+ return true;
389
+ if (isRecord(parsed.result.error))
390
+ return true;
391
+ if (isRecord(parsed.result.success) && typeof parsed.result.success.exitCode === 'number') {
392
+ return parsed.result.success.exitCode !== 0;
393
+ }
394
+ return false;
395
+ }
396
+ function toolErrorMessage(parsed) {
397
+ if (!isRecord(parsed.result))
398
+ return undefined;
399
+ if (isRecord(parsed.result.rejected) && typeof parsed.result.rejected.reason === 'string') {
400
+ if (parsed.rawKey === 'askQuestionToolCall'
401
+ && /questions skipped/i.test(parsed.result.rejected.reason)) {
402
+ return 'Cursor skipped this native question in headless print mode';
403
+ }
404
+ return parsed.result.rejected.reason;
405
+ }
406
+ if (isRecord(parsed.result.error) && typeof parsed.result.error.errorMessage === 'string') {
407
+ return parsed.result.error.errorMessage;
408
+ }
409
+ if (isRecord(parsed.result.success)) {
410
+ const stderr = parsed.result.success.stderr;
411
+ if (typeof stderr === 'string' && stderr.trim())
412
+ return stderr.trim();
413
+ }
414
+ return undefined;
415
+ }
416
+ function toolOutput(parsed) {
417
+ if (!isRecord(parsed.result))
418
+ return undefined;
419
+ if (isRecord(parsed.result.success)) {
420
+ const s = parsed.result.success;
421
+ if (typeof s.stdout === 'string')
422
+ return s.stdout;
423
+ if (typeof s.content === 'string')
424
+ return s.content;
425
+ if (typeof s.resultForModel === 'string')
426
+ return s.resultForModel;
427
+ }
428
+ try {
429
+ return JSON.stringify(parsed.result);
430
+ }
431
+ catch {
432
+ return undefined;
433
+ }
434
+ }
435
+ const PLAN_STATUSES = ['pending', 'in_progress', 'completed', 'cancelled'];
436
+ function nativeTodoUpdate(input, prior) {
437
+ if (!isRecord(input) || !Array.isArray(input.todos))
438
+ return undefined;
439
+ const todos = input.merge === true ? new Map(prior) : new Map();
440
+ for (const raw of input.todos) {
441
+ if (!isRecord(raw) || typeof raw.id !== 'string' || !raw.id ||
442
+ typeof raw.content !== 'string' || !PLAN_STATUSES.includes(raw.status))
443
+ return undefined;
444
+ const entry = { content: raw.content, status: raw.status };
445
+ if (typeof raw.priority === 'string' && ['high', 'medium', 'low'].includes(raw.priority)) {
446
+ entry.priority = raw.priority;
447
+ }
448
+ todos.set(raw.id, entry);
449
+ }
450
+ return todos;
451
+ }
452
+ function planEntries(input) {
453
+ if (!isRecord(input) || !Array.isArray(input.todos))
454
+ return undefined;
455
+ const entries = [];
456
+ for (const todo of input.todos) {
457
+ if (!isRecord(todo) || typeof todo.content !== 'string')
458
+ continue;
459
+ const status = PLAN_STATUSES.find((s) => s === todo.status) ?? 'pending';
460
+ const entry = { content: todo.content, status };
461
+ if (typeof todo.activeForm === 'string')
462
+ entry.activeForm = todo.activeForm;
463
+ entries.push(entry);
464
+ }
465
+ return entries;
466
+ }
467
+ // ---- shared helpers ---------------------------------------------------------
468
+ function isRecord(value) {
469
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
470
+ }
471
+ function str(value) {
472
+ return typeof value === 'string' && value !== '' ? value : undefined;
473
+ }
474
+ function num(value) {
475
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
476
+ }
477
+ function messageContent(msg) {
478
+ if (!isRecord(msg.message) || !Array.isArray(msg.message.content))
479
+ return [];
480
+ return msg.message.content;
481
+ }
482
+ // ---- v1 AgentEvent mapping (unchanged contract for runners / dry-run) -------
483
+ function toolNameFromCall(toolCall) {
484
+ return parseCursorToolCall(toolCall).name;
485
+ }
486
+ function toolInputFromCall(toolCall) {
487
+ return parseCursorToolCall(toolCall).input;
488
+ }
489
+ function assistantText(message) {
490
+ if (!isRecord(message) || !Array.isArray(message.content))
491
+ return '';
492
+ const parts = [];
493
+ for (const block of message.content) {
494
+ if (isRecord(block) && block.type === 'text' && typeof block.text === 'string' && block.text) {
495
+ parts.push(block.text);
496
+ }
497
+ }
498
+ return parts.join('');
499
+ }
500
+ /**
501
+ * Convert one Cursor stream-json object into zero or more v1 AgentEvents.
502
+ * With default (non-partial) stream-json, every assistant event is used.
503
+ */
504
+ export function mapCursorPrintStreamEvent(raw) {
505
+ if (!isRecord(raw))
506
+ return [];
507
+ const type = raw.type;
508
+ try {
509
+ if (type === 'system' && raw.subtype === 'init' && typeof raw.session_id === 'string') {
510
+ return [{ type: 'session', sessionId: raw.session_id }];
511
+ }
512
+ if (type === 'assistant') {
513
+ if ('model_call_id' in raw)
514
+ return [];
515
+ const text = assistantText(raw.message);
516
+ return text ? [{ type: 'text', text }] : [];
517
+ }
518
+ if (type === 'tool_call') {
519
+ const callId = typeof raw.call_id === 'string' ? raw.call_id : `cursor-${Date.now()}`;
520
+ if (raw.subtype === 'started') {
521
+ return [
522
+ {
523
+ type: 'tool-call',
524
+ id: callId,
525
+ tool: toolNameFromCall(raw.tool_call),
526
+ input: toolInputFromCall(raw.tool_call),
527
+ },
528
+ ];
529
+ }
530
+ if (raw.subtype === 'completed') {
531
+ const parsed = parseCursorToolCall(raw.tool_call);
532
+ return [
533
+ {
534
+ type: 'tool-result',
535
+ toolCallId: callId,
536
+ result: JSON.stringify(parsed.result ?? {}),
537
+ isError: toolFailed(parsed),
538
+ },
539
+ ];
540
+ }
541
+ return [];
542
+ }
543
+ if (type === 'result') {
544
+ // `session` and `done` are owned by the runner (init emits session once; the runner's
545
+ // own post-loop logic emits exactly one terminal `done`) — emitting them here too
546
+ // produced duplicate events in the append-only run log.
547
+ const events = [];
548
+ // Cursor's documented terminal `result` shape is
549
+ // {type, subtype, is_error, duration_ms, duration_api_ms, result, session_id, request_id}
550
+ // — no `usage`/`total_cost_usd` field today. Kept defensive per the docs' own "field
551
+ // additions may occur… backward-compatible" note; harmless no-op against real output.
552
+ const usage = tokenUsage(raw);
553
+ if (usage)
554
+ events.push({ type: 'token-usage', tokensUsed: usage.total });
555
+ if (typeof raw.total_cost_usd === 'number' && raw.total_cost_usd > 0) {
556
+ events.push({ type: 'cost', usd: raw.total_cost_usd });
557
+ }
558
+ if (raw.is_error === true) {
559
+ const msg = typeof raw.result === 'string' && raw.result
560
+ ? raw.result
561
+ : 'Cursor agent reported an error';
562
+ events.push({ type: 'error', message: msg });
563
+ }
564
+ events.push({ type: 'turn-end' });
565
+ return events;
566
+ }
567
+ return [];
568
+ }
569
+ catch {
570
+ return [];
571
+ }
572
+ }
573
+ //# sourceMappingURL=cursor-print-ui-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-print-ui-mapper.js","sourceRoot":"","sources":["../../src/core/cursor-print-ui-mapper.ts"],"names":[],"mappings":"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"}