@ai-devkit/agent-manager 0.5.0 → 0.6.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/dist/adapters/AgentAdapter.d.ts +19 -2
- package/dist/adapters/AgentAdapter.d.ts.map +1 -1
- package/dist/adapters/ClaudeCodeAdapter.d.ts +15 -1
- package/dist/adapters/ClaudeCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/ClaudeCodeAdapter.js +94 -6
- package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
- package/dist/adapters/CodexAdapter.d.ts +9 -1
- package/dist/adapters/CodexAdapter.d.ts.map +1 -1
- package/dist/adapters/CodexAdapter.js +56 -2
- package/dist/adapters/CodexAdapter.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/utils/matching.d.ts +1 -1
- package/dist/utils/matching.d.ts.map +1 -1
- package/dist/utils/matching.js +6 -2
- package/dist/utils/matching.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/AgentManager.test.ts +5 -2
- package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +177 -6
- package/src/__tests__/adapters/CodexAdapter.test.ts +115 -0
- package/src/__tests__/utils/matching.test.ts +13 -5
- package/src/adapters/AgentAdapter.ts +20 -4
- package/src/adapters/ClaudeCodeAdapter.ts +111 -15
- package/src/adapters/CodexAdapter.ts +59 -3
- package/src/index.ts +1 -1
- package/src/utils/matching.ts +6 -2
|
@@ -35,10 +35,10 @@ export interface AgentInfo {
|
|
|
35
35
|
projectPath: string;
|
|
36
36
|
/** Session UUID */
|
|
37
37
|
sessionId: string;
|
|
38
|
-
/** Human-readable session name (e.g., "merry-wobbling-starlight"), may be undefined for new sessions */
|
|
39
|
-
slug?: string;
|
|
40
38
|
/** Timestamp of last activity */
|
|
41
39
|
lastActive: Date;
|
|
40
|
+
/** Path to the session JSONL file on disk */
|
|
41
|
+
sessionFilePath?: string;
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
44
|
* Information about a running process
|
|
@@ -55,6 +55,14 @@ export interface ProcessInfo {
|
|
|
55
55
|
/** Process start time, populated by enrichProcesses */
|
|
56
56
|
startTime?: Date;
|
|
57
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* A single message in a conversation
|
|
60
|
+
*/
|
|
61
|
+
export interface ConversationMessage {
|
|
62
|
+
role: 'user' | 'assistant' | 'system';
|
|
63
|
+
content: string;
|
|
64
|
+
timestamp?: string;
|
|
65
|
+
}
|
|
58
66
|
/**
|
|
59
67
|
* Agent Adapter Interface
|
|
60
68
|
*
|
|
@@ -74,5 +82,14 @@ export interface AgentAdapter {
|
|
|
74
82
|
* @returns True if this adapter can handle the process
|
|
75
83
|
*/
|
|
76
84
|
canHandle(processInfo: ProcessInfo): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Read the full conversation from a session file
|
|
87
|
+
* @param sessionFilePath Path to the session JSONL file
|
|
88
|
+
* @param options.verbose Include tool call/result details
|
|
89
|
+
* @returns Array of conversation messages
|
|
90
|
+
*/
|
|
91
|
+
getConversation(sessionFilePath: string, options?: {
|
|
92
|
+
verbose?: boolean;
|
|
93
|
+
}): ConversationMessage[];
|
|
77
94
|
}
|
|
78
95
|
//# sourceMappingURL=AgentAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/AgentAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpE;;GAEG;AACH,oBAAY,WAAW;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,OAAO,YAAY;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IAEb,oBAAoB;IACpB,IAAI,EAAE,SAAS,CAAC;IAEhB,qBAAqB;IACrB,MAAM,EAAE,WAAW,CAAC;IAEpB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAEhB,iBAAiB;IACjB,GAAG,EAAE,MAAM,CAAC;IAEZ,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IAEpB,mBAAmB;IACnB,SAAS,EAAE,MAAM,CAAC;IAElB,
|
|
1
|
+
{"version":3,"file":"AgentAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/AgentAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpE;;GAEG;AACH,oBAAY,WAAW;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,OAAO,YAAY;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IAEb,oBAAoB;IACpB,IAAI,EAAE,SAAS,CAAC;IAEhB,qBAAqB;IACrB,MAAM,EAAE,WAAW,CAAC;IAEpB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAEhB,iBAAiB;IACjB,GAAG,EAAE,MAAM,CAAC;IAEZ,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IAEpB,mBAAmB;IACnB,SAAS,EAAE,MAAM,CAAC;IAElB,iCAAiC;IACjC,UAAU,EAAE,IAAI,CAAC;IAEjB,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,iBAAiB;IACjB,GAAG,EAAE,MAAM,CAAC;IAEZ,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAEhB,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IAEZ,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IAEZ,uDAAuD;IACvD,SAAS,CAAC,EAAE,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IACzB,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAEzB;;;OAGG;IACH,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAErC;;;;OAIG;IACH,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC;IAE7C;;;;;OAKG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE,CAAC;CACpG"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AgentAdapter, AgentInfo, ProcessInfo } from './AgentAdapter';
|
|
1
|
+
import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage } from './AgentAdapter';
|
|
2
2
|
/**
|
|
3
3
|
* Claude Code Adapter
|
|
4
4
|
*
|
|
@@ -77,5 +77,19 @@ export declare class ClaudeCodeAdapter implements AgentAdapter {
|
|
|
77
77
|
* These should not overwrite lastEntryType used for status determination.
|
|
78
78
|
*/
|
|
79
79
|
private isMetadataEntryType;
|
|
80
|
+
/**
|
|
81
|
+
* Read the full conversation from a Claude Code session JSONL file.
|
|
82
|
+
*
|
|
83
|
+
* Default mode returns only text content from user/assistant/system messages.
|
|
84
|
+
* Verbose mode also includes tool_use and tool_result blocks.
|
|
85
|
+
*/
|
|
86
|
+
getConversation(sessionFilePath: string, options?: {
|
|
87
|
+
verbose?: boolean;
|
|
88
|
+
}): ConversationMessage[];
|
|
89
|
+
/**
|
|
90
|
+
* Extract displayable content from a message content field.
|
|
91
|
+
*/
|
|
92
|
+
private extractConversationContent;
|
|
93
|
+
private truncateToolResult;
|
|
80
94
|
}
|
|
81
95
|
//# sourceMappingURL=ClaudeCodeAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeCodeAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ClaudeCodeAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ClaudeCodeAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ClaudeCodeAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AA8DhG;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IAClD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAElC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;;IAQ5B;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAI5C,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAwD1C;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IAkD1B;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,WAAW;IAmGnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiCvB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IA2C9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;;;;OAKG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE;IAiDhG;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAkClC,OAAO,CAAC,kBAAkB;CAM7B"}
|
|
@@ -219,8 +219,8 @@ class ClaudeCodeAdapter {
|
|
|
219
219
|
pid: processInfo.pid,
|
|
220
220
|
projectPath: sessionFile.resolvedCwd || processInfo.cwd || '',
|
|
221
221
|
sessionId: sessionFile.sessionId,
|
|
222
|
-
slug: session.slug,
|
|
223
222
|
lastActive: session.lastActive,
|
|
223
|
+
sessionFilePath: sessionFile.filePath,
|
|
224
224
|
};
|
|
225
225
|
}
|
|
226
226
|
mapProcessOnlyAgent(processInfo) {
|
|
@@ -269,7 +269,6 @@ class ClaudeCodeAdapter {
|
|
|
269
269
|
/* skip */
|
|
270
270
|
}
|
|
271
271
|
// Parse all lines for session state (file already in memory)
|
|
272
|
-
let slug;
|
|
273
272
|
let lastEntryType;
|
|
274
273
|
let lastActive;
|
|
275
274
|
let lastCwd;
|
|
@@ -284,9 +283,6 @@ class ClaudeCodeAdapter {
|
|
|
284
283
|
lastActive = ts;
|
|
285
284
|
}
|
|
286
285
|
}
|
|
287
|
-
if (entry.slug && !slug) {
|
|
288
|
-
slug = entry.slug;
|
|
289
|
-
}
|
|
290
286
|
if (typeof entry.cwd === 'string' && entry.cwd.trim().length > 0) {
|
|
291
287
|
lastCwd = entry.cwd;
|
|
292
288
|
}
|
|
@@ -319,7 +315,6 @@ class ClaudeCodeAdapter {
|
|
|
319
315
|
sessionId,
|
|
320
316
|
projectPath: projectPath || lastCwd || '',
|
|
321
317
|
lastCwd,
|
|
322
|
-
slug,
|
|
323
318
|
sessionStart: sessionStart || lastActive || new Date(),
|
|
324
319
|
lastActive: lastActive || new Date(),
|
|
325
320
|
lastEntryType,
|
|
@@ -420,6 +415,99 @@ class ClaudeCodeAdapter {
|
|
|
420
415
|
isMetadataEntryType(type) {
|
|
421
416
|
return type === 'last-prompt' || type === 'file-history-snapshot';
|
|
422
417
|
}
|
|
418
|
+
/**
|
|
419
|
+
* Read the full conversation from a Claude Code session JSONL file.
|
|
420
|
+
*
|
|
421
|
+
* Default mode returns only text content from user/assistant/system messages.
|
|
422
|
+
* Verbose mode also includes tool_use and tool_result blocks.
|
|
423
|
+
*/
|
|
424
|
+
getConversation(sessionFilePath, options) {
|
|
425
|
+
const verbose = options?.verbose ?? false;
|
|
426
|
+
let content;
|
|
427
|
+
try {
|
|
428
|
+
content = fs.readFileSync(sessionFilePath, 'utf-8');
|
|
429
|
+
}
|
|
430
|
+
catch {
|
|
431
|
+
return [];
|
|
432
|
+
}
|
|
433
|
+
const lines = content.trim().split('\n');
|
|
434
|
+
const messages = [];
|
|
435
|
+
for (const line of lines) {
|
|
436
|
+
let entry;
|
|
437
|
+
try {
|
|
438
|
+
entry = JSON.parse(line);
|
|
439
|
+
}
|
|
440
|
+
catch {
|
|
441
|
+
continue;
|
|
442
|
+
}
|
|
443
|
+
const entryType = entry.type;
|
|
444
|
+
if (!entryType || this.isMetadataEntryType(entryType))
|
|
445
|
+
continue;
|
|
446
|
+
if (entryType === 'progress' || entryType === 'thinking')
|
|
447
|
+
continue;
|
|
448
|
+
let role;
|
|
449
|
+
if (entryType === 'user') {
|
|
450
|
+
role = 'user';
|
|
451
|
+
}
|
|
452
|
+
else if (entryType === 'assistant') {
|
|
453
|
+
role = 'assistant';
|
|
454
|
+
}
|
|
455
|
+
else if (entryType === 'system') {
|
|
456
|
+
role = 'system';
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
continue;
|
|
460
|
+
}
|
|
461
|
+
const text = this.extractConversationContent(entry.message?.content, role, verbose);
|
|
462
|
+
if (!text)
|
|
463
|
+
continue;
|
|
464
|
+
messages.push({
|
|
465
|
+
role,
|
|
466
|
+
content: text,
|
|
467
|
+
timestamp: entry.timestamp,
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
return messages;
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Extract displayable content from a message content field.
|
|
474
|
+
*/
|
|
475
|
+
extractConversationContent(content, role, verbose) {
|
|
476
|
+
if (!content)
|
|
477
|
+
return undefined;
|
|
478
|
+
if (typeof content === 'string') {
|
|
479
|
+
const trimmed = content.trim();
|
|
480
|
+
if (role === 'user' && this.isNoiseMessage(trimmed))
|
|
481
|
+
return undefined;
|
|
482
|
+
return trimmed || undefined;
|
|
483
|
+
}
|
|
484
|
+
if (!Array.isArray(content))
|
|
485
|
+
return undefined;
|
|
486
|
+
const parts = [];
|
|
487
|
+
for (const block of content) {
|
|
488
|
+
if (block.type === 'text' && block.text?.trim()) {
|
|
489
|
+
if (role === 'user' && this.isNoiseMessage(block.text.trim()))
|
|
490
|
+
continue;
|
|
491
|
+
parts.push(block.text.trim());
|
|
492
|
+
}
|
|
493
|
+
else if (block.type === 'tool_use' && verbose) {
|
|
494
|
+
const inputSummary = block.input?.file_path || block.input?.pattern || block.input?.command || '';
|
|
495
|
+
parts.push(`[Tool: ${block.name}]${inputSummary ? ' ' + inputSummary : ''}`);
|
|
496
|
+
}
|
|
497
|
+
else if (block.type === 'tool_result' && verbose) {
|
|
498
|
+
const truncated = this.truncateToolResult(block.content || '');
|
|
499
|
+
const prefix = block.is_error ? '[Tool Error]' : '[Tool Result]';
|
|
500
|
+
parts.push(`${prefix} ${truncated}`);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
return parts.length > 0 ? parts.join('\n') : undefined;
|
|
504
|
+
}
|
|
505
|
+
truncateToolResult(content, maxLength = 200) {
|
|
506
|
+
const firstLine = content.split('\n')[0] || '';
|
|
507
|
+
if (firstLine.length <= maxLength)
|
|
508
|
+
return firstLine;
|
|
509
|
+
return firstLine.slice(0, maxLength - 3) + '...';
|
|
510
|
+
}
|
|
423
511
|
}
|
|
424
512
|
exports.ClaudeCodeAdapter = ClaudeCodeAdapter;
|
|
425
513
|
//# sourceMappingURL=ClaudeCodeAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeCodeAdapter.js","sourceRoot":"","sources":["../../src/adapters/ClaudeCodeAdapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ClaudeCodeAdapter.js","sourceRoot":"","sources":["../../src/adapters/ClaudeCodeAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* 5. Matching sessions to processes via shared matchProcessesToSessions()
|
|
10
10
|
* 6. Extracting summary from last event entry in session JSONL
|
|
11
11
|
*/
|
|
12
|
-
import type { AgentAdapter, AgentInfo, ProcessInfo } from './AgentAdapter';
|
|
12
|
+
import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage } from './AgentAdapter';
|
|
13
13
|
export declare class CodexAdapter implements AgentAdapter {
|
|
14
14
|
readonly type: "codex";
|
|
15
15
|
private static readonly IDLE_THRESHOLD_MINUTES;
|
|
@@ -50,5 +50,13 @@ export declare class CodexAdapter implements AgentAdapter {
|
|
|
50
50
|
private extractSummary;
|
|
51
51
|
private truncate;
|
|
52
52
|
private isCodexExecutable;
|
|
53
|
+
/**
|
|
54
|
+
* Read the full conversation from a Codex session JSONL file.
|
|
55
|
+
*
|
|
56
|
+
* Codex entries use payload.type to indicate message role and payload.message for content.
|
|
57
|
+
*/
|
|
58
|
+
getConversation(sessionFilePath: string, options?: {
|
|
59
|
+
verbose?: boolean;
|
|
60
|
+
}): ConversationMessage[];
|
|
53
61
|
}
|
|
54
62
|
//# sourceMappingURL=CodexAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodexAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/CodexAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"CodexAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/CodexAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AA4BhG,qBAAa,YAAa,YAAW,YAAY;IAC7C,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAEjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAK;IACnD,sFAAsF;IACtF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,6BAA6B,CAAK;IAE1D,OAAO,CAAC,gBAAgB,CAAS;;IAOjC,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAI5C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAgC1C;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;;OAGG;IACH,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,eAAe;IAOvB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAwDpB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,iBAAiB;IAMzB;;;;OAIG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE;CAiDnG"}
|
|
@@ -78,7 +78,7 @@ class CodexAdapter {
|
|
|
78
78
|
const cachedContent = contentCache.get(match.session.filePath);
|
|
79
79
|
const sessionData = this.parseSession(cachedContent, match.session.filePath);
|
|
80
80
|
if (sessionData) {
|
|
81
|
-
agents.push(this.mapSessionToAgent(sessionData, match.process));
|
|
81
|
+
agents.push(this.mapSessionToAgent(sessionData, match.process, match.session.filePath));
|
|
82
82
|
}
|
|
83
83
|
else {
|
|
84
84
|
matchedPids.delete(match.process.pid);
|
|
@@ -217,7 +217,7 @@ class CodexAdapter {
|
|
|
217
217
|
lastPayloadType,
|
|
218
218
|
};
|
|
219
219
|
}
|
|
220
|
-
mapSessionToAgent(session, processInfo) {
|
|
220
|
+
mapSessionToAgent(session, processInfo, filePath) {
|
|
221
221
|
return {
|
|
222
222
|
name: (0, matching_1.generateAgentName)(session.projectPath || processInfo.cwd || '', processInfo.pid),
|
|
223
223
|
type: this.type,
|
|
@@ -227,6 +227,7 @@ class CodexAdapter {
|
|
|
227
227
|
projectPath: session.projectPath || processInfo.cwd || '',
|
|
228
228
|
sessionId: session.sessionId,
|
|
229
229
|
lastActive: session.lastActive,
|
|
230
|
+
sessionFilePath: filePath,
|
|
230
231
|
};
|
|
231
232
|
}
|
|
232
233
|
mapProcessOnlyAgent(processInfo) {
|
|
@@ -288,6 +289,59 @@ class CodexAdapter {
|
|
|
288
289
|
const base = path.basename(executable).toLowerCase();
|
|
289
290
|
return base === 'codex' || base === 'codex.exe';
|
|
290
291
|
}
|
|
292
|
+
/**
|
|
293
|
+
* Read the full conversation from a Codex session JSONL file.
|
|
294
|
+
*
|
|
295
|
+
* Codex entries use payload.type to indicate message role and payload.message for content.
|
|
296
|
+
*/
|
|
297
|
+
getConversation(sessionFilePath, options) {
|
|
298
|
+
const verbose = options?.verbose ?? false;
|
|
299
|
+
let content;
|
|
300
|
+
try {
|
|
301
|
+
content = fs.readFileSync(sessionFilePath, 'utf-8');
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
return [];
|
|
305
|
+
}
|
|
306
|
+
const lines = content.trim().split('\n');
|
|
307
|
+
const messages = [];
|
|
308
|
+
for (const line of lines) {
|
|
309
|
+
let entry;
|
|
310
|
+
try {
|
|
311
|
+
entry = JSON.parse(line);
|
|
312
|
+
}
|
|
313
|
+
catch {
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
if (entry.type === 'session_meta')
|
|
317
|
+
continue;
|
|
318
|
+
const payloadType = entry.payload?.type;
|
|
319
|
+
if (!payloadType)
|
|
320
|
+
continue;
|
|
321
|
+
let role;
|
|
322
|
+
if (payloadType === 'user_message') {
|
|
323
|
+
role = 'user';
|
|
324
|
+
}
|
|
325
|
+
else if (payloadType === 'agent_message' || payloadType === 'task_complete') {
|
|
326
|
+
role = 'assistant';
|
|
327
|
+
}
|
|
328
|
+
else if (verbose) {
|
|
329
|
+
role = 'system';
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
const text = entry.payload?.message?.trim();
|
|
335
|
+
if (!text)
|
|
336
|
+
continue;
|
|
337
|
+
messages.push({
|
|
338
|
+
role,
|
|
339
|
+
content: text,
|
|
340
|
+
timestamp: entry.timestamp,
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
return messages;
|
|
344
|
+
}
|
|
291
345
|
}
|
|
292
346
|
exports.CodexAdapter = CodexAdapter;
|
|
293
347
|
CodexAdapter.IDLE_THRESHOLD_MINUTES = 5;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodexAdapter.js","sourceRoot":"","sources":["../../src/adapters/CodexAdapter.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAE7B,iDAA6C;AAC7C,8CAAuE;AACvE,8CAAiE;AAEjE,gDAAgF;AAuBhF,MAAa,YAAY;IASrB;QARS,SAAI,GAAG,OAAgB,CAAC;QAS7B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;QAClE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC;IAED,SAAS,CAAC,WAAwB;QAC9B,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QACd,MAAM,SAAS,GAAG,IAAA,yBAAe,EAAC,IAAA,4BAAkB,EAAC,OAAO,CAAC,CAAC,CAAC;QAC/D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEtC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACpE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,mCAAwB,EAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAgB,EAAE,CAAC;QAE/B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC7E,IAAI,WAAW,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"CodexAdapter.js","sourceRoot":"","sources":["../../src/adapters/CodexAdapter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { AgentManager } from './AgentManager';
|
|
|
2
2
|
export { ClaudeCodeAdapter } from './adapters/ClaudeCodeAdapter';
|
|
3
3
|
export { CodexAdapter } from './adapters/CodexAdapter';
|
|
4
4
|
export { AgentStatus } from './adapters/AgentAdapter';
|
|
5
|
-
export type { AgentAdapter, AgentType, AgentInfo, ProcessInfo } from './adapters/AgentAdapter';
|
|
5
|
+
export type { AgentAdapter, AgentType, AgentInfo, ProcessInfo, ConversationMessage } from './adapters/AgentAdapter';
|
|
6
6
|
export { TerminalFocusManager, TerminalType } from './terminal/TerminalFocusManager';
|
|
7
7
|
export type { TerminalLocation } from './terminal/TerminalFocusManager';
|
|
8
8
|
export { TtyWriter } from './terminal/TtyWriter';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEpH,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACrF,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/utils/matching.d.ts
CHANGED
|
@@ -33,7 +33,7 @@ export declare function matchProcessesToSessions(processes: ProcessInfo[], sessi
|
|
|
33
33
|
/**
|
|
34
34
|
* Generate a deterministic agent name from CWD and PID.
|
|
35
35
|
*
|
|
36
|
-
* Format: "
|
|
36
|
+
* Format: "folder-name-pid" (lowercase kebab-case)
|
|
37
37
|
*/
|
|
38
38
|
export declare function generateAgentName(cwd: string, pid: number): string;
|
|
39
39
|
//# sourceMappingURL=matching.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matching.d.ts","sourceRoot":"","sources":["../../src/utils/matching.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAK7C;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,0BAA0B;IAC1B,OAAO,EAAE,WAAW,CAAC;IAErB,+BAA+B;IAC/B,OAAO,EAAE,WAAW,CAAC;IAErB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACpC,SAAS,EAAE,WAAW,EAAE,EACxB,QAAQ,EAAE,WAAW,EAAE,GACxB,WAAW,EAAE,CAsCf;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"matching.d.ts","sourceRoot":"","sources":["../../src/utils/matching.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAK7C;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,0BAA0B;IAC1B,OAAO,EAAE,WAAW,CAAC;IAErB,+BAA+B;IAC/B,OAAO,EAAE,WAAW,CAAC;IAErB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACpC,SAAS,EAAE,WAAW,EAAE,EACxB,QAAQ,EAAE,WAAW,EAAE,GACxB,WAAW,EAAE,CAsCf;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAOlE"}
|
package/dist/utils/matching.js
CHANGED
|
@@ -94,10 +94,14 @@ function matchProcessesToSessions(processes, sessions) {
|
|
|
94
94
|
/**
|
|
95
95
|
* Generate a deterministic agent name from CWD and PID.
|
|
96
96
|
*
|
|
97
|
-
* Format: "
|
|
97
|
+
* Format: "folder-name-pid" (lowercase kebab-case)
|
|
98
98
|
*/
|
|
99
99
|
function generateAgentName(cwd, pid) {
|
|
100
100
|
const folderName = path.basename(cwd) || 'unknown';
|
|
101
|
-
|
|
101
|
+
const kebab = folderName
|
|
102
|
+
.toLowerCase()
|
|
103
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
104
|
+
.replace(/^-+|-+$/g, '');
|
|
105
|
+
return `${kebab || 'unknown'}-${pid}`;
|
|
102
106
|
}
|
|
103
107
|
//# sourceMappingURL=matching.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matching.js","sourceRoot":"","sources":["../../src/utils/matching.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCH,4DAyCC;AAOD,
|
|
1
|
+
{"version":3,"file":"matching.js","sourceRoot":"","sources":["../../src/utils/matching.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCH,4DAyCC;AAOD,8CAOC;AAxFD,2CAA6B;AAI7B,oFAAoF;AACpF,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAgBhD;;;;;;;;;;;GAWG;AACH,SAAgB,wBAAwB,CACpC,SAAwB,EACxB,QAAuB;IAEvB,4BAA4B;IAC5B,MAAM,UAAU,GAA2E,EAAE,CAAC;IAE9F,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,SAAS;QAE3C,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAEhD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,WAAW;gBAAE,SAAS;YACnC,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,WAAW;gBAAE,SAAS;YAE/C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;YAC/D,IAAI,OAAO,GAAG,YAAY;gBAAE,SAAS;YAErC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IAED,+BAA+B;IAC/B,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAEjD,wBAAwB;IACxB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACjC,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,SAAS;QACrD,IAAI,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,SAAS;QAEjE,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,GAAW,EAAE,GAAW;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;IACnD,MAAM,KAAK,GAAG,UAAU;SACnB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC7B,OAAO,GAAG,KAAK,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;AAC1C,CAAC"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { describe, it, expect, beforeEach } from '@jest/globals';
|
|
6
6
|
import { AgentManager } from '../AgentManager';
|
|
7
|
-
import type { AgentAdapter, AgentInfo, AgentType } from '../adapters/AgentAdapter';
|
|
7
|
+
import type { AgentAdapter, AgentInfo, AgentType, ConversationMessage } from '../adapters/AgentAdapter';
|
|
8
8
|
import { AgentStatus } from '../adapters/AgentAdapter';
|
|
9
9
|
|
|
10
10
|
// Mock adapter for testing
|
|
@@ -26,6 +26,10 @@ class MockAdapter implements AgentAdapter {
|
|
|
26
26
|
return true;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
getConversation(): ConversationMessage[] {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
|
|
29
33
|
setAgents(agents: AgentInfo[]): void {
|
|
30
34
|
this.mockAgents = agents;
|
|
31
35
|
}
|
|
@@ -45,7 +49,6 @@ function createMockAgent(overrides: Partial<AgentInfo> = {}): AgentInfo {
|
|
|
45
49
|
pid: 12345,
|
|
46
50
|
projectPath: '/test/path',
|
|
47
51
|
sessionId: 'test-session-id',
|
|
48
|
-
slug: 'test-slug',
|
|
49
52
|
lastActive: new Date(),
|
|
50
53
|
...overrides,
|
|
51
54
|
};
|
|
@@ -168,7 +168,7 @@ describe('ClaudeCodeAdapter', () => {
|
|
|
168
168
|
// Create session file
|
|
169
169
|
const sessionFile = path.join(projDir, 'session-1.jsonl');
|
|
170
170
|
fs.writeFileSync(sessionFile, [
|
|
171
|
-
JSON.stringify({ type: 'user', timestamp: '2026-03-18T23:18:44Z', cwd: '/Users/test/my-project',
|
|
171
|
+
JSON.stringify({ type: 'user', timestamp: '2026-03-18T23:18:44Z', cwd: '/Users/test/my-project', message: { content: 'Investigate failing tests' } }),
|
|
172
172
|
JSON.stringify({ type: 'assistant', timestamp: '2026-03-18T23:19:00Z' }),
|
|
173
173
|
].join('\n'));
|
|
174
174
|
|
|
@@ -203,7 +203,6 @@ describe('ClaudeCodeAdapter', () => {
|
|
|
203
203
|
pid: 12345,
|
|
204
204
|
projectPath: '/Users/test/my-project',
|
|
205
205
|
sessionId: 'session-1',
|
|
206
|
-
slug: 'merry-dog',
|
|
207
206
|
});
|
|
208
207
|
expect(agents[0].summary).toContain('Investigate failing tests');
|
|
209
208
|
|
|
@@ -977,12 +976,12 @@ describe('ClaudeCodeAdapter', () => {
|
|
|
977
976
|
});
|
|
978
977
|
|
|
979
978
|
describe('readSession', () => {
|
|
980
|
-
it('should parse session file with timestamps,
|
|
979
|
+
it('should parse session file with timestamps, cwd, and entry type', () => {
|
|
981
980
|
const readSession = (adapter as any).readSession.bind(adapter);
|
|
982
981
|
|
|
983
982
|
const filePath = path.join(tmpDir, 'test-session.jsonl');
|
|
984
983
|
const lines = [
|
|
985
|
-
JSON.stringify({ type: 'user', timestamp: '2026-03-10T10:00:00Z', cwd: '/my/project'
|
|
984
|
+
JSON.stringify({ type: 'user', timestamp: '2026-03-10T10:00:00Z', cwd: '/my/project' }),
|
|
986
985
|
JSON.stringify({ type: 'assistant', timestamp: '2026-03-10T10:01:00Z' }),
|
|
987
986
|
];
|
|
988
987
|
fs.writeFileSync(filePath, lines.join('\n'));
|
|
@@ -991,7 +990,6 @@ describe('ClaudeCodeAdapter', () => {
|
|
|
991
990
|
expect(session).toMatchObject({
|
|
992
991
|
sessionId: 'test-session',
|
|
993
992
|
projectPath: '/my/project',
|
|
994
|
-
slug: 'happy-dog',
|
|
995
993
|
lastCwd: '/my/project',
|
|
996
994
|
lastEntryType: 'assistant',
|
|
997
995
|
isInterrupted: false,
|
|
@@ -1029,7 +1027,6 @@ describe('ClaudeCodeAdapter', () => {
|
|
|
1029
1027
|
const session = readSession(filePath, '/test');
|
|
1030
1028
|
expect(session).not.toBeNull();
|
|
1031
1029
|
expect(session.lastEntryType).toBeUndefined();
|
|
1032
|
-
expect(session.slug).toBeUndefined();
|
|
1033
1030
|
});
|
|
1034
1031
|
|
|
1035
1032
|
it('should return null for non-existent file', () => {
|
|
@@ -1117,4 +1114,178 @@ describe('ClaudeCodeAdapter', () => {
|
|
|
1117
1114
|
});
|
|
1118
1115
|
});
|
|
1119
1116
|
});
|
|
1117
|
+
|
|
1118
|
+
describe('getConversation', () => {
|
|
1119
|
+
let tmpDir: string;
|
|
1120
|
+
|
|
1121
|
+
beforeEach(() => {
|
|
1122
|
+
tmpDir = fs.mkdtempSync(path.join(require('os').tmpdir(), 'claude-conv-'));
|
|
1123
|
+
});
|
|
1124
|
+
|
|
1125
|
+
afterEach(() => {
|
|
1126
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
1127
|
+
});
|
|
1128
|
+
|
|
1129
|
+
function writeJsonl(lines: object[]): string {
|
|
1130
|
+
const filePath = path.join(tmpDir, 'session.jsonl');
|
|
1131
|
+
fs.writeFileSync(filePath, lines.map(l => JSON.stringify(l)).join('\n'));
|
|
1132
|
+
return filePath;
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
it('should parse user and assistant text messages', () => {
|
|
1136
|
+
const filePath = writeJsonl([
|
|
1137
|
+
{ type: 'user', timestamp: '2026-03-27T10:00:00Z', message: { content: 'Hello' } },
|
|
1138
|
+
{ type: 'assistant', timestamp: '2026-03-27T10:00:05Z', message: { content: [{ type: 'text', text: 'Hi there!' }] } },
|
|
1139
|
+
]);
|
|
1140
|
+
|
|
1141
|
+
const messages = adapter.getConversation(filePath);
|
|
1142
|
+
expect(messages).toHaveLength(2);
|
|
1143
|
+
expect(messages[0]).toEqual({ role: 'user', content: 'Hello', timestamp: '2026-03-27T10:00:00Z' });
|
|
1144
|
+
expect(messages[1]).toEqual({ role: 'assistant', content: 'Hi there!', timestamp: '2026-03-27T10:00:05Z' });
|
|
1145
|
+
});
|
|
1146
|
+
|
|
1147
|
+
it('should skip metadata entry types', () => {
|
|
1148
|
+
const filePath = writeJsonl([
|
|
1149
|
+
{ type: 'file-history-snapshot', timestamp: '2026-03-27T10:00:00Z', snapshot: {} },
|
|
1150
|
+
{ type: 'last-prompt', timestamp: '2026-03-27T10:00:00Z' },
|
|
1151
|
+
{ type: 'user', timestamp: '2026-03-27T10:00:01Z', message: { content: 'Fix bug' } },
|
|
1152
|
+
]);
|
|
1153
|
+
|
|
1154
|
+
const messages = adapter.getConversation(filePath);
|
|
1155
|
+
expect(messages).toHaveLength(1);
|
|
1156
|
+
expect(messages[0].content).toBe('Fix bug');
|
|
1157
|
+
});
|
|
1158
|
+
|
|
1159
|
+
it('should skip progress and thinking entries', () => {
|
|
1160
|
+
const filePath = writeJsonl([
|
|
1161
|
+
{ type: 'user', timestamp: '2026-03-27T10:00:00Z', message: { content: 'Hello' } },
|
|
1162
|
+
{ type: 'progress', timestamp: '2026-03-27T10:00:01Z', data: {} },
|
|
1163
|
+
{ type: 'thinking', timestamp: '2026-03-27T10:00:02Z' },
|
|
1164
|
+
{ type: 'assistant', timestamp: '2026-03-27T10:00:03Z', message: { content: [{ type: 'text', text: 'Done' }] } },
|
|
1165
|
+
]);
|
|
1166
|
+
|
|
1167
|
+
const messages = adapter.getConversation(filePath);
|
|
1168
|
+
expect(messages).toHaveLength(2);
|
|
1169
|
+
expect(messages[0].role).toBe('user');
|
|
1170
|
+
expect(messages[1].role).toBe('assistant');
|
|
1171
|
+
});
|
|
1172
|
+
|
|
1173
|
+
it('should include system messages', () => {
|
|
1174
|
+
const filePath = writeJsonl([
|
|
1175
|
+
{ type: 'system', timestamp: '2026-03-27T10:00:00Z', message: { content: 'System initialized' } },
|
|
1176
|
+
]);
|
|
1177
|
+
|
|
1178
|
+
const messages = adapter.getConversation(filePath);
|
|
1179
|
+
expect(messages).toHaveLength(1);
|
|
1180
|
+
expect(messages[0]).toEqual({ role: 'system', content: 'System initialized', timestamp: '2026-03-27T10:00:00Z' });
|
|
1181
|
+
});
|
|
1182
|
+
|
|
1183
|
+
it('should skip tool_use and tool_result blocks in default mode', () => {
|
|
1184
|
+
const filePath = writeJsonl([
|
|
1185
|
+
{
|
|
1186
|
+
type: 'assistant', timestamp: '2026-03-27T10:00:00Z',
|
|
1187
|
+
message: {
|
|
1188
|
+
content: [
|
|
1189
|
+
{ type: 'text', text: 'Let me read the file.' },
|
|
1190
|
+
{ type: 'tool_use', name: 'Read', input: { file_path: '/src/app.ts' } },
|
|
1191
|
+
],
|
|
1192
|
+
},
|
|
1193
|
+
},
|
|
1194
|
+
{
|
|
1195
|
+
type: 'user', timestamp: '2026-03-27T10:00:01Z',
|
|
1196
|
+
message: {
|
|
1197
|
+
content: [
|
|
1198
|
+
{ type: 'tool_result', tool_use_id: 'toolu_1', content: 'file contents here' },
|
|
1199
|
+
],
|
|
1200
|
+
},
|
|
1201
|
+
},
|
|
1202
|
+
]);
|
|
1203
|
+
|
|
1204
|
+
const messages = adapter.getConversation(filePath);
|
|
1205
|
+
expect(messages).toHaveLength(1);
|
|
1206
|
+
expect(messages[0].content).toBe('Let me read the file.');
|
|
1207
|
+
});
|
|
1208
|
+
|
|
1209
|
+
it('should include tool_use and tool_result blocks in verbose mode', () => {
|
|
1210
|
+
const filePath = writeJsonl([
|
|
1211
|
+
{
|
|
1212
|
+
type: 'assistant', timestamp: '2026-03-27T10:00:00Z',
|
|
1213
|
+
message: {
|
|
1214
|
+
content: [
|
|
1215
|
+
{ type: 'text', text: 'Let me read the file.' },
|
|
1216
|
+
{ type: 'tool_use', name: 'Read', input: { file_path: '/src/app.ts' } },
|
|
1217
|
+
],
|
|
1218
|
+
},
|
|
1219
|
+
},
|
|
1220
|
+
{
|
|
1221
|
+
type: 'user', timestamp: '2026-03-27T10:00:01Z',
|
|
1222
|
+
message: {
|
|
1223
|
+
content: [
|
|
1224
|
+
{ type: 'tool_result', tool_use_id: 'toolu_1', content: 'file contents here' },
|
|
1225
|
+
],
|
|
1226
|
+
},
|
|
1227
|
+
},
|
|
1228
|
+
]);
|
|
1229
|
+
|
|
1230
|
+
const messages = adapter.getConversation(filePath, { verbose: true });
|
|
1231
|
+
expect(messages).toHaveLength(2);
|
|
1232
|
+
expect(messages[0].content).toContain('[Tool: Read]');
|
|
1233
|
+
expect(messages[0].content).toContain('/src/app.ts');
|
|
1234
|
+
expect(messages[1].content).toContain('[Tool Result]');
|
|
1235
|
+
});
|
|
1236
|
+
|
|
1237
|
+
it('should handle tool_result errors in verbose mode', () => {
|
|
1238
|
+
const filePath = writeJsonl([
|
|
1239
|
+
{
|
|
1240
|
+
type: 'user', timestamp: '2026-03-27T10:00:00Z',
|
|
1241
|
+
message: {
|
|
1242
|
+
content: [
|
|
1243
|
+
{ type: 'tool_result', tool_use_id: 'toolu_1', content: 'Something went wrong', is_error: true },
|
|
1244
|
+
],
|
|
1245
|
+
},
|
|
1246
|
+
},
|
|
1247
|
+
]);
|
|
1248
|
+
|
|
1249
|
+
const messages = adapter.getConversation(filePath, { verbose: true });
|
|
1250
|
+
expect(messages).toHaveLength(1);
|
|
1251
|
+
expect(messages[0].content).toContain('[Tool Error]');
|
|
1252
|
+
});
|
|
1253
|
+
|
|
1254
|
+
it('should handle malformed JSON lines gracefully', () => {
|
|
1255
|
+
const filePath = path.join(tmpDir, 'malformed.jsonl');
|
|
1256
|
+
fs.writeFileSync(filePath, [
|
|
1257
|
+
JSON.stringify({ type: 'user', timestamp: '2026-03-27T10:00:00Z', message: { content: 'Hello' } }),
|
|
1258
|
+
'this is not valid json',
|
|
1259
|
+
JSON.stringify({ type: 'assistant', timestamp: '2026-03-27T10:00:01Z', message: { content: [{ type: 'text', text: 'World' }] } }),
|
|
1260
|
+
].join('\n'));
|
|
1261
|
+
|
|
1262
|
+
const messages = adapter.getConversation(filePath);
|
|
1263
|
+
expect(messages).toHaveLength(2);
|
|
1264
|
+
});
|
|
1265
|
+
|
|
1266
|
+
it('should return empty array for missing file', () => {
|
|
1267
|
+
const messages = adapter.getConversation('/nonexistent/path.jsonl');
|
|
1268
|
+
expect(messages).toEqual([]);
|
|
1269
|
+
});
|
|
1270
|
+
|
|
1271
|
+
it('should return empty array for empty file', () => {
|
|
1272
|
+
const filePath = path.join(tmpDir, 'empty.jsonl');
|
|
1273
|
+
fs.writeFileSync(filePath, '');
|
|
1274
|
+
|
|
1275
|
+
const messages = adapter.getConversation(filePath);
|
|
1276
|
+
expect(messages).toEqual([]);
|
|
1277
|
+
});
|
|
1278
|
+
|
|
1279
|
+
it('should filter noise messages from user entries', () => {
|
|
1280
|
+
const filePath = writeJsonl([
|
|
1281
|
+
{ type: 'user', timestamp: '2026-03-27T10:00:00Z', message: { content: [{ type: 'text', text: '[Request interrupted by user]' }] } },
|
|
1282
|
+
{ type: 'user', timestamp: '2026-03-27T10:00:01Z', message: { content: 'Tool loaded.' } },
|
|
1283
|
+
{ type: 'user', timestamp: '2026-03-27T10:00:02Z', message: { content: 'Real question' } },
|
|
1284
|
+
]);
|
|
1285
|
+
|
|
1286
|
+
const messages = adapter.getConversation(filePath);
|
|
1287
|
+
expect(messages).toHaveLength(1);
|
|
1288
|
+
expect(messages[0].content).toBe('Real question');
|
|
1289
|
+
});
|
|
1290
|
+
});
|
|
1120
1291
|
});
|
|
@@ -515,4 +515,119 @@ describe('CodexAdapter', () => {
|
|
|
515
515
|
});
|
|
516
516
|
});
|
|
517
517
|
});
|
|
518
|
+
|
|
519
|
+
describe('getConversation', () => {
|
|
520
|
+
let tmpDir: string;
|
|
521
|
+
|
|
522
|
+
beforeEach(() => {
|
|
523
|
+
tmpDir = fs.mkdtempSync(path.join(require('os').tmpdir(), 'codex-conv-'));
|
|
524
|
+
});
|
|
525
|
+
|
|
526
|
+
afterEach(() => {
|
|
527
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
528
|
+
});
|
|
529
|
+
|
|
530
|
+
function writeJsonl(lines: object[]): string {
|
|
531
|
+
const filePath = path.join(tmpDir, 'session.jsonl');
|
|
532
|
+
fs.writeFileSync(filePath, lines.map(l => JSON.stringify(l)).join('\n'));
|
|
533
|
+
return filePath;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
it('should parse user and agent messages', () => {
|
|
537
|
+
const filePath = writeJsonl([
|
|
538
|
+
{ type: 'session_meta', payload: { id: 'sess-1', cwd: '/repo', timestamp: '2026-03-27T10:00:00Z' } },
|
|
539
|
+
{ type: 'event', timestamp: '2026-03-27T10:00:01Z', payload: { type: 'user_message', message: 'Fix the bug' } },
|
|
540
|
+
{ type: 'event', timestamp: '2026-03-27T10:00:05Z', payload: { type: 'agent_message', message: 'I found the issue' } },
|
|
541
|
+
]);
|
|
542
|
+
|
|
543
|
+
const messages = adapter.getConversation(filePath);
|
|
544
|
+
expect(messages).toHaveLength(2);
|
|
545
|
+
expect(messages[0]).toEqual({ role: 'user', content: 'Fix the bug', timestamp: '2026-03-27T10:00:01Z' });
|
|
546
|
+
expect(messages[1]).toEqual({ role: 'assistant', content: 'I found the issue', timestamp: '2026-03-27T10:00:05Z' });
|
|
547
|
+
});
|
|
548
|
+
|
|
549
|
+
it('should skip session_meta entry', () => {
|
|
550
|
+
const filePath = writeJsonl([
|
|
551
|
+
{ type: 'session_meta', payload: { id: 'sess-1', cwd: '/repo', timestamp: '2026-03-27T10:00:00Z' } },
|
|
552
|
+
{ type: 'event', timestamp: '2026-03-27T10:00:01Z', payload: { type: 'user_message', message: 'Hello' } },
|
|
553
|
+
]);
|
|
554
|
+
|
|
555
|
+
const messages = adapter.getConversation(filePath);
|
|
556
|
+
expect(messages).toHaveLength(1);
|
|
557
|
+
expect(messages[0].role).toBe('user');
|
|
558
|
+
});
|
|
559
|
+
|
|
560
|
+
it('should map task_complete to assistant role', () => {
|
|
561
|
+
const filePath = writeJsonl([
|
|
562
|
+
{ type: 'session_meta', payload: { id: 'sess-1', cwd: '/repo', timestamp: '2026-03-27T10:00:00Z' } },
|
|
563
|
+
{ type: 'event', timestamp: '2026-03-27T10:00:05Z', payload: { type: 'task_complete', message: 'Task finished successfully' } },
|
|
564
|
+
]);
|
|
565
|
+
|
|
566
|
+
const messages = adapter.getConversation(filePath);
|
|
567
|
+
expect(messages).toHaveLength(1);
|
|
568
|
+
expect(messages[0].role).toBe('assistant');
|
|
569
|
+
expect(messages[0].content).toBe('Task finished successfully');
|
|
570
|
+
});
|
|
571
|
+
|
|
572
|
+
it('should skip non-conversation types in default mode', () => {
|
|
573
|
+
const filePath = writeJsonl([
|
|
574
|
+
{ type: 'session_meta', payload: { id: 'sess-1', cwd: '/repo', timestamp: '2026-03-27T10:00:00Z' } },
|
|
575
|
+
{ type: 'event', timestamp: '2026-03-27T10:00:01Z', payload: { type: 'user_message', message: 'Hello' } },
|
|
576
|
+
{ type: 'event', timestamp: '2026-03-27T10:00:02Z', payload: { type: 'exec_command', message: 'Running npm test' } },
|
|
577
|
+
{ type: 'event', timestamp: '2026-03-27T10:00:03Z', payload: { type: 'agent_message', message: 'Done' } },
|
|
578
|
+
]);
|
|
579
|
+
|
|
580
|
+
const messages = adapter.getConversation(filePath);
|
|
581
|
+
expect(messages).toHaveLength(2);
|
|
582
|
+
});
|
|
583
|
+
|
|
584
|
+
it('should include non-conversation types as system in verbose mode', () => {
|
|
585
|
+
const filePath = writeJsonl([
|
|
586
|
+
{ type: 'session_meta', payload: { id: 'sess-1', cwd: '/repo', timestamp: '2026-03-27T10:00:00Z' } },
|
|
587
|
+
{ type: 'event', timestamp: '2026-03-27T10:00:02Z', payload: { type: 'exec_command', message: 'Running npm test' } },
|
|
588
|
+
]);
|
|
589
|
+
|
|
590
|
+
const messages = adapter.getConversation(filePath, { verbose: true });
|
|
591
|
+
expect(messages).toHaveLength(1);
|
|
592
|
+
expect(messages[0].role).toBe('system');
|
|
593
|
+
expect(messages[0].content).toBe('Running npm test');
|
|
594
|
+
});
|
|
595
|
+
|
|
596
|
+
it('should handle malformed JSON lines gracefully', () => {
|
|
597
|
+
const filePath = path.join(tmpDir, 'malformed.jsonl');
|
|
598
|
+
fs.writeFileSync(filePath, [
|
|
599
|
+
JSON.stringify({ type: 'session_meta', payload: { id: 'sess-1', cwd: '/repo', timestamp: '2026-03-27T10:00:00Z' } }),
|
|
600
|
+
'invalid json line',
|
|
601
|
+
JSON.stringify({ type: 'event', timestamp: '2026-03-27T10:00:01Z', payload: { type: 'user_message', message: 'Hello' } }),
|
|
602
|
+
].join('\n'));
|
|
603
|
+
|
|
604
|
+
const messages = adapter.getConversation(filePath);
|
|
605
|
+
expect(messages).toHaveLength(1);
|
|
606
|
+
});
|
|
607
|
+
|
|
608
|
+
it('should return empty array for missing file', () => {
|
|
609
|
+
const messages = adapter.getConversation('/nonexistent/path.jsonl');
|
|
610
|
+
expect(messages).toEqual([]);
|
|
611
|
+
});
|
|
612
|
+
|
|
613
|
+
it('should return empty array for empty file', () => {
|
|
614
|
+
const filePath = path.join(tmpDir, 'empty.jsonl');
|
|
615
|
+
fs.writeFileSync(filePath, '');
|
|
616
|
+
|
|
617
|
+
const messages = adapter.getConversation(filePath);
|
|
618
|
+
expect(messages).toEqual([]);
|
|
619
|
+
});
|
|
620
|
+
|
|
621
|
+
it('should skip entries with empty payload message', () => {
|
|
622
|
+
const filePath = writeJsonl([
|
|
623
|
+
{ type: 'session_meta', payload: { id: 'sess-1', cwd: '/repo', timestamp: '2026-03-27T10:00:00Z' } },
|
|
624
|
+
{ type: 'event', timestamp: '2026-03-27T10:00:01Z', payload: { type: 'user_message', message: '' } },
|
|
625
|
+
{ type: 'event', timestamp: '2026-03-27T10:00:02Z', payload: { type: 'agent_message', message: 'Response' } },
|
|
626
|
+
]);
|
|
627
|
+
|
|
628
|
+
const messages = adapter.getConversation(filePath);
|
|
629
|
+
expect(messages).toHaveLength(1);
|
|
630
|
+
expect(messages[0].content).toBe('Response');
|
|
631
|
+
});
|
|
632
|
+
});
|
|
518
633
|
});
|
|
@@ -173,19 +173,27 @@ describe('matchProcessesToSessions', () => {
|
|
|
173
173
|
});
|
|
174
174
|
|
|
175
175
|
describe('generateAgentName', () => {
|
|
176
|
-
it('should return
|
|
177
|
-
expect(generateAgentName('/projects/my-app', 12345)).toBe('my-app
|
|
176
|
+
it('should return lowercase kebab-case name with pid', () => {
|
|
177
|
+
expect(generateAgentName('/projects/my-app', 12345)).toBe('my-app-12345');
|
|
178
178
|
});
|
|
179
179
|
|
|
180
180
|
it('should handle root path', () => {
|
|
181
|
-
expect(generateAgentName('/', 100)).toBe('unknown
|
|
181
|
+
expect(generateAgentName('/', 100)).toBe('unknown-100');
|
|
182
182
|
});
|
|
183
183
|
|
|
184
184
|
it('should handle empty cwd', () => {
|
|
185
|
-
expect(generateAgentName('', 100)).toBe('unknown
|
|
185
|
+
expect(generateAgentName('', 100)).toBe('unknown-100');
|
|
186
186
|
});
|
|
187
187
|
|
|
188
188
|
it('should handle nested paths', () => {
|
|
189
|
-
expect(generateAgentName('/home/user/projects/ai-devkit', 78070)).toBe('ai-devkit
|
|
189
|
+
expect(generateAgentName('/home/user/projects/ai-devkit', 78070)).toBe('ai-devkit-78070');
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
it('should convert spaces and special chars to kebab-case', () => {
|
|
193
|
+
expect(generateAgentName('/projects/AI DevKit', 123)).toBe('ai-devkit-123');
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
it('should convert uppercase to lowercase', () => {
|
|
197
|
+
expect(generateAgentName('/projects/MyProject', 456)).toBe('myproject-456');
|
|
190
198
|
});
|
|
191
199
|
});
|
|
@@ -45,12 +45,11 @@ export interface AgentInfo {
|
|
|
45
45
|
/** Session UUID */
|
|
46
46
|
sessionId: string;
|
|
47
47
|
|
|
48
|
-
/** Human-readable session name (e.g., "merry-wobbling-starlight"), may be undefined for new sessions */
|
|
49
|
-
slug?: string;
|
|
50
|
-
|
|
51
48
|
/** Timestamp of last activity */
|
|
52
49
|
lastActive: Date;
|
|
53
50
|
|
|
51
|
+
/** Path to the session JSONL file on disk */
|
|
52
|
+
sessionFilePath?: string;
|
|
54
53
|
}
|
|
55
54
|
|
|
56
55
|
/**
|
|
@@ -73,9 +72,18 @@ export interface ProcessInfo {
|
|
|
73
72
|
startTime?: Date;
|
|
74
73
|
}
|
|
75
74
|
|
|
75
|
+
/**
|
|
76
|
+
* A single message in a conversation
|
|
77
|
+
*/
|
|
78
|
+
export interface ConversationMessage {
|
|
79
|
+
role: 'user' | 'assistant' | 'system';
|
|
80
|
+
content: string;
|
|
81
|
+
timestamp?: string;
|
|
82
|
+
}
|
|
83
|
+
|
|
76
84
|
/**
|
|
77
85
|
* Agent Adapter Interface
|
|
78
|
-
*
|
|
86
|
+
*
|
|
79
87
|
* Implementations must provide detection logic for a specific agent type.
|
|
80
88
|
*/
|
|
81
89
|
export interface AgentAdapter {
|
|
@@ -94,4 +102,12 @@ export interface AgentAdapter {
|
|
|
94
102
|
* @returns True if this adapter can handle the process
|
|
95
103
|
*/
|
|
96
104
|
canHandle(processInfo: ProcessInfo): boolean;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Read the full conversation from a session file
|
|
108
|
+
* @param sessionFilePath Path to the session JSONL file
|
|
109
|
+
* @param options.verbose Include tool call/result details
|
|
110
|
+
* @returns Array of conversation messages
|
|
111
|
+
*/
|
|
112
|
+
getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[];
|
|
97
113
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import type { AgentAdapter, AgentInfo, ProcessInfo } from './AgentAdapter';
|
|
3
|
+
import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage } from './AgentAdapter';
|
|
4
4
|
import { AgentStatus } from './AgentAdapter';
|
|
5
5
|
import { listAgentProcesses, enrichProcesses } from '../utils/process';
|
|
6
6
|
import { batchGetSessionFileBirthtimes } from '../utils/session';
|
|
@@ -9,17 +9,22 @@ import { matchProcessesToSessions, generateAgentName } from '../utils/matching';
|
|
|
9
9
|
/**
|
|
10
10
|
* Entry in session JSONL file
|
|
11
11
|
*/
|
|
12
|
+
interface ContentBlock {
|
|
13
|
+
type?: string;
|
|
14
|
+
text?: string;
|
|
15
|
+
content?: string;
|
|
16
|
+
name?: string;
|
|
17
|
+
input?: Record<string, unknown>;
|
|
18
|
+
tool_use_id?: string;
|
|
19
|
+
is_error?: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
12
22
|
interface SessionEntry {
|
|
13
23
|
type?: string;
|
|
14
24
|
timestamp?: string;
|
|
15
|
-
slug?: string;
|
|
16
25
|
cwd?: string;
|
|
17
26
|
message?: {
|
|
18
|
-
content?: string |
|
|
19
|
-
type?: string;
|
|
20
|
-
text?: string;
|
|
21
|
-
content?: string;
|
|
22
|
-
}>;
|
|
27
|
+
content?: string | ContentBlock[];
|
|
23
28
|
};
|
|
24
29
|
}
|
|
25
30
|
|
|
@@ -50,7 +55,6 @@ interface ClaudeSession {
|
|
|
50
55
|
sessionId: string;
|
|
51
56
|
projectPath: string;
|
|
52
57
|
lastCwd?: string;
|
|
53
|
-
slug?: string;
|
|
54
58
|
sessionStart: Date;
|
|
55
59
|
lastActive: Date;
|
|
56
60
|
lastEntryType?: string;
|
|
@@ -275,8 +279,8 @@ export class ClaudeCodeAdapter implements AgentAdapter {
|
|
|
275
279
|
pid: processInfo.pid,
|
|
276
280
|
projectPath: sessionFile.resolvedCwd || processInfo.cwd || '',
|
|
277
281
|
sessionId: sessionFile.sessionId,
|
|
278
|
-
slug: session.slug,
|
|
279
282
|
lastActive: session.lastActive,
|
|
283
|
+
sessionFilePath: sessionFile.filePath,
|
|
280
284
|
};
|
|
281
285
|
}
|
|
282
286
|
|
|
@@ -333,7 +337,6 @@ export class ClaudeCodeAdapter implements AgentAdapter {
|
|
|
333
337
|
}
|
|
334
338
|
|
|
335
339
|
// Parse all lines for session state (file already in memory)
|
|
336
|
-
let slug: string | undefined;
|
|
337
340
|
let lastEntryType: string | undefined;
|
|
338
341
|
let lastActive: Date | undefined;
|
|
339
342
|
let lastCwd: string | undefined;
|
|
@@ -351,10 +354,6 @@ export class ClaudeCodeAdapter implements AgentAdapter {
|
|
|
351
354
|
}
|
|
352
355
|
}
|
|
353
356
|
|
|
354
|
-
if (entry.slug && !slug) {
|
|
355
|
-
slug = entry.slug;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
357
|
if (typeof entry.cwd === 'string' && entry.cwd.trim().length > 0) {
|
|
359
358
|
lastCwd = entry.cwd;
|
|
360
359
|
}
|
|
@@ -392,7 +391,6 @@ export class ClaudeCodeAdapter implements AgentAdapter {
|
|
|
392
391
|
sessionId,
|
|
393
392
|
projectPath: projectPath || lastCwd || '',
|
|
394
393
|
lastCwd,
|
|
395
|
-
slug,
|
|
396
394
|
sessionStart: sessionStart || lastActive || new Date(),
|
|
397
395
|
lastActive: lastActive || new Date(),
|
|
398
396
|
lastEntryType,
|
|
@@ -517,4 +515,102 @@ export class ClaudeCodeAdapter implements AgentAdapter {
|
|
|
517
515
|
return type === 'last-prompt' || type === 'file-history-snapshot';
|
|
518
516
|
}
|
|
519
517
|
|
|
518
|
+
/**
|
|
519
|
+
* Read the full conversation from a Claude Code session JSONL file.
|
|
520
|
+
*
|
|
521
|
+
* Default mode returns only text content from user/assistant/system messages.
|
|
522
|
+
* Verbose mode also includes tool_use and tool_result blocks.
|
|
523
|
+
*/
|
|
524
|
+
getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[] {
|
|
525
|
+
const verbose = options?.verbose ?? false;
|
|
526
|
+
|
|
527
|
+
let content: string;
|
|
528
|
+
try {
|
|
529
|
+
content = fs.readFileSync(sessionFilePath, 'utf-8');
|
|
530
|
+
} catch {
|
|
531
|
+
return [];
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
const lines = content.trim().split('\n');
|
|
535
|
+
const messages: ConversationMessage[] = [];
|
|
536
|
+
|
|
537
|
+
for (const line of lines) {
|
|
538
|
+
let entry: SessionEntry;
|
|
539
|
+
try {
|
|
540
|
+
entry = JSON.parse(line);
|
|
541
|
+
} catch {
|
|
542
|
+
continue;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
const entryType = entry.type;
|
|
546
|
+
if (!entryType || this.isMetadataEntryType(entryType)) continue;
|
|
547
|
+
if (entryType === 'progress' || entryType === 'thinking') continue;
|
|
548
|
+
|
|
549
|
+
let role: ConversationMessage['role'];
|
|
550
|
+
if (entryType === 'user') {
|
|
551
|
+
role = 'user';
|
|
552
|
+
} else if (entryType === 'assistant') {
|
|
553
|
+
role = 'assistant';
|
|
554
|
+
} else if (entryType === 'system') {
|
|
555
|
+
role = 'system';
|
|
556
|
+
} else {
|
|
557
|
+
continue;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
const text = this.extractConversationContent(entry.message?.content, role, verbose);
|
|
561
|
+
if (!text) continue;
|
|
562
|
+
|
|
563
|
+
messages.push({
|
|
564
|
+
role,
|
|
565
|
+
content: text,
|
|
566
|
+
timestamp: entry.timestamp,
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
return messages;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
/**
|
|
574
|
+
* Extract displayable content from a message content field.
|
|
575
|
+
*/
|
|
576
|
+
private extractConversationContent(
|
|
577
|
+
content: string | ContentBlock[] | undefined,
|
|
578
|
+
role: ConversationMessage['role'],
|
|
579
|
+
verbose: boolean,
|
|
580
|
+
): string | undefined {
|
|
581
|
+
if (!content) return undefined;
|
|
582
|
+
|
|
583
|
+
if (typeof content === 'string') {
|
|
584
|
+
const trimmed = content.trim();
|
|
585
|
+
if (role === 'user' && this.isNoiseMessage(trimmed)) return undefined;
|
|
586
|
+
return trimmed || undefined;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
if (!Array.isArray(content)) return undefined;
|
|
590
|
+
|
|
591
|
+
const parts: string[] = [];
|
|
592
|
+
|
|
593
|
+
for (const block of content) {
|
|
594
|
+
if (block.type === 'text' && block.text?.trim()) {
|
|
595
|
+
if (role === 'user' && this.isNoiseMessage(block.text.trim())) continue;
|
|
596
|
+
parts.push(block.text.trim());
|
|
597
|
+
} else if (block.type === 'tool_use' && verbose) {
|
|
598
|
+
const inputSummary = block.input?.file_path || block.input?.pattern || block.input?.command || '';
|
|
599
|
+
parts.push(`[Tool: ${block.name}]${inputSummary ? ' ' + inputSummary : ''}`);
|
|
600
|
+
} else if (block.type === 'tool_result' && verbose) {
|
|
601
|
+
const truncated = this.truncateToolResult(block.content || '');
|
|
602
|
+
const prefix = block.is_error ? '[Tool Error]' : '[Tool Result]';
|
|
603
|
+
parts.push(`${prefix} ${truncated}`);
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
return parts.length > 0 ? parts.join('\n') : undefined;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
private truncateToolResult(content: string, maxLength = 200): string {
|
|
611
|
+
const firstLine = content.split('\n')[0] || '';
|
|
612
|
+
if (firstLine.length <= maxLength) return firstLine;
|
|
613
|
+
return firstLine.slice(0, maxLength - 3) + '...';
|
|
614
|
+
}
|
|
615
|
+
|
|
520
616
|
}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
import * as fs from 'fs';
|
|
14
14
|
import * as path from 'path';
|
|
15
|
-
import type { AgentAdapter, AgentInfo, ProcessInfo } from './AgentAdapter';
|
|
15
|
+
import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage } from './AgentAdapter';
|
|
16
16
|
import { AgentStatus } from './AgentAdapter';
|
|
17
17
|
import { listAgentProcesses, enrichProcesses } from '../utils/process';
|
|
18
18
|
import { batchGetSessionFileBirthtimes } from '../utils/session';
|
|
@@ -78,7 +78,7 @@ export class CodexAdapter implements AgentAdapter {
|
|
|
78
78
|
const cachedContent = contentCache.get(match.session.filePath);
|
|
79
79
|
const sessionData = this.parseSession(cachedContent, match.session.filePath);
|
|
80
80
|
if (sessionData) {
|
|
81
|
-
agents.push(this.mapSessionToAgent(sessionData, match.process));
|
|
81
|
+
agents.push(this.mapSessionToAgent(sessionData, match.process, match.session.filePath));
|
|
82
82
|
} else {
|
|
83
83
|
matchedPids.delete(match.process.pid);
|
|
84
84
|
}
|
|
@@ -234,7 +234,7 @@ export class CodexAdapter implements AgentAdapter {
|
|
|
234
234
|
};
|
|
235
235
|
}
|
|
236
236
|
|
|
237
|
-
private mapSessionToAgent(session: CodexSession, processInfo: ProcessInfo): AgentInfo {
|
|
237
|
+
private mapSessionToAgent(session: CodexSession, processInfo: ProcessInfo, filePath: string): AgentInfo {
|
|
238
238
|
return {
|
|
239
239
|
name: generateAgentName(session.projectPath || processInfo.cwd || '', processInfo.pid),
|
|
240
240
|
type: this.type,
|
|
@@ -244,6 +244,7 @@ export class CodexAdapter implements AgentAdapter {
|
|
|
244
244
|
projectPath: session.projectPath || processInfo.cwd || '',
|
|
245
245
|
sessionId: session.sessionId,
|
|
246
246
|
lastActive: session.lastActive,
|
|
247
|
+
sessionFilePath: filePath,
|
|
247
248
|
};
|
|
248
249
|
}
|
|
249
250
|
|
|
@@ -316,4 +317,59 @@ export class CodexAdapter implements AgentAdapter {
|
|
|
316
317
|
const base = path.basename(executable).toLowerCase();
|
|
317
318
|
return base === 'codex' || base === 'codex.exe';
|
|
318
319
|
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Read the full conversation from a Codex session JSONL file.
|
|
323
|
+
*
|
|
324
|
+
* Codex entries use payload.type to indicate message role and payload.message for content.
|
|
325
|
+
*/
|
|
326
|
+
getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[] {
|
|
327
|
+
const verbose = options?.verbose ?? false;
|
|
328
|
+
|
|
329
|
+
let content: string;
|
|
330
|
+
try {
|
|
331
|
+
content = fs.readFileSync(sessionFilePath, 'utf-8');
|
|
332
|
+
} catch {
|
|
333
|
+
return [];
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
const lines = content.trim().split('\n');
|
|
337
|
+
const messages: ConversationMessage[] = [];
|
|
338
|
+
|
|
339
|
+
for (const line of lines) {
|
|
340
|
+
let entry: CodexEventEntry;
|
|
341
|
+
try {
|
|
342
|
+
entry = JSON.parse(line);
|
|
343
|
+
} catch {
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if (entry.type === 'session_meta') continue;
|
|
348
|
+
|
|
349
|
+
const payloadType = entry.payload?.type;
|
|
350
|
+
if (!payloadType) continue;
|
|
351
|
+
|
|
352
|
+
let role: ConversationMessage['role'];
|
|
353
|
+
if (payloadType === 'user_message') {
|
|
354
|
+
role = 'user';
|
|
355
|
+
} else if (payloadType === 'agent_message' || payloadType === 'task_complete') {
|
|
356
|
+
role = 'assistant';
|
|
357
|
+
} else if (verbose) {
|
|
358
|
+
role = 'system';
|
|
359
|
+
} else {
|
|
360
|
+
continue;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
const text = entry.payload?.message?.trim();
|
|
364
|
+
if (!text) continue;
|
|
365
|
+
|
|
366
|
+
messages.push({
|
|
367
|
+
role,
|
|
368
|
+
content: text,
|
|
369
|
+
timestamp: entry.timestamp,
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
return messages;
|
|
374
|
+
}
|
|
319
375
|
}
|
package/src/index.ts
CHANGED
|
@@ -3,7 +3,7 @@ export { AgentManager } from './AgentManager';
|
|
|
3
3
|
export { ClaudeCodeAdapter } from './adapters/ClaudeCodeAdapter';
|
|
4
4
|
export { CodexAdapter } from './adapters/CodexAdapter';
|
|
5
5
|
export { AgentStatus } from './adapters/AgentAdapter';
|
|
6
|
-
export type { AgentAdapter, AgentType, AgentInfo, ProcessInfo } from './adapters/AgentAdapter';
|
|
6
|
+
export type { AgentAdapter, AgentType, AgentInfo, ProcessInfo, ConversationMessage } from './adapters/AgentAdapter';
|
|
7
7
|
|
|
8
8
|
export { TerminalFocusManager, TerminalType } from './terminal/TerminalFocusManager';
|
|
9
9
|
export type { TerminalLocation } from './terminal/TerminalFocusManager';
|
package/src/utils/matching.ts
CHANGED
|
@@ -84,9 +84,13 @@ export function matchProcessesToSessions(
|
|
|
84
84
|
/**
|
|
85
85
|
* Generate a deterministic agent name from CWD and PID.
|
|
86
86
|
*
|
|
87
|
-
* Format: "
|
|
87
|
+
* Format: "folder-name-pid" (lowercase kebab-case)
|
|
88
88
|
*/
|
|
89
89
|
export function generateAgentName(cwd: string, pid: number): string {
|
|
90
90
|
const folderName = path.basename(cwd) || 'unknown';
|
|
91
|
-
|
|
91
|
+
const kebab = folderName
|
|
92
|
+
.toLowerCase()
|
|
93
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
94
|
+
.replace(/^-+|-+$/g, '');
|
|
95
|
+
return `${kebab || 'unknown'}-${pid}`;
|
|
92
96
|
}
|