@ai-devkit/agent-manager 0.9.0 → 0.11.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/AgentManager.d.ts +21 -1
- package/dist/AgentManager.d.ts.map +1 -1
- package/dist/AgentManager.js +47 -0
- package/dist/AgentManager.js.map +1 -1
- package/dist/adapters/AgentAdapter.d.ts +66 -0
- package/dist/adapters/AgentAdapter.d.ts.map +1 -1
- package/dist/adapters/ClaudeCodeAdapter.d.ts +14 -43
- package/dist/adapters/ClaudeCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/ClaudeCodeAdapter.js +60 -275
- package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
- package/dist/adapters/CodexAdapter.d.ts +14 -1
- package/dist/adapters/CodexAdapter.d.ts.map +1 -1
- package/dist/adapters/CodexAdapter.js +105 -6
- package/dist/adapters/CodexAdapter.js.map +1 -1
- package/dist/adapters/GeminiCliAdapter.d.ts +9 -1
- package/dist/adapters/GeminiCliAdapter.d.ts.map +1 -1
- package/dist/adapters/GeminiCliAdapter.js +77 -6
- package/dist/adapters/GeminiCliAdapter.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/terminal/TerminalFocusManager.d.ts.map +1 -1
- package/dist/terminal/TerminalFocusManager.js +36 -27
- package/dist/terminal/TerminalFocusManager.js.map +1 -1
- package/dist/terminal/TtyWriter.d.ts.map +1 -1
- package/dist/terminal/TtyWriter.js +3 -12
- package/dist/terminal/TtyWriter.js.map +1 -1
- package/dist/utils/ClaudeSessionParser.d.ts +114 -0
- package/dist/utils/ClaudeSessionParser.d.ts.map +1 -0
- package/dist/utils/ClaudeSessionParser.js +377 -0
- package/dist/utils/ClaudeSessionParser.js.map +1 -0
- package/dist/utils/applescript.d.ts +6 -0
- package/dist/utils/applescript.d.ts.map +1 -0
- package/dist/utils/applescript.js +14 -0
- package/dist/utils/applescript.js.map +1 -0
- package/dist/utils/process.d.ts +3 -4
- package/dist/utils/process.d.ts.map +1 -1
- package/dist/utils/process.js +11 -15
- package/dist/utils/process.js.map +1 -1
- package/dist/utils/session.d.ts +34 -5
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +90 -44
- package/dist/utils/session.js.map +1 -1
- package/package.json +1 -1
- package/src/AgentManager.ts +66 -4
- package/src/__tests__/AgentManager.test.ts +134 -2
- package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +188 -32
- package/src/__tests__/adapters/CodexAdapter.test.ts +123 -3
- package/src/__tests__/adapters/GeminiCliAdapter.test.ts +133 -0
- package/src/__tests__/utils/ClaudeSessionParser.test.ts +195 -0
- package/src/__tests__/utils/process.test.ts +27 -27
- package/src/__tests__/utils/session.test.ts +79 -43
- package/src/adapters/AgentAdapter.ts +76 -0
- package/src/adapters/ClaudeCodeAdapter.ts +82 -356
- package/src/adapters/CodexAdapter.ts +126 -8
- package/src/adapters/GeminiCliAdapter.ts +102 -7
- package/src/index.ts +9 -1
- package/src/terminal/TerminalFocusManager.ts +35 -26
- package/src/terminal/TtyWriter.ts +1 -11
- package/src/utils/ClaudeSessionParser.ts +437 -0
- package/src/utils/applescript.ts +10 -0
- package/src/utils/process.ts +21 -24
- package/src/utils/session.ts +86 -45
package/dist/AgentManager.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Orchestrates agent detection across multiple adapter types.
|
|
5
5
|
* Manages adapter registration and aggregates results from all adapters.
|
|
6
6
|
*/
|
|
7
|
-
import type { AgentAdapter, AgentInfo } from './adapters/AgentAdapter';
|
|
7
|
+
import type { AgentAdapter, AgentInfo, SessionSummary, ListSessionsOptions } from './adapters/AgentAdapter';
|
|
8
8
|
/**
|
|
9
9
|
* Agent Manager Class
|
|
10
10
|
*
|
|
@@ -47,6 +47,13 @@ export declare class AgentManager {
|
|
|
47
47
|
* @returns Array of registered adapters
|
|
48
48
|
*/
|
|
49
49
|
getAdapters(): AgentAdapter[];
|
|
50
|
+
/**
|
|
51
|
+
* Get a registered adapter by type
|
|
52
|
+
*
|
|
53
|
+
* @param type Agent type to look up
|
|
54
|
+
* @returns The adapter, or undefined if not registered
|
|
55
|
+
*/
|
|
56
|
+
getAdapter(type: string): AgentAdapter | undefined;
|
|
50
57
|
/**
|
|
51
58
|
* Check if an adapter is registered for a specific type
|
|
52
59
|
*
|
|
@@ -72,6 +79,19 @@ export declare class AgentManager {
|
|
|
72
79
|
* ```
|
|
73
80
|
*/
|
|
74
81
|
listAgents(): Promise<AgentInfo[]>;
|
|
82
|
+
/**
|
|
83
|
+
* List historical sessions across every registered adapter.
|
|
84
|
+
*
|
|
85
|
+
* When `opts.type` is set, adapters whose `type` doesn't match are
|
|
86
|
+
* skipped without being called. The remaining adapters' results are
|
|
87
|
+
* merged and sorted by `lastActive` descending. Adapter failures are
|
|
88
|
+
* caught (one-line stderr warning) so one broken adapter doesn't hide
|
|
89
|
+
* the others.
|
|
90
|
+
*
|
|
91
|
+
* @param opts Filter options computed by the CLI; the manager passes
|
|
92
|
+
* them through to each adapter unchanged.
|
|
93
|
+
*/
|
|
94
|
+
listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]>;
|
|
75
95
|
/**
|
|
76
96
|
* Sort agents by status priority
|
|
77
97
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentManager.d.ts","sourceRoot":"","sources":["../src/AgentManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"AgentManager.d.ts","sourceRoot":"","sources":["../src/AgentManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACR,YAAY,EACZ,SAAS,EACT,cAAc,EACd,mBAAmB,EACtB,MAAM,yBAAyB,CAAC;AAGjC;;;;;;;;;;;;;;GAcG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAwC;IAExD;;;;;;;;;;OAUG;IACH,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAU5C;;;;;OAKG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;OAIG;IACH,WAAW,IAAI,YAAY,EAAE;IAI7B;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIlD;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC;;;;;;;;;;;;;;;;OAgBG;IACG,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAsCxC;;;;;;;;;;;OAWG;IACG,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAmCzE;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;;;OAIG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;;;OAMG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,GAAG,IAAI;CAiBnF"}
|
package/dist/AgentManager.js
CHANGED
|
@@ -62,6 +62,15 @@ class AgentManager {
|
|
|
62
62
|
getAdapters() {
|
|
63
63
|
return Array.from(this.adapters.values());
|
|
64
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Get a registered adapter by type
|
|
67
|
+
*
|
|
68
|
+
* @param type Agent type to look up
|
|
69
|
+
* @returns The adapter, or undefined if not registered
|
|
70
|
+
*/
|
|
71
|
+
getAdapter(type) {
|
|
72
|
+
return this.adapters.get(type);
|
|
73
|
+
}
|
|
65
74
|
/**
|
|
66
75
|
* Check if an adapter is registered for a specific type
|
|
67
76
|
*
|
|
@@ -121,6 +130,44 @@ class AgentManager {
|
|
|
121
130
|
// Sort by status priority (waiting first, then running, then idle)
|
|
122
131
|
return this.sortAgentsByStatus(allAgents);
|
|
123
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* List historical sessions across every registered adapter.
|
|
135
|
+
*
|
|
136
|
+
* When `opts.type` is set, adapters whose `type` doesn't match are
|
|
137
|
+
* skipped without being called. The remaining adapters' results are
|
|
138
|
+
* merged and sorted by `lastActive` descending. Adapter failures are
|
|
139
|
+
* caught (one-line stderr warning) so one broken adapter doesn't hide
|
|
140
|
+
* the others.
|
|
141
|
+
*
|
|
142
|
+
* @param opts Filter options computed by the CLI; the manager passes
|
|
143
|
+
* them through to each adapter unchanged.
|
|
144
|
+
*/
|
|
145
|
+
async listSessions(opts) {
|
|
146
|
+
const targetAdapters = Array.from(this.adapters.values()).filter((adapter) => opts?.type === undefined || adapter.type === opts.type);
|
|
147
|
+
const errors = [];
|
|
148
|
+
const results = await Promise.all(targetAdapters.map(async (adapter) => {
|
|
149
|
+
try {
|
|
150
|
+
return await adapter.listSessions(opts);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
154
|
+
errors.push({ type: adapter.type, error: err });
|
|
155
|
+
return [];
|
|
156
|
+
}
|
|
157
|
+
}));
|
|
158
|
+
if (errors.length > 0) {
|
|
159
|
+
console.error(`Warning: ${errors.length} adapter(s) failed to list sessions:`);
|
|
160
|
+
for (const { type, error } of errors) {
|
|
161
|
+
console.error(` - ${type}: ${error.message}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const merged = [];
|
|
165
|
+
for (const list of results) {
|
|
166
|
+
merged.push(...list);
|
|
167
|
+
}
|
|
168
|
+
merged.sort((a, b) => b.lastActive.getTime() - a.lastActive.getTime());
|
|
169
|
+
return merged;
|
|
170
|
+
}
|
|
124
171
|
/**
|
|
125
172
|
* Sort agents by status priority
|
|
126
173
|
*
|
package/dist/AgentManager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentManager.js","sourceRoot":"","sources":["../src/AgentManager.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;
|
|
1
|
+
{"version":3,"file":"AgentManager.js","sourceRoot":"","sources":["../src/AgentManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,6 +63,61 @@ export interface ConversationMessage {
|
|
|
63
63
|
content: string;
|
|
64
64
|
timestamp?: string;
|
|
65
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* A historical session discovered on disk (running or not).
|
|
68
|
+
*
|
|
69
|
+
* Used by `listSessions` to surface enough context for a user to identify
|
|
70
|
+
* a session and resume it via the originating tool's resume command.
|
|
71
|
+
*/
|
|
72
|
+
export interface SessionSummary {
|
|
73
|
+
/** Tool that produced this session */
|
|
74
|
+
type: AgentType;
|
|
75
|
+
/**
|
|
76
|
+
* ID accepted by the tool's resume command. Adapters MUST pass this
|
|
77
|
+
* through verbatim — no normalization, no encoding/decoding — so it
|
|
78
|
+
* round-trips into `claude --resume <id>` (and equivalents).
|
|
79
|
+
*/
|
|
80
|
+
sessionId: string;
|
|
81
|
+
/** Working directory the session was started in (best-known value) */
|
|
82
|
+
cwd: string;
|
|
83
|
+
/**
|
|
84
|
+
* Trimmed first user message; empty string if none. Adapters apply
|
|
85
|
+
* the same noise-filter their existing parsers use (skip tool_result
|
|
86
|
+
* blocks, request-interruption notices, system-injected skill
|
|
87
|
+
* content). The CLI table renderer substitutes a placeholder for
|
|
88
|
+
* empty values; JSON output keeps the empty string raw.
|
|
89
|
+
*/
|
|
90
|
+
firstUserMessage: string;
|
|
91
|
+
/** Last activity timestamp (from session content; falls back to file mtime) */
|
|
92
|
+
lastActive: Date;
|
|
93
|
+
/** Session start time (from session content; falls back to file birthtime/mtime) */
|
|
94
|
+
startedAt: Date;
|
|
95
|
+
/** Absolute path to the session file on disk (debug/diagnostics) */
|
|
96
|
+
sessionFilePath: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Filters passed by the CLI to {@link AgentAdapter.listSessions}.
|
|
100
|
+
*
|
|
101
|
+
* The CLI is the source of truth for filter defaults and semantics
|
|
102
|
+
* (e.g. cwd defaults to process.cwd(); --all clears it). Adapters apply
|
|
103
|
+
* the values they receive — they don't invent defaults.
|
|
104
|
+
*/
|
|
105
|
+
export interface ListSessionsOptions {
|
|
106
|
+
/**
|
|
107
|
+
* Filter to sessions whose recorded cwd matches this path using strict
|
|
108
|
+
* equality (no prefix/ancestor matching in v1). Undefined = no cwd
|
|
109
|
+
* filter.
|
|
110
|
+
*/
|
|
111
|
+
cwd?: string;
|
|
112
|
+
/**
|
|
113
|
+
* Filter to a single tool. Enforced by `AgentManager.listSessions`,
|
|
114
|
+
* which skips adapters whose `type` doesn't match. Adapters MAY
|
|
115
|
+
* ignore this field — by the time their `listSessions` runs, the
|
|
116
|
+
* type filter is already satisfied. Undefined = include every
|
|
117
|
+
* registered adapter.
|
|
118
|
+
*/
|
|
119
|
+
type?: AgentType;
|
|
120
|
+
}
|
|
66
121
|
/**
|
|
67
122
|
* Agent Adapter Interface
|
|
68
123
|
*
|
|
@@ -91,5 +146,16 @@ export interface AgentAdapter {
|
|
|
91
146
|
getConversation(sessionFilePath: string, options?: {
|
|
92
147
|
verbose?: boolean;
|
|
93
148
|
}): ConversationMessage[];
|
|
149
|
+
/**
|
|
150
|
+
* Enumerate historical sessions for this tool from disk.
|
|
151
|
+
*
|
|
152
|
+
* Applies `opts.cwd` as a strict-equality filter when set. Returns
|
|
153
|
+
* {@link SessionSummary} entries unsorted; sorting and global filters
|
|
154
|
+
* are handled by `AgentManager` and the CLI.
|
|
155
|
+
*
|
|
156
|
+
* @param opts Filter options computed by the CLI
|
|
157
|
+
* @returns Array of sessions discovered on disk
|
|
158
|
+
*/
|
|
159
|
+
listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]>;
|
|
94
160
|
}
|
|
95
161
|
//# 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,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;
|
|
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;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC3B,sCAAsC;IACtC,IAAI,EAAE,SAAS,CAAC;IAEhB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IAEZ;;;;;;OAMG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB,+EAA+E;IAC/E,UAAU,EAAE,IAAI,CAAC;IAEjB,oFAAoF;IACpF,SAAS,EAAE,IAAI,CAAC;IAEhB,oEAAoE;IACpE,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAChC;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;CACpB;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;IAEjG;;;;;;;;;OASG;IACH,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CACvE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage } from './AgentAdapter';
|
|
1
|
+
import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage, SessionSummary, ListSessionsOptions } from './AgentAdapter';
|
|
2
2
|
/**
|
|
3
3
|
* Claude Code Adapter
|
|
4
4
|
*
|
|
@@ -13,15 +13,10 @@ export declare class ClaudeCodeAdapter implements AgentAdapter {
|
|
|
13
13
|
readonly type: "claude";
|
|
14
14
|
private projectsDir;
|
|
15
15
|
private sessionsDir;
|
|
16
|
+
private parser;
|
|
16
17
|
constructor();
|
|
17
|
-
/**
|
|
18
|
-
* Check if this adapter can handle a given process
|
|
19
|
-
*/
|
|
20
18
|
canHandle(processInfo: ProcessInfo): boolean;
|
|
21
19
|
private isClaudeExecutable;
|
|
22
|
-
/**
|
|
23
|
-
* Detect running Claude Code agents
|
|
24
|
-
*/
|
|
25
20
|
detectAgents(): Promise<AgentInfo[]>;
|
|
26
21
|
/**
|
|
27
22
|
* Discover session files for the given processes.
|
|
@@ -39,7 +34,7 @@ export declare class ClaudeCodeAdapter implements AgentAdapter {
|
|
|
39
34
|
* fallback — processes with no valid PID file (sent to legacy matching)
|
|
40
35
|
*
|
|
41
36
|
* Per-process fallback triggers on: file absent, malformed JSON,
|
|
42
|
-
* stale startedAt (>
|
|
37
|
+
* stale startedAt (>60s from proc.startTime), or missing JSONL.
|
|
43
38
|
*/
|
|
44
39
|
private tryPidFileMatching;
|
|
45
40
|
/**
|
|
@@ -51,45 +46,21 @@ export declare class ClaudeCodeAdapter implements AgentAdapter {
|
|
|
51
46
|
private getProjectDir;
|
|
52
47
|
private mapSessionToAgent;
|
|
53
48
|
private mapProcessOnlyAgent;
|
|
54
|
-
/**
|
|
55
|
-
* Parse a single session file into ClaudeSession
|
|
56
|
-
*/
|
|
57
|
-
private readSession;
|
|
58
|
-
/**
|
|
59
|
-
* Determine agent status from session state
|
|
60
|
-
*/
|
|
61
|
-
private determineStatus;
|
|
62
|
-
/**
|
|
63
|
-
* Extract meaningful text from a user message content.
|
|
64
|
-
* Handles string and array formats, skill command expansion, and noise filtering.
|
|
65
|
-
*/
|
|
66
|
-
private extractUserMessageText;
|
|
67
|
-
/**
|
|
68
|
-
* Parse a <command-message> string into "/command args" format.
|
|
69
|
-
*/
|
|
70
|
-
private parseCommandMessage;
|
|
71
|
-
/**
|
|
72
|
-
* Check if a message is noise (not a meaningful user intent).
|
|
73
|
-
*/
|
|
74
|
-
private isNoiseMessage;
|
|
75
|
-
/**
|
|
76
|
-
* Check if an entry type is metadata (not conversation state).
|
|
77
|
-
* These should not overwrite lastEntryType used for status determination.
|
|
78
|
-
*/
|
|
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
49
|
getConversation(sessionFilePath: string, options?: {
|
|
87
50
|
verbose?: boolean;
|
|
88
51
|
}): ConversationMessage[];
|
|
52
|
+
listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]>;
|
|
89
53
|
/**
|
|
90
|
-
*
|
|
54
|
+
* Discover candidate session files for {@link listSessions}.
|
|
55
|
+
*
|
|
56
|
+
* Always walks every subdirectory of `projectsDir`. We can't use the
|
|
57
|
+
* encoded-dir shortcut for the cwd-scoped path because Claude Code
|
|
58
|
+
* indexes session files by where the *process was launched*, not by
|
|
59
|
+
* the recorded `cwd` field inside the session — these diverge in
|
|
60
|
+
* worktrees and similar setups. The cwd filter is applied later
|
|
61
|
+
* against `session.lastCwd` so callers see exactly the sessions whose
|
|
62
|
+
* recorded cwd matches.
|
|
91
63
|
*/
|
|
92
|
-
private
|
|
93
|
-
private truncateToolResult;
|
|
64
|
+
private discoverSessionFiles;
|
|
94
65
|
}
|
|
95
66
|
//# 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,
|
|
1
|
+
{"version":3,"file":"ClaudeCodeAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ClaudeCodeAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,YAAY,EACZ,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACtB,MAAM,gBAAgB,CAAC;AAkCxB;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IAClD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAElC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAsB;;IASpC,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAI5C,OAAO,CAAC,kBAAkB;IAMpB,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAwD1C;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IA6BxB;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IAkD1B;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,mBAAmB;IAa3B,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE;IAI1F,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAkCzE;;;;;;;;;;OAUG;IACH,OAAO,CAAC,oBAAoB;CAqB/B"}
|