@phnx-labs/agents-cli 1.12.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 (496) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/README.md +293 -300
  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 +10 -0
  8. package/dist/commands/cloud.js +408 -0
  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 +207 -20
  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 +45 -6
  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 +11 -0
  38. package/dist/commands/profiles.js +291 -0
  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 +93 -129
  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 +10 -0
  56. package/dist/commands/secrets.js +511 -0
  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 +288 -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 +353 -20
  83. package/dist/index.d.ts +7 -2
  84. package/dist/index.js +205 -38
  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 +207 -23
  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 +25 -0
  104. package/dist/lib/cloud/codex.js +250 -0
  105. package/dist/lib/cloud/factory.d.ts +31 -0
  106. package/dist/lib/cloud/factory.js +53 -0
  107. package/dist/lib/cloud/registry.d.ts +15 -0
  108. package/dist/lib/cloud/registry.js +67 -0
  109. package/dist/lib/cloud/rush.d.ts +75 -0
  110. package/dist/lib/cloud/rush.js +438 -0
  111. package/dist/lib/cloud/store.d.ts +22 -0
  112. package/dist/lib/cloud/store.js +115 -0
  113. package/dist/lib/cloud/stream.d.ts +23 -0
  114. package/dist/lib/cloud/stream.js +194 -0
  115. package/dist/lib/cloud/types.d.ts +205 -0
  116. package/dist/lib/cloud/types.js +34 -0
  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 +25 -5
  128. package/dist/lib/exec.js +72 -27
  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 +191 -21
  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 +25 -11
  156. package/dist/lib/models.js +405 -16
  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 +24 -0
  168. package/dist/lib/profiles-presets.js +103 -0
  169. package/dist/lib/profiles.d.ts +69 -0
  170. package/dist/lib/profiles.js +144 -0
  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 +79 -0
  180. package/dist/lib/rotate.js +285 -0
  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 +39 -0
  195. package/dist/lib/secrets/bundles.js +189 -0
  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 +16 -0
  203. package/dist/lib/session/artifacts.js +95 -0
  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 +24 -2
  219. package/dist/lib/session/types.js +10 -2
  220. package/dist/lib/shims.d.ts +93 -5
  221. package/dist/lib/shims.js +380 -67
  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 +114 -22
  227. package/dist/lib/state.js +323 -138
  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 +48 -1
  257. package/dist/lib/usage.js +97 -16
  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 +39 -4
  261. package/dist/lib/versions.js +401 -111
  262. package/package.json +33 -18
  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/commands.d.ts.map +0 -1
  269. package/dist/commands/commands.js.map +0 -1
  270. package/dist/commands/daemon.d.ts.map +0 -1
  271. package/dist/commands/daemon.js.map +0 -1
  272. package/dist/commands/drive.d.ts.map +0 -1
  273. package/dist/commands/drive.js.map +0 -1
  274. package/dist/commands/exec.d.ts.map +0 -1
  275. package/dist/commands/exec.js.map +0 -1
  276. package/dist/commands/fork.d.ts.map +0 -1
  277. package/dist/commands/fork.js.map +0 -1
  278. package/dist/commands/hooks.d.ts.map +0 -1
  279. package/dist/commands/hooks.js.map +0 -1
  280. package/dist/commands/init.d.ts.map +0 -1
  281. package/dist/commands/init.js.map +0 -1
  282. package/dist/commands/mcp.d.ts.map +0 -1
  283. package/dist/commands/mcp.js.map +0 -1
  284. package/dist/commands/models.d.ts.map +0 -1
  285. package/dist/commands/models.js.map +0 -1
  286. package/dist/commands/packages.d.ts.map +0 -1
  287. package/dist/commands/packages.js.map +0 -1
  288. package/dist/commands/permissions.d.ts.map +0 -1
  289. package/dist/commands/permissions.js.map +0 -1
  290. package/dist/commands/plugins.d.ts.map +0 -1
  291. package/dist/commands/plugins.js.map +0 -1
  292. package/dist/commands/pty.d.ts.map +0 -1
  293. package/dist/commands/pty.js.map +0 -1
  294. package/dist/commands/pull.d.ts.map +0 -1
  295. package/dist/commands/pull.js.map +0 -1
  296. package/dist/commands/push.d.ts +0 -3
  297. package/dist/commands/push.d.ts.map +0 -1
  298. package/dist/commands/push.js +0 -180
  299. package/dist/commands/push.js.map +0 -1
  300. package/dist/commands/refresh-memory.d.ts.map +0 -1
  301. package/dist/commands/refresh-memory.js.map +0 -1
  302. package/dist/commands/resource-view.d.ts.map +0 -1
  303. package/dist/commands/resource-view.js.map +0 -1
  304. package/dist/commands/routines.d.ts.map +0 -1
  305. package/dist/commands/routines.js.map +0 -1
  306. package/dist/commands/rules.d.ts.map +0 -1
  307. package/dist/commands/rules.js.map +0 -1
  308. package/dist/commands/sessions-picker.d.ts.map +0 -1
  309. package/dist/commands/sessions-picker.js.map +0 -1
  310. package/dist/commands/sessions.d.ts.map +0 -1
  311. package/dist/commands/sessions.js.map +0 -1
  312. package/dist/commands/skills.d.ts.map +0 -1
  313. package/dist/commands/skills.js.map +0 -1
  314. package/dist/commands/status.d.ts.map +0 -1
  315. package/dist/commands/status.js.map +0 -1
  316. package/dist/commands/subagents.d.ts.map +0 -1
  317. package/dist/commands/subagents.js.map +0 -1
  318. package/dist/commands/sync.d.ts.map +0 -1
  319. package/dist/commands/sync.js.map +0 -1
  320. package/dist/commands/teams-picker.d.ts.map +0 -1
  321. package/dist/commands/teams-picker.js.map +0 -1
  322. package/dist/commands/teams.d.ts.map +0 -1
  323. package/dist/commands/teams.js.map +0 -1
  324. package/dist/commands/utils.d.ts.map +0 -1
  325. package/dist/commands/utils.js.map +0 -1
  326. package/dist/commands/versions.d.ts.map +0 -1
  327. package/dist/commands/versions.js.map +0 -1
  328. package/dist/commands/view.d.ts.map +0 -1
  329. package/dist/commands/view.js.map +0 -1
  330. package/dist/index.d.ts.map +0 -1
  331. package/dist/index.js.map +0 -1
  332. package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
  333. package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
  334. package/dist/lib/__tests__/bugfixes.test.js +0 -192
  335. package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
  336. package/dist/lib/__tests__/exec.test.d.ts +0 -2
  337. package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
  338. package/dist/lib/__tests__/exec.test.js +0 -446
  339. package/dist/lib/__tests__/exec.test.js.map +0 -1
  340. package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
  341. package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
  342. package/dist/lib/__tests__/git-sync.test.js +0 -138
  343. package/dist/lib/__tests__/git-sync.test.js.map +0 -1
  344. package/dist/lib/__tests__/hooks.test.d.ts +0 -2
  345. package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
  346. package/dist/lib/__tests__/hooks.test.js +0 -203
  347. package/dist/lib/__tests__/hooks.test.js.map +0 -1
  348. package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
  349. package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
  350. package/dist/lib/__tests__/memory-compile.test.js +0 -95
  351. package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
  352. package/dist/lib/__tests__/models.test.d.ts +0 -2
  353. package/dist/lib/__tests__/models.test.d.ts.map +0 -1
  354. package/dist/lib/__tests__/models.test.js +0 -184
  355. package/dist/lib/__tests__/models.test.js.map +0 -1
  356. package/dist/lib/__tests__/usage.test.d.ts +0 -2
  357. package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
  358. package/dist/lib/__tests__/usage.test.js +0 -218
  359. package/dist/lib/__tests__/usage.test.js.map +0 -1
  360. package/dist/lib/agents.d.ts.map +0 -1
  361. package/dist/lib/agents.js.map +0 -1
  362. package/dist/lib/artifact-actions.d.ts.map +0 -1
  363. package/dist/lib/artifact-actions.js.map +0 -1
  364. package/dist/lib/commands.d.ts.map +0 -1
  365. package/dist/lib/commands.js.map +0 -1
  366. package/dist/lib/convert.d.ts.map +0 -1
  367. package/dist/lib/convert.js.map +0 -1
  368. package/dist/lib/daemon.d.ts.map +0 -1
  369. package/dist/lib/daemon.js.map +0 -1
  370. package/dist/lib/drive-sync.d.ts.map +0 -1
  371. package/dist/lib/drive-sync.js.map +0 -1
  372. package/dist/lib/exec.d.ts.map +0 -1
  373. package/dist/lib/exec.js.map +0 -1
  374. package/dist/lib/factory.d.ts +0 -57
  375. package/dist/lib/factory.d.ts.map +0 -1
  376. package/dist/lib/factory.js +0 -110
  377. package/dist/lib/factory.js.map +0 -1
  378. package/dist/lib/git.d.ts.map +0 -1
  379. package/dist/lib/git.js.map +0 -1
  380. package/dist/lib/help.d.ts.map +0 -1
  381. package/dist/lib/help.js.map +0 -1
  382. package/dist/lib/hooks.d.ts.map +0 -1
  383. package/dist/lib/hooks.js.map +0 -1
  384. package/dist/lib/manifest.d.ts.map +0 -1
  385. package/dist/lib/manifest.js.map +0 -1
  386. package/dist/lib/markdown.d.ts.map +0 -1
  387. package/dist/lib/markdown.js.map +0 -1
  388. package/dist/lib/mcp.d.ts.map +0 -1
  389. package/dist/lib/mcp.js.map +0 -1
  390. package/dist/lib/memory-compile.d.ts.map +0 -1
  391. package/dist/lib/memory-compile.js.map +0 -1
  392. package/dist/lib/memory.d.ts.map +0 -1
  393. package/dist/lib/memory.js.map +0 -1
  394. package/dist/lib/models.d.ts.map +0 -1
  395. package/dist/lib/models.js.map +0 -1
  396. package/dist/lib/permissions.d.ts.map +0 -1
  397. package/dist/lib/permissions.js.map +0 -1
  398. package/dist/lib/picker.d.ts.map +0 -1
  399. package/dist/lib/picker.js.map +0 -1
  400. package/dist/lib/plugins.d.ts.map +0 -1
  401. package/dist/lib/plugins.js.map +0 -1
  402. package/dist/lib/pty-client.d.ts.map +0 -1
  403. package/dist/lib/pty-client.js.map +0 -1
  404. package/dist/lib/pty-server.d.ts.map +0 -1
  405. package/dist/lib/pty-server.js.map +0 -1
  406. package/dist/lib/registry.d.ts.map +0 -1
  407. package/dist/lib/registry.js.map +0 -1
  408. package/dist/lib/resources.d.ts.map +0 -1
  409. package/dist/lib/resources.js.map +0 -1
  410. package/dist/lib/routines.d.ts.map +0 -1
  411. package/dist/lib/routines.js.map +0 -1
  412. package/dist/lib/runner.d.ts.map +0 -1
  413. package/dist/lib/runner.js.map +0 -1
  414. package/dist/lib/sandbox.d.ts.map +0 -1
  415. package/dist/lib/sandbox.js.map +0 -1
  416. package/dist/lib/scheduler.d.ts.map +0 -1
  417. package/dist/lib/scheduler.js.map +0 -1
  418. package/dist/lib/session/__tests__/db.test.d.ts +0 -2
  419. package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
  420. package/dist/lib/session/__tests__/db.test.js +0 -54
  421. package/dist/lib/session/__tests__/db.test.js.map +0 -1
  422. package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
  423. package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
  424. package/dist/lib/session/__tests__/discover.test.js +0 -63
  425. package/dist/lib/session/__tests__/discover.test.js.map +0 -1
  426. package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
  427. package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
  428. package/dist/lib/session/__tests__/prompt.test.js +0 -44
  429. package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
  430. package/dist/lib/session/__tests__/render.test.d.ts +0 -2
  431. package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
  432. package/dist/lib/session/__tests__/render.test.js +0 -602
  433. package/dist/lib/session/__tests__/render.test.js.map +0 -1
  434. package/dist/lib/session/db.d.ts.map +0 -1
  435. package/dist/lib/session/db.js.map +0 -1
  436. package/dist/lib/session/discover.d.ts.map +0 -1
  437. package/dist/lib/session/discover.js.map +0 -1
  438. package/dist/lib/session/parse.d.ts.map +0 -1
  439. package/dist/lib/session/parse.js.map +0 -1
  440. package/dist/lib/session/prompt.d.ts.map +0 -1
  441. package/dist/lib/session/prompt.js.map +0 -1
  442. package/dist/lib/session/prompt.test.d.ts +0 -2
  443. package/dist/lib/session/prompt.test.d.ts.map +0 -1
  444. package/dist/lib/session/prompt.test.js +0 -57
  445. package/dist/lib/session/prompt.test.js.map +0 -1
  446. package/dist/lib/session/render.d.ts.map +0 -1
  447. package/dist/lib/session/render.js.map +0 -1
  448. package/dist/lib/session/team-filter.d.ts.map +0 -1
  449. package/dist/lib/session/team-filter.js.map +0 -1
  450. package/dist/lib/session/team-filter.test.d.ts +0 -2
  451. package/dist/lib/session/team-filter.test.d.ts.map +0 -1
  452. package/dist/lib/session/team-filter.test.js +0 -157
  453. package/dist/lib/session/team-filter.test.js.map +0 -1
  454. package/dist/lib/session/types.d.ts.map +0 -1
  455. package/dist/lib/session/types.js.map +0 -1
  456. package/dist/lib/shims.d.ts.map +0 -1
  457. package/dist/lib/shims.js.map +0 -1
  458. package/dist/lib/skills.d.ts.map +0 -1
  459. package/dist/lib/skills.js.map +0 -1
  460. package/dist/lib/state.d.ts.map +0 -1
  461. package/dist/lib/state.js.map +0 -1
  462. package/dist/lib/subagents.d.ts.map +0 -1
  463. package/dist/lib/subagents.js.map +0 -1
  464. package/dist/lib/teams/agents.d.ts.map +0 -1
  465. package/dist/lib/teams/agents.js.map +0 -1
  466. package/dist/lib/teams/api.d.ts.map +0 -1
  467. package/dist/lib/teams/api.js.map +0 -1
  468. package/dist/lib/teams/cloud.d.ts +0 -11
  469. package/dist/lib/teams/cloud.d.ts.map +0 -1
  470. package/dist/lib/teams/cloud.js +0 -169
  471. package/dist/lib/teams/cloud.js.map +0 -1
  472. package/dist/lib/teams/debug.d.ts.map +0 -1
  473. package/dist/lib/teams/debug.js.map +0 -1
  474. package/dist/lib/teams/file_ops.d.ts.map +0 -1
  475. package/dist/lib/teams/file_ops.js.map +0 -1
  476. package/dist/lib/teams/parsers.d.ts.map +0 -1
  477. package/dist/lib/teams/parsers.js.map +0 -1
  478. package/dist/lib/teams/persistence.d.ts.map +0 -1
  479. package/dist/lib/teams/persistence.js.map +0 -1
  480. package/dist/lib/teams/ralph.d.ts +0 -8
  481. package/dist/lib/teams/ralph.d.ts.map +0 -1
  482. package/dist/lib/teams/ralph.js +0 -59
  483. package/dist/lib/teams/ralph.js.map +0 -1
  484. package/dist/lib/teams/registry.d.ts.map +0 -1
  485. package/dist/lib/teams/registry.js.map +0 -1
  486. package/dist/lib/teams/summarizer.d.ts.map +0 -1
  487. package/dist/lib/teams/summarizer.js.map +0 -1
  488. package/dist/lib/template.d.ts.map +0 -1
  489. package/dist/lib/template.js.map +0 -1
  490. package/dist/lib/types.d.ts.map +0 -1
  491. package/dist/lib/types.js.map +0 -1
  492. package/dist/lib/usage.d.ts.map +0 -1
  493. package/dist/lib/usage.js.map +0 -1
  494. package/dist/lib/versions.d.ts.map +0 -1
  495. package/dist/lib/versions.js.map +0 -1
  496. package/scripts/rebuild-sqlite.sh +0 -46
@@ -1,17 +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
- const execAsync = promisify(exec);
21
+ import { loadClaudeOauth } from './usage.js';
22
+ const execFileAsync = promisify(execFile);
12
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
+ */
13
29
  export const CODEX_HOOKS_MIN_VERSION = '0.116.0';
14
- 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');
15
33
  let cliVersionCache = null;
16
34
  function loadCliVersionCache() {
17
35
  if (cliVersionCache)
@@ -38,7 +56,7 @@ function saveCliVersionCache() {
38
56
  /* best-effort cache persist */
39
57
  }
40
58
  }
41
- /** Synchronous PATH search no subprocess. Returns first matching binary path. */
59
+ /** Synchronous PATH search -- no subprocess. Returns first matching binary path. */
42
60
  function findInPath(command) {
43
61
  const pathEnv = process.env.PATH || '';
44
62
  const pathExt = process.platform === 'win32' ? (process.env.PATHEXT || '').split(';') : [''];
@@ -59,6 +77,67 @@ function findInPath(command) {
59
77
  }
60
78
  return null;
61
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
+ */
62
141
  export const AGENTS = {
63
142
  claude: {
64
143
  id: 'claude',
@@ -78,6 +157,7 @@ export const AGENTS = {
78
157
  supportsHooks: true,
79
158
  capabilities: { hooks: true, mcp: true, allowlist: true, skills: true, commands: true, plugins: true, memoryImports: true },
80
159
  },
160
+ // codex hooks: gated to >= 0.116.0 (introduced [features] codex_hooks flag).
81
161
  codex: {
82
162
  id: 'codex',
83
163
  name: 'Codex',
@@ -93,7 +173,7 @@ export const AGENTS = {
93
173
  format: 'markdown',
94
174
  variableSyntax: '$ARGUMENTS',
95
175
  supportsHooks: true,
96
- 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 },
97
177
  },
98
178
  gemini: {
99
179
  id: 'gemini',
@@ -111,7 +191,8 @@ export const AGENTS = {
111
191
  variableSyntax: '{{args}}',
112
192
  supportsHooks: true,
113
193
  nativeAgentsSkillsDir: true,
114
- 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 },
115
196
  },
116
197
  cursor: {
117
198
  id: 'cursor',
@@ -254,12 +335,18 @@ export const AGENTS = {
254
335
  capabilities: { hooks: false, mcp: true, allowlist: false, skills: true, commands: true, plugins: false },
255
336
  },
256
337
  };
338
+ /** All registered agent IDs derived from the AGENTS registry. */
257
339
  export const ALL_AGENT_IDS = Object.keys(AGENTS);
340
+ /** Agents that support MCP (Model Context Protocol) server integration. */
258
341
  export const MCP_CAPABLE_AGENTS = ALL_AGENT_IDS.filter((id) => AGENTS[id].capabilities.mcp);
342
+ /** Agents that support skills (SKILL.md + rules/ bundles). */
259
343
  export const SKILLS_CAPABLE_AGENTS = ALL_AGENT_IDS.filter((id) => AGENTS[id].capabilities.skills);
344
+ /** Agents that support file-based slash commands. */
260
345
  export const COMMANDS_CAPABLE_AGENTS = ALL_AGENT_IDS.filter((id) => AGENTS[id].capabilities.commands);
261
- export const HOOKS_CAPABLE_AGENTS = ['claude', 'codex', 'gemini', 'openclaw'];
262
- 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);
263
350
  /** Get the chalk color function for an agent. Works for any AgentId or SessionAgentId. */
264
351
  export function colorAgent(agentId) {
265
352
  const agent = AGENTS[agentId];
@@ -274,10 +361,12 @@ export function agentLabel(agentId) {
274
361
  return agentId;
275
362
  return chalk[agent.color](agent.name);
276
363
  }
364
+ /** Check whether the given agent's CLI binary is present on PATH. */
277
365
  export async function isCliInstalled(agentId) {
278
366
  const agent = AGENTS[agentId];
279
367
  return findInPath(agent.cliCommand) !== null;
280
368
  }
369
+ /** Return the installed CLI version for the given agent, or null if not found. */
281
370
  export async function getCliVersion(agentId) {
282
371
  const agent = AGENTS[agentId];
283
372
  const binaryPath = findInPath(agent.cliCommand);
@@ -285,6 +374,7 @@ export async function getCliVersion(agentId) {
285
374
  return null;
286
375
  return getCachedVersionForBinary(agentId, binaryPath);
287
376
  }
377
+ /** Return the absolute path to the agent's CLI binary on PATH, or null. */
288
378
  export async function getCliPath(agentId) {
289
379
  return findInPath(AGENTS[agentId].cliCommand);
290
380
  }
@@ -306,7 +396,7 @@ async function getCachedVersionForBinary(agentId, binaryPath) {
306
396
  const agent = AGENTS[agentId];
307
397
  let version = null;
308
398
  try {
309
- const { stdout } = await execAsync(`${agent.cliCommand} --version`, { timeout: 3000 });
399
+ const { stdout } = await execFileAsync(agent.cliCommand, ['--version'], { timeout: 3000 });
310
400
  if (agentId === 'openclaw') {
311
401
  const match = stdout.match(/openclaw\/(\d+\.\d+\.\d+)/);
312
402
  version = match ? match[1] : stdout.trim();
@@ -324,6 +414,11 @@ async function getCachedVersionForBinary(agentId, binaryPath) {
324
414
  saveCliVersionCache();
325
415
  return version;
326
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
+ */
327
422
  export async function getCliState(agentId) {
328
423
  // Fast path: if version-managed, derive state from filesystem (no subprocesses)
329
424
  const agent = AGENTS[agentId];
@@ -369,6 +464,7 @@ export async function getCliState(agentId) {
369
464
  path: binaryPath,
370
465
  };
371
466
  }
467
+ /** Resolve CLI state for all registered agents in parallel. */
372
468
  export async function getAllCliStates() {
373
469
  const states = {};
374
470
  const results = await Promise.all(ALL_AGENT_IDS.map(async (agentId) => ({
@@ -380,26 +476,56 @@ export async function getAllCliStates() {
380
476
  }
381
477
  return states;
382
478
  }
479
+ /** Check whether the agent's config directory exists on disk. */
383
480
  export function isConfigured(agentId) {
384
481
  const agent = AGENTS[agentId];
385
482
  return fs.existsSync(agent.configDir);
386
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. */
387
507
  export function ensureCommandsDir(agentId) {
388
508
  const agent = AGENTS[agentId];
389
509
  if (!fs.existsSync(agent.commandsDir)) {
390
510
  fs.mkdirSync(agent.commandsDir, { recursive: true });
391
511
  }
392
512
  }
513
+ /** Create the agent's skills directory if it does not exist. */
393
514
  export function ensureSkillsDir(agentId) {
394
515
  const agent = AGENTS[agentId];
395
516
  if (!fs.existsSync(agent.skillsDir)) {
396
517
  fs.mkdirSync(agent.skillsDir, { recursive: true });
397
518
  }
398
519
  }
520
+ /** Return the email address associated with the agent's auth config, or null. */
399
521
  export async function getAccountEmail(agentId, home) {
400
522
  const info = await getAccountInfo(agentId, home);
401
523
  return info.email;
402
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
+ */
403
529
  export async function getAccountInfo(agentId, home) {
404
530
  const base = home || os.homedir();
405
531
  const empty = {
@@ -441,10 +567,17 @@ export async function getAccountInfo(agentId, home) {
441
567
  ]);
442
568
  const usageKey = buildIdentityKey(agentId, [['org', organizationId]]);
443
569
  let plan = null;
444
- if (oa?.billingType === 'stripe_subscription')
570
+ const keychainOauth = await loadClaudeOauth(home);
571
+ if (keychainOauth?.subscriptionType) {
572
+ plan = keychainOauth.subscriptionType.charAt(0).toUpperCase()
573
+ + keychainOauth.subscriptionType.slice(1);
574
+ }
575
+ else if (oa?.billingType === 'stripe_subscription') {
445
576
  plan = 'Pro';
446
- else if (oa?.billingType)
577
+ }
578
+ else if (oa?.billingType) {
447
579
  plan = oa.billingType;
580
+ }
448
581
  let usageStatus = null;
449
582
  const reason = data.cachedExtraUsageDisabledReason;
450
583
  if (reason === 'out_of_credits')
@@ -529,6 +662,7 @@ export async function getAccountInfo(agentId, home) {
529
662
  return { ...empty, lastActive };
530
663
  }
531
664
  }
665
+ /** Determine when the agent was last used by checking session file mtimes, falling back to config mtime. */
532
666
  function resolveLastActive(agentId, base, configPath) {
533
667
  const sessionDir = getSessionDir(agentId, base);
534
668
  const sessionExt = getSessionExtension(agentId);
@@ -547,6 +681,7 @@ function resolveLastActive(agentId, base, configPath) {
547
681
  return null;
548
682
  }
549
683
  }
684
+ /** Return the root directory where the agent stores session files, or null if unknown. */
550
685
  function getSessionDir(agentId, base) {
551
686
  switch (agentId) {
552
687
  case 'claude':
@@ -559,6 +694,7 @@ function getSessionDir(agentId, base) {
559
694
  return null;
560
695
  }
561
696
  }
697
+ /** Return the file extension used for session files by the given agent. */
562
698
  function getSessionExtension(agentId) {
563
699
  switch (agentId) {
564
700
  case 'claude':
@@ -570,6 +706,36 @@ function getSessionExtension(agentId) {
570
706
  return null;
571
707
  }
572
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. */
573
739
  function getLatestFileMtime(dir, ext) {
574
740
  if (!fs.existsSync(dir))
575
741
  return null;
@@ -583,6 +749,7 @@ function getLatestFileMtime(dir, ext) {
583
749
  return null;
584
750
  }
585
751
  }
752
+ /** Decode the payload section of a JWT token without verifying its signature. */
586
753
  function decodeJwtPayload(token) {
587
754
  const payload = token.split('.')[1];
588
755
  if (!payload)
@@ -594,6 +761,7 @@ function decodeJwtPayload(token) {
594
761
  return null;
595
762
  }
596
763
  }
764
+ /** Extract the default organization ID from a Codex/OpenAI auth claim. */
597
765
  function getCodexDefaultOrgId(authClaim) {
598
766
  const organizations = authClaim?.organizations;
599
767
  if (!Array.isArray(organizations))
@@ -601,12 +769,14 @@ function getCodexDefaultOrgId(authClaim) {
601
769
  const first = organizations[0];
602
770
  return typeof first?.id === 'string' ? first.id : null;
603
771
  }
772
+ /** Trim and normalize an identity string, returning null for empty or non-string values. */
604
773
  function normalizeIdentityPart(value) {
605
774
  if (typeof value !== 'string')
606
775
  return null;
607
776
  const trimmed = value.trim();
608
777
  return trimmed || null;
609
778
  }
779
+ /** Build a composite identity key like "claude:account=abc:org=xyz" from labeled parts. */
610
780
  function buildIdentityKey(agentId, parts) {
611
781
  const encoded = parts
612
782
  .filter(([, value]) => value)
@@ -615,13 +785,14 @@ function buildIdentityKey(agentId, parts) {
615
785
  return null;
616
786
  return `${agentId}:${encoded.join(':')}`;
617
787
  }
788
+ /** Check whether a named MCP server is registered with the agent's CLI. */
618
789
  export async function isMcpRegistered(agentId, mcpName) {
619
790
  const agent = AGENTS[agentId];
620
791
  if (!agent.capabilities.mcp || !(await isCliInstalled(agentId))) {
621
792
  return false;
622
793
  }
623
794
  try {
624
- const { stdout } = await execAsync(`${agent.cliCommand} mcp list`);
795
+ const { stdout } = await execFileAsync(agent.cliCommand, ['mcp', 'list']);
625
796
  return stdout.toLowerCase().includes(mcpName.toLowerCase());
626
797
  }
627
798
  catch {
@@ -629,6 +800,7 @@ export async function isMcpRegistered(agentId, mcpName) {
629
800
  return false;
630
801
  }
631
802
  }
803
+ /** Register an MCP server with an agent's CLI via `mcp add`. */
632
804
  export async function registerMcp(agentId, name, command, scope = 'user', transport = 'stdio', options) {
633
805
  const agent = AGENTS[agentId];
634
806
  if (!agent.capabilities.mcp) {
@@ -640,22 +812,24 @@ export async function registerMcp(agentId, name, command, scope = 'user', transp
640
812
  try {
641
813
  // Use explicit binary path when provided (bypasses shim for version-managed agents)
642
814
  const bin = options?.binary || agent.cliCommand;
643
- let cmd;
815
+ let args;
816
+ const commandArgs = splitCommandLine(command);
644
817
  if (agentId === 'claude') {
645
- cmd = `${bin} mcp add --transport ${transport} --scope ${scope} "${name}" -- ${command}`;
818
+ args = ['mcp', 'add', '--transport', transport, '--scope', scope, name, '--', ...commandArgs];
646
819
  }
647
820
  else {
648
- cmd = `${bin} mcp add "${name}" -- ${command}`;
821
+ args = ['mcp', 'add', name, '--', ...commandArgs];
649
822
  }
650
823
  // When home is specified, override HOME so MCP config writes to the version's config dir
651
824
  const env = options?.home ? { ...process.env, HOME: options.home } : undefined;
652
- await execAsync(cmd, env ? { env } : undefined);
825
+ await execFileAsync(bin, args, env ? { env } : undefined);
653
826
  return { success: true };
654
827
  }
655
828
  catch (err) {
656
829
  return { success: false, error: err.message };
657
830
  }
658
831
  }
832
+ /** Unregister (remove) a named MCP server from an agent's CLI config. */
659
833
  export async function unregisterMcp(agentId, name, options) {
660
834
  const agent = AGENTS[agentId];
661
835
  if (!agent.capabilities.mcp) {
@@ -667,13 +841,17 @@ export async function unregisterMcp(agentId, name, options) {
667
841
  try {
668
842
  const bin = options?.binary || agent.cliCommand;
669
843
  const env = options?.home ? { ...process.env, HOME: options.home } : undefined;
670
- await execAsync(`${bin} mcp remove "${name}"`, env ? { env } : undefined);
844
+ await execFileAsync(bin, ['mcp', 'remove', name], env ? { env } : undefined);
671
845
  return { success: true };
672
846
  }
673
847
  catch (err) {
674
848
  return { success: false, error: err.message };
675
849
  }
676
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
+ */
677
855
  export async function registerMcpToTargets(targets, name, command, scope = 'user', transport = 'stdio') {
678
856
  const results = [];
679
857
  for (const agentId of targets.directAgents) {
@@ -691,6 +869,10 @@ export async function registerMcpToTargets(targets, name, command, scope = 'user
691
869
  }
692
870
  return results;
693
871
  }
872
+ /**
873
+ * Unregister an MCP server from multiple agent targets, including both direct
874
+ * agents and specific version-managed installs.
875
+ */
694
876
  export async function unregisterMcpFromTargets(targets, name) {
695
877
  const results = [];
696
878
  for (const agentId of targets.directAgents) {
@@ -710,8 +892,8 @@ export async function unregisterMcpFromTargets(targets, name) {
710
892
  }
711
893
  /**
712
894
  * Extract version from npm package specification.
713
- * Examples: @swarmify/agents-mcp@latest -> latest
714
- * @swarmify/agents-mcp@1.2.3 -> 1.2.3
895
+ * Examples: @scope/package@latest -> latest
896
+ * @scope/package@1.2.3 -> 1.2.3
715
897
  * some-package -> undefined
716
898
  */
717
899
  function extractNpmVersion(args) {
@@ -1043,7 +1225,7 @@ export function listInstalledMcpsWithScope(agentId, cwd = process.cwd(), options
1043
1225
  }
1044
1226
  return results;
1045
1227
  }
1046
- // Agent name aliases for flexible input
1228
+ /** Map of agent name aliases and shorthand identifiers to canonical AgentId values. */
1047
1229
  export const AGENT_NAME_ALIASES = {
1048
1230
  claude: 'claude',
1049
1231
  'claude-code': 'claude',
@@ -1076,13 +1258,15 @@ export const AGENT_NAME_ALIASES = {
1076
1258
  'roo-code': 'roo',
1077
1259
  roocode: 'roo',
1078
1260
  };
1261
+ /** Resolve a user-provided agent name (alias, shorthand, or canonical) to its AgentId. */
1079
1262
  export function resolveAgentName(input) {
1080
1263
  return AGENT_NAME_ALIASES[input.toLowerCase()] || null;
1081
1264
  }
1265
+ /** Check whether the input string matches any known agent name or alias. */
1082
1266
  export function isAgentName(input) {
1083
1267
  return resolveAgentName(input) !== null;
1084
1268
  }
1269
+ /** Format an error message for an unrecognized agent name, listing valid options. */
1085
1270
  export function formatAgentError(agentName, validAgents = ALL_AGENT_IDS) {
1086
1271
  return `Unknown agent '${agentName}'. Valid agents: ${validAgents.join(', ')}`;
1087
1272
  }
1088
- //# sourceMappingURL=agents.js.map
@@ -1,22 +1,26 @@
1
1
  /**
2
- * Artifact action types and validation
3
- * Ported from agents/halo/cli/pkg/config
2
+ * Artifact action types and validation.
3
+ * Ported from agents/halo/cli/pkg/config.
4
+ *
5
+ * Artifact actions map tool invocations to artifact labels, allowing agents to
6
+ * trigger tools automatically when specific artifacts are produced.
4
7
  */
8
+ /** A single action that binds a tool invocation to matching artifact labels. */
5
9
  export interface ArtifactAction {
6
10
  tool: string;
7
11
  label: string;
8
12
  matches?: string[];
9
13
  input?: Record<string, string>;
10
14
  }
15
+ /** Agent-level configuration block containing artifact action definitions. */
11
16
  export interface AgentArtifactConfig {
12
17
  artifact_actions?: ArtifactAction[];
13
18
  }
14
19
  /**
15
- * Validate artifact actions configuration
20
+ * Validate artifact actions configuration.
16
21
  * @param actions - List of artifact actions to validate
17
22
  * @param httpToolNames - Set of tool names defined in http_tools section
18
23
  * @param applicationTools - Set of valid application tool names
19
24
  * @returns Array of validation errors (empty if valid)
20
25
  */
21
26
  export declare function validateArtifactActions(actions: ArtifactAction[], httpToolNames: Set<string>, applicationTools: Set<string>): string[];
22
- //# sourceMappingURL=artifact-actions.d.ts.map
@@ -1,9 +1,12 @@
1
1
  /**
2
- * Artifact action types and validation
3
- * Ported from agents/halo/cli/pkg/config
2
+ * Artifact action types and validation.
3
+ * Ported from agents/halo/cli/pkg/config.
4
+ *
5
+ * Artifact actions map tool invocations to artifact labels, allowing agents to
6
+ * trigger tools automatically when specific artifacts are produced.
4
7
  */
5
8
  /**
6
- * Validate artifact actions configuration
9
+ * Validate artifact actions configuration.
7
10
  * @param actions - List of artifact actions to validate
8
11
  * @param httpToolNames - Set of tool names defined in http_tools section
9
12
  * @param applicationTools - Set of valid application tool names
@@ -38,8 +41,8 @@ export function validateArtifactActions(actions, httpToolNames, applicationTools
38
41
  return errors;
39
42
  }
40
43
  /**
41
- * Validate template string uses only allowed patterns
42
- * Only allows {{artifact.X}} and {{preflight.X}} patterns
44
+ * Validate template string uses only allowed patterns.
45
+ * Only allows {{artifact.X}} and {{preflight.X}} patterns.
43
46
  */
44
47
  function validateTemplate(tmpl) {
45
48
  const re = /\{\{(\w+)\.(\w+)\}\}/g;
@@ -52,4 +55,3 @@ function validateTemplate(tmpl) {
52
55
  }
53
56
  return null;
54
57
  }
55
- //# sourceMappingURL=artifact-actions.js.map
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Detached worker entry point for background sync. See auto-pull.ts for the public API.
3
+ *
4
+ * For the system repo: fast-forward pull (safe — repo is read-only locally).
5
+ * For the user repo + enabled extras: `git fetch` + write a status marker the foreground
6
+ * CLI surfaces on its next invocation.
7
+ *
8
+ * Per-repo lock files at ~/.agents-system/.fetch/<alias>.lock prevent concurrent fetches.
9
+ * Lock mtime under 5 min => skip (another invocation already in flight).
10
+ */
11
+ export {};