@ai-devkit/agent-manager 0.4.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 +21 -2
- package/dist/adapters/AgentAdapter.d.ts.map +1 -1
- package/dist/adapters/ClaudeCodeAdapter.d.ts +44 -35
- package/dist/adapters/ClaudeCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/ClaudeCodeAdapter.js +230 -298
- package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
- package/dist/adapters/CodexAdapter.d.ts +41 -31
- package/dist/adapters/CodexAdapter.d.ts.map +1 -1
- package/dist/adapters/CodexAdapter.js +198 -278
- package/dist/adapters/CodexAdapter.js.map +1 -1
- package/dist/index.d.ts +2 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -10
- package/dist/index.js.map +1 -1
- package/dist/utils/index.d.ts +6 -3
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +12 -11
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/matching.d.ts +39 -0
- package/dist/utils/matching.d.ts.map +1 -0
- package/dist/utils/matching.js +107 -0
- package/dist/utils/matching.js.map +1 -0
- package/dist/utils/process.d.ts +25 -40
- package/dist/utils/process.d.ts.map +1 -1
- package/dist/utils/process.js +151 -105
- package/dist/utils/process.js.map +1 -1
- package/dist/utils/session.d.ts +30 -0
- package/dist/utils/session.d.ts.map +1 -0
- package/dist/utils/session.js +101 -0
- package/dist/utils/session.js.map +1 -0
- package/package.json +1 -1
- package/src/__tests__/AgentManager.test.ts +5 -27
- package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +754 -830
- package/src/__tests__/adapters/CodexAdapter.test.ts +581 -273
- package/src/__tests__/utils/matching.test.ts +199 -0
- package/src/__tests__/utils/process.test.ts +202 -0
- package/src/__tests__/utils/session.test.ts +117 -0
- package/src/adapters/AgentAdapter.ts +23 -4
- package/src/adapters/ClaudeCodeAdapter.ts +285 -437
- package/src/adapters/CodexAdapter.ts +202 -400
- package/src/index.ts +2 -4
- package/src/utils/index.ts +6 -3
- package/src/utils/matching.ts +96 -0
- package/src/utils/process.ts +133 -119
- package/src/utils/session.ts +92 -0
- package/dist/utils/file.d.ts +0 -52
- package/dist/utils/file.d.ts.map +0 -1
- package/dist/utils/file.js +0 -135
- package/dist/utils/file.js.map +0 -1
- package/src/utils/file.ts +0 -100
|
@@ -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
|
|
@@ -52,6 +52,16 @@ export interface ProcessInfo {
|
|
|
52
52
|
cwd: string;
|
|
53
53
|
/** Terminal TTY (e.g., "ttys030") */
|
|
54
54
|
tty: string;
|
|
55
|
+
/** Process start time, populated by enrichProcesses */
|
|
56
|
+
startTime?: Date;
|
|
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;
|
|
55
65
|
}
|
|
56
66
|
/**
|
|
57
67
|
* Agent Adapter Interface
|
|
@@ -72,5 +82,14 @@ export interface AgentAdapter {
|
|
|
72
82
|
* @returns True if this adapter can handle the process
|
|
73
83
|
*/
|
|
74
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[];
|
|
75
94
|
}
|
|
76
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,23 +1,18 @@
|
|
|
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
|
*
|
|
5
5
|
* Detects Claude Code agents by:
|
|
6
|
-
* 1. Finding running claude processes
|
|
7
|
-
* 2.
|
|
8
|
-
* 3.
|
|
9
|
-
* 4.
|
|
6
|
+
* 1. Finding running claude processes via shared listAgentProcesses()
|
|
7
|
+
* 2. Enriching with CWD and start times via shared enrichProcesses()
|
|
8
|
+
* 3. Attempting authoritative PID-file matching via ~/.claude/sessions/<pid>.json
|
|
9
|
+
* 4. Falling back to CWD+birthtime heuristic (matchProcessesToSessions) for processes without a PID file
|
|
10
10
|
* 5. Extracting summary from last user message in session JSONL
|
|
11
11
|
*/
|
|
12
12
|
export declare class ClaudeCodeAdapter implements AgentAdapter {
|
|
13
13
|
readonly type: "claude";
|
|
14
|
-
/** Limit session parsing per run to keep list latency bounded. */
|
|
15
|
-
private static readonly MIN_SESSION_SCAN;
|
|
16
|
-
private static readonly MAX_SESSION_SCAN;
|
|
17
|
-
private static readonly SESSION_SCAN_MULTIPLIER;
|
|
18
|
-
/** Matching tolerance between process start time and session start time. */
|
|
19
|
-
private static readonly PROCESS_SESSION_TIME_TOLERANCE_MS;
|
|
20
14
|
private projectsDir;
|
|
15
|
+
private sessionsDir;
|
|
21
16
|
constructor();
|
|
22
17
|
/**
|
|
23
18
|
* Check if this adapter can handle a given process
|
|
@@ -28,24 +23,34 @@ export declare class ClaudeCodeAdapter implements AgentAdapter {
|
|
|
28
23
|
* Detect running Claude Code agents
|
|
29
24
|
*/
|
|
30
25
|
detectAgents(): Promise<AgentInfo[]>;
|
|
31
|
-
private listClaudeProcesses;
|
|
32
|
-
private calculateSessionScanLimit;
|
|
33
|
-
private assignSessionsForMode;
|
|
34
|
-
private mapSessionToAgent;
|
|
35
|
-
private mapProcessOnlyAgent;
|
|
36
|
-
private selectBestSession;
|
|
37
|
-
private filterCandidateSessions;
|
|
38
|
-
private rankCandidatesByStartTime;
|
|
39
|
-
private getProcessStartTimes;
|
|
40
|
-
private parseElapsedSeconds;
|
|
41
26
|
/**
|
|
42
|
-
*
|
|
27
|
+
* Discover session files for the given processes.
|
|
28
|
+
*
|
|
29
|
+
* For each unique process CWD, encodes it to derive the expected
|
|
30
|
+
* ~/.claude/projects/<encoded>/ directory, then gets session file birthtimes
|
|
31
|
+
* via a single batched stat call across all directories.
|
|
32
|
+
*/
|
|
33
|
+
private discoverSessions;
|
|
34
|
+
/**
|
|
35
|
+
* Attempt to match each process to its session via ~/.claude/sessions/<pid>.json.
|
|
36
|
+
*
|
|
37
|
+
* Returns:
|
|
38
|
+
* direct — processes matched authoritatively via PID file
|
|
39
|
+
* fallback — processes with no valid PID file (sent to legacy matching)
|
|
40
|
+
*
|
|
41
|
+
* Per-process fallback triggers on: file absent, malformed JSON,
|
|
42
|
+
* stale startedAt (>60 s from proc.startTime), or missing JSONL.
|
|
43
43
|
*/
|
|
44
|
-
private
|
|
44
|
+
private tryPidFileMatching;
|
|
45
45
|
/**
|
|
46
|
-
*
|
|
46
|
+
* Derive the Claude Code project directory for a given CWD.
|
|
47
|
+
*
|
|
48
|
+
* Claude Code encodes paths by replacing '/' with '-':
|
|
49
|
+
* /Users/foo/bar → ~/.claude/projects/-Users-foo-bar/
|
|
47
50
|
*/
|
|
48
|
-
private
|
|
51
|
+
private getProjectDir;
|
|
52
|
+
private mapSessionToAgent;
|
|
53
|
+
private mapProcessOnlyAgent;
|
|
49
54
|
/**
|
|
50
55
|
* Parse a single session file into ClaudeSession
|
|
51
56
|
*/
|
|
@@ -54,15 +59,6 @@ export declare class ClaudeCodeAdapter implements AgentAdapter {
|
|
|
54
59
|
* Determine agent status from session state
|
|
55
60
|
*/
|
|
56
61
|
private determineStatus;
|
|
57
|
-
/**
|
|
58
|
-
* Generate unique agent name
|
|
59
|
-
* Uses project basename, appends slug if multiple sessions for same project
|
|
60
|
-
*/
|
|
61
|
-
private generateAgentName;
|
|
62
|
-
/** Check if two paths are equal, or one is a parent/child of the other. */
|
|
63
|
-
private pathRelated;
|
|
64
|
-
private pathEquals;
|
|
65
|
-
private isChildPath;
|
|
66
62
|
/**
|
|
67
63
|
* Extract meaningful text from a user message content.
|
|
68
64
|
* Handles string and array formats, skill command expansion, and noise filtering.
|
|
@@ -81,6 +77,19 @@ export declare class ClaudeCodeAdapter implements AgentAdapter {
|
|
|
81
77
|
* These should not overwrite lastEntryType used for status determination.
|
|
82
78
|
*/
|
|
83
79
|
private isMetadataEntryType;
|
|
84
|
-
|
|
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;
|
|
85
94
|
}
|
|
86
95
|
//# sourceMappingURL=ClaudeCodeAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeCodeAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ClaudeCodeAdapter.ts"],"names":[],"mappings":"
|
|
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"}
|