@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
package/dist/index.js CHANGED
@@ -1,12 +1,17 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env -S node --no-warnings=ExperimentalWarning
2
+ /**
3
+ * CLI entry point for agents-cli.
4
+ *
5
+ * Registers all commands, handles update checks, auto-corrects typos,
6
+ * and launches the first-run interactive init when appropriate.
7
+ */
2
8
  import { Command } from 'commander';
3
9
  import chalk from 'chalk';
4
10
  import ora from 'ora';
5
11
  import * as fs from 'fs';
6
- import * as os from 'os';
7
12
  import * as path from 'path';
8
13
  import { fileURLToPath } from 'url';
9
- import { select } from '@inquirer/prompts';
14
+ import { confirm, select } from '@inquirer/prompts';
10
15
  // Force exit on Ctrl+C when no interactive prompt is handling it.
11
16
  process.on('SIGINT', () => process.exit(130));
12
17
  // Ignore SIGPIPE — prevents exit code 13 crashes in piped environments
@@ -19,8 +24,7 @@ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
19
24
  const VERSION = packageJson.version;
20
25
  // Import command registrations
21
26
  import { registerPullCommand } from './commands/pull.js';
22
- import { registerPushCommand } from './commands/push.js';
23
- import { registerForkCommand } from './commands/fork.js';
27
+ import { registerRepoCommands } from './commands/repo.js';
24
28
  import { registerInitCommand, runInit } from './commands/init.js';
25
29
  import { registerStatusCommand } from './commands/status.js';
26
30
  import { registerViewCommand } from './commands/view.js';
@@ -36,19 +40,26 @@ import { registerDaemonCommands } from './commands/daemon.js';
36
40
  import { registerRoutinesCommands } from './commands/routines.js';
37
41
  import { registerRunCommand } from './commands/exec.js';
38
42
  import { registerModelsCommand } from './commands/models.js';
43
+ import { registerPruneCommand } from './commands/prune.js';
44
+ import { registerDoctorCommand } from './commands/doctor.js';
39
45
  import { registerSubagentsCommands } from './commands/subagents.js';
40
46
  import { registerPluginsCommands } from './commands/plugins.js';
41
47
  import { registerSyncCommand } from './commands/sync.js';
42
48
  import { registerRefreshMemoryCommand } from './commands/refresh-memory.js';
43
- import { registerSessionsCommands } from './commands/sessions.js';
44
49
  import { registerDriveCommands } from './commands/drive.js';
45
50
  import { registerPtyCommands } from './commands/pty.js';
46
- import { registerTeamsCommands } from './commands/teams.js';
47
51
  import { registerProfilesCommands } from './commands/profiles.js';
48
52
  import { registerSecretsCommands } from './commands/secrets.js';
49
- import { registerCloudCommands } from './commands/cloud.js';
53
+ import { registerFactoryCommands } from './commands/factory.js';
54
+ import { registerUsageCommand } from './commands/usage.js';
55
+ import { registerAliasCommand } from './commands/alias.js';
56
+ import { registerBetaCommands } from './commands/beta.js';
50
57
  import { applyGlobalHelpConventions } from './lib/help.js';
51
58
  import { isPromptCancelled } from './commands/utils.js';
59
+ import { getAgentsDir } from './lib/state.js';
60
+ import { AGENTS } from './lib/agents.js';
61
+ import { getGlobalDefault } from './lib/versions.js';
62
+ import { addShimsToPath, ensureShimCurrent, getPathShadowingExecutable, getPathSetupInstructions, hasAliasShadowingShim, isShimsInPath, listAgentsWithInstalledVersions, } from './lib/shims.js';
52
63
  const program = new Command();
53
64
  program
54
65
  .name('agents')
@@ -69,13 +80,13 @@ Quick start:
69
80
  agents init First-time setup (interactive)
70
81
  agents view See what's installed
71
82
  agents run <agent> ["prompt"] Run an agent (interactive without prompt, headless with)
72
- agents cloud run <prompt> Dispatch a task to the cloud (Rush, Codex, Factory)
73
83
  agents sessions Browse past sessions across all agents
74
84
 
75
85
  Agent versions:
76
86
  add <agent>[@version] Install an agent CLI (e.g. agents add codex)
77
87
  remove <agent>[@version] Uninstall a version
78
88
  use <agent>@<version> Set the default version
89
+ prune [target] Remove orphan resources (commands/skills/hooks) and/or older duplicate version installs
79
90
  view [agent[@version]] List versions, or inspect one in detail
80
91
 
81
92
  Agent configuration (synced across versions):
@@ -94,7 +105,6 @@ Packages:
94
105
 
95
106
  Run agents:
96
107
  run <agent|profile> [prompt] Run an agent. Omit prompt for interactive mode.
97
- cloud Dispatch tasks to cloud providers (Rush, Codex, Factory)
98
108
  teams Coordinate multiple agents on shared work
99
109
  routines Run agents on a cron schedule (scheduler auto-starts)
100
110
  sessions Browse and replay past runs
@@ -104,6 +114,7 @@ Credentials:
104
114
  secrets Keychain-backed env bundles injected at spawn
105
115
 
106
116
  Helpers:
117
+ beta Enable preview features like drive and factory
107
118
  pty Drive interactive terminal programs (REPLs, TUIs)
108
119
 
109
120
  Automation tips:
@@ -114,19 +125,20 @@ Automation tips:
114
125
  Non-TTY shells apply defaults Omitted required selections fail with a plain hint
115
126
 
116
127
  Config sync (portable setup via git):
117
- pull [gh:user/repo] Clone or pull a shared .agents config repo
118
- push Commit and push your local config
119
- fork Fork the default config repo to your GitHub
128
+ pull Clone or pull the system repo at ~/.agents-system/
129
+ repo init --path <dir> Scaffold your own editable repo from a template
130
+ repo add <path|gh:user/repo> Merge an extra repo after the system repo
120
131
 
121
132
  Options:
122
133
  -V, --version Show version number
123
134
  -h, --help Show help
124
135
 
125
- Config lives in ~/.agents/. Run 'agents <command> --help' for details.
136
+ System config lives in ~/.agents-system/. Run 'agents <command> --help' for details.
126
137
  `;
127
138
  }
128
139
  return originalHelpInformation();
129
140
  };
141
+ /** Compare two semver version strings. Returns 1 if a > b, -1 if a < b, 0 if equal. */
130
142
  function compareVersions(a, b) {
131
143
  const partsA = a.split('.').map(Number);
132
144
  const partsB = b.split('.').map(Number);
@@ -138,6 +150,7 @@ function compareVersions(a, b) {
138
150
  }
139
151
  return 0;
140
152
  }
153
+ /** Fetch and display changelog entries between two versions from unpkg. */
141
154
  async function showWhatsNew(fromVersion, toVersion) {
142
155
  try {
143
156
  const response = await fetch(`https://unpkg.com/@phnx-labs/agents-cli@${toVersion}/CHANGELOG.md`);
@@ -183,7 +196,8 @@ async function showWhatsNew(fromVersion, toVersion) {
183
196
  }
184
197
  }
185
198
  const UPDATE_CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
186
- const UPDATE_CHECK_FILE = path.join(os.homedir(), '.agents', '.update-check');
199
+ const UPDATE_CHECK_FILE = path.join(getAgentsDir(), '.update-check');
200
+ /** Read the cached update-check state from disk. Returns null if the file is missing or corrupt. */
187
201
  function readUpdateCache() {
188
202
  try {
189
203
  return JSON.parse(fs.readFileSync(UPDATE_CHECK_FILE, 'utf-8'));
@@ -193,11 +207,13 @@ function readUpdateCache() {
193
207
  return null;
194
208
  }
195
209
  }
210
+ /** Determine whether enough time has elapsed since the last registry fetch. */
196
211
  function shouldFetchLatest(cache) {
197
212
  if (!cache)
198
213
  return true;
199
214
  return Date.now() - cache.lastCheck > UPDATE_CHECK_INTERVAL_MS;
200
215
  }
216
+ /** Persist the latest known version and current timestamp to the update-check cache. */
201
217
  function saveUpdateCheck(latestVersion) {
202
218
  try {
203
219
  const dir = path.dirname(UPDATE_CHECK_FILE);
@@ -209,6 +225,7 @@ function saveUpdateCheck(latestVersion) {
209
225
  /* best-effort cache update */
210
226
  }
211
227
  }
228
+ /** Present an interactive upgrade prompt (TTY) or a one-line hint (non-TTY). */
212
229
  async function promptUpgrade(latestVersion) {
213
230
  if (!process.stdout.isTTY) {
214
231
  console.error(chalk.yellow(`Update available: ${VERSION} -> ${latestVersion}. Run: npm install -g @phnx-labs/agents-cli@latest`));
@@ -239,19 +256,19 @@ async function promptUpgrade(latestVersion) {
239
256
  return;
240
257
  }
241
258
  if (answer === 'now') {
242
- const { exec, spawnSync } = await import('child_process');
259
+ const { execFile, spawnSync } = await import('child_process');
243
260
  const { promisify } = await import('util');
244
- const execAsync = promisify(exec);
261
+ const execFileAsync = promisify(execFile);
245
262
  const spinner = ora('Upgrading...').start();
246
263
  try {
247
- await execAsync('npm install -g @phnx-labs/agents-cli@latest');
264
+ await execFileAsync('npm', ['install', '-g', '@phnx-labs/agents-cli@latest']);
248
265
  spinner.succeed(`Upgraded to ${latestVersion}`);
249
266
  await showWhatsNew(VERSION, latestVersion);
250
267
  console.log();
251
268
  // Re-exec with new version and exit
252
269
  const result = spawnSync('agents', process.argv.slice(2), {
253
270
  stdio: 'inherit',
254
- shell: true,
271
+ shell: false,
255
272
  });
256
273
  process.exit(result.status ?? 0);
257
274
  }
@@ -277,7 +294,7 @@ function refreshUpdateCacheInBackground() {
277
294
  /* network error, try again next invocation */
278
295
  });
279
296
  }
280
- /** Synchronous cache read prompt if cached latestVersion is newer. Triggers background refresh if cache is stale. */
297
+ /** Check for available updates using the local cache. Triggers a background refresh if stale. */
281
298
  async function checkForUpdates() {
282
299
  const cache = readUpdateCache();
283
300
  // Kick off network refresh in background if stale. Does not block.
@@ -298,6 +315,75 @@ async function checkForUpdates() {
298
315
  }
299
316
  }
300
317
  }
318
+ async function maybeBootstrapShimIntegration(requestedCommand) {
319
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
320
+ return;
321
+ }
322
+ if (requestedCommand === 'sync' || requestedCommand === 'refresh-memory') {
323
+ return;
324
+ }
325
+ const installedAgents = listAgentsWithInstalledVersions();
326
+ if (installedAgents.length === 0) {
327
+ return;
328
+ }
329
+ const createdOrUpdated = [];
330
+ for (const agent of installedAgents) {
331
+ const status = ensureShimCurrent(agent);
332
+ if (status !== 'current') {
333
+ createdOrUpdated.push(`${status === 'created' ? 'Created' : 'Updated'} ${AGENTS[agent].cliCommand} shim`);
334
+ }
335
+ }
336
+ for (const notice of createdOrUpdated) {
337
+ console.log(chalk.green(notice));
338
+ }
339
+ const defaultAgents = installedAgents.filter((agent) => getGlobalDefault(agent));
340
+ const shadowed = defaultAgents
341
+ .map((agent) => ({ agent, shadowedBy: getPathShadowingExecutable(agent) }))
342
+ .filter((item) => Boolean(item.shadowedBy));
343
+ // Also check for shell aliases that shadow the shim
344
+ const aliased = defaultAgents.filter((agent) => hasAliasShadowingShim(agent));
345
+ // If shims are in PATH and nothing is binary-shadowing, we're done.
346
+ // Shell aliases that call the same command with extra flags are intentional
347
+ // customization and don't break shim integration.
348
+ if (shadowed.length === 0 && isShimsInPath()) {
349
+ return;
350
+ }
351
+ const affected = [];
352
+ for (const { agent, shadowedBy } of shadowed) {
353
+ affected.push(`${AGENTS[agent].cliCommand} -> ${shadowedBy}`);
354
+ }
355
+ for (const agent of aliased) {
356
+ if (!shadowed.some((s) => s.agent === agent)) {
357
+ affected.push(`${AGENTS[agent].cliCommand} (alias)`);
358
+ }
359
+ }
360
+ if (affected.length === 0) {
361
+ // PATH issue - show all installed agents
362
+ affected.push(...installedAgents.map((agent) => AGENTS[agent].cliCommand));
363
+ }
364
+ const shouldRepair = await confirm({
365
+ message: `Repair shim integration now? ${affected.join(', ')}`,
366
+ default: true,
367
+ });
368
+ if (!shouldRepair) {
369
+ console.log(chalk.yellow('Shim integration still needs attention.'));
370
+ console.log(chalk.gray(getPathSetupInstructions()));
371
+ return;
372
+ }
373
+ const pathResult = addShimsToPath();
374
+ if (!pathResult.success) {
375
+ console.log(chalk.yellow('Could not repair shim PATH setup automatically.'));
376
+ console.log(chalk.gray(pathResult.error || getPathSetupInstructions()));
377
+ return;
378
+ }
379
+ if (pathResult.alreadyPresent) {
380
+ console.log(chalk.yellow('Shim PATH entry is already in your shell config, but this shell has not reloaded it yet.'));
381
+ }
382
+ else {
383
+ console.log(chalk.green(`Repaired shim PATH setup in ~/${pathResult.rcFile}`));
384
+ }
385
+ console.log(chalk.gray(getPathSetupInstructions()));
386
+ }
301
387
  // Register all commands
302
388
  registerViewCommand(program);
303
389
  registerStatusCommand(program);
@@ -337,6 +423,8 @@ registerDaemonCommands(program);
337
423
  registerRoutinesCommands(program);
338
424
  registerRunCommand(program);
339
425
  registerModelsCommand(program);
426
+ registerPruneCommand(program);
427
+ registerDoctorCommand(program);
340
428
  // Deprecated 'exec' alias for 'run'
341
429
  program
342
430
  .command('exec', { hidden: true })
@@ -348,14 +436,15 @@ program
348
436
  args[0] = 'run';
349
437
  await program.parseAsync(['node', 'agents', ...args]);
350
438
  });
351
- registerTeamsCommands(program);
352
439
  registerProfilesCommands(program);
353
440
  registerSecretsCommands(program);
354
- registerSessionsCommands(program);
441
+ registerBetaCommands(program);
355
442
  registerSyncCommand(program);
356
443
  registerRefreshMemoryCommand(program);
357
444
  registerDriveCommands(program);
358
- registerCloudCommands(program);
445
+ registerFactoryCommands(program);
446
+ registerUsageCommand(program);
447
+ registerAliasCommand(program);
359
448
  registerPtyCommands(program);
360
449
  // Deprecated 'jobs' and 'cron' aliases for 'routines'
361
450
  for (const alias of ['jobs', 'cron']) {
@@ -394,10 +483,10 @@ program
394
483
  return;
395
484
  }
396
485
  spinner.text = `Upgrading ${VERSION} -> ${latestVersion}...`;
397
- const { exec: execCb } = await import('child_process');
486
+ const { execFile } = await import('child_process');
398
487
  const { promisify } = await import('util');
399
- const execAsync = promisify(execCb);
400
- await execAsync('npm install -g @phnx-labs/agents-cli@latest');
488
+ const execFileAsync = promisify(execFile);
489
+ await execFileAsync('npm', ['install', '-g', '@phnx-labs/agents-cli@latest']);
401
490
  spinner.succeed(`Upgraded to ${latestVersion}`);
402
491
  await showWhatsNew(VERSION, latestVersion);
403
492
  }
@@ -407,13 +496,10 @@ program
407
496
  }
408
497
  });
409
498
  registerPullCommand(program);
410
- registerPushCommand(program);
411
- registerForkCommand(program);
499
+ registerRepoCommands(program);
412
500
  registerInitCommand(program);
413
501
  applyGlobalHelpConventions(program);
414
- /**
415
- * Calculate Levenshtein edit distance between two strings.
416
- */
502
+ /** Calculate the Levenshtein edit distance between two strings. */
417
503
  function levenshtein(a, b) {
418
504
  const m = a.length;
419
505
  const n = b.length;
@@ -461,10 +547,44 @@ program.on('command:*', (operands) => {
461
547
  });
462
548
  // Run update check on EVERY invocation before parsing
463
549
  await checkForUpdates();
550
+ // Surface any "behind upstream" notices from the previous detached sync, then
551
+ // fire-and-forget the next background sync. System repo gets a real fast-forward
552
+ // pull (read-only locally, safe). User repo and extras get fetch-only + a
553
+ // status marker that we'll print on the *next* invocation.
554
+ const { spawnDetachedSync } = await import('./lib/auto-pull.js');
555
+ spawnDetachedSync();
464
556
  // First-run experience: no args + no config yet + TTY -> launch interactive init.
465
557
  // Skipped when stdin/stdout isn't a terminal (CI, pipes) or when user passes any args.
466
558
  const passedArgs = process.argv.slice(2);
467
- const metaFilePath = path.join(os.homedir(), '.agents', 'agents.yaml');
559
+ const requestedCommand = passedArgs.find((arg) => !arg.startsWith('-'));
560
+ /**
561
+ * Lazily register command trees that pull in the SQLite-backed session/cloud
562
+ * stack. This keeps lightweight commands like `agents view` from loading the
563
+ * DB layer during CLI startup.
564
+ */
565
+ async function registerLazyCommands() {
566
+ switch (requestedCommand) {
567
+ case 'sessions': {
568
+ const { registerSessionsCommands } = await import('./commands/sessions.js');
569
+ registerSessionsCommands(program);
570
+ break;
571
+ }
572
+ case 'teams': {
573
+ const { registerTeamsCommands } = await import('./commands/teams.js');
574
+ registerTeamsCommands(program);
575
+ break;
576
+ }
577
+ case 'cloud': {
578
+ const { registerCloudCommands } = await import('./commands/cloud.js');
579
+ registerCloudCommands(program);
580
+ break;
581
+ }
582
+ default:
583
+ break;
584
+ }
585
+ }
586
+ await registerLazyCommands();
587
+ const metaFilePath = path.join(getAgentsDir(), 'agents.yaml');
468
588
  const firstRun = passedArgs.length === 0 &&
469
589
  !fs.existsSync(metaFilePath) &&
470
590
  process.stdin.isTTY &&
@@ -480,5 +600,23 @@ if (firstRun) {
480
600
  }
481
601
  process.exit(0);
482
602
  }
483
- await program.parseAsync();
484
- //# sourceMappingURL=index.js.map
603
+ // Commands that require the system repo to be cloned first.
604
+ const SYSTEM_REPO_COMMANDS = new Set([
605
+ 'view', 'status', 'skills', 'rules', 'commands', 'hooks',
606
+ 'mcp', 'permissions', 'versions', 'packages', 'sync',
607
+ 'subagents', 'repo', 'plugins', 'doctor',
608
+ ]);
609
+ if (!firstRun && requestedCommand && SYSTEM_REPO_COMMANDS.has(requestedCommand)) {
610
+ const { ensureInitialized } = await import('./commands/init.js');
611
+ await ensureInitialized(program);
612
+ }
613
+ try {
614
+ await maybeBootstrapShimIntegration(requestedCommand);
615
+ await program.parseAsync();
616
+ }
617
+ catch (err) {
618
+ if (err instanceof Error && err.name === 'ExitPromptError') {
619
+ process.exit(130);
620
+ }
621
+ throw err;
622
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Agent Client Protocol (ACP) client wrapper for agents-cli.
3
+ *
4
+ * Spawns an ACP-capable agent CLI as a stdio subprocess and drives it through
5
+ * initialize -> newSession -> prompt, streaming `session/update` notifications
6
+ * back to the caller as async iterables.
7
+ *
8
+ * Also implements the Client interface (fs read/write, terminal exec) so the
9
+ * agent can request filesystem and shell operations through us. `--mode plan`
10
+ * rejects all write/terminal requests; `edit`/`full` allow them.
11
+ */
12
+ import { type SessionNotification } from '@zed-industries/agent-client-protocol';
13
+ import type { AgentId } from '../types.js';
14
+ import type { ExecMode } from '../exec.js';
15
+ export interface AcpRunOptions {
16
+ agent: AgentId;
17
+ prompt: string;
18
+ cwd: string;
19
+ mode: ExecMode;
20
+ /** Optional: callback invoked for every session/update notification. */
21
+ onUpdate?: (n: SessionNotification) => void;
22
+ }
23
+ export interface AcpRunResult {
24
+ stopReason: string;
25
+ sessionId: string;
26
+ }
27
+ /**
28
+ * Runs a single prompt turn against an ACP-capable agent and streams updates
29
+ * to `onUpdate`. Resolves when the turn completes (StopReason is returned).
30
+ */
31
+ export declare function runAcp(opts: AcpRunOptions): Promise<AcpRunResult>;
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Agent Client Protocol (ACP) client wrapper for agents-cli.
3
+ *
4
+ * Spawns an ACP-capable agent CLI as a stdio subprocess and drives it through
5
+ * initialize -> newSession -> prompt, streaming `session/update` notifications
6
+ * back to the caller as async iterables.
7
+ *
8
+ * Also implements the Client interface (fs read/write, terminal exec) so the
9
+ * agent can request filesystem and shell operations through us. `--mode plan`
10
+ * rejects all write/terminal requests; `edit`/`full` allow them.
11
+ */
12
+ import { spawn } from 'child_process';
13
+ import { Readable, Writable } from 'stream';
14
+ import { promises as fs } from 'fs';
15
+ import * as path from 'path';
16
+ import { ClientSideConnection, ndJsonStream, } from '@zed-industries/agent-client-protocol';
17
+ import { getAcpSpec, supportsAcp } from './harnesses.js';
18
+ const PROTOCOL_VERSION = 1;
19
+ /**
20
+ * Runs a single prompt turn against an ACP-capable agent and streams updates
21
+ * to `onUpdate`. Resolves when the turn completes (StopReason is returned).
22
+ */
23
+ export async function runAcp(opts) {
24
+ if (!supportsAcp(opts.agent)) {
25
+ throw new Error(`Agent '${opts.agent}' does not support ACP. Use direct exec instead.`);
26
+ }
27
+ const spec = getAcpSpec(opts.agent);
28
+ const child = spawn(spec.command, spec.args, {
29
+ cwd: opts.cwd,
30
+ stdio: ['pipe', 'pipe', 'inherit'],
31
+ env: process.env,
32
+ });
33
+ const stream = ndJsonStream(Writable.toWeb(child.stdin), Readable.toWeb(child.stdout));
34
+ const client = buildClient(opts);
35
+ const connection = new ClientSideConnection(() => client, stream);
36
+ const initResp = await connection.initialize({
37
+ protocolVersion: PROTOCOL_VERSION,
38
+ clientCapabilities: {
39
+ fs: { readTextFile: true, writeTextFile: true },
40
+ terminal: true,
41
+ },
42
+ });
43
+ if (initResp.protocolVersion < PROTOCOL_VERSION) {
44
+ throw new Error(`Agent '${opts.agent}' speaks ACP protocol v${initResp.protocolVersion}, need v${PROTOCOL_VERSION}.`);
45
+ }
46
+ const session = await connection.newSession({
47
+ cwd: opts.cwd,
48
+ mcpServers: [],
49
+ });
50
+ try {
51
+ const resp = await connection.prompt({
52
+ sessionId: session.sessionId,
53
+ prompt: [{ type: 'text', text: opts.prompt }],
54
+ });
55
+ return { stopReason: resp.stopReason, sessionId: session.sessionId };
56
+ }
57
+ finally {
58
+ child.kill('SIGTERM');
59
+ }
60
+ }
61
+ function buildClient(opts) {
62
+ const { mode, onUpdate, cwd } = opts;
63
+ const canWrite = mode !== 'plan';
64
+ return {
65
+ async sessionUpdate(params) {
66
+ if (onUpdate)
67
+ onUpdate(params);
68
+ },
69
+ async readTextFile(params) {
70
+ const abs = resolveInCwd(cwd, params.path);
71
+ const content = await fs.readFile(abs, 'utf8');
72
+ const sliced = sliceByLines(content, params.line, params.limit);
73
+ return { content: sliced };
74
+ },
75
+ async writeTextFile(params) {
76
+ if (!canWrite) {
77
+ throw new Error(`File writes are denied in plan mode: ${params.path}`);
78
+ }
79
+ const abs = resolveInCwd(cwd, params.path);
80
+ await fs.mkdir(path.dirname(abs), { recursive: true });
81
+ await fs.writeFile(abs, params.content, 'utf8');
82
+ return {};
83
+ },
84
+ async requestPermission(params) {
85
+ const optionId = mode === 'full'
86
+ ? (params.options.find(o => o.kind === 'allow_always')?.optionId
87
+ ?? params.options[0]?.optionId)
88
+ : params.options.find(o => o.kind === 'allow_once')?.optionId;
89
+ if (!optionId) {
90
+ return { outcome: { outcome: 'cancelled' } };
91
+ }
92
+ return { outcome: { outcome: 'selected', optionId } };
93
+ },
94
+ async createTerminal(params) {
95
+ if (!canWrite) {
96
+ throw new Error(`Terminal commands are denied in plan mode: ${params.command}`);
97
+ }
98
+ throw new Error('Terminal support not yet implemented in agents-cli ACP client.');
99
+ },
100
+ };
101
+ }
102
+ function resolveInCwd(cwd, target) {
103
+ const abs = path.resolve(cwd, target);
104
+ const rel = path.relative(cwd, abs);
105
+ if (rel.startsWith('..')) {
106
+ throw new Error(`Path '${target}' escapes session cwd '${cwd}'`);
107
+ }
108
+ return abs;
109
+ }
110
+ function sliceByLines(content, startLine, limit) {
111
+ if (startLine == null && limit == null)
112
+ return content;
113
+ const lines = content.split('\n');
114
+ const from = Math.max(0, (startLine ?? 1) - 1);
115
+ const to = limit != null ? from + limit : lines.length;
116
+ return lines.slice(from, to).join('\n');
117
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Per-harness spawn configuration for Agent Client Protocol (ACP) mode.
3
+ *
4
+ * Each entry describes how to launch a coding agent CLI as an ACP server
5
+ * (stdio JSON-RPC). Unsupported harnesses (amp, roo, goose-stdio) are omitted;
6
+ * callers should fall back to the legacy direct-exec path for those.
7
+ *
8
+ * Sources: https://agentclientprotocol.com/get-started/agents + vendor docs.
9
+ */
10
+ import type { AgentId } from '../types.js';
11
+ export interface AcpHarnessSpec {
12
+ /** Command + args to spawn the agent in ACP server mode. */
13
+ command: string;
14
+ args: string[];
15
+ /** Human-hint for `teams doctor` when the spawn fails. */
16
+ installHint: string;
17
+ /** Confidence: "verified" = tested in this repo, "documented" = per vendor docs. */
18
+ confidence: 'verified' | 'documented';
19
+ /** Source URL for the invocation. */
20
+ source: string;
21
+ }
22
+ export declare const ACP_HARNESSES: Partial<Record<AgentId, AcpHarnessSpec>>;
23
+ /** Returns the ACP spawn spec for an agent, or undefined if the harness does not speak ACP. */
24
+ export declare function getAcpSpec(agent: AgentId): AcpHarnessSpec | undefined;
25
+ /** True if the harness is known to support ACP (directly or via adapter). */
26
+ export declare function supportsAcp(agent: AgentId): boolean;
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Per-harness spawn configuration for Agent Client Protocol (ACP) mode.
3
+ *
4
+ * Each entry describes how to launch a coding agent CLI as an ACP server
5
+ * (stdio JSON-RPC). Unsupported harnesses (amp, roo, goose-stdio) are omitted;
6
+ * callers should fall back to the legacy direct-exec path for those.
7
+ *
8
+ * Sources: https://agentclientprotocol.com/get-started/agents + vendor docs.
9
+ */
10
+ export const ACP_HARNESSES = {
11
+ gemini: {
12
+ command: 'gemini',
13
+ args: ['--experimental-acp'],
14
+ installHint: 'npm i -g @google/gemini-cli',
15
+ confidence: 'documented',
16
+ source: 'https://agentclientprotocol.com/get-started/agents',
17
+ },
18
+ claude: {
19
+ command: 'npx',
20
+ args: ['-y', '@zed-industries/claude-agent-acp'],
21
+ installHint: 'npm i -g @zed-industries/claude-agent-acp',
22
+ confidence: 'documented',
23
+ source: 'https://www.npmjs.com/package/@zed-industries/claude-agent-acp',
24
+ },
25
+ codex: {
26
+ command: 'npx',
27
+ args: ['-y', '@zed-industries/codex-acp'],
28
+ installHint: 'npm i -g @zed-industries/codex-acp',
29
+ confidence: 'documented',
30
+ source: 'https://www.npmjs.com/package/@zed-industries/codex-acp',
31
+ },
32
+ cursor: {
33
+ command: 'cursor-agent',
34
+ args: ['acp'],
35
+ installHint: 'curl https://cursor.com/install -fsS | bash',
36
+ confidence: 'documented',
37
+ source: 'https://cursor.com/docs/cli/acp',
38
+ },
39
+ opencode: {
40
+ command: 'opencode',
41
+ args: ['acp'],
42
+ installHint: 'npm i -g opencode-ai',
43
+ confidence: 'documented',
44
+ source: 'https://opencode.ai/docs/acp/',
45
+ },
46
+ openclaw: {
47
+ command: 'openclaw',
48
+ args: ['acp'],
49
+ installHint: 'see https://docs.openclaw.ai',
50
+ confidence: 'documented',
51
+ source: 'https://docs.openclaw.ai/tools/acp-agents',
52
+ },
53
+ // goose: ACP over HTTP via `goosed`, not a clean stdio subcommand.
54
+ // copilot, kiro: excluded for now (not installed in the reference environment,
55
+ // no local verification possible).
56
+ // amp, roo: not on the ACP agents list.
57
+ };
58
+ /** Returns the ACP spawn spec for an agent, or undefined if the harness does not speak ACP. */
59
+ export function getAcpSpec(agent) {
60
+ return ACP_HARNESSES[agent];
61
+ }
62
+ /** True if the harness is known to support ACP (directly or via adapter). */
63
+ export function supportsAcp(agent) {
64
+ return ACP_HARNESSES[agent] !== undefined;
65
+ }
@@ -0,0 +1,18 @@
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 type { AgentId } from '../types.js';
9
+ import type { ExecMode } from '../exec.js';
10
+ export interface HeadlessAcpOptions {
11
+ agent: AgentId;
12
+ prompt: string;
13
+ cwd: string;
14
+ mode: ExecMode;
15
+ json: boolean;
16
+ }
17
+ /** Runs a prompt turn over ACP, streaming output to stdout per `json` mode. */
18
+ export declare function runAcpHeadless(opts: HeadlessAcpOptions): Promise<number>;