@phnx-labs/agents-cli 0.1.0 → 1.14.1

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 (554) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/README.md +283 -372
  3. package/dist/commands/alias.d.ts +11 -0
  4. package/dist/commands/alias.js +117 -0
  5. package/dist/commands/beta.d.ts +2 -0
  6. package/dist/commands/beta.js +53 -0
  7. package/dist/commands/cloud.d.ts +8 -1
  8. package/dist/commands/cloud.js +108 -22
  9. package/dist/commands/commands.d.ts +9 -1
  10. package/dist/commands/commands.js +24 -172
  11. package/dist/commands/daemon.d.ts +8 -1
  12. package/dist/commands/daemon.js +13 -5
  13. package/dist/commands/doctor.d.ts +15 -0
  14. package/dist/commands/doctor.js +132 -0
  15. package/dist/commands/drive.d.ts +8 -1
  16. package/dist/commands/drive.js +20 -3
  17. package/dist/commands/exec.d.ts +8 -1
  18. package/dist/commands/exec.js +96 -27
  19. package/dist/commands/factory.d.ts +19 -0
  20. package/dist/commands/factory.js +71 -0
  21. package/dist/commands/fork.d.ts +8 -1
  22. package/dist/commands/fork.js +11 -4
  23. package/dist/commands/hooks.d.ts +9 -1
  24. package/dist/commands/hooks.js +30 -182
  25. package/dist/commands/init.d.ts +15 -1
  26. package/dist/commands/init.js +168 -74
  27. package/dist/commands/mcp.d.ts +9 -1
  28. package/dist/commands/mcp.js +11 -7
  29. package/dist/commands/models.d.ts +8 -1
  30. package/dist/commands/models.js +16 -4
  31. package/dist/commands/packages.d.ts +8 -1
  32. package/dist/commands/packages.js +13 -7
  33. package/dist/commands/permissions.d.ts +9 -1
  34. package/dist/commands/permissions.js +3 -3
  35. package/dist/commands/plugins.d.ts +8 -1
  36. package/dist/commands/plugins.js +13 -2
  37. package/dist/commands/profiles.d.ts +9 -1
  38. package/dist/commands/profiles.js +56 -7
  39. package/dist/commands/prune.d.ts +22 -0
  40. package/dist/commands/prune.js +191 -0
  41. package/dist/commands/pty.d.ts +1 -1
  42. package/dist/commands/pty.js +2 -1
  43. package/dist/commands/pull.d.ts +8 -1
  44. package/dist/commands/pull.js +58 -128
  45. package/dist/commands/refresh-memory.d.ts +7 -1
  46. package/dist/commands/refresh-memory.js +7 -1
  47. package/dist/commands/repo.d.ts +15 -0
  48. package/dist/commands/repo.js +570 -0
  49. package/dist/commands/resource-view.d.ts +10 -3
  50. package/dist/commands/resource-view.js +18 -5
  51. package/dist/commands/routines.d.ts +8 -1
  52. package/dist/commands/routines.js +17 -4
  53. package/dist/commands/rules.d.ts +9 -1
  54. package/dist/commands/rules.js +16 -11
  55. package/dist/commands/secrets.d.ts +8 -1
  56. package/dist/commands/secrets.js +235 -63
  57. package/dist/commands/sessions-picker.d.ts +2 -1
  58. package/dist/commands/sessions-picker.js +88 -11
  59. package/dist/commands/sessions-tail.d.ts +19 -0
  60. package/dist/commands/sessions-tail.js +235 -0
  61. package/dist/commands/sessions.d.ts +2 -1
  62. package/dist/commands/sessions.js +188 -7
  63. package/dist/commands/skills.d.ts +9 -1
  64. package/dist/commands/skills.js +28 -178
  65. package/dist/commands/status.d.ts +7 -1
  66. package/dist/commands/status.js +7 -1
  67. package/dist/commands/subagents.d.ts +8 -1
  68. package/dist/commands/subagents.js +11 -1
  69. package/dist/commands/sync.d.ts +8 -1
  70. package/dist/commands/sync.js +8 -1
  71. package/dist/commands/teams-picker.d.ts +4 -1
  72. package/dist/commands/teams-picker.js +55 -3
  73. package/dist/commands/teams.d.ts +15 -1
  74. package/dist/commands/teams.js +323 -69
  75. package/dist/commands/usage.d.ts +11 -0
  76. package/dist/commands/usage.js +60 -0
  77. package/dist/commands/utils.d.ts +6 -1
  78. package/dist/commands/utils.js +6 -1
  79. package/dist/commands/versions.d.ts +8 -1
  80. package/dist/commands/versions.js +4 -3
  81. package/dist/commands/view.d.ts +47 -2
  82. package/dist/commands/view.js +317 -24
  83. package/dist/index.d.ts +7 -2
  84. package/dist/index.js +172 -34
  85. package/dist/lib/acp/client.d.ts +31 -0
  86. package/dist/lib/acp/client.js +117 -0
  87. package/dist/lib/acp/harnesses.d.ts +26 -0
  88. package/dist/lib/acp/harnesses.js +65 -0
  89. package/dist/lib/acp/run.d.ts +18 -0
  90. package/dist/lib/acp/run.js +39 -0
  91. package/dist/lib/agents.d.ts +74 -2
  92. package/dist/lib/agents.js +197 -21
  93. package/dist/lib/artifact-actions.d.ts +8 -4
  94. package/dist/lib/artifact-actions.js +8 -6
  95. package/dist/lib/auto-pull-worker.d.ts +11 -0
  96. package/dist/lib/auto-pull-worker.js +121 -0
  97. package/dist/lib/auto-pull.d.ts +31 -0
  98. package/dist/lib/auto-pull.js +97 -0
  99. package/dist/lib/beta.d.ts +23 -0
  100. package/dist/lib/beta.js +90 -0
  101. package/dist/lib/capabilities.d.ts +29 -0
  102. package/dist/lib/capabilities.js +74 -0
  103. package/dist/lib/cloud/codex.d.ts +9 -3
  104. package/dist/lib/cloud/codex.js +53 -13
  105. package/dist/lib/cloud/factory.d.ts +8 -3
  106. package/dist/lib/cloud/factory.js +19 -3
  107. package/dist/lib/cloud/registry.d.ts +10 -1
  108. package/dist/lib/cloud/registry.js +14 -3
  109. package/dist/lib/cloud/rush.d.ts +63 -3
  110. package/dist/lib/cloud/rush.js +273 -20
  111. package/dist/lib/cloud/store.d.ts +13 -1
  112. package/dist/lib/cloud/store.js +23 -4
  113. package/dist/lib/cloud/stream.d.ts +6 -1
  114. package/dist/lib/cloud/stream.js +95 -39
  115. package/dist/lib/cloud/types.d.ts +153 -8
  116. package/dist/lib/cloud/types.js +34 -2
  117. package/dist/lib/command-skills.d.ts +20 -0
  118. package/dist/lib/command-skills.js +142 -0
  119. package/dist/lib/commands.d.ts +22 -2
  120. package/dist/lib/commands.js +51 -11
  121. package/dist/lib/convert.d.ts +10 -1
  122. package/dist/lib/convert.js +9 -1
  123. package/dist/lib/daemon.d.ts +21 -1
  124. package/dist/lib/daemon.js +97 -4
  125. package/dist/lib/drive-sync.d.ts +18 -1
  126. package/dist/lib/drive-sync.js +57 -15
  127. package/dist/lib/exec.d.ts +23 -6
  128. package/dist/lib/exec.js +53 -17
  129. package/dist/lib/fs-walk.d.ts +2 -0
  130. package/dist/lib/fs-walk.js +40 -0
  131. package/dist/lib/fuzzy.d.ts +53 -0
  132. package/dist/lib/fuzzy.js +72 -0
  133. package/dist/lib/gemini-settings.d.ts +4 -0
  134. package/dist/lib/gemini-settings.js +33 -0
  135. package/dist/lib/git.d.ts +12 -2
  136. package/dist/lib/git.js +17 -6
  137. package/dist/lib/help.d.ts +20 -1
  138. package/dist/lib/help.js +45 -6
  139. package/dist/lib/hooks/match.d.ts +32 -0
  140. package/dist/lib/hooks/match.js +120 -0
  141. package/dist/lib/hooks.d.ts +17 -4
  142. package/dist/lib/hooks.js +119 -101
  143. package/dist/lib/manifest.d.ts +6 -1
  144. package/dist/lib/manifest.js +15 -4
  145. package/dist/lib/markdown.d.ts +0 -1
  146. package/dist/lib/markdown.js +6 -1
  147. package/dist/lib/mcp.d.ts +0 -1
  148. package/dist/lib/mcp.js +29 -33
  149. package/dist/lib/memory-compile.d.ts +13 -3
  150. package/dist/lib/memory-compile.js +31 -9
  151. package/dist/lib/memory.d.ts +14 -7
  152. package/dist/lib/memory.js +67 -38
  153. package/dist/lib/migrate.d.ts +8 -0
  154. package/dist/lib/migrate.js +85 -0
  155. package/dist/lib/models.d.ts +10 -4
  156. package/dist/lib/models.js +36 -15
  157. package/dist/lib/onepassword.d.ts +63 -0
  158. package/dist/lib/onepassword.js +186 -0
  159. package/dist/lib/paths.d.ts +8 -0
  160. package/dist/lib/paths.js +20 -0
  161. package/dist/lib/permissions.d.ts +24 -2
  162. package/dist/lib/permissions.js +117 -48
  163. package/dist/lib/picker.d.ts +10 -1
  164. package/dist/lib/picker.js +15 -1
  165. package/dist/lib/plugins.d.ts +7 -1
  166. package/dist/lib/plugins.js +10 -1
  167. package/dist/lib/profiles-presets.d.ts +10 -1
  168. package/dist/lib/profiles-presets.js +9 -1
  169. package/dist/lib/profiles.d.ts +35 -1
  170. package/dist/lib/profiles.js +36 -15
  171. package/dist/lib/pty-client.d.ts +1 -1
  172. package/dist/lib/pty-client.js +0 -1
  173. package/dist/lib/pty-server.d.ts +16 -2
  174. package/dist/lib/pty-server.js +92 -3
  175. package/dist/lib/registry.d.ts +23 -3
  176. package/dist/lib/registry.js +153 -8
  177. package/dist/lib/resources.d.ts +28 -1
  178. package/dist/lib/resources.js +79 -1
  179. package/dist/lib/rotate.d.ts +40 -13
  180. package/dist/lib/rotate.js +238 -40
  181. package/dist/lib/routines.d.ts +29 -1
  182. package/dist/lib/routines.js +32 -5
  183. package/dist/lib/runner.d.ts +14 -1
  184. package/dist/lib/runner.js +22 -3
  185. package/dist/lib/sandbox.d.ts +16 -1
  186. package/dist/lib/sandbox.js +39 -16
  187. package/dist/lib/scheduler.d.ts +8 -1
  188. package/dist/lib/scheduler.js +8 -1
  189. package/dist/lib/secrets/AgentsKeychain.app/Contents/CodeResources +0 -0
  190. package/dist/lib/secrets/AgentsKeychain.app/Contents/Info.plist +22 -0
  191. package/dist/lib/secrets/AgentsKeychain.app/Contents/MacOS/AgentsKeychain +0 -0
  192. package/dist/lib/secrets/AgentsKeychain.app/Contents/_CodeSignature/CodeResources +123 -0
  193. package/dist/lib/secrets/AgentsKeychain.app/Contents/embedded.provisionprofile +0 -0
  194. package/dist/lib/{secrets-bundles.d.ts → secrets/bundles.d.ts} +12 -2
  195. package/dist/lib/{secrets-bundles.js → secrets/bundles.js} +38 -17
  196. package/dist/lib/secrets/index.d.ts +55 -0
  197. package/dist/lib/secrets/index.js +211 -0
  198. package/dist/lib/secrets/profiles.d.ts +10 -0
  199. package/dist/lib/secrets/profiles.js +13 -0
  200. package/dist/lib/session/active.d.ts +43 -0
  201. package/dist/lib/session/active.js +392 -0
  202. package/dist/lib/session/artifacts.d.ts +12 -1
  203. package/dist/lib/session/artifacts.js +25 -5
  204. package/dist/lib/session/cloud.d.ts +30 -0
  205. package/dist/lib/session/cloud.js +121 -0
  206. package/dist/lib/session/db.d.ts +23 -2
  207. package/dist/lib/session/db.js +76 -12
  208. package/dist/lib/session/discover.d.ts +19 -4
  209. package/dist/lib/session/discover.js +344 -48
  210. package/dist/lib/session/parse.d.ts +28 -1
  211. package/dist/lib/session/parse.js +267 -9
  212. package/dist/lib/session/prompt.d.ts +9 -1
  213. package/dist/lib/session/prompt.js +17 -3
  214. package/dist/lib/session/render.d.ts +13 -1
  215. package/dist/lib/session/render.js +20 -1
  216. package/dist/lib/session/team-filter.d.ts +9 -1
  217. package/dist/lib/session/team-filter.js +11 -2
  218. package/dist/lib/session/types.d.ts +16 -2
  219. package/dist/lib/session/types.js +10 -2
  220. package/dist/lib/shims.d.ts +64 -5
  221. package/dist/lib/shims.js +309 -47
  222. package/dist/lib/skills.d.ts +27 -2
  223. package/dist/lib/skills.js +127 -65
  224. package/dist/lib/sqlite.d.ts +43 -0
  225. package/dist/lib/sqlite.js +94 -0
  226. package/dist/lib/state.d.ts +112 -27
  227. package/dist/lib/state.js +320 -148
  228. package/dist/lib/subagents.d.ts +9 -1
  229. package/dist/lib/subagents.js +70 -63
  230. package/dist/lib/sync-manifest.d.ts +81 -0
  231. package/dist/lib/sync-manifest.js +450 -0
  232. package/dist/lib/teams/agents.d.ts +103 -5
  233. package/dist/lib/teams/agents.js +414 -91
  234. package/dist/lib/teams/api.d.ts +26 -3
  235. package/dist/lib/teams/api.js +63 -3
  236. package/dist/lib/teams/debug.d.ts +6 -1
  237. package/dist/lib/teams/debug.js +6 -1
  238. package/dist/lib/teams/file_ops.d.ts +7 -1
  239. package/dist/lib/teams/file_ops.js +7 -1
  240. package/dist/lib/teams/index.d.ts +15 -0
  241. package/dist/lib/teams/index.js +14 -0
  242. package/dist/lib/teams/parsers.d.ts +4 -1
  243. package/dist/lib/teams/parsers.js +11 -1
  244. package/dist/lib/teams/persistence.d.ts +15 -1
  245. package/dist/lib/teams/persistence.js +102 -20
  246. package/dist/lib/teams/registry.d.ts +12 -1
  247. package/dist/lib/teams/registry.js +116 -33
  248. package/dist/lib/teams/summarizer.d.ts +15 -1
  249. package/dist/lib/teams/summarizer.js +14 -1
  250. package/dist/lib/teams/supervisor.d.ts +48 -0
  251. package/dist/lib/teams/supervisor.js +73 -0
  252. package/dist/lib/template.d.ts +8 -6
  253. package/dist/lib/template.js +8 -6
  254. package/dist/lib/types.d.ts +147 -8
  255. package/dist/lib/types.js +26 -3
  256. package/dist/lib/usage.d.ts +32 -1
  257. package/dist/lib/usage.js +70 -6
  258. package/dist/lib/version-duplicates.d.ts +21 -0
  259. package/dist/lib/version-duplicates.js +90 -0
  260. package/dist/lib/versions.d.ts +33 -4
  261. package/dist/lib/versions.js +376 -108
  262. package/package.json +32 -17
  263. package/scripts/postinstall.js +126 -30
  264. package/dist/commands/__tests__/sessions.test.d.ts +0 -2
  265. package/dist/commands/__tests__/sessions.test.d.ts.map +0 -1
  266. package/dist/commands/__tests__/sessions.test.js +0 -636
  267. package/dist/commands/__tests__/sessions.test.js.map +0 -1
  268. package/dist/commands/cloud.d.ts.map +0 -1
  269. package/dist/commands/cloud.js.map +0 -1
  270. package/dist/commands/commands.d.ts.map +0 -1
  271. package/dist/commands/commands.js.map +0 -1
  272. package/dist/commands/daemon.d.ts.map +0 -1
  273. package/dist/commands/daemon.js.map +0 -1
  274. package/dist/commands/drive.d.ts.map +0 -1
  275. package/dist/commands/drive.js.map +0 -1
  276. package/dist/commands/exec.d.ts.map +0 -1
  277. package/dist/commands/exec.js.map +0 -1
  278. package/dist/commands/fork.d.ts.map +0 -1
  279. package/dist/commands/fork.js.map +0 -1
  280. package/dist/commands/hooks.d.ts.map +0 -1
  281. package/dist/commands/hooks.js.map +0 -1
  282. package/dist/commands/init.d.ts.map +0 -1
  283. package/dist/commands/init.js.map +0 -1
  284. package/dist/commands/mcp.d.ts.map +0 -1
  285. package/dist/commands/mcp.js.map +0 -1
  286. package/dist/commands/models.d.ts.map +0 -1
  287. package/dist/commands/models.js.map +0 -1
  288. package/dist/commands/packages.d.ts.map +0 -1
  289. package/dist/commands/packages.js.map +0 -1
  290. package/dist/commands/permissions.d.ts.map +0 -1
  291. package/dist/commands/permissions.js.map +0 -1
  292. package/dist/commands/plugins.d.ts.map +0 -1
  293. package/dist/commands/plugins.js.map +0 -1
  294. package/dist/commands/profiles.d.ts.map +0 -1
  295. package/dist/commands/profiles.js.map +0 -1
  296. package/dist/commands/pty.d.ts.map +0 -1
  297. package/dist/commands/pty.js.map +0 -1
  298. package/dist/commands/pull.d.ts.map +0 -1
  299. package/dist/commands/pull.js.map +0 -1
  300. package/dist/commands/push.d.ts +0 -3
  301. package/dist/commands/push.d.ts.map +0 -1
  302. package/dist/commands/push.js +0 -180
  303. package/dist/commands/push.js.map +0 -1
  304. package/dist/commands/refresh-memory.d.ts.map +0 -1
  305. package/dist/commands/refresh-memory.js.map +0 -1
  306. package/dist/commands/resource-view.d.ts.map +0 -1
  307. package/dist/commands/resource-view.js.map +0 -1
  308. package/dist/commands/routines.d.ts.map +0 -1
  309. package/dist/commands/routines.js.map +0 -1
  310. package/dist/commands/rules.d.ts.map +0 -1
  311. package/dist/commands/rules.js.map +0 -1
  312. package/dist/commands/secrets.d.ts.map +0 -1
  313. package/dist/commands/secrets.js.map +0 -1
  314. package/dist/commands/sessions-picker.d.ts.map +0 -1
  315. package/dist/commands/sessions-picker.js.map +0 -1
  316. package/dist/commands/sessions.d.ts.map +0 -1
  317. package/dist/commands/sessions.js.map +0 -1
  318. package/dist/commands/skills.d.ts.map +0 -1
  319. package/dist/commands/skills.js.map +0 -1
  320. package/dist/commands/status.d.ts.map +0 -1
  321. package/dist/commands/status.js.map +0 -1
  322. package/dist/commands/subagents.d.ts.map +0 -1
  323. package/dist/commands/subagents.js.map +0 -1
  324. package/dist/commands/sync.d.ts.map +0 -1
  325. package/dist/commands/sync.js.map +0 -1
  326. package/dist/commands/teams-picker.d.ts.map +0 -1
  327. package/dist/commands/teams-picker.js.map +0 -1
  328. package/dist/commands/teams.d.ts.map +0 -1
  329. package/dist/commands/teams.js.map +0 -1
  330. package/dist/commands/utils.d.ts.map +0 -1
  331. package/dist/commands/utils.js.map +0 -1
  332. package/dist/commands/versions.d.ts.map +0 -1
  333. package/dist/commands/versions.js.map +0 -1
  334. package/dist/commands/view.d.ts.map +0 -1
  335. package/dist/commands/view.js.map +0 -1
  336. package/dist/index.d.ts.map +0 -1
  337. package/dist/index.js.map +0 -1
  338. package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
  339. package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
  340. package/dist/lib/__tests__/bugfixes.test.js +0 -192
  341. package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
  342. package/dist/lib/__tests__/exec.test.d.ts +0 -2
  343. package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
  344. package/dist/lib/__tests__/exec.test.js +0 -446
  345. package/dist/lib/__tests__/exec.test.js.map +0 -1
  346. package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
  347. package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
  348. package/dist/lib/__tests__/git-sync.test.js +0 -138
  349. package/dist/lib/__tests__/git-sync.test.js.map +0 -1
  350. package/dist/lib/__tests__/hooks.test.d.ts +0 -2
  351. package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
  352. package/dist/lib/__tests__/hooks.test.js +0 -203
  353. package/dist/lib/__tests__/hooks.test.js.map +0 -1
  354. package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
  355. package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
  356. package/dist/lib/__tests__/memory-compile.test.js +0 -95
  357. package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
  358. package/dist/lib/__tests__/models.test.d.ts +0 -2
  359. package/dist/lib/__tests__/models.test.d.ts.map +0 -1
  360. package/dist/lib/__tests__/models.test.js +0 -239
  361. package/dist/lib/__tests__/models.test.js.map +0 -1
  362. package/dist/lib/__tests__/rotate.test.d.ts +0 -2
  363. package/dist/lib/__tests__/rotate.test.d.ts.map +0 -1
  364. package/dist/lib/__tests__/rotate.test.js +0 -80
  365. package/dist/lib/__tests__/rotate.test.js.map +0 -1
  366. package/dist/lib/__tests__/secrets-bundles.test.d.ts +0 -2
  367. package/dist/lib/__tests__/secrets-bundles.test.d.ts.map +0 -1
  368. package/dist/lib/__tests__/secrets-bundles.test.js +0 -104
  369. package/dist/lib/__tests__/secrets-bundles.test.js.map +0 -1
  370. package/dist/lib/__tests__/secrets.test.d.ts +0 -2
  371. package/dist/lib/__tests__/secrets.test.d.ts.map +0 -1
  372. package/dist/lib/__tests__/secrets.test.js +0 -90
  373. package/dist/lib/__tests__/secrets.test.js.map +0 -1
  374. package/dist/lib/__tests__/shims.test.d.ts +0 -2
  375. package/dist/lib/__tests__/shims.test.d.ts.map +0 -1
  376. package/dist/lib/__tests__/shims.test.js +0 -39
  377. package/dist/lib/__tests__/shims.test.js.map +0 -1
  378. package/dist/lib/__tests__/usage.test.d.ts +0 -2
  379. package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
  380. package/dist/lib/__tests__/usage.test.js +0 -220
  381. package/dist/lib/__tests__/usage.test.js.map +0 -1
  382. package/dist/lib/__tests__/versions.test.d.ts +0 -2
  383. package/dist/lib/__tests__/versions.test.d.ts.map +0 -1
  384. package/dist/lib/__tests__/versions.test.js +0 -63
  385. package/dist/lib/__tests__/versions.test.js.map +0 -1
  386. package/dist/lib/agents.d.ts.map +0 -1
  387. package/dist/lib/agents.js.map +0 -1
  388. package/dist/lib/artifact-actions.d.ts.map +0 -1
  389. package/dist/lib/artifact-actions.js.map +0 -1
  390. package/dist/lib/cloud/codex.d.ts.map +0 -1
  391. package/dist/lib/cloud/codex.js.map +0 -1
  392. package/dist/lib/cloud/factory.d.ts.map +0 -1
  393. package/dist/lib/cloud/factory.js.map +0 -1
  394. package/dist/lib/cloud/registry.d.ts.map +0 -1
  395. package/dist/lib/cloud/registry.js.map +0 -1
  396. package/dist/lib/cloud/rush.d.ts.map +0 -1
  397. package/dist/lib/cloud/rush.js.map +0 -1
  398. package/dist/lib/cloud/store.d.ts.map +0 -1
  399. package/dist/lib/cloud/store.js.map +0 -1
  400. package/dist/lib/cloud/stream.d.ts.map +0 -1
  401. package/dist/lib/cloud/stream.js.map +0 -1
  402. package/dist/lib/cloud/types.d.ts.map +0 -1
  403. package/dist/lib/cloud/types.js.map +0 -1
  404. package/dist/lib/commands.d.ts.map +0 -1
  405. package/dist/lib/commands.js.map +0 -1
  406. package/dist/lib/convert.d.ts.map +0 -1
  407. package/dist/lib/convert.js.map +0 -1
  408. package/dist/lib/daemon.d.ts.map +0 -1
  409. package/dist/lib/daemon.js.map +0 -1
  410. package/dist/lib/drive-sync.d.ts.map +0 -1
  411. package/dist/lib/drive-sync.js.map +0 -1
  412. package/dist/lib/exec.d.ts.map +0 -1
  413. package/dist/lib/exec.js.map +0 -1
  414. package/dist/lib/factory.d.ts +0 -57
  415. package/dist/lib/factory.d.ts.map +0 -1
  416. package/dist/lib/factory.js +0 -110
  417. package/dist/lib/factory.js.map +0 -1
  418. package/dist/lib/git.d.ts.map +0 -1
  419. package/dist/lib/git.js.map +0 -1
  420. package/dist/lib/help.d.ts.map +0 -1
  421. package/dist/lib/help.js.map +0 -1
  422. package/dist/lib/hooks.d.ts.map +0 -1
  423. package/dist/lib/hooks.js.map +0 -1
  424. package/dist/lib/manifest.d.ts.map +0 -1
  425. package/dist/lib/manifest.js.map +0 -1
  426. package/dist/lib/markdown.d.ts.map +0 -1
  427. package/dist/lib/markdown.js.map +0 -1
  428. package/dist/lib/mcp.d.ts.map +0 -1
  429. package/dist/lib/mcp.js.map +0 -1
  430. package/dist/lib/memory-compile.d.ts.map +0 -1
  431. package/dist/lib/memory-compile.js.map +0 -1
  432. package/dist/lib/memory.d.ts.map +0 -1
  433. package/dist/lib/memory.js.map +0 -1
  434. package/dist/lib/models.d.ts.map +0 -1
  435. package/dist/lib/models.js.map +0 -1
  436. package/dist/lib/permissions.d.ts.map +0 -1
  437. package/dist/lib/permissions.js.map +0 -1
  438. package/dist/lib/picker.d.ts.map +0 -1
  439. package/dist/lib/picker.js.map +0 -1
  440. package/dist/lib/plugins.d.ts.map +0 -1
  441. package/dist/lib/plugins.js.map +0 -1
  442. package/dist/lib/profiles-keychain.d.ts +0 -3
  443. package/dist/lib/profiles-keychain.d.ts.map +0 -1
  444. package/dist/lib/profiles-keychain.js +0 -10
  445. package/dist/lib/profiles-keychain.js.map +0 -1
  446. package/dist/lib/profiles-presets.d.ts.map +0 -1
  447. package/dist/lib/profiles-presets.js.map +0 -1
  448. package/dist/lib/profiles.d.ts.map +0 -1
  449. package/dist/lib/profiles.js.map +0 -1
  450. package/dist/lib/pty-client.d.ts.map +0 -1
  451. package/dist/lib/pty-client.js.map +0 -1
  452. package/dist/lib/pty-server.d.ts.map +0 -1
  453. package/dist/lib/pty-server.js.map +0 -1
  454. package/dist/lib/registry.d.ts.map +0 -1
  455. package/dist/lib/registry.js.map +0 -1
  456. package/dist/lib/resources.d.ts.map +0 -1
  457. package/dist/lib/resources.js.map +0 -1
  458. package/dist/lib/rotate.d.ts.map +0 -1
  459. package/dist/lib/rotate.js.map +0 -1
  460. package/dist/lib/routines.d.ts.map +0 -1
  461. package/dist/lib/routines.js.map +0 -1
  462. package/dist/lib/runner.d.ts.map +0 -1
  463. package/dist/lib/runner.js.map +0 -1
  464. package/dist/lib/sandbox.d.ts.map +0 -1
  465. package/dist/lib/sandbox.js.map +0 -1
  466. package/dist/lib/scheduler.d.ts.map +0 -1
  467. package/dist/lib/scheduler.js.map +0 -1
  468. package/dist/lib/secrets-bundles.d.ts.map +0 -1
  469. package/dist/lib/secrets-bundles.js.map +0 -1
  470. package/dist/lib/secrets.d.ts +0 -27
  471. package/dist/lib/secrets.d.ts.map +0 -1
  472. package/dist/lib/secrets.js +0 -127
  473. package/dist/lib/secrets.js.map +0 -1
  474. package/dist/lib/session/__tests__/db.test.d.ts +0 -2
  475. package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
  476. package/dist/lib/session/__tests__/db.test.js +0 -54
  477. package/dist/lib/session/__tests__/db.test.js.map +0 -1
  478. package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
  479. package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
  480. package/dist/lib/session/__tests__/discover.test.js +0 -63
  481. package/dist/lib/session/__tests__/discover.test.js.map +0 -1
  482. package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
  483. package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
  484. package/dist/lib/session/__tests__/prompt.test.js +0 -44
  485. package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
  486. package/dist/lib/session/__tests__/render.test.d.ts +0 -2
  487. package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
  488. package/dist/lib/session/__tests__/render.test.js +0 -602
  489. package/dist/lib/session/__tests__/render.test.js.map +0 -1
  490. package/dist/lib/session/artifacts.d.ts.map +0 -1
  491. package/dist/lib/session/artifacts.js.map +0 -1
  492. package/dist/lib/session/db.d.ts.map +0 -1
  493. package/dist/lib/session/db.js.map +0 -1
  494. package/dist/lib/session/discover.d.ts.map +0 -1
  495. package/dist/lib/session/discover.js.map +0 -1
  496. package/dist/lib/session/parse.d.ts.map +0 -1
  497. package/dist/lib/session/parse.js.map +0 -1
  498. package/dist/lib/session/prompt.d.ts.map +0 -1
  499. package/dist/lib/session/prompt.js.map +0 -1
  500. package/dist/lib/session/prompt.test.d.ts +0 -2
  501. package/dist/lib/session/prompt.test.d.ts.map +0 -1
  502. package/dist/lib/session/prompt.test.js +0 -57
  503. package/dist/lib/session/prompt.test.js.map +0 -1
  504. package/dist/lib/session/render.d.ts.map +0 -1
  505. package/dist/lib/session/render.js.map +0 -1
  506. package/dist/lib/session/team-filter.d.ts.map +0 -1
  507. package/dist/lib/session/team-filter.js.map +0 -1
  508. package/dist/lib/session/team-filter.test.d.ts +0 -2
  509. package/dist/lib/session/team-filter.test.d.ts.map +0 -1
  510. package/dist/lib/session/team-filter.test.js +0 -157
  511. package/dist/lib/session/team-filter.test.js.map +0 -1
  512. package/dist/lib/session/types.d.ts.map +0 -1
  513. package/dist/lib/session/types.js.map +0 -1
  514. package/dist/lib/shims.d.ts.map +0 -1
  515. package/dist/lib/shims.js.map +0 -1
  516. package/dist/lib/skills.d.ts.map +0 -1
  517. package/dist/lib/skills.js.map +0 -1
  518. package/dist/lib/state.d.ts.map +0 -1
  519. package/dist/lib/state.js.map +0 -1
  520. package/dist/lib/subagents.d.ts.map +0 -1
  521. package/dist/lib/subagents.js.map +0 -1
  522. package/dist/lib/teams/agents.d.ts.map +0 -1
  523. package/dist/lib/teams/agents.js.map +0 -1
  524. package/dist/lib/teams/api.d.ts.map +0 -1
  525. package/dist/lib/teams/api.js.map +0 -1
  526. package/dist/lib/teams/cloud.d.ts +0 -11
  527. package/dist/lib/teams/cloud.d.ts.map +0 -1
  528. package/dist/lib/teams/cloud.js +0 -169
  529. package/dist/lib/teams/cloud.js.map +0 -1
  530. package/dist/lib/teams/debug.d.ts.map +0 -1
  531. package/dist/lib/teams/debug.js.map +0 -1
  532. package/dist/lib/teams/file_ops.d.ts.map +0 -1
  533. package/dist/lib/teams/file_ops.js.map +0 -1
  534. package/dist/lib/teams/parsers.d.ts.map +0 -1
  535. package/dist/lib/teams/parsers.js.map +0 -1
  536. package/dist/lib/teams/persistence.d.ts.map +0 -1
  537. package/dist/lib/teams/persistence.js.map +0 -1
  538. package/dist/lib/teams/ralph.d.ts +0 -8
  539. package/dist/lib/teams/ralph.d.ts.map +0 -1
  540. package/dist/lib/teams/ralph.js +0 -59
  541. package/dist/lib/teams/ralph.js.map +0 -1
  542. package/dist/lib/teams/registry.d.ts.map +0 -1
  543. package/dist/lib/teams/registry.js.map +0 -1
  544. package/dist/lib/teams/summarizer.d.ts.map +0 -1
  545. package/dist/lib/teams/summarizer.js.map +0 -1
  546. package/dist/lib/template.d.ts.map +0 -1
  547. package/dist/lib/template.js.map +0 -1
  548. package/dist/lib/types.d.ts.map +0 -1
  549. package/dist/lib/types.js.map +0 -1
  550. package/dist/lib/usage.d.ts.map +0 -1
  551. package/dist/lib/usage.js.map +0 -1
  552. package/dist/lib/versions.d.ts.map +0 -1
  553. package/dist/lib/versions.js.map +0 -1
  554. package/scripts/rebuild-sqlite.sh +0 -46
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Headless ACP runner.
3
+ *
4
+ * Glue between the `agents run <agent> "prompt" --acp` command and the ACP
5
+ * client. Emits either a human-readable stream of agent messages or newline-
6
+ * delimited JSON events, depending on `--json`.
7
+ */
8
+ import { runAcp } from './client.js';
9
+ /** Runs a prompt turn over ACP, streaming output to stdout per `json` mode. */
10
+ export async function runAcpHeadless(opts) {
11
+ const onUpdate = opts.json ? emitJsonLine : emitTextChunk;
12
+ const result = await runAcp({
13
+ agent: opts.agent,
14
+ prompt: opts.prompt,
15
+ cwd: opts.cwd,
16
+ mode: opts.mode,
17
+ onUpdate,
18
+ });
19
+ if (opts.json) {
20
+ emitJsonLine({
21
+ sessionId: result.sessionId,
22
+ update: { sessionUpdate: 'agent_message_chunk', content: { type: 'text', text: '' } },
23
+ _meta: { stopReason: result.stopReason },
24
+ });
25
+ }
26
+ else {
27
+ process.stdout.write('\n');
28
+ }
29
+ return result.stopReason === 'end_turn' ? 0 : 1;
30
+ }
31
+ function emitJsonLine(n) {
32
+ process.stdout.write(JSON.stringify(n) + '\n');
33
+ }
34
+ function emitTextChunk(n) {
35
+ const upd = n.update;
36
+ if (upd.sessionUpdate === 'agent_message_chunk' && upd.content.type === 'text') {
37
+ process.stdout.write(upd.content.text);
38
+ }
39
+ }
@@ -1,29 +1,74 @@
1
1
  import type { AgentConfig, AgentId } from './types.js';
2
+ /** Represents the installation state of an agent's CLI binary. */
2
3
  export interface CliState {
3
4
  installed: boolean;
4
5
  version: string | null;
5
6
  path: string | null;
6
7
  }
8
+ /**
9
+ * Minimum Codex CLI version that supports hooks.
10
+ * Mirrored on `AGENTS.codex.capabilities.hooks.since` -- kept exported for
11
+ * legacy import sites that haven't migrated to `supports()` yet.
12
+ */
7
13
  export declare const CODEX_HOOKS_MIN_VERSION = "0.116.0";
14
+ /** Minimum Gemini CLI version that supports the hooks system (v0.26.0, Jan 2026). */
15
+ export declare const GEMINI_HOOKS_MIN_VERSION = "0.26.0";
16
+ /**
17
+ * Master registry of all supported agents keyed by AgentId.
18
+ *
19
+ * Each entry defines the agent's CLI command, npm package, config directory layout,
20
+ * instructions file name, slash-command format, and capability flags. This is the
21
+ * single source of truth for agent metadata consumed throughout the codebase.
22
+ */
8
23
  export declare const AGENTS: Record<AgentId, AgentConfig>;
24
+ /** All registered agent IDs derived from the AGENTS registry. */
9
25
  export declare const ALL_AGENT_IDS: AgentId[];
26
+ /** Agents that support MCP (Model Context Protocol) server integration. */
10
27
  export declare const MCP_CAPABLE_AGENTS: AgentId[];
28
+ /** Agents that support skills (SKILL.md + rules/ bundles). */
11
29
  export declare const SKILLS_CAPABLE_AGENTS: AgentId[];
30
+ /** Agents that support file-based slash commands. */
12
31
  export declare const COMMANDS_CAPABLE_AGENTS: AgentId[];
13
- export declare const HOOKS_CAPABLE_AGENTS: readonly ["claude", "codex", "gemini", "openclaw"];
32
+ /** Agents that support event hooks (pre/post lifecycle callbacks). */
33
+ export declare const HOOKS_CAPABLE_AGENTS: readonly AgentId[];
34
+ /** Agents that support the plugin system. */
14
35
  export declare const PLUGINS_CAPABLE_AGENTS: AgentId[];
15
36
  /** Get the chalk color function for an agent. Works for any AgentId or SessionAgentId. */
16
37
  export declare function colorAgent(agentId: string): (s: string) => string;
17
38
  /** Return the agent's display name, colored. */
18
39
  export declare function agentLabel(agentId: string): string;
40
+ /** Check whether the given agent's CLI binary is present on PATH. */
19
41
  export declare function isCliInstalled(agentId: AgentId): Promise<boolean>;
42
+ /** Return the installed CLI version for the given agent, or null if not found. */
20
43
  export declare function getCliVersion(agentId: AgentId): Promise<string | null>;
44
+ /** Return the absolute path to the agent's CLI binary on PATH, or null. */
21
45
  export declare function getCliPath(agentId: AgentId): Promise<string | null>;
46
+ /**
47
+ * Resolve the full CLI state for an agent: whether it is installed, its version,
48
+ * and the path to the binary. Checks version-managed installs first, then falls
49
+ * back to a plain PATH lookup.
50
+ */
22
51
  export declare function getCliState(agentId: AgentId): Promise<CliState>;
52
+ /** Resolve CLI state for all registered agents in parallel. */
23
53
  export declare function getAllCliStates(): Promise<Partial<Record<AgentId, CliState>>>;
54
+ /** Check whether the agent's config directory exists on disk. */
24
55
  export declare function isConfigured(agentId: AgentId): boolean;
56
+ /** Info about an existing unmanaged agent installation. */
57
+ export interface UnmanagedInstall {
58
+ agentId: AgentId;
59
+ configDir: string;
60
+ version: string | null;
61
+ }
62
+ /**
63
+ * Detect existing agent installations that are NOT yet managed by agents-cli.
64
+ * Returns agents whose config dir exists as a real directory (not a symlink).
65
+ */
66
+ export declare function getUnmanagedAgentInstalls(): Promise<UnmanagedInstall[]>;
67
+ /** Create the agent's slash-commands directory if it does not exist. */
25
68
  export declare function ensureCommandsDir(agentId: AgentId): void;
69
+ /** Create the agent's skills directory if it does not exist. */
26
70
  export declare function ensureSkillsDir(agentId: AgentId): void;
71
+ /** Account identity and billing information extracted from an agent's auth config. */
27
72
  export interface AccountInfo {
28
73
  accountKey: string | null;
29
74
  usageKey: string | null;
@@ -39,9 +84,21 @@ export interface AccountInfo {
39
84
  } | null;
40
85
  lastActive: Date | null;
41
86
  }
87
+ /** Return the email address associated with the agent's auth config, or null. */
42
88
  export declare function getAccountEmail(agentId: AgentId, home?: string): Promise<string | null>;
89
+ /**
90
+ * Extract full account information (identity, plan, usage status, credits) from
91
+ * the agent's local auth/config files. Supports Claude, Codex, and Gemini.
92
+ */
43
93
  export declare function getAccountInfo(agentId: AgentId, home?: string): Promise<AccountInfo>;
94
+ /**
95
+ * Quick count of session files for an agent (without full DB scan).
96
+ * Used during init to show approximate session count to user.
97
+ */
98
+ export declare function countSessionFiles(agentId: AgentId): number;
99
+ /** Check whether a named MCP server is registered with the agent's CLI. */
44
100
  export declare function isMcpRegistered(agentId: AgentId, mcpName: string): Promise<boolean>;
101
+ /** Register an MCP server with an agent's CLI via `mcp add`. */
45
102
  export declare function registerMcp(agentId: AgentId, name: string, command: string, scope?: 'user' | 'project', transport?: string, options?: {
46
103
  home?: string;
47
104
  binary?: string;
@@ -49,6 +106,7 @@ export declare function registerMcp(agentId: AgentId, name: string, command: str
49
106
  success: boolean;
50
107
  error?: string;
51
108
  }>;
109
+ /** Unregister (remove) a named MCP server from an agent's CLI config. */
52
110
  export declare function unregisterMcp(agentId: AgentId, name: string, options?: {
53
111
  home?: string;
54
112
  binary?: string;
@@ -56,21 +114,32 @@ export declare function unregisterMcp(agentId: AgentId, name: string, options?:
56
114
  success: boolean;
57
115
  error?: string;
58
116
  }>;
117
+ /** Result of an MCP registration or removal operation targeting a specific agent and optional version. */
59
118
  export interface McpTargetOperationResult {
60
119
  agentId: AgentId;
61
120
  version?: string;
62
121
  success: boolean;
63
122
  error?: string;
64
123
  }
124
+ /**
125
+ * Register an MCP server across multiple agent targets, including both direct
126
+ * (non-version-managed) agents and specific version-managed installs.
127
+ */
65
128
  export declare function registerMcpToTargets(targets: {
66
129
  directAgents: AgentId[];
67
130
  versionSelections: Map<AgentId, string[]>;
68
131
  }, name: string, command: string, scope?: 'user' | 'project', transport?: string): Promise<McpTargetOperationResult[]>;
132
+ /**
133
+ * Unregister an MCP server from multiple agent targets, including both direct
134
+ * agents and specific version-managed installs.
135
+ */
69
136
  export declare function unregisterMcpFromTargets(targets: {
70
137
  directAgents: AgentId[];
71
138
  versionSelections: Map<AgentId, string[]>;
72
139
  }, name: string): Promise<McpTargetOperationResult[]>;
140
+ /** Scope at which an MCP server is registered: user-global or per-project. */
73
141
  export type McpScope = 'user' | 'project';
142
+ /** Describes an MCP server discovered in an agent's config, with its scope and command. */
74
143
  export interface InstalledMcp {
75
144
  name: string;
76
145
  scope: McpScope;
@@ -99,9 +168,12 @@ export declare function parseMcpConfig(agentId: AgentId, configPath: string): Re
99
168
  export declare function listInstalledMcpsWithScope(agentId: AgentId, cwd?: string, options?: {
100
169
  home?: string;
101
170
  }): InstalledMcp[];
171
+ /** Map of agent name aliases and shorthand identifiers to canonical AgentId values. */
102
172
  export declare const AGENT_NAME_ALIASES: Record<string, AgentId>;
173
+ /** Resolve a user-provided agent name (alias, shorthand, or canonical) to its AgentId. */
103
174
  export declare function resolveAgentName(input: string): AgentId | null;
175
+ /** Check whether the input string matches any known agent name or alias. */
104
176
  export declare function isAgentName(input: string): boolean;
177
+ /** Format an error message for an unrecognized agent name, listing valid options. */
105
178
  export declare function formatAgentError(agentName: string, validAgents?: AgentId[]): string;
106
179
  export {};
107
- //# sourceMappingURL=agents.d.ts.map
@@ -1,18 +1,35 @@
1
- import { exec } from 'child_process';
1
+ /**
2
+ * Core agent configuration and detection module.
3
+ *
4
+ * Defines the canonical registry of all supported AI coding agents (Claude, Codex,
5
+ * Gemini, Cursor, OpenCode, OpenClaw, Copilot, Amp, Kiro, Goose, Roo) with their
6
+ * CLI commands, config paths, capability flags, and MCP integration points.
7
+ *
8
+ * Provides functions for detecting installed CLIs, resolving version-managed binaries,
9
+ * reading account/auth info, and managing MCP server registrations across agents.
10
+ */
11
+ import { execFile } from 'child_process';
2
12
  import { promisify } from 'util';
3
13
  import * as fs from 'fs';
4
14
  import * as path from 'path';
5
15
  import * as os from 'os';
6
16
  import * as TOML from 'smol-toml';
7
17
  import chalk from 'chalk';
8
- import { walkForFiles } from './session/discover.js';
9
- import { getVersionsDir, getShimsDir } from './state.js';
18
+ import { walkForFiles } from './fs-walk.js';
19
+ import { getVersionsDir, getShimsDir, getAgentsDir } from './state.js';
10
20
  import { resolveVersion, getVersionHomePath, getBinaryPath } from './versions.js';
11
21
  import { loadClaudeOauth } from './usage.js';
12
- const execAsync = promisify(exec);
22
+ const execFileAsync = promisify(execFile);
13
23
  const HOME = os.homedir();
24
+ /**
25
+ * Minimum Codex CLI version that supports hooks.
26
+ * Mirrored on `AGENTS.codex.capabilities.hooks.since` -- kept exported for
27
+ * legacy import sites that haven't migrated to `supports()` yet.
28
+ */
14
29
  export const CODEX_HOOKS_MIN_VERSION = '0.116.0';
15
- const CLI_VERSION_CACHE_PATH = path.join(HOME, '.agents', '.cli-version-cache.json');
30
+ /** Minimum Gemini CLI version that supports the hooks system (v0.26.0, Jan 2026). */
31
+ export const GEMINI_HOOKS_MIN_VERSION = '0.26.0';
32
+ const CLI_VERSION_CACHE_PATH = path.join(getAgentsDir(), '.cli-version-cache.json');
16
33
  let cliVersionCache = null;
17
34
  function loadCliVersionCache() {
18
35
  if (cliVersionCache)
@@ -39,7 +56,7 @@ function saveCliVersionCache() {
39
56
  /* best-effort cache persist */
40
57
  }
41
58
  }
42
- /** Synchronous PATH search no subprocess. Returns first matching binary path. */
59
+ /** Synchronous PATH search -- no subprocess. Returns first matching binary path. */
43
60
  function findInPath(command) {
44
61
  const pathEnv = process.env.PATH || '';
45
62
  const pathExt = process.platform === 'win32' ? (process.env.PATHEXT || '').split(';') : [''];
@@ -60,6 +77,67 @@ function findInPath(command) {
60
77
  }
61
78
  return null;
62
79
  }
80
+ function splitCommandLine(command) {
81
+ const args = [];
82
+ let current = '';
83
+ let quote = null;
84
+ let tokenStarted = false;
85
+ for (let i = 0; i < command.length; i++) {
86
+ const char = command[i];
87
+ if (quote) {
88
+ if (char === quote) {
89
+ quote = null;
90
+ tokenStarted = true;
91
+ }
92
+ else if (char === '\\' && quote === '"' && i + 1 < command.length) {
93
+ current += command[++i];
94
+ tokenStarted = true;
95
+ }
96
+ else {
97
+ current += char;
98
+ tokenStarted = true;
99
+ }
100
+ continue;
101
+ }
102
+ if (char === '"' || char === "'") {
103
+ quote = char;
104
+ tokenStarted = true;
105
+ continue;
106
+ }
107
+ if (/\s/.test(char)) {
108
+ if (tokenStarted) {
109
+ args.push(current);
110
+ current = '';
111
+ tokenStarted = false;
112
+ }
113
+ continue;
114
+ }
115
+ if (char === '\\' && i + 1 < command.length) {
116
+ current += command[++i];
117
+ tokenStarted = true;
118
+ continue;
119
+ }
120
+ current += char;
121
+ tokenStarted = true;
122
+ }
123
+ if (quote) {
124
+ throw new Error('Unterminated quote in MCP command');
125
+ }
126
+ if (tokenStarted) {
127
+ args.push(current);
128
+ }
129
+ if (args.length === 0) {
130
+ throw new Error('MCP command is required');
131
+ }
132
+ return args;
133
+ }
134
+ /**
135
+ * Master registry of all supported agents keyed by AgentId.
136
+ *
137
+ * Each entry defines the agent's CLI command, npm package, config directory layout,
138
+ * instructions file name, slash-command format, and capability flags. This is the
139
+ * single source of truth for agent metadata consumed throughout the codebase.
140
+ */
63
141
  export const AGENTS = {
64
142
  claude: {
65
143
  id: 'claude',
@@ -79,6 +157,7 @@ export const AGENTS = {
79
157
  supportsHooks: true,
80
158
  capabilities: { hooks: true, mcp: true, allowlist: true, skills: true, commands: true, plugins: true, memoryImports: true },
81
159
  },
160
+ // codex hooks: gated to >= 0.116.0 (introduced [features] codex_hooks flag).
82
161
  codex: {
83
162
  id: 'codex',
84
163
  name: 'Codex',
@@ -94,7 +173,7 @@ export const AGENTS = {
94
173
  format: 'markdown',
95
174
  variableSyntax: '$ARGUMENTS',
96
175
  supportsHooks: true,
97
- capabilities: { hooks: true, mcp: true, allowlist: false, skills: true, commands: true, plugins: false },
176
+ capabilities: { hooks: { since: '0.116.0' }, mcp: true, allowlist: false, skills: true, commands: { until: '0.117.0' }, plugins: false },
98
177
  },
99
178
  gemini: {
100
179
  id: 'gemini',
@@ -112,7 +191,8 @@ export const AGENTS = {
112
191
  variableSyntax: '{{args}}',
113
192
  supportsHooks: true,
114
193
  nativeAgentsSkillsDir: true,
115
- capabilities: { hooks: true, mcp: true, allowlist: false, skills: true, commands: true, plugins: false, memoryImports: true },
194
+ // gemini hooks: shipped in v0.26.0 (Jan 2026); older binaries silently ignore the `hooks` key.
195
+ capabilities: { hooks: { since: '0.26.0' }, mcp: true, allowlist: false, skills: true, commands: true, plugins: false, memoryImports: true },
116
196
  },
117
197
  cursor: {
118
198
  id: 'cursor',
@@ -255,12 +335,18 @@ export const AGENTS = {
255
335
  capabilities: { hooks: false, mcp: true, allowlist: false, skills: true, commands: true, plugins: false },
256
336
  },
257
337
  };
338
+ /** All registered agent IDs derived from the AGENTS registry. */
258
339
  export const ALL_AGENT_IDS = Object.keys(AGENTS);
340
+ /** Agents that support MCP (Model Context Protocol) server integration. */
259
341
  export const MCP_CAPABLE_AGENTS = ALL_AGENT_IDS.filter((id) => AGENTS[id].capabilities.mcp);
342
+ /** Agents that support skills (SKILL.md + rules/ bundles). */
260
343
  export const SKILLS_CAPABLE_AGENTS = ALL_AGENT_IDS.filter((id) => AGENTS[id].capabilities.skills);
344
+ /** Agents that support file-based slash commands. */
261
345
  export const COMMANDS_CAPABLE_AGENTS = ALL_AGENT_IDS.filter((id) => AGENTS[id].capabilities.commands);
262
- export const HOOKS_CAPABLE_AGENTS = ['claude', 'codex', 'gemini', 'openclaw'];
263
- export const PLUGINS_CAPABLE_AGENTS = ALL_AGENT_IDS.filter((id) => AGENTS[id].capabilities.plugins);
346
+ /** Agents that support event hooks (pre/post lifecycle callbacks). */
347
+ export const HOOKS_CAPABLE_AGENTS = ALL_AGENT_IDS.filter((id) => AGENTS[id].capabilities.hooks !== false);
348
+ /** Agents that support the plugin system. */
349
+ export const PLUGINS_CAPABLE_AGENTS = ALL_AGENT_IDS.filter((id) => AGENTS[id].capabilities.plugins !== false);
264
350
  /** Get the chalk color function for an agent. Works for any AgentId or SessionAgentId. */
265
351
  export function colorAgent(agentId) {
266
352
  const agent = AGENTS[agentId];
@@ -275,10 +361,12 @@ export function agentLabel(agentId) {
275
361
  return agentId;
276
362
  return chalk[agent.color](agent.name);
277
363
  }
364
+ /** Check whether the given agent's CLI binary is present on PATH. */
278
365
  export async function isCliInstalled(agentId) {
279
366
  const agent = AGENTS[agentId];
280
367
  return findInPath(agent.cliCommand) !== null;
281
368
  }
369
+ /** Return the installed CLI version for the given agent, or null if not found. */
282
370
  export async function getCliVersion(agentId) {
283
371
  const agent = AGENTS[agentId];
284
372
  const binaryPath = findInPath(agent.cliCommand);
@@ -286,6 +374,7 @@ export async function getCliVersion(agentId) {
286
374
  return null;
287
375
  return getCachedVersionForBinary(agentId, binaryPath);
288
376
  }
377
+ /** Return the absolute path to the agent's CLI binary on PATH, or null. */
289
378
  export async function getCliPath(agentId) {
290
379
  return findInPath(AGENTS[agentId].cliCommand);
291
380
  }
@@ -307,7 +396,7 @@ async function getCachedVersionForBinary(agentId, binaryPath) {
307
396
  const agent = AGENTS[agentId];
308
397
  let version = null;
309
398
  try {
310
- const { stdout } = await execAsync(`${agent.cliCommand} --version`, { timeout: 3000 });
399
+ const { stdout } = await execFileAsync(agent.cliCommand, ['--version'], { timeout: 3000 });
311
400
  if (agentId === 'openclaw') {
312
401
  const match = stdout.match(/openclaw\/(\d+\.\d+\.\d+)/);
313
402
  version = match ? match[1] : stdout.trim();
@@ -325,6 +414,11 @@ async function getCachedVersionForBinary(agentId, binaryPath) {
325
414
  saveCliVersionCache();
326
415
  return version;
327
416
  }
417
+ /**
418
+ * Resolve the full CLI state for an agent: whether it is installed, its version,
419
+ * and the path to the binary. Checks version-managed installs first, then falls
420
+ * back to a plain PATH lookup.
421
+ */
328
422
  export async function getCliState(agentId) {
329
423
  // Fast path: if version-managed, derive state from filesystem (no subprocesses)
330
424
  const agent = AGENTS[agentId];
@@ -370,6 +464,7 @@ export async function getCliState(agentId) {
370
464
  path: binaryPath,
371
465
  };
372
466
  }
467
+ /** Resolve CLI state for all registered agents in parallel. */
373
468
  export async function getAllCliStates() {
374
469
  const states = {};
375
470
  const results = await Promise.all(ALL_AGENT_IDS.map(async (agentId) => ({
@@ -381,26 +476,56 @@ export async function getAllCliStates() {
381
476
  }
382
477
  return states;
383
478
  }
479
+ /** Check whether the agent's config directory exists on disk. */
384
480
  export function isConfigured(agentId) {
385
481
  const agent = AGENTS[agentId];
386
482
  return fs.existsSync(agent.configDir);
387
483
  }
484
+ /**
485
+ * Detect existing agent installations that are NOT yet managed by agents-cli.
486
+ * Returns agents whose config dir exists as a real directory (not a symlink).
487
+ */
488
+ export async function getUnmanagedAgentInstalls() {
489
+ const unmanaged = [];
490
+ const candidates = ['claude', 'codex', 'gemini'];
491
+ for (const agentId of candidates) {
492
+ const agent = AGENTS[agentId];
493
+ try {
494
+ const stat = fs.lstatSync(agent.configDir);
495
+ if (stat.isDirectory() && !stat.isSymbolicLink()) {
496
+ const version = await getCliVersion(agentId);
497
+ unmanaged.push({ agentId, configDir: agent.configDir, version });
498
+ }
499
+ }
500
+ catch {
501
+ // Config dir doesn't exist
502
+ }
503
+ }
504
+ return unmanaged;
505
+ }
506
+ /** Create the agent's slash-commands directory if it does not exist. */
388
507
  export function ensureCommandsDir(agentId) {
389
508
  const agent = AGENTS[agentId];
390
509
  if (!fs.existsSync(agent.commandsDir)) {
391
510
  fs.mkdirSync(agent.commandsDir, { recursive: true });
392
511
  }
393
512
  }
513
+ /** Create the agent's skills directory if it does not exist. */
394
514
  export function ensureSkillsDir(agentId) {
395
515
  const agent = AGENTS[agentId];
396
516
  if (!fs.existsSync(agent.skillsDir)) {
397
517
  fs.mkdirSync(agent.skillsDir, { recursive: true });
398
518
  }
399
519
  }
520
+ /** Return the email address associated with the agent's auth config, or null. */
400
521
  export async function getAccountEmail(agentId, home) {
401
522
  const info = await getAccountInfo(agentId, home);
402
523
  return info.email;
403
524
  }
525
+ /**
526
+ * Extract full account information (identity, plan, usage status, credits) from
527
+ * the agent's local auth/config files. Supports Claude, Codex, and Gemini.
528
+ */
404
529
  export async function getAccountInfo(agentId, home) {
405
530
  const base = home || os.homedir();
406
531
  const empty = {
@@ -537,6 +662,7 @@ export async function getAccountInfo(agentId, home) {
537
662
  return { ...empty, lastActive };
538
663
  }
539
664
  }
665
+ /** Determine when the agent was last used by checking session file mtimes, falling back to config mtime. */
540
666
  function resolveLastActive(agentId, base, configPath) {
541
667
  const sessionDir = getSessionDir(agentId, base);
542
668
  const sessionExt = getSessionExtension(agentId);
@@ -555,6 +681,7 @@ function resolveLastActive(agentId, base, configPath) {
555
681
  return null;
556
682
  }
557
683
  }
684
+ /** Return the root directory where the agent stores session files, or null if unknown. */
558
685
  function getSessionDir(agentId, base) {
559
686
  switch (agentId) {
560
687
  case 'claude':
@@ -567,6 +694,7 @@ function getSessionDir(agentId, base) {
567
694
  return null;
568
695
  }
569
696
  }
697
+ /** Return the file extension used for session files by the given agent. */
570
698
  function getSessionExtension(agentId) {
571
699
  switch (agentId) {
572
700
  case 'claude':
@@ -578,6 +706,36 @@ function getSessionExtension(agentId) {
578
706
  return null;
579
707
  }
580
708
  }
709
+ /**
710
+ * Quick count of session files for an agent (without full DB scan).
711
+ * Used during init to show approximate session count to user.
712
+ */
713
+ export function countSessionFiles(agentId) {
714
+ const sessionDir = getSessionDir(agentId, HOME);
715
+ const ext = getSessionExtension(agentId);
716
+ if (!sessionDir || !ext || !fs.existsSync(sessionDir))
717
+ return 0;
718
+ let count = 0;
719
+ const walk = (dir) => {
720
+ try {
721
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
722
+ for (const entry of entries) {
723
+ if (entry.isDirectory()) {
724
+ walk(path.join(dir, entry.name));
725
+ }
726
+ else if (entry.isFile() && entry.name.endsWith(ext)) {
727
+ count++;
728
+ }
729
+ }
730
+ }
731
+ catch {
732
+ // Permission denied or other error
733
+ }
734
+ };
735
+ walk(sessionDir);
736
+ return count;
737
+ }
738
+ /** Walk a directory for files matching the extension and return the mtime of the most recent one. */
581
739
  function getLatestFileMtime(dir, ext) {
582
740
  if (!fs.existsSync(dir))
583
741
  return null;
@@ -591,6 +749,7 @@ function getLatestFileMtime(dir, ext) {
591
749
  return null;
592
750
  }
593
751
  }
752
+ /** Decode the payload section of a JWT token without verifying its signature. */
594
753
  function decodeJwtPayload(token) {
595
754
  const payload = token.split('.')[1];
596
755
  if (!payload)
@@ -602,6 +761,7 @@ function decodeJwtPayload(token) {
602
761
  return null;
603
762
  }
604
763
  }
764
+ /** Extract the default organization ID from a Codex/OpenAI auth claim. */
605
765
  function getCodexDefaultOrgId(authClaim) {
606
766
  const organizations = authClaim?.organizations;
607
767
  if (!Array.isArray(organizations))
@@ -609,12 +769,14 @@ function getCodexDefaultOrgId(authClaim) {
609
769
  const first = organizations[0];
610
770
  return typeof first?.id === 'string' ? first.id : null;
611
771
  }
772
+ /** Trim and normalize an identity string, returning null for empty or non-string values. */
612
773
  function normalizeIdentityPart(value) {
613
774
  if (typeof value !== 'string')
614
775
  return null;
615
776
  const trimmed = value.trim();
616
777
  return trimmed || null;
617
778
  }
779
+ /** Build a composite identity key like "claude:account=abc:org=xyz" from labeled parts. */
618
780
  function buildIdentityKey(agentId, parts) {
619
781
  const encoded = parts
620
782
  .filter(([, value]) => value)
@@ -623,13 +785,14 @@ function buildIdentityKey(agentId, parts) {
623
785
  return null;
624
786
  return `${agentId}:${encoded.join(':')}`;
625
787
  }
788
+ /** Check whether a named MCP server is registered with the agent's CLI. */
626
789
  export async function isMcpRegistered(agentId, mcpName) {
627
790
  const agent = AGENTS[agentId];
628
791
  if (!agent.capabilities.mcp || !(await isCliInstalled(agentId))) {
629
792
  return false;
630
793
  }
631
794
  try {
632
- const { stdout } = await execAsync(`${agent.cliCommand} mcp list`);
795
+ const { stdout } = await execFileAsync(agent.cliCommand, ['mcp', 'list']);
633
796
  return stdout.toLowerCase().includes(mcpName.toLowerCase());
634
797
  }
635
798
  catch {
@@ -637,6 +800,7 @@ export async function isMcpRegistered(agentId, mcpName) {
637
800
  return false;
638
801
  }
639
802
  }
803
+ /** Register an MCP server with an agent's CLI via `mcp add`. */
640
804
  export async function registerMcp(agentId, name, command, scope = 'user', transport = 'stdio', options) {
641
805
  const agent = AGENTS[agentId];
642
806
  if (!agent.capabilities.mcp) {
@@ -648,22 +812,24 @@ export async function registerMcp(agentId, name, command, scope = 'user', transp
648
812
  try {
649
813
  // Use explicit binary path when provided (bypasses shim for version-managed agents)
650
814
  const bin = options?.binary || agent.cliCommand;
651
- let cmd;
815
+ let args;
816
+ const commandArgs = splitCommandLine(command);
652
817
  if (agentId === 'claude') {
653
- cmd = `${bin} mcp add --transport ${transport} --scope ${scope} "${name}" -- ${command}`;
818
+ args = ['mcp', 'add', '--transport', transport, '--scope', scope, name, '--', ...commandArgs];
654
819
  }
655
820
  else {
656
- cmd = `${bin} mcp add "${name}" -- ${command}`;
821
+ args = ['mcp', 'add', name, '--', ...commandArgs];
657
822
  }
658
823
  // When home is specified, override HOME so MCP config writes to the version's config dir
659
824
  const env = options?.home ? { ...process.env, HOME: options.home } : undefined;
660
- await execAsync(cmd, env ? { env } : undefined);
825
+ await execFileAsync(bin, args, env ? { env } : undefined);
661
826
  return { success: true };
662
827
  }
663
828
  catch (err) {
664
829
  return { success: false, error: err.message };
665
830
  }
666
831
  }
832
+ /** Unregister (remove) a named MCP server from an agent's CLI config. */
667
833
  export async function unregisterMcp(agentId, name, options) {
668
834
  const agent = AGENTS[agentId];
669
835
  if (!agent.capabilities.mcp) {
@@ -675,13 +841,17 @@ export async function unregisterMcp(agentId, name, options) {
675
841
  try {
676
842
  const bin = options?.binary || agent.cliCommand;
677
843
  const env = options?.home ? { ...process.env, HOME: options.home } : undefined;
678
- await execAsync(`${bin} mcp remove "${name}"`, env ? { env } : undefined);
844
+ await execFileAsync(bin, ['mcp', 'remove', name], env ? { env } : undefined);
679
845
  return { success: true };
680
846
  }
681
847
  catch (err) {
682
848
  return { success: false, error: err.message };
683
849
  }
684
850
  }
851
+ /**
852
+ * Register an MCP server across multiple agent targets, including both direct
853
+ * (non-version-managed) agents and specific version-managed installs.
854
+ */
685
855
  export async function registerMcpToTargets(targets, name, command, scope = 'user', transport = 'stdio') {
686
856
  const results = [];
687
857
  for (const agentId of targets.directAgents) {
@@ -699,6 +869,10 @@ export async function registerMcpToTargets(targets, name, command, scope = 'user
699
869
  }
700
870
  return results;
701
871
  }
872
+ /**
873
+ * Unregister an MCP server from multiple agent targets, including both direct
874
+ * agents and specific version-managed installs.
875
+ */
702
876
  export async function unregisterMcpFromTargets(targets, name) {
703
877
  const results = [];
704
878
  for (const agentId of targets.directAgents) {
@@ -718,8 +892,8 @@ export async function unregisterMcpFromTargets(targets, name) {
718
892
  }
719
893
  /**
720
894
  * Extract version from npm package specification.
721
- * Examples: @swarmify/agents-mcp@latest -> latest
722
- * @swarmify/agents-mcp@1.2.3 -> 1.2.3
895
+ * Examples: @scope/package@latest -> latest
896
+ * @scope/package@1.2.3 -> 1.2.3
723
897
  * some-package -> undefined
724
898
  */
725
899
  function extractNpmVersion(args) {
@@ -1051,7 +1225,7 @@ export function listInstalledMcpsWithScope(agentId, cwd = process.cwd(), options
1051
1225
  }
1052
1226
  return results;
1053
1227
  }
1054
- // Agent name aliases for flexible input
1228
+ /** Map of agent name aliases and shorthand identifiers to canonical AgentId values. */
1055
1229
  export const AGENT_NAME_ALIASES = {
1056
1230
  claude: 'claude',
1057
1231
  'claude-code': 'claude',
@@ -1084,13 +1258,15 @@ export const AGENT_NAME_ALIASES = {
1084
1258
  'roo-code': 'roo',
1085
1259
  roocode: 'roo',
1086
1260
  };
1261
+ /** Resolve a user-provided agent name (alias, shorthand, or canonical) to its AgentId. */
1087
1262
  export function resolveAgentName(input) {
1088
1263
  return AGENT_NAME_ALIASES[input.toLowerCase()] || null;
1089
1264
  }
1265
+ /** Check whether the input string matches any known agent name or alias. */
1090
1266
  export function isAgentName(input) {
1091
1267
  return resolveAgentName(input) !== null;
1092
1268
  }
1269
+ /** Format an error message for an unrecognized agent name, listing valid options. */
1093
1270
  export function formatAgentError(agentName, validAgents = ALL_AGENT_IDS) {
1094
1271
  return `Unknown agent '${agentName}'. Valid agents: ${validAgents.join(', ')}`;
1095
1272
  }
1096
- //# sourceMappingURL=agents.js.map