hammoc 1.1.6 → 1.2.0
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.
- package/README.md +8 -2
- package/bin/hammoc.js +12 -0
- package/package.json +3 -3
- package/packages/client/dist/assets/{index-BQASJJka.js → index-Bz_ljWO0.js} +1 -1
- package/packages/client/dist/assets/index-Cc_AX5QV.css +32 -0
- package/packages/client/dist/assets/index-DjVOQMst.js +1451 -0
- package/packages/client/dist/index.html +2 -2
- package/packages/client/dist/sw.js +1 -1
- package/packages/server/dist/app.d.ts.map +1 -1
- package/packages/server/dist/app.js +3 -0
- package/packages/server/dist/app.js.map +1 -1
- package/packages/server/dist/controllers/queueController.d.ts +1 -0
- package/packages/server/dist/controllers/queueController.d.ts.map +1 -1
- package/packages/server/dist/controllers/queueController.js +12 -0
- package/packages/server/dist/controllers/queueController.js.map +1 -1
- package/packages/server/dist/controllers/serverController.d.ts.map +1 -1
- package/packages/server/dist/controllers/serverController.js +20 -2
- package/packages/server/dist/controllers/serverController.js.map +1 -1
- package/packages/server/dist/controllers/sessionController.d.ts +5 -10
- package/packages/server/dist/controllers/sessionController.d.ts.map +1 -1
- package/packages/server/dist/controllers/sessionController.js +65 -80
- package/packages/server/dist/controllers/sessionController.js.map +1 -1
- package/packages/server/dist/handlers/streamCallbacks.d.ts +4 -0
- package/packages/server/dist/handlers/streamCallbacks.d.ts.map +1 -1
- package/packages/server/dist/handlers/streamCallbacks.js +9 -3
- package/packages/server/dist/handlers/streamCallbacks.js.map +1 -1
- package/packages/server/dist/handlers/websocket.d.ts +9 -15
- package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
- package/packages/server/dist/handlers/websocket.js +668 -120
- package/packages/server/dist/handlers/websocket.js.map +1 -1
- package/packages/server/dist/locales/en/server.json +3 -1
- package/packages/server/dist/locales/es/server.json +3 -1
- package/packages/server/dist/locales/ja/server.json +3 -1
- package/packages/server/dist/locales/ko/server.json +3 -1
- package/packages/server/dist/locales/pt/server.json +3 -1
- package/packages/server/dist/locales/zh-CN/server.json +3 -1
- package/packages/server/dist/routes/images.d.ts +7 -0
- package/packages/server/dist/routes/images.d.ts.map +1 -0
- package/packages/server/dist/routes/images.js +51 -0
- package/packages/server/dist/routes/images.js.map +1 -0
- package/packages/server/dist/routes/queue.d.ts.map +1 -1
- package/packages/server/dist/routes/queue.js +2 -1
- package/packages/server/dist/routes/queue.js.map +1 -1
- package/packages/server/dist/routes/sessions.d.ts.map +1 -1
- package/packages/server/dist/routes/sessions.js +2 -3
- package/packages/server/dist/routes/sessions.js.map +1 -1
- package/packages/server/dist/services/chatService.d.ts +2 -0
- package/packages/server/dist/services/chatService.d.ts.map +1 -1
- package/packages/server/dist/services/chatService.js +33 -1
- package/packages/server/dist/services/chatService.js.map +1 -1
- package/packages/server/dist/services/historyParser.d.ts +1 -11
- package/packages/server/dist/services/historyParser.d.ts.map +1 -1
- package/packages/server/dist/services/historyParser.js +144 -182
- package/packages/server/dist/services/historyParser.js.map +1 -1
- package/packages/server/dist/services/imageStorageService.d.ts +28 -0
- package/packages/server/dist/services/imageStorageService.d.ts.map +1 -0
- package/packages/server/dist/services/imageStorageService.js +108 -0
- package/packages/server/dist/services/imageStorageService.js.map +1 -0
- package/packages/server/dist/services/ptyService.d.ts +6 -0
- package/packages/server/dist/services/ptyService.d.ts.map +1 -1
- package/packages/server/dist/services/ptyService.js +59 -0
- package/packages/server/dist/services/ptyService.js.map +1 -1
- package/packages/server/dist/services/queueService.d.ts.map +1 -1
- package/packages/server/dist/services/queueService.js +23 -2
- package/packages/server/dist/services/queueService.js.map +1 -1
- package/packages/server/dist/services/sessionBufferManager.d.ts +26 -0
- package/packages/server/dist/services/sessionBufferManager.d.ts.map +1 -0
- package/packages/server/dist/services/sessionBufferManager.js +113 -0
- package/packages/server/dist/services/sessionBufferManager.js.map +1 -0
- package/packages/server/dist/services/sessionService.d.ts +26 -1
- package/packages/server/dist/services/sessionService.d.ts.map +1 -1
- package/packages/server/dist/services/sessionService.js +168 -39
- package/packages/server/dist/services/sessionService.js.map +1 -1
- package/packages/server/dist/services/summarizeService.d.ts +25 -0
- package/packages/server/dist/services/summarizeService.d.ts.map +1 -0
- package/packages/server/dist/services/summarizeService.js +122 -0
- package/packages/server/dist/services/summarizeService.js.map +1 -0
- package/packages/server/dist/utils/imageUtils.d.ts +11 -0
- package/packages/server/dist/utils/imageUtils.d.ts.map +1 -0
- package/packages/server/dist/utils/imageUtils.js +37 -0
- package/packages/server/dist/utils/imageUtils.js.map +1 -0
- package/packages/server/dist/utils/messageTree.d.ts +56 -0
- package/packages/server/dist/utils/messageTree.d.ts.map +1 -0
- package/packages/server/dist/utils/messageTree.js +356 -0
- package/packages/server/dist/utils/messageTree.js.map +1 -0
- package/packages/server/package.json +3 -1
- package/packages/shared/dist/constants/index.d.ts +3 -0
- package/packages/shared/dist/constants/index.d.ts.map +1 -0
- package/packages/shared/dist/constants/index.js +3 -0
- package/packages/shared/dist/constants/index.js.map +1 -0
- package/packages/shared/dist/constants/messageTree.d.ts +6 -0
- package/packages/shared/dist/constants/messageTree.d.ts.map +1 -0
- package/packages/shared/dist/constants/messageTree.js +7 -0
- package/packages/shared/dist/constants/messageTree.js.map +1 -0
- package/packages/shared/dist/index.d.ts +1 -1
- package/packages/shared/dist/index.d.ts.map +1 -1
- package/packages/shared/dist/index.js +1 -1
- package/packages/shared/dist/index.js.map +1 -1
- package/packages/shared/dist/types/history.d.ts +21 -8
- package/packages/shared/dist/types/history.d.ts.map +1 -1
- package/packages/shared/dist/types/message.d.ts +10 -0
- package/packages/shared/dist/types/message.d.ts.map +1 -1
- package/packages/shared/dist/types/message.js.map +1 -1
- package/packages/shared/dist/types/preferences.d.ts +2 -1
- package/packages/shared/dist/types/preferences.d.ts.map +1 -1
- package/packages/shared/dist/types/preferences.js.map +1 -1
- package/packages/shared/dist/types/sdk.d.ts +8 -0
- package/packages/shared/dist/types/sdk.d.ts.map +1 -1
- package/packages/shared/dist/types/sdk.js.map +1 -1
- package/packages/shared/dist/types/session.d.ts +1 -0
- package/packages/shared/dist/types/session.d.ts.map +1 -1
- package/packages/shared/dist/types/session.js.map +1 -1
- package/packages/shared/dist/types/websocket.d.ts +59 -5
- package/packages/shared/dist/types/websocket.d.ts.map +1 -1
- package/scripts/spike-25.9-output.log +47 -0
- package/packages/client/dist/assets/index-Dr2X4keZ.css +0 -32
- package/packages/client/dist/assets/index-zjjTVZ6W.js +0 -1418
|
@@ -96,6 +96,8 @@ export class ChatService {
|
|
|
96
96
|
allowedTools;
|
|
97
97
|
disallowedTools;
|
|
98
98
|
currentQuery = null;
|
|
99
|
+
/** Warning message from rewindFiles failure (non-fatal, streaming continues) */
|
|
100
|
+
rewindWarning = null;
|
|
99
101
|
constructor(config = {}) {
|
|
100
102
|
this.workingDirectory = config.workingDirectory;
|
|
101
103
|
this.permissionMode = config.permissionMode ?? 'default';
|
|
@@ -167,6 +169,7 @@ export class ChatService {
|
|
|
167
169
|
const queryOptions = {
|
|
168
170
|
cwd: this.workingDirectory,
|
|
169
171
|
permissionMode: this.permissionMode,
|
|
172
|
+
allowDangerouslySkipPermissions: this.permissionMode === 'bypassPermissions',
|
|
170
173
|
allowedTools: resolvedAllowed.length > 0 ? resolvedAllowed : undefined,
|
|
171
174
|
disallowedTools: resolvedDisallowed.length > 0 ? resolvedDisallowed : undefined,
|
|
172
175
|
maxTurns: options.maxTurns,
|
|
@@ -180,6 +183,9 @@ export class ChatService {
|
|
|
180
183
|
maxThinkingTokens: options.maxThinkingTokens,
|
|
181
184
|
maxBudgetUsd: options.maxBudgetUsd,
|
|
182
185
|
effort: options.effort,
|
|
186
|
+
resumeSessionAt: options.resumeSessionAt,
|
|
187
|
+
forkSession: options.forkSession,
|
|
188
|
+
enableFileCheckpointing: options.enableFileCheckpointing,
|
|
183
189
|
canUseTool,
|
|
184
190
|
// Capture CLI stderr for debugging process exit errors
|
|
185
191
|
stderr: (data) => {
|
|
@@ -192,7 +198,11 @@ export class ChatService {
|
|
|
192
198
|
delete queryOptions[key];
|
|
193
199
|
}
|
|
194
200
|
});
|
|
195
|
-
log.debug(`SDK query cwd="${queryOptions.cwd}"${queryOptions.resume ? `, resume="${queryOptions.resume}"` : ''}${queryOptions.model ? `, model="${queryOptions.model}"` : ''}${queryOptions.sessionId ? `, sessionId="${queryOptions.sessionId}"` : ''}`);
|
|
201
|
+
log.debug(`SDK query cwd="${queryOptions.cwd}"${queryOptions.resume ? `, resume="${queryOptions.resume}"` : ''}${queryOptions.model ? `, model="${queryOptions.model}"` : ''}${queryOptions.sessionId ? `, sessionId="${queryOptions.sessionId}"` : ''}${queryOptions.resumeSessionAt ? `, resumeSessionAt="${queryOptions.resumeSessionAt}"` : ''}${queryOptions.forkSession ? `, forkSession=true` : ''}${options.enableFileCheckpointing ? `, checkpointing=true` : ''}`);
|
|
202
|
+
// Story 25.7: explicit log for resumeSessionAt branching
|
|
203
|
+
if (queryOptions.resumeSessionAt) {
|
|
204
|
+
log.info(`resumeSessionAt branch: assistantUuid="${queryOptions.resumeSessionAt}", resume="${queryOptions.resume}"`);
|
|
205
|
+
}
|
|
196
206
|
// Use AsyncIterable prompt when images are present (Story 5.5)
|
|
197
207
|
const { images } = options;
|
|
198
208
|
if (images && images.length > 0) {
|
|
@@ -207,6 +217,28 @@ export class ChatService {
|
|
|
207
217
|
options: queryOptions,
|
|
208
218
|
});
|
|
209
219
|
}
|
|
220
|
+
// Story 25.7: rewind files to the specified user message checkpoint before streaming
|
|
221
|
+
this.rewindWarning = null;
|
|
222
|
+
if (options.rewindToMessageUuid && !this.currentQuery) {
|
|
223
|
+
log.error('rewindFiles requested but currentQuery is null');
|
|
224
|
+
this.rewindWarning = 'File rewind failed: query not initialized';
|
|
225
|
+
}
|
|
226
|
+
else if (options.rewindToMessageUuid && this.currentQuery) {
|
|
227
|
+
try {
|
|
228
|
+
const rewindResult = await this.currentQuery.rewindFiles(options.rewindToMessageUuid);
|
|
229
|
+
log.info(`rewindFiles result: canRewind=${rewindResult.canRewind}, filesChanged=${rewindResult.filesChanged?.length ?? 0}, insertions=${rewindResult.insertions ?? 0}, deletions=${rewindResult.deletions ?? 0}`);
|
|
230
|
+
if (!rewindResult.canRewind) {
|
|
231
|
+
const reason = rewindResult.error ?? 'unknown reason';
|
|
232
|
+
log.warn(`rewindFiles failed: ${reason}`);
|
|
233
|
+
this.rewindWarning = `File rewind failed: ${reason}`;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
238
|
+
log.error(`rewindFiles threw: ${msg}`);
|
|
239
|
+
this.rewindWarning = `File rewind error: ${msg}`;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
210
242
|
let finalResponse = {
|
|
211
243
|
id: '',
|
|
212
244
|
sessionId: '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatService.js","sourceRoot":"","sources":["../../src/services/chatService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chatService.js","sourceRoot":"","sources":["../../src/services/chatService.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,15 +55,5 @@ export declare function cleanCommandTags(content: string): string;
|
|
|
55
55
|
* @param raw Array of raw messages (sorted)
|
|
56
56
|
* @returns Array of transformed HistoryMessages for display
|
|
57
57
|
*/
|
|
58
|
-
export declare function transformToHistoryMessages(raw: RawJSONLMessage[]): HistoryMessage[];
|
|
59
|
-
/**
|
|
60
|
-
* Convert completed stream buffer events to HistoryMessages.
|
|
61
|
-
* Used by getMessages API to merge recent stream data with JSONL history
|
|
62
|
-
* when the SDK hasn't flushed to disk yet.
|
|
63
|
-
*/
|
|
64
|
-
export declare function transformBufferToHistoryMessages(events: Array<{
|
|
65
|
-
event: string;
|
|
66
|
-
data: unknown;
|
|
67
|
-
ts: number;
|
|
68
|
-
}>): HistoryMessage[];
|
|
58
|
+
export declare function transformToHistoryMessages(raw: RawJSONLMessage[], projectSlug?: string, sessionId?: string): HistoryMessage[];
|
|
69
59
|
//# sourceMappingURL=historyParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"historyParser.d.ts","sourceRoot":"","sources":["../../src/services/historyParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"historyParser.d.ts","sourceRoot":"","sources":["../../src/services/historyParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EAQf,MAAM,gBAAgB,CAAC;AASxB;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAwBjF;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAuE7E;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAqCvF;AA+HD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAexD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,CA+S7H"}
|
|
@@ -10,8 +10,15 @@
|
|
|
10
10
|
* thinking → text → tool_use (each) with tool_result merged by ID
|
|
11
11
|
*/
|
|
12
12
|
import fs from 'fs/promises';
|
|
13
|
+
import path from 'path';
|
|
13
14
|
import { createReadStream, existsSync } from 'fs';
|
|
14
15
|
import * as readline from 'node:readline';
|
|
16
|
+
import { sessionService } from './sessionService.js';
|
|
17
|
+
import { createLogger } from '../utils/logger.js';
|
|
18
|
+
import sharp from 'sharp';
|
|
19
|
+
import { buildImageFilename, buildThumbnailFilename, buildImageUrl, getImageDir } from '../utils/imageUtils.js';
|
|
20
|
+
const THUMBNAIL_MAX_WIDTH = 400;
|
|
21
|
+
const THUMBNAIL_MAX_HEIGHT = 300;
|
|
15
22
|
/**
|
|
16
23
|
* Parse a JSONL file and return raw messages
|
|
17
24
|
* @param filePath Path to the JSONL session file
|
|
@@ -169,21 +176,71 @@ function extractTextContent(content) {
|
|
|
169
176
|
}
|
|
170
177
|
return '';
|
|
171
178
|
}
|
|
179
|
+
const extractImagesLog = createLogger('historyParser:extractImages');
|
|
172
180
|
/**
|
|
173
|
-
* Extract image attachments from message content
|
|
174
|
-
*
|
|
175
|
-
*
|
|
181
|
+
* Extract image attachments from message content as URL-based ImageRef[].
|
|
182
|
+
* Story 27.2: Computes SHA-256 hash of base64 data to generate deterministic URLs.
|
|
183
|
+
* Lazy backfill: writes image file to disk if not already present (for pre-existing sessions).
|
|
176
184
|
*/
|
|
177
|
-
function extractImages(content) {
|
|
185
|
+
function extractImages(content, projectSlug, sessionId) {
|
|
178
186
|
if (!content || !Array.isArray(content))
|
|
179
187
|
return undefined;
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
188
|
+
if (!projectSlug || !sessionId)
|
|
189
|
+
return undefined;
|
|
190
|
+
const imageBlocks = content.filter((block) => block.type === 'image');
|
|
191
|
+
if (imageBlocks.length === 0)
|
|
192
|
+
return undefined;
|
|
193
|
+
const projectDir = sessionService.getProjectDir(projectSlug);
|
|
194
|
+
const imageDir = getImageDir(projectDir, sessionId);
|
|
195
|
+
const images = [];
|
|
196
|
+
for (let i = 0; i < imageBlocks.length; i++) {
|
|
197
|
+
const block = imageBlocks[i];
|
|
198
|
+
try {
|
|
199
|
+
const filename = buildImageFilename(block.source.data, block.source.media_type);
|
|
200
|
+
if (!filename)
|
|
201
|
+
continue;
|
|
202
|
+
const thumbFilename = buildThumbnailFilename(block.source.data, block.source.media_type);
|
|
203
|
+
const url = buildImageUrl(projectSlug, sessionId, filename);
|
|
204
|
+
// Lazy backfill: write image & thumbnail to disk if missing
|
|
205
|
+
const filePath = path.join(imageDir, filename);
|
|
206
|
+
const thumbPath = thumbFilename ? path.join(imageDir, thumbFilename) : null;
|
|
207
|
+
if (!existsSync(filePath)) {
|
|
208
|
+
const buffer = Buffer.from(block.source.data, 'base64');
|
|
209
|
+
// Fire-and-forget async write — next parse will find it on disk
|
|
210
|
+
fs.mkdir(imageDir, { recursive: true })
|
|
211
|
+
.then(async () => {
|
|
212
|
+
await fs.writeFile(filePath, buffer);
|
|
213
|
+
if (thumbPath && !existsSync(thumbPath)) {
|
|
214
|
+
await sharp(buffer)
|
|
215
|
+
.resize(THUMBNAIL_MAX_WIDTH, THUMBNAIL_MAX_HEIGHT, { fit: 'inside' })
|
|
216
|
+
.toFile(thumbPath);
|
|
217
|
+
}
|
|
218
|
+
})
|
|
219
|
+
.catch((err) => extractImagesLog.warn(`Lazy backfill failed for ${filename}: ${err}`));
|
|
220
|
+
}
|
|
221
|
+
else if (thumbPath && !existsSync(thumbPath)) {
|
|
222
|
+
// Original exists but thumbnail missing — backfill thumbnail only
|
|
223
|
+
fs.readFile(filePath)
|
|
224
|
+
.then((buffer) => sharp(buffer)
|
|
225
|
+
.resize(THUMBNAIL_MAX_WIDTH, THUMBNAIL_MAX_HEIGHT, { fit: 'inside' })
|
|
226
|
+
.toFile(thumbPath))
|
|
227
|
+
.catch((err) => extractImagesLog.warn(`Thumbnail backfill failed for ${filename}: ${err}`));
|
|
228
|
+
}
|
|
229
|
+
// Only include thumbnailUrl when the file actually exists on disk
|
|
230
|
+
const thumbnailUrl = thumbPath && existsSync(thumbPath)
|
|
231
|
+
? buildImageUrl(projectSlug, sessionId, thumbFilename)
|
|
232
|
+
: undefined;
|
|
233
|
+
images.push({
|
|
234
|
+
url,
|
|
235
|
+
...(thumbnailUrl ? { thumbnailUrl } : {}),
|
|
236
|
+
mimeType: block.source.media_type,
|
|
237
|
+
name: `image-${i + 1}`,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
extractImagesLog.warn(`Failed to process image block ${i}: ${err}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
187
244
|
return images.length > 0 ? images : undefined;
|
|
188
245
|
}
|
|
189
246
|
/**
|
|
@@ -243,16 +300,58 @@ export function cleanCommandTags(content) {
|
|
|
243
300
|
* @param raw Array of raw messages (sorted)
|
|
244
301
|
* @returns Array of transformed HistoryMessages for display
|
|
245
302
|
*/
|
|
246
|
-
export function transformToHistoryMessages(raw) {
|
|
303
|
+
export function transformToHistoryMessages(raw, projectSlug, sessionId) {
|
|
247
304
|
const results = [];
|
|
248
305
|
// Map tool_use block id → index in results (for merging tool_results)
|
|
249
306
|
const toolUseIndexMap = new Map();
|
|
307
|
+
// Redirect map: when a message is skipped (non-display type, isMeta, empty
|
|
308
|
+
// content), record uuid → parentUuid so that its children's parentId resolves
|
|
309
|
+
// to the nearest included ancestor. Without this, children of skipped messages
|
|
310
|
+
// become orphan roots in the client tree, breaking the conversation chain.
|
|
311
|
+
const skippedRedirect = new Map();
|
|
312
|
+
function resolveParentId(parentUuid) {
|
|
313
|
+
if (!parentUuid)
|
|
314
|
+
return undefined;
|
|
315
|
+
let id = parentUuid;
|
|
316
|
+
const visited = new Set();
|
|
317
|
+
while (id && skippedRedirect.has(id)) {
|
|
318
|
+
if (visited.has(id))
|
|
319
|
+
return undefined; // cycle → treat as root
|
|
320
|
+
visited.add(id);
|
|
321
|
+
id = skippedRedirect.get(id);
|
|
322
|
+
}
|
|
323
|
+
return id;
|
|
324
|
+
}
|
|
250
325
|
for (const m of raw) {
|
|
251
|
-
// Skip non-display types and meta messages
|
|
252
|
-
|
|
326
|
+
// Skip non-display types and meta messages, but record redirect so children
|
|
327
|
+
// can resolve to the nearest included ancestor.
|
|
328
|
+
const isDisplayType = ['user', 'assistant', 'tool_use', 'tool_result', 'queue-operation', 'system'].includes(m.type);
|
|
329
|
+
if (!isDisplayType || m.isMeta) {
|
|
330
|
+
skippedRedirect.set(m.uuid, m.parentUuid ?? undefined);
|
|
253
331
|
continue;
|
|
254
|
-
|
|
332
|
+
}
|
|
333
|
+
// Track whether this message produces any visible output.
|
|
334
|
+
const resultsBefore = results.length;
|
|
335
|
+
// Resolve parentId through redirect chain (handles skipped ancestors)
|
|
336
|
+
const parentId = resolveParentId(m.parentUuid);
|
|
337
|
+
// Handle system messages (e.g., compact_boundary)
|
|
338
|
+
if (m.type === 'system') {
|
|
339
|
+
if (m.subtype === 'compact_boundary') {
|
|
340
|
+
results.push({
|
|
341
|
+
id: m.uuid,
|
|
342
|
+
type: 'system',
|
|
343
|
+
subtype: 'compact_boundary',
|
|
344
|
+
content: m.content || 'Conversation compacted',
|
|
345
|
+
parentId,
|
|
346
|
+
timestamp: m.timestamp,
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
// Non-compact_boundary system messages: skip with redirect
|
|
350
|
+
if (results.length === resultsBefore) {
|
|
351
|
+
skippedRedirect.set(m.uuid, m.parentUuid ?? undefined);
|
|
352
|
+
}
|
|
255
353
|
continue;
|
|
354
|
+
}
|
|
256
355
|
// Handle queue-operation task notifications
|
|
257
356
|
if (m.type === 'queue-operation' && m.content) {
|
|
258
357
|
const taskNotif = parseTaskNotification(m.content);
|
|
@@ -262,6 +361,7 @@ export function transformToHistoryMessages(raw) {
|
|
|
262
361
|
type: 'task_notification',
|
|
263
362
|
content: taskNotif.summary,
|
|
264
363
|
timestamp: m.timestamp,
|
|
364
|
+
parentId,
|
|
265
365
|
taskStatus: taskNotif.status,
|
|
266
366
|
taskSummary: taskNotif.summary,
|
|
267
367
|
taskToolUseId: taskNotif.toolUseId,
|
|
@@ -272,8 +372,11 @@ export function transformToHistoryMessages(raw) {
|
|
|
272
372
|
if (m.type === 'assistant') {
|
|
273
373
|
const messageContent = m.message?.content;
|
|
274
374
|
if (Array.isArray(messageContent)) {
|
|
275
|
-
// Split content blocks into separate HistoryMessages
|
|
375
|
+
// Split content blocks into separate HistoryMessages.
|
|
376
|
+
// The first emitted fragment uses m.uuid as its id so that child
|
|
377
|
+
// messages whose parentId references this raw uuid can resolve it.
|
|
276
378
|
let thinkingContent;
|
|
379
|
+
let firstFragmentEmitted = false;
|
|
277
380
|
for (const block of messageContent) {
|
|
278
381
|
if (block.type === 'thinking') {
|
|
279
382
|
thinkingContent = block.thinking;
|
|
@@ -282,11 +385,14 @@ export function transformToHistoryMessages(raw) {
|
|
|
282
385
|
const text = block.text;
|
|
283
386
|
// Skip "(no content)" placeholder
|
|
284
387
|
if (text.trim() && text.trim() !== '(no content)') {
|
|
388
|
+
const id = !firstFragmentEmitted ? m.uuid : `${m.uuid}-text-${results.length}`;
|
|
389
|
+
firstFragmentEmitted = true;
|
|
285
390
|
results.push({
|
|
286
|
-
id
|
|
391
|
+
id,
|
|
287
392
|
type: 'assistant',
|
|
288
393
|
content: text,
|
|
289
394
|
timestamp: m.timestamp,
|
|
395
|
+
parentId,
|
|
290
396
|
thinking: thinkingContent,
|
|
291
397
|
});
|
|
292
398
|
thinkingContent = undefined;
|
|
@@ -295,11 +401,14 @@ export function transformToHistoryMessages(raw) {
|
|
|
295
401
|
else if (block.type === 'tool_use') {
|
|
296
402
|
const toolBlock = block;
|
|
297
403
|
const idx = results.length;
|
|
404
|
+
const id = !firstFragmentEmitted ? m.uuid : `${m.uuid}-tool-${toolBlock.id}`;
|
|
405
|
+
firstFragmentEmitted = true;
|
|
298
406
|
results.push({
|
|
299
|
-
id
|
|
407
|
+
id,
|
|
300
408
|
type: 'tool_use',
|
|
301
409
|
content: `Calling ${toolBlock.name}`,
|
|
302
410
|
timestamp: m.timestamp,
|
|
411
|
+
parentId,
|
|
303
412
|
toolName: toolBlock.name,
|
|
304
413
|
toolInput: toolBlock.input,
|
|
305
414
|
thinking: thinkingContent,
|
|
@@ -310,11 +419,13 @@ export function transformToHistoryMessages(raw) {
|
|
|
310
419
|
}
|
|
311
420
|
// If only thinking with no text/tool, create thinking-only message
|
|
312
421
|
if (thinkingContent) {
|
|
422
|
+
const id = !firstFragmentEmitted ? m.uuid : `${m.uuid}-thinking`;
|
|
313
423
|
results.push({
|
|
314
|
-
id
|
|
424
|
+
id,
|
|
315
425
|
type: 'assistant',
|
|
316
426
|
content: '',
|
|
317
427
|
timestamp: m.timestamp,
|
|
428
|
+
parentId,
|
|
318
429
|
thinking: thinkingContent,
|
|
319
430
|
});
|
|
320
431
|
}
|
|
@@ -328,6 +439,7 @@ export function transformToHistoryMessages(raw) {
|
|
|
328
439
|
type: 'assistant',
|
|
329
440
|
content: text,
|
|
330
441
|
timestamp: m.timestamp,
|
|
442
|
+
parentId,
|
|
331
443
|
});
|
|
332
444
|
}
|
|
333
445
|
}
|
|
@@ -369,6 +481,7 @@ export function transformToHistoryMessages(raw) {
|
|
|
369
481
|
type: 'task_notification',
|
|
370
482
|
content: taskNotif.summary,
|
|
371
483
|
timestamp: m.timestamp,
|
|
484
|
+
parentId,
|
|
372
485
|
taskStatus: taskNotif.status,
|
|
373
486
|
taskSummary: taskNotif.summary,
|
|
374
487
|
taskToolUseId: taskNotif.toolUseId,
|
|
@@ -377,12 +490,13 @@ export function transformToHistoryMessages(raw) {
|
|
|
377
490
|
else {
|
|
378
491
|
const cleaned = cleanCommandTags(textContent);
|
|
379
492
|
if (cleaned.trim()) {
|
|
380
|
-
const images = extractImages(messageContent);
|
|
493
|
+
const images = extractImages(messageContent, projectSlug, sessionId);
|
|
381
494
|
results.push({
|
|
382
495
|
id: m.uuid,
|
|
383
496
|
type: 'user',
|
|
384
497
|
content: cleaned,
|
|
385
498
|
timestamp: m.timestamp,
|
|
499
|
+
parentId,
|
|
386
500
|
...(images && { images }),
|
|
387
501
|
});
|
|
388
502
|
}
|
|
@@ -400,6 +514,7 @@ export function transformToHistoryMessages(raw) {
|
|
|
400
514
|
type: 'task_notification',
|
|
401
515
|
content: taskNotif.summary,
|
|
402
516
|
timestamp: m.timestamp,
|
|
517
|
+
parentId,
|
|
403
518
|
taskStatus: taskNotif.status,
|
|
404
519
|
taskSummary: taskNotif.summary,
|
|
405
520
|
taskToolUseId: taskNotif.toolUseId,
|
|
@@ -413,6 +528,7 @@ export function transformToHistoryMessages(raw) {
|
|
|
413
528
|
type: 'user',
|
|
414
529
|
content: cleaned,
|
|
415
530
|
timestamp: m.timestamp,
|
|
531
|
+
parentId,
|
|
416
532
|
});
|
|
417
533
|
}
|
|
418
534
|
}
|
|
@@ -426,6 +542,7 @@ export function transformToHistoryMessages(raw) {
|
|
|
426
542
|
type: 'tool_use',
|
|
427
543
|
content: `Calling ${m.toolName}`,
|
|
428
544
|
timestamp: m.timestamp,
|
|
545
|
+
parentId,
|
|
429
546
|
toolName: m.toolName,
|
|
430
547
|
toolInput: m.toolInput,
|
|
431
548
|
});
|
|
@@ -461,6 +578,7 @@ export function transformToHistoryMessages(raw) {
|
|
|
461
578
|
type: 'tool_result',
|
|
462
579
|
content,
|
|
463
580
|
timestamp: m.timestamp,
|
|
581
|
+
parentId,
|
|
464
582
|
toolResult: {
|
|
465
583
|
success: !m.error,
|
|
466
584
|
output: m.result,
|
|
@@ -470,169 +588,13 @@ export function transformToHistoryMessages(raw) {
|
|
|
470
588
|
}
|
|
471
589
|
}
|
|
472
590
|
}
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
* Used by getMessages API to merge recent stream data with JSONL history
|
|
479
|
-
* when the SDK hasn't flushed to disk yet.
|
|
480
|
-
*/
|
|
481
|
-
export function transformBufferToHistoryMessages(events) {
|
|
482
|
-
const messages = [];
|
|
483
|
-
let messageId = null;
|
|
484
|
-
let pendingThinking;
|
|
485
|
-
let textAccumulator = '';
|
|
486
|
-
let lastTs = Date.now();
|
|
487
|
-
const toolResults = new Map();
|
|
488
|
-
const toolInputUpdates = new Map();
|
|
489
|
-
// First pass: collect tool results, input updates, and permission responses
|
|
490
|
-
const permissionResponses = new Map();
|
|
491
|
-
for (const { event, data } of events) {
|
|
492
|
-
if (event === 'tool:result') {
|
|
493
|
-
const d = data;
|
|
494
|
-
toolResults.set(d.toolCallId, { result: d.result });
|
|
495
|
-
}
|
|
496
|
-
else if (event === 'tool:input-update') {
|
|
497
|
-
const d = data;
|
|
498
|
-
toolInputUpdates.set(d.toolCallId, d.input);
|
|
499
|
-
}
|
|
500
|
-
else if (event === 'permission:resolved') {
|
|
501
|
-
const d = data;
|
|
502
|
-
permissionResponses.set(d.requestId, { approved: d.approved, response: d.response });
|
|
591
|
+
// If this raw message produced no visible output (e.g., empty assistant,
|
|
592
|
+
// user consumed entirely by tool_result merging), register redirect so
|
|
593
|
+
// children's parentId resolves to this message's parent instead.
|
|
594
|
+
if (results.length === resultsBefore) {
|
|
595
|
+
skippedRedirect.set(m.uuid, m.parentUuid ?? undefined);
|
|
503
596
|
}
|
|
504
597
|
}
|
|
505
|
-
|
|
506
|
-
if (textAccumulator && messageId) {
|
|
507
|
-
messages.push({
|
|
508
|
-
id: `${messageId}-text-${messages.length}`,
|
|
509
|
-
type: 'assistant',
|
|
510
|
-
content: textAccumulator,
|
|
511
|
-
timestamp: new Date(lastTs).toISOString(),
|
|
512
|
-
...(pendingThinking && { thinking: pendingThinking }),
|
|
513
|
-
});
|
|
514
|
-
pendingThinking = undefined;
|
|
515
|
-
textAccumulator = '';
|
|
516
|
-
}
|
|
517
|
-
};
|
|
518
|
-
for (const { event, data, ts } of events) {
|
|
519
|
-
lastTs = ts;
|
|
520
|
-
switch (event) {
|
|
521
|
-
case 'user:message': {
|
|
522
|
-
const d = data;
|
|
523
|
-
if (d.sessionId && !messageId)
|
|
524
|
-
messageId = d.sessionId;
|
|
525
|
-
messages.push({
|
|
526
|
-
id: `${messageId || 'buf'}-user-${messages.length}`,
|
|
527
|
-
type: 'user',
|
|
528
|
-
content: d.content,
|
|
529
|
-
timestamp: new Date(ts).toISOString(),
|
|
530
|
-
});
|
|
531
|
-
break;
|
|
532
|
-
}
|
|
533
|
-
case 'system:task-notification': {
|
|
534
|
-
const d = data;
|
|
535
|
-
messages.push({
|
|
536
|
-
id: `${messageId || 'buf'}-task-${d.taskId}`,
|
|
537
|
-
type: 'task_notification',
|
|
538
|
-
content: d.summary || '',
|
|
539
|
-
timestamp: new Date(ts).toISOString(),
|
|
540
|
-
taskStatus: d.status,
|
|
541
|
-
taskSummary: d.summary,
|
|
542
|
-
taskToolUseId: d.toolUseId,
|
|
543
|
-
});
|
|
544
|
-
break;
|
|
545
|
-
}
|
|
546
|
-
case 'session:created':
|
|
547
|
-
case 'session:resumed': {
|
|
548
|
-
const d = data;
|
|
549
|
-
if (!messageId)
|
|
550
|
-
messageId = d.sessionId;
|
|
551
|
-
break;
|
|
552
|
-
}
|
|
553
|
-
case 'message:chunk': {
|
|
554
|
-
const d = data;
|
|
555
|
-
if (d.messageId)
|
|
556
|
-
messageId = d.messageId;
|
|
557
|
-
textAccumulator += d.content;
|
|
558
|
-
break;
|
|
559
|
-
}
|
|
560
|
-
case 'thinking:chunk': {
|
|
561
|
-
flushText();
|
|
562
|
-
const d = data;
|
|
563
|
-
pendingThinking = (pendingThinking ?? '') + d.content;
|
|
564
|
-
break;
|
|
565
|
-
}
|
|
566
|
-
case 'tool:call': {
|
|
567
|
-
const d = data;
|
|
568
|
-
flushText();
|
|
569
|
-
const finalInput = toolInputUpdates.get(d.id) ?? d.input;
|
|
570
|
-
const result = toolResults.get(d.id);
|
|
571
|
-
messages.push({
|
|
572
|
-
id: `${messageId}-tool-${d.id}`,
|
|
573
|
-
type: 'tool_use',
|
|
574
|
-
content: `Calling ${d.name}`,
|
|
575
|
-
timestamp: new Date(ts).toISOString(),
|
|
576
|
-
toolName: d.name,
|
|
577
|
-
toolInput: finalInput,
|
|
578
|
-
...(pendingThinking && { thinking: pendingThinking }),
|
|
579
|
-
...(result && { toolResult: result.result }),
|
|
580
|
-
});
|
|
581
|
-
pendingThinking = undefined;
|
|
582
|
-
break;
|
|
583
|
-
}
|
|
584
|
-
case 'permission:request': {
|
|
585
|
-
const d = data;
|
|
586
|
-
// Only handle AskUserQuestion here — other tools are already covered by tool:call
|
|
587
|
-
if (d.toolCall && d.toolCall.name === 'AskUserQuestion') {
|
|
588
|
-
flushText();
|
|
589
|
-
const resolved = permissionResponses.get(d.id);
|
|
590
|
-
// Format response as string for toolResult.output
|
|
591
|
-
let responseStr;
|
|
592
|
-
if (resolved?.response) {
|
|
593
|
-
if (typeof resolved.response === 'string')
|
|
594
|
-
responseStr = resolved.response;
|
|
595
|
-
else if (Array.isArray(resolved.response))
|
|
596
|
-
responseStr = resolved.response.join(', ');
|
|
597
|
-
else if (typeof resolved.response === 'object')
|
|
598
|
-
responseStr = Object.values(resolved.response).flat().join(', ');
|
|
599
|
-
}
|
|
600
|
-
messages.push({
|
|
601
|
-
id: `${messageId}-tool-${d.toolCall.id}`,
|
|
602
|
-
type: 'tool_use',
|
|
603
|
-
content: `Calling ${d.toolCall.name}`,
|
|
604
|
-
timestamp: new Date(ts).toISOString(),
|
|
605
|
-
toolName: d.toolCall.name,
|
|
606
|
-
toolInput: d.toolCall.input,
|
|
607
|
-
...(pendingThinking && { thinking: pendingThinking }),
|
|
608
|
-
...(resolved && responseStr && {
|
|
609
|
-
toolResult: { success: resolved.approved, output: responseStr },
|
|
610
|
-
}),
|
|
611
|
-
});
|
|
612
|
-
pendingThinking = undefined;
|
|
613
|
-
}
|
|
614
|
-
break;
|
|
615
|
-
}
|
|
616
|
-
case 'message:complete': {
|
|
617
|
-
const d = data;
|
|
618
|
-
if (d.id)
|
|
619
|
-
messageId = d.id;
|
|
620
|
-
flushText();
|
|
621
|
-
if (pendingThinking && messageId) {
|
|
622
|
-
messages.push({
|
|
623
|
-
id: `${messageId}-thinking-${messages.length}`,
|
|
624
|
-
type: 'assistant',
|
|
625
|
-
content: '',
|
|
626
|
-
timestamp: new Date(ts).toISOString(),
|
|
627
|
-
thinking: pendingThinking,
|
|
628
|
-
});
|
|
629
|
-
pendingThinking = undefined;
|
|
630
|
-
}
|
|
631
|
-
break;
|
|
632
|
-
}
|
|
633
|
-
}
|
|
634
|
-
}
|
|
635
|
-
flushText();
|
|
636
|
-
return messages;
|
|
598
|
+
return results;
|
|
637
599
|
}
|
|
638
600
|
//# sourceMappingURL=historyParser.js.map
|