@ai-devkit/agent-manager 0.37.0 → 0.39.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 (357) hide show
  1. package/dist/AgentManager.d.ts +0 -4
  2. package/dist/AgentManager.d.ts.map +1 -1
  3. package/dist/AgentManager.js +2 -2
  4. package/dist/AgentManager.js.map +1 -1
  5. package/dist/__tests__/capacity/anthropic.test.js +115 -0
  6. package/dist/__tests__/capacity/anthropic.test.js.map +1 -0
  7. package/dist/__tests__/capacity/boundaries.test.js +45 -0
  8. package/dist/__tests__/capacity/boundaries.test.js.map +1 -0
  9. package/dist/__tests__/capacity/claude.test.js +3 -3
  10. package/dist/__tests__/capacity/claude.test.js.map +1 -1
  11. package/dist/__tests__/capacity/codex.test.js +3 -1
  12. package/dist/__tests__/capacity/codex.test.js.map +1 -1
  13. package/dist/__tests__/capacity/openai.test.js +21 -12
  14. package/dist/__tests__/capacity/openai.test.js.map +1 -1
  15. package/dist/__tests__/capacity/wham.test.js +1 -1
  16. package/dist/__tests__/capacity/wham.test.js.map +1 -1
  17. package/dist/__tests__/capacity/zai.test.js +7 -8
  18. package/dist/__tests__/capacity/zai.test.js.map +1 -1
  19. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js +2 -1
  20. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js.map +1 -1
  21. package/dist/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.js.map +1 -1
  22. package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js +7 -15
  23. package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js.map +1 -1
  24. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js +3 -1
  25. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js.map +1 -1
  26. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js +11 -26
  27. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js.map +1 -1
  28. package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js +3 -7
  29. package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js.map +1 -1
  30. package/dist/__tests__/harnesses/devin/DevinAdapter.test.js +597 -0
  31. package/dist/__tests__/harnesses/devin/DevinAdapter.test.js.map +1 -0
  32. package/dist/__tests__/harnesses/devin/DevinAgentMapper.test.js +91 -0
  33. package/dist/__tests__/harnesses/devin/DevinAgentMapper.test.js.map +1 -0
  34. package/dist/__tests__/harnesses/devin/DevinSessionLocator.test.js +192 -0
  35. package/dist/__tests__/harnesses/devin/DevinSessionLocator.test.js.map +1 -0
  36. package/dist/__tests__/harnesses/devin/DevinSessionParser.test.js +407 -0
  37. package/dist/__tests__/harnesses/devin/DevinSessionParser.test.js.map +1 -0
  38. package/dist/__tests__/harnesses/devin/fixtures.js +95 -0
  39. package/dist/__tests__/harnesses/devin/fixtures.js.map +1 -0
  40. package/dist/__tests__/harnesses/pi/durable/PiCliProbe.test.js +5 -11
  41. package/dist/__tests__/harnesses/pi/durable/PiCliProbe.test.js.map +1 -1
  42. package/dist/__tests__/harnesses/pi/durable/PiPrintAgentService.test.js +9 -19
  43. package/dist/__tests__/harnesses/pi/durable/PiPrintAgentService.test.js.map +1 -1
  44. package/dist/__tests__/harnesses/pi/durable/PiPrintRunner.test.js +3 -7
  45. package/dist/__tests__/harnesses/pi/durable/PiPrintRunner.test.js.map +1 -1
  46. package/dist/__tests__/{readiness → harnesses/readiness}/AgentReadiness.test.js +95 -11
  47. package/dist/__tests__/harnesses/readiness/AgentReadiness.test.js.map +1 -0
  48. package/dist/__tests__/harnesses/runtimeProfiles.test.js +89 -0
  49. package/dist/__tests__/harnesses/runtimeProfiles.test.js.map +1 -0
  50. package/dist/__tests__/print/DurableAgent.test.js +4 -6
  51. package/dist/__tests__/print/DurableAgent.test.js.map +1 -1
  52. package/dist/__tests__/print/DurableAgentRepository.test.js +1 -12
  53. package/dist/__tests__/print/DurableAgentRepository.test.js.map +1 -1
  54. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -1
  55. package/dist/__tests__/terminal/GhosttyBackend.test.js +334 -0
  56. package/dist/__tests__/terminal/GhosttyBackend.test.js.map +1 -0
  57. package/dist/__tests__/terminal/TmuxManager.test.js +1 -1
  58. package/dist/__tests__/terminal/TmuxManager.test.js.map +1 -1
  59. package/dist/adapters/AgentAdapter.d.ts +1 -1
  60. package/dist/adapters/AgentAdapter.d.ts.map +1 -1
  61. package/dist/adapters/AgentAdapter.js +2 -1
  62. package/dist/adapters/AgentAdapter.js.map +1 -1
  63. package/dist/capacity/index.d.ts +9 -19
  64. package/dist/capacity/index.d.ts.map +1 -1
  65. package/dist/capacity/index.js +11 -4
  66. package/dist/capacity/index.js.map +1 -1
  67. package/dist/capacity/providers/anthropic.d.ts +9 -0
  68. package/dist/capacity/providers/anthropic.d.ts.map +1 -0
  69. package/dist/capacity/{claude.js → providers/anthropic.js} +10 -128
  70. package/dist/capacity/providers/anthropic.js.map +1 -0
  71. package/dist/capacity/providers/openai-platform.d.ts +14 -0
  72. package/dist/capacity/providers/openai-platform.d.ts.map +1 -0
  73. package/dist/capacity/providers/openai-platform.js +120 -0
  74. package/dist/capacity/providers/openai-platform.js.map +1 -0
  75. package/dist/capacity/providers/openai-subscription.d.ts +20 -0
  76. package/dist/capacity/providers/openai-subscription.d.ts.map +1 -0
  77. package/dist/capacity/providers/openai-subscription.js +129 -0
  78. package/dist/capacity/providers/openai-subscription.js.map +1 -0
  79. package/dist/capacity/providers/zai.d.ts +8 -0
  80. package/dist/capacity/providers/zai.d.ts.map +1 -0
  81. package/dist/capacity/{zai.js → providers/zai.js} +17 -62
  82. package/dist/capacity/providers/zai.js.map +1 -0
  83. package/dist/capacity/sources/claude.d.ts +9 -0
  84. package/dist/capacity/sources/claude.d.ts.map +1 -0
  85. package/dist/capacity/sources/claude.js +17 -0
  86. package/dist/capacity/sources/claude.js.map +1 -0
  87. package/dist/capacity/{codex.d.ts → sources/codex.d.ts} +5 -9
  88. package/dist/capacity/sources/codex.d.ts.map +1 -0
  89. package/dist/capacity/{codex.js → sources/codex.js} +31 -84
  90. package/dist/capacity/sources/codex.js.map +1 -0
  91. package/dist/capacity/sources/pi.d.ts +30 -0
  92. package/dist/capacity/sources/pi.d.ts.map +1 -0
  93. package/dist/capacity/sources/pi.js +81 -0
  94. package/dist/capacity/sources/pi.js.map +1 -0
  95. package/dist/capacity/types.d.ts +2 -0
  96. package/dist/capacity/types.d.ts.map +1 -1
  97. package/dist/capacity/types.js +1 -1
  98. package/dist/capacity/types.js.map +1 -1
  99. package/dist/harnesses/claude/credentials.d.ts +10 -0
  100. package/dist/harnesses/claude/credentials.d.ts.map +1 -0
  101. package/dist/harnesses/claude/credentials.js +112 -0
  102. package/dist/harnesses/claude/credentials.js.map +1 -0
  103. package/dist/harnesses/claude/readiness.d.ts +3 -0
  104. package/dist/harnesses/claude/readiness.d.ts.map +1 -0
  105. package/dist/harnesses/claude/readiness.js +63 -0
  106. package/dist/harnesses/claude/readiness.js.map +1 -0
  107. package/dist/harnesses/codex/credentials.d.ts +15 -0
  108. package/dist/harnesses/codex/credentials.d.ts.map +1 -0
  109. package/dist/harnesses/codex/credentials.js +58 -0
  110. package/dist/harnesses/codex/credentials.js.map +1 -0
  111. package/dist/harnesses/codex/readiness.d.ts +3 -0
  112. package/dist/harnesses/codex/readiness.d.ts.map +1 -0
  113. package/dist/harnesses/codex/readiness.js +60 -0
  114. package/dist/harnesses/codex/readiness.js.map +1 -0
  115. package/dist/harnesses/copilot/readiness.d.ts +3 -0
  116. package/dist/harnesses/copilot/readiness.d.ts.map +1 -0
  117. package/dist/harnesses/copilot/readiness.js +39 -0
  118. package/dist/harnesses/copilot/readiness.js.map +1 -0
  119. package/dist/harnesses/devin/DevinAdapter.d.ts +39 -0
  120. package/dist/harnesses/devin/DevinAdapter.d.ts.map +1 -0
  121. package/dist/harnesses/devin/DevinAdapter.js +177 -0
  122. package/dist/harnesses/devin/DevinAdapter.js.map +1 -0
  123. package/dist/harnesses/devin/DevinAgentMapper.d.ts +11 -0
  124. package/dist/harnesses/devin/DevinAgentMapper.d.ts.map +1 -0
  125. package/dist/harnesses/devin/DevinAgentMapper.js +35 -0
  126. package/dist/harnesses/devin/DevinAgentMapper.js.map +1 -0
  127. package/dist/harnesses/devin/DevinSessionLocator.d.ts +46 -0
  128. package/dist/harnesses/devin/DevinSessionLocator.d.ts.map +1 -0
  129. package/dist/harnesses/devin/DevinSessionLocator.js +176 -0
  130. package/dist/harnesses/devin/DevinSessionLocator.js.map +1 -0
  131. package/dist/harnesses/devin/DevinSessionParser.d.ts +29 -0
  132. package/dist/harnesses/devin/DevinSessionParser.d.ts.map +1 -0
  133. package/dist/harnesses/devin/DevinSessionParser.js +166 -0
  134. package/dist/harnesses/devin/DevinSessionParser.js.map +1 -0
  135. package/dist/harnesses/devin/readiness.d.ts +3 -0
  136. package/dist/harnesses/devin/readiness.d.ts.map +1 -0
  137. package/dist/harnesses/devin/readiness.js +39 -0
  138. package/dist/harnesses/devin/readiness.js.map +1 -0
  139. package/dist/harnesses/index.d.ts.map +1 -1
  140. package/dist/harnesses/index.js +3 -1
  141. package/dist/harnesses/index.js.map +1 -1
  142. package/dist/harnesses/opencode/readiness.d.ts +3 -0
  143. package/dist/harnesses/opencode/readiness.d.ts.map +1 -0
  144. package/dist/harnesses/opencode/readiness.js +50 -0
  145. package/dist/harnesses/opencode/readiness.js.map +1 -0
  146. package/dist/harnesses/pi/credentials.d.ts +22 -0
  147. package/dist/harnesses/pi/credentials.d.ts.map +1 -0
  148. package/dist/harnesses/pi/credentials.js +98 -0
  149. package/dist/harnesses/pi/credentials.js.map +1 -0
  150. package/dist/harnesses/pi/readiness.d.ts +3 -0
  151. package/dist/harnesses/pi/readiness.d.ts.map +1 -0
  152. package/dist/harnesses/pi/readiness.js +96 -0
  153. package/dist/harnesses/pi/readiness.js.map +1 -0
  154. package/dist/harnesses/readiness/AgentReadiness.d.ts +6 -0
  155. package/dist/harnesses/readiness/AgentReadiness.d.ts.map +1 -0
  156. package/dist/harnesses/readiness/AgentReadiness.js +70 -0
  157. package/dist/harnesses/readiness/AgentReadiness.js.map +1 -0
  158. package/dist/harnesses/readiness/checks.d.ts +31 -0
  159. package/dist/harnesses/readiness/checks.d.ts.map +1 -0
  160. package/dist/harnesses/readiness/checks.js +270 -0
  161. package/dist/harnesses/readiness/checks.js.map +1 -0
  162. package/dist/{readiness/AgentReadiness.d.ts → harnesses/readiness/types.d.ts} +19 -10
  163. package/dist/harnesses/readiness/types.d.ts.map +1 -0
  164. package/dist/harnesses/readiness/types.js +4 -0
  165. package/dist/harnesses/readiness/types.js.map +1 -0
  166. package/dist/harnesses/runtimeProfiles.d.ts +11 -0
  167. package/dist/harnesses/runtimeProfiles.d.ts.map +1 -0
  168. package/dist/harnesses/runtimeProfiles.js +100 -0
  169. package/dist/harnesses/runtimeProfiles.js.map +1 -0
  170. package/dist/index.d.ts +16 -42
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +9 -23
  173. package/dist/index.js.map +1 -1
  174. package/dist/runtime/ManagedAgentRuntime.d.ts +3 -3
  175. package/dist/runtime/ManagedAgentRuntime.d.ts.map +1 -1
  176. package/dist/runtime/ManagedAgentRuntime.js +6 -20
  177. package/dist/runtime/ManagedAgentRuntime.js.map +1 -1
  178. package/dist/runtime/herdr/HerdrAgentDiscovery.d.ts.map +1 -1
  179. package/dist/runtime/herdr/HerdrAgentDiscovery.js +2 -43
  180. package/dist/runtime/herdr/HerdrAgentDiscovery.js.map +1 -1
  181. package/dist/runtime/tmux/PidPolling.d.ts +1 -1
  182. package/dist/runtime/tmux/PidPolling.d.ts.map +1 -1
  183. package/dist/runtime/tmux/PidPolling.js.map +1 -1
  184. package/dist/runtime/tmux/TmuxAgentRuntime.d.ts +1 -1
  185. package/dist/runtime/tmux/TmuxAgentRuntime.d.ts.map +1 -1
  186. package/dist/runtime/tmux/TmuxAgentRuntime.js +1 -1
  187. package/dist/runtime/tmux/TmuxAgentRuntime.js.map +1 -1
  188. package/dist/runtime/tmux/TmuxManager.d.ts +12 -0
  189. package/dist/runtime/tmux/TmuxManager.d.ts.map +1 -0
  190. package/dist/{terminal → runtime/tmux}/TmuxManager.js +9 -28
  191. package/dist/runtime/tmux/TmuxManager.js.map +1 -0
  192. package/dist/runtime/types.d.ts +1 -1
  193. package/dist/runtime/types.d.ts.map +1 -1
  194. package/dist/runtime/types.js.map +1 -1
  195. package/dist/terminal/TerminalFocusManager.d.ts +4 -32
  196. package/dist/terminal/TerminalFocusManager.d.ts.map +1 -1
  197. package/dist/terminal/TerminalFocusManager.js +17 -267
  198. package/dist/terminal/TerminalFocusManager.js.map +1 -1
  199. package/dist/terminal/TtyWriter.d.ts +1 -44
  200. package/dist/terminal/TtyWriter.d.ts.map +1 -1
  201. package/dist/terminal/TtyWriter.js +12 -347
  202. package/dist/terminal/TtyWriter.js.map +1 -1
  203. package/dist/terminal/backends/ghostty.d.ts +3 -0
  204. package/dist/terminal/backends/ghostty.d.ts.map +1 -0
  205. package/dist/terminal/backends/ghostty.js +161 -0
  206. package/dist/terminal/backends/ghostty.js.map +1 -0
  207. package/dist/terminal/backends/index.d.ts +5 -0
  208. package/dist/terminal/backends/index.d.ts.map +1 -0
  209. package/dist/terminal/backends/index.js +21 -0
  210. package/dist/terminal/backends/index.js.map +1 -0
  211. package/dist/terminal/backends/iterm2.d.ts +3 -0
  212. package/dist/terminal/backends/iterm2.d.ts.map +1 -0
  213. package/dist/terminal/backends/iterm2.js +135 -0
  214. package/dist/terminal/backends/iterm2.js.map +1 -0
  215. package/dist/terminal/backends/shared.d.ts +9 -0
  216. package/dist/terminal/backends/shared.d.ts.map +1 -0
  217. package/dist/terminal/backends/shared.js +38 -0
  218. package/dist/terminal/backends/shared.js.map +1 -0
  219. package/dist/terminal/backends/terminal-app.d.ts +3 -0
  220. package/dist/terminal/backends/terminal-app.d.ts.map +1 -0
  221. package/dist/terminal/backends/terminal-app.js +129 -0
  222. package/dist/terminal/backends/terminal-app.js.map +1 -0
  223. package/dist/terminal/backends/tmux.d.ts +3 -0
  224. package/dist/terminal/backends/tmux.d.ts.map +1 -0
  225. package/dist/terminal/backends/tmux.js +76 -0
  226. package/dist/terminal/backends/tmux.js.map +1 -0
  227. package/dist/terminal/backends/wezterm.d.ts +3 -0
  228. package/dist/terminal/backends/wezterm.d.ts.map +1 -0
  229. package/dist/terminal/backends/wezterm.js +71 -0
  230. package/dist/terminal/backends/wezterm.js.map +1 -0
  231. package/dist/terminal/types.d.ts +22 -0
  232. package/dist/terminal/types.d.ts.map +1 -0
  233. package/dist/terminal/types.js +11 -0
  234. package/dist/terminal/types.js.map +1 -0
  235. package/dist/utils/process.d.ts +2 -0
  236. package/dist/utils/process.d.ts.map +1 -1
  237. package/dist/utils/process.js +3 -0
  238. package/dist/utils/process.js.map +1 -1
  239. package/package.json +1 -1
  240. package/src/AgentManager.ts +1 -1
  241. package/src/__tests__/capacity/anthropic.test.ts +105 -0
  242. package/src/__tests__/capacity/boundaries.test.ts +36 -0
  243. package/src/__tests__/capacity/claude.test.ts +3 -8
  244. package/src/__tests__/capacity/codex.test.ts +12 -35
  245. package/src/__tests__/capacity/fixtures/openai-codex-auth.json +1 -1
  246. package/src/__tests__/capacity/openai.test.ts +15 -15
  247. package/src/__tests__/capacity/wham.test.ts +1 -1
  248. package/src/__tests__/capacity/zai.test.ts +27 -62
  249. package/src/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.ts +2 -2
  250. package/src/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.ts +1 -1
  251. package/src/__tests__/harnesses/codex/durable/CodexCliProbe.test.ts +14 -19
  252. package/src/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.ts +3 -3
  253. package/src/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.ts +24 -30
  254. package/src/__tests__/harnesses/codex/durable/CodexPrintRunner.test.ts +4 -8
  255. package/src/__tests__/harnesses/devin/DevinAdapter.test.ts +292 -0
  256. package/src/__tests__/harnesses/devin/DevinAgentMapper.test.ts +88 -0
  257. package/src/__tests__/harnesses/devin/DevinSessionLocator.test.ts +139 -0
  258. package/src/__tests__/harnesses/devin/DevinSessionParser.test.ts +218 -0
  259. package/src/__tests__/harnesses/devin/fixtures.ts +144 -0
  260. package/src/__tests__/harnesses/pi/durable/PiCliProbe.test.ts +7 -11
  261. package/src/__tests__/harnesses/pi/durable/PiPrintAgentService.test.ts +19 -22
  262. package/src/__tests__/harnesses/pi/durable/PiPrintRunner.test.ts +7 -8
  263. package/src/__tests__/{readiness → harnesses/readiness}/AgentReadiness.test.ts +77 -9
  264. package/src/__tests__/harnesses/runtimeProfiles.test.ts +110 -0
  265. package/src/__tests__/print/DurableAgent.test.ts +4 -13
  266. package/src/__tests__/print/DurableAgentRepository.test.ts +1 -13
  267. package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +1 -1
  268. package/src/__tests__/terminal/GhosttyBackend.test.ts +271 -0
  269. package/src/__tests__/terminal/TmuxManager.test.ts +1 -1
  270. package/src/adapters/AgentAdapter.ts +1 -0
  271. package/src/capacity/index.ts +29 -23
  272. package/src/capacity/{claude.ts → providers/anthropic.ts} +16 -131
  273. package/src/capacity/providers/openai-platform.ts +150 -0
  274. package/src/capacity/{wham.ts → providers/openai-subscription.ts} +86 -8
  275. package/src/capacity/{zai.ts → providers/zai.ts} +29 -111
  276. package/src/capacity/sources/claude.ts +30 -0
  277. package/src/capacity/{codex.ts → sources/codex.ts} +54 -124
  278. package/src/capacity/sources/pi.ts +131 -0
  279. package/src/capacity/types.ts +3 -0
  280. package/src/harnesses/claude/credentials.ts +122 -0
  281. package/src/harnesses/claude/readiness.ts +69 -0
  282. package/src/harnesses/codex/credentials.ts +81 -0
  283. package/src/harnesses/codex/readiness.ts +72 -0
  284. package/src/harnesses/copilot/readiness.ts +33 -0
  285. package/src/harnesses/devin/DevinAdapter.ts +224 -0
  286. package/src/harnesses/devin/DevinAgentMapper.ts +43 -0
  287. package/src/harnesses/devin/DevinSessionLocator.ts +230 -0
  288. package/src/harnesses/devin/DevinSessionParser.ts +236 -0
  289. package/src/harnesses/devin/readiness.ts +36 -0
  290. package/src/harnesses/index.ts +2 -0
  291. package/src/harnesses/opencode/readiness.ts +48 -0
  292. package/src/harnesses/pi/credentials.ts +129 -0
  293. package/src/harnesses/pi/readiness.ts +104 -0
  294. package/src/harnesses/readiness/AgentReadiness.ts +89 -0
  295. package/src/harnesses/readiness/checks.ts +336 -0
  296. package/src/harnesses/readiness/types.ts +90 -0
  297. package/src/{utils/agents.ts → harnesses/runtimeProfiles.ts} +35 -38
  298. package/src/index.ts +15 -128
  299. package/src/runtime/ManagedAgentRuntime.ts +7 -22
  300. package/src/runtime/herdr/HerdrAgentDiscovery.ts +3 -19
  301. package/src/runtime/tmux/PidPolling.ts +1 -1
  302. package/src/runtime/tmux/TmuxAgentRuntime.ts +1 -1
  303. package/src/{terminal → runtime/tmux}/TmuxManager.ts +9 -30
  304. package/src/runtime/types.ts +1 -1
  305. package/src/terminal/TerminalFocusManager.ts +19 -292
  306. package/src/terminal/TtyWriter.ts +15 -335
  307. package/src/terminal/backends/ghostty.ts +180 -0
  308. package/src/terminal/backends/index.ts +23 -0
  309. package/src/terminal/backends/iterm2.ts +126 -0
  310. package/src/terminal/backends/shared.ts +47 -0
  311. package/src/terminal/backends/terminal-app.ts +122 -0
  312. package/src/terminal/backends/tmux.ts +62 -0
  313. package/src/terminal/backends/wezterm.ts +65 -0
  314. package/src/terminal/types.ts +23 -0
  315. package/src/utils/process.ts +5 -0
  316. package/dist/__tests__/readiness/AgentReadiness.test.js.map +0 -1
  317. package/dist/__tests__/utils/agents.test.js +0 -93
  318. package/dist/__tests__/utils/agents.test.js.map +0 -1
  319. package/dist/capacity/claude.d.ts +0 -17
  320. package/dist/capacity/claude.d.ts.map +0 -1
  321. package/dist/capacity/claude.js.map +0 -1
  322. package/dist/capacity/codex.d.ts.map +0 -1
  323. package/dist/capacity/codex.js.map +0 -1
  324. package/dist/capacity/openai.d.ts +0 -47
  325. package/dist/capacity/openai.d.ts.map +0 -1
  326. package/dist/capacity/openai.js +0 -307
  327. package/dist/capacity/openai.js.map +0 -1
  328. package/dist/capacity/wham.d.ts +0 -16
  329. package/dist/capacity/wham.d.ts.map +0 -1
  330. package/dist/capacity/wham.js +0 -66
  331. package/dist/capacity/wham.js.map +0 -1
  332. package/dist/capacity/zai.d.ts +0 -14
  333. package/dist/capacity/zai.d.ts.map +0 -1
  334. package/dist/capacity/zai.js.map +0 -1
  335. package/dist/readiness/AgentReadiness.d.ts.map +0 -1
  336. package/dist/readiness/AgentReadiness.js +0 -614
  337. package/dist/readiness/AgentReadiness.js.map +0 -1
  338. package/dist/terminal/TmuxManager.d.ts +0 -28
  339. package/dist/terminal/TmuxManager.d.ts.map +0 -1
  340. package/dist/terminal/TmuxManager.js.map +0 -1
  341. package/dist/terminal/index.d.ts +0 -5
  342. package/dist/terminal/index.d.ts.map +0 -1
  343. package/dist/terminal/index.js +0 -5
  344. package/dist/terminal/index.js.map +0 -1
  345. package/dist/utils/agents.d.ts +0 -16
  346. package/dist/utils/agents.d.ts.map +0 -1
  347. package/dist/utils/agents.js +0 -117
  348. package/dist/utils/agents.js.map +0 -1
  349. package/dist/utils/index.d.ts +0 -8
  350. package/dist/utils/index.d.ts.map +0 -1
  351. package/dist/utils/index.js +0 -6
  352. package/dist/utils/index.js.map +0 -1
  353. package/src/__tests__/utils/agents.test.ts +0 -105
  354. package/src/capacity/openai.ts +0 -355
  355. package/src/readiness/AgentReadiness.ts +0 -730
  356. package/src/terminal/index.ts +0 -4
  357. package/src/utils/index.ts +0 -14
@@ -1,3 +1,3 @@
1
- export { };
1
+ /** Provider quota data before a harness/source identity is attached. */ export { };
2
2
 
3
3
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/capacity/types.ts"],"sourcesContent":["export type Availability = \"yes\" | \"no\" | \"unknown\";\nexport type CapacityLimitType = \"TOKENS_LIMIT\" | \"CREDIT_LIMIT\" | \"TIME_LIMIT\";\n\nexport interface CapacityWindow {\n id: string;\n label: string;\n durationMinutes: number | null;\n usedPercent: number | null;\n resetsAt: string | null;\n limitType?: CapacityLimitType;\n total?: number | null;\n current?: number | null;\n remaining?: number | null;\n}\n\nexport interface CapacityReport {\n /** Harness whose quota pool is measured, e.g. \"pi\" or \"codex\". */\n harness: string;\n /** Model provider backing the harness, e.g. \"zai\" or \"openai\". */\n provider: string;\n generatedAt: string;\n authenticated: boolean | null;\n available: Availability;\n windows: CapacityWindow[];\n creditsRemaining: number | null;\n}\n"],"names":[],"mappings":"AAeA,WAUC"}
1
+ {"version":3,"sources":["../../src/capacity/types.ts"],"sourcesContent":["export type Availability = \"yes\" | \"no\" | \"unknown\";\nexport type CapacityLimitType = \"TOKENS_LIMIT\" | \"CREDIT_LIMIT\" | \"TIME_LIMIT\";\n\nexport interface CapacityWindow {\n id: string;\n label: string;\n durationMinutes: number | null;\n usedPercent: number | null;\n resetsAt: string | null;\n limitType?: CapacityLimitType;\n total?: number | null;\n current?: number | null;\n remaining?: number | null;\n}\n\nexport interface CapacityReport {\n /** Harness whose quota pool is measured, e.g. \"pi\" or \"codex\". */\n harness: string;\n /** Model provider backing the harness, e.g. \"zai\" or \"openai\". */\n provider: string;\n generatedAt: string;\n authenticated: boolean | null;\n available: Availability;\n windows: CapacityWindow[];\n creditsRemaining: number | null;\n}\n\n/** Provider quota data before a harness/source identity is attached. */\nexport type ProviderCapacitySnapshot = Omit<CapacityReport, \"harness\" | \"provider\" | \"generatedAt\">;\n"],"names":[],"mappings":"AA2BA,sEAAsE,GACtE,WAAoG"}
@@ -0,0 +1,10 @@
1
+ export type ClaudeCredentialOptions = {
2
+ env?: NodeJS.ProcessEnv;
3
+ readFile?: (path: string, encoding: BufferEncoding) => Promise<string>;
4
+ now?: () => Date;
5
+ cwd?: string;
6
+ platform?: NodeJS.Platform;
7
+ keychainRead?: (service: string) => Promise<string | null>;
8
+ };
9
+ export declare function resolveClaudeAnthropicToken(options?: ClaudeCredentialOptions): Promise<string>;
10
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/harnesses/claude/credentials.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,uBAAuB,GAAG;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC5D,CAAC;AAwFF,wBAAsB,2BAA2B,CAC/C,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,MAAM,CAAC,CAejB"}
@@ -0,0 +1,112 @@
1
+ import { execFile } from "node:child_process";
2
+ import { readFile } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { isAbsolute, join, resolve } from "node:path";
5
+ import { promisify } from "node:util";
6
+ const execFileAsync = promisify(execFile);
7
+ const CLAUDE_KEYCHAIN_SERVICE = "Claude Code-credentials";
8
+ function record(value) {
9
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
10
+ }
11
+ function nonEmptyText(value) {
12
+ return typeof value === "string" && value.trim() ? value.trim() : null;
13
+ }
14
+ function credentialsPath(options) {
15
+ const env = options.env ?? process.env;
16
+ const configured = nonEmptyText(env.CLAUDE_CONFIG_DIR);
17
+ if (configured) {
18
+ const profileRoot = isAbsolute(configured) ? configured : resolve(options.cwd ?? process.cwd(), configured);
19
+ return join(profileRoot, ".credentials.json");
20
+ }
21
+ return join(env.HOME || homedir(), ".claude", ".credentials.json");
22
+ }
23
+ function credentialFromRoot(root, now) {
24
+ const oauth = record(root?.claudeAiOauth);
25
+ const token = nonEmptyText(oauth?.accessToken);
26
+ if (!token) return {
27
+ token: null,
28
+ expired: false
29
+ };
30
+ const expired = typeof oauth?.expiresAt === "number" && Number.isFinite(oauth.expiresAt) && oauth.expiresAt <= now.getTime();
31
+ return {
32
+ token: expired ? null : token,
33
+ expired
34
+ };
35
+ }
36
+ function credentialFromPayload(payload, now) {
37
+ if (!payload) return {
38
+ token: null,
39
+ expired: false
40
+ };
41
+ try {
42
+ return credentialFromRoot(record(JSON.parse(payload)), now);
43
+ } catch {
44
+ return {
45
+ token: null,
46
+ expired: false
47
+ };
48
+ }
49
+ }
50
+ async function readProfileCredential(options, now) {
51
+ try {
52
+ const payload = await (options.readFile ?? readFile)(credentialsPath(options), "utf8");
53
+ return credentialFromPayload(payload, now);
54
+ } catch {
55
+ return {
56
+ token: null,
57
+ expired: false
58
+ };
59
+ }
60
+ }
61
+ async function readClaudeKeychain(service) {
62
+ try {
63
+ const { stdout } = await execFileAsync("/usr/bin/security", [
64
+ "find-generic-password",
65
+ "-s",
66
+ service,
67
+ "-w"
68
+ ], {
69
+ encoding: "utf8",
70
+ timeout: 1500,
71
+ maxBuffer: 1024 * 1024
72
+ });
73
+ return nonEmptyText(stdout);
74
+ } catch {
75
+ return null;
76
+ }
77
+ }
78
+ async function readKeychainCredential(options, now) {
79
+ const env = options.env ?? process.env;
80
+ const usesDefaultProfile = !nonEmptyText(env.CLAUDE_CONFIG_DIR);
81
+ if (!usesDefaultProfile || (options.platform ?? process.platform) !== "darwin") {
82
+ return {
83
+ token: null,
84
+ expired: false
85
+ };
86
+ }
87
+ try {
88
+ const payload = await (options.keychainRead ?? readClaudeKeychain)(CLAUDE_KEYCHAIN_SERVICE);
89
+ return credentialFromPayload(payload, now);
90
+ } catch {
91
+ return {
92
+ token: null,
93
+ expired: false
94
+ };
95
+ }
96
+ }
97
+ export async function resolveClaudeAnthropicToken(options = {}) {
98
+ const env = options.env ?? process.env;
99
+ const environmentToken = nonEmptyText(env.CLAUDE_CODE_OAUTH_TOKEN);
100
+ if (environmentToken) return environmentToken;
101
+ const now = options.now?.() ?? new Date();
102
+ const profileCredential = await readProfileCredential(options, now);
103
+ if (profileCredential.token) return profileCredential.token;
104
+ const keychainCredential = await readKeychainCredential(options, now);
105
+ if (keychainCredential.token) return keychainCredential.token;
106
+ if (profileCredential.expired || keychainCredential.expired) {
107
+ throw new Error("Claude OAuth credentials expired");
108
+ }
109
+ throw new Error("Claude OAuth credentials not found or malformed");
110
+ }
111
+
112
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/harnesses/claude/credentials.ts"],"sourcesContent":["import { execFile } from \"node:child_process\";\nimport { readFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { isAbsolute, join, resolve } from \"node:path\";\nimport { promisify } from \"node:util\";\n\nconst execFileAsync = promisify(execFile);\nconst CLAUDE_KEYCHAIN_SERVICE = \"Claude Code-credentials\";\n\nexport type ClaudeCredentialOptions = {\n env?: NodeJS.ProcessEnv;\n readFile?: (path: string, encoding: BufferEncoding) => Promise<string>;\n now?: () => Date;\n cwd?: string;\n platform?: NodeJS.Platform;\n keychainRead?: (service: string) => Promise<string | null>;\n};\n\ntype Credential = { token: string | null; expired: boolean };\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction nonEmptyText(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction credentialsPath(options: ClaudeCredentialOptions): string {\n const env = options.env ?? process.env;\n const configured = nonEmptyText(env.CLAUDE_CONFIG_DIR);\n if (configured) {\n const profileRoot = isAbsolute(configured)\n ? configured\n : resolve(options.cwd ?? process.cwd(), configured);\n return join(profileRoot, \".credentials.json\");\n }\n return join(env.HOME || homedir(), \".claude\", \".credentials.json\");\n}\n\nfunction credentialFromRoot(root: Record<string, unknown> | null, now: Date): Credential {\n const oauth = record(root?.claudeAiOauth);\n const token = nonEmptyText(oauth?.accessToken);\n if (!token) return { token: null, expired: false };\n const expired =\n typeof oauth?.expiresAt === \"number\" &&\n Number.isFinite(oauth.expiresAt) &&\n oauth.expiresAt <= now.getTime();\n return { token: expired ? null : token, expired };\n}\n\nfunction credentialFromPayload(payload: string | null, now: Date): Credential {\n if (!payload) return { token: null, expired: false };\n try {\n return credentialFromRoot(record(JSON.parse(payload)), now);\n } catch {\n return { token: null, expired: false };\n }\n}\n\nasync function readProfileCredential(\n options: ClaudeCredentialOptions,\n now: Date,\n): Promise<Credential> {\n try {\n const payload = await (options.readFile ?? readFile)(credentialsPath(options), \"utf8\");\n return credentialFromPayload(payload, now);\n } catch {\n return { token: null, expired: false };\n }\n}\n\nasync function readClaudeKeychain(service: string): Promise<string | null> {\n try {\n const { stdout } = await execFileAsync(\n \"/usr/bin/security\",\n [\"find-generic-password\", \"-s\", service, \"-w\"],\n { encoding: \"utf8\", timeout: 1500, maxBuffer: 1024 * 1024 },\n );\n return nonEmptyText(stdout);\n } catch {\n return null;\n }\n}\n\nasync function readKeychainCredential(\n options: ClaudeCredentialOptions,\n now: Date,\n): Promise<Credential> {\n const env = options.env ?? process.env;\n const usesDefaultProfile = !nonEmptyText(env.CLAUDE_CONFIG_DIR);\n if (!usesDefaultProfile || (options.platform ?? process.platform) !== \"darwin\") {\n return { token: null, expired: false };\n }\n try {\n const payload = await (options.keychainRead ?? readClaudeKeychain)(CLAUDE_KEYCHAIN_SERVICE);\n return credentialFromPayload(payload, now);\n } catch {\n return { token: null, expired: false };\n }\n}\n\nexport async function resolveClaudeAnthropicToken(\n options: ClaudeCredentialOptions = {},\n): Promise<string> {\n const env = options.env ?? process.env;\n const environmentToken = nonEmptyText(env.CLAUDE_CODE_OAUTH_TOKEN);\n if (environmentToken) return environmentToken;\n\n const now = options.now?.() ?? new Date();\n const profileCredential = await readProfileCredential(options, now);\n if (profileCredential.token) return profileCredential.token;\n\n const keychainCredential = await readKeychainCredential(options, now);\n if (keychainCredential.token) return keychainCredential.token;\n if (profileCredential.expired || keychainCredential.expired) {\n throw new Error(\"Claude OAuth credentials expired\");\n }\n throw new Error(\"Claude OAuth credentials not found or malformed\");\n}\n"],"names":["execFile","readFile","homedir","isAbsolute","join","resolve","promisify","execFileAsync","CLAUDE_KEYCHAIN_SERVICE","record","value","Array","isArray","nonEmptyText","trim","credentialsPath","options","env","process","configured","CLAUDE_CONFIG_DIR","profileRoot","cwd","HOME","credentialFromRoot","root","now","oauth","claudeAiOauth","token","accessToken","expired","expiresAt","Number","isFinite","getTime","credentialFromPayload","payload","JSON","parse","readProfileCredential","readClaudeKeychain","service","stdout","encoding","timeout","maxBuffer","readKeychainCredential","usesDefaultProfile","platform","keychainRead","resolveClaudeAnthropicToken","environmentToken","CLAUDE_CODE_OAUTH_TOKEN","Date","profileCredential","keychainCredential","Error"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,qBAAqB;AAC9C,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,OAAO,QAAQ,UAAU;AAClC,SAASC,UAAU,EAAEC,IAAI,EAAEC,OAAO,QAAQ,YAAY;AACtD,SAASC,SAAS,QAAQ,YAAY;AAEtC,MAAMC,gBAAgBD,UAAUN;AAChC,MAAMQ,0BAA0B;AAahC,SAASC,OAAOC,KAAc;IAC5B,OAAOA,UAAU,QAAQ,OAAOA,UAAU,YAAY,CAACC,MAAMC,OAAO,CAACF,SAChEA,QACD;AACN;AAEA,SAASG,aAAaH,KAAc;IAClC,OAAO,OAAOA,UAAU,YAAYA,MAAMI,IAAI,KAAKJ,MAAMI,IAAI,KAAK;AACpE;AAEA,SAASC,gBAAgBC,OAAgC;IACvD,MAAMC,MAAMD,QAAQC,GAAG,IAAIC,QAAQD,GAAG;IACtC,MAAME,aAAaN,aAAaI,IAAIG,iBAAiB;IACrD,IAAID,YAAY;QACd,MAAME,cAAclB,WAAWgB,cAC3BA,aACAd,QAAQW,QAAQM,GAAG,IAAIJ,QAAQI,GAAG,IAAIH;QAC1C,OAAOf,KAAKiB,aAAa;IAC3B;IACA,OAAOjB,KAAKa,IAAIM,IAAI,IAAIrB,WAAW,WAAW;AAChD;AAEA,SAASsB,mBAAmBC,IAAoC,EAAEC,GAAS;IACzE,MAAMC,QAAQlB,OAAOgB,MAAMG;IAC3B,MAAMC,QAAQhB,aAAac,OAAOG;IAClC,IAAI,CAACD,OAAO,OAAO;QAAEA,OAAO;QAAME,SAAS;IAAM;IACjD,MAAMA,UACJ,OAAOJ,OAAOK,cAAc,YAC5BC,OAAOC,QAAQ,CAACP,MAAMK,SAAS,KAC/BL,MAAMK,SAAS,IAAIN,IAAIS,OAAO;IAChC,OAAO;QAAEN,OAAOE,UAAU,OAAOF;QAAOE;IAAQ;AAClD;AAEA,SAASK,sBAAsBC,OAAsB,EAAEX,GAAS;IAC9D,IAAI,CAACW,SAAS,OAAO;QAAER,OAAO;QAAME,SAAS;IAAM;IACnD,IAAI;QACF,OAAOP,mBAAmBf,OAAO6B,KAAKC,KAAK,CAACF,WAAWX;IACzD,EAAE,OAAM;QACN,OAAO;YAAEG,OAAO;YAAME,SAAS;QAAM;IACvC;AACF;AAEA,eAAeS,sBACbxB,OAAgC,EAChCU,GAAS;IAET,IAAI;QACF,MAAMW,UAAU,MAAM,AAACrB,CAAAA,QAAQf,QAAQ,IAAIA,QAAO,EAAGc,gBAAgBC,UAAU;QAC/E,OAAOoB,sBAAsBC,SAASX;IACxC,EAAE,OAAM;QACN,OAAO;YAAEG,OAAO;YAAME,SAAS;QAAM;IACvC;AACF;AAEA,eAAeU,mBAAmBC,OAAe;IAC/C,IAAI;QACF,MAAM,EAAEC,MAAM,EAAE,GAAG,MAAMpC,cACvB,qBACA;YAAC;YAAyB;YAAMmC;YAAS;SAAK,EAC9C;YAAEE,UAAU;YAAQC,SAAS;YAAMC,WAAW,OAAO;QAAK;QAE5D,OAAOjC,aAAa8B;IACtB,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAEA,eAAeI,uBACb/B,OAAgC,EAChCU,GAAS;IAET,MAAMT,MAAMD,QAAQC,GAAG,IAAIC,QAAQD,GAAG;IACtC,MAAM+B,qBAAqB,CAACnC,aAAaI,IAAIG,iBAAiB;IAC9D,IAAI,CAAC4B,sBAAsB,AAAChC,CAAAA,QAAQiC,QAAQ,IAAI/B,QAAQ+B,QAAQ,AAAD,MAAO,UAAU;QAC9E,OAAO;YAAEpB,OAAO;YAAME,SAAS;QAAM;IACvC;IACA,IAAI;QACF,MAAMM,UAAU,MAAM,AAACrB,CAAAA,QAAQkC,YAAY,IAAIT,kBAAiB,EAAGjC;QACnE,OAAO4B,sBAAsBC,SAASX;IACxC,EAAE,OAAM;QACN,OAAO;YAAEG,OAAO;YAAME,SAAS;QAAM;IACvC;AACF;AAEA,OAAO,eAAeoB,4BACpBnC,UAAmC,CAAC,CAAC;IAErC,MAAMC,MAAMD,QAAQC,GAAG,IAAIC,QAAQD,GAAG;IACtC,MAAMmC,mBAAmBvC,aAAaI,IAAIoC,uBAAuB;IACjE,IAAID,kBAAkB,OAAOA;IAE7B,MAAM1B,MAAMV,QAAQU,GAAG,QAAQ,IAAI4B;IACnC,MAAMC,oBAAoB,MAAMf,sBAAsBxB,SAASU;IAC/D,IAAI6B,kBAAkB1B,KAAK,EAAE,OAAO0B,kBAAkB1B,KAAK;IAE3D,MAAM2B,qBAAqB,MAAMT,uBAAuB/B,SAASU;IACjE,IAAI8B,mBAAmB3B,KAAK,EAAE,OAAO2B,mBAAmB3B,KAAK;IAC7D,IAAI0B,kBAAkBxB,OAAO,IAAIyB,mBAAmBzB,OAAO,EAAE;QAC3D,MAAM,IAAI0B,MAAM;IAClB;IACA,MAAM,IAAIA,MAAM;AAClB"}
@@ -0,0 +1,3 @@
1
+ import type { HarnessReadinessProfile } from "../readiness/types.js";
2
+ export declare const claudeReadiness: HarnessReadinessProfile;
3
+ //# sourceMappingURL=readiness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readiness.d.ts","sourceRoot":"","sources":["../../../src/harnesses/claude/readiness.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,uBAAuB,EAGxB,MAAM,uBAAuB,CAAC;AAoD/B,eAAO,MAAM,eAAe,EAAE,uBAI7B,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { join } from "node:path";
2
+ import { record, registrationCheck, scriptCheck, worstReadinessStatus } from "../readiness/checks.js";
3
+ async function authCheck(runtime) {
4
+ try {
5
+ const result = await runtime.runCommand("claude", [
6
+ "auth",
7
+ "status",
8
+ "--json"
9
+ ]);
10
+ const parsed = record(JSON.parse(result.stdout));
11
+ const authenticated = parsed?.loggedIn === true || parsed?.authenticated === true;
12
+ const unauthenticated = parsed?.loggedIn === false || parsed?.authenticated === false;
13
+ return {
14
+ state: authenticated ? "authenticated" : unauthenticated ? "unauthenticated" : "unknown",
15
+ source: "claude auth status --json",
16
+ provider: null,
17
+ availableProviders: [],
18
+ status: authenticated ? "pass" : unauthenticated ? "fail" : "warn",
19
+ errors: authenticated ? [] : [
20
+ unauthenticated ? "Claude is not authenticated" : "Claude authentication is unknown"
21
+ ]
22
+ };
23
+ } catch {
24
+ return {
25
+ state: "unknown",
26
+ source: "claude auth status --json",
27
+ provider: null,
28
+ availableProviders: [],
29
+ status: "warn",
30
+ errors: [
31
+ "Claude authentication probe failed"
32
+ ]
33
+ };
34
+ }
35
+ }
36
+ async function integrationCheck(runtime) {
37
+ const script = await scriptCheck(join(runtime.homeDir, ".claude", "hooks", "claude-prompt-hook.js"), join(runtime.assetRoot ?? "", "claude", "claude-prompt-hook.js"), runtime);
38
+ const registration = await registrationCheck(join(runtime.homeDir, ".claude", "settings.json"), "PreToolUse", "node ~/.claude/hooks/claude-prompt-hook.js", runtime);
39
+ const installed = script.status === "pass" && registration.status === "pass";
40
+ return {
41
+ label: "ai-devkit hook",
42
+ installed,
43
+ status: worstReadinessStatus([
44
+ script.status,
45
+ registration.status
46
+ ]),
47
+ errors: [
48
+ ...script.errors,
49
+ ...registration.errors
50
+ ],
51
+ details: {
52
+ promptScript: script,
53
+ registration
54
+ }
55
+ };
56
+ }
57
+ export const claudeReadiness = {
58
+ configDir: ".claude",
59
+ auth: authCheck,
60
+ integration: integrationCheck
61
+ };
62
+
63
+ //# sourceMappingURL=readiness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/harnesses/claude/readiness.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport {\n record,\n registrationCheck,\n scriptCheck,\n worstReadinessStatus,\n} from \"../readiness/checks.js\";\nimport type {\n AuthReadinessCheck,\n HarnessReadinessProfile,\n IntegrationReadinessCheck,\n ReadinessRuntime,\n} from \"../readiness/types.js\";\n\nasync function authCheck(runtime: ReadinessRuntime): Promise<AuthReadinessCheck> {\n try {\n const result = await runtime.runCommand(\"claude\", [\"auth\", \"status\", \"--json\"]);\n const parsed = record(JSON.parse(result.stdout));\n const authenticated = parsed?.loggedIn === true || parsed?.authenticated === true;\n const unauthenticated = parsed?.loggedIn === false || parsed?.authenticated === false;\n return {\n state: authenticated ? \"authenticated\" : unauthenticated ? \"unauthenticated\" : \"unknown\",\n source: \"claude auth status --json\",\n provider: null,\n availableProviders: [],\n status: authenticated ? \"pass\" : unauthenticated ? \"fail\" : \"warn\",\n errors: authenticated\n ? []\n : [unauthenticated ? \"Claude is not authenticated\" : \"Claude authentication is unknown\"],\n };\n } catch {\n return {\n state: \"unknown\",\n source: \"claude auth status --json\",\n provider: null,\n availableProviders: [],\n status: \"warn\",\n errors: [\"Claude authentication probe failed\"],\n };\n }\n}\n\nasync function integrationCheck(runtime: ReadinessRuntime): Promise<IntegrationReadinessCheck> {\n const script = await scriptCheck(\n join(runtime.homeDir, \".claude\", \"hooks\", \"claude-prompt-hook.js\"),\n join(runtime.assetRoot ?? \"\", \"claude\", \"claude-prompt-hook.js\"),\n runtime,\n );\n const registration = await registrationCheck(\n join(runtime.homeDir, \".claude\", \"settings.json\"),\n \"PreToolUse\",\n \"node ~/.claude/hooks/claude-prompt-hook.js\",\n runtime,\n );\n const installed = script.status === \"pass\" && registration.status === \"pass\";\n return {\n label: \"ai-devkit hook\",\n installed,\n status: worstReadinessStatus([script.status, registration.status]),\n errors: [...script.errors, ...registration.errors],\n details: { promptScript: script, registration },\n };\n}\n\nexport const claudeReadiness: HarnessReadinessProfile = {\n configDir: \".claude\",\n auth: authCheck,\n integration: integrationCheck,\n};\n"],"names":["join","record","registrationCheck","scriptCheck","worstReadinessStatus","authCheck","runtime","result","runCommand","parsed","JSON","parse","stdout","authenticated","loggedIn","unauthenticated","state","source","provider","availableProviders","status","errors","integrationCheck","script","homeDir","assetRoot","registration","installed","label","details","promptScript","claudeReadiness","configDir","auth","integration"],"mappings":"AAAA,SAASA,IAAI,QAAQ,YAAY;AACjC,SACEC,MAAM,EACNC,iBAAiB,EACjBC,WAAW,EACXC,oBAAoB,QACf,yBAAyB;AAQhC,eAAeC,UAAUC,OAAyB;IAChD,IAAI;QACF,MAAMC,SAAS,MAAMD,QAAQE,UAAU,CAAC,UAAU;YAAC;YAAQ;YAAU;SAAS;QAC9E,MAAMC,SAASR,OAAOS,KAAKC,KAAK,CAACJ,OAAOK,MAAM;QAC9C,MAAMC,gBAAgBJ,QAAQK,aAAa,QAAQL,QAAQI,kBAAkB;QAC7E,MAAME,kBAAkBN,QAAQK,aAAa,SAASL,QAAQI,kBAAkB;QAChF,OAAO;YACLG,OAAOH,gBAAgB,kBAAkBE,kBAAkB,oBAAoB;YAC/EE,QAAQ;YACRC,UAAU;YACVC,oBAAoB,EAAE;YACtBC,QAAQP,gBAAgB,SAASE,kBAAkB,SAAS;YAC5DM,QAAQR,gBACJ,EAAE,GACF;gBAACE,kBAAkB,gCAAgC;aAAmC;QAC5F;IACF,EAAE,OAAM;QACN,OAAO;YACLC,OAAO;YACPC,QAAQ;YACRC,UAAU;YACVC,oBAAoB,EAAE;YACtBC,QAAQ;YACRC,QAAQ;gBAAC;aAAqC;QAChD;IACF;AACF;AAEA,eAAeC,iBAAiBhB,OAAyB;IACvD,MAAMiB,SAAS,MAAMpB,YACnBH,KAAKM,QAAQkB,OAAO,EAAE,WAAW,SAAS,0BAC1CxB,KAAKM,QAAQmB,SAAS,IAAI,IAAI,UAAU,0BACxCnB;IAEF,MAAMoB,eAAe,MAAMxB,kBACzBF,KAAKM,QAAQkB,OAAO,EAAE,WAAW,kBACjC,cACA,8CACAlB;IAEF,MAAMqB,YAAYJ,OAAOH,MAAM,KAAK,UAAUM,aAAaN,MAAM,KAAK;IACtE,OAAO;QACLQ,OAAO;QACPD;QACAP,QAAQhB,qBAAqB;YAACmB,OAAOH,MAAM;YAAEM,aAAaN,MAAM;SAAC;QACjEC,QAAQ;eAAIE,OAAOF,MAAM;eAAKK,aAAaL,MAAM;SAAC;QAClDQ,SAAS;YAAEC,cAAcP;YAAQG;QAAa;IAChD;AACF;AAEA,OAAO,MAAMK,kBAA2C;IACtDC,WAAW;IACXC,MAAM5B;IACN6B,aAAaZ;AACf,EAAE"}
@@ -0,0 +1,15 @@
1
+ export type CodexCredentialOptions = {
2
+ env?: NodeJS.ProcessEnv;
3
+ readFile?: (path: string, encoding: BufferEncoding) => Promise<string>;
4
+ now?: () => Date;
5
+ };
6
+ export type CodexCredentials = {
7
+ personalAccessToken: string | null;
8
+ oauth: {
9
+ access: string;
10
+ accountId: string;
11
+ } | null;
12
+ };
13
+ export declare function resolveCodexAuthPath(env?: NodeJS.ProcessEnv): string;
14
+ export declare function resolveCodexCredentials(options?: CodexCredentialOptions): Promise<CodexCredentials | null>;
15
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/harnesses/codex/credentials.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACrD,CAAC;AAgBF,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAGjF;AAuBD,wBAAsB,uBAAuB,CAC3C,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAsBlC"}
@@ -0,0 +1,58 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ function record(value) {
4
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
5
+ }
6
+ function finiteNumber(value) {
7
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
8
+ }
9
+ function nonEmptyText(value) {
10
+ return typeof value === "string" && value.length > 0 ? value : null;
11
+ }
12
+ export function resolveCodexAuthPath(env = process.env) {
13
+ const root = env.CODEX_HOME || join(env.HOME || "", ".codex");
14
+ return join(root, "auth.json");
15
+ }
16
+ function jwtExpiry(token) {
17
+ const part = token.split(".")[1];
18
+ if (!part) return null;
19
+ try {
20
+ return finiteNumber(record(JSON.parse(Buffer.from(part, "base64url").toString("utf8")))?.exp);
21
+ } catch {
22
+ return null;
23
+ }
24
+ }
25
+ function staleOAuth(tokens, token, now) {
26
+ const metadata = tokens.expires_at ?? tokens.expiresAt ?? tokens.expiry;
27
+ let expiry = finiteNumber(metadata);
28
+ if (typeof metadata === "string") {
29
+ const parsed = Date.parse(metadata);
30
+ expiry = Number.isNaN(parsed) ? null : parsed / 1000;
31
+ }
32
+ expiry ??= jwtExpiry(token);
33
+ return expiry !== null && expiry <= now.getTime() / 1000;
34
+ }
35
+ export async function resolveCodexCredentials(options = {}) {
36
+ let auth;
37
+ try {
38
+ const contents = await (options.readFile ?? readFile)(resolveCodexAuthPath(options.env), "utf8");
39
+ auth = record(JSON.parse(contents)) ?? {};
40
+ } catch {
41
+ return null;
42
+ }
43
+ const personalAccessToken = nonEmptyText(auth.personal_access_token);
44
+ const tokens = record(auth.tokens);
45
+ const access = nonEmptyText(tokens?.access_token);
46
+ const accountId = nonEmptyText(tokens?.account_id);
47
+ const now = options.now?.() ?? new Date();
48
+ const oauth = tokens && access && accountId && !staleOAuth(tokens, access, now) ? {
49
+ access,
50
+ accountId
51
+ } : null;
52
+ return {
53
+ personalAccessToken,
54
+ oauth
55
+ };
56
+ }
57
+
58
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/harnesses/codex/credentials.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport type CodexCredentialOptions = {\n env?: NodeJS.ProcessEnv;\n readFile?: (path: string, encoding: BufferEncoding) => Promise<string>;\n now?: () => Date;\n};\n\nexport type CodexCredentials = {\n personalAccessToken: string | null;\n oauth: { access: string; accountId: string } | null;\n};\n\nfunction record(value: unknown): UnknownRecord | null {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as UnknownRecord)\n : null;\n}\n\nfunction finiteNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction nonEmptyText(value: unknown): string | null {\n return typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\nexport function resolveCodexAuthPath(env: NodeJS.ProcessEnv = process.env): string {\n const root = env.CODEX_HOME || join(env.HOME || \"\", \".codex\");\n return join(root, \"auth.json\");\n}\n\nfunction jwtExpiry(token: string): number | null {\n const part = token.split(\".\")[1];\n if (!part) return null;\n try {\n return finiteNumber(record(JSON.parse(Buffer.from(part, \"base64url\").toString(\"utf8\")))?.exp);\n } catch {\n return null;\n }\n}\n\nfunction staleOAuth(tokens: UnknownRecord, token: string, now: Date): boolean {\n const metadata = tokens.expires_at ?? tokens.expiresAt ?? tokens.expiry;\n let expiry: number | null = finiteNumber(metadata);\n if (typeof metadata === \"string\") {\n const parsed = Date.parse(metadata);\n expiry = Number.isNaN(parsed) ? null : parsed / 1000;\n }\n expiry ??= jwtExpiry(token);\n return expiry !== null && expiry <= now.getTime() / 1000;\n}\n\nexport async function resolveCodexCredentials(\n options: CodexCredentialOptions = {},\n): Promise<CodexCredentials | null> {\n let auth: UnknownRecord;\n try {\n const contents = await (options.readFile ?? readFile)(\n resolveCodexAuthPath(options.env),\n \"utf8\",\n );\n auth = record(JSON.parse(contents)) ?? {};\n } catch {\n return null;\n }\n\n const personalAccessToken = nonEmptyText(auth.personal_access_token);\n const tokens = record(auth.tokens);\n const access = nonEmptyText(tokens?.access_token);\n const accountId = nonEmptyText(tokens?.account_id);\n const now = options.now?.() ?? new Date();\n const oauth =\n tokens && access && accountId && !staleOAuth(tokens, access, now)\n ? { access, accountId }\n : null;\n return { personalAccessToken, oauth };\n}\n"],"names":["readFile","join","record","value","Array","isArray","finiteNumber","Number","isFinite","nonEmptyText","length","resolveCodexAuthPath","env","process","root","CODEX_HOME","HOME","jwtExpiry","token","part","split","JSON","parse","Buffer","from","toString","exp","staleOAuth","tokens","now","metadata","expires_at","expiresAt","expiry","parsed","Date","isNaN","getTime","resolveCodexCredentials","options","auth","contents","personalAccessToken","personal_access_token","access","access_token","accountId","account_id","oauth"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,IAAI,QAAQ,YAAY;AAejC,SAASC,OAAOC,KAAc;IAC5B,OAAOA,UAAU,QAAQ,OAAOA,UAAU,YAAY,CAACC,MAAMC,OAAO,CAACF,SAChEA,QACD;AACN;AAEA,SAASG,aAAaH,KAAc;IAClC,OAAO,OAAOA,UAAU,YAAYI,OAAOC,QAAQ,CAACL,SAASA,QAAQ;AACvE;AAEA,SAASM,aAAaN,KAAc;IAClC,OAAO,OAAOA,UAAU,YAAYA,MAAMO,MAAM,GAAG,IAAIP,QAAQ;AACjE;AAEA,OAAO,SAASQ,qBAAqBC,MAAyBC,QAAQD,GAAG;IACvE,MAAME,OAAOF,IAAIG,UAAU,IAAId,KAAKW,IAAII,IAAI,IAAI,IAAI;IACpD,OAAOf,KAAKa,MAAM;AACpB;AAEA,SAASG,UAAUC,KAAa;IAC9B,MAAMC,OAAOD,MAAME,KAAK,CAAC,IAAI,CAAC,EAAE;IAChC,IAAI,CAACD,MAAM,OAAO;IAClB,IAAI;QACF,OAAOb,aAAaJ,OAAOmB,KAAKC,KAAK,CAACC,OAAOC,IAAI,CAACL,MAAM,aAAaM,QAAQ,CAAC,WAAWC;IAC3F,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAEA,SAASC,WAAWC,MAAqB,EAAEV,KAAa,EAAEW,GAAS;IACjE,MAAMC,WAAWF,OAAOG,UAAU,IAAIH,OAAOI,SAAS,IAAIJ,OAAOK,MAAM;IACvE,IAAIA,SAAwB3B,aAAawB;IACzC,IAAI,OAAOA,aAAa,UAAU;QAChC,MAAMI,SAASC,KAAKb,KAAK,CAACQ;QAC1BG,SAAS1B,OAAO6B,KAAK,CAACF,UAAU,OAAOA,SAAS;IAClD;IACAD,WAAWhB,UAAUC;IACrB,OAAOe,WAAW,QAAQA,UAAUJ,IAAIQ,OAAO,KAAK;AACtD;AAEA,OAAO,eAAeC,wBACpBC,UAAkC,CAAC,CAAC;IAEpC,IAAIC;IACJ,IAAI;QACF,MAAMC,WAAW,MAAM,AAACF,CAAAA,QAAQvC,QAAQ,IAAIA,QAAO,EACjDW,qBAAqB4B,QAAQ3B,GAAG,GAChC;QAEF4B,OAAOtC,OAAOmB,KAAKC,KAAK,CAACmB,cAAc,CAAC;IAC1C,EAAE,OAAM;QACN,OAAO;IACT;IAEA,MAAMC,sBAAsBjC,aAAa+B,KAAKG,qBAAqB;IACnE,MAAMf,SAAS1B,OAAOsC,KAAKZ,MAAM;IACjC,MAAMgB,SAASnC,aAAamB,QAAQiB;IACpC,MAAMC,YAAYrC,aAAamB,QAAQmB;IACvC,MAAMlB,MAAMU,QAAQV,GAAG,QAAQ,IAAIM;IACnC,MAAMa,QACJpB,UAAUgB,UAAUE,aAAa,CAACnB,WAAWC,QAAQgB,QAAQf,OACzD;QAAEe;QAAQE;IAAU,IACpB;IACN,OAAO;QAAEJ;QAAqBM;IAAM;AACtC"}
@@ -0,0 +1,3 @@
1
+ import type { HarnessReadinessProfile } from "../readiness/types.js";
2
+ export declare const codexReadiness: HarnessReadinessProfile;
3
+ //# sourceMappingURL=readiness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readiness.d.ts","sourceRoot":"","sources":["../../../src/harnesses/codex/readiness.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,uBAAuB,EAGxB,MAAM,uBAAuB,CAAC;AAsD/B,eAAO,MAAM,cAAc,EAAE,uBAI5B,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { join } from "node:path";
2
+ import { displayHome, mappingCheck, registrationCheck, scriptCheck, worstReadinessStatus } from "../readiness/checks.js";
3
+ async function authCheck(runtime) {
4
+ try {
5
+ const value = await runtime.codexAuth();
6
+ return {
7
+ state: value === true ? "authenticated" : value === false ? "unauthenticated" : "unknown",
8
+ source: displayHome(join(runtime.homeDir, ".codex", "auth.json"), runtime.homeDir),
9
+ provider: null,
10
+ availableProviders: [],
11
+ status: value === true ? "pass" : value === false ? "fail" : "warn",
12
+ errors: value === true ? [] : [
13
+ value === false ? "Codex is not authenticated" : "Codex authentication is unknown"
14
+ ]
15
+ };
16
+ } catch {
17
+ return {
18
+ state: "unknown",
19
+ source: "~/.codex/auth.json",
20
+ provider: null,
21
+ availableProviders: [],
22
+ status: "warn",
23
+ errors: [
24
+ "Codex authentication probe failed"
25
+ ]
26
+ };
27
+ }
28
+ }
29
+ async function integrationCheck(runtime) {
30
+ const script = await scriptCheck(join(runtime.homeDir, ".codex", "hooks", "codex-session-mapping.cjs"), join(runtime.assetRoot ?? "", "codex", "codex-session-mapping.cjs"), runtime);
31
+ const registration = await registrationCheck(join(runtime.homeDir, ".codex", "hooks.json"), "SessionStart", "node ~/.codex/hooks/codex-session-mapping.cjs", runtime);
32
+ const mappingFile = await mappingCheck(join(runtime.homeDir, ".codex", "ai-devkit", "sessions.json"), runtime);
33
+ const installed = script.status === "pass" && registration.status === "pass";
34
+ return {
35
+ label: "ai-devkit hook",
36
+ installed,
37
+ status: worstReadinessStatus([
38
+ script.status,
39
+ registration.status,
40
+ mappingFile.status
41
+ ]),
42
+ errors: [
43
+ ...script.errors,
44
+ ...registration.errors,
45
+ ...mappingFile.errors
46
+ ],
47
+ details: {
48
+ sessionMappingScript: script,
49
+ registration,
50
+ mappingFile
51
+ }
52
+ };
53
+ }
54
+ export const codexReadiness = {
55
+ configDir: ".codex",
56
+ auth: authCheck,
57
+ integration: integrationCheck
58
+ };
59
+
60
+ //# sourceMappingURL=readiness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/harnesses/codex/readiness.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport {\n displayHome,\n mappingCheck,\n registrationCheck,\n scriptCheck,\n worstReadinessStatus,\n} from \"../readiness/checks.js\";\nimport type {\n AuthReadinessCheck,\n HarnessReadinessProfile,\n IntegrationReadinessCheck,\n ReadinessRuntime,\n} from \"../readiness/types.js\";\n\nasync function authCheck(runtime: ReadinessRuntime): Promise<AuthReadinessCheck> {\n try {\n const value = await runtime.codexAuth();\n return {\n state: value === true ? \"authenticated\" : value === false ? \"unauthenticated\" : \"unknown\",\n source: displayHome(join(runtime.homeDir, \".codex\", \"auth.json\"), runtime.homeDir),\n provider: null,\n availableProviders: [],\n status: value === true ? \"pass\" : value === false ? \"fail\" : \"warn\",\n errors:\n value === true\n ? []\n : [value === false ? \"Codex is not authenticated\" : \"Codex authentication is unknown\"],\n };\n } catch {\n return {\n state: \"unknown\",\n source: \"~/.codex/auth.json\",\n provider: null,\n availableProviders: [],\n status: \"warn\",\n errors: [\"Codex authentication probe failed\"],\n };\n }\n}\n\nasync function integrationCheck(runtime: ReadinessRuntime): Promise<IntegrationReadinessCheck> {\n const script = await scriptCheck(\n join(runtime.homeDir, \".codex\", \"hooks\", \"codex-session-mapping.cjs\"),\n join(runtime.assetRoot ?? \"\", \"codex\", \"codex-session-mapping.cjs\"),\n runtime,\n );\n const registration = await registrationCheck(\n join(runtime.homeDir, \".codex\", \"hooks.json\"),\n \"SessionStart\",\n \"node ~/.codex/hooks/codex-session-mapping.cjs\",\n runtime,\n );\n const mappingFile = await mappingCheck(\n join(runtime.homeDir, \".codex\", \"ai-devkit\", \"sessions.json\"),\n runtime,\n );\n const installed = script.status === \"pass\" && registration.status === \"pass\";\n return {\n label: \"ai-devkit hook\",\n installed,\n status: worstReadinessStatus([script.status, registration.status, mappingFile.status]),\n errors: [...script.errors, ...registration.errors, ...mappingFile.errors],\n details: { sessionMappingScript: script, registration, mappingFile },\n };\n}\n\nexport const codexReadiness: HarnessReadinessProfile = {\n configDir: \".codex\",\n auth: authCheck,\n integration: integrationCheck,\n};\n"],"names":["join","displayHome","mappingCheck","registrationCheck","scriptCheck","worstReadinessStatus","authCheck","runtime","value","codexAuth","state","source","homeDir","provider","availableProviders","status","errors","integrationCheck","script","assetRoot","registration","mappingFile","installed","label","details","sessionMappingScript","codexReadiness","configDir","auth","integration"],"mappings":"AAAA,SAASA,IAAI,QAAQ,YAAY;AACjC,SACEC,WAAW,EACXC,YAAY,EACZC,iBAAiB,EACjBC,WAAW,EACXC,oBAAoB,QACf,yBAAyB;AAQhC,eAAeC,UAAUC,OAAyB;IAChD,IAAI;QACF,MAAMC,QAAQ,MAAMD,QAAQE,SAAS;QACrC,OAAO;YACLC,OAAOF,UAAU,OAAO,kBAAkBA,UAAU,QAAQ,oBAAoB;YAChFG,QAAQV,YAAYD,KAAKO,QAAQK,OAAO,EAAE,UAAU,cAAcL,QAAQK,OAAO;YACjFC,UAAU;YACVC,oBAAoB,EAAE;YACtBC,QAAQP,UAAU,OAAO,SAASA,UAAU,QAAQ,SAAS;YAC7DQ,QACER,UAAU,OACN,EAAE,GACF;gBAACA,UAAU,QAAQ,+BAA+B;aAAkC;QAC5F;IACF,EAAE,OAAM;QACN,OAAO;YACLE,OAAO;YACPC,QAAQ;YACRE,UAAU;YACVC,oBAAoB,EAAE;YACtBC,QAAQ;YACRC,QAAQ;gBAAC;aAAoC;QAC/C;IACF;AACF;AAEA,eAAeC,iBAAiBV,OAAyB;IACvD,MAAMW,SAAS,MAAMd,YACnBJ,KAAKO,QAAQK,OAAO,EAAE,UAAU,SAAS,8BACzCZ,KAAKO,QAAQY,SAAS,IAAI,IAAI,SAAS,8BACvCZ;IAEF,MAAMa,eAAe,MAAMjB,kBACzBH,KAAKO,QAAQK,OAAO,EAAE,UAAU,eAChC,gBACA,iDACAL;IAEF,MAAMc,cAAc,MAAMnB,aACxBF,KAAKO,QAAQK,OAAO,EAAE,UAAU,aAAa,kBAC7CL;IAEF,MAAMe,YAAYJ,OAAOH,MAAM,KAAK,UAAUK,aAAaL,MAAM,KAAK;IACtE,OAAO;QACLQ,OAAO;QACPD;QACAP,QAAQV,qBAAqB;YAACa,OAAOH,MAAM;YAAEK,aAAaL,MAAM;YAAEM,YAAYN,MAAM;SAAC;QACrFC,QAAQ;eAAIE,OAAOF,MAAM;eAAKI,aAAaJ,MAAM;eAAKK,YAAYL,MAAM;SAAC;QACzEQ,SAAS;YAAEC,sBAAsBP;YAAQE;YAAcC;QAAY;IACrE;AACF;AAEA,OAAO,MAAMK,iBAA0C;IACrDC,WAAW;IACXC,MAAMtB;IACNuB,aAAaZ;AACf,EAAE"}
@@ -0,0 +1,3 @@
1
+ import type { HarnessReadinessProfile } from "../readiness/types.js";
2
+ export declare const copilotReadiness: HarnessReadinessProfile;
3
+ //# sourceMappingURL=readiness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readiness.d.ts","sourceRoot":"","sources":["../../../src/harnesses/copilot/readiness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,uBAAuB,EAExB,MAAM,uBAAuB,CAAC;AAyB/B,eAAO,MAAM,gBAAgB,EAAE,uBAG9B,CAAC"}
@@ -0,0 +1,39 @@
1
+ async function authCheck(runtime) {
2
+ try {
3
+ await runtime.runCommand("gh", [
4
+ "auth",
5
+ "status",
6
+ "--hostname",
7
+ "github.com"
8
+ ]);
9
+ return {
10
+ state: "authenticated",
11
+ source: "gh auth status --hostname github.com",
12
+ provider: "github",
13
+ availableProviders: [
14
+ "GitHub"
15
+ ],
16
+ status: "pass",
17
+ errors: []
18
+ };
19
+ } catch {
20
+ return {
21
+ state: "unknown",
22
+ source: "gh auth status --hostname github.com",
23
+ provider: null,
24
+ availableProviders: [
25
+ "GitHub"
26
+ ],
27
+ status: "warn",
28
+ errors: [
29
+ "Copilot authentication could not be verified through GitHub CLI"
30
+ ]
31
+ };
32
+ }
33
+ }
34
+ export const copilotReadiness = {
35
+ configDir: ".copilot",
36
+ auth: authCheck
37
+ };
38
+
39
+ //# sourceMappingURL=readiness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/harnesses/copilot/readiness.ts"],"sourcesContent":["import type {\n AuthReadinessCheck,\n HarnessReadinessProfile,\n ReadinessRuntime,\n} from \"../readiness/types.js\";\n\nasync function authCheck(runtime: ReadinessRuntime): Promise<AuthReadinessCheck> {\n try {\n await runtime.runCommand(\"gh\", [\"auth\", \"status\", \"--hostname\", \"github.com\"]);\n return {\n state: \"authenticated\",\n source: \"gh auth status --hostname github.com\",\n provider: \"github\",\n availableProviders: [\"GitHub\"],\n status: \"pass\",\n errors: [],\n };\n } catch {\n return {\n state: \"unknown\",\n source: \"gh auth status --hostname github.com\",\n provider: null,\n availableProviders: [\"GitHub\"],\n status: \"warn\",\n errors: [\"Copilot authentication could not be verified through GitHub CLI\"],\n };\n }\n}\n\nexport const copilotReadiness: HarnessReadinessProfile = {\n configDir: \".copilot\",\n auth: authCheck,\n};\n"],"names":["authCheck","runtime","runCommand","state","source","provider","availableProviders","status","errors","copilotReadiness","configDir","auth"],"mappings":"AAMA,eAAeA,UAAUC,OAAyB;IAChD,IAAI;QACF,MAAMA,QAAQC,UAAU,CAAC,MAAM;YAAC;YAAQ;YAAU;YAAc;SAAa;QAC7E,OAAO;YACLC,OAAO;YACPC,QAAQ;YACRC,UAAU;YACVC,oBAAoB;gBAAC;aAAS;YAC9BC,QAAQ;YACRC,QAAQ,EAAE;QACZ;IACF,EAAE,OAAM;QACN,OAAO;YACLL,OAAO;YACPC,QAAQ;YACRC,UAAU;YACVC,oBAAoB;gBAAC;aAAS;YAC9BC,QAAQ;YACRC,QAAQ;gBAAC;aAAkE;QAC7E;IACF;AACF;AAEA,OAAO,MAAMC,mBAA4C;IACvDC,WAAW;IACXC,MAAMX;AACR,EAAE"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Devin Adapter
3
+ *
4
+ * Detects running Devin CLI agents by:
5
+ * 1. Filtering `devin` processes from a shared process snapshot, rejecting
6
+ * utility subcommands (list, doctor, ssh, ...) and `devin acp` children
7
+ * spawned by a Devin TUI
8
+ * 2. Matching processes to sessions via `session_locks/<slug>.lock` files,
9
+ * which contain the PID of the session's `devin acp` backend (lock-first;
10
+ * a TUI is matched through its backend child's ppid)
11
+ * 3. Falling back to `sessions.working_directory` matching in
12
+ * ~/.local/share/devin/cli/sessions.db (WAL SQLite, opened read-only)
13
+ *
14
+ * sessionFilePath encodes "<dbPath>::<sessionSlug>" so getConversation() can
15
+ * address a session row without extending the AgentAdapter interface.
16
+ */
17
+ import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage, ConversationOptions, SessionSummary, ListSessionsOptions, AgentDetectionContext } from "../../adapters/AgentAdapter.js";
18
+ export declare class DevinAdapter implements AgentAdapter {
19
+ readonly type: "devin";
20
+ readonly processNames: readonly ["devin"];
21
+ private readonly parser;
22
+ private readonly locator;
23
+ private readonly mapper;
24
+ private readonly cleanup;
25
+ constructor(dbPath?: string, locksDir?: string);
26
+ close(): void;
27
+ canHandle(processInfo: ProcessInfo): boolean;
28
+ detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]>;
29
+ getConversation(sessionFilePath: string, options?: ConversationOptions): ConversationMessage[];
30
+ listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]>;
31
+ findSessionsById(sessionId: string): Promise<SessionSummary[]>;
32
+ /**
33
+ * A `devin acp` process spawned by another devin process is that session's
34
+ * backend, not a separate agent. Standalone `acp` processes (external ACP
35
+ * clients) keep their own agent entry.
36
+ */
37
+ private isAcpBackendChild;
38
+ }
39
+ //# sourceMappingURL=DevinAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DevinAdapter.d.ts","sourceRoot":"","sources":["../../../src/harnesses/devin/DevinAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,gCAAgC,CAAC;AAyFxC,qBAAa,YAAa,YAAW,YAAY;IAC/C,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,QAAQ,CAAC,YAAY,qBAAsB;IAE3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;gBAExC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAU9C,KAAK,IAAI,IAAI;IAOb,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAMtC,YAAY,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA6CzE,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE;IAUxF,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAInE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAIpE;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;CAQ1B"}