@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
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Version management commands for installing, switching, and removing agent CLIs.
3
+ *
4
+ * Implements `agents add`, `agents remove`, `agents use`, and the deprecated
5
+ * `agents list`. Handles npm-based installation, shim creation, config symlink
6
+ * switching, resource sync prompts, and project-level version pinning.
7
+ */
1
8
  import type { Command } from 'commander';
9
+ /** Register `agents add`, `agents remove`, `agents use`, and `agents list` (deprecated). */
2
10
  export declare function registerVersionsCommands(program: Command): void;
3
- //# sourceMappingURL=versions.d.ts.map
@@ -77,6 +77,7 @@ function warnIfShimShadowed(agent) {
77
77
  console.log(chalk.gray(` Managed shim: ${getShimPath(agent)}`));
78
78
  console.log(chalk.gray(` ${getPathSetupInstructions().split('\n').join('\n ')}`));
79
79
  }
80
+ /** Register `agents add`, `agents remove`, `agents use`, and `agents list` (deprecated). */
80
81
  export function registerVersionsCommands(program) {
81
82
  program
82
83
  .command('add <specs...>')
@@ -443,11 +444,11 @@ Important: This is the ONLY command that sets the default version. If you want a
443
444
  .action(async (agentArg, versionArg, options) => {
444
445
  try {
445
446
  const skipPrompts = options.yes || !isInteractiveTerminal();
446
- // Auto-pull ~/.agents if it's a git repo with remote (silent on success)
447
+ // Auto-pull ~/.agents-system if it's a git repo with remote (silent on success)
447
448
  const agentsDir = getAgentsDir();
448
449
  const pullResult = await tryAutoPull(agentsDir);
449
450
  if (pullResult.pulled) {
450
- console.log(chalk.gray('Synced ~/.agents from remote'));
451
+ console.log(chalk.gray('Synced ~/.agents-system from remote'));
451
452
  }
452
453
  // Support both "claude 2.0.65" and "claude@2.0.65" formats
453
454
  let agent;
@@ -660,6 +661,7 @@ Important: This is the ONLY command that sets the default version. If you want a
660
661
  throw err;
661
662
  }
662
663
  }
664
+ const previousDefault = getGlobalDefault(agentId);
663
665
  // Set global default
664
666
  setGlobalDefault(agentId, finalVersion);
665
667
  // Regenerate shim so it uses the latest script format
@@ -697,4 +699,3 @@ Important: This is the ONLY command that sets the default version. If you want a
697
699
  await viewAction(agentArg);
698
700
  });
699
701
  }
700
- //# sourceMappingURL=versions.js.map
@@ -1,8 +1,53 @@
1
+ /**
2
+ * View command for inspecting installed agents, versions, accounts, and resources.
3
+ *
4
+ * Implements `agents view` -- shows installed agent CLIs with version info,
5
+ * account emails, usage stats, and active status. When given an agent@version
6
+ * argument, displays a detailed breakdown of commands, skills, MCP servers,
7
+ * rules, hooks, and promptcuts synced to that version.
8
+ */
1
9
  import type { Command } from 'commander';
10
+ import type { AgentId } from '../lib/types.js';
11
+ /** Machine-readable entry for a single installed version. */
12
+ export interface ViewJsonVersion {
13
+ version: string;
14
+ isDefault: boolean;
15
+ signedIn: boolean;
16
+ email: string | null;
17
+ plan: string | null;
18
+ usageStatus: 'available' | 'rate_limited' | 'out_of_credits' | null;
19
+ windows: Array<{
20
+ key: 'session' | 'week' | 'sonnet_week';
21
+ usedPercent: number;
22
+ resetsAt: string | null;
23
+ }>;
24
+ lastActive: string | null;
25
+ path: string;
26
+ }
27
+ /** Machine-readable entry for one agent's installed versions. */
28
+ export interface ViewJsonAgent {
29
+ agent: AgentId;
30
+ versions: ViewJsonVersion[];
31
+ }
32
+ /**
33
+ * Prune older installed versions that share an email with a newer installed
34
+ * version. Keeps the highest semver per email, skips the global default (with
35
+ * a warning so the user can switch first).
36
+ *
37
+ * When filterAgentId is set, prunes that agent first, then cascades: after
38
+ * each agent, offers the next agent with duplicates. User answering "no"
39
+ * stops the chain.
40
+ */
41
+ export declare function pruneDuplicates(filterAgentId: AgentId | undefined, yes: boolean, dryRun: boolean): Promise<void>;
2
42
  /**
3
43
  * Main view action handler.
4
44
  * Exported for use by deprecated aliases.
5
45
  */
6
- export declare function viewAction(agentArg?: string): Promise<void>;
46
+ export declare function viewAction(agentArg?: string, options?: {
47
+ json?: boolean;
48
+ prune?: boolean;
49
+ yes?: boolean;
50
+ dryRun?: boolean;
51
+ }): Promise<void>;
52
+ /** Register the `agents view` command. */
7
53
  export declare function registerViewCommand(program: Command): void;
8
- //# sourceMappingURL=view.d.ts.map
@@ -6,13 +6,15 @@ import * as yaml from 'yaml';
6
6
  import { AGENTS, ALL_AGENT_IDS, getAllCliStates, getAccountInfo, resolveAgentName, formatAgentError, agentLabel, colorAgent, } from '../lib/agents.js';
7
7
  import { formatUsageSection, formatUsageSummary, getUsageInfoForIdentity, getUsageInfoByIdentity, getUsageLookupKey, } from '../lib/usage.js';
8
8
  import { readManifest } from '../lib/manifest.js';
9
- import { listInstalledVersions, getGlobalDefault, getVersionHomePath, getVersionDir, getAvailableResources, getActuallySyncedResources, getNewResources, hasNewResources, promptNewResourceSelection, syncResourcesToVersion, } from '../lib/versions.js';
10
- import { getShimsDir, isShimsInPath, ensureVersionedAliasCurrent, } from '../lib/shims.js';
9
+ import { listInstalledVersions, getGlobalDefault, getVersionHomePath, getVersionDir, resolveVersionAlias, getAvailableResources, getActuallySyncedResources, getNewResources, hasNewResources, promptNewResourceSelection, syncResourcesToVersion, removeVersion, } from '../lib/versions.js';
10
+ import { getShimsDir, isShimsInPath, ensureVersionedAliasCurrent, removeShim, } from '../lib/shims.js';
11
11
  import { getAgentResources } from '../lib/resources.js';
12
- import { getAgentsDir, getPromptcutsPath } from '../lib/state.js';
12
+ import { getAgentsDir, getUserAgentsDir, getPromptcutsPath } from '../lib/state.js';
13
13
  import { isGitRepo, getGitSyncStatus } from '../lib/git.js';
14
14
  import { getCentralMemoryFileName } from '../lib/memory.js';
15
- import { formatPath, isPromptCancelled } from './utils.js';
15
+ import { getConfiguredRunStrategy } from '../lib/rotate.js';
16
+ import { confirm } from '@inquirer/prompts';
17
+ import { formatPath, isInteractiveTerminal, isPromptCancelled } from './utils.js';
16
18
  function formatLastActive(date) {
17
19
  if (!date)
18
20
  return '';
@@ -76,8 +78,12 @@ async function showInstalledVersions(filterAgentId) {
76
78
  // home, so `agents view` would never reflect the right account. Regenerate on
77
79
  // sight — it's safe, idempotent, and fixes the symptom exactly where the user
78
80
  // notices it.
81
+ // Yield between agents so the heal loop doesn't block the event loop as one
82
+ // long sync burst — per-version readFileSync+writeFileSync across 5 agents
83
+ // can otherwise stall spinners and stdout flushes.
79
84
  const healedAliases = [];
80
85
  for (const agentId of agentsToShow) {
86
+ await new Promise((resolve) => setImmediate(resolve));
81
87
  for (const version of listInstalledVersions(agentId)) {
82
88
  const status = ensureVersionedAliasCurrent(agentId, version);
83
89
  if (status === 'updated' || status === 'created') {
@@ -85,10 +91,7 @@ async function showInstalledVersions(filterAgentId) {
85
91
  }
86
92
  }
87
93
  }
88
- if (healedAliases.length > 0) {
89
- console.log(chalk.gray(`Refreshed stale shims: ${healedAliases.join(', ')}`));
90
- console.log();
91
- }
94
+ // Shim healing is silent — users don't need to know about internal repairs
92
95
  console.log(chalk.bold('Installed Agent CLIs\n'));
93
96
  // Pre-fetch account info for all versions in parallel
94
97
  const infoFetches = [];
@@ -206,8 +209,10 @@ async function showInstalledVersions(filterAgentId) {
206
209
  const agent = AGENTS[agentId];
207
210
  const versions = listInstalledVersions(agentId);
208
211
  const globalDefault = getGlobalDefault(agentId);
212
+ const runStrategy = getConfiguredRunStrategy(agentId);
213
+ const strategyLabel = chalk.gray(` (${runStrategy})`);
209
214
  const noDefaultLabel = !globalDefault ? chalk.yellow(' (no default)') : '';
210
- console.log(` ${chalk.bold(agentLabel(agentId))}${noDefaultLabel}`);
215
+ console.log(` ${chalk.bold(agentLabel(agentId))}${strategyLabel}${noDefaultLabel}`);
211
216
  // Sort versions with default first, then by semver descending
212
217
  const sortedVersions = [...versions].sort((a, b) => {
213
218
  if (a === globalDefault)
@@ -399,11 +404,12 @@ async function showAgentResources(agentId, requestedVersion) {
399
404
  }
400
405
  const home = getVersionHomePath(agentId, version);
401
406
  // Get git sync status if ~/.agents/ is a git repo
402
- const hasGitRepo = isGitRepo(agentsDir);
403
- const commandsSync = hasGitRepo ? await getGitSyncStatus(agentsDir, 'commands') : null;
404
- const skillsSync = hasGitRepo ? await getGitSyncStatus(agentsDir, 'skills') : null;
405
- const hooksSync = hasGitRepo ? await getGitSyncStatus(agentsDir, 'hooks') : null;
406
- const memorySync = hasGitRepo ? await getGitSyncStatus(agentsDir, 'memory') : null;
407
+ const userAgentsDir = getUserAgentsDir();
408
+ const hasGitRepo = isGitRepo(userAgentsDir);
409
+ const commandsSync = hasGitRepo ? await getGitSyncStatus(userAgentsDir, 'commands') : null;
410
+ const skillsSync = hasGitRepo ? await getGitSyncStatus(userAgentsDir, 'skills') : null;
411
+ const hooksSync = hasGitRepo ? await getGitSyncStatus(userAgentsDir, 'hooks') : null;
412
+ const memorySync = hasGitRepo ? await getGitSyncStatus(userAgentsDir, 'rules') : null;
407
413
  // Helper to determine sync state for a resource
408
414
  const getSyncState = (resourceName, resourceType, syncStatus) => {
409
415
  if (!syncStatus)
@@ -419,9 +425,9 @@ async function showAgentResources(agentId, requestedVersion) {
419
425
  relativePath = `hooks/${resourceName}`;
420
426
  }
421
427
  else {
422
- // Memory files: map agent-specific name (CLAUDE.md) back to canonical (AGENTS.md)
428
+ // Rules files: map agent-specific name (CLAUDE.md) back to canonical (AGENTS.md)
423
429
  const centralName = getCentralMemoryFileName(agentId);
424
- relativePath = `memory/${centralName}`;
430
+ relativePath = `rules/${centralName}`;
425
431
  }
426
432
  const matchesPath = (f) => f === relativePath || f.startsWith(relativePath + '/');
427
433
  const isNew = syncStatus.new.some(matchesPath);
@@ -496,12 +502,14 @@ async function showAgentResources(agentId, requestedVersion) {
496
502
  let display = nameColor(r.name);
497
503
  if (r.ruleCount !== undefined)
498
504
  display += chalk.gray(` (${r.ruleCount} rules)`);
499
- if (r.scope === 'project') {
500
- display += chalk.gray(' [project]');
501
- }
505
+ // Source annotation: project overrides user, user overrides system
506
+ const sourceTag = r.scope === 'project' ? chalk.blue('[project]')
507
+ : r.scope === 'user' ? chalk.cyan('[user]')
508
+ : chalk.gray('[system]');
509
+ display += ` ${sourceTag}`;
502
510
  const pathStr = r.path ? chalk.gray(formatPath(r.path, cwd)) : '';
503
511
  const syncStr = r.syncState ? chalk.gray(` [${r.syncState}]`) : '';
504
- console.log(` ${display.padEnd(24)} ${pathStr}${syncStr}`);
512
+ console.log(` ${display.padEnd(38)} ${pathStr}${syncStr}`);
505
513
  }
506
514
  }
507
515
  // Render the single ~/.agents/promptcuts.yaml (cross-agent, not per-version).
@@ -566,12 +574,260 @@ async function showAgentResources(agentId, requestedVersion) {
566
574
  console.log(chalk.gray('Legend:'), chalk.green('Tracked'), chalk.blue('Local-only'), chalk.yellow('Modified'), chalk.red('Deleted'));
567
575
  }
568
576
  }
577
+ /**
578
+ * Collect structured info for one or more agents without rendering to the
579
+ * terminal. Used by `--json` output and any programmatic consumer (e.g. the
580
+ * agents-cli extension's "resume current session in best available version"
581
+ * command).
582
+ */
583
+ async function collectAgentsJson(filterAgentId) {
584
+ const agentsToShow = filterAgentId ? [filterAgentId] : ALL_AGENT_IDS;
585
+ const infoFetches = [];
586
+ for (const agentId of agentsToShow) {
587
+ for (const ver of listInstalledVersions(agentId)) {
588
+ const home = getVersionHomePath(agentId, ver);
589
+ infoFetches.push(getAccountInfo(agentId, home).then((info) => ({ agentId, version: ver, home, info })));
590
+ }
591
+ }
592
+ const infoResults = await Promise.all(infoFetches);
593
+ const { canonicalByUsageKey, usageByKey } = await getUsageInfoByIdentity(infoResults.map(({ agentId, home, version, info }) => ({
594
+ agentId,
595
+ home,
596
+ cliVersion: version,
597
+ info,
598
+ })));
599
+ const mergeCanonical = (info) => {
600
+ const key = getUsageLookupKey(info);
601
+ if (!key)
602
+ return info;
603
+ const canon = canonicalByUsageKey.get(key);
604
+ if (!canon)
605
+ return info;
606
+ return {
607
+ ...info,
608
+ plan: canon.plan,
609
+ usageStatus: canon.usageStatus,
610
+ overageCredits: canon.overageCredits,
611
+ };
612
+ };
613
+ const byAgent = new Map();
614
+ for (const { agentId, version, info: rawInfo } of infoResults) {
615
+ const info = mergeCanonical(rawInfo);
616
+ const globalDefault = getGlobalDefault(agentId);
617
+ const usageKey = getUsageLookupKey(info);
618
+ const usageInfo = usageKey ? usageByKey.get(usageKey) : undefined;
619
+ const snapshot = usageInfo?.snapshot ?? null;
620
+ const entry = {
621
+ version,
622
+ isDefault: version === globalDefault,
623
+ signedIn: !!info.email,
624
+ email: info.email,
625
+ plan: info.plan,
626
+ usageStatus: info.usageStatus,
627
+ windows: snapshot
628
+ ? snapshot.windows.map((w) => ({
629
+ key: w.key,
630
+ usedPercent: w.usedPercent,
631
+ resetsAt: w.resetsAt ? w.resetsAt.toISOString() : null,
632
+ }))
633
+ : [],
634
+ lastActive: info.lastActive ? info.lastActive.toISOString() : null,
635
+ path: getVersionDir(agentId, version),
636
+ };
637
+ const existing = byAgent.get(agentId);
638
+ if (existing)
639
+ existing.push(entry);
640
+ else
641
+ byAgent.set(agentId, [entry]);
642
+ }
643
+ const out = [];
644
+ for (const agentId of agentsToShow) {
645
+ const versions = byAgent.get(agentId) ?? [];
646
+ versions.sort((a, b) => {
647
+ if (a.isDefault !== b.isDefault)
648
+ return a.isDefault ? -1 : 1;
649
+ return compareVersions(b.version, a.version);
650
+ });
651
+ out.push({ agent: agentId, versions });
652
+ }
653
+ return out;
654
+ }
655
+ async function buildAgentPrunePlan(agentId) {
656
+ const entries = await Promise.all(listInstalledVersions(agentId).map(async (version) => {
657
+ const home = getVersionHomePath(agentId, version);
658
+ const info = await getAccountInfo(agentId, home);
659
+ return { version, info };
660
+ }));
661
+ const globalDefault = getGlobalDefault(agentId);
662
+ const byEmail = new Map();
663
+ for (const e of entries) {
664
+ if (!e.info.email)
665
+ continue;
666
+ const key = e.info.email.toLowerCase();
667
+ const list = byEmail.get(key) ?? [];
668
+ list.push(e);
669
+ byEmail.set(key, list);
670
+ }
671
+ const toPrune = [];
672
+ const skippedDefaults = [];
673
+ for (const [, group] of byEmail) {
674
+ if (group.length < 2)
675
+ continue;
676
+ const sorted = [...group].sort((a, b) => compareVersions(b.version, a.version));
677
+ const keeper = sorted[0].version;
678
+ for (const older of sorted.slice(1)) {
679
+ const plan = {
680
+ agentId,
681
+ version: older.version,
682
+ email: older.info.email,
683
+ keeper,
684
+ isDefault: older.version === globalDefault,
685
+ };
686
+ if (plan.isDefault)
687
+ skippedDefaults.push(plan);
688
+ else
689
+ toPrune.push(plan);
690
+ }
691
+ }
692
+ return { agentId, toPrune, skippedDefaults };
693
+ }
694
+ async function executePrunePlan(plan) {
695
+ let removed = 0;
696
+ for (const p of plan.toPrune) {
697
+ console.log(chalk.gray(`Removing ${agentLabel(p.agentId)}@${p.version}...`));
698
+ const ok = removeVersion(p.agentId, p.version);
699
+ if (ok) {
700
+ console.log(chalk.green(`Removed ${agentLabel(p.agentId)}@${p.version}`));
701
+ removed++;
702
+ }
703
+ else {
704
+ console.log(chalk.yellow(`Already gone: ${agentLabel(p.agentId)}@${p.version}`));
705
+ }
706
+ }
707
+ if (listInstalledVersions(plan.agentId).length === 0) {
708
+ removeShim(plan.agentId);
709
+ }
710
+ return removed;
711
+ }
712
+ function printPrunePlan(plan, isFirst) {
713
+ if (plan.skippedDefaults.length > 0) {
714
+ console.log(chalk.yellow(`Skipping default versions for ${agentLabel(plan.agentId)} (switch default first):`));
715
+ for (const s of plan.skippedDefaults) {
716
+ console.log(` ${agentLabel(s.agentId)}@${s.version} ${chalk.cyan(s.email)} ` +
717
+ chalk.gray(`— duplicate of ${s.agentId}@${s.keeper}. Run: agents use ${s.agentId}@${s.keeper}`));
718
+ }
719
+ console.log();
720
+ }
721
+ if (plan.toPrune.length === 0)
722
+ return;
723
+ const heading = isFirst ? `Will prune ${agentLabel(plan.agentId)}:` : `Also found duplicates for ${agentLabel(plan.agentId)}:`;
724
+ console.log(chalk.bold(heading));
725
+ for (const p of plan.toPrune) {
726
+ console.log(` ${agentLabel(p.agentId)}@${p.version} ${chalk.cyan(p.email)} ` +
727
+ chalk.gray(`— keeping ${p.agentId}@${p.keeper}`));
728
+ }
729
+ console.log();
730
+ }
731
+ /**
732
+ * Prune older installed versions that share an email with a newer installed
733
+ * version. Keeps the highest semver per email, skips the global default (with
734
+ * a warning so the user can switch first).
735
+ *
736
+ * When filterAgentId is set, prunes that agent first, then cascades: after
737
+ * each agent, offers the next agent with duplicates. User answering "no"
738
+ * stops the chain.
739
+ */
740
+ export async function pruneDuplicates(filterAgentId, yes, dryRun) {
741
+ const ordered = filterAgentId
742
+ ? [filterAgentId, ...ALL_AGENT_IDS.filter((a) => a !== filterAgentId)]
743
+ : [...ALL_AGENT_IDS];
744
+ const spinner = ora({ text: 'Scanning installed versions...', isSilent: !process.stdout.isTTY }).start();
745
+ const plans = await Promise.all(ordered.map((a) => buildAgentPrunePlan(a)));
746
+ spinner.stop();
747
+ const actionable = plans.filter((p) => p.toPrune.length > 0 || p.skippedDefaults.length > 0);
748
+ if (actionable.length === 0) {
749
+ console.log(chalk.gray('Nothing to prune — no older versions share an account with a newer version.'));
750
+ return;
751
+ }
752
+ const totalCandidates = actionable.reduce((n, plan) => n + plan.toPrune.length, 0);
753
+ let totalRemoved = 0;
754
+ let isFirst = true;
755
+ let processedAny = false;
756
+ for (const plan of actionable) {
757
+ printPrunePlan(plan, isFirst);
758
+ if (plan.toPrune.length === 0) {
759
+ // Only skippedDefaults for this agent; move on.
760
+ isFirst = false;
761
+ continue;
762
+ }
763
+ if (dryRun) {
764
+ processedAny = true;
765
+ isFirst = false;
766
+ continue;
767
+ }
768
+ if (!yes) {
769
+ if (!isInteractiveTerminal()) {
770
+ console.log(chalk.red('Refusing to prune in a non-interactive shell without --yes.'));
771
+ if (filterAgentId) {
772
+ console.log(chalk.gray(`Re-run with: agents prune ${filterAgentId} --dry-run`));
773
+ }
774
+ else {
775
+ console.log(chalk.gray('Re-run with: agents prune --dry-run'));
776
+ }
777
+ process.exit(1);
778
+ }
779
+ const n = plan.toPrune.length;
780
+ const message = isFirst
781
+ ? `Prune ${n} ${agentLabel(plan.agentId)} version${n === 1 ? '' : 's'}?`
782
+ : `Also prune ${n} ${agentLabel(plan.agentId)} version${n === 1 ? '' : 's'}?`;
783
+ let proceed = false;
784
+ try {
785
+ proceed = await confirm({ message, default: false });
786
+ }
787
+ catch (err) {
788
+ if (isPromptCancelled(err)) {
789
+ console.log(chalk.gray('Cancelled'));
790
+ break;
791
+ }
792
+ throw err;
793
+ }
794
+ if (!proceed) {
795
+ console.log(chalk.gray('Stopping here.'));
796
+ break;
797
+ }
798
+ }
799
+ totalRemoved += await executePrunePlan(plan);
800
+ processedAny = true;
801
+ isFirst = false;
802
+ console.log();
803
+ }
804
+ if (dryRun) {
805
+ console.log(chalk.gray(`${totalCandidates} version${totalCandidates === 1 ? '' : 's'} would be pruned. Run without --dry-run to delete.`));
806
+ return;
807
+ }
808
+ if (processedAny) {
809
+ console.log(chalk.bold(`Pruned ${totalRemoved} version${totalRemoved === 1 ? '' : 's'}.`));
810
+ }
811
+ }
569
812
  /**
570
813
  * Main view action handler.
571
814
  * Exported for use by deprecated aliases.
572
815
  */
573
- export async function viewAction(agentArg) {
816
+ export async function viewAction(agentArg, options) {
817
+ const json = options?.json === true;
818
+ const prune = options?.prune === true;
819
+ const yes = options?.yes === true;
820
+ const dryRun = options?.dryRun === true;
574
821
  if (!agentArg) {
822
+ if (prune) {
823
+ await pruneDuplicates(undefined, yes, dryRun);
824
+ return;
825
+ }
826
+ if (json) {
827
+ const data = await collectAgentsJson();
828
+ console.log(JSON.stringify(data, null, 2));
829
+ return;
830
+ }
575
831
  // No argument: show all installed versions
576
832
  await showInstalledVersions();
577
833
  return;
@@ -579,12 +835,32 @@ export async function viewAction(agentArg) {
579
835
  // Parse agent@version syntax
580
836
  const parts = agentArg.split('@');
581
837
  const agentName = parts[0];
582
- const requestedVersion = parts[1] || null;
583
838
  const agentId = resolveAgentName(agentName);
584
839
  if (!agentId) {
840
+ if (json) {
841
+ console.log(JSON.stringify({ error: formatAgentError(agentName) }));
842
+ process.exit(1);
843
+ }
585
844
  console.log(chalk.red(formatAgentError(agentName)));
586
845
  process.exit(1);
587
846
  }
847
+ const requestedVersion = resolveVersionAlias(agentId, parts[1]) ?? null;
848
+ if (prune) {
849
+ if (requestedVersion) {
850
+ console.log(chalk.red('--prune does not take a @version suffix.'));
851
+ console.log(chalk.gray(`Run: agents view ${agentId} --prune`));
852
+ process.exit(1);
853
+ }
854
+ await pruneDuplicates(agentId, yes, dryRun);
855
+ return;
856
+ }
857
+ if (json) {
858
+ // --json ignores the @version suffix (detailed resource view is not yet
859
+ // exposed as structured data). Emit the version list for the agent.
860
+ const data = await collectAgentsJson(agentId);
861
+ console.log(JSON.stringify(data[0] ?? { agent: agentId, versions: [] }, null, 2));
862
+ return;
863
+ }
588
864
  if (requestedVersion) {
589
865
  // Specific version requested: show detailed resources
590
866
  await showAgentResources(agentId, requestedVersion);
@@ -594,10 +870,15 @@ export async function viewAction(agentArg) {
594
870
  await showInstalledVersions(agentId);
595
871
  }
596
872
  }
873
+ /** Register the `agents view` command. */
597
874
  export function registerViewCommand(program) {
598
875
  program
599
876
  .command('view [agent]')
600
877
  .description('Show what agent CLIs are installed and which versions you have. Inspect resources when you pass agent@version.')
878
+ .option('--json', 'Emit machine-readable JSON (version list, usage, signed-in status).')
879
+ .option('--prune', 'Remove older installed versions that share an account with a newer installed version. Skips the global default.')
880
+ .option('--dry-run', 'With --prune, show duplicate versions without deleting')
881
+ .option('-y, --yes', 'Skip the prune confirmation prompt.')
601
882
  .addHelpText('after', `
602
883
  Examples:
603
884
  # Show all installed agents with versions, accounts, and usage
@@ -610,17 +891,29 @@ Examples:
610
891
  agents view claude@2.1.112
611
892
  agents view claude@default
612
893
 
894
+ # Machine-readable output (used by tools that pick a version programmatically)
895
+ agents view claude --json
896
+
897
+ # Prune older versions that duplicate an account already used by a newer version
898
+ agents view --prune --dry-run
899
+ agents view claude --prune
900
+ agents view claude --prune -y
901
+
613
902
  When to use:
614
903
  - Checking which agents are installed and what their default versions are
615
904
  - Seeing which account each version is logged into (useful for multi-account setups)
616
905
  - Inspecting commands, skills, hooks, and MCP servers synced to a version
617
906
  - Verifying a version is installed before running it
907
+ - Cleaning up stale versions left behind after upgrading (--prune)
618
908
 
619
909
  Output:
620
910
  - Without arguments: table of all agents with versions, emails, usage stats
621
911
  - With agent name: versions for that agent, showing which is the default
622
912
  - With agent@version: detailed breakdown of resources synced to that version
913
+ - With --json: structured JSON with version, isDefault, signedIn, email, plan,
914
+ usageStatus, per-window usedPercent, lastActive, and path
915
+ - With --prune: plan of which older versions will be removed, then confirm
916
+ - With --prune --dry-run: preview only, no deletions
623
917
  `)
624
- .action(viewAction);
918
+ .action((agentArg, options) => viewAction(agentArg, options));
625
919
  }
626
- //# sourceMappingURL=view.js.map
package/dist/index.d.ts CHANGED
@@ -1,3 +1,8 @@
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
  export {};
3
- //# sourceMappingURL=index.d.ts.map