@sumicom/quicksave 0.5.2 → 0.6.1

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 (89) hide show
  1. package/dist/ai/asyncQueue.d.ts +17 -0
  2. package/dist/ai/asyncQueue.d.ts.map +1 -0
  3. package/dist/ai/asyncQueue.js +49 -0
  4. package/dist/ai/asyncQueue.js.map +1 -0
  5. package/dist/ai/asyncQueue.test.d.ts +2 -0
  6. package/dist/ai/asyncQueue.test.d.ts.map +1 -0
  7. package/dist/ai/asyncQueue.test.js +56 -0
  8. package/dist/ai/asyncQueue.test.js.map +1 -0
  9. package/dist/ai/cardBuilder.d.ts +73 -0
  10. package/dist/ai/cardBuilder.d.ts.map +1 -0
  11. package/dist/ai/cardBuilder.js +595 -0
  12. package/dist/ai/cardBuilder.js.map +1 -0
  13. package/dist/ai/claudeCliProvider.d.ts +19 -0
  14. package/dist/ai/claudeCliProvider.d.ts.map +1 -0
  15. package/dist/ai/claudeCliProvider.js +466 -0
  16. package/dist/ai/claudeCliProvider.js.map +1 -0
  17. package/dist/ai/claudeSdkProvider.d.ts +18 -0
  18. package/dist/ai/claudeSdkProvider.d.ts.map +1 -0
  19. package/dist/ai/claudeSdkProvider.js +418 -0
  20. package/dist/ai/claudeSdkProvider.js.map +1 -0
  21. package/dist/ai/commitSummary.d.ts +4 -0
  22. package/dist/ai/commitSummary.d.ts.map +1 -1
  23. package/dist/ai/commitSummary.js +80 -40
  24. package/dist/ai/commitSummary.js.map +1 -1
  25. package/dist/ai/provider.d.ts +54 -0
  26. package/dist/ai/provider.d.ts.map +1 -0
  27. package/dist/ai/provider.js +2 -0
  28. package/dist/ai/provider.js.map +1 -0
  29. package/dist/ai/sandboxMcp.d.ts +12 -0
  30. package/dist/ai/sandboxMcp.d.ts.map +1 -0
  31. package/dist/ai/sandboxMcp.js +12 -0
  32. package/dist/ai/sandboxMcp.js.map +1 -0
  33. package/dist/ai/sandboxMcpStdio.d.ts +16 -0
  34. package/dist/ai/sandboxMcpStdio.d.ts.map +1 -0
  35. package/dist/ai/sandboxMcpStdio.js +127 -0
  36. package/dist/ai/sandboxMcpStdio.js.map +1 -0
  37. package/dist/ai/sessionManager.d.ts +100 -0
  38. package/dist/ai/sessionManager.d.ts.map +1 -0
  39. package/dist/ai/sessionManager.js +595 -0
  40. package/dist/ai/sessionManager.js.map +1 -0
  41. package/dist/ai/sessionRegistry.d.ts +28 -0
  42. package/dist/ai/sessionRegistry.d.ts.map +1 -0
  43. package/dist/ai/sessionRegistry.js +148 -0
  44. package/dist/ai/sessionRegistry.js.map +1 -0
  45. package/dist/connection/connection.d.ts +24 -6
  46. package/dist/connection/connection.d.ts.map +1 -1
  47. package/dist/connection/connection.js +85 -13
  48. package/dist/connection/connection.js.map +1 -1
  49. package/dist/connection/pubsub.d.ts +41 -0
  50. package/dist/connection/pubsub.d.ts.map +1 -0
  51. package/dist/connection/pubsub.js +101 -0
  52. package/dist/connection/pubsub.js.map +1 -0
  53. package/dist/connection/pubsub.test.d.ts +2 -0
  54. package/dist/connection/pubsub.test.d.ts.map +1 -0
  55. package/dist/connection/pubsub.test.js +96 -0
  56. package/dist/connection/pubsub.test.js.map +1 -0
  57. package/dist/git/operations.d.ts +6 -1
  58. package/dist/git/operations.d.ts.map +1 -1
  59. package/dist/git/operations.js +31 -2
  60. package/dist/git/operations.js.map +1 -1
  61. package/dist/handlers/messageHandler.d.ts +25 -5
  62. package/dist/handlers/messageHandler.d.ts.map +1 -1
  63. package/dist/handlers/messageHandler.js +266 -29
  64. package/dist/handlers/messageHandler.js.map +1 -1
  65. package/dist/handlers/messageHandler.test.js +1 -1
  66. package/dist/index.js +192 -41
  67. package/dist/index.js.map +1 -1
  68. package/dist/service/ensureDaemon.d.ts.map +1 -1
  69. package/dist/service/ensureDaemon.js +15 -2
  70. package/dist/service/ensureDaemon.js.map +1 -1
  71. package/dist/service/ipc.test.js +6 -6
  72. package/dist/service/ipcClient.js +1 -1
  73. package/dist/service/run.d.ts.map +1 -1
  74. package/dist/service/run.js +120 -11
  75. package/dist/service/run.js.map +1 -1
  76. package/dist/service/singleton.d.ts +4 -0
  77. package/dist/service/singleton.d.ts.map +1 -1
  78. package/dist/service/singleton.js +28 -2
  79. package/dist/service/singleton.js.map +1 -1
  80. package/dist/service/singleton.test.js +1 -1
  81. package/dist/service/types.d.ts +29 -0
  82. package/dist/service/types.d.ts.map +1 -1
  83. package/dist/service/types.js +11 -0
  84. package/dist/service/types.js.map +1 -1
  85. package/package.json +5 -3
  86. package/dist/ai/claudeCodeService.d.ts +0 -111
  87. package/dist/ai/claudeCodeService.d.ts.map +0 -1
  88. package/dist/ai/claudeCodeService.js +0 -764
  89. package/dist/ai/claudeCodeService.js.map +0 -1
@@ -0,0 +1,595 @@
1
+ import { readFile, readdir } from 'fs/promises';
2
+ import { join } from 'path';
3
+ import { existsSync } from 'fs';
4
+ import { homedir } from 'os';
5
+ const TOOL_RESULT_TRUNCATE_LENGTH = 500;
6
+ // ── Direct JSONL file reading (replaces SDK getSessionMessages/listSubagents) ──
7
+ function encodeCwdPath(cwd) {
8
+ return cwd.replace(/\//g, '-');
9
+ }
10
+ function claudeProjectDir(cwd) {
11
+ return join(homedir(), '.claude', 'projects', encodeCwdPath(cwd));
12
+ }
13
+ /** Read the last `tailLines` lines from a file (or all if file is small). */
14
+ async function readTailLines(filePath, tailLines) {
15
+ const { open, stat } = await import('fs/promises');
16
+ const { size } = await stat(filePath);
17
+ if (size === 0)
18
+ return [];
19
+ // For small files, just read the whole thing
20
+ if (size < 256 * 1024) {
21
+ const content = await readFile(filePath, 'utf-8');
22
+ return content.split('\n');
23
+ }
24
+ // Read from the end in chunks until we have enough lines
25
+ const chunkSize = Math.min(size, 512 * 1024); // 512KB chunks
26
+ const fh = await open(filePath, 'r');
27
+ try {
28
+ let collected = '';
29
+ let pos = size;
30
+ while (pos > 0) {
31
+ const readSize = Math.min(chunkSize, pos);
32
+ pos -= readSize;
33
+ const buf = Buffer.alloc(readSize);
34
+ await fh.read(buf, 0, readSize, pos);
35
+ collected = buf.toString('utf-8') + collected;
36
+ // Count newlines — stop when we have enough
37
+ const lineCount = collected.split('\n').length;
38
+ if (lineCount > tailLines + 10)
39
+ break; // +10 margin for filtered lines
40
+ }
41
+ return collected.split('\n');
42
+ }
43
+ finally {
44
+ await fh.close();
45
+ }
46
+ }
47
+ async function readMessagesFromJSONL(sessionId, cwd, tail) {
48
+ const p = join(claudeProjectDir(cwd), sessionId + '.jsonl');
49
+ if (!existsSync(p))
50
+ return [];
51
+ const lines = tail != null
52
+ ? await readTailLines(p, tail)
53
+ : (await readFile(p, 'utf-8')).split('\n');
54
+ const msgs = [];
55
+ for (const line of lines) {
56
+ if (!line.trim())
57
+ continue;
58
+ try {
59
+ const m = JSON.parse(line);
60
+ if (m.type === 'user' || m.type === 'assistant' || m.type === 'system')
61
+ msgs.push(m);
62
+ }
63
+ catch { /* skip */ }
64
+ }
65
+ return msgs;
66
+ }
67
+ async function listSubagentIdsFromDisk(sessionId, cwd) {
68
+ const d = join(claudeProjectDir(cwd), sessionId, 'subagents');
69
+ if (!existsSync(d))
70
+ return [];
71
+ try {
72
+ return (await readdir(d)).filter(f => f.endsWith('.meta.json')).map(f => f.replace('.meta.json', ''));
73
+ }
74
+ catch {
75
+ return [];
76
+ }
77
+ }
78
+ /** Extract readable text from tool_result content (string or array of blocks). */
79
+ function extractToolResultText(content) {
80
+ if (typeof content === 'string')
81
+ return content;
82
+ if (Array.isArray(content)) {
83
+ return content
84
+ .filter((b) => b.type === 'text')
85
+ .map((b) => b.text || '')
86
+ .join('\n');
87
+ }
88
+ return JSON.stringify(content);
89
+ }
90
+ // ============================================================================
91
+ // StreamCardBuilder — streaming session, emits CardEvents
92
+ // ============================================================================
93
+ export class StreamCardBuilder {
94
+ sessionId;
95
+ streamId;
96
+ cwd;
97
+ seq = 0;
98
+ cards = new Map();
99
+ /** tool_use_id → CardId, for pairing tool_result to ToolCallCard */
100
+ toolUseIdToCardId = new Map();
101
+ /** agentId (task_id) → CardId, for matching subagent updates */
102
+ agentIdToCardId = new Map();
103
+ /** Cards created for subagent permissions — removed after resolution. */
104
+ ephemeralCards = new Set();
105
+ /** Current streaming assistant_text card (for append_text events) */
106
+ currentTextCardId = null;
107
+ /** JSONL message count at the start of the current turn — history reads stop here. */
108
+ _jsonlCutoff = null;
109
+ constructor(sessionId, streamId, cwd) {
110
+ this.sessionId = sessionId;
111
+ this.streamId = streamId;
112
+ this.cwd = cwd;
113
+ }
114
+ updateSessionId(sessionId) {
115
+ this.sessionId = sessionId;
116
+ }
117
+ /** Start a new turn: update streamId and reset per-turn state, keep accumulated cards. */
118
+ startNewTurn(streamId) {
119
+ this.streamId = streamId;
120
+ this.currentTextCardId = null;
121
+ }
122
+ /** Clear all accumulated cards. Call after a turn completes and JSONL is flushed. */
123
+ clearCards() {
124
+ this.cards.clear();
125
+ this.toolUseIdToCardId.clear();
126
+ this.agentIdToCardId.clear();
127
+ this.ephemeralCards.clear();
128
+ this.currentTextCardId = null;
129
+ }
130
+ /** Snapshot current JSONL message count so history reads stop before the active turn. */
131
+ async snapshotCutoff() {
132
+ const msgs = (await readMessagesFromJSONL(this.sessionId, this.cwd))
133
+ .filter((m) => !m.isSidechain);
134
+ this._jsonlCutoff = msgs.length;
135
+ }
136
+ get jsonlCutoff() {
137
+ return this._jsonlCutoff;
138
+ }
139
+ set jsonlCutoff(value) {
140
+ this._jsonlCutoff = value;
141
+ }
142
+ nextId() {
143
+ return `${this.sessionId}:${this.streamId}:${++this.seq}`;
144
+ }
145
+ addEvent(card, afterCardId) {
146
+ this.cards.set(card.id, card);
147
+ return { type: 'add', streamId: this.streamId, sessionId: this.sessionId, card, afterCardId };
148
+ }
149
+ updateEvent(cardId, patch) {
150
+ const existing = this.cards.get(cardId);
151
+ if (existing) {
152
+ Object.assign(existing, patch);
153
+ }
154
+ return { type: 'update', streamId: this.streamId, sessionId: this.sessionId, cardId, patch };
155
+ }
156
+ appendTextEvent(cardId, text) {
157
+ const existing = this.cards.get(cardId);
158
+ if (existing && 'text' in existing) {
159
+ existing.text += text;
160
+ }
161
+ return { type: 'append_text', streamId: this.streamId, sessionId: this.sessionId, cardId, text };
162
+ }
163
+ removeEvent(cardId) {
164
+ this.cards.delete(cardId);
165
+ return { type: 'remove', streamId: this.streamId, sessionId: this.sessionId, cardId };
166
+ }
167
+ // ── Public: produce CardEvents from SDK data ────────────────────────────
168
+ userMessage(text) {
169
+ this.currentTextCardId = null;
170
+ const card = { type: 'user', id: this.nextId(), timestamp: Date.now(), text };
171
+ return this.addEvent(card);
172
+ }
173
+ thinkingBlock(text) {
174
+ this.currentTextCardId = null;
175
+ const card = { type: 'thinking', id: this.nextId(), timestamp: Date.now(), text };
176
+ return this.addEvent(card);
177
+ }
178
+ /**
179
+ * Append text to current assistant_text card, or create a new one.
180
+ * Returns append_text event (hot path) or add event (new card).
181
+ */
182
+ assistantText(text) {
183
+ if (this.currentTextCardId) {
184
+ return this.appendTextEvent(this.currentTextCardId, text);
185
+ }
186
+ const id = this.nextId();
187
+ const card = { type: 'assistant_text', id, timestamp: Date.now(), text, streaming: true };
188
+ this.currentTextCardId = id;
189
+ return this.addEvent(card);
190
+ }
191
+ /** Mark the current assistant_text card as done streaming. */
192
+ finalizeAssistantText() {
193
+ if (!this.currentTextCardId)
194
+ return null;
195
+ const id = this.currentTextCardId;
196
+ this.currentTextCardId = null;
197
+ return this.updateEvent(id, { streaming: false });
198
+ }
199
+ /**
200
+ * Handle tool_use block from SDK stream.
201
+ * If the card was already pre-created via `toolCallFromPermission()`, confirm it.
202
+ * Otherwise create a new ToolCallCard.
203
+ */
204
+ toolUse(toolName, toolInput, toolUseId) {
205
+ this.currentTextCardId = null;
206
+ // Check if card was pre-created from canUseTool
207
+ const existingCardId = this.toolUseIdToCardId.get(toolUseId);
208
+ if (existingCardId) {
209
+ // Confirm with real data (input may differ if updatedInput was returned)
210
+ return this.updateEvent(existingCardId, { toolInput });
211
+ }
212
+ const id = this.nextId();
213
+ const card = {
214
+ type: 'tool_call', id, timestamp: Date.now(),
215
+ toolName, toolInput, toolUseId,
216
+ };
217
+ this.toolUseIdToCardId.set(toolUseId, id);
218
+ return this.addEvent(card);
219
+ }
220
+ /**
221
+ * Pre-create a ToolCallCard from canUseTool (fires before tool_use stream event).
222
+ * This eliminates the synthetic message hack.
223
+ */
224
+ toolCallFromPermission(toolName, toolInput, toolUseId, pendingInput,
225
+ /** Ephemeral cards are removed after permission is resolved (subagent permissions). */
226
+ ephemeral = false) {
227
+ this.currentTextCardId = null;
228
+ // If the card was already created by the assistant message's tool_use block
229
+ // (which arrives in the stream BEFORE canUseTool fires), update it with pendingInput.
230
+ const existingCardId = this.toolUseIdToCardId.get(toolUseId);
231
+ if (existingCardId) {
232
+ if (ephemeral)
233
+ this.ephemeralCards.add(existingCardId);
234
+ return this.updateEvent(existingCardId, { pendingInput });
235
+ }
236
+ const id = this.nextId();
237
+ const card = {
238
+ type: 'tool_call', id, timestamp: Date.now(),
239
+ toolName, toolInput, toolUseId, pendingInput,
240
+ };
241
+ this.toolUseIdToCardId.set(toolUseId, id);
242
+ if (ephemeral)
243
+ this.ephemeralCards.add(id);
244
+ return this.addEvent(card);
245
+ }
246
+ /** Attach a pending input to a subagent card (subagent permission). */
247
+ attachPendingToSubagent(agentId, pendingInput) {
248
+ const cardId = this.agentIdToCardId.get(agentId);
249
+ if (!cardId)
250
+ return null;
251
+ return this.updateEvent(cardId, { pendingInput });
252
+ }
253
+ /** Clear pending input from a card. Ephemeral cards are removed entirely. */
254
+ clearPendingInput(requestId) {
255
+ for (const [, card] of this.cards) {
256
+ if (card.pendingInput?.requestId === requestId) {
257
+ if (this.ephemeralCards.has(card.id)) {
258
+ this.ephemeralCards.delete(card.id);
259
+ return this.removeEvent(card.id);
260
+ }
261
+ return this.updateEvent(card.id, { pendingInput: undefined });
262
+ }
263
+ }
264
+ return null;
265
+ }
266
+ /** Find the card ID for a given requestId. */
267
+ findCardByRequestId(requestId) {
268
+ for (const [, card] of this.cards) {
269
+ if (card.pendingInput?.requestId === requestId)
270
+ return card.id;
271
+ }
272
+ return undefined;
273
+ }
274
+ /** Check if a tool card already exists for the given tool_use_id. */
275
+ hasToolCard(toolUseId) {
276
+ return this.toolUseIdToCardId.has(toolUseId);
277
+ }
278
+ /** Return all live cards (insertion order). Cards carry pendingInput if set. */
279
+ getCards() {
280
+ return Array.from(this.cards.values());
281
+ }
282
+ toolResult(toolUseId, content, isError) {
283
+ const cardId = this.toolUseIdToCardId.get(toolUseId);
284
+ if (!cardId)
285
+ return null;
286
+ const truncated = content.length > TOOL_RESULT_TRUNCATE_LENGTH;
287
+ const resultContent = truncated
288
+ ? content.slice(0, TOOL_RESULT_TRUNCATE_LENGTH) + ' [truncated]'
289
+ : content;
290
+ return this.updateEvent(cardId, {
291
+ result: { content: resultContent, isError, truncated },
292
+ });
293
+ }
294
+ subagentStart(description, agentId, toolUseId) {
295
+ this.currentTextCardId = null;
296
+ const id = this.nextId();
297
+ const card = {
298
+ type: 'subagent', id, timestamp: Date.now(),
299
+ description,
300
+ toolUseId: toolUseId ?? agentId,
301
+ agentId,
302
+ status: 'running',
303
+ toolUseCount: 0,
304
+ };
305
+ this.agentIdToCardId.set(agentId, id);
306
+ // Position after the parent ToolCallCard if we have the toolUseId
307
+ const afterCardId = toolUseId ? this.toolUseIdToCardId.get(toolUseId) : undefined;
308
+ return this.addEvent(card, afterCardId);
309
+ }
310
+ subagentProgress(agentId, toolUseId, toolUseCount, lastToolName) {
311
+ const cardId = this.agentIdToCardId.get(agentId)
312
+ ?? (toolUseId ? this.agentIdToCardId.get(toolUseId) : undefined);
313
+ if (!cardId)
314
+ return null;
315
+ const patch = {};
316
+ if (toolUseCount !== undefined)
317
+ patch.toolUseCount = toolUseCount;
318
+ if (lastToolName !== undefined)
319
+ patch.lastToolName = lastToolName;
320
+ return this.updateEvent(cardId, patch);
321
+ }
322
+ subagentEnd(agentId, toolUseId, status, summary) {
323
+ const cardId = this.agentIdToCardId.get(agentId)
324
+ ?? (toolUseId ? this.agentIdToCardId.get(toolUseId) : undefined);
325
+ if (!cardId)
326
+ return null;
327
+ return this.updateEvent(cardId, { status, summary });
328
+ }
329
+ systemMessage(text, subtype) {
330
+ const card = { type: 'system', id: this.nextId(), timestamp: Date.now(), text, subtype };
331
+ return this.addEvent(card);
332
+ }
333
+ errorMessage(text) {
334
+ return this.systemMessage(`Error: ${text}`, 'error');
335
+ }
336
+ }
337
+ // ============================================================================
338
+ // buildCardsFromHistory — convert JSONL history into Card[]
339
+ // ============================================================================
340
+ export async function buildCardsFromHistory(sessionId, cwd, offset = 0, limit = 50, maxMessages) {
341
+ // For initial load (offset=0), read only the tail of the JSONL to avoid parsing
342
+ // multi-MB files. We read extra lines for tool_result pairing (Pass 1 index).
343
+ // For pagination (offset>0), read more to reach earlier messages.
344
+ const neededMessages = (maxMessages != null) ? maxMessages : undefined;
345
+ const tailCount = neededMessages ?? (offset + limit) * 3; // 3x for index building margin
346
+ let allMessages = (await readMessagesFromJSONL(sessionId, cwd, tailCount))
347
+ .filter((m) => !m.isSidechain);
348
+ if (maxMessages != null) {
349
+ allMessages = allMessages.slice(0, maxMessages);
350
+ }
351
+ const total = allMessages.length;
352
+ const tailStart = Math.max(0, total - offset - limit);
353
+ const tailEnd = Math.max(0, total - offset);
354
+ const sliced = allMessages.slice(tailStart, tailEnd);
355
+ // ── Pass 1: Build indexes from ALL messages ────────────────────────────
356
+ // toolUseId → toolName (for tool_result lookup across pages)
357
+ const agentToolUseIds = new Set();
358
+ // toolUseId → tool_result data (for pairing)
359
+ const toolResults = new Map();
360
+ for (const msg of allMessages) {
361
+ const rawMsg = msg.message;
362
+ if (!Array.isArray(rawMsg?.content))
363
+ continue;
364
+ for (const block of rawMsg.content) {
365
+ if (block.type === 'tool_use' && block.name === 'Agent' && block.id) {
366
+ agentToolUseIds.add(block.id);
367
+ }
368
+ if (block.type === 'tool_result' && block.tool_use_id) {
369
+ const text = extractToolResultText(block.content);
370
+ toolResults.set(block.tool_use_id, { content: text, isError: !!block.is_error });
371
+ }
372
+ }
373
+ }
374
+ // ── Get real agentIds from SDK listSubagents ───────────────────────────
375
+ // System messages (task_started) are NOT reliably present in the JSONL.
376
+ // Instead, read subagent meta.json files and match by description to the
377
+ // Agent tool_use input.description.
378
+ // Build description → toolUseId map from Agent tool_use blocks
379
+ const descToToolUseId = new Map();
380
+ for (const msg of allMessages) {
381
+ const rawMsg = msg.message;
382
+ if (!Array.isArray(rawMsg?.content))
383
+ continue;
384
+ for (const block of rawMsg.content) {
385
+ if (block.type === 'tool_use' && block.name === 'Agent' && block.id) {
386
+ const desc = block.input?.description ?? '';
387
+ if (desc)
388
+ descToToolUseId.set(desc, block.id);
389
+ }
390
+ }
391
+ }
392
+ const toolUseIdToAgentId = new Map();
393
+ try {
394
+ const agentIds = await listSubagentIdsFromDisk(sessionId, cwd);
395
+ const subagentsDir = join(claudeProjectDir(cwd), sessionId, 'subagents');
396
+ for (const agentId of agentIds) {
397
+ try {
398
+ const meta = JSON.parse(await readFile(join(subagentsDir, `${agentId}.meta.json`), 'utf-8'));
399
+ if (meta?.description && descToToolUseId.has(meta.description)) {
400
+ toolUseIdToAgentId.set(descToToolUseId.get(meta.description), agentId);
401
+ }
402
+ }
403
+ catch { /* skip this agent */ }
404
+ }
405
+ // Fallback for any unmatched Agent tool_use IDs
406
+ for (const toolUseId of agentToolUseIds) {
407
+ if (!toolUseIdToAgentId.has(toolUseId)) {
408
+ toolUseIdToAgentId.set(toolUseId, toolUseId);
409
+ }
410
+ }
411
+ }
412
+ catch {
413
+ // No subagents or SDK error — fallback: agentId = toolUseId
414
+ for (const toolUseId of agentToolUseIds) {
415
+ toolUseIdToAgentId.set(toolUseId, toolUseId);
416
+ }
417
+ }
418
+ // ── Pass 2: Build Cards from sliced messages ───────────────────────────
419
+ let seq = tailStart;
420
+ const nextId = () => `${sessionId}:h:${++seq}`;
421
+ const cards = [];
422
+ for (const msg of sliced) {
423
+ // ── System messages ──
424
+ if (msg.type === 'system') {
425
+ const subtype = msg.subtype;
426
+ // Skip subagent lifecycle events (handled via subagentCards below)
427
+ if (subtype === 'task_started' || subtype === 'task_progress' || subtype === 'task_notification')
428
+ continue;
429
+ // Skip init and status messages (not useful in history)
430
+ if (subtype === 'init' || subtype === 'status' || subtype === 'session_state_changed')
431
+ continue;
432
+ if (subtype === 'compact_boundary') {
433
+ cards.push({ type: 'system', id: nextId(), timestamp: Date.now(), text: 'Context compacted', subtype: 'compacted' });
434
+ }
435
+ else {
436
+ // Unknown system subtype — show as info
437
+ cards.push({ type: 'system', id: nextId(), timestamp: Date.now(), text: subtype ?? 'System event', subtype: 'info' });
438
+ }
439
+ continue;
440
+ }
441
+ const rawMessage = msg.message;
442
+ if (!rawMessage?.content) {
443
+ // Empty message — skip
444
+ continue;
445
+ }
446
+ // ── User messages ──
447
+ if (msg.type === 'user') {
448
+ if (typeof rawMessage.content === 'string') {
449
+ cards.push({ type: 'user', id: nextId(), timestamp: Date.now(), text: rawMessage.content });
450
+ continue;
451
+ }
452
+ if (Array.isArray(rawMessage.content)) {
453
+ for (const block of rawMessage.content) {
454
+ if (block.type === 'text') {
455
+ cards.push({ type: 'user', id: nextId(), timestamp: Date.now(), text: block.text });
456
+ }
457
+ // tool_result blocks are paired into ToolCallCard.result (handled below)
458
+ // Skip them here — they don't need separate cards
459
+ }
460
+ continue;
461
+ }
462
+ continue;
463
+ }
464
+ // ── Assistant messages ──
465
+ if (msg.type === 'assistant') {
466
+ const blocks = rawMessage.content;
467
+ if (!Array.isArray(blocks))
468
+ continue;
469
+ for (const block of blocks) {
470
+ switch (block.type) {
471
+ case 'text':
472
+ if (block.text) {
473
+ cards.push({ type: 'assistant_text', id: nextId(), timestamp: Date.now(), text: block.text });
474
+ }
475
+ break;
476
+ case 'thinking':
477
+ if (block.thinking) {
478
+ cards.push({ type: 'thinking', id: nextId(), timestamp: Date.now(), text: block.thinking });
479
+ }
480
+ break;
481
+ case 'redacted_thinking':
482
+ cards.push({ type: 'thinking', id: nextId(), timestamp: Date.now(), text: '[Redacted thinking]' });
483
+ break;
484
+ case 'tool_use': {
485
+ if (agentToolUseIds.has(block.id)) {
486
+ // Agent tool_use → create a ToolCallCard as anchor, then SubagentCard
487
+ const agentId = toolUseIdToAgentId.get(block.id) ?? block.id;
488
+ const result = toolResults.get(block.id);
489
+ const description = block.input?.description ?? '';
490
+ const summary = result ? result.content.slice(0, 200) : undefined;
491
+ // Insert SubagentCard
492
+ const subagentCard = {
493
+ type: 'subagent',
494
+ id: nextId(),
495
+ timestamp: Date.now(),
496
+ description,
497
+ toolUseId: block.id,
498
+ agentId,
499
+ status: result ? 'completed' : 'running',
500
+ summary,
501
+ toolUseCount: 0,
502
+ };
503
+ cards.push(subagentCard);
504
+ }
505
+ else {
506
+ // Normal tool call
507
+ const toolInput = typeof block.input === 'object' && block.input !== null
508
+ ? block.input
509
+ : {};
510
+ const result = toolResults.get(block.id);
511
+ let pairedResult;
512
+ if (result) {
513
+ const truncated = result.content.length > TOOL_RESULT_TRUNCATE_LENGTH;
514
+ pairedResult = {
515
+ content: truncated
516
+ ? result.content.slice(0, TOOL_RESULT_TRUNCATE_LENGTH) + ' [truncated]'
517
+ : result.content,
518
+ isError: result.isError,
519
+ truncated,
520
+ };
521
+ }
522
+ cards.push({
523
+ type: 'tool_call',
524
+ id: nextId(),
525
+ timestamp: Date.now(),
526
+ toolName: block.name,
527
+ toolInput,
528
+ toolUseId: block.id,
529
+ result: pairedResult,
530
+ });
531
+ }
532
+ break;
533
+ }
534
+ // Server tool blocks — show as generic tool calls
535
+ case 'server_tool_use':
536
+ case 'mcp_tool_use': {
537
+ const toolInput = typeof block.input === 'object' && block.input !== null
538
+ ? block.input
539
+ : {};
540
+ cards.push({
541
+ type: 'tool_call',
542
+ id: nextId(),
543
+ timestamp: Date.now(),
544
+ toolName: block.name ?? block.type,
545
+ toolInput,
546
+ toolUseId: block.id ?? nextId(),
547
+ });
548
+ break;
549
+ }
550
+ // Server/MCP tool results — show as system info
551
+ case 'web_search_tool_result':
552
+ case 'web_fetch_tool_result':
553
+ case 'mcp_tool_result':
554
+ case 'code_execution_tool_result':
555
+ case 'bash_code_execution_tool_result':
556
+ case 'text_editor_code_execution_tool_result':
557
+ case 'tool_search_tool_result': {
558
+ const resultText = extractToolResultText(block.content ?? block.text ?? '');
559
+ const parentToolUseId = block.tool_use_id;
560
+ // Try to pair with a previously emitted tool_call card
561
+ if (parentToolUseId) {
562
+ const parentCard = cards.find((c) => c.type === 'tool_call' && c.toolUseId === parentToolUseId);
563
+ if (parentCard && !parentCard.result) {
564
+ const truncated = resultText.length > TOOL_RESULT_TRUNCATE_LENGTH;
565
+ parentCard.result = {
566
+ content: truncated ? resultText.slice(0, TOOL_RESULT_TRUNCATE_LENGTH) + ' [truncated]' : resultText,
567
+ isError: !!block.is_error,
568
+ truncated,
569
+ };
570
+ break;
571
+ }
572
+ }
573
+ // Fallback: show as system info
574
+ if (resultText) {
575
+ cards.push({ type: 'system', id: nextId(), timestamp: Date.now(), text: `${block.type}: ${resultText.slice(0, 200)}`, subtype: 'info' });
576
+ }
577
+ break;
578
+ }
579
+ case 'container_upload':
580
+ cards.push({ type: 'system', id: nextId(), timestamp: Date.now(), text: 'Container upload', subtype: 'info' });
581
+ break;
582
+ // Unknown block types — skip silently
583
+ default:
584
+ break;
585
+ }
586
+ }
587
+ }
588
+ }
589
+ return {
590
+ cards,
591
+ total,
592
+ hasMore: tailStart > 0,
593
+ };
594
+ }
595
+ //# sourceMappingURL=cardBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cardBuilder.js","sourceRoot":"","sources":["../../src/ai/cardBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { StreamCardBuilder } from './cardBuilder.js';
2
+ import type { CodingAgentProvider, ProviderSession, ProviderCallbacks, StartSessionOpts, ResumeSessionOpts } from './provider.js';
3
+ export declare class ClaudeCliProvider implements CodingAgentProvider {
4
+ startSession(opts: StartSessionOpts, cardBuilder: StreamCardBuilder, callbacks: ProviderCallbacks): Promise<{
5
+ sessionId: string;
6
+ session: ProviderSession;
7
+ }>;
8
+ resumeSession(opts: ResumeSessionOpts, cardBuilder: StreamCardBuilder, callbacks: ProviderCallbacks): Promise<{
9
+ sessionId: string;
10
+ session: ProviderSession;
11
+ }>;
12
+ private buildCliArgs;
13
+ private spawnAndConsume;
14
+ private consumeStream;
15
+ private routeMessage;
16
+ private handleControlRequest;
17
+ private sendControlResponse;
18
+ }
19
+ //# sourceMappingURL=claudeCliProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudeCliProvider.d.ts","sourceRoot":"","sources":["../../src/ai/claudeCliProvider.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,eAAe,CAAC;AAqEvB,qBAAa,iBAAkB,YAAW,mBAAmB;IAErD,YAAY,CAChB,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,CAAC;IAYrD,aAAa,CACjB,IAAI,EAAE,iBAAiB,EACvB,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,CAAC;IAc3D,OAAO,CAAC,YAAY;YA0DN,eAAe;YAmFf,aAAa;YA6Eb,YAAY;YAqKZ,oBAAoB;IA8BlC,OAAO,CAAC,mBAAmB;CAwB5B"}