@ai-devkit/agent-manager 0.31.0 → 0.33.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 (519) hide show
  1. package/dist/AgentManager.d.ts +3 -3
  2. package/dist/AgentManager.d.ts.map +1 -1
  3. package/dist/AgentManager.js +80 -79
  4. package/dist/AgentManager.js.map +1 -1
  5. package/dist/__tests__/AgentManager.test.js +413 -388
  6. package/dist/__tests__/AgentManager.test.js.map +1 -1
  7. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js +642 -642
  8. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +1 -1
  9. package/dist/__tests__/adapters/CodexAdapter.test.js +322 -2321
  10. package/dist/__tests__/adapters/CodexAdapter.test.js.map +1 -1
  11. package/dist/__tests__/adapters/CopilotAdapter.test.js +254 -248
  12. package/dist/__tests__/adapters/CopilotAdapter.test.js.map +1 -1
  13. package/dist/__tests__/adapters/GeminiCliAdapter.test.js +564 -558
  14. package/dist/__tests__/adapters/GeminiCliAdapter.test.js.map +1 -1
  15. package/dist/__tests__/adapters/GrokCliAdapter.test.js +114 -114
  16. package/dist/__tests__/adapters/GrokCliAdapter.test.js.map +1 -1
  17. package/dist/__tests__/adapters/OpenCodeAdapter.test.js +169 -169
  18. package/dist/__tests__/adapters/OpenCodeAdapter.test.js.map +1 -1
  19. package/dist/__tests__/capacity/codex.test.js +93 -93
  20. package/dist/__tests__/capacity/codex.test.js.map +1 -1
  21. package/dist/__tests__/capacity/index.test.js +17 -17
  22. package/dist/__tests__/capacity/index.test.js.map +1 -1
  23. package/dist/__tests__/durable/CodexCliProbe.test.js +60 -60
  24. package/dist/__tests__/durable/CodexCliProbe.test.js.map +1 -1
  25. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js +28 -28
  26. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +1 -1
  27. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js +30 -30
  28. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +1 -1
  29. package/dist/__tests__/durable/CodexPrintAgentService.test.js +71 -71
  30. package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +1 -1
  31. package/dist/__tests__/durable/CodexPrintRunner.test.js +125 -125
  32. package/dist/__tests__/durable/CodexPrintRunner.test.js.map +1 -1
  33. package/dist/__tests__/print/ClaudeCliProbe.test.js +20 -20
  34. package/dist/__tests__/print/ClaudeCliProbe.test.js.map +1 -1
  35. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js +20 -20
  36. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +1 -1
  37. package/dist/__tests__/print/ClaudePrintAgentService.test.js +58 -58
  38. package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +1 -1
  39. package/dist/__tests__/print/ClaudePrintRunner.test.js +55 -55
  40. package/dist/__tests__/print/ClaudePrintRunner.test.js.map +1 -1
  41. package/dist/__tests__/print/DurableAgent.test.js +9 -9
  42. package/dist/__tests__/print/DurableAgent.test.js.map +1 -1
  43. package/dist/__tests__/print/DurableAgentRepository.sqlite.test.js +40 -40
  44. package/dist/__tests__/print/DurableAgentRepository.sqlite.test.js.map +1 -1
  45. package/dist/__tests__/print/DurableAgentRepository.test.js +66 -66
  46. package/dist/__tests__/print/DurableAgentRepository.test.js.map +1 -1
  47. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js +34 -34
  48. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +1 -1
  49. package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js +132 -132
  50. package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js.map +1 -1
  51. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js +194 -0
  52. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js.map +1 -0
  53. package/dist/__tests__/providers/codex/CodexSessionMapping.test.js +86 -0
  54. package/dist/__tests__/providers/codex/CodexSessionMapping.test.js.map +1 -0
  55. package/dist/__tests__/providers/codex/CodexSessionParser.test.js +254 -0
  56. package/dist/__tests__/providers/codex/CodexSessionParser.test.js.map +1 -0
  57. package/dist/__tests__/providers/pi/PiAdapter.test.js +337 -0
  58. package/dist/__tests__/providers/pi/PiAdapter.test.js.map +1 -0
  59. package/dist/__tests__/providers/pi/PiSessionParser.test.js +246 -0
  60. package/dist/__tests__/providers/pi/PiSessionParser.test.js.map +1 -0
  61. package/dist/__tests__/providers/pi/PiSessionTracker.test.js +108 -0
  62. package/dist/__tests__/providers/pi/PiSessionTracker.test.js.map +1 -0
  63. package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js +33 -33
  64. package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js.map +1 -1
  65. package/dist/__tests__/providers/pi/durable/PiDurableAgentRepository.test.js +16 -16
  66. package/dist/__tests__/providers/pi/durable/PiDurableAgentRepository.test.js.map +1 -1
  67. package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js +52 -52
  68. package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js.map +1 -1
  69. package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js +44 -44
  70. package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js.map +1 -1
  71. package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js +126 -126
  72. package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js.map +1 -1
  73. package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js +14 -14
  74. package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js.map +1 -1
  75. package/dist/__tests__/readiness/AgentReadiness.test.js +301 -0
  76. package/dist/__tests__/readiness/AgentReadiness.test.js.map +1 -0
  77. package/dist/__tests__/runtime/AgentRuntime.test.js +13 -0
  78. package/dist/__tests__/runtime/AgentRuntime.test.js.map +1 -0
  79. package/dist/__tests__/runtime/HerdrAgentRuntime.test.js +452 -0
  80. package/dist/__tests__/runtime/HerdrAgentRuntime.test.js.map +1 -0
  81. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js +588 -0
  82. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -0
  83. package/dist/__tests__/terminal/TerminalFocusManager.test.js +100 -100
  84. package/dist/__tests__/terminal/TerminalFocusManager.test.js.map +1 -1
  85. package/dist/__tests__/terminal/TmuxManager.test.js +101 -101
  86. package/dist/__tests__/terminal/TmuxManager.test.js.map +1 -1
  87. package/dist/__tests__/terminal/TtyWriter.test.js +185 -185
  88. package/dist/__tests__/terminal/TtyWriter.test.js.map +1 -1
  89. package/dist/__tests__/utils/AgentRegistry.test.js +335 -217
  90. package/dist/__tests__/utils/AgentRegistry.test.js.map +1 -1
  91. package/dist/__tests__/utils/ClaudeSessionParser.test.js +103 -101
  92. package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +1 -1
  93. package/dist/__tests__/utils/agent-requests.test.js +43 -43
  94. package/dist/__tests__/utils/agent-requests.test.js.map +1 -1
  95. package/dist/__tests__/utils/agents.test.js +17 -17
  96. package/dist/__tests__/utils/agents.test.js.map +1 -1
  97. package/dist/__tests__/utils/matching.test.js +92 -92
  98. package/dist/__tests__/utils/matching.test.js.map +1 -1
  99. package/dist/__tests__/utils/process.test.js +108 -108
  100. package/dist/__tests__/utils/process.test.js.map +1 -1
  101. package/dist/__tests__/utils/session.test.js +53 -53
  102. package/dist/__tests__/utils/session.test.js.map +1 -1
  103. package/dist/adapters/AgentAdapter.d.ts +2 -2
  104. package/dist/adapters/AgentAdapter.d.ts.map +1 -1
  105. package/dist/adapters/AgentAdapter.js +1 -1
  106. package/dist/adapters/AgentAdapter.js.map +1 -1
  107. package/dist/adapters/CopilotAdapter.d.ts +2 -2
  108. package/dist/adapters/CopilotAdapter.d.ts.map +1 -1
  109. package/dist/adapters/CopilotAdapter.js +51 -51
  110. package/dist/adapters/CopilotAdapter.js.map +1 -1
  111. package/dist/adapters/GeminiCliAdapter.d.ts +2 -2
  112. package/dist/adapters/GeminiCliAdapter.d.ts.map +1 -1
  113. package/dist/adapters/GeminiCliAdapter.js +86 -86
  114. package/dist/adapters/GeminiCliAdapter.js.map +1 -1
  115. package/dist/adapters/GrokCliAdapter.d.ts +1 -1
  116. package/dist/adapters/GrokCliAdapter.d.ts.map +1 -1
  117. package/dist/adapters/GrokCliAdapter.js +80 -80
  118. package/dist/adapters/GrokCliAdapter.js.map +1 -1
  119. package/dist/adapters/OpenCodeAdapter.d.ts +1 -1
  120. package/dist/adapters/OpenCodeAdapter.d.ts.map +1 -1
  121. package/dist/adapters/OpenCodeAdapter.js +37 -36
  122. package/dist/adapters/OpenCodeAdapter.js.map +1 -1
  123. package/dist/adapters/index.d.ts +9 -9
  124. package/dist/adapters/index.d.ts.map +1 -1
  125. package/dist/adapters/index.js +8 -8
  126. package/dist/adapters/index.js.map +1 -1
  127. package/dist/capacity/codex.d.ts +3 -3
  128. package/dist/capacity/codex.d.ts.map +1 -1
  129. package/dist/capacity/codex.js +57 -57
  130. package/dist/capacity/codex.js.map +1 -1
  131. package/dist/capacity/index.d.ts +3 -3
  132. package/dist/capacity/index.d.ts.map +1 -1
  133. package/dist/capacity/index.js +8 -8
  134. package/dist/capacity/index.js.map +1 -1
  135. package/dist/capacity/types.d.ts +1 -1
  136. package/dist/capacity/types.js.map +1 -1
  137. package/dist/database/connection.d.ts +1 -1
  138. package/dist/database/connection.d.ts.map +1 -1
  139. package/dist/database/connection.js +15 -15
  140. package/dist/database/connection.js.map +1 -1
  141. package/dist/database/index.d.ts +3 -3
  142. package/dist/database/index.d.ts.map +1 -1
  143. package/dist/database/index.js +2 -2
  144. package/dist/database/index.js.map +1 -1
  145. package/dist/database/migrations/005_agent_runtime.sql +2 -0
  146. package/dist/database/schema.d.ts +1 -1
  147. package/dist/database/schema.d.ts.map +1 -1
  148. package/dist/database/schema.js +7 -7
  149. package/dist/database/schema.js.map +1 -1
  150. package/dist/durable/DurableAgent.d.ts +9 -9
  151. package/dist/durable/DurableAgent.d.ts.map +1 -1
  152. package/dist/durable/DurableAgent.js +16 -16
  153. package/dist/durable/DurableAgent.js.map +1 -1
  154. package/dist/durable/DurableAgentRepository.d.ts +4 -4
  155. package/dist/durable/DurableAgentRepository.d.ts.map +1 -1
  156. package/dist/durable/DurableAgentRepository.js +49 -48
  157. package/dist/durable/DurableAgentRepository.js.map +1 -1
  158. package/dist/durable/process.d.ts +1 -1
  159. package/dist/durable/process.d.ts.map +1 -1
  160. package/dist/durable/process.js +14 -14
  161. package/dist/durable/process.js.map +1 -1
  162. package/dist/durable/run.d.ts +2 -2
  163. package/dist/durable/run.d.ts.map +1 -1
  164. package/dist/durable/run.js +6 -6
  165. package/dist/durable/run.js.map +1 -1
  166. package/dist/durable/utils.d.ts +1 -1
  167. package/dist/durable/utils.d.ts.map +1 -1
  168. package/dist/durable/utils.js +4 -4
  169. package/dist/durable/utils.js.map +1 -1
  170. package/dist/index.d.ts +46 -41
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +27 -25
  173. package/dist/index.js.map +1 -1
  174. package/dist/providers/claude/ClaudeAgentMapper.d.ts +4 -4
  175. package/dist/providers/claude/ClaudeAgentMapper.d.ts.map +1 -1
  176. package/dist/providers/claude/ClaudeAgentMapper.js +10 -10
  177. package/dist/providers/claude/ClaudeAgentMapper.js.map +1 -1
  178. package/dist/providers/claude/ClaudeCodeAdapter.d.ts +1 -1
  179. package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +1 -1
  180. package/dist/providers/claude/ClaudeCodeAdapter.js +14 -14
  181. package/dist/providers/claude/ClaudeCodeAdapter.js.map +1 -1
  182. package/dist/providers/claude/ClaudeSessionLocator.d.ts +4 -4
  183. package/dist/providers/claude/ClaudeSessionLocator.d.ts.map +1 -1
  184. package/dist/providers/claude/ClaudeSessionLocator.js +79 -79
  185. package/dist/providers/claude/ClaudeSessionLocator.js.map +1 -1
  186. package/dist/providers/claude/ClaudeSessionParser.d.ts +2 -2
  187. package/dist/providers/claude/ClaudeSessionParser.d.ts.map +1 -1
  188. package/dist/providers/claude/ClaudeSessionParser.js +99 -99
  189. package/dist/providers/claude/ClaudeSessionParser.js.map +1 -1
  190. package/dist/providers/claude/durable/ClaudeCliProbe.d.ts.map +1 -1
  191. package/dist/providers/claude/durable/ClaudeCliProbe.js +16 -16
  192. package/dist/providers/claude/durable/ClaudeCliProbe.js.map +1 -1
  193. package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts +5 -5
  194. package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts.map +1 -1
  195. package/dist/providers/claude/durable/ClaudePrintAgentService.js +10 -10
  196. package/dist/providers/claude/durable/ClaudePrintAgentService.js.map +1 -1
  197. package/dist/providers/claude/durable/ClaudePrintRunner.d.ts +4 -4
  198. package/dist/providers/claude/durable/ClaudePrintRunner.d.ts.map +1 -1
  199. package/dist/providers/claude/durable/ClaudePrintRunner.js +18 -18
  200. package/dist/providers/claude/durable/ClaudePrintRunner.js.map +1 -1
  201. package/dist/providers/claude/durable/ClaudeStreamParser.d.ts +2 -2
  202. package/dist/providers/claude/durable/ClaudeStreamParser.d.ts.map +1 -1
  203. package/dist/providers/claude/durable/ClaudeStreamParser.js +17 -17
  204. package/dist/providers/claude/durable/ClaudeStreamParser.js.map +1 -1
  205. package/dist/providers/codex/CodexAdapter.d.ts +27 -0
  206. package/dist/providers/codex/CodexAdapter.d.ts.map +1 -0
  207. package/dist/providers/codex/CodexAdapter.js +162 -0
  208. package/dist/providers/codex/CodexAdapter.js.map +1 -0
  209. package/dist/providers/codex/CodexAgentMapper.d.ts +9 -0
  210. package/dist/providers/codex/CodexAgentMapper.d.ts.map +1 -0
  211. package/dist/providers/codex/CodexAgentMapper.js +35 -0
  212. package/dist/providers/codex/CodexAgentMapper.js.map +1 -0
  213. package/dist/providers/codex/CodexSessionLocator.d.ts +44 -0
  214. package/dist/providers/codex/CodexSessionLocator.d.ts.map +1 -0
  215. package/dist/providers/codex/CodexSessionLocator.js +207 -0
  216. package/dist/providers/codex/CodexSessionLocator.js.map +1 -0
  217. package/dist/providers/codex/CodexSessionMapping.d.ts +23 -0
  218. package/dist/providers/codex/CodexSessionMapping.d.ts.map +1 -0
  219. package/dist/providers/codex/CodexSessionMapping.js +68 -0
  220. package/dist/providers/codex/CodexSessionMapping.js.map +1 -0
  221. package/dist/providers/codex/CodexSessionParser.d.ts +58 -0
  222. package/dist/providers/codex/CodexSessionParser.d.ts.map +1 -0
  223. package/dist/providers/codex/CodexSessionParser.js +262 -0
  224. package/dist/providers/codex/CodexSessionParser.js.map +1 -0
  225. package/dist/providers/codex/durable/CodexCliProbe.d.ts.map +1 -1
  226. package/dist/providers/codex/durable/CodexCliProbe.js +22 -22
  227. package/dist/providers/codex/durable/CodexCliProbe.js.map +1 -1
  228. package/dist/providers/codex/durable/CodexPrintAgentService.d.ts +6 -6
  229. package/dist/providers/codex/durable/CodexPrintAgentService.d.ts.map +1 -1
  230. package/dist/providers/codex/durable/CodexPrintAgentService.js +10 -10
  231. package/dist/providers/codex/durable/CodexPrintAgentService.js.map +1 -1
  232. package/dist/providers/codex/durable/CodexPrintRunner.d.ts +4 -4
  233. package/dist/providers/codex/durable/CodexPrintRunner.d.ts.map +1 -1
  234. package/dist/providers/codex/durable/CodexPrintRunner.js +20 -20
  235. package/dist/providers/codex/durable/CodexPrintRunner.js.map +1 -1
  236. package/dist/providers/codex/durable/CodexStreamParser.d.ts +2 -2
  237. package/dist/providers/codex/durable/CodexStreamParser.d.ts.map +1 -1
  238. package/dist/providers/codex/durable/CodexStreamParser.js +21 -21
  239. package/dist/providers/codex/durable/CodexStreamParser.js.map +1 -1
  240. package/dist/providers/pi/PiAdapter.d.ts +28 -0
  241. package/dist/providers/pi/PiAdapter.d.ts.map +1 -0
  242. package/dist/providers/pi/PiAdapter.js +153 -0
  243. package/dist/providers/pi/PiAdapter.js.map +1 -0
  244. package/dist/providers/pi/PiAgentMapper.d.ts +9 -0
  245. package/dist/providers/pi/PiAgentMapper.d.ts.map +1 -0
  246. package/dist/providers/pi/PiAgentMapper.js +37 -0
  247. package/dist/providers/pi/PiAgentMapper.js.map +1 -0
  248. package/dist/providers/pi/PiSessionLocator.d.ts +23 -0
  249. package/dist/providers/pi/PiSessionLocator.d.ts.map +1 -0
  250. package/dist/providers/pi/PiSessionLocator.js +79 -0
  251. package/dist/providers/pi/PiSessionLocator.js.map +1 -0
  252. package/dist/providers/pi/PiSessionParser.d.ts +36 -0
  253. package/dist/providers/pi/PiSessionParser.d.ts.map +1 -0
  254. package/dist/providers/pi/PiSessionParser.js +191 -0
  255. package/dist/providers/pi/PiSessionParser.js.map +1 -0
  256. package/dist/providers/pi/PiSessionTracker.d.ts +23 -0
  257. package/dist/providers/pi/PiSessionTracker.d.ts.map +1 -0
  258. package/dist/providers/pi/PiSessionTracker.js +69 -0
  259. package/dist/providers/pi/PiSessionTracker.js.map +1 -0
  260. package/dist/providers/pi/durable/PiCliProbe.d.ts.map +1 -1
  261. package/dist/providers/pi/durable/PiCliProbe.js +15 -15
  262. package/dist/providers/pi/durable/PiCliProbe.js.map +1 -1
  263. package/dist/providers/pi/durable/PiPrintAgentService.d.ts +6 -6
  264. package/dist/providers/pi/durable/PiPrintAgentService.d.ts.map +1 -1
  265. package/dist/providers/pi/durable/PiPrintAgentService.js +10 -10
  266. package/dist/providers/pi/durable/PiPrintAgentService.js.map +1 -1
  267. package/dist/providers/pi/durable/PiPrintProtocol.d.ts.map +1 -1
  268. package/dist/providers/pi/durable/PiPrintProtocol.js +18 -18
  269. package/dist/providers/pi/durable/PiPrintProtocol.js.map +1 -1
  270. package/dist/providers/pi/durable/PiPrintRunner.d.ts +4 -4
  271. package/dist/providers/pi/durable/PiPrintRunner.d.ts.map +1 -1
  272. package/dist/providers/pi/durable/PiPrintRunner.js +15 -15
  273. package/dist/providers/pi/durable/PiPrintRunner.js.map +1 -1
  274. package/dist/providers/pi/durable/PiStreamParser.d.ts +1 -1
  275. package/dist/providers/pi/durable/PiStreamParser.d.ts.map +1 -1
  276. package/dist/providers/pi/durable/PiStreamParser.js +16 -16
  277. package/dist/providers/pi/durable/PiStreamParser.js.map +1 -1
  278. package/dist/readiness/AgentReadiness.d.ts +67 -0
  279. package/dist/readiness/AgentReadiness.d.ts.map +1 -0
  280. package/dist/readiness/AgentReadiness.js +614 -0
  281. package/dist/readiness/AgentReadiness.js.map +1 -0
  282. package/dist/runtime/ManagedAgentRuntime.d.ts +69 -0
  283. package/dist/runtime/ManagedAgentRuntime.d.ts.map +1 -0
  284. package/dist/runtime/ManagedAgentRuntime.js +156 -0
  285. package/dist/runtime/ManagedAgentRuntime.js.map +1 -0
  286. package/dist/runtime/RuntimeFactory.d.ts +4 -0
  287. package/dist/runtime/RuntimeFactory.d.ts.map +1 -0
  288. package/dist/runtime/RuntimeFactory.js +11 -0
  289. package/dist/runtime/RuntimeFactory.js.map +1 -0
  290. package/dist/runtime/errors.d.ts +27 -0
  291. package/dist/runtime/errors.d.ts.map +1 -0
  292. package/dist/runtime/errors.js +42 -0
  293. package/dist/runtime/errors.js.map +1 -0
  294. package/dist/runtime/herdr/HerdrAgentRuntime.d.ts +31 -0
  295. package/dist/runtime/herdr/HerdrAgentRuntime.d.ts.map +1 -0
  296. package/dist/runtime/herdr/HerdrAgentRuntime.js +184 -0
  297. package/dist/runtime/herdr/HerdrAgentRuntime.js.map +1 -0
  298. package/dist/runtime/herdr/HerdrCliClient.d.ts +13 -0
  299. package/dist/runtime/herdr/HerdrCliClient.d.ts.map +1 -0
  300. package/dist/runtime/herdr/HerdrCliClient.js +60 -0
  301. package/dist/runtime/herdr/HerdrCliClient.js.map +1 -0
  302. package/dist/runtime/herdr/HerdrErrors.d.ts +7 -0
  303. package/dist/runtime/herdr/HerdrErrors.d.ts.map +1 -0
  304. package/dist/runtime/herdr/HerdrErrors.js +10 -0
  305. package/dist/runtime/herdr/HerdrErrors.js.map +1 -0
  306. package/dist/runtime/herdr/HerdrResponseParsers.d.ts +14 -0
  307. package/dist/runtime/herdr/HerdrResponseParsers.d.ts.map +1 -0
  308. package/dist/runtime/herdr/HerdrResponseParsers.js +96 -0
  309. package/dist/runtime/herdr/HerdrResponseParsers.js.map +1 -0
  310. package/dist/runtime/herdr/HerdrRuntimeRef.d.ts +9 -0
  311. package/dist/runtime/herdr/HerdrRuntimeRef.d.ts.map +1 -0
  312. package/dist/runtime/herdr/HerdrRuntimeRef.js +33 -0
  313. package/dist/runtime/herdr/HerdrRuntimeRef.js.map +1 -0
  314. package/dist/runtime/tmux/PidPolling.d.ts +5 -0
  315. package/dist/runtime/tmux/PidPolling.d.ts.map +1 -0
  316. package/dist/runtime/tmux/PidPolling.js +24 -0
  317. package/dist/runtime/tmux/PidPolling.js.map +1 -0
  318. package/dist/runtime/tmux/TmuxAgentRuntime.d.ts +17 -0
  319. package/dist/runtime/tmux/TmuxAgentRuntime.d.ts.map +1 -0
  320. package/dist/runtime/tmux/TmuxAgentRuntime.js +80 -0
  321. package/dist/runtime/tmux/TmuxAgentRuntime.js.map +1 -0
  322. package/dist/runtime/tmux/TmuxRuntimeRef.d.ts +5 -0
  323. package/dist/runtime/tmux/TmuxRuntimeRef.d.ts.map +1 -0
  324. package/dist/runtime/tmux/TmuxRuntimeRef.js +9 -0
  325. package/dist/runtime/tmux/TmuxRuntimeRef.js.map +1 -0
  326. package/dist/runtime/types.d.ts +54 -0
  327. package/dist/runtime/types.d.ts.map +1 -0
  328. package/dist/runtime/types.js +3 -0
  329. package/dist/runtime/types.js.map +1 -0
  330. package/dist/terminal/TerminalFocusManager.d.ts.map +1 -1
  331. package/dist/terminal/TerminalFocusManager.js +50 -50
  332. package/dist/terminal/TerminalFocusManager.js.map +1 -1
  333. package/dist/terminal/TmuxManager.d.ts.map +1 -1
  334. package/dist/terminal/TmuxManager.js +47 -47
  335. package/dist/terminal/TmuxManager.js.map +1 -1
  336. package/dist/terminal/TtyWriter.d.ts +1 -1
  337. package/dist/terminal/TtyWriter.d.ts.map +1 -1
  338. package/dist/terminal/TtyWriter.js +89 -89
  339. package/dist/terminal/TtyWriter.js.map +1 -1
  340. package/dist/terminal/index.d.ts +4 -4
  341. package/dist/terminal/index.js +3 -3
  342. package/dist/terminal/index.js.map +1 -1
  343. package/dist/utils/AgentRegistry.d.ts +10 -2
  344. package/dist/utils/AgentRegistry.d.ts.map +1 -1
  345. package/dist/utils/AgentRegistry.js +57 -24
  346. package/dist/utils/AgentRegistry.js.map +1 -1
  347. package/dist/utils/agent-requests.d.ts.map +1 -1
  348. package/dist/utils/agent-requests.js +5 -5
  349. package/dist/utils/agent-requests.js.map +1 -1
  350. package/dist/utils/agents.d.ts +2 -2
  351. package/dist/utils/agents.d.ts.map +1 -1
  352. package/dist/utils/agents.js +15 -15
  353. package/dist/utils/agents.js.map +1 -1
  354. package/dist/utils/applescript.js +1 -1
  355. package/dist/utils/applescript.js.map +1 -1
  356. package/dist/utils/index.d.ts +6 -6
  357. package/dist/utils/index.d.ts.map +1 -1
  358. package/dist/utils/index.js +4 -4
  359. package/dist/utils/index.js.map +1 -1
  360. package/dist/utils/matching.d.ts +2 -2
  361. package/dist/utils/matching.d.ts.map +1 -1
  362. package/dist/utils/matching.js +4 -4
  363. package/dist/utils/matching.js.map +1 -1
  364. package/dist/utils/process.d.ts +1 -1
  365. package/dist/utils/process.d.ts.map +1 -1
  366. package/dist/utils/process.js +74 -74
  367. package/dist/utils/process.js.map +1 -1
  368. package/dist/utils/session.d.ts +1 -1
  369. package/dist/utils/session.d.ts.map +1 -1
  370. package/dist/utils/session.js +7 -7
  371. package/dist/utils/session.js.map +1 -1
  372. package/dist/utils/sortAgents.d.ts +2 -2
  373. package/dist/utils/sortAgents.d.ts.map +1 -1
  374. package/dist/utils/sortAgents.js +5 -5
  375. package/dist/utils/sortAgents.js.map +1 -1
  376. package/package.json +18 -19
  377. package/src/AgentManager.ts +283 -281
  378. package/src/__tests__/AgentManager.test.ts +917 -907
  379. package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +1657 -1368
  380. package/src/__tests__/adapters/CodexAdapter.test.ts +365 -1698
  381. package/src/__tests__/adapters/CopilotAdapter.test.ts +576 -481
  382. package/src/__tests__/adapters/GeminiCliAdapter.test.ts +1189 -1157
  383. package/src/__tests__/adapters/GrokCliAdapter.test.ts +325 -272
  384. package/src/__tests__/adapters/OpenCodeAdapter.test.ts +510 -455
  385. package/src/__tests__/capacity/codex.test.ts +178 -91
  386. package/src/__tests__/capacity/index.test.ts +27 -18
  387. package/src/__tests__/durable/CodexCliProbe.test.ts +75 -53
  388. package/src/__tests__/durable/CodexDurableAgentRepository.test.ts +51 -40
  389. package/src/__tests__/durable/CodexPrintAgent.integration.test.ts +89 -64
  390. package/src/__tests__/durable/CodexPrintAgentService.test.ts +196 -118
  391. package/src/__tests__/durable/CodexPrintRunner.test.ts +282 -162
  392. package/src/__tests__/fixtures/fake-claude.cjs +20 -13
  393. package/src/__tests__/fixtures/fake-codex.cjs +41 -30
  394. package/src/__tests__/print/ClaudeCliProbe.test.ts +27 -21
  395. package/src/__tests__/print/ClaudePrintAgent.integration.test.ts +48 -40
  396. package/src/__tests__/print/ClaudePrintAgentService.test.ts +118 -67
  397. package/src/__tests__/print/ClaudePrintRunner.test.ts +136 -83
  398. package/src/__tests__/print/DurableAgent.test.ts +19 -16
  399. package/src/__tests__/print/DurableAgentRepository.sqlite.test.ts +109 -86
  400. package/src/__tests__/print/DurableAgentRepository.test.ts +170 -137
  401. package/src/__tests__/providers/claude/ClaudeAgentMapper.test.ts +65 -65
  402. package/src/__tests__/providers/claude/ClaudeSessionLocator.test.ts +400 -377
  403. package/src/__tests__/providers/codex/CodexSessionLocator.test.ts +182 -0
  404. package/src/__tests__/providers/codex/CodexSessionMapping.test.ts +63 -0
  405. package/src/__tests__/providers/codex/CodexSessionParser.test.ts +192 -0
  406. package/src/__tests__/providers/pi/PiAdapter.test.ts +310 -0
  407. package/src/__tests__/providers/pi/PiSessionParser.test.ts +190 -0
  408. package/src/__tests__/providers/pi/PiSessionTracker.test.ts +79 -0
  409. package/src/__tests__/providers/pi/durable/PiCliProbe.test.ts +48 -32
  410. package/src/__tests__/providers/pi/durable/PiDurableAgentRepository.test.ts +24 -23
  411. package/src/__tests__/providers/pi/durable/PiPrintAgentService.test.ts +131 -59
  412. package/src/__tests__/providers/pi/durable/PiPrintProtocol.test.ts +66 -28
  413. package/src/__tests__/providers/pi/durable/PiPrintRunner.test.ts +236 -90
  414. package/src/__tests__/providers/pi/durable/PiStreamParser.test.ts +20 -18
  415. package/src/__tests__/readiness/AgentReadiness.test.ts +242 -0
  416. package/src/__tests__/runtime/AgentRuntime.test.ts +8 -0
  417. package/src/__tests__/runtime/HerdrAgentRuntime.test.ts +358 -0
  418. package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +555 -0
  419. package/src/__tests__/terminal/TerminalFocusManager.test.ts +254 -253
  420. package/src/__tests__/terminal/TmuxManager.test.ts +157 -157
  421. package/src/__tests__/terminal/TtyWriter.test.ts +423 -419
  422. package/src/__tests__/utils/AgentRegistry.test.ts +506 -402
  423. package/src/__tests__/utils/ClaudeSessionParser.test.ts +276 -242
  424. package/src/__tests__/utils/agent-requests.test.ts +76 -56
  425. package/src/__tests__/utils/agents.test.ts +20 -20
  426. package/src/__tests__/utils/matching.test.ts +206 -171
  427. package/src/__tests__/utils/process.test.ts +276 -262
  428. package/src/__tests__/utils/session.test.ts +133 -139
  429. package/src/adapters/AgentAdapter.ts +134 -126
  430. package/src/adapters/CopilotAdapter.ts +405 -395
  431. package/src/adapters/GeminiCliAdapter.ts +598 -600
  432. package/src/adapters/GrokCliAdapter.ts +353 -342
  433. package/src/adapters/OpenCodeAdapter.ts +285 -259
  434. package/src/adapters/index.ts +15 -9
  435. package/src/capacity/codex.ts +137 -84
  436. package/src/capacity/index.ts +18 -13
  437. package/src/capacity/types.ts +1 -1
  438. package/src/database/connection.ts +73 -68
  439. package/src/database/index.ts +6 -6
  440. package/src/database/migrations/005_agent_runtime.sql +2 -0
  441. package/src/database/schema.ts +40 -38
  442. package/src/durable/DurableAgent.ts +85 -85
  443. package/src/durable/DurableAgentRepository.ts +409 -260
  444. package/src/durable/process.ts +22 -21
  445. package/src/durable/run.ts +61 -51
  446. package/src/durable/utils.ts +46 -41
  447. package/src/index.ts +145 -86
  448. package/src/providers/claude/ClaudeAgentMapper.ts +51 -50
  449. package/src/providers/claude/ClaudeCodeAdapter.ts +144 -136
  450. package/src/providers/claude/ClaudeSessionLocator.ts +291 -293
  451. package/src/providers/claude/ClaudeSessionParser.ts +322 -338
  452. package/src/providers/claude/durable/ClaudeCliProbe.ts +42 -37
  453. package/src/providers/claude/durable/ClaudePrintAgentService.ts +63 -50
  454. package/src/providers/claude/durable/ClaudePrintRunner.ts +79 -69
  455. package/src/providers/claude/durable/ClaudeStreamParser.ts +91 -62
  456. package/src/providers/codex/CodexAdapter.ts +205 -0
  457. package/src/providers/codex/CodexAgentMapper.ts +35 -0
  458. package/src/providers/codex/CodexSessionLocator.ts +279 -0
  459. package/src/providers/codex/CodexSessionMapping.ts +89 -0
  460. package/src/providers/codex/CodexSessionParser.ts +385 -0
  461. package/src/providers/codex/durable/CodexCliProbe.ts +50 -42
  462. package/src/providers/codex/durable/CodexPrintAgentService.ts +63 -49
  463. package/src/providers/codex/durable/CodexPrintRunner.ts +79 -69
  464. package/src/providers/codex/durable/CodexStreamParser.ts +97 -84
  465. package/src/providers/pi/PiAdapter.ts +183 -0
  466. package/src/providers/pi/PiAgentMapper.ts +36 -0
  467. package/src/providers/pi/PiSessionLocator.ts +95 -0
  468. package/src/providers/pi/PiSessionParser.ts +284 -0
  469. package/src/providers/pi/PiSessionTracker.ts +87 -0
  470. package/src/providers/pi/durable/PiCliProbe.ts +42 -34
  471. package/src/providers/pi/durable/PiPrintAgentService.ts +61 -53
  472. package/src/providers/pi/durable/PiPrintProtocol.ts +31 -29
  473. package/src/providers/pi/durable/PiPrintRunner.ts +75 -68
  474. package/src/providers/pi/durable/PiStreamParser.ts +82 -72
  475. package/src/readiness/AgentReadiness.ts +727 -0
  476. package/src/runtime/ManagedAgentRuntime.ts +266 -0
  477. package/src/runtime/RuntimeFactory.ts +13 -0
  478. package/src/runtime/errors.ts +50 -0
  479. package/src/runtime/herdr/HerdrAgentRuntime.ts +190 -0
  480. package/src/runtime/herdr/HerdrCliClient.ts +78 -0
  481. package/src/runtime/herdr/HerdrErrors.ts +9 -0
  482. package/src/runtime/herdr/HerdrResponseParsers.ts +76 -0
  483. package/src/runtime/herdr/HerdrRuntimeRef.ts +41 -0
  484. package/src/runtime/tmux/PidPolling.ts +34 -0
  485. package/src/runtime/tmux/TmuxAgentRuntime.ts +113 -0
  486. package/src/runtime/tmux/TmuxRuntimeRef.ts +9 -0
  487. package/src/runtime/types.ts +56 -0
  488. package/src/terminal/TerminalFocusManager.ts +215 -212
  489. package/src/terminal/TmuxManager.ts +99 -92
  490. package/src/terminal/TtyWriter.ts +203 -194
  491. package/src/terminal/index.ts +4 -4
  492. package/src/utils/AgentRegistry.ts +299 -238
  493. package/src/utils/agent-requests.ts +16 -16
  494. package/src/utils/agents.ts +41 -38
  495. package/src/utils/applescript.ts +4 -4
  496. package/src/utils/index.ts +12 -6
  497. package/src/utils/matching.ts +43 -43
  498. package/src/utils/process.ts +261 -258
  499. package/src/utils/session.ts +66 -66
  500. package/src/utils/sortAgents.ts +35 -33
  501. package/tsconfig.json +2 -8
  502. package/vitest.config.ts +16 -16
  503. package/.eslintrc.json +0 -31
  504. package/dist/__tests__/adapters/PiAdapter.test.js +0 -618
  505. package/dist/__tests__/adapters/PiAdapter.test.js.map +0 -1
  506. package/dist/__tests__/database/DurableAgentsDatabase.test.js +0 -128
  507. package/dist/__tests__/database/DurableAgentsDatabase.test.js.map +0 -1
  508. package/dist/adapters/CodexAdapter.d.ts +0 -109
  509. package/dist/adapters/CodexAdapter.d.ts.map +0 -1
  510. package/dist/adapters/CodexAdapter.js +0 -710
  511. package/dist/adapters/CodexAdapter.js.map +0 -1
  512. package/dist/adapters/PiAdapter.d.ts +0 -63
  513. package/dist/adapters/PiAdapter.d.ts.map +0 -1
  514. package/dist/adapters/PiAdapter.js +0 -453
  515. package/dist/adapters/PiAdapter.js.map +0 -1
  516. package/src/__tests__/adapters/PiAdapter.test.ts +0 -458
  517. package/src/__tests__/database/DurableAgentsDatabase.test.ts +0 -102
  518. package/src/adapters/CodexAdapter.ts +0 -923
  519. package/src/adapters/PiAdapter.ts +0 -598
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/durable/DurableAgentRepository.ts"],"sourcesContent":["import fs from 'fs';\nimport { randomUUID } from 'crypto';\nimport { DatabaseConnection, DEFAULT_AGENT_REGISTRY_DB_PATH } from '../database/index.js';\nimport { AGENT_MODES, CodexPrintError, type DurableActiveRun, type DurableAgent, type DurableProvider, type ProcessIdentity, type DurableRunStatus, type DurableSessionHealth } from './DurableAgent.js';\nimport { LocalProcessInspector, type ProcessInspector } from './process.js';\nimport { isUuid } from './utils.js';\nimport {\n DurableAgentBusyError,\n DurableAgentNameConflictError,\n DurableAgentNotFoundError,\n DurableAgentRepositoryError,\n} from './DurableAgent.js';\n\ninterface DurableAgentRow {\n id: string; name: string; provider: DurableProvider; mode: typeof AGENT_MODES.DURABLE; cwd: string; provider_session_id: string | null;\n state: DurableAgent['state']; session_health: DurableSessionHealth; created_at: string; updated_at: string;\n last_active_at: string | null; last_result_status: DurableRunStatus | null;\n last_result_completed_at: string | null; last_result_exit_code: number | null; last_result_summary: string | null;\n active_run_token: string | null; active_owner_pid: number | null; active_owner_started_at: string | null;\n active_provider_pid: number | null; active_provider_started_at: string | null; active_run_started_at: string | null;\n}\n\nexport interface CreateDurableAgentInput { name: string; cwd: string; provider?: DurableProvider }\n\nexport interface DurableAgentRepositoryOptions {\n dbPath?: string;\n readonly?: boolean;\n /** @deprecated SQLite busy_timeout replaces filesystem lock polling. */\n lockTimeoutMs?: number;\n now?: () => Date;\n processInspector?: ProcessInspector;\n /** @deprecated Active ownership is committed atomically. */\n incompleteLockGraceMs?: number;\n /** @deprecated SQLite transactions replace mutation lock directories. */\n mutationLockStaleMs?: number;\n}\n\nexport { LocalProcessInspector } from './process.js';\nexport type { ProcessInspector } from './process.js';\nexport interface DurableRunCompletion {\n status: DurableRunStatus; exitCode: number | null; summary: string; sessionHealth: DurableSessionHealth;\n}\n\nexport class DurableAgentRepository {\n readonly dbPath: string;\n private readonly now: () => Date;\n private readonly processInspector: ProcessInspector;\n private readonly readonly: boolean;\n private readonly db: DatabaseConnection;\n\n constructor(options: DurableAgentRepositoryOptions = {}) {\n this.dbPath = options.dbPath ?? DEFAULT_AGENT_REGISTRY_DB_PATH;\n this.now = options.now ?? (() => new Date());\n this.processInspector = options.processInspector ?? new LocalProcessInspector();\n this.readonly = options.readonly ?? false;\n try {\n this.db = new DatabaseConnection({ dbPath: this.dbPath, readonly: this.readonly });\n } catch (error) {\n if (error instanceof DurableAgentRepositoryError) throw error;\n throw new DurableAgentRepositoryError(`Cannot open durable-agent database: ${(error as Error).message}`);\n }\n }\n\n async create(input: CreateDurableAgentInput): Promise<DurableAgent> {\n this.assertWritable();\n const cwd = this.canonicalDirectory(input.cwd);\n const timestamp = this.now().toISOString();\n const id = randomUUID();\n const provider = input.provider ?? 'claude';\n let providerSessionId = provider === 'codex' ? null : randomUUID();\n while (providerSessionId === id) providerSessionId = randomUUID();\n try {\n this.db.execute(`INSERT INTO durable_agents (\n id, name, provider, mode, cwd, provider_session_id, state, session_health, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, 'ready', 'uninitialized', ?, ?)`,\n [id, input.name, provider, AGENT_MODES.DURABLE, cwd, providerSessionId, timestamp, timestamp]);\n } catch (error) {\n if (/UNIQUE constraint failed: durable_agents\\.name/i.test((error as Error).message)) {\n throw new DurableAgentNameConflictError(input.name);\n }\n throw this.storageError('Failed to create durable agent', error);\n }\n return this.requireById(id);\n }\n\n async list(): Promise<DurableAgent[]> {\n if (!this.readonly) await this.reconcile();\n return this.listRaw();\n }\n\n async getById(id: string): Promise<DurableAgent | null> {\n if (!this.readonly) await this.reconcile();\n return this.findById(id);\n }\n\n async resolve(reference: string): Promise<DurableAgent | DurableAgent[] | null> {\n const agents = await this.list();\n const byId = agents.find((agent) => agent.id === reference);\n if (byId) return byId;\n const matches = agents.filter((agent) => agent.name.toLowerCase() === reference.toLowerCase());\n return matches.length === 0 ? null : matches.length === 1 ? matches[0]! : matches;\n }\n\n async acquireRun(id: string): Promise<{ agent: DurableAgent; token: string }> {\n this.assertWritable();\n const snapshot = this.findById(id);\n if (!snapshot) throw new DurableAgentNotFoundError(id);\n this.validateBoundCwd(snapshot.cwd);\n const observed = snapshot.activeRun;\n const observedLive = observed ? this.isActive(observed) : false;\n if (observedLive) throw new DurableAgentBusyError(id, snapshot.name);\n const owner = this.processInspector.getIdentity(process.pid);\n if (!owner) throw new DurableAgentRepositoryError('Cannot determine the current process identity.');\n const token = randomUUID();\n const startedAt = this.now().toISOString();\n let recovered = false;\n try {\n this.immediate(() => {\n const current = this.findById(id);\n if (!current) throw new DurableAgentNotFoundError(id);\n if (current.state === 'running') {\n if (!observed || current.activeRun?.token !== observed.token || observedLive) {\n throw new DurableAgentBusyError(id, current.name);\n }\n recovered = true;\n }\n const changed = this.db.execute(`UPDATE durable_agents SET\n state = 'running', active_run_token = ?, active_owner_pid = ?, active_owner_started_at = ?,\n active_provider_pid = NULL, active_provider_started_at = NULL, active_run_started_at = ?, updated_at = ?,\n session_health = CASE WHEN state = 'running' THEN 'unknown' ELSE session_health END,\n last_result_status = CASE WHEN state = 'running' THEN 'interrupted' ELSE last_result_status END,\n last_result_completed_at = CASE WHEN state = 'running' THEN ? ELSE last_result_completed_at END,\n last_result_exit_code = CASE WHEN state = 'running' THEN NULL ELSE last_result_exit_code END,\n last_result_summary = CASE WHEN state = 'running' THEN 'Previous print run was interrupted.' ELSE last_result_summary END\n WHERE id = ? AND (state <> 'running' OR (\n active_run_token = ? AND active_owner_started_at = ? AND active_run_started_at = ?\n ))\n `, [token, owner.pid, owner.startedAt, startedAt, startedAt, startedAt, id,\n observed?.token ?? null, observed?.owner.startedAt ?? null, observed?.startedAt ?? null]);\n if (changed.changes !== 1) throw new DurableAgentBusyError(id, current.name);\n });\n } catch (error) {\n if (error instanceof DurableAgentBusyError || error instanceof DurableAgentNotFoundError) throw error;\n if (/busy|locked/i.test((error as Error).message)) throw new DurableAgentBusyError(id, snapshot.name);\n throw this.storageError('Failed to acquire durable-agent run', error);\n }\n const agent = this.requireById(id);\n if (recovered && agent.lastResult?.status !== 'interrupted') {\n throw new DurableAgentRepositoryError('Failed to record interrupted print run.');\n }\n return { agent, token };\n }\n\n async recordProviderProcess(id: string, token: string, identity: ProcessIdentity): Promise<void> {\n this.assertWritable();\n const changed = this.db.execute(`UPDATE durable_agents SET\n active_provider_pid = ?, active_provider_started_at = ?, updated_at = ?\n WHERE id = ? AND state = 'running' AND active_run_token = ?`,\n [identity.pid, identity.startedAt, this.now().toISOString(), id, token]);\n if (changed.changes !== 1) throw new DurableAgentRepositoryError('Print run ownership changed.');\n }\n\n async bindProviderSession(id: string, token: string, providerSessionId: string): Promise<DurableAgent> {\n this.assertWritable();\n if (!isUuid(providerSessionId)) {\n throw new DurableAgentRepositoryError('Invalid provider session id.');\n }\n try {\n this.immediate(() => {\n const agent = this.findById(id);\n if (!agent) throw new DurableAgentNotFoundError(id);\n if (agent.provider !== 'codex') {\n throw new DurableAgentRepositoryError('Only Codex durable sessions can be bound after creation.');\n }\n if (agent.activeRun?.token !== token) {\n throw new DurableAgentRepositoryError('Print run ownership changed.');\n }\n if (agent.providerSessionId !== null && agent.providerSessionId !== providerSessionId) {\n throw new CodexPrintError('Durable agent provider session identity does not match.', 'CODEX_SESSION_MISMATCH');\n }\n if (agent.providerSessionId === providerSessionId) return;\n const changed = this.db.execute(`UPDATE durable_agents SET provider_session_id = ?, updated_at = ?\n WHERE id = ? AND provider = 'codex' AND state = 'running' AND active_run_token = ?\n AND provider_session_id IS NULL`,\n [providerSessionId, this.now().toISOString(), id, token]);\n if (changed.changes !== 1) throw new DurableAgentRepositoryError('Print run ownership changed.');\n });\n } catch (error) {\n if (error instanceof DurableAgentRepositoryError || error instanceof DurableAgentNotFoundError\n || error instanceof CodexPrintError) throw error;\n if (/UNIQUE constraint failed: durable_agents\\.provider_session_id/i.test((error as Error).message)) {\n throw new CodexPrintError('Provider session is already bound to another durable agent.', 'CODEX_SESSION_MISMATCH');\n }\n throw this.storageError('Failed to bind durable-agent provider session', error);\n }\n return this.requireById(id);\n }\n\n async completeRun(id: string, token: string, result: DurableRunCompletion): Promise<DurableAgent> {\n this.assertWritable();\n const completedAt = this.now().toISOString();\n const changed = this.db.execute(`UPDATE durable_agents SET\n state = ?, session_health = ?, active_run_token = NULL, active_owner_pid = NULL,\n active_owner_started_at = NULL, active_provider_pid = NULL, active_provider_started_at = NULL,\n active_run_started_at = NULL, last_active_at = ?, updated_at = ?, last_result_status = ?,\n last_result_completed_at = ?, last_result_exit_code = ?, last_result_summary = ?\n WHERE id = ? AND state = 'running' AND active_run_token = ?`, [\n result.status === 'succeeded' ? 'ready' : 'degraded', result.sessionHealth, completedAt, completedAt,\n result.status, completedAt, result.exitCode, result.summary.slice(0, 4096), id, token,\n ]);\n if (changed.changes !== 1) throw new DurableAgentRepositoryError('Print run ownership changed.');\n return this.requireById(id);\n }\n\n async reconcile(): Promise<void> {\n this.assertWritable();\n const running = this.listRaw().filter((agent) => agent.state === 'running' && agent.activeRun);\n for (const snapshot of running) {\n if (this.isActive(snapshot.activeRun!)) continue;\n const completedAt = this.now().toISOString();\n this.db.execute(`UPDATE durable_agents SET\n state = 'degraded', session_health = 'unknown', active_run_token = NULL,\n active_owner_pid = NULL, active_owner_started_at = NULL, active_provider_pid = NULL,\n active_provider_started_at = NULL, active_run_started_at = NULL, updated_at = ?, last_active_at = ?,\n last_result_status = 'interrupted', last_result_completed_at = ?, last_result_exit_code = NULL,\n last_result_summary = 'Previous print run was interrupted.'\n WHERE id = ? AND state = 'running' AND active_run_token = ?\n AND active_owner_started_at = ? AND active_run_started_at = ?`, [\n completedAt, completedAt, completedAt, snapshot.id, snapshot.activeRun!.token,\n snapshot.activeRun!.owner.startedAt, snapshot.activeRun!.startedAt,\n ]);\n }\n }\n\n private immediate<T>(operation: () => T): T {\n this.db.instance.exec('BEGIN IMMEDIATE');\n try {\n const result = operation();\n this.db.instance.exec('COMMIT');\n return result;\n } catch (error) {\n try { this.db.instance.exec('ROLLBACK'); } catch { /* retain original failure */ }\n throw error;\n }\n }\n\n private listRaw(): DurableAgent[] {\n try {\n return this.db.query<DurableAgentRow>(\n 'SELECT * FROM durable_agents ORDER BY updated_at DESC, name COLLATE NOCASE',\n ).map((row) => this.fromRow(row));\n } catch (error) {\n throw this.storageError('Failed to read durable-agent database', error);\n }\n }\n\n private findById(id: string): DurableAgent | null {\n const row = this.db.queryOne<DurableAgentRow>('SELECT * FROM durable_agents WHERE id = ?', [id]);\n return row ? this.fromRow(row) : null;\n }\n\n private requireById(id: string): DurableAgent {\n const agent = this.findById(id);\n if (!agent) throw new DurableAgentNotFoundError(id);\n return agent;\n }\n\n private fromRow(row: DurableAgentRow): DurableAgent {\n if (!['claude', 'codex', 'pi'].includes(row.provider)\n || (row.provider !== 'codex' && row.provider_session_id === null)) {\n throw new DurableAgentRepositoryError(`Invalid durable-agent provider record: ${row.id}`);\n }\n const activeRun: DurableActiveRun | null = row.active_run_token === null ? null : {\n token: row.active_run_token,\n owner: { pid: row.active_owner_pid!, startedAt: row.active_owner_started_at! },\n provider: row.active_provider_pid === null ? null : {\n pid: row.active_provider_pid, startedAt: row.active_provider_started_at!,\n },\n startedAt: row.active_run_started_at!,\n };\n const base = {\n id: row.id, name: row.name, provider: row.provider, mode: row.mode, cwd: row.cwd,\n state: row.state, sessionHealth: row.session_health,\n createdAt: row.created_at, updatedAt: row.updated_at, lastActiveAt: row.last_active_at,\n lastResult: row.last_result_status === null ? null : {\n status: row.last_result_status, completedAt: row.last_result_completed_at!,\n exitCode: row.last_result_exit_code, summary: row.last_result_summary ?? '',\n },\n activeRun,\n };\n if (row.provider === 'claude') {\n return { ...base, provider: 'claude', providerSessionId: row.provider_session_id! };\n }\n if (row.provider === 'pi') {\n return { ...base, provider: 'pi', providerSessionId: row.provider_session_id! };\n }\n return { ...base, provider: 'codex', providerSessionId: row.provider_session_id };\n }\n\n private canonicalDirectory(input: string): string {\n try {\n const resolved = fs.realpathSync(input);\n if (!fs.statSync(resolved).isDirectory()) throw new Error('not a directory');\n return resolved;\n } catch {\n throw new DurableAgentRepositoryError(`Durable agent cwd is not an existing directory: ${input}`);\n }\n }\n\n private validateBoundCwd(bound: string): void {\n try {\n const stat = fs.lstatSync(bound);\n if (!stat.isDirectory() || stat.isSymbolicLink() || fs.realpathSync(bound) !== bound) throw new Error('binding changed');\n } catch {\n throw new DurableAgentRepositoryError(`Durable agent cwd binding is no longer safe: ${bound}`);\n }\n }\n\n private isActive(metadata: DurableActiveRun): boolean {\n return this.sameProcess(metadata.owner) || (metadata.provider !== null && this.sameProcess(metadata.provider));\n }\n\n private sameProcess(expected: ProcessIdentity): boolean {\n const actual = this.processInspector.getIdentity(expected.pid);\n return actual !== null && actual.startedAt === expected.startedAt;\n }\n\n private assertWritable(): void {\n if (this.readonly) throw new DurableAgentRepositoryError('Durable-agent repository is readonly.');\n }\n\n private storageError(prefix: string, error: unknown): DurableAgentRepositoryError {\n return error instanceof DurableAgentRepositoryError ? error\n : new DurableAgentRepositoryError(`${prefix}: ${(error as Error).message}`);\n }\n}\n"],"names":["fs","randomUUID","DatabaseConnection","DEFAULT_AGENT_REGISTRY_DB_PATH","AGENT_MODES","CodexPrintError","LocalProcessInspector","isUuid","DurableAgentBusyError","DurableAgentNameConflictError","DurableAgentNotFoundError","DurableAgentRepositoryError","DurableAgentRepository","dbPath","now","processInspector","readonly","db","options","Date","error","message","create","input","assertWritable","cwd","canonicalDirectory","timestamp","toISOString","id","provider","providerSessionId","execute","name","DURABLE","test","storageError","requireById","list","reconcile","listRaw","getById","findById","resolve","reference","agents","byId","find","agent","matches","filter","toLowerCase","length","acquireRun","snapshot","validateBoundCwd","observed","activeRun","observedLive","isActive","owner","getIdentity","process","pid","token","startedAt","recovered","immediate","current","state","changed","changes","lastResult","status","recordProviderProcess","identity","bindProviderSession","completeRun","result","completedAt","sessionHealth","exitCode","summary","slice","running","operation","instance","exec","query","map","row","fromRow","queryOne","includes","provider_session_id","active_run_token","active_owner_pid","active_owner_started_at","active_provider_pid","active_provider_started_at","active_run_started_at","base","mode","session_health","createdAt","created_at","updatedAt","updated_at","lastActiveAt","last_active_at","last_result_status","last_result_completed_at","last_result_exit_code","last_result_summary","resolved","realpathSync","statSync","isDirectory","Error","bound","stat","lstatSync","isSymbolicLink","metadata","sameProcess","expected","actual","prefix"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/durable/DurableAgentRepository.ts"],"sourcesContent":["import fs from \"fs\";\nimport { randomUUID } from \"crypto\";\nimport { DatabaseConnection, DEFAULT_AGENT_REGISTRY_DB_PATH } from \"../database/index.js\";\nimport {\n AGENT_MODES,\n CodexPrintError,\n type DurableActiveRun,\n type DurableAgent,\n type DurableProvider,\n type ProcessIdentity,\n type DurableRunStatus,\n type DurableSessionHealth,\n} from \"./DurableAgent.js\";\nimport { LocalProcessInspector, type ProcessInspector } from \"./process.js\";\nimport { isUuid } from \"./utils.js\";\nimport {\n DurableAgentBusyError,\n DurableAgentNameConflictError,\n DurableAgentNotFoundError,\n DurableAgentRepositoryError,\n} from \"./DurableAgent.js\";\n\ninterface DurableAgentRow {\n id: string;\n name: string;\n provider: DurableProvider;\n mode: typeof AGENT_MODES.DURABLE;\n cwd: string;\n provider_session_id: string | null;\n state: DurableAgent[\"state\"];\n session_health: DurableSessionHealth;\n created_at: string;\n updated_at: string;\n last_active_at: string | null;\n last_result_status: DurableRunStatus | null;\n last_result_completed_at: string | null;\n last_result_exit_code: number | null;\n last_result_summary: string | null;\n active_run_token: string | null;\n active_owner_pid: number | null;\n active_owner_started_at: string | null;\n active_provider_pid: number | null;\n active_provider_started_at: string | null;\n active_run_started_at: string | null;\n}\n\nexport interface CreateDurableAgentInput {\n name: string;\n cwd: string;\n provider?: DurableProvider;\n}\n\nexport interface DurableAgentRepositoryOptions {\n dbPath?: string;\n readonly?: boolean;\n /** @deprecated SQLite busy_timeout replaces filesystem lock polling. */\n lockTimeoutMs?: number;\n now?: () => Date;\n processInspector?: ProcessInspector;\n /** @deprecated Active ownership is committed atomically. */\n incompleteLockGraceMs?: number;\n /** @deprecated SQLite transactions replace mutation lock directories. */\n mutationLockStaleMs?: number;\n}\n\nexport { LocalProcessInspector } from \"./process.js\";\nexport type { ProcessInspector } from \"./process.js\";\nexport interface DurableRunCompletion {\n status: DurableRunStatus;\n exitCode: number | null;\n summary: string;\n sessionHealth: DurableSessionHealth;\n}\n\nexport class DurableAgentRepository {\n readonly dbPath: string;\n private readonly now: () => Date;\n private readonly processInspector: ProcessInspector;\n private readonly readonly: boolean;\n private readonly db: DatabaseConnection;\n\n constructor(options: DurableAgentRepositoryOptions = {}) {\n this.dbPath = options.dbPath ?? DEFAULT_AGENT_REGISTRY_DB_PATH;\n this.now = options.now ?? (() => new Date());\n this.processInspector = options.processInspector ?? new LocalProcessInspector();\n this.readonly = options.readonly ?? false;\n try {\n this.db = new DatabaseConnection({ dbPath: this.dbPath, readonly: this.readonly });\n } catch (error) {\n if (error instanceof DurableAgentRepositoryError) throw error;\n throw new DurableAgentRepositoryError(\n `Cannot open durable-agent database: ${(error as Error).message}`,\n );\n }\n }\n\n async create(input: CreateDurableAgentInput): Promise<DurableAgent> {\n this.assertWritable();\n const cwd = this.canonicalDirectory(input.cwd);\n const timestamp = this.now().toISOString();\n const id = randomUUID();\n const provider = input.provider ?? \"claude\";\n let providerSessionId = provider === \"codex\" ? null : randomUUID();\n while (providerSessionId === id) providerSessionId = randomUUID();\n try {\n this.db.execute(\n `INSERT INTO durable_agents (\n id, name, provider, mode, cwd, provider_session_id, state, session_health, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, 'ready', 'uninitialized', ?, ?)`,\n [\n id,\n input.name,\n provider,\n AGENT_MODES.DURABLE,\n cwd,\n providerSessionId,\n timestamp,\n timestamp,\n ],\n );\n } catch (error) {\n if (/UNIQUE constraint failed: durable_agents\\.name/i.test((error as Error).message)) {\n throw new DurableAgentNameConflictError(input.name);\n }\n throw this.storageError(\"Failed to create durable agent\", error);\n }\n return this.requireById(id);\n }\n\n async list(): Promise<DurableAgent[]> {\n if (!this.readonly) await this.reconcile();\n return this.listRaw();\n }\n\n async getById(id: string): Promise<DurableAgent | null> {\n if (!this.readonly) await this.reconcile();\n return this.findById(id);\n }\n\n async resolve(reference: string): Promise<DurableAgent | DurableAgent[] | null> {\n const agents = await this.list();\n const byId = agents.find((agent) => agent.id === reference);\n if (byId) return byId;\n const matches = agents.filter((agent) => agent.name.toLowerCase() === reference.toLowerCase());\n return matches.length === 0 ? null : matches.length === 1 ? matches[0]! : matches;\n }\n\n async acquireRun(id: string): Promise<{ agent: DurableAgent; token: string }> {\n this.assertWritable();\n const snapshot = this.findById(id);\n if (!snapshot) throw new DurableAgentNotFoundError(id);\n this.validateBoundCwd(snapshot.cwd);\n const observed = snapshot.activeRun;\n const observedLive = observed ? this.isActive(observed) : false;\n if (observedLive) throw new DurableAgentBusyError(id, snapshot.name);\n const owner = this.processInspector.getIdentity(process.pid);\n if (!owner)\n throw new DurableAgentRepositoryError(\"Cannot determine the current process identity.\");\n const token = randomUUID();\n const startedAt = this.now().toISOString();\n let recovered = false;\n try {\n this.immediate(() => {\n const current = this.findById(id);\n if (!current) throw new DurableAgentNotFoundError(id);\n if (current.state === \"running\") {\n if (!observed || current.activeRun?.token !== observed.token || observedLive) {\n throw new DurableAgentBusyError(id, current.name);\n }\n recovered = true;\n }\n const changed = this.db.execute(\n `UPDATE durable_agents SET\n state = 'running', active_run_token = ?, active_owner_pid = ?, active_owner_started_at = ?,\n active_provider_pid = NULL, active_provider_started_at = NULL, active_run_started_at = ?, updated_at = ?,\n session_health = CASE WHEN state = 'running' THEN 'unknown' ELSE session_health END,\n last_result_status = CASE WHEN state = 'running' THEN 'interrupted' ELSE last_result_status END,\n last_result_completed_at = CASE WHEN state = 'running' THEN ? ELSE last_result_completed_at END,\n last_result_exit_code = CASE WHEN state = 'running' THEN NULL ELSE last_result_exit_code END,\n last_result_summary = CASE WHEN state = 'running' THEN 'Previous print run was interrupted.' ELSE last_result_summary END\n WHERE id = ? AND (state <> 'running' OR (\n active_run_token = ? AND active_owner_started_at = ? AND active_run_started_at = ?\n ))\n `,\n [\n token,\n owner.pid,\n owner.startedAt,\n startedAt,\n startedAt,\n startedAt,\n id,\n observed?.token ?? null,\n observed?.owner.startedAt ?? null,\n observed?.startedAt ?? null,\n ],\n );\n if (changed.changes !== 1) throw new DurableAgentBusyError(id, current.name);\n });\n } catch (error) {\n if (error instanceof DurableAgentBusyError || error instanceof DurableAgentNotFoundError)\n throw error;\n if (/busy|locked/i.test((error as Error).message))\n throw new DurableAgentBusyError(id, snapshot.name);\n throw this.storageError(\"Failed to acquire durable-agent run\", error);\n }\n const agent = this.requireById(id);\n if (recovered && agent.lastResult?.status !== \"interrupted\") {\n throw new DurableAgentRepositoryError(\"Failed to record interrupted print run.\");\n }\n return { agent, token };\n }\n\n async recordProviderProcess(id: string, token: string, identity: ProcessIdentity): Promise<void> {\n this.assertWritable();\n const changed = this.db.execute(\n `UPDATE durable_agents SET\n active_provider_pid = ?, active_provider_started_at = ?, updated_at = ?\n WHERE id = ? AND state = 'running' AND active_run_token = ?`,\n [identity.pid, identity.startedAt, this.now().toISOString(), id, token],\n );\n if (changed.changes !== 1)\n throw new DurableAgentRepositoryError(\"Print run ownership changed.\");\n }\n\n async bindProviderSession(\n id: string,\n token: string,\n providerSessionId: string,\n ): Promise<DurableAgent> {\n this.assertWritable();\n if (!isUuid(providerSessionId)) {\n throw new DurableAgentRepositoryError(\"Invalid provider session id.\");\n }\n try {\n this.immediate(() => {\n const agent = this.findById(id);\n if (!agent) throw new DurableAgentNotFoundError(id);\n if (agent.provider !== \"codex\") {\n throw new DurableAgentRepositoryError(\n \"Only Codex durable sessions can be bound after creation.\",\n );\n }\n if (agent.activeRun?.token !== token) {\n throw new DurableAgentRepositoryError(\"Print run ownership changed.\");\n }\n if (agent.providerSessionId !== null && agent.providerSessionId !== providerSessionId) {\n throw new CodexPrintError(\n \"Durable agent provider session identity does not match.\",\n \"CODEX_SESSION_MISMATCH\",\n );\n }\n if (agent.providerSessionId === providerSessionId) return;\n const changed = this.db.execute(\n `UPDATE durable_agents SET provider_session_id = ?, updated_at = ?\n WHERE id = ? AND provider = 'codex' AND state = 'running' AND active_run_token = ?\n AND provider_session_id IS NULL`,\n [providerSessionId, this.now().toISOString(), id, token],\n );\n if (changed.changes !== 1)\n throw new DurableAgentRepositoryError(\"Print run ownership changed.\");\n });\n } catch (error) {\n if (\n error instanceof DurableAgentRepositoryError ||\n error instanceof DurableAgentNotFoundError ||\n error instanceof CodexPrintError\n )\n throw error;\n if (\n /UNIQUE constraint failed: durable_agents\\.provider_session_id/i.test(\n (error as Error).message,\n )\n ) {\n throw new CodexPrintError(\n \"Provider session is already bound to another durable agent.\",\n \"CODEX_SESSION_MISMATCH\",\n );\n }\n throw this.storageError(\"Failed to bind durable-agent provider session\", error);\n }\n return this.requireById(id);\n }\n\n async completeRun(\n id: string,\n token: string,\n result: DurableRunCompletion,\n ): Promise<DurableAgent> {\n this.assertWritable();\n const completedAt = this.now().toISOString();\n const changed = this.db.execute(\n `UPDATE durable_agents SET\n state = ?, session_health = ?, active_run_token = NULL, active_owner_pid = NULL,\n active_owner_started_at = NULL, active_provider_pid = NULL, active_provider_started_at = NULL,\n active_run_started_at = NULL, last_active_at = ?, updated_at = ?, last_result_status = ?,\n last_result_completed_at = ?, last_result_exit_code = ?, last_result_summary = ?\n WHERE id = ? AND state = 'running' AND active_run_token = ?`,\n [\n result.status === \"succeeded\" ? \"ready\" : \"degraded\",\n result.sessionHealth,\n completedAt,\n completedAt,\n result.status,\n completedAt,\n result.exitCode,\n result.summary.slice(0, 4096),\n id,\n token,\n ],\n );\n if (changed.changes !== 1)\n throw new DurableAgentRepositoryError(\"Print run ownership changed.\");\n return this.requireById(id);\n }\n\n async reconcile(): Promise<void> {\n this.assertWritable();\n const running = this.listRaw().filter((agent) => agent.state === \"running\" && agent.activeRun);\n for (const snapshot of running) {\n if (this.isActive(snapshot.activeRun!)) continue;\n const completedAt = this.now().toISOString();\n this.db.execute(\n `UPDATE durable_agents SET\n state = 'degraded', session_health = 'unknown', active_run_token = NULL,\n active_owner_pid = NULL, active_owner_started_at = NULL, active_provider_pid = NULL,\n active_provider_started_at = NULL, active_run_started_at = NULL, updated_at = ?, last_active_at = ?,\n last_result_status = 'interrupted', last_result_completed_at = ?, last_result_exit_code = NULL,\n last_result_summary = 'Previous print run was interrupted.'\n WHERE id = ? AND state = 'running' AND active_run_token = ?\n AND active_owner_started_at = ? AND active_run_started_at = ?`,\n [\n completedAt,\n completedAt,\n completedAt,\n snapshot.id,\n snapshot.activeRun!.token,\n snapshot.activeRun!.owner.startedAt,\n snapshot.activeRun!.startedAt,\n ],\n );\n }\n }\n\n private immediate<T>(operation: () => T): T {\n this.db.instance.exec(\"BEGIN IMMEDIATE\");\n try {\n const result = operation();\n this.db.instance.exec(\"COMMIT\");\n return result;\n } catch (error) {\n try {\n this.db.instance.exec(\"ROLLBACK\");\n } catch {\n /* retain original failure */\n }\n throw error;\n }\n }\n\n private listRaw(): DurableAgent[] {\n try {\n return this.db\n .query<DurableAgentRow>(\n \"SELECT * FROM durable_agents ORDER BY updated_at DESC, name COLLATE NOCASE\",\n )\n .map((row) => this.fromRow(row));\n } catch (error) {\n throw this.storageError(\"Failed to read durable-agent database\", error);\n }\n }\n\n private findById(id: string): DurableAgent | null {\n const row = this.db.queryOne<DurableAgentRow>(\"SELECT * FROM durable_agents WHERE id = ?\", [\n id,\n ]);\n return row ? this.fromRow(row) : null;\n }\n\n private requireById(id: string): DurableAgent {\n const agent = this.findById(id);\n if (!agent) throw new DurableAgentNotFoundError(id);\n return agent;\n }\n\n private fromRow(row: DurableAgentRow): DurableAgent {\n if (\n ![\"claude\", \"codex\", \"pi\"].includes(row.provider) ||\n (row.provider !== \"codex\" && row.provider_session_id === null)\n ) {\n throw new DurableAgentRepositoryError(`Invalid durable-agent provider record: ${row.id}`);\n }\n const activeRun: DurableActiveRun | null =\n row.active_run_token === null\n ? null\n : {\n token: row.active_run_token,\n owner: { pid: row.active_owner_pid!, startedAt: row.active_owner_started_at! },\n provider:\n row.active_provider_pid === null\n ? null\n : {\n pid: row.active_provider_pid,\n startedAt: row.active_provider_started_at!,\n },\n startedAt: row.active_run_started_at!,\n };\n const base = {\n id: row.id,\n name: row.name,\n provider: row.provider,\n mode: row.mode,\n cwd: row.cwd,\n state: row.state,\n sessionHealth: row.session_health,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n lastActiveAt: row.last_active_at,\n lastResult:\n row.last_result_status === null\n ? null\n : {\n status: row.last_result_status,\n completedAt: row.last_result_completed_at!,\n exitCode: row.last_result_exit_code,\n summary: row.last_result_summary ?? \"\",\n },\n activeRun,\n };\n if (row.provider === \"claude\") {\n return { ...base, provider: \"claude\", providerSessionId: row.provider_session_id! };\n }\n if (row.provider === \"pi\") {\n return { ...base, provider: \"pi\", providerSessionId: row.provider_session_id! };\n }\n return { ...base, provider: \"codex\", providerSessionId: row.provider_session_id };\n }\n\n private canonicalDirectory(input: string): string {\n try {\n const resolved = fs.realpathSync(input);\n if (!fs.statSync(resolved).isDirectory()) throw new Error(\"not a directory\");\n return resolved;\n } catch {\n throw new DurableAgentRepositoryError(\n `Durable agent cwd is not an existing directory: ${input}`,\n );\n }\n }\n\n private validateBoundCwd(bound: string): void {\n try {\n const stat = fs.lstatSync(bound);\n if (!stat.isDirectory() || stat.isSymbolicLink() || fs.realpathSync(bound) !== bound)\n throw new Error(\"binding changed\");\n } catch {\n throw new DurableAgentRepositoryError(\n `Durable agent cwd binding is no longer safe: ${bound}`,\n );\n }\n }\n\n private isActive(metadata: DurableActiveRun): boolean {\n return (\n this.sameProcess(metadata.owner) ||\n (metadata.provider !== null && this.sameProcess(metadata.provider))\n );\n }\n\n private sameProcess(expected: ProcessIdentity): boolean {\n const actual = this.processInspector.getIdentity(expected.pid);\n return actual !== null && actual.startedAt === expected.startedAt;\n }\n\n private assertWritable(): void {\n if (this.readonly)\n throw new DurableAgentRepositoryError(\"Durable-agent repository is readonly.\");\n }\n\n private storageError(prefix: string, error: unknown): DurableAgentRepositoryError {\n return error instanceof DurableAgentRepositoryError\n ? error\n : new DurableAgentRepositoryError(`${prefix}: ${(error as Error).message}`);\n }\n}\n"],"names":["fs","randomUUID","DatabaseConnection","DEFAULT_AGENT_REGISTRY_DB_PATH","AGENT_MODES","CodexPrintError","LocalProcessInspector","isUuid","DurableAgentBusyError","DurableAgentNameConflictError","DurableAgentNotFoundError","DurableAgentRepositoryError","DurableAgentRepository","dbPath","now","processInspector","readonly","db","options","Date","error","message","create","input","assertWritable","cwd","canonicalDirectory","timestamp","toISOString","id","provider","providerSessionId","execute","name","DURABLE","test","storageError","requireById","list","reconcile","listRaw","getById","findById","resolve","reference","agents","byId","find","agent","matches","filter","toLowerCase","length","acquireRun","snapshot","validateBoundCwd","observed","activeRun","observedLive","isActive","owner","getIdentity","process","pid","token","startedAt","recovered","immediate","current","state","changed","changes","lastResult","status","recordProviderProcess","identity","bindProviderSession","completeRun","result","completedAt","sessionHealth","exitCode","summary","slice","running","operation","instance","exec","query","map","row","fromRow","queryOne","includes","provider_session_id","active_run_token","active_owner_pid","active_owner_started_at","active_provider_pid","active_provider_started_at","active_run_started_at","base","mode","session_health","createdAt","created_at","updatedAt","updated_at","lastActiveAt","last_active_at","last_result_status","last_result_completed_at","last_result_exit_code","last_result_summary","resolved","realpathSync","statSync","isDirectory","Error","bound","stat","lstatSync","isSymbolicLink","metadata","sameProcess","expected","actual","prefix"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,SAASC,UAAU,QAAQ,SAAS;AACpC,SAASC,kBAAkB,EAAEC,8BAA8B,QAAQ,uBAAuB;AAC1F,SACEC,WAAW,EACXC,eAAe,QAOV,oBAAoB;AAC3B,SAASC,qBAAqB,QAA+B,eAAe;AAC5E,SAASC,MAAM,QAAQ,aAAa;AACpC,SACEC,qBAAqB,EACrBC,6BAA6B,EAC7BC,yBAAyB,EACzBC,2BAA2B,QACtB,oBAAoB;AA6C3B,SAASL,qBAAqB,QAAQ,eAAe;AASrD,OAAO,MAAMM;IACFC,OAAe;IACPC,IAAgB;IAChBC,iBAAmC;IACnCC,SAAkB;IAClBC,GAAuB;IAExC,YAAYC,UAAyC,CAAC,CAAC,CAAE;QACvD,IAAI,CAACL,MAAM,GAAGK,QAAQL,MAAM,IAAIV;QAChC,IAAI,CAACW,GAAG,GAAGI,QAAQJ,GAAG,IAAK,CAAA,IAAM,IAAIK,MAAK;QAC1C,IAAI,CAACJ,gBAAgB,GAAGG,QAAQH,gBAAgB,IAAI,IAAIT;QACxD,IAAI,CAACU,QAAQ,GAAGE,QAAQF,QAAQ,IAAI;QACpC,IAAI;YACF,IAAI,CAACC,EAAE,GAAG,IAAIf,mBAAmB;gBAAEW,QAAQ,IAAI,CAACA,MAAM;gBAAEG,UAAU,IAAI,CAACA,QAAQ;YAAC;QAClF,EAAE,OAAOI,OAAO;YACd,IAAIA,iBAAiBT,6BAA6B,MAAMS;YACxD,MAAM,IAAIT,4BACR,CAAC,oCAAoC,EAAE,AAACS,MAAgBC,OAAO,EAAE;QAErE;IACF;IAEA,MAAMC,OAAOC,KAA8B,EAAyB;QAClE,IAAI,CAACC,cAAc;QACnB,MAAMC,MAAM,IAAI,CAACC,kBAAkB,CAACH,MAAME,GAAG;QAC7C,MAAME,YAAY,IAAI,CAACb,GAAG,GAAGc,WAAW;QACxC,MAAMC,KAAK5B;QACX,MAAM6B,WAAWP,MAAMO,QAAQ,IAAI;QACnC,IAAIC,oBAAoBD,aAAa,UAAU,OAAO7B;QACtD,MAAO8B,sBAAsBF,GAAIE,oBAAoB9B;QACrD,IAAI;YACF,IAAI,CAACgB,EAAE,CAACe,OAAO,CACb,CAAC;;uEAE8D,CAAC,EAChE;gBACEH;gBACAN,MAAMU,IAAI;gBACVH;gBACA1B,YAAY8B,OAAO;gBACnBT;gBACAM;gBACAJ;gBACAA;aACD;QAEL,EAAE,OAAOP,OAAO;YACd,IAAI,kDAAkDe,IAAI,CAAC,AAACf,MAAgBC,OAAO,GAAG;gBACpF,MAAM,IAAIZ,8BAA8Bc,MAAMU,IAAI;YACpD;YACA,MAAM,IAAI,CAACG,YAAY,CAAC,kCAAkChB;QAC5D;QACA,OAAO,IAAI,CAACiB,WAAW,CAACR;IAC1B;IAEA,MAAMS,OAAgC;QACpC,IAAI,CAAC,IAAI,CAACtB,QAAQ,EAAE,MAAM,IAAI,CAACuB,SAAS;QACxC,OAAO,IAAI,CAACC,OAAO;IACrB;IAEA,MAAMC,QAAQZ,EAAU,EAAgC;QACtD,IAAI,CAAC,IAAI,CAACb,QAAQ,EAAE,MAAM,IAAI,CAACuB,SAAS;QACxC,OAAO,IAAI,CAACG,QAAQ,CAACb;IACvB;IAEA,MAAMc,QAAQC,SAAiB,EAAiD;QAC9E,MAAMC,SAAS,MAAM,IAAI,CAACP,IAAI;QAC9B,MAAMQ,OAAOD,OAAOE,IAAI,CAAC,CAACC,QAAUA,MAAMnB,EAAE,KAAKe;QACjD,IAAIE,MAAM,OAAOA;QACjB,MAAMG,UAAUJ,OAAOK,MAAM,CAAC,CAACF,QAAUA,MAAMf,IAAI,CAACkB,WAAW,OAAOP,UAAUO,WAAW;QAC3F,OAAOF,QAAQG,MAAM,KAAK,IAAI,OAAOH,QAAQG,MAAM,KAAK,IAAIH,OAAO,CAAC,EAAE,GAAIA;IAC5E;IAEA,MAAMI,WAAWxB,EAAU,EAAmD;QAC5E,IAAI,CAACL,cAAc;QACnB,MAAM8B,WAAW,IAAI,CAACZ,QAAQ,CAACb;QAC/B,IAAI,CAACyB,UAAU,MAAM,IAAI5C,0BAA0BmB;QACnD,IAAI,CAAC0B,gBAAgB,CAACD,SAAS7B,GAAG;QAClC,MAAM+B,WAAWF,SAASG,SAAS;QACnC,MAAMC,eAAeF,WAAW,IAAI,CAACG,QAAQ,CAACH,YAAY;QAC1D,IAAIE,cAAc,MAAM,IAAIlD,sBAAsBqB,IAAIyB,SAASrB,IAAI;QACnE,MAAM2B,QAAQ,IAAI,CAAC7C,gBAAgB,CAAC8C,WAAW,CAACC,QAAQC,GAAG;QAC3D,IAAI,CAACH,OACH,MAAM,IAAIjD,4BAA4B;QACxC,MAAMqD,QAAQ/D;QACd,MAAMgE,YAAY,IAAI,CAACnD,GAAG,GAAGc,WAAW;QACxC,IAAIsC,YAAY;QAChB,IAAI;YACF,IAAI,CAACC,SAAS,CAAC;gBACb,MAAMC,UAAU,IAAI,CAAC1B,QAAQ,CAACb;gBAC9B,IAAI,CAACuC,SAAS,MAAM,IAAI1D,0BAA0BmB;gBAClD,IAAIuC,QAAQC,KAAK,KAAK,WAAW;oBAC/B,IAAI,CAACb,YAAYY,QAAQX,SAAS,EAAEO,UAAUR,SAASQ,KAAK,IAAIN,cAAc;wBAC5E,MAAM,IAAIlD,sBAAsBqB,IAAIuC,QAAQnC,IAAI;oBAClD;oBACAiC,YAAY;gBACd;gBACA,MAAMI,UAAU,IAAI,CAACrD,EAAE,CAACe,OAAO,CAC7B,CAAC;;;;;;;;;;;gBAWK,CAAC,EACP;oBACEgC;oBACAJ,MAAMG,GAAG;oBACTH,MAAMK,SAAS;oBACfA;oBACAA;oBACAA;oBACApC;oBACA2B,UAAUQ,SAAS;oBACnBR,UAAUI,MAAMK,aAAa;oBAC7BT,UAAUS,aAAa;iBACxB;gBAEH,IAAIK,QAAQC,OAAO,KAAK,GAAG,MAAM,IAAI/D,sBAAsBqB,IAAIuC,QAAQnC,IAAI;YAC7E;QACF,EAAE,OAAOb,OAAO;YACd,IAAIA,iBAAiBZ,yBAAyBY,iBAAiBV,2BAC7D,MAAMU;YACR,IAAI,eAAee,IAAI,CAAC,AAACf,MAAgBC,OAAO,GAC9C,MAAM,IAAIb,sBAAsBqB,IAAIyB,SAASrB,IAAI;YACnD,MAAM,IAAI,CAACG,YAAY,CAAC,uCAAuChB;QACjE;QACA,MAAM4B,QAAQ,IAAI,CAACX,WAAW,CAACR;QAC/B,IAAIqC,aAAalB,MAAMwB,UAAU,EAAEC,WAAW,eAAe;YAC3D,MAAM,IAAI9D,4BAA4B;QACxC;QACA,OAAO;YAAEqC;YAAOgB;QAAM;IACxB;IAEA,MAAMU,sBAAsB7C,EAAU,EAAEmC,KAAa,EAAEW,QAAyB,EAAiB;QAC/F,IAAI,CAACnD,cAAc;QACnB,MAAM8C,UAAU,IAAI,CAACrD,EAAE,CAACe,OAAO,CAC7B,CAAC;;uEAEgE,CAAC,EAClE;YAAC2C,SAASZ,GAAG;YAAEY,SAASV,SAAS;YAAE,IAAI,CAACnD,GAAG,GAAGc,WAAW;YAAIC;YAAImC;SAAM;QAEzE,IAAIM,QAAQC,OAAO,KAAK,GACtB,MAAM,IAAI5D,4BAA4B;IAC1C;IAEA,MAAMiE,oBACJ/C,EAAU,EACVmC,KAAa,EACbjC,iBAAyB,EACF;QACvB,IAAI,CAACP,cAAc;QACnB,IAAI,CAACjB,OAAOwB,oBAAoB;YAC9B,MAAM,IAAIpB,4BAA4B;QACxC;QACA,IAAI;YACF,IAAI,CAACwD,SAAS,CAAC;gBACb,MAAMnB,QAAQ,IAAI,CAACN,QAAQ,CAACb;gBAC5B,IAAI,CAACmB,OAAO,MAAM,IAAItC,0BAA0BmB;gBAChD,IAAImB,MAAMlB,QAAQ,KAAK,SAAS;oBAC9B,MAAM,IAAInB,4BACR;gBAEJ;gBACA,IAAIqC,MAAMS,SAAS,EAAEO,UAAUA,OAAO;oBACpC,MAAM,IAAIrD,4BAA4B;gBACxC;gBACA,IAAIqC,MAAMjB,iBAAiB,KAAK,QAAQiB,MAAMjB,iBAAiB,KAAKA,mBAAmB;oBACrF,MAAM,IAAI1B,gBACR,2DACA;gBAEJ;gBACA,IAAI2C,MAAMjB,iBAAiB,KAAKA,mBAAmB;gBACnD,MAAMuC,UAAU,IAAI,CAACrD,EAAE,CAACe,OAAO,CAC7B,CAAC;;uDAE4C,CAAC,EAC9C;oBAACD;oBAAmB,IAAI,CAACjB,GAAG,GAAGc,WAAW;oBAAIC;oBAAImC;iBAAM;gBAE1D,IAAIM,QAAQC,OAAO,KAAK,GACtB,MAAM,IAAI5D,4BAA4B;YAC1C;QACF,EAAE,OAAOS,OAAO;YACd,IACEA,iBAAiBT,+BACjBS,iBAAiBV,6BACjBU,iBAAiBf,iBAEjB,MAAMe;YACR,IACE,iEAAiEe,IAAI,CACnE,AAACf,MAAgBC,OAAO,GAE1B;gBACA,MAAM,IAAIhB,gBACR,+DACA;YAEJ;YACA,MAAM,IAAI,CAAC+B,YAAY,CAAC,iDAAiDhB;QAC3E;QACA,OAAO,IAAI,CAACiB,WAAW,CAACR;IAC1B;IAEA,MAAMgD,YACJhD,EAAU,EACVmC,KAAa,EACbc,MAA4B,EACL;QACvB,IAAI,CAACtD,cAAc;QACnB,MAAMuD,cAAc,IAAI,CAACjE,GAAG,GAAGc,WAAW;QAC1C,MAAM0C,UAAU,IAAI,CAACrD,EAAE,CAACe,OAAO,CAC7B,CAAC;;;;;uEAKgE,CAAC,EAClE;YACE8C,OAAOL,MAAM,KAAK,cAAc,UAAU;YAC1CK,OAAOE,aAAa;YACpBD;YACAA;YACAD,OAAOL,MAAM;YACbM;YACAD,OAAOG,QAAQ;YACfH,OAAOI,OAAO,CAACC,KAAK,CAAC,GAAG;YACxBtD;YACAmC;SACD;QAEH,IAAIM,QAAQC,OAAO,KAAK,GACtB,MAAM,IAAI5D,4BAA4B;QACxC,OAAO,IAAI,CAAC0B,WAAW,CAACR;IAC1B;IAEA,MAAMU,YAA2B;QAC/B,IAAI,CAACf,cAAc;QACnB,MAAM4D,UAAU,IAAI,CAAC5C,OAAO,GAAGU,MAAM,CAAC,CAACF,QAAUA,MAAMqB,KAAK,KAAK,aAAarB,MAAMS,SAAS;QAC7F,KAAK,MAAMH,YAAY8B,QAAS;YAC9B,IAAI,IAAI,CAACzB,QAAQ,CAACL,SAASG,SAAS,GAAI;YACxC,MAAMsB,cAAc,IAAI,CAACjE,GAAG,GAAGc,WAAW;YAC1C,IAAI,CAACX,EAAE,CAACe,OAAO,CACb,CAAC;;;;;;;iFAOwE,CAAC,EAC1E;gBACE+C;gBACAA;gBACAA;gBACAzB,SAASzB,EAAE;gBACXyB,SAASG,SAAS,CAAEO,KAAK;gBACzBV,SAASG,SAAS,CAAEG,KAAK,CAACK,SAAS;gBACnCX,SAASG,SAAS,CAAEQ,SAAS;aAC9B;QAEL;IACF;IAEQE,UAAakB,SAAkB,EAAK;QAC1C,IAAI,CAACpE,EAAE,CAACqE,QAAQ,CAACC,IAAI,CAAC;QACtB,IAAI;YACF,MAAMT,SAASO;YACf,IAAI,CAACpE,EAAE,CAACqE,QAAQ,CAACC,IAAI,CAAC;YACtB,OAAOT;QACT,EAAE,OAAO1D,OAAO;YACd,IAAI;gBACF,IAAI,CAACH,EAAE,CAACqE,QAAQ,CAACC,IAAI,CAAC;YACxB,EAAE,OAAM;YACN,2BAA2B,GAC7B;YACA,MAAMnE;QACR;IACF;IAEQoB,UAA0B;QAChC,IAAI;YACF,OAAO,IAAI,CAACvB,EAAE,CACXuE,KAAK,CACJ,8EAEDC,GAAG,CAAC,CAACC,MAAQ,IAAI,CAACC,OAAO,CAACD;QAC/B,EAAE,OAAOtE,OAAO;YACd,MAAM,IAAI,CAACgB,YAAY,CAAC,yCAAyChB;QACnE;IACF;IAEQsB,SAASb,EAAU,EAAuB;QAChD,MAAM6D,MAAM,IAAI,CAACzE,EAAE,CAAC2E,QAAQ,CAAkB,6CAA6C;YACzF/D;SACD;QACD,OAAO6D,MAAM,IAAI,CAACC,OAAO,CAACD,OAAO;IACnC;IAEQrD,YAAYR,EAAU,EAAgB;QAC5C,MAAMmB,QAAQ,IAAI,CAACN,QAAQ,CAACb;QAC5B,IAAI,CAACmB,OAAO,MAAM,IAAItC,0BAA0BmB;QAChD,OAAOmB;IACT;IAEQ2C,QAAQD,GAAoB,EAAgB;QAClD,IACE,CAAC;YAAC;YAAU;YAAS;SAAK,CAACG,QAAQ,CAACH,IAAI5D,QAAQ,KAC/C4D,IAAI5D,QAAQ,KAAK,WAAW4D,IAAII,mBAAmB,KAAK,MACzD;YACA,MAAM,IAAInF,4BAA4B,CAAC,uCAAuC,EAAE+E,IAAI7D,EAAE,EAAE;QAC1F;QACA,MAAM4B,YACJiC,IAAIK,gBAAgB,KAAK,OACrB,OACA;YACE/B,OAAO0B,IAAIK,gBAAgB;YAC3BnC,OAAO;gBAAEG,KAAK2B,IAAIM,gBAAgB;gBAAG/B,WAAWyB,IAAIO,uBAAuB;YAAE;YAC7EnE,UACE4D,IAAIQ,mBAAmB,KAAK,OACxB,OACA;gBACEnC,KAAK2B,IAAIQ,mBAAmB;gBAC5BjC,WAAWyB,IAAIS,0BAA0B;YAC3C;YACNlC,WAAWyB,IAAIU,qBAAqB;QACtC;QACN,MAAMC,OAAO;YACXxE,IAAI6D,IAAI7D,EAAE;YACVI,MAAMyD,IAAIzD,IAAI;YACdH,UAAU4D,IAAI5D,QAAQ;YACtBwE,MAAMZ,IAAIY,IAAI;YACd7E,KAAKiE,IAAIjE,GAAG;YACZ4C,OAAOqB,IAAIrB,KAAK;YAChBW,eAAeU,IAAIa,cAAc;YACjCC,WAAWd,IAAIe,UAAU;YACzBC,WAAWhB,IAAIiB,UAAU;YACzBC,cAAclB,IAAImB,cAAc;YAChCrC,YACEkB,IAAIoB,kBAAkB,KAAK,OACvB,OACA;gBACErC,QAAQiB,IAAIoB,kBAAkB;gBAC9B/B,aAAaW,IAAIqB,wBAAwB;gBACzC9B,UAAUS,IAAIsB,qBAAqB;gBACnC9B,SAASQ,IAAIuB,mBAAmB,IAAI;YACtC;YACNxD;QACF;QACA,IAAIiC,IAAI5D,QAAQ,KAAK,UAAU;YAC7B,OAAO;gBAAE,GAAGuE,IAAI;gBAAEvE,UAAU;gBAAUC,mBAAmB2D,IAAII,mBAAmB;YAAE;QACpF;QACA,IAAIJ,IAAI5D,QAAQ,KAAK,MAAM;YACzB,OAAO;gBAAE,GAAGuE,IAAI;gBAAEvE,UAAU;gBAAMC,mBAAmB2D,IAAII,mBAAmB;YAAE;QAChF;QACA,OAAO;YAAE,GAAGO,IAAI;YAAEvE,UAAU;YAASC,mBAAmB2D,IAAII,mBAAmB;QAAC;IAClF;IAEQpE,mBAAmBH,KAAa,EAAU;QAChD,IAAI;YACF,MAAM2F,WAAWlH,GAAGmH,YAAY,CAAC5F;YACjC,IAAI,CAACvB,GAAGoH,QAAQ,CAACF,UAAUG,WAAW,IAAI,MAAM,IAAIC,MAAM;YAC1D,OAAOJ;QACT,EAAE,OAAM;YACN,MAAM,IAAIvG,4BACR,CAAC,gDAAgD,EAAEY,OAAO;QAE9D;IACF;IAEQgC,iBAAiBgE,KAAa,EAAQ;QAC5C,IAAI;YACF,MAAMC,OAAOxH,GAAGyH,SAAS,CAACF;YAC1B,IAAI,CAACC,KAAKH,WAAW,MAAMG,KAAKE,cAAc,MAAM1H,GAAGmH,YAAY,CAACI,WAAWA,OAC7E,MAAM,IAAID,MAAM;QACpB,EAAE,OAAM;YACN,MAAM,IAAI3G,4BACR,CAAC,6CAA6C,EAAE4G,OAAO;QAE3D;IACF;IAEQ5D,SAASgE,QAA0B,EAAW;QACpD,OACE,IAAI,CAACC,WAAW,CAACD,SAAS/D,KAAK,KAC9B+D,SAAS7F,QAAQ,KAAK,QAAQ,IAAI,CAAC8F,WAAW,CAACD,SAAS7F,QAAQ;IAErE;IAEQ8F,YAAYC,QAAyB,EAAW;QACtD,MAAMC,SAAS,IAAI,CAAC/G,gBAAgB,CAAC8C,WAAW,CAACgE,SAAS9D,GAAG;QAC7D,OAAO+D,WAAW,QAAQA,OAAO7D,SAAS,KAAK4D,SAAS5D,SAAS;IACnE;IAEQzC,iBAAuB;QAC7B,IAAI,IAAI,CAACR,QAAQ,EACf,MAAM,IAAIL,4BAA4B;IAC1C;IAEQyB,aAAa2F,MAAc,EAAE3G,KAAc,EAA+B;QAChF,OAAOA,iBAAiBT,8BACpBS,QACA,IAAIT,4BAA4B,GAAGoH,OAAO,EAAE,EAAE,AAAC3G,MAAgBC,OAAO,EAAE;IAC9E;AACF"}
@@ -1,4 +1,4 @@
1
- import type { ProcessIdentity } from './DurableAgent.js';
1
+ import type { ProcessIdentity } from "./DurableAgent.js";
2
2
  export interface ProcessInspector {
3
3
  getIdentity(pid: number): ProcessIdentity | null;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/durable/process.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC7B,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;CACpD;AAED,qBAAa,qBAAsB,YAAW,gBAAgB;IAC1D,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;CAkBnD"}
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/durable/process.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;CAClD;AAED,qBAAa,qBAAsB,YAAW,gBAAgB;IAC5D,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;CAmBjD"}
@@ -1,30 +1,30 @@
1
- import fs from 'fs';
2
- import { execFileSync } from 'child_process';
1
+ import fs from "fs";
2
+ import { execFileSync } from "child_process";
3
3
  export class LocalProcessInspector {
4
4
  getIdentity(pid) {
5
5
  if (!Number.isInteger(pid) || pid <= 0) return null;
6
6
  try {
7
- if (process.platform === 'linux') {
8
- const stat = fs.readFileSync(`/proc/${pid}/stat`, 'utf8');
9
- const close = stat.lastIndexOf(')');
10
- const fields = stat.slice(close + 2).split(' ');
7
+ if (process.platform === "linux") {
8
+ const stat = fs.readFileSync(`/proc/${pid}/stat`, "utf8");
9
+ const close = stat.lastIndexOf(")");
10
+ const fields = stat.slice(close + 2).split(" ");
11
11
  const startTicks = fields[19];
12
12
  return startTicks ? {
13
13
  pid,
14
14
  startedAt: `linux:${startTicks}`
15
15
  } : null;
16
16
  }
17
- const startedAt = execFileSync('ps', [
18
- '-o',
19
- 'lstart=',
20
- '-p',
17
+ const startedAt = execFileSync("ps", [
18
+ "-o",
19
+ "lstart=",
20
+ "-p",
21
21
  String(pid)
22
22
  ], {
23
- encoding: 'utf8',
23
+ encoding: "utf8",
24
24
  stdio: [
25
- 'ignore',
26
- 'pipe',
27
- 'ignore'
25
+ "ignore",
26
+ "pipe",
27
+ "ignore"
28
28
  ]
29
29
  }).trim();
30
30
  return startedAt ? {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/durable/process.ts"],"sourcesContent":["import fs from 'fs';\nimport { execFileSync } from 'child_process';\nimport type { ProcessIdentity } from './DurableAgent.js';\n\nexport interface ProcessInspector {\n getIdentity(pid: number): ProcessIdentity | null;\n}\n\nexport class LocalProcessInspector implements ProcessInspector {\n getIdentity(pid: number): ProcessIdentity | null {\n if (!Number.isInteger(pid) || pid <= 0) return null;\n try {\n if (process.platform === 'linux') {\n const stat = fs.readFileSync(`/proc/${pid}/stat`, 'utf8');\n const close = stat.lastIndexOf(')');\n const fields = stat.slice(close + 2).split(' ');\n const startTicks = fields[19];\n return startTicks ? { pid, startedAt: `linux:${startTicks}` } : null;\n }\n const startedAt = execFileSync('ps', ['-o', 'lstart=', '-p', String(pid)], {\n encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'],\n }).trim();\n return startedAt ? { pid, startedAt } : null;\n } catch {\n return null;\n }\n }\n}\n"],"names":["fs","execFileSync","LocalProcessInspector","getIdentity","pid","Number","isInteger","process","platform","stat","readFileSync","close","lastIndexOf","fields","slice","split","startTicks","startedAt","String","encoding","stdio","trim"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,SAASC,YAAY,QAAQ,gBAAgB;AAO7C,OAAO,MAAMC;IACTC,YAAYC,GAAW,EAA0B;QAC7C,IAAI,CAACC,OAAOC,SAAS,CAACF,QAAQA,OAAO,GAAG,OAAO;QAC/C,IAAI;YACA,IAAIG,QAAQC,QAAQ,KAAK,SAAS;gBAC9B,MAAMC,OAAOT,GAAGU,YAAY,CAAC,CAAC,MAAM,EAAEN,IAAI,KAAK,CAAC,EAAE;gBAClD,MAAMO,QAAQF,KAAKG,WAAW,CAAC;gBAC/B,MAAMC,SAASJ,KAAKK,KAAK,CAACH,QAAQ,GAAGI,KAAK,CAAC;gBAC3C,MAAMC,aAAaH,MAAM,CAAC,GAAG;gBAC7B,OAAOG,aAAa;oBAAEZ;oBAAKa,WAAW,CAAC,MAAM,EAAED,YAAY;gBAAC,IAAI;YACpE;YACA,MAAMC,YAAYhB,aAAa,MAAM;gBAAC;gBAAM;gBAAW;gBAAMiB,OAAOd;aAAK,EAAE;gBACvEe,UAAU;gBAAQC,OAAO;oBAAC;oBAAU;oBAAQ;iBAAS;YACzD,GAAGC,IAAI;YACP,OAAOJ,YAAY;gBAAEb;gBAAKa;YAAU,IAAI;QAC5C,EAAE,OAAM;YACJ,OAAO;QACX;IACJ;AACJ"}
1
+ {"version":3,"sources":["../../src/durable/process.ts"],"sourcesContent":["import fs from \"fs\";\nimport { execFileSync } from \"child_process\";\nimport type { ProcessIdentity } from \"./DurableAgent.js\";\n\nexport interface ProcessInspector {\n getIdentity(pid: number): ProcessIdentity | null;\n}\n\nexport class LocalProcessInspector implements ProcessInspector {\n getIdentity(pid: number): ProcessIdentity | null {\n if (!Number.isInteger(pid) || pid <= 0) return null;\n try {\n if (process.platform === \"linux\") {\n const stat = fs.readFileSync(`/proc/${pid}/stat`, \"utf8\");\n const close = stat.lastIndexOf(\")\");\n const fields = stat.slice(close + 2).split(\" \");\n const startTicks = fields[19];\n return startTicks ? { pid, startedAt: `linux:${startTicks}` } : null;\n }\n const startedAt = execFileSync(\"ps\", [\"-o\", \"lstart=\", \"-p\", String(pid)], {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n }).trim();\n return startedAt ? { pid, startedAt } : null;\n } catch {\n return null;\n }\n }\n}\n"],"names":["fs","execFileSync","LocalProcessInspector","getIdentity","pid","Number","isInteger","process","platform","stat","readFileSync","close","lastIndexOf","fields","slice","split","startTicks","startedAt","String","encoding","stdio","trim"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,SAASC,YAAY,QAAQ,gBAAgB;AAO7C,OAAO,MAAMC;IACXC,YAAYC,GAAW,EAA0B;QAC/C,IAAI,CAACC,OAAOC,SAAS,CAACF,QAAQA,OAAO,GAAG,OAAO;QAC/C,IAAI;YACF,IAAIG,QAAQC,QAAQ,KAAK,SAAS;gBAChC,MAAMC,OAAOT,GAAGU,YAAY,CAAC,CAAC,MAAM,EAAEN,IAAI,KAAK,CAAC,EAAE;gBAClD,MAAMO,QAAQF,KAAKG,WAAW,CAAC;gBAC/B,MAAMC,SAASJ,KAAKK,KAAK,CAACH,QAAQ,GAAGI,KAAK,CAAC;gBAC3C,MAAMC,aAAaH,MAAM,CAAC,GAAG;gBAC7B,OAAOG,aAAa;oBAAEZ;oBAAKa,WAAW,CAAC,MAAM,EAAED,YAAY;gBAAC,IAAI;YAClE;YACA,MAAMC,YAAYhB,aAAa,MAAM;gBAAC;gBAAM;gBAAW;gBAAMiB,OAAOd;aAAK,EAAE;gBACzEe,UAAU;gBACVC,OAAO;oBAAC;oBAAU;oBAAQ;iBAAS;YACrC,GAAGC,IAAI;YACP,OAAOJ,YAAY;gBAAEb;gBAAKa;YAAU,IAAI;QAC1C,EAAE,OAAM;YACN,OAAO;QACT;IACF;AACF"}
@@ -1,5 +1,5 @@
1
- import type { DurableAgent, DurableProvider } from './DurableAgent.js';
2
- import type { DurableRunCompletion } from './DurableAgentRepository.js';
1
+ import type { DurableAgent, DurableProvider } from "./DurableAgent.js";
2
+ import type { DurableRunCompletion } from "./DurableAgentRepository.js";
3
3
  export interface DurableRunRepository {
4
4
  resolve(reference: string): Promise<DurableAgent | DurableAgent[] | null>;
5
5
  acquireRun(id: string): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/durable/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAKxE,MAAM,WAAW,oBAAoB;IACjC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1E,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC/F;AAED,KAAK,aAAa,CAAC,QAAQ,SAAS,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAErG,UAAU,gBAAgB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,iBAAiB,CAAC,QAAQ,SAAS,eAAe,EAAE,MAAM,SAAS,gBAAgB;IACzF,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,oBAAoB,CAAC;IACjC,cAAc,IAAI,KAAK,CAAC;IACxB,aAAa,IAAI,KAAK,CAAC;IACvB,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;CAC9C;AAED,wBAAsB,eAAe,CAAC,QAAQ,SAAS,eAAe,EAAE,MAAM,SAAS,gBAAgB,EACnG,OAAO,EAAE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,GAC7C,OAAO,CAAC;IAAE,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAsB7D"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/durable/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAKxE,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1E,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC7F;AAED,KAAK,aAAa,CAAC,QAAQ,SAAS,eAAe,IAAI,OAAO,CAC5D,YAAY,EACZ;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,CACvB,CAAC;AAEF,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,iBAAiB,CAAC,QAAQ,SAAS,eAAe,EAAE,MAAM,SAAS,gBAAgB;IAC3F,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,oBAAoB,CAAC;IACjC,cAAc,IAAI,KAAK,CAAC;IACxB,aAAa,IAAI,KAAK,CAAC;IACvB,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;CAC5C;AAED,wBAAsB,eAAe,CACnC,QAAQ,SAAS,eAAe,EAChC,MAAM,SAAS,gBAAgB,EAE/B,OAAO,EAAE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,GAC3C,OAAO,CAAC;IAAE,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA0B7D"}
@@ -1,5 +1,5 @@
1
- import { DurableAgentNotFoundError } from './DurableAgent.js';
2
- import { sanitizeText } from './utils.js';
1
+ import { DurableAgentNotFoundError } from "./DurableAgent.js";
2
+ import { sanitizeText } from "./utils.js";
3
3
  const MAX_RESULT_SUMMARY_LENGTH = 4096;
4
4
  export async function runDurableAgent(options) {
5
5
  const resolved = await options.repository.resolve(options.reference);
@@ -23,23 +23,23 @@ export async function runDurableAgent(options) {
23
23
  }
24
24
  function createSucceededCompletion(result) {
25
25
  return {
26
- status: 'succeeded',
26
+ status: "succeeded",
27
27
  exitCode: result.exitCode,
28
28
  summary: sanitizeText(result.result, MAX_RESULT_SUMMARY_LENGTH, {
29
29
  preserveFormatting: true
30
30
  }),
31
- sessionHealth: 'healthy'
31
+ sessionHealth: "healthy"
32
32
  };
33
33
  }
34
34
  function createFailedCompletion(error, sessionMismatch) {
35
35
  const message = error instanceof Error ? error.message : String(error);
36
36
  return {
37
- status: 'failed',
37
+ status: "failed",
38
38
  exitCode: null,
39
39
  summary: sanitizeText(message, MAX_RESULT_SUMMARY_LENGTH, {
40
40
  preserveFormatting: true
41
41
  }),
42
- sessionHealth: sessionMismatch ? 'mismatch' : 'unknown'
42
+ sessionHealth: sessionMismatch ? "mismatch" : "unknown"
43
43
  };
44
44
  }
45
45
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/durable/run.ts"],"sourcesContent":["import type { DurableAgent, DurableProvider } from './DurableAgent.js';\nimport { DurableAgentNotFoundError } from './DurableAgent.js';\nimport type { DurableRunCompletion } from './DurableAgentRepository.js';\nimport { sanitizeText } from './utils.js';\n\nconst MAX_RESULT_SUMMARY_LENGTH = 4096;\n\nexport interface DurableRunRepository {\n resolve(reference: string): Promise<DurableAgent | DurableAgent[] | null>;\n acquireRun(id: string): Promise<{ agent: DurableAgent; token: string }>;\n completeRun(id: string, token: string, result: DurableRunCompletion): Promise<DurableAgent>;\n}\n\ntype ProviderAgent<Provider extends DurableProvider> = Extract<DurableAgent, { provider: Provider }>;\n\ninterface DurableRunResult {\n result: string;\n exitCode: number;\n}\n\ninterface DurableRunOptions<Provider extends DurableProvider, Result extends DurableRunResult> {\n reference: string;\n provider: Provider;\n repository: DurableRunRepository;\n ambiguousError(): Error;\n providerError(): Error;\n execute(agent: ProviderAgent<Provider>, token: string): Promise<Result>;\n isSessionMismatch(error: unknown): boolean;\n}\n\nexport async function runDurableAgent<Provider extends DurableProvider, Result extends DurableRunResult>(\n options: DurableRunOptions<Provider, Result>,\n): Promise<{ agent: ProviderAgent<Provider>; result: Result }> {\n const resolved = await options.repository.resolve(options.reference);\n if (!resolved) throw new DurableAgentNotFoundError(options.reference);\n if (Array.isArray(resolved)) throw options.ambiguousError();\n if (resolved.provider !== options.provider) throw options.providerError();\n\n const target = resolved as ProviderAgent<Provider>;\n const acquired = await options.repository.acquireRun(target.id);\n let result: Result;\n try {\n result = await options.execute(acquired.agent as ProviderAgent<Provider>, acquired.token);\n } catch (error) {\n await options.repository.completeRun(\n target.id,\n acquired.token,\n createFailedCompletion(error, options.isSessionMismatch(error)),\n );\n throw error;\n }\n\n await options.repository.completeRun(target.id, acquired.token, createSucceededCompletion(result));\n return { agent: target, result };\n}\n\nfunction createSucceededCompletion(result: DurableRunResult): DurableRunCompletion {\n return {\n status: 'succeeded',\n exitCode: result.exitCode,\n summary: sanitizeText(result.result, MAX_RESULT_SUMMARY_LENGTH, { preserveFormatting: true }),\n sessionHealth: 'healthy',\n };\n}\n\nfunction createFailedCompletion(error: unknown, sessionMismatch: boolean): DurableRunCompletion {\n const message = error instanceof Error ? error.message : String(error);\n return {\n status: 'failed',\n exitCode: null,\n summary: sanitizeText(message, MAX_RESULT_SUMMARY_LENGTH, { preserveFormatting: true }),\n sessionHealth: sessionMismatch ? 'mismatch' : 'unknown',\n };\n}\n"],"names":["DurableAgentNotFoundError","sanitizeText","MAX_RESULT_SUMMARY_LENGTH","runDurableAgent","options","resolved","repository","resolve","reference","Array","isArray","ambiguousError","provider","providerError","target","acquired","acquireRun","id","result","execute","agent","token","error","completeRun","createFailedCompletion","isSessionMismatch","createSucceededCompletion","status","exitCode","summary","preserveFormatting","sessionHealth","sessionMismatch","message","Error","String"],"mappings":"AACA,SAASA,yBAAyB,QAAQ,oBAAoB;AAE9D,SAASC,YAAY,QAAQ,aAAa;AAE1C,MAAMC,4BAA4B;AAyBlC,OAAO,eAAeC,gBAClBC,OAA4C;IAE5C,MAAMC,WAAW,MAAMD,QAAQE,UAAU,CAACC,OAAO,CAACH,QAAQI,SAAS;IACnE,IAAI,CAACH,UAAU,MAAM,IAAIL,0BAA0BI,QAAQI,SAAS;IACpE,IAAIC,MAAMC,OAAO,CAACL,WAAW,MAAMD,QAAQO,cAAc;IACzD,IAAIN,SAASO,QAAQ,KAAKR,QAAQQ,QAAQ,EAAE,MAAMR,QAAQS,aAAa;IAEvE,MAAMC,SAAST;IACf,MAAMU,WAAW,MAAMX,QAAQE,UAAU,CAACU,UAAU,CAACF,OAAOG,EAAE;IAC9D,IAAIC;IACJ,IAAI;QACAA,SAAS,MAAMd,QAAQe,OAAO,CAACJ,SAASK,KAAK,EAA6BL,SAASM,KAAK;IAC5F,EAAE,OAAOC,OAAO;QACZ,MAAMlB,QAAQE,UAAU,CAACiB,WAAW,CAChCT,OAAOG,EAAE,EACTF,SAASM,KAAK,EACdG,uBAAuBF,OAAOlB,QAAQqB,iBAAiB,CAACH;QAE5D,MAAMA;IACV;IAEA,MAAMlB,QAAQE,UAAU,CAACiB,WAAW,CAACT,OAAOG,EAAE,EAAEF,SAASM,KAAK,EAAEK,0BAA0BR;IAC1F,OAAO;QAAEE,OAAON;QAAQI;IAAO;AACnC;AAEA,SAASQ,0BAA0BR,MAAwB;IACvD,OAAO;QACHS,QAAQ;QACRC,UAAUV,OAAOU,QAAQ;QACzBC,SAAS5B,aAAaiB,OAAOA,MAAM,EAAEhB,2BAA2B;YAAE4B,oBAAoB;QAAK;QAC3FC,eAAe;IACnB;AACJ;AAEA,SAASP,uBAAuBF,KAAc,EAAEU,eAAwB;IACpE,MAAMC,UAAUX,iBAAiBY,QAAQZ,MAAMW,OAAO,GAAGE,OAAOb;IAChE,OAAO;QACHK,QAAQ;QACRC,UAAU;QACVC,SAAS5B,aAAagC,SAAS/B,2BAA2B;YAAE4B,oBAAoB;QAAK;QACrFC,eAAeC,kBAAkB,aAAa;IAClD;AACJ"}
1
+ {"version":3,"sources":["../../src/durable/run.ts"],"sourcesContent":["import type { DurableAgent, DurableProvider } from \"./DurableAgent.js\";\nimport { DurableAgentNotFoundError } from \"./DurableAgent.js\";\nimport type { DurableRunCompletion } from \"./DurableAgentRepository.js\";\nimport { sanitizeText } from \"./utils.js\";\n\nconst MAX_RESULT_SUMMARY_LENGTH = 4096;\n\nexport interface DurableRunRepository {\n resolve(reference: string): Promise<DurableAgent | DurableAgent[] | null>;\n acquireRun(id: string): Promise<{ agent: DurableAgent; token: string }>;\n completeRun(id: string, token: string, result: DurableRunCompletion): Promise<DurableAgent>;\n}\n\ntype ProviderAgent<Provider extends DurableProvider> = Extract<\n DurableAgent,\n { provider: Provider }\n>;\n\ninterface DurableRunResult {\n result: string;\n exitCode: number;\n}\n\ninterface DurableRunOptions<Provider extends DurableProvider, Result extends DurableRunResult> {\n reference: string;\n provider: Provider;\n repository: DurableRunRepository;\n ambiguousError(): Error;\n providerError(): Error;\n execute(agent: ProviderAgent<Provider>, token: string): Promise<Result>;\n isSessionMismatch(error: unknown): boolean;\n}\n\nexport async function runDurableAgent<\n Provider extends DurableProvider,\n Result extends DurableRunResult,\n>(\n options: DurableRunOptions<Provider, Result>,\n): Promise<{ agent: ProviderAgent<Provider>; result: Result }> {\n const resolved = await options.repository.resolve(options.reference);\n if (!resolved) throw new DurableAgentNotFoundError(options.reference);\n if (Array.isArray(resolved)) throw options.ambiguousError();\n if (resolved.provider !== options.provider) throw options.providerError();\n\n const target = resolved as ProviderAgent<Provider>;\n const acquired = await options.repository.acquireRun(target.id);\n let result: Result;\n try {\n result = await options.execute(acquired.agent as ProviderAgent<Provider>, acquired.token);\n } catch (error) {\n await options.repository.completeRun(\n target.id,\n acquired.token,\n createFailedCompletion(error, options.isSessionMismatch(error)),\n );\n throw error;\n }\n\n await options.repository.completeRun(\n target.id,\n acquired.token,\n createSucceededCompletion(result),\n );\n return { agent: target, result };\n}\n\nfunction createSucceededCompletion(result: DurableRunResult): DurableRunCompletion {\n return {\n status: \"succeeded\",\n exitCode: result.exitCode,\n summary: sanitizeText(result.result, MAX_RESULT_SUMMARY_LENGTH, { preserveFormatting: true }),\n sessionHealth: \"healthy\",\n };\n}\n\nfunction createFailedCompletion(error: unknown, sessionMismatch: boolean): DurableRunCompletion {\n const message = error instanceof Error ? error.message : String(error);\n return {\n status: \"failed\",\n exitCode: null,\n summary: sanitizeText(message, MAX_RESULT_SUMMARY_LENGTH, { preserveFormatting: true }),\n sessionHealth: sessionMismatch ? \"mismatch\" : \"unknown\",\n };\n}\n"],"names":["DurableAgentNotFoundError","sanitizeText","MAX_RESULT_SUMMARY_LENGTH","runDurableAgent","options","resolved","repository","resolve","reference","Array","isArray","ambiguousError","provider","providerError","target","acquired","acquireRun","id","result","execute","agent","token","error","completeRun","createFailedCompletion","isSessionMismatch","createSucceededCompletion","status","exitCode","summary","preserveFormatting","sessionHealth","sessionMismatch","message","Error","String"],"mappings":"AACA,SAASA,yBAAyB,QAAQ,oBAAoB;AAE9D,SAASC,YAAY,QAAQ,aAAa;AAE1C,MAAMC,4BAA4B;AA4BlC,OAAO,eAAeC,gBAIpBC,OAA4C;IAE5C,MAAMC,WAAW,MAAMD,QAAQE,UAAU,CAACC,OAAO,CAACH,QAAQI,SAAS;IACnE,IAAI,CAACH,UAAU,MAAM,IAAIL,0BAA0BI,QAAQI,SAAS;IACpE,IAAIC,MAAMC,OAAO,CAACL,WAAW,MAAMD,QAAQO,cAAc;IACzD,IAAIN,SAASO,QAAQ,KAAKR,QAAQQ,QAAQ,EAAE,MAAMR,QAAQS,aAAa;IAEvE,MAAMC,SAAST;IACf,MAAMU,WAAW,MAAMX,QAAQE,UAAU,CAACU,UAAU,CAACF,OAAOG,EAAE;IAC9D,IAAIC;IACJ,IAAI;QACFA,SAAS,MAAMd,QAAQe,OAAO,CAACJ,SAASK,KAAK,EAA6BL,SAASM,KAAK;IAC1F,EAAE,OAAOC,OAAO;QACd,MAAMlB,QAAQE,UAAU,CAACiB,WAAW,CAClCT,OAAOG,EAAE,EACTF,SAASM,KAAK,EACdG,uBAAuBF,OAAOlB,QAAQqB,iBAAiB,CAACH;QAE1D,MAAMA;IACR;IAEA,MAAMlB,QAAQE,UAAU,CAACiB,WAAW,CAClCT,OAAOG,EAAE,EACTF,SAASM,KAAK,EACdK,0BAA0BR;IAE5B,OAAO;QAAEE,OAAON;QAAQI;IAAO;AACjC;AAEA,SAASQ,0BAA0BR,MAAwB;IACzD,OAAO;QACLS,QAAQ;QACRC,UAAUV,OAAOU,QAAQ;QACzBC,SAAS5B,aAAaiB,OAAOA,MAAM,EAAEhB,2BAA2B;YAAE4B,oBAAoB;QAAK;QAC3FC,eAAe;IACjB;AACF;AAEA,SAASP,uBAAuBF,KAAc,EAAEU,eAAwB;IACtE,MAAMC,UAAUX,iBAAiBY,QAAQZ,MAAMW,OAAO,GAAGE,OAAOb;IAChE,OAAO;QACLK,QAAQ;QACRC,UAAU;QACVC,SAAS5B,aAAagC,SAAS/B,2BAA2B;YAAE4B,oBAAoB;QAAK;QACrFC,eAAeC,kBAAkB,aAAa;IAChD;AACF"}
@@ -1,4 +1,4 @@
1
- import type { ChildProcessWithoutNullStreams } from 'child_process';
1
+ import type { ChildProcessWithoutNullStreams } from "child_process";
2
2
  export interface ChildCloseResult {
3
3
  code: number | null;
4
4
  signal: NodeJS.Signals | null;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/durable/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,8BAA8B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAKlG;AAED,wBAAgB,YAAY,CACxB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/C,MAAM,CAMR;AAID,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,qBAAa,UAAU;IAIf,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IAJ7C,OAAO,CAAC,MAAM,CAAmB;gBAGZ,YAAY,EAAE,MAAM,EACpB,wBAAwB,EAAE,MAAM,KAAK;IAG1D,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE;IAiBxC,cAAc,CAAC,yBAAyB,EAAE,MAAM,KAAK,GAAG,IAAI;CAG/D"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/durable/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,gBAAgB,CAAC,CAK3B;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC7C,MAAM,CASR;AAID,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,qBAAa,UAAU;IAInB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IAJ3C,OAAO,CAAC,MAAM,CAAmB;gBAGd,YAAY,EAAE,MAAM,EACpB,wBAAwB,EAAE,MAAM,KAAK;IAGxD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE;IAiBxC,cAAc,CAAC,yBAAyB,EAAE,MAAM,KAAK,GAAG,IAAI;CAG7D"}
@@ -1,7 +1,7 @@
1
1
  export function waitForChildClose(child) {
2
2
  return new Promise((resolve, reject)=>{
3
- child.once('error', reject);
4
- child.once('close', (code, signal)=>resolve({
3
+ child.once("error", reject);
4
+ child.once("close", (code, signal)=>resolve({
5
5
  code,
6
6
  signal
7
7
  }));
@@ -11,8 +11,8 @@ export function sanitizeText(value, max, options = {}) {
11
11
  return Array.from(value, (character)=>{
12
12
  const code = character.charCodeAt(0);
13
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);
14
+ return code <= 31 || code === 127 ? " " : character;
15
+ }).join("").trim().slice(0, max);
16
16
  }
17
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
18
  export function isUuid(value) {
@@ -1 +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"}
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(\n child: ChildProcessWithoutNullStreams,\n): 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 })\n .join(\"\")\n .trim()\n .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,kBACdC,KAAqC;IAErC,OAAO,IAAIC,QAAQ,CAACC,SAASC;QAC3BH,MAAMI,IAAI,CAAC,SAASD;QACpBH,MAAMI,IAAI,CAAC,SAAS,CAACC,MAAMC,SAAWJ,QAAQ;gBAAEG;gBAAMC;YAAO;IAC/D;AACF;AAEA,OAAO,SAASC,aACdC,KAAa,EACbC,GAAW,EACXC,UAA4C,CAAC,CAAC;IAE9C,OAAOC,MAAMC,IAAI,CAACJ,OAAO,CAACK;QACxB,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;IAC5C,GACGG,IAAI,CAAC,IACLC,IAAI,GACJC,KAAK,CAAC,GAAGT;AACd;AAEA,MAAMU,eAAe;AAErB,OAAO,SAASC,OAAOZ,KAAa;IAClC,OAAOW,aAAaE,IAAI,CAACb;AAC3B;AAEA,OAAO,MAAMc;;;IACHC,SAASC,OAAOC,KAAK,CAAC,GAAG;IAEjC,YACE,AAAiBC,YAAoB,EACrC,AAAiBC,wBAAqC,CACtD;aAFiBD,eAAAA;aACAC,2BAAAA;IAChB;IAEHC,OAAOC,KAAsB,EAAY;QACvC,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;YAC3E,MAAM,IAAI,CAACN,wBAAwB;QACrC;QAEA,MAAMO,QAAkB,EAAE;QAC1B,IAAIC;QACJ,MAAO,AAACA,CAAAA,UAAU,IAAI,CAACZ,MAAM,CAACU,OAAO,CAAC,KAAI,KAAM,EAAG;YACjD,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;QACb;QACA,OAAOF;IACT;IAEAK,eAAeC,yBAAsC,EAAQ;QAC3D,IAAI,IAAI,CAACjB,MAAM,CAACS,MAAM,GAAG,GAAG,MAAMQ;IACpC;AACF"}
package/dist/index.d.ts CHANGED
@@ -1,42 +1,47 @@
1
- export { AgentManager, AgentNotRunningError } from './AgentManager.js';
2
- export { getCodexCapacityReport } from './capacity/index.js';
3
- export type { CapacityProbeOptions, CapacityReport, CapacityWindow, } from './capacity/index.js';
4
- export { ClaudeCodeAdapter } from './providers/claude/ClaudeCodeAdapter.js';
5
- export { CodexAdapter } from './adapters/CodexAdapter.js';
6
- export { CopilotAdapter } from './adapters/CopilotAdapter.js';
7
- export { GeminiCliAdapter } from './adapters/GeminiCliAdapter.js';
8
- export { GrokCliAdapter } from './adapters/GrokCliAdapter.js';
9
- export { OpenCodeAdapter } from './adapters/OpenCodeAdapter.js';
10
- export { PiAdapter } from './adapters/PiAdapter.js';
11
- export { AgentStatus } from './adapters/AgentAdapter.js';
12
- export type { AgentAdapter, AgentType, AgentInfo, ProcessInfo, ConversationMessage, SessionSummary, ListSessionsOptions, AgentDetectionContext, } from './adapters/AgentAdapter.js';
13
- export { TerminalFocusManager, TerminalType } from './terminal/TerminalFocusManager.js';
14
- export type { TerminalLocation } from './terminal/TerminalFocusManager.js';
15
- export { TtyWriter } from './terminal/TtyWriter.js';
16
- export type { ListAgentsOptions } from './AgentManager.js';
17
- export { AgentRegistry, RenameNotFoundError, RenameConflictError } from './utils/AgentRegistry.js';
18
- export type { AgentRegistryOptions, RegistryEntry } from './utils/AgentRegistry.js';
19
- export { TmuxManager } from './terminal/TmuxManager.js';
20
- export { AGENTS } from './utils/agents.js';
21
- export type { AgentConfig, StartableAgentType } from './utils/agents.js';
22
- export type { AgentRequest } from './utils/agent-requests.js';
23
- export { getAgentRequestPath, readLatestAgentRequest, writeAgentRequest } from './utils/agent-requests.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';
26
- export { DurableAgentRepository } from './durable/DurableAgentRepository.js';
27
- export type { CreateDurableAgentInput, DurableAgentRepositoryOptions, ProcessInspector, DurableRunCompletion, } from './durable/DurableAgentRepository.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';
1
+ export { AgentManager, AgentNotRunningError } from "./AgentManager.js";
2
+ export { getCodexCapacityReport } from "./capacity/index.js";
3
+ export type { CapacityProbeOptions, CapacityReport, CapacityWindow } from "./capacity/index.js";
4
+ export { getAgentReadinessReport, getAgentReadinessReports, worstReadinessStatus, } from "./readiness/AgentReadiness.js";
5
+ export type { AgentReadinessOptions, AgentReadinessReport, AuthReadinessCheck, BuiltInSkillsReadinessCheck, DirectoryReadinessCheck, ExecutableReadinessCheck, IntegrationReadinessCheck, ReadinessAgentType, ReadinessAuthState, ReadinessCheck, ReadinessStatus, } from "./readiness/AgentReadiness.js";
6
+ export { ClaudeCodeAdapter } from "./providers/claude/ClaudeCodeAdapter.js";
7
+ export { CodexAdapter } from "./providers/codex/CodexAdapter.js";
8
+ export { CopilotAdapter } from "./adapters/CopilotAdapter.js";
9
+ export { GeminiCliAdapter } from "./adapters/GeminiCliAdapter.js";
10
+ export { GrokCliAdapter } from "./adapters/GrokCliAdapter.js";
11
+ export { OpenCodeAdapter } from "./adapters/OpenCodeAdapter.js";
12
+ export { PiAdapter } from "./providers/pi/PiAdapter.js";
13
+ export { AgentStatus } from "./adapters/AgentAdapter.js";
14
+ export type { AgentAdapter, AgentType, AgentInfo, ProcessInfo, ConversationMessage, SessionSummary, ListSessionsOptions, AgentDetectionContext, } from "./adapters/AgentAdapter.js";
15
+ export { TerminalFocusManager, TerminalType } from "./terminal/TerminalFocusManager.js";
16
+ export type { TerminalLocation } from "./terminal/TerminalFocusManager.js";
17
+ export { TtyWriter } from "./terminal/TtyWriter.js";
18
+ export type { ListAgentsOptions } from "./AgentManager.js";
19
+ export { AgentRegistry, RenameNotFoundError, RenameConflictError, AGENT_RUNTIME_PROVIDERS, parseTmuxRuntimeRef, } from "./utils/AgentRegistry.js";
20
+ export type { AgentRegistryOptions, RegistryEntry, AgentRuntimeProvider, TmuxRuntimeRef, } from "./utils/AgentRegistry.js";
21
+ export { TmuxManager } from "./terminal/TmuxManager.js";
22
+ export type { AgentRuntimeAvailability, InteractiveAgentRuntime } from "./runtime/types.js";
23
+ export { startAgent, stopAgent, focusAgent, sendAgentPrompt, TmuxUnavailableError, AgentNameInUseError, AgentPidPollTimeoutError, AgentRuntimeUnavailableError, AgentTerminalNotFoundError, DEFAULT_PID_POLL_INTERVAL_MS, DEFAULT_PID_POLL_TIMEOUT_MS, } from "./runtime/ManagedAgentRuntime.js";
24
+ export type { FocusAgentDeps, StartAgentDeps, StartAgentOptions, StopAgentDeps, StopAgentResult, FocusAgentResult, SendAgentPromptDeps, } from "./runtime/ManagedAgentRuntime.js";
25
+ export { AGENTS } from "./utils/agents.js";
26
+ export type { AgentConfig, StartableAgentType } from "./utils/agents.js";
27
+ export type { AgentRequest } from "./utils/agent-requests.js";
28
+ export { getAgentRequestPath, readLatestAgentRequest, writeAgentRequest, } from "./utils/agent-requests.js";
29
+ export { AGENT_MODES, DurableAgentError, DurableAgentBusyError, DurableAgentNotFoundError, DurableAgentRepositoryError, DurableAgentNameConflictError, ClaudePrintError, CodexPrintError, PiPrintError, } from "./durable/DurableAgent.js";
30
+ export type { DurableAgent, DurableAgentBase, ClaudeDurableAgent, CodexDurableAgent, PiDurableAgent, DurableProvider, CodexPrintErrorCode, DurableAgentState, DurableSessionHealth, DurableRunStatus, DurableActiveRun, DurableLastResult, PiPrintErrorCode, ProcessIdentity, } from "./durable/DurableAgent.js";
31
+ export { DurableAgentRepository } from "./durable/DurableAgentRepository.js";
32
+ export type { CreateDurableAgentInput, DurableAgentRepositoryOptions, ProcessInspector, DurableRunCompletion, } from "./durable/DurableAgentRepository.js";
33
+ export { ClaudePrintAgentService } from "./providers/claude/durable/ClaudePrintAgentService.js";
34
+ export type { ClaudePrintAgentServiceOptions, ClaudePrintSendResult, } from "./providers/claude/durable/ClaudePrintAgentService.js";
35
+ export { CodexCliProbe } from "./providers/codex/durable/CodexCliProbe.js";
36
+ export type { CodexCliProbeOptions } from "./providers/codex/durable/CodexCliProbe.js";
37
+ export { CodexPrintRunner } from "./providers/codex/durable/CodexPrintRunner.js";
38
+ export type { CodexPrintRunnerOptions, CodexPrintRunRequest, CodexPrintRunResult, } from "./providers/codex/durable/CodexPrintRunner.js";
39
+ export { CodexPrintAgentService } from "./providers/codex/durable/CodexPrintAgentService.js";
40
+ export type { CodexPrintAgentServiceOptions, CodexPrintSendResult, } from "./providers/codex/durable/CodexPrintAgentService.js";
41
+ export { PiCliProbe } from "./providers/pi/durable/PiCliProbe.js";
42
+ export type { PiCliProbeOptions } from "./providers/pi/durable/PiCliProbe.js";
43
+ export { PiPrintRunner } from "./providers/pi/durable/PiPrintRunner.js";
44
+ export type { PiPrintRunnerOptions, PiPrintRunRequest, PiPrintRunResult, } from "./providers/pi/durable/PiPrintRunner.js";
45
+ export { PiPrintAgentService } from "./providers/pi/durable/PiPrintAgentService.js";
46
+ export type { PiPrintAgentServiceOptions, PiPrintSendResult, } from "./providers/pi/durable/PiPrintAgentService.js";
42
47
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,YAAY,EACR,oBAAoB,EACpB,cAAc,EACd,cAAc,GACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,YAAY,EACR,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,GACxB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACxF,YAAY,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACnG,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,YAAY,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE3G,OAAO,EACH,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC3B,6BAA6B,EAC7B,gBAAgB,EAChB,eAAe,EACf,YAAY,GACf,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACR,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,YAAY,EACR,uBAAuB,EACvB,6BAA6B,EAC7B,gBAAgB,EAChB,oBAAoB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uDAAuD,CAAC;AAChG,YAAY,EACR,8BAA8B,EAC9B,qBAAqB,GACxB,MAAM,uDAAuD,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,YAAY,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AACjF,YAAY,EACR,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,GACtB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,YAAY,EACR,6BAA6B,EAC7B,oBAAoB,GACvB,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAClE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AACzH,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,YAAY,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,27 +1,29 @@
1
- export { AgentManager, AgentNotRunningError } from './AgentManager.js';
2
- export { getCodexCapacityReport } from './capacity/index.js';
3
- export { ClaudeCodeAdapter } from './providers/claude/ClaudeCodeAdapter.js';
4
- export { CodexAdapter } from './adapters/CodexAdapter.js';
5
- export { CopilotAdapter } from './adapters/CopilotAdapter.js';
6
- export { GeminiCliAdapter } from './adapters/GeminiCliAdapter.js';
7
- export { GrokCliAdapter } from './adapters/GrokCliAdapter.js';
8
- export { OpenCodeAdapter } from './adapters/OpenCodeAdapter.js';
9
- export { PiAdapter } from './adapters/PiAdapter.js';
10
- export { AgentStatus } from './adapters/AgentAdapter.js';
11
- export { TerminalFocusManager, TerminalType } from './terminal/TerminalFocusManager.js';
12
- export { TtyWriter } from './terminal/TtyWriter.js';
13
- export { AgentRegistry, RenameNotFoundError, RenameConflictError } from './utils/AgentRegistry.js';
14
- export { TmuxManager } from './terminal/TmuxManager.js';
15
- export { AGENTS } from './utils/agents.js';
16
- export { getAgentRequestPath, readLatestAgentRequest, writeAgentRequest } from './utils/agent-requests.js';
17
- export { AGENT_MODES, DurableAgentError, DurableAgentBusyError, DurableAgentNotFoundError, DurableAgentRepositoryError, DurableAgentNameConflictError, ClaudePrintError, CodexPrintError, PiPrintError } from './durable/DurableAgent.js';
18
- export { DurableAgentRepository } from './durable/DurableAgentRepository.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';
1
+ export { AgentManager, AgentNotRunningError } from "./AgentManager.js";
2
+ export { getCodexCapacityReport } from "./capacity/index.js";
3
+ export { getAgentReadinessReport, getAgentReadinessReports, worstReadinessStatus } from "./readiness/AgentReadiness.js";
4
+ export { ClaudeCodeAdapter } from "./providers/claude/ClaudeCodeAdapter.js";
5
+ export { CodexAdapter } from "./providers/codex/CodexAdapter.js";
6
+ export { CopilotAdapter } from "./adapters/CopilotAdapter.js";
7
+ export { GeminiCliAdapter } from "./adapters/GeminiCliAdapter.js";
8
+ export { GrokCliAdapter } from "./adapters/GrokCliAdapter.js";
9
+ export { OpenCodeAdapter } from "./adapters/OpenCodeAdapter.js";
10
+ export { PiAdapter } from "./providers/pi/PiAdapter.js";
11
+ export { AgentStatus } from "./adapters/AgentAdapter.js";
12
+ export { TerminalFocusManager, TerminalType } from "./terminal/TerminalFocusManager.js";
13
+ export { TtyWriter } from "./terminal/TtyWriter.js";
14
+ export { AgentRegistry, RenameNotFoundError, RenameConflictError, AGENT_RUNTIME_PROVIDERS, parseTmuxRuntimeRef } from "./utils/AgentRegistry.js";
15
+ export { TmuxManager } from "./terminal/TmuxManager.js";
16
+ export { startAgent, stopAgent, focusAgent, sendAgentPrompt, TmuxUnavailableError, AgentNameInUseError, AgentPidPollTimeoutError, AgentRuntimeUnavailableError, AgentTerminalNotFoundError, DEFAULT_PID_POLL_INTERVAL_MS, DEFAULT_PID_POLL_TIMEOUT_MS } from "./runtime/ManagedAgentRuntime.js";
17
+ export { AGENTS } from "./utils/agents.js";
18
+ export { getAgentRequestPath, readLatestAgentRequest, writeAgentRequest } from "./utils/agent-requests.js";
19
+ export { AGENT_MODES, DurableAgentError, DurableAgentBusyError, DurableAgentNotFoundError, DurableAgentRepositoryError, DurableAgentNameConflictError, ClaudePrintError, CodexPrintError, PiPrintError } from "./durable/DurableAgent.js";
20
+ export { DurableAgentRepository } from "./durable/DurableAgentRepository.js";
21
+ export { ClaudePrintAgentService } from "./providers/claude/durable/ClaudePrintAgentService.js";
22
+ export { CodexCliProbe } from "./providers/codex/durable/CodexCliProbe.js";
23
+ export { CodexPrintRunner } from "./providers/codex/durable/CodexPrintRunner.js";
24
+ export { CodexPrintAgentService } from "./providers/codex/durable/CodexPrintAgentService.js";
25
+ export { PiCliProbe } from "./providers/pi/durable/PiCliProbe.js";
26
+ export { PiPrintRunner } from "./providers/pi/durable/PiPrintRunner.js";
27
+ export { PiPrintAgentService } from "./providers/pi/durable/PiPrintAgentService.js";
26
28
 
27
29
  //# sourceMappingURL=index.js.map