@ai-devkit/agent-manager 0.29.0 → 0.30.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 (198) hide show
  1. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js +1 -342
  2. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +1 -1
  3. package/dist/__tests__/database/DurableAgentsDatabase.test.js +31 -3
  4. package/dist/__tests__/database/DurableAgentsDatabase.test.js.map +1 -1
  5. package/dist/__tests__/durable/CodexCliProbe.test.js +129 -0
  6. package/dist/__tests__/durable/CodexCliProbe.test.js.map +1 -0
  7. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js +84 -0
  8. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +1 -0
  9. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js +126 -0
  10. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +1 -0
  11. package/dist/__tests__/durable/CodexPrintAgentService.test.js +271 -0
  12. package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +1 -0
  13. package/dist/__tests__/durable/CodexPrintRunner.test.js +393 -0
  14. package/dist/__tests__/durable/CodexPrintRunner.test.js.map +1 -0
  15. package/dist/__tests__/print/ClaudeCliProbe.test.js +3 -7
  16. package/dist/__tests__/print/ClaudeCliProbe.test.js.map +1 -1
  17. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js +25 -28
  18. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +1 -1
  19. package/dist/__tests__/print/ClaudePrintAgentService.test.js +65 -0
  20. package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +1 -1
  21. package/dist/__tests__/print/ClaudePrintRunner.test.js +4 -10
  22. package/dist/__tests__/print/ClaudePrintRunner.test.js.map +1 -1
  23. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js +79 -0
  24. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +1 -0
  25. package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js +436 -0
  26. package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js.map +1 -0
  27. package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js +76 -0
  28. package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js.map +1 -0
  29. package/dist/__tests__/providers/pi/durable/PiDurableAgentRepository.test.js +43 -0
  30. package/dist/__tests__/providers/pi/durable/PiDurableAgentRepository.test.js.map +1 -0
  31. package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js +202 -0
  32. package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js.map +1 -0
  33. package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js +119 -0
  34. package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js.map +1 -0
  35. package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js +386 -0
  36. package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js.map +1 -0
  37. package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js +34 -0
  38. package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js.map +1 -0
  39. package/dist/__tests__/utils/ClaudeSessionParser.test.js +2 -2
  40. package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +1 -1
  41. package/dist/adapters/index.d.ts +1 -1
  42. package/dist/adapters/index.d.ts.map +1 -1
  43. package/dist/adapters/index.js +1 -1
  44. package/dist/adapters/index.js.map +1 -1
  45. package/dist/database/migrations/004_codex_durable_sessions.sql +1 -0
  46. package/dist/durable/DurableAgent.d.ts +23 -3
  47. package/dist/durable/DurableAgent.d.ts.map +1 -1
  48. package/dist/durable/DurableAgent.js +12 -0
  49. package/dist/durable/DurableAgent.js.map +1 -1
  50. package/dist/durable/DurableAgentRepository.d.ts +6 -7
  51. package/dist/durable/DurableAgentRepository.d.ts.map +1 -1
  52. package/dist/durable/DurableAgentRepository.js +73 -42
  53. package/dist/durable/DurableAgentRepository.js.map +1 -1
  54. package/dist/durable/process.d.ts +8 -0
  55. package/dist/durable/process.d.ts.map +1 -0
  56. package/dist/durable/process.js +40 -0
  57. package/dist/durable/process.js.map +1 -0
  58. package/dist/durable/run.d.ts +32 -0
  59. package/dist/durable/run.d.ts.map +1 -0
  60. package/dist/durable/run.js +46 -0
  61. package/dist/durable/run.js.map +1 -0
  62. package/dist/durable/utils.d.ts +19 -0
  63. package/dist/durable/utils.d.ts.map +1 -0
  64. package/dist/durable/utils.js +52 -0
  65. package/dist/durable/utils.js.map +1 -0
  66. package/dist/index.d.ts +17 -13
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +9 -8
  69. package/dist/index.js.map +1 -1
  70. package/dist/providers/claude/ClaudeAgentMapper.d.ts +21 -0
  71. package/dist/providers/claude/ClaudeAgentMapper.d.ts.map +1 -0
  72. package/dist/providers/claude/ClaudeAgentMapper.js +42 -0
  73. package/dist/providers/claude/ClaudeAgentMapper.js.map +1 -0
  74. package/dist/providers/claude/ClaudeCodeAdapter.d.ts +29 -0
  75. package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +1 -0
  76. package/dist/providers/claude/ClaudeCodeAdapter.js +129 -0
  77. package/dist/providers/claude/ClaudeCodeAdapter.js.map +1 -0
  78. package/dist/{adapters/ClaudeCodeAdapter.d.ts → providers/claude/ClaudeSessionLocator.d.ts} +68 -52
  79. package/dist/providers/claude/ClaudeSessionLocator.d.ts.map +1 -0
  80. package/dist/{adapters/ClaudeCodeAdapter.js → providers/claude/ClaudeSessionLocator.js} +71 -189
  81. package/dist/providers/claude/ClaudeSessionLocator.js.map +1 -0
  82. package/dist/{utils → providers/claude}/ClaudeSessionParser.d.ts +2 -2
  83. package/dist/providers/claude/ClaudeSessionParser.d.ts.map +1 -0
  84. package/dist/{utils → providers/claude}/ClaudeSessionParser.js +1 -1
  85. package/dist/providers/claude/ClaudeSessionParser.js.map +1 -0
  86. package/dist/providers/claude/durable/ClaudeCliProbe.d.ts.map +1 -0
  87. package/dist/{durable → providers/claude/durable}/ClaudeCliProbe.js +4 -9
  88. package/dist/providers/claude/durable/ClaudeCliProbe.js.map +1 -0
  89. package/dist/{durable → providers/claude/durable}/ClaudePrintAgentService.d.ts +4 -9
  90. package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts.map +1 -0
  91. package/dist/providers/claude/durable/ClaudePrintAgentService.js +45 -0
  92. package/dist/providers/claude/durable/ClaudePrintAgentService.js.map +1 -0
  93. package/dist/{durable → providers/claude/durable}/ClaudePrintRunner.d.ts +3 -3
  94. package/dist/providers/claude/durable/ClaudePrintRunner.d.ts.map +1 -0
  95. package/dist/providers/claude/durable/ClaudePrintRunner.js +75 -0
  96. package/dist/providers/claude/durable/ClaudePrintRunner.js.map +1 -0
  97. package/dist/providers/claude/durable/ClaudeStreamParser.d.ts +17 -0
  98. package/dist/providers/claude/durable/ClaudeStreamParser.d.ts.map +1 -0
  99. package/dist/providers/claude/durable/ClaudeStreamParser.js +69 -0
  100. package/dist/providers/claude/durable/ClaudeStreamParser.js.map +1 -0
  101. package/dist/providers/codex/durable/CodexCliProbe.d.ts +20 -0
  102. package/dist/providers/codex/durable/CodexCliProbe.d.ts.map +1 -0
  103. package/dist/providers/codex/durable/CodexCliProbe.js +61 -0
  104. package/dist/providers/codex/durable/CodexCliProbe.js.map +1 -0
  105. package/dist/providers/codex/durable/CodexPrintAgentService.d.ts +40 -0
  106. package/dist/providers/codex/durable/CodexPrintAgentService.d.ts.map +1 -0
  107. package/dist/providers/codex/durable/CodexPrintAgentService.js +50 -0
  108. package/dist/providers/codex/durable/CodexPrintAgentService.js.map +1 -0
  109. package/dist/providers/codex/durable/CodexPrintRunner.d.ts +34 -0
  110. package/dist/providers/codex/durable/CodexPrintRunner.d.ts.map +1 -0
  111. package/dist/providers/codex/durable/CodexPrintRunner.js +78 -0
  112. package/dist/providers/codex/durable/CodexPrintRunner.js.map +1 -0
  113. package/dist/providers/codex/durable/CodexStreamParser.d.ts +21 -0
  114. package/dist/providers/codex/durable/CodexStreamParser.d.ts.map +1 -0
  115. package/dist/providers/codex/durable/CodexStreamParser.js +86 -0
  116. package/dist/providers/codex/durable/CodexStreamParser.js.map +1 -0
  117. package/dist/providers/pi/durable/PiCliProbe.d.ts +20 -0
  118. package/dist/providers/pi/durable/PiCliProbe.d.ts.map +1 -0
  119. package/dist/providers/pi/durable/PiCliProbe.js +51 -0
  120. package/dist/providers/pi/durable/PiCliProbe.js.map +1 -0
  121. package/dist/providers/pi/durable/PiPrintAgentService.d.ts +39 -0
  122. package/dist/providers/pi/durable/PiPrintAgentService.d.ts.map +1 -0
  123. package/dist/providers/pi/durable/PiPrintAgentService.js +47 -0
  124. package/dist/providers/pi/durable/PiPrintAgentService.js.map +1 -0
  125. package/dist/providers/pi/durable/PiPrintProtocol.d.ts +4 -0
  126. package/dist/providers/pi/durable/PiPrintProtocol.d.ts.map +1 -0
  127. package/dist/providers/pi/durable/PiPrintProtocol.js +44 -0
  128. package/dist/providers/pi/durable/PiPrintProtocol.js.map +1 -0
  129. package/dist/providers/pi/durable/PiPrintRunner.d.ts +32 -0
  130. package/dist/providers/pi/durable/PiPrintRunner.d.ts.map +1 -0
  131. package/dist/providers/pi/durable/PiPrintRunner.js +61 -0
  132. package/dist/providers/pi/durable/PiPrintRunner.js.map +1 -0
  133. package/dist/providers/pi/durable/PiStreamParser.d.ts +21 -0
  134. package/dist/providers/pi/durable/PiStreamParser.d.ts.map +1 -0
  135. package/dist/providers/pi/durable/PiStreamParser.js +71 -0
  136. package/dist/providers/pi/durable/PiStreamParser.js.map +1 -0
  137. package/package.json +1 -1
  138. package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +1 -307
  139. package/src/__tests__/database/DurableAgentsDatabase.test.ts +28 -3
  140. package/src/__tests__/durable/CodexCliProbe.test.ts +63 -0
  141. package/src/__tests__/durable/CodexDurableAgentRepository.test.ts +54 -0
  142. package/src/__tests__/durable/CodexPrintAgent.integration.test.ts +79 -0
  143. package/src/__tests__/durable/CodexPrintAgentService.test.ts +139 -0
  144. package/src/__tests__/durable/CodexPrintRunner.test.ts +189 -0
  145. package/src/__tests__/fixtures/fake-codex.cjs +45 -0
  146. package/src/__tests__/print/ClaudeCliProbe.test.ts +3 -7
  147. package/src/__tests__/print/ClaudePrintAgent.integration.test.ts +11 -21
  148. package/src/__tests__/print/ClaudePrintAgentService.test.ts +33 -1
  149. package/src/__tests__/print/ClaudePrintRunner.test.ts +4 -10
  150. package/src/__tests__/providers/claude/ClaudeAgentMapper.test.ts +84 -0
  151. package/src/__tests__/providers/claude/ClaudeSessionLocator.test.ts +411 -0
  152. package/src/__tests__/providers/pi/durable/PiCliProbe.test.ts +38 -0
  153. package/src/__tests__/providers/pi/durable/PiDurableAgentRepository.test.ts +32 -0
  154. package/src/__tests__/providers/pi/durable/PiPrintAgentService.test.ts +69 -0
  155. package/src/__tests__/providers/pi/durable/PiPrintProtocol.test.ts +33 -0
  156. package/src/__tests__/providers/pi/durable/PiPrintRunner.test.ts +107 -0
  157. package/src/__tests__/providers/pi/durable/PiStreamParser.test.ts +24 -0
  158. package/src/__tests__/utils/ClaudeSessionParser.test.ts +2 -2
  159. package/src/adapters/index.ts +1 -1
  160. package/src/database/migrations/004_codex_durable_sessions.sql +1 -0
  161. package/src/durable/DurableAgent.ts +51 -3
  162. package/src/durable/DurableAgentRepository.ts +60 -31
  163. package/src/durable/process.ts +28 -0
  164. package/src/durable/run.ts +74 -0
  165. package/src/durable/utils.ts +61 -0
  166. package/src/index.ts +31 -15
  167. package/src/providers/claude/ClaudeAgentMapper.ts +62 -0
  168. package/src/providers/claude/ClaudeCodeAdapter.ts +160 -0
  169. package/src/{adapters/ClaudeCodeAdapter.ts → providers/claude/ClaudeSessionLocator.ts} +97 -239
  170. package/src/{utils → providers/claude}/ClaudeSessionParser.ts +2 -2
  171. package/src/{durable → providers/claude/durable}/ClaudeCliProbe.ts +4 -10
  172. package/src/providers/claude/durable/ClaudePrintAgentService.ts +66 -0
  173. package/src/providers/claude/durable/ClaudePrintRunner.ts +92 -0
  174. package/src/providers/claude/durable/ClaudeStreamParser.ts +79 -0
  175. package/src/providers/codex/durable/CodexCliProbe.ts +60 -0
  176. package/src/providers/codex/durable/CodexPrintAgentService.ts +65 -0
  177. package/src/providers/codex/durable/CodexPrintRunner.ts +94 -0
  178. package/src/providers/codex/durable/CodexStreamParser.ts +104 -0
  179. package/src/providers/pi/durable/PiCliProbe.ts +48 -0
  180. package/src/providers/pi/durable/PiPrintAgentService.ts +69 -0
  181. package/src/providers/pi/durable/PiPrintProtocol.ts +39 -0
  182. package/src/providers/pi/durable/PiPrintRunner.ts +88 -0
  183. package/src/providers/pi/durable/PiStreamParser.ts +84 -0
  184. package/dist/adapters/ClaudeCodeAdapter.d.ts.map +0 -1
  185. package/dist/adapters/ClaudeCodeAdapter.js.map +0 -1
  186. package/dist/durable/ClaudeCliProbe.d.ts.map +0 -1
  187. package/dist/durable/ClaudeCliProbe.js.map +0 -1
  188. package/dist/durable/ClaudePrintAgentService.d.ts.map +0 -1
  189. package/dist/durable/ClaudePrintAgentService.js +0 -66
  190. package/dist/durable/ClaudePrintAgentService.js.map +0 -1
  191. package/dist/durable/ClaudePrintRunner.d.ts.map +0 -1
  192. package/dist/durable/ClaudePrintRunner.js +0 -128
  193. package/dist/durable/ClaudePrintRunner.js.map +0 -1
  194. package/dist/utils/ClaudeSessionParser.d.ts.map +0 -1
  195. package/dist/utils/ClaudeSessionParser.js.map +0 -1
  196. package/src/durable/ClaudePrintAgentService.ts +0 -94
  197. package/src/durable/ClaudePrintRunner.ts +0 -139
  198. /package/dist/{durable → providers/claude/durable}/ClaudeCliProbe.d.ts +0 -0
@@ -0,0 +1,52 @@
1
+ export function waitForChildClose(child) {
2
+ return new Promise((resolve, reject)=>{
3
+ child.once('error', reject);
4
+ child.once('close', (code, signal)=>resolve({
5
+ code,
6
+ signal
7
+ }));
8
+ });
9
+ }
10
+ export function sanitizeText(value, max, options = {}) {
11
+ return Array.from(value, (character)=>{
12
+ const code = character.charCodeAt(0);
13
+ if (options.preserveFormatting && (code === 9 || code === 10 || code === 13)) return character;
14
+ return code <= 31 || code === 127 ? ' ' : character;
15
+ }).join('').trim().slice(0, max);
16
+ }
17
+ const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
18
+ export function isUuid(value) {
19
+ return UUID_PATTERN.test(value);
20
+ }
21
+ export class LineBuffer {
22
+ maxLineBytes;
23
+ createOversizedLineError;
24
+ buffer = Buffer.alloc(0);
25
+ constructor(maxLineBytes, createOversizedLineError){
26
+ this.maxLineBytes = maxLineBytes;
27
+ this.createOversizedLineError = createOversizedLineError;
28
+ }
29
+ accept(chunk) {
30
+ this.buffer = Buffer.concat([
31
+ this.buffer,
32
+ Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)
33
+ ]);
34
+ if (this.buffer.length > this.maxLineBytes && this.buffer.indexOf(0x0a) < 0) {
35
+ throw this.createOversizedLineError();
36
+ }
37
+ const lines = [];
38
+ let newline;
39
+ while((newline = this.buffer.indexOf(0x0a)) >= 0){
40
+ const line = this.buffer.subarray(0, newline);
41
+ this.buffer = this.buffer.subarray(newline + 1);
42
+ if (line.length > this.maxLineBytes) throw this.createOversizedLineError();
43
+ lines.push(line);
44
+ }
45
+ return lines;
46
+ }
47
+ assertComplete(createIncompleteLineError) {
48
+ if (this.buffer.length > 0) throw createIncompleteLineError();
49
+ }
50
+ }
51
+
52
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/durable/utils.ts"],"sourcesContent":["import type { ChildProcessWithoutNullStreams } from 'child_process';\n\nexport interface ChildCloseResult {\n code: number | null;\n signal: NodeJS.Signals | null;\n}\n\nexport function waitForChildClose(child: ChildProcessWithoutNullStreams): Promise<ChildCloseResult> {\n return new Promise((resolve, reject) => {\n child.once('error', reject);\n child.once('close', (code, signal) => resolve({ code, signal }));\n });\n}\n\nexport function sanitizeText(\n value: string,\n max: number,\n options: { preserveFormatting?: boolean } = {},\n): string {\n return Array.from(value, (character) => {\n const code = character.charCodeAt(0);\n if (options.preserveFormatting && (code === 9 || code === 10 || code === 13)) return character;\n return code <= 31 || code === 127 ? ' ' : character;\n }).join('').trim().slice(0, max);\n}\n\nconst UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\nexport function isUuid(value: string): boolean {\n return UUID_PATTERN.test(value);\n}\n\nexport class LineBuffer {\n private buffer = Buffer.alloc(0);\n\n constructor(\n private readonly maxLineBytes: number,\n private readonly createOversizedLineError: () => Error,\n ) {}\n\n accept(chunk: Buffer | string): Buffer[] {\n this.buffer = Buffer.concat([this.buffer, Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)]);\n if (this.buffer.length > this.maxLineBytes && this.buffer.indexOf(0x0a) < 0) {\n throw this.createOversizedLineError();\n }\n\n const lines: Buffer[] = [];\n let newline: number;\n while ((newline = this.buffer.indexOf(0x0a)) >= 0) {\n const line = this.buffer.subarray(0, newline);\n this.buffer = this.buffer.subarray(newline + 1);\n if (line.length > this.maxLineBytes) throw this.createOversizedLineError();\n lines.push(line);\n }\n return lines;\n }\n\n assertComplete(createIncompleteLineError: () => Error): void {\n if (this.buffer.length > 0) throw createIncompleteLineError();\n }\n}\n"],"names":["waitForChildClose","child","Promise","resolve","reject","once","code","signal","sanitizeText","value","max","options","Array","from","character","charCodeAt","preserveFormatting","join","trim","slice","UUID_PATTERN","isUuid","test","LineBuffer","buffer","Buffer","alloc","maxLineBytes","createOversizedLineError","accept","chunk","concat","isBuffer","length","indexOf","lines","newline","line","subarray","push","assertComplete","createIncompleteLineError"],"mappings":"AAOA,OAAO,SAASA,kBAAkBC,KAAqC;IACnE,OAAO,IAAIC,QAAQ,CAACC,SAASC;QACzBH,MAAMI,IAAI,CAAC,SAASD;QACpBH,MAAMI,IAAI,CAAC,SAAS,CAACC,MAAMC,SAAWJ,QAAQ;gBAAEG;gBAAMC;YAAO;IACjE;AACJ;AAEA,OAAO,SAASC,aACZC,KAAa,EACbC,GAAW,EACXC,UAA4C,CAAC,CAAC;IAE9C,OAAOC,MAAMC,IAAI,CAACJ,OAAO,CAACK;QACtB,MAAMR,OAAOQ,UAAUC,UAAU,CAAC;QAClC,IAAIJ,QAAQK,kBAAkB,IAAKV,CAAAA,SAAS,KAAKA,SAAS,MAAMA,SAAS,EAAC,GAAI,OAAOQ;QACrF,OAAOR,QAAQ,MAAMA,SAAS,MAAM,MAAMQ;IAC9C,GAAGG,IAAI,CAAC,IAAIC,IAAI,GAAGC,KAAK,CAAC,GAAGT;AAChC;AAEA,MAAMU,eAAe;AAErB,OAAO,SAASC,OAAOZ,KAAa;IAChC,OAAOW,aAAaE,IAAI,CAACb;AAC7B;AAEA,OAAO,MAAMc;;;IACDC,SAASC,OAAOC,KAAK,CAAC,GAAG;IAEjC,YACI,AAAiBC,YAAoB,EACrC,AAAiBC,wBAAqC,CACxD;aAFmBD,eAAAA;aACAC,2BAAAA;IAClB;IAEHC,OAAOC,KAAsB,EAAY;QACrC,IAAI,CAACN,MAAM,GAAGC,OAAOM,MAAM,CAAC;YAAC,IAAI,CAACP,MAAM;YAAEC,OAAOO,QAAQ,CAACF,SAASA,QAAQL,OAAOZ,IAAI,CAACiB;SAAO;QAC9F,IAAI,IAAI,CAACN,MAAM,CAACS,MAAM,GAAG,IAAI,CAACN,YAAY,IAAI,IAAI,CAACH,MAAM,CAACU,OAAO,CAAC,QAAQ,GAAG;YACzE,MAAM,IAAI,CAACN,wBAAwB;QACvC;QAEA,MAAMO,QAAkB,EAAE;QAC1B,IAAIC;QACJ,MAAO,AAACA,CAAAA,UAAU,IAAI,CAACZ,MAAM,CAACU,OAAO,CAAC,KAAI,KAAM,EAAG;YAC/C,MAAMG,OAAO,IAAI,CAACb,MAAM,CAACc,QAAQ,CAAC,GAAGF;YACrC,IAAI,CAACZ,MAAM,GAAG,IAAI,CAACA,MAAM,CAACc,QAAQ,CAACF,UAAU;YAC7C,IAAIC,KAAKJ,MAAM,GAAG,IAAI,CAACN,YAAY,EAAE,MAAM,IAAI,CAACC,wBAAwB;YACxEO,MAAMI,IAAI,CAACF;QACf;QACA,OAAOF;IACX;IAEAK,eAAeC,yBAAsC,EAAQ;QACzD,IAAI,IAAI,CAACjB,MAAM,CAACS,MAAM,GAAG,GAAG,MAAMQ;IACtC;AACJ"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { AgentManager, AgentNotRunningError } from './AgentManager.js';
2
2
  export { getCodexCapacityReport } from './capacity/index.js';
3
3
  export type { CapacityProbeOptions, CapacityReport, CapacityWindow, } from './capacity/index.js';
4
- export { ClaudeCodeAdapter } from './adapters/ClaudeCodeAdapter.js';
4
+ export { ClaudeCodeAdapter } from './providers/claude/ClaudeCodeAdapter.js';
5
5
  export { CodexAdapter } from './adapters/CodexAdapter.js';
6
6
  export { CopilotAdapter } from './adapters/CopilotAdapter.js';
7
7
  export { GeminiCliAdapter } from './adapters/GeminiCliAdapter.js';
@@ -13,9 +13,6 @@ export type { AgentAdapter, AgentType, AgentInfo, ProcessInfo, ConversationMessa
13
13
  export { TerminalFocusManager, TerminalType } from './terminal/TerminalFocusManager.js';
14
14
  export type { TerminalLocation } from './terminal/TerminalFocusManager.js';
15
15
  export { TtyWriter } from './terminal/TtyWriter.js';
16
- export { getProcessTty } from './utils/process.js';
17
- export { captureProcessSnapshot, executableBasename, filterByProcessNames } from './utils/process.js';
18
- export type { AgentSortKey } from './utils/sortAgents.js';
19
16
  export type { ListAgentsOptions } from './AgentManager.js';
20
17
  export { AgentRegistry, RenameNotFoundError, RenameConflictError } from './utils/AgentRegistry.js';
21
18
  export type { AgentRegistryOptions, RegistryEntry } from './utils/AgentRegistry.js';
@@ -24,15 +21,22 @@ export { AGENTS } from './utils/agents.js';
24
21
  export type { AgentConfig, StartableAgentType } from './utils/agents.js';
25
22
  export type { AgentRequest } from './utils/agent-requests.js';
26
23
  export { getAgentRequestPath, readLatestAgentRequest, writeAgentRequest } from './utils/agent-requests.js';
27
- export { AGENT_MODES, DurableAgentError, DurableAgentBusyError, DurableAgentNotFoundError, DurableAgentRepositoryError, DurableAgentNameConflictError, ClaudePrintError, } from './durable/DurableAgent.js';
28
- export type { DurableAgent, DurableAgentState, DurableSessionHealth, DurableRunStatus, DurableActiveRun, DurableLastResult, ProcessIdentity, } from './durable/DurableAgent.js';
24
+ export { AGENT_MODES, DurableAgentError, DurableAgentBusyError, DurableAgentNotFoundError, DurableAgentRepositoryError, DurableAgentNameConflictError, ClaudePrintError, CodexPrintError, PiPrintError, } from './durable/DurableAgent.js';
25
+ export type { DurableAgent, DurableAgentBase, ClaudeDurableAgent, CodexDurableAgent, PiDurableAgent, DurableProvider, CodexPrintErrorCode, DurableAgentState, DurableSessionHealth, DurableRunStatus, DurableActiveRun, DurableLastResult, PiPrintErrorCode, ProcessIdentity, } from './durable/DurableAgent.js';
29
26
  export { DurableAgentRepository } from './durable/DurableAgentRepository.js';
30
- export { LocalProcessInspector } from './durable/DurableAgentRepository.js';
31
27
  export type { CreateDurableAgentInput, DurableAgentRepositoryOptions, ProcessInspector, DurableRunCompletion, } from './durable/DurableAgentRepository.js';
32
- export { ClaudeCliProbe } from './durable/ClaudeCliProbe.js';
33
- export type { ClaudeCliProbeOptions } from './durable/ClaudeCliProbe.js';
34
- export { ClaudePrintRunner } from './durable/ClaudePrintRunner.js';
35
- export type { ClaudePrintRunnerOptions, ClaudePrintRunRequest, ClaudePrintRunResult, } from './durable/ClaudePrintRunner.js';
36
- export { ClaudePrintAgentService } from './durable/ClaudePrintAgentService.js';
37
- export type { ClaudePrintAgentServiceOptions, ClaudePrintSendResult, } from './durable/ClaudePrintAgentService.js';
28
+ export { ClaudePrintAgentService } from './providers/claude/durable/ClaudePrintAgentService.js';
29
+ export type { ClaudePrintAgentServiceOptions, ClaudePrintSendResult, } from './providers/claude/durable/ClaudePrintAgentService.js';
30
+ export { CodexCliProbe } from './providers/codex/durable/CodexCliProbe.js';
31
+ export type { CodexCliProbeOptions } from './providers/codex/durable/CodexCliProbe.js';
32
+ export { CodexPrintRunner } from './providers/codex/durable/CodexPrintRunner.js';
33
+ export type { CodexPrintRunnerOptions, CodexPrintRunRequest, CodexPrintRunResult, } from './providers/codex/durable/CodexPrintRunner.js';
34
+ export { CodexPrintAgentService } from './providers/codex/durable/CodexPrintAgentService.js';
35
+ export type { CodexPrintAgentServiceOptions, CodexPrintSendResult, } from './providers/codex/durable/CodexPrintAgentService.js';
36
+ export { PiCliProbe } from './providers/pi/durable/PiCliProbe.js';
37
+ export type { PiCliProbeOptions } from './providers/pi/durable/PiCliProbe.js';
38
+ export { PiPrintRunner } from './providers/pi/durable/PiPrintRunner.js';
39
+ export type { PiPrintRunnerOptions, PiPrintRunRequest, PiPrintRunResult } from './providers/pi/durable/PiPrintRunner.js';
40
+ export { PiPrintAgentService } from './providers/pi/durable/PiPrintAgentService.js';
41
+ export type { PiPrintAgentServiceOptions, PiPrintSendResult } from './providers/pi/durable/PiPrintAgentService.js';
38
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export { AgentManager, AgentNotRunningError } from './AgentManager.js';
2
2
  export { getCodexCapacityReport } from './capacity/index.js';
3
- export { ClaudeCodeAdapter } from './adapters/ClaudeCodeAdapter.js';
3
+ export { ClaudeCodeAdapter } from './providers/claude/ClaudeCodeAdapter.js';
4
4
  export { CodexAdapter } from './adapters/CodexAdapter.js';
5
5
  export { CopilotAdapter } from './adapters/CopilotAdapter.js';
6
6
  export { GeminiCliAdapter } from './adapters/GeminiCliAdapter.js';
@@ -10,17 +10,18 @@ export { PiAdapter } from './adapters/PiAdapter.js';
10
10
  export { AgentStatus } from './adapters/AgentAdapter.js';
11
11
  export { TerminalFocusManager, TerminalType } from './terminal/TerminalFocusManager.js';
12
12
  export { TtyWriter } from './terminal/TtyWriter.js';
13
- export { getProcessTty } from './utils/process.js';
14
- export { captureProcessSnapshot, executableBasename, filterByProcessNames } from './utils/process.js';
15
13
  export { AgentRegistry, RenameNotFoundError, RenameConflictError } from './utils/AgentRegistry.js';
16
14
  export { TmuxManager } from './terminal/TmuxManager.js';
17
15
  export { AGENTS } from './utils/agents.js';
18
16
  export { getAgentRequestPath, readLatestAgentRequest, writeAgentRequest } from './utils/agent-requests.js';
19
- export { AGENT_MODES, DurableAgentError, DurableAgentBusyError, DurableAgentNotFoundError, DurableAgentRepositoryError, DurableAgentNameConflictError, ClaudePrintError } from './durable/DurableAgent.js';
17
+ export { AGENT_MODES, DurableAgentError, DurableAgentBusyError, DurableAgentNotFoundError, DurableAgentRepositoryError, DurableAgentNameConflictError, ClaudePrintError, CodexPrintError, PiPrintError } from './durable/DurableAgent.js';
20
18
  export { DurableAgentRepository } from './durable/DurableAgentRepository.js';
21
- export { LocalProcessInspector } from './durable/DurableAgentRepository.js';
22
- export { ClaudeCliProbe } from './durable/ClaudeCliProbe.js';
23
- export { ClaudePrintRunner } from './durable/ClaudePrintRunner.js';
24
- export { ClaudePrintAgentService } from './durable/ClaudePrintAgentService.js';
19
+ export { ClaudePrintAgentService } from './providers/claude/durable/ClaudePrintAgentService.js';
20
+ export { CodexCliProbe } from './providers/codex/durable/CodexCliProbe.js';
21
+ export { CodexPrintRunner } from './providers/codex/durable/CodexPrintRunner.js';
22
+ export { CodexPrintAgentService } from './providers/codex/durable/CodexPrintAgentService.js';
23
+ export { PiCliProbe } from './providers/pi/durable/PiCliProbe.js';
24
+ export { PiPrintRunner } from './providers/pi/durable/PiPrintRunner.js';
25
+ export { PiPrintAgentService } from './providers/pi/durable/PiPrintAgentService.js';
25
26
 
26
27
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { AgentManager, AgentNotRunningError } from './AgentManager.js';\nexport { getCodexCapacityReport } from './capacity/index.js';\nexport type {\n CapacityProbeOptions,\n CapacityReport,\n CapacityWindow,\n} from './capacity/index.js';\n\nexport { ClaudeCodeAdapter } from './adapters/ClaudeCodeAdapter.js';\nexport { CodexAdapter } from './adapters/CodexAdapter.js';\nexport { CopilotAdapter } from './adapters/CopilotAdapter.js';\nexport { GeminiCliAdapter } from './adapters/GeminiCliAdapter.js';\nexport { GrokCliAdapter } from './adapters/GrokCliAdapter.js';\nexport { OpenCodeAdapter } from './adapters/OpenCodeAdapter.js';\nexport { PiAdapter } from './adapters/PiAdapter.js';\nexport { AgentStatus } from './adapters/AgentAdapter.js';\nexport type {\n AgentAdapter,\n AgentType,\n AgentInfo,\n ProcessInfo,\n ConversationMessage,\n SessionSummary,\n ListSessionsOptions,\n AgentDetectionContext,\n} from './adapters/AgentAdapter.js';\n\nexport { TerminalFocusManager, TerminalType } from './terminal/TerminalFocusManager.js';\nexport type { TerminalLocation } from './terminal/TerminalFocusManager.js';\nexport { TtyWriter } from './terminal/TtyWriter.js';\n\nexport { getProcessTty } from './utils/process.js';\nexport { captureProcessSnapshot, executableBasename, filterByProcessNames } from './utils/process.js';\nexport type { AgentSortKey } from './utils/sortAgents.js';\nexport type { ListAgentsOptions } from './AgentManager.js';\n\nexport { AgentRegistry, RenameNotFoundError, RenameConflictError } from './utils/AgentRegistry.js';\nexport type { AgentRegistryOptions, RegistryEntry } from './utils/AgentRegistry.js';\nexport { TmuxManager } from './terminal/TmuxManager.js';\nexport { AGENTS } from './utils/agents.js';\nexport type { AgentConfig, StartableAgentType } from './utils/agents.js';\n\nexport type { AgentRequest } from './utils/agent-requests.js';\nexport { getAgentRequestPath, readLatestAgentRequest, writeAgentRequest } from './utils/agent-requests.js';\n\nexport {\n AGENT_MODES,\n DurableAgentError,\n DurableAgentBusyError,\n DurableAgentNotFoundError,\n DurableAgentRepositoryError,\n DurableAgentNameConflictError,\n ClaudePrintError,\n} from './durable/DurableAgent.js';\nexport type {\n DurableAgent,\n DurableAgentState,\n DurableSessionHealth,\n DurableRunStatus,\n DurableActiveRun,\n DurableLastResult,\n ProcessIdentity,\n} from './durable/DurableAgent.js';\nexport { DurableAgentRepository } from './durable/DurableAgentRepository.js';\nexport { LocalProcessInspector } from './durable/DurableAgentRepository.js';\nexport type {\n CreateDurableAgentInput,\n DurableAgentRepositoryOptions,\n ProcessInspector,\n DurableRunCompletion,\n} from './durable/DurableAgentRepository.js';\nexport { ClaudeCliProbe } from './durable/ClaudeCliProbe.js';\nexport type { ClaudeCliProbeOptions } from './durable/ClaudeCliProbe.js';\nexport { ClaudePrintRunner } from './durable/ClaudePrintRunner.js';\nexport type {\n ClaudePrintRunnerOptions,\n ClaudePrintRunRequest,\n ClaudePrintRunResult,\n} from './durable/ClaudePrintRunner.js';\nexport { ClaudePrintAgentService } from './durable/ClaudePrintAgentService.js';\nexport type {\n ClaudePrintAgentServiceOptions,\n ClaudePrintSendResult,\n} from './durable/ClaudePrintAgentService.js';\n"],"names":["AgentManager","AgentNotRunningError","getCodexCapacityReport","ClaudeCodeAdapter","CodexAdapter","CopilotAdapter","GeminiCliAdapter","GrokCliAdapter","OpenCodeAdapter","PiAdapter","AgentStatus","TerminalFocusManager","TerminalType","TtyWriter","getProcessTty","captureProcessSnapshot","executableBasename","filterByProcessNames","AgentRegistry","RenameNotFoundError","RenameConflictError","TmuxManager","AGENTS","getAgentRequestPath","readLatestAgentRequest","writeAgentRequest","AGENT_MODES","DurableAgentError","DurableAgentBusyError","DurableAgentNotFoundError","DurableAgentRepositoryError","DurableAgentNameConflictError","ClaudePrintError","DurableAgentRepository","LocalProcessInspector","ClaudeCliProbe","ClaudePrintRunner","ClaudePrintAgentService"],"mappings":"AAAA,SAASA,YAAY,EAAEC,oBAAoB,QAAQ,oBAAoB;AACvE,SAASC,sBAAsB,QAAQ,sBAAsB;AAO7D,SAASC,iBAAiB,QAAQ,kCAAkC;AACpE,SAASC,YAAY,QAAQ,6BAA6B;AAC1D,SAASC,cAAc,QAAQ,+BAA+B;AAC9D,SAASC,gBAAgB,QAAQ,iCAAiC;AAClE,SAASC,cAAc,QAAQ,+BAA+B;AAC9D,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,SAAS,QAAQ,0BAA0B;AACpD,SAASC,WAAW,QAAQ,6BAA6B;AAYzD,SAASC,oBAAoB,EAAEC,YAAY,QAAQ,qCAAqC;AAExF,SAASC,SAAS,QAAQ,0BAA0B;AAEpD,SAASC,aAAa,QAAQ,qBAAqB;AACnD,SAASC,sBAAsB,EAAEC,kBAAkB,EAAEC,oBAAoB,QAAQ,qBAAqB;AAItG,SAASC,aAAa,EAAEC,mBAAmB,EAAEC,mBAAmB,QAAQ,2BAA2B;AAEnG,SAASC,WAAW,QAAQ,4BAA4B;AACxD,SAASC,MAAM,QAAQ,oBAAoB;AAI3C,SAASC,mBAAmB,EAAEC,sBAAsB,EAAEC,iBAAiB,QAAQ,4BAA4B;AAE3G,SACIC,WAAW,EACXC,iBAAiB,EACjBC,qBAAqB,EACrBC,yBAAyB,EACzBC,2BAA2B,EAC3BC,6BAA6B,EAC7BC,gBAAgB,QACb,4BAA4B;AAUnC,SAASC,sBAAsB,QAAQ,sCAAsC;AAC7E,SAASC,qBAAqB,QAAQ,sCAAsC;AAO5E,SAASC,cAAc,QAAQ,8BAA8B;AAE7D,SAASC,iBAAiB,QAAQ,iCAAiC;AAMnE,SAASC,uBAAuB,QAAQ,uCAAuC"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { AgentManager, AgentNotRunningError } from './AgentManager.js';\nexport { getCodexCapacityReport } from './capacity/index.js';\nexport type {\n CapacityProbeOptions,\n CapacityReport,\n CapacityWindow,\n} from './capacity/index.js';\n\nexport { ClaudeCodeAdapter } from './providers/claude/ClaudeCodeAdapter.js';\nexport { CodexAdapter } from './adapters/CodexAdapter.js';\nexport { CopilotAdapter } from './adapters/CopilotAdapter.js';\nexport { GeminiCliAdapter } from './adapters/GeminiCliAdapter.js';\nexport { GrokCliAdapter } from './adapters/GrokCliAdapter.js';\nexport { OpenCodeAdapter } from './adapters/OpenCodeAdapter.js';\nexport { PiAdapter } from './adapters/PiAdapter.js';\nexport { AgentStatus } from './adapters/AgentAdapter.js';\nexport type {\n AgentAdapter,\n AgentType,\n AgentInfo,\n ProcessInfo,\n ConversationMessage,\n SessionSummary,\n ListSessionsOptions,\n AgentDetectionContext,\n} from './adapters/AgentAdapter.js';\n\nexport { TerminalFocusManager, TerminalType } from './terminal/TerminalFocusManager.js';\nexport type { TerminalLocation } from './terminal/TerminalFocusManager.js';\nexport { TtyWriter } from './terminal/TtyWriter.js';\n\nexport type { ListAgentsOptions } from './AgentManager.js';\n\nexport { AgentRegistry, RenameNotFoundError, RenameConflictError } from './utils/AgentRegistry.js';\nexport type { AgentRegistryOptions, RegistryEntry } from './utils/AgentRegistry.js';\nexport { TmuxManager } from './terminal/TmuxManager.js';\nexport { AGENTS } from './utils/agents.js';\nexport type { AgentConfig, StartableAgentType } from './utils/agents.js';\n\nexport type { AgentRequest } from './utils/agent-requests.js';\nexport { getAgentRequestPath, readLatestAgentRequest, writeAgentRequest } from './utils/agent-requests.js';\n\nexport {\n AGENT_MODES,\n DurableAgentError,\n DurableAgentBusyError,\n DurableAgentNotFoundError,\n DurableAgentRepositoryError,\n DurableAgentNameConflictError,\n ClaudePrintError,\n CodexPrintError,\n PiPrintError,\n} from './durable/DurableAgent.js';\nexport type {\n DurableAgent,\n DurableAgentBase,\n ClaudeDurableAgent,\n CodexDurableAgent,\n PiDurableAgent,\n DurableProvider,\n CodexPrintErrorCode,\n DurableAgentState,\n DurableSessionHealth,\n DurableRunStatus,\n DurableActiveRun,\n DurableLastResult,\n PiPrintErrorCode,\n ProcessIdentity,\n} from './durable/DurableAgent.js';\nexport { DurableAgentRepository } from './durable/DurableAgentRepository.js';\nexport type {\n CreateDurableAgentInput,\n DurableAgentRepositoryOptions,\n ProcessInspector,\n DurableRunCompletion,\n} from './durable/DurableAgentRepository.js';\nexport { ClaudePrintAgentService } from './providers/claude/durable/ClaudePrintAgentService.js';\nexport type {\n ClaudePrintAgentServiceOptions,\n ClaudePrintSendResult,\n} from './providers/claude/durable/ClaudePrintAgentService.js';\nexport { CodexCliProbe } from './providers/codex/durable/CodexCliProbe.js';\nexport type { CodexCliProbeOptions } from './providers/codex/durable/CodexCliProbe.js';\nexport { CodexPrintRunner } from './providers/codex/durable/CodexPrintRunner.js';\nexport type {\n CodexPrintRunnerOptions,\n CodexPrintRunRequest,\n CodexPrintRunResult,\n} from './providers/codex/durable/CodexPrintRunner.js';\nexport { CodexPrintAgentService } from './providers/codex/durable/CodexPrintAgentService.js';\nexport type {\n CodexPrintAgentServiceOptions,\n CodexPrintSendResult,\n} from './providers/codex/durable/CodexPrintAgentService.js';\nexport { PiCliProbe } from './providers/pi/durable/PiCliProbe.js';\nexport type { PiCliProbeOptions } from './providers/pi/durable/PiCliProbe.js';\nexport { PiPrintRunner } from './providers/pi/durable/PiPrintRunner.js';\nexport type { PiPrintRunnerOptions, PiPrintRunRequest, PiPrintRunResult } from './providers/pi/durable/PiPrintRunner.js';\nexport { PiPrintAgentService } from './providers/pi/durable/PiPrintAgentService.js';\nexport type { PiPrintAgentServiceOptions, PiPrintSendResult } from './providers/pi/durable/PiPrintAgentService.js';\n"],"names":["AgentManager","AgentNotRunningError","getCodexCapacityReport","ClaudeCodeAdapter","CodexAdapter","CopilotAdapter","GeminiCliAdapter","GrokCliAdapter","OpenCodeAdapter","PiAdapter","AgentStatus","TerminalFocusManager","TerminalType","TtyWriter","AgentRegistry","RenameNotFoundError","RenameConflictError","TmuxManager","AGENTS","getAgentRequestPath","readLatestAgentRequest","writeAgentRequest","AGENT_MODES","DurableAgentError","DurableAgentBusyError","DurableAgentNotFoundError","DurableAgentRepositoryError","DurableAgentNameConflictError","ClaudePrintError","CodexPrintError","PiPrintError","DurableAgentRepository","ClaudePrintAgentService","CodexCliProbe","CodexPrintRunner","CodexPrintAgentService","PiCliProbe","PiPrintRunner","PiPrintAgentService"],"mappings":"AAAA,SAASA,YAAY,EAAEC,oBAAoB,QAAQ,oBAAoB;AACvE,SAASC,sBAAsB,QAAQ,sBAAsB;AAO7D,SAASC,iBAAiB,QAAQ,0CAA0C;AAC5E,SAASC,YAAY,QAAQ,6BAA6B;AAC1D,SAASC,cAAc,QAAQ,+BAA+B;AAC9D,SAASC,gBAAgB,QAAQ,iCAAiC;AAClE,SAASC,cAAc,QAAQ,+BAA+B;AAC9D,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,SAAS,QAAQ,0BAA0B;AACpD,SAASC,WAAW,QAAQ,6BAA6B;AAYzD,SAASC,oBAAoB,EAAEC,YAAY,QAAQ,qCAAqC;AAExF,SAASC,SAAS,QAAQ,0BAA0B;AAIpD,SAASC,aAAa,EAAEC,mBAAmB,EAAEC,mBAAmB,QAAQ,2BAA2B;AAEnG,SAASC,WAAW,QAAQ,4BAA4B;AACxD,SAASC,MAAM,QAAQ,oBAAoB;AAI3C,SAASC,mBAAmB,EAAEC,sBAAsB,EAAEC,iBAAiB,QAAQ,4BAA4B;AAE3G,SACIC,WAAW,EACXC,iBAAiB,EACjBC,qBAAqB,EACrBC,yBAAyB,EACzBC,2BAA2B,EAC3BC,6BAA6B,EAC7BC,gBAAgB,EAChBC,eAAe,EACfC,YAAY,QACT,4BAA4B;AAiBnC,SAASC,sBAAsB,QAAQ,sCAAsC;AAO7E,SAASC,uBAAuB,QAAQ,wDAAwD;AAKhG,SAASC,aAAa,QAAQ,6CAA6C;AAE3E,SAASC,gBAAgB,QAAQ,gDAAgD;AAMjF,SAASC,sBAAsB,QAAQ,sDAAsD;AAK7F,SAASC,UAAU,QAAQ,uCAAuC;AAElE,SAASC,aAAa,QAAQ,0CAA0C;AAExE,SAASC,mBAAmB,QAAQ,gDAAgD"}
@@ -0,0 +1,21 @@
1
+ import type { AgentInfo, ProcessInfo } from '../../adapters/AgentAdapter.js';
2
+ import { AgentStatus } from '../../adapters/AgentAdapter.js';
3
+ import type { SessionFile } from '../../utils/session.js';
4
+ import { ClaudeSessionParser, type ClaudeSession } from './ClaudeSessionParser.js';
5
+ export interface ClaudeAgentLiveInfo {
6
+ pidStatus?: AgentStatus;
7
+ waitingFor?: string;
8
+ }
9
+ export interface ClaudeSessionAgentInput {
10
+ session: ClaudeSession;
11
+ processInfo: ProcessInfo;
12
+ sessionFile: SessionFile;
13
+ liveInfo?: ClaudeAgentLiveInfo;
14
+ }
15
+ export declare class ClaudeAgentMapper {
16
+ private readonly parser;
17
+ constructor(parser?: ClaudeSessionParser);
18
+ mapSessionToAgent({ session, processInfo, sessionFile, liveInfo, }: ClaudeSessionAgentInput): AgentInfo;
19
+ mapProcessOnlyAgent(processInfo: ProcessInfo): AgentInfo;
20
+ }
21
+ //# sourceMappingURL=ClaudeAgentMapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeAgentMapper.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/ClaudeAgentMapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEnF,MAAM,WAAW,mBAAmB;IAChC,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACpC,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAClC;AAED,qBAAa,iBAAiB;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,GAAE,mBAA+C;IAEpF,iBAAiB,CAAC,EACd,OAAO,EACP,WAAW,EACX,WAAW,EACX,QAAQ,GACX,EAAE,uBAAuB,GAAG,SAAS;IAuBtC,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS;CAY3D"}
@@ -0,0 +1,42 @@
1
+ import { AgentStatus } from '../../adapters/AgentAdapter.js';
2
+ import { generateAgentName } from '../../utils/matching.js';
3
+ import { ClaudeSessionParser } from './ClaudeSessionParser.js';
4
+ export class ClaudeAgentMapper {
5
+ parser;
6
+ constructor(parser = new ClaudeSessionParser()){
7
+ this.parser = parser;
8
+ }
9
+ mapSessionToAgent({ session, processInfo, sessionFile, liveInfo }) {
10
+ // Live PID-file status is authoritative when present — JSONL-derived
11
+ // status mis-classifies sessions whose latest entry is a UI-state
12
+ // event like `permission-mode` or `ai-title`.
13
+ const status = liveInfo?.pidStatus ?? this.parser.determineStatus(session);
14
+ const baseSummary = session.lastUserMessage || 'Session started';
15
+ const summary = status === AgentStatus.WAITING && liveInfo?.waitingFor ? `${baseSummary} — waiting for ${liveInfo.waitingFor}` : baseSummary;
16
+ return {
17
+ name: generateAgentName(processInfo.cwd, processInfo.pid),
18
+ type: 'claude',
19
+ status,
20
+ summary,
21
+ pid: processInfo.pid,
22
+ projectPath: sessionFile.resolvedCwd || processInfo.cwd || '',
23
+ sessionId: sessionFile.sessionId,
24
+ lastActive: session.lastActive,
25
+ sessionFilePath: sessionFile.filePath
26
+ };
27
+ }
28
+ mapProcessOnlyAgent(processInfo) {
29
+ return {
30
+ name: generateAgentName(processInfo.cwd || '', processInfo.pid),
31
+ type: 'claude',
32
+ status: AgentStatus.IDLE,
33
+ summary: 'Unknown',
34
+ pid: processInfo.pid,
35
+ projectPath: processInfo.cwd || '',
36
+ sessionId: `pid-${processInfo.pid}`,
37
+ lastActive: new Date()
38
+ };
39
+ }
40
+ }
41
+
42
+ //# sourceMappingURL=ClaudeAgentMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/providers/claude/ClaudeAgentMapper.ts"],"sourcesContent":["import type { AgentInfo, ProcessInfo } from '../../adapters/AgentAdapter.js';\nimport { AgentStatus } from '../../adapters/AgentAdapter.js';\nimport { generateAgentName } from '../../utils/matching.js';\nimport type { SessionFile } from '../../utils/session.js';\nimport { ClaudeSessionParser, type ClaudeSession } from './ClaudeSessionParser.js';\n\nexport interface ClaudeAgentLiveInfo {\n pidStatus?: AgentStatus;\n waitingFor?: string;\n}\n\nexport interface ClaudeSessionAgentInput {\n session: ClaudeSession;\n processInfo: ProcessInfo;\n sessionFile: SessionFile;\n liveInfo?: ClaudeAgentLiveInfo;\n}\n\nexport class ClaudeAgentMapper {\n constructor(private readonly parser: ClaudeSessionParser = new ClaudeSessionParser()) {}\n\n mapSessionToAgent({\n session,\n processInfo,\n sessionFile,\n liveInfo,\n }: ClaudeSessionAgentInput): AgentInfo {\n // Live PID-file status is authoritative when present — JSONL-derived\n // status mis-classifies sessions whose latest entry is a UI-state\n // event like `permission-mode` or `ai-title`.\n const status = liveInfo?.pidStatus ?? this.parser.determineStatus(session);\n const baseSummary = session.lastUserMessage || 'Session started';\n const summary = status === AgentStatus.WAITING && liveInfo?.waitingFor\n ? `${baseSummary} — waiting for ${liveInfo.waitingFor}`\n : baseSummary;\n\n return {\n name: generateAgentName(processInfo.cwd, processInfo.pid),\n type: 'claude',\n status,\n summary,\n pid: processInfo.pid,\n projectPath: sessionFile.resolvedCwd || processInfo.cwd || '',\n sessionId: sessionFile.sessionId,\n lastActive: session.lastActive,\n sessionFilePath: sessionFile.filePath,\n };\n }\n\n mapProcessOnlyAgent(processInfo: ProcessInfo): AgentInfo {\n return {\n name: generateAgentName(processInfo.cwd || '', processInfo.pid),\n type: 'claude',\n status: AgentStatus.IDLE,\n summary: 'Unknown',\n pid: processInfo.pid,\n projectPath: processInfo.cwd || '',\n sessionId: `pid-${processInfo.pid}`,\n lastActive: new Date(),\n };\n }\n}\n"],"names":["AgentStatus","generateAgentName","ClaudeSessionParser","ClaudeAgentMapper","parser","mapSessionToAgent","session","processInfo","sessionFile","liveInfo","status","pidStatus","determineStatus","baseSummary","lastUserMessage","summary","WAITING","waitingFor","name","cwd","pid","type","projectPath","resolvedCwd","sessionId","lastActive","sessionFilePath","filePath","mapProcessOnlyAgent","IDLE","Date"],"mappings":"AACA,SAASA,WAAW,QAAQ,iCAAiC;AAC7D,SAASC,iBAAiB,QAAQ,0BAA0B;AAE5D,SAASC,mBAAmB,QAA4B,2BAA2B;AAcnF,OAAO,MAAMC;;IACT,YAAY,AAAiBC,SAA8B,IAAIF,qBAAqB,CAAE;aAAzDE,SAAAA;IAA0D;IAEvFC,kBAAkB,EACdC,OAAO,EACPC,WAAW,EACXC,WAAW,EACXC,QAAQ,EACc,EAAa;QACnC,qEAAqE;QACrE,kEAAkE;QAClE,8CAA8C;QAC9C,MAAMC,SAASD,UAAUE,aAAa,IAAI,CAACP,MAAM,CAACQ,eAAe,CAACN;QAClE,MAAMO,cAAcP,QAAQQ,eAAe,IAAI;QAC/C,MAAMC,UAAUL,WAAWV,YAAYgB,OAAO,IAAIP,UAAUQ,aACtD,GAAGJ,YAAY,eAAe,EAAEJ,SAASQ,UAAU,EAAE,GACrDJ;QAEN,OAAO;YACHK,MAAMjB,kBAAkBM,YAAYY,GAAG,EAAEZ,YAAYa,GAAG;YACxDC,MAAM;YACNX;YACAK;YACAK,KAAKb,YAAYa,GAAG;YACpBE,aAAad,YAAYe,WAAW,IAAIhB,YAAYY,GAAG,IAAI;YAC3DK,WAAWhB,YAAYgB,SAAS;YAChCC,YAAYnB,QAAQmB,UAAU;YAC9BC,iBAAiBlB,YAAYmB,QAAQ;QACzC;IACJ;IAEAC,oBAAoBrB,WAAwB,EAAa;QACrD,OAAO;YACHW,MAAMjB,kBAAkBM,YAAYY,GAAG,IAAI,IAAIZ,YAAYa,GAAG;YAC9DC,MAAM;YACNX,QAAQV,YAAY6B,IAAI;YACxBd,SAAS;YACTK,KAAKb,YAAYa,GAAG;YACpBE,aAAaf,YAAYY,GAAG,IAAI;YAChCK,WAAW,CAAC,IAAI,EAAEjB,YAAYa,GAAG,EAAE;YACnCK,YAAY,IAAIK;QACpB;IACJ;AACJ"}
@@ -0,0 +1,29 @@
1
+ import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage, SessionSummary, ListSessionsOptions, AgentDetectionContext } from '../../adapters/AgentAdapter.js';
2
+ /**
3
+ * Claude Code Adapter
4
+ *
5
+ * Detects Claude Code agents by:
6
+ * 1. Filtering Claude processes from a shared asynchronous process snapshot
7
+ * 2. Using snapshot CWD and start-time enrichment
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
+ * 5. Extracting summary from last user message in session JSONL
11
+ */
12
+ export declare class ClaudeCodeAdapter implements AgentAdapter {
13
+ readonly type: "claude";
14
+ readonly processNames: readonly ["claude"];
15
+ private parser;
16
+ private mapper;
17
+ private projectsDir;
18
+ private sessionsDir;
19
+ constructor();
20
+ canHandle(processInfo: ProcessInfo): boolean;
21
+ private isClaudeExecutable;
22
+ detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]>;
23
+ private createLocator;
24
+ getConversation(sessionFilePath: string, options?: {
25
+ verbose?: boolean;
26
+ }): ConversationMessage[];
27
+ listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]>;
28
+ }
29
+ //# sourceMappingURL=ClaudeCodeAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeCodeAdapter.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/ClaudeCodeAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,YAAY,EACZ,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACxB,MAAM,gCAAgC,CAAC;AAOxC;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IAClD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,QAAQ,CAAC,YAAY,sBAAuB;IAE5C,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;;IAU5B,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAI5C,OAAO,CAAC,kBAAkB;IAKpB,YAAY,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA+DzE,OAAO,CAAC,aAAa;IAOrB,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;CAiC5E"}
@@ -0,0 +1,129 @@
1
+ import * as path from 'path';
2
+ import { captureProcessSnapshot, executableBasename, filterByProcessNames } from '../../utils/process.js';
3
+ import { safeStat } from '../../utils/session.js';
4
+ import { ClaudeSessionParser } from './ClaudeSessionParser.js';
5
+ import { ClaudeAgentMapper } from './ClaudeAgentMapper.js';
6
+ import { ClaudeSessionLocator } from './ClaudeSessionLocator.js';
7
+ /**
8
+ * Claude Code Adapter
9
+ *
10
+ * Detects Claude Code agents by:
11
+ * 1. Filtering Claude processes from a shared asynchronous process snapshot
12
+ * 2. Using snapshot CWD and start-time enrichment
13
+ * 3. Attempting authoritative PID-file matching via ~/.claude/sessions/<pid>.json
14
+ * 4. Falling back to CWD+birthtime heuristic (matchProcessesToSessions) for processes without a PID file
15
+ * 5. Extracting summary from last user message in session JSONL
16
+ */ export class ClaudeCodeAdapter {
17
+ type = 'claude';
18
+ processNames = [
19
+ 'claude'
20
+ ];
21
+ parser;
22
+ mapper;
23
+ projectsDir;
24
+ sessionsDir;
25
+ constructor(){
26
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '';
27
+ this.projectsDir = path.join(homeDir, '.claude', 'projects');
28
+ this.sessionsDir = path.join(homeDir, '.claude', 'sessions');
29
+ this.parser = new ClaudeSessionParser();
30
+ this.mapper = new ClaudeAgentMapper(this.parser);
31
+ }
32
+ canHandle(processInfo) {
33
+ return this.isClaudeExecutable(processInfo.command);
34
+ }
35
+ isClaudeExecutable(command) {
36
+ const base = executableBasename(command);
37
+ return base === 'claude' || base === 'claude.exe';
38
+ }
39
+ async detectAgents(context) {
40
+ const snapshot = context?.processes ?? await captureProcessSnapshot(this.processNames);
41
+ const relevant = filterByProcessNames(snapshot, this.processNames);
42
+ const processes = relevant.filter((process1)=>this.canHandle(process1));
43
+ if (processes.length === 0) {
44
+ return [];
45
+ }
46
+ const { direct, legacyMatches } = this.createLocator().matchRunningProcesses(processes);
47
+ const matchedPids = new Set([
48
+ ...direct.map((d)=>d.process.pid),
49
+ ...legacyMatches.map((m)=>m.process.pid)
50
+ ]);
51
+ const agents = [];
52
+ // Build agents from direct (resume + PID-file) matches
53
+ for (const match of direct){
54
+ const { process: proc, sessionFile } = match;
55
+ const sessionData = this.parser.readSession(sessionFile.filePath, sessionFile.resolvedCwd);
56
+ if (sessionData) {
57
+ agents.push(this.mapper.mapSessionToAgent({
58
+ session: sessionData,
59
+ processInfo: proc,
60
+ sessionFile,
61
+ liveInfo: {
62
+ pidStatus: match.pidStatus,
63
+ waitingFor: match.waitingFor
64
+ }
65
+ }));
66
+ } else {
67
+ matchedPids.delete(proc.pid);
68
+ }
69
+ }
70
+ // Build agents from legacy matches
71
+ for (const match of legacyMatches){
72
+ const sessionData = this.parser.readSession(match.session.filePath, match.session.resolvedCwd);
73
+ if (sessionData) {
74
+ agents.push(this.mapper.mapSessionToAgent({
75
+ session: sessionData,
76
+ processInfo: match.process,
77
+ sessionFile: match.session
78
+ }));
79
+ } else {
80
+ matchedPids.delete(match.process.pid);
81
+ }
82
+ }
83
+ // Any process with no match (direct or legacy) appears as IDLE
84
+ for (const proc of processes){
85
+ if (!matchedPids.has(proc.pid)) {
86
+ agents.push(this.mapper.mapProcessOnlyAgent(proc));
87
+ }
88
+ }
89
+ return agents;
90
+ }
91
+ createLocator() {
92
+ return new ClaudeSessionLocator({
93
+ projectsDir: this.projectsDir,
94
+ sessionsDir: this.sessionsDir
95
+ });
96
+ }
97
+ getConversation(sessionFilePath, options) {
98
+ return this.parser.getConversation(sessionFilePath, options);
99
+ }
100
+ async listSessions(opts) {
101
+ const filterCwd = opts?.cwd;
102
+ const candidates = this.createLocator().discoverHistoricalSessionFiles();
103
+ const summaries = [];
104
+ for (const { filePath, defaultCwd } of candidates){
105
+ const session = this.parser.readSession(filePath, defaultCwd);
106
+ if (!session) continue;
107
+ // Drop sessions whose JSONL had no parseable conversation entries.
108
+ // readSession is permissive (returns a shell record even when every
109
+ // line fails to parse); listSessions needs at least one real entry
110
+ // so we don't surface garbage files.
111
+ if (!session.lastEntryType) continue;
112
+ const recordedCwd = session.lastCwd || defaultCwd;
113
+ if (filterCwd !== undefined && recordedCwd !== filterCwd) continue;
114
+ const stat = safeStat(filePath);
115
+ summaries.push({
116
+ type: 'claude',
117
+ sessionId: session.sessionId,
118
+ cwd: recordedCwd,
119
+ firstUserMessage: session.firstUserMessage || '',
120
+ lastActive: session.lastActive ?? stat?.mtime ?? new Date(),
121
+ startedAt: session.sessionStart ?? stat?.birthtime ?? stat?.mtime ?? new Date(),
122
+ sessionFilePath: filePath
123
+ });
124
+ }
125
+ return summaries;
126
+ }
127
+ }
128
+
129
+ //# sourceMappingURL=ClaudeCodeAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/providers/claude/ClaudeCodeAdapter.ts"],"sourcesContent":["import * as path from 'path';\nimport type {\n AgentAdapter,\n AgentInfo,\n ProcessInfo,\n ConversationMessage,\n SessionSummary,\n ListSessionsOptions,\n AgentDetectionContext,\n} from '../../adapters/AgentAdapter.js';\nimport { captureProcessSnapshot, executableBasename, filterByProcessNames } from '../../utils/process.js';\nimport { safeStat } from '../../utils/session.js';\nimport { ClaudeSessionParser } from './ClaudeSessionParser.js';\nimport { ClaudeAgentMapper } from './ClaudeAgentMapper.js';\nimport { ClaudeSessionLocator } from './ClaudeSessionLocator.js';\n\n/**\n * Claude Code Adapter\n *\n * Detects Claude Code agents by:\n * 1. Filtering Claude processes from a shared asynchronous process snapshot\n * 2. Using snapshot CWD and start-time enrichment\n * 3. Attempting authoritative PID-file matching via ~/.claude/sessions/<pid>.json\n * 4. Falling back to CWD+birthtime heuristic (matchProcessesToSessions) for processes without a PID file\n * 5. Extracting summary from last user message in session JSONL\n */\nexport class ClaudeCodeAdapter implements AgentAdapter {\n readonly type = 'claude' as const;\n readonly processNames = ['claude'] as const;\n\n private parser: ClaudeSessionParser;\n private mapper: ClaudeAgentMapper;\n private projectsDir: string;\n private sessionsDir: string;\n\n constructor() {\n const homeDir = process.env.HOME || process.env.USERPROFILE || '';\n this.projectsDir = path.join(homeDir, '.claude', 'projects');\n this.sessionsDir = path.join(homeDir, '.claude', 'sessions');\n this.parser = new ClaudeSessionParser();\n this.mapper = new ClaudeAgentMapper(this.parser);\n }\n\n canHandle(processInfo: ProcessInfo): boolean {\n return this.isClaudeExecutable(processInfo.command);\n }\n\n private isClaudeExecutable(command: string): boolean {\n const base = executableBasename(command);\n return base === 'claude' || base === 'claude.exe';\n }\n\n async detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {\n const snapshot = context?.processes ?? await captureProcessSnapshot(this.processNames);\n const relevant = filterByProcessNames(snapshot, this.processNames);\n const processes = relevant.filter((process) => this.canHandle(process));\n if (processes.length === 0) {\n return [];\n }\n\n const { direct, legacyMatches } = this.createLocator().matchRunningProcesses(processes);\n\n const matchedPids = new Set([\n ...direct.map((d) => d.process.pid),\n ...legacyMatches.map((m) => m.process.pid),\n ]);\n\n const agents: AgentInfo[] = [];\n\n // Build agents from direct (resume + PID-file) matches\n for (const match of direct) {\n const { process: proc, sessionFile } = match;\n const sessionData = this.parser.readSession(sessionFile.filePath, sessionFile.resolvedCwd);\n if (sessionData) {\n agents.push(this.mapper.mapSessionToAgent({\n session: sessionData,\n processInfo: proc,\n sessionFile,\n liveInfo: {\n pidStatus: match.pidStatus,\n waitingFor: match.waitingFor,\n },\n }));\n } else {\n matchedPids.delete(proc.pid);\n }\n }\n\n // Build agents from legacy matches\n for (const match of legacyMatches) {\n const sessionData = this.parser.readSession(\n match.session.filePath,\n match.session.resolvedCwd,\n );\n if (sessionData) {\n agents.push(this.mapper.mapSessionToAgent({\n session: sessionData,\n processInfo: match.process,\n sessionFile: match.session,\n }));\n } else {\n matchedPids.delete(match.process.pid);\n }\n }\n\n // Any process with no match (direct or legacy) appears as IDLE\n for (const proc of processes) {\n if (!matchedPids.has(proc.pid)) {\n agents.push(this.mapper.mapProcessOnlyAgent(proc));\n }\n }\n\n return agents;\n }\n\n private createLocator(): ClaudeSessionLocator {\n return new ClaudeSessionLocator({\n projectsDir: this.projectsDir,\n sessionsDir: this.sessionsDir,\n });\n }\n\n getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[] {\n return this.parser.getConversation(sessionFilePath, options);\n }\n\n async listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]> {\n const filterCwd = opts?.cwd;\n const candidates = this.createLocator().discoverHistoricalSessionFiles();\n const summaries: SessionSummary[] = [];\n\n for (const { filePath, defaultCwd } of candidates) {\n const session = this.parser.readSession(filePath, defaultCwd);\n if (!session) continue;\n\n // Drop sessions whose JSONL had no parseable conversation entries.\n // readSession is permissive (returns a shell record even when every\n // line fails to parse); listSessions needs at least one real entry\n // so we don't surface garbage files.\n if (!session.lastEntryType) continue;\n\n const recordedCwd = session.lastCwd || defaultCwd;\n if (filterCwd !== undefined && recordedCwd !== filterCwd) continue;\n\n const stat = safeStat(filePath);\n\n summaries.push({\n type: 'claude',\n sessionId: session.sessionId,\n cwd: recordedCwd,\n firstUserMessage: session.firstUserMessage || '',\n lastActive: session.lastActive ?? stat?.mtime ?? new Date(),\n startedAt: session.sessionStart ?? stat?.birthtime ?? stat?.mtime ?? new Date(),\n sessionFilePath: filePath,\n });\n }\n\n return summaries;\n }\n}\n"],"names":["path","captureProcessSnapshot","executableBasename","filterByProcessNames","safeStat","ClaudeSessionParser","ClaudeAgentMapper","ClaudeSessionLocator","ClaudeCodeAdapter","type","processNames","parser","mapper","projectsDir","sessionsDir","homeDir","process","env","HOME","USERPROFILE","join","canHandle","processInfo","isClaudeExecutable","command","base","detectAgents","context","snapshot","processes","relevant","filter","length","direct","legacyMatches","createLocator","matchRunningProcesses","matchedPids","Set","map","d","pid","m","agents","match","proc","sessionFile","sessionData","readSession","filePath","resolvedCwd","push","mapSessionToAgent","session","liveInfo","pidStatus","waitingFor","delete","has","mapProcessOnlyAgent","getConversation","sessionFilePath","options","listSessions","opts","filterCwd","cwd","candidates","discoverHistoricalSessionFiles","summaries","defaultCwd","lastEntryType","recordedCwd","lastCwd","undefined","stat","sessionId","firstUserMessage","lastActive","mtime","Date","startedAt","sessionStart","birthtime"],"mappings":"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"}
@@ -1,24 +1,72 @@
1
- import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage, SessionSummary, ListSessionsOptions, AgentDetectionContext } from './AgentAdapter.js';
1
+ import type { ProcessInfo } from '../../adapters/AgentAdapter.js';
2
+ import { AgentStatus } from '../../adapters/AgentAdapter.js';
3
+ import { type MatchResult } from '../../utils/matching.js';
4
+ import { type SessionFile } from '../../utils/session.js';
2
5
  /**
3
- * Claude Code Adapter
6
+ * A process directly matched to a session via PID file (authoritative path).
4
7
  *
5
- * Detects Claude Code agents by:
6
- * 1. Filtering Claude processes from a shared asynchronous process snapshot
7
- * 2. Using snapshot CWD and start-time enrichment
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
- * 5. Extracting summary from last user message in session JSONL
8
+ * When the matching PID file also exposes live status/waitingFor metadata,
9
+ * those values are carried here so the agent mapper can prefer them over
10
+ * the JSONL-derived heuristic.
11
11
  */
12
- export declare class ClaudeCodeAdapter implements AgentAdapter {
13
- readonly type: "claude";
14
- readonly processNames: readonly ["claude"];
15
- private projectsDir;
16
- private sessionsDir;
17
- private parser;
18
- constructor();
19
- canHandle(processInfo: ProcessInfo): boolean;
20
- private isClaudeExecutable;
21
- detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]>;
12
+ export interface ClaudeDirectMatch {
13
+ process: ProcessInfo;
14
+ sessionFile: SessionFile;
15
+ pidStatus?: AgentStatus;
16
+ waitingFor?: string;
17
+ }
18
+ export interface ClaudeProcessSessionMatches {
19
+ direct: ClaudeDirectMatch[];
20
+ legacyMatches: MatchResult[];
21
+ }
22
+ export interface ClaudeSessionLocatorOptions {
23
+ projectsDir?: string;
24
+ sessionsDir?: string;
25
+ }
26
+ export declare class ClaudeSessionLocator {
27
+ private readonly projectsDir;
28
+ private readonly sessionsDir;
29
+ constructor(options?: ClaudeSessionLocatorOptions);
30
+ /**
31
+ * Pair live Claude processes with their session files.
32
+ *
33
+ * Runs three staged strategies, each handing its unmatched processes
34
+ * to the next:
35
+ * 1. `--resume <id>` on the command line — authoritative for resumed
36
+ * sessions whose JSONL predates the process.
37
+ * 2. PID-file matching via ~/.claude/sessions/<pid>.json.
38
+ * 3. Legacy CWD+birthtime heuristic, for processes with no PID file.
39
+ */
40
+ matchRunningProcesses(processes: ProcessInfo[]): ClaudeProcessSessionMatches;
41
+ /**
42
+ * Discover candidate session files for listing historical sessions.
43
+ *
44
+ * Always walks every subdirectory of `projectsDir`. We can't use the
45
+ * encoded-dir shortcut for the cwd-scoped path because Claude Code
46
+ * indexes session files by where the *process was launched*, not by
47
+ * the recorded `cwd` field inside the session — these diverge in
48
+ * worktrees and similar setups. The cwd filter is applied later
49
+ * against `session.lastCwd` so callers see exactly the sessions whose
50
+ * recorded cwd matches.
51
+ */
52
+ discoverHistoricalSessionFiles(): Array<{
53
+ filePath: string;
54
+ defaultCwd: string;
55
+ }>;
56
+ /**
57
+ * Derive the Claude Code project directory for a given CWD.
58
+ *
59
+ * Claude Code encodes paths by replacing every non-alphanumeric
60
+ * character with '-', so '/', '_', '.', spaces, etc. all collapse:
61
+ * /Users/foo/bar → -Users-foo-bar
62
+ * /Users/foo/my_project → -Users-foo-my-project
63
+ * /Users/foo/.worktrees/x → -Users-foo--worktrees-x
64
+ *
65
+ * The encoding is lossy — multiple real paths can collide on the
66
+ * same encoded dir. Callers that need to disambiguate must read the
67
+ * `cwd` field inside each session JSONL.
68
+ */
69
+ private getProjectDir;
22
70
  /**
23
71
  * Discover session files for the given processes.
24
72
  *
@@ -26,7 +74,7 @@ export declare class ClaudeCodeAdapter implements AgentAdapter {
26
74
  * ~/.claude/projects/<encoded>/ directory, then gets session file birthtimes
27
75
  * via a single batched stat call across all directories.
28
76
  */
29
- private discoverSessions;
77
+ discoverLiveSessions(processes: ProcessInfo[]): SessionFile[];
30
78
  /**
31
79
  * Match processes via `claude --resume <uuid>` in their command line.
32
80
  * This works for resumed sessions, where the JSONL was created earlier
@@ -63,37 +111,5 @@ export declare class ClaudeCodeAdapter implements AgentAdapter {
63
111
  * stale startedAt (>60s from proc.startTime), or missing JSONL.
64
112
  */
65
113
  private tryPidFileMatching;
66
- /**
67
- * Derive the Claude Code project directory for a given CWD.
68
- *
69
- * Claude Code encodes paths by replacing every non-alphanumeric
70
- * character with '-', so '/', '_', '.', spaces, etc. all collapse:
71
- * /Users/foo/bar → -Users-foo-bar
72
- * /Users/foo/my_project → -Users-foo-my-project
73
- * /Users/foo/.worktrees/x → -Users-foo--worktrees-x
74
- *
75
- * The encoding is lossy — multiple real paths can collide on the
76
- * same encoded dir. Callers that need to disambiguate must read the
77
- * `cwd` field inside each session JSONL.
78
- */
79
- private getProjectDir;
80
- private mapSessionToAgent;
81
- private mapProcessOnlyAgent;
82
- getConversation(sessionFilePath: string, options?: {
83
- verbose?: boolean;
84
- }): ConversationMessage[];
85
- listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]>;
86
- /**
87
- * Discover candidate session files for {@link listSessions}.
88
- *
89
- * Always walks every subdirectory of `projectsDir`. We can't use the
90
- * encoded-dir shortcut for the cwd-scoped path because Claude Code
91
- * indexes session files by where the *process was launched*, not by
92
- * the recorded `cwd` field inside the session — these diverge in
93
- * worktrees and similar setups. The cwd filter is applied later
94
- * against `session.lastCwd` so callers see exactly the sessions whose
95
- * recorded cwd matches.
96
- */
97
- private discoverSessionFiles;
98
114
  }
99
- //# sourceMappingURL=ClaudeCodeAdapter.d.ts.map
115
+ //# sourceMappingURL=ClaudeSessionLocator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeSessionLocator.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/ClaudeSessionLocator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAA4B,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAMH,KAAK,WAAW,EACnB,MAAM,wBAAwB,CAAC;AAyBhC;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,2BAA2B;IACxC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,aAAa,EAAE,WAAW,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,2BAA2B;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,OAAO,GAAE,2BAAgC;IAMrD;;;;;;;;;OASG;IACH,qBAAqB,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,2BAA2B;IAe5E;;;;;;;;;;OAUG;IACH,8BAA8B,IAAI,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAsBjF;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,aAAa;IAKrB;;;;;;OAMG;IACH,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE;IA6B7D;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA8CzB,OAAO,CAAC,sBAAsB;IAK9B;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAapB;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;CAsC7B"}