@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.
Files changed (63) hide show
  1. package/dist/AgentManager.d.ts +21 -1
  2. package/dist/AgentManager.d.ts.map +1 -1
  3. package/dist/AgentManager.js +47 -0
  4. package/dist/AgentManager.js.map +1 -1
  5. package/dist/adapters/AgentAdapter.d.ts +66 -0
  6. package/dist/adapters/AgentAdapter.d.ts.map +1 -1
  7. package/dist/adapters/ClaudeCodeAdapter.d.ts +14 -43
  8. package/dist/adapters/ClaudeCodeAdapter.d.ts.map +1 -1
  9. package/dist/adapters/ClaudeCodeAdapter.js +60 -275
  10. package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
  11. package/dist/adapters/CodexAdapter.d.ts +14 -1
  12. package/dist/adapters/CodexAdapter.d.ts.map +1 -1
  13. package/dist/adapters/CodexAdapter.js +105 -6
  14. package/dist/adapters/CodexAdapter.js.map +1 -1
  15. package/dist/adapters/GeminiCliAdapter.d.ts +9 -1
  16. package/dist/adapters/GeminiCliAdapter.d.ts.map +1 -1
  17. package/dist/adapters/GeminiCliAdapter.js +77 -6
  18. package/dist/adapters/GeminiCliAdapter.js.map +1 -1
  19. package/dist/index.d.ts +1 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/terminal/TerminalFocusManager.d.ts.map +1 -1
  23. package/dist/terminal/TerminalFocusManager.js +36 -27
  24. package/dist/terminal/TerminalFocusManager.js.map +1 -1
  25. package/dist/terminal/TtyWriter.d.ts.map +1 -1
  26. package/dist/terminal/TtyWriter.js +3 -12
  27. package/dist/terminal/TtyWriter.js.map +1 -1
  28. package/dist/utils/ClaudeSessionParser.d.ts +114 -0
  29. package/dist/utils/ClaudeSessionParser.d.ts.map +1 -0
  30. package/dist/utils/ClaudeSessionParser.js +377 -0
  31. package/dist/utils/ClaudeSessionParser.js.map +1 -0
  32. package/dist/utils/applescript.d.ts +6 -0
  33. package/dist/utils/applescript.d.ts.map +1 -0
  34. package/dist/utils/applescript.js +14 -0
  35. package/dist/utils/applescript.js.map +1 -0
  36. package/dist/utils/process.d.ts +3 -4
  37. package/dist/utils/process.d.ts.map +1 -1
  38. package/dist/utils/process.js +11 -15
  39. package/dist/utils/process.js.map +1 -1
  40. package/dist/utils/session.d.ts +34 -5
  41. package/dist/utils/session.d.ts.map +1 -1
  42. package/dist/utils/session.js +90 -44
  43. package/dist/utils/session.js.map +1 -1
  44. package/package.json +1 -1
  45. package/src/AgentManager.ts +66 -4
  46. package/src/__tests__/AgentManager.test.ts +134 -2
  47. package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +188 -32
  48. package/src/__tests__/adapters/CodexAdapter.test.ts +123 -3
  49. package/src/__tests__/adapters/GeminiCliAdapter.test.ts +133 -0
  50. package/src/__tests__/utils/ClaudeSessionParser.test.ts +195 -0
  51. package/src/__tests__/utils/process.test.ts +27 -27
  52. package/src/__tests__/utils/session.test.ts +79 -43
  53. package/src/adapters/AgentAdapter.ts +76 -0
  54. package/src/adapters/ClaudeCodeAdapter.ts +82 -356
  55. package/src/adapters/CodexAdapter.ts +126 -8
  56. package/src/adapters/GeminiCliAdapter.ts +102 -7
  57. package/src/index.ts +9 -1
  58. package/src/terminal/TerminalFocusManager.ts +35 -26
  59. package/src/terminal/TtyWriter.ts +1 -11
  60. package/src/utils/ClaudeSessionParser.ts +437 -0
  61. package/src/utils/applescript.ts +10 -0
  62. package/src/utils/process.ts +21 -24
  63. package/src/utils/session.ts +86 -45
@@ -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,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGvE;;;;;;;;;;;;;;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,OAAO;IAIjC;;;;;;;;;;;;;;;;OAgBG;IACG,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAsCxC;;;;;;;;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"}
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"}
@@ -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
  *
@@ -1 +1 @@
1
- {"version":3,"file":"AgentManager.js","sourceRoot":"","sources":["../src/AgentManager.ts"],"names":[],"mappings":"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"}
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;CACpG"}
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 (>60 s from proc.startTime), or missing JSONL.
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
- * Extract displayable content from a message content field.
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 extractConversationContent;
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,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"}
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"}