@phnx-labs/agents-cli 1.12.0 → 1.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/README.md +308 -297
  3. package/dist/commands/alias.d.ts +11 -0
  4. package/dist/commands/alias.js +117 -0
  5. package/dist/commands/beta.d.ts +2 -0
  6. package/dist/commands/beta.js +53 -0
  7. package/dist/commands/cloud.d.ts +10 -0
  8. package/dist/commands/cloud.js +408 -0
  9. package/dist/commands/commands.d.ts +9 -1
  10. package/dist/commands/commands.js +24 -172
  11. package/dist/commands/daemon.d.ts +8 -1
  12. package/dist/commands/daemon.js +13 -5
  13. package/dist/commands/doctor.d.ts +15 -0
  14. package/dist/commands/doctor.js +132 -0
  15. package/dist/commands/drive.d.ts +8 -1
  16. package/dist/commands/drive.js +20 -3
  17. package/dist/commands/exec.d.ts +8 -1
  18. package/dist/commands/exec.js +207 -20
  19. package/dist/commands/factory.d.ts +19 -0
  20. package/dist/commands/factory.js +71 -0
  21. package/dist/commands/fork.d.ts +8 -1
  22. package/dist/commands/fork.js +11 -4
  23. package/dist/commands/hooks.d.ts +9 -1
  24. package/dist/commands/hooks.js +30 -182
  25. package/dist/commands/init.d.ts +15 -1
  26. package/dist/commands/init.js +168 -74
  27. package/dist/commands/mcp.d.ts +9 -1
  28. package/dist/commands/mcp.js +11 -7
  29. package/dist/commands/models.d.ts +8 -1
  30. package/dist/commands/models.js +45 -6
  31. package/dist/commands/packages.d.ts +8 -1
  32. package/dist/commands/packages.js +13 -7
  33. package/dist/commands/permissions.d.ts +9 -1
  34. package/dist/commands/permissions.js +3 -3
  35. package/dist/commands/plugins.d.ts +8 -1
  36. package/dist/commands/plugins.js +13 -2
  37. package/dist/commands/profiles.d.ts +11 -0
  38. package/dist/commands/profiles.js +291 -0
  39. package/dist/commands/prune.d.ts +22 -0
  40. package/dist/commands/prune.js +191 -0
  41. package/dist/commands/pty.d.ts +1 -1
  42. package/dist/commands/pty.js +2 -1
  43. package/dist/commands/pull.d.ts +8 -1
  44. package/dist/commands/pull.js +93 -129
  45. package/dist/commands/refresh-memory.d.ts +7 -1
  46. package/dist/commands/refresh-memory.js +7 -1
  47. package/dist/commands/repo.d.ts +15 -0
  48. package/dist/commands/repo.js +570 -0
  49. package/dist/commands/resource-view.d.ts +10 -3
  50. package/dist/commands/resource-view.js +18 -5
  51. package/dist/commands/routines.d.ts +8 -1
  52. package/dist/commands/routines.js +17 -4
  53. package/dist/commands/rules.d.ts +9 -1
  54. package/dist/commands/rules.js +16 -11
  55. package/dist/commands/secrets.d.ts +10 -0
  56. package/dist/commands/secrets.js +518 -0
  57. package/dist/commands/sessions-picker.d.ts +2 -1
  58. package/dist/commands/sessions-picker.js +88 -11
  59. package/dist/commands/sessions-tail.d.ts +19 -0
  60. package/dist/commands/sessions-tail.js +235 -0
  61. package/dist/commands/sessions.d.ts +2 -1
  62. package/dist/commands/sessions.js +288 -7
  63. package/dist/commands/skills.d.ts +9 -1
  64. package/dist/commands/skills.js +28 -178
  65. package/dist/commands/status.d.ts +7 -1
  66. package/dist/commands/status.js +7 -1
  67. package/dist/commands/subagents.d.ts +8 -1
  68. package/dist/commands/subagents.js +11 -1
  69. package/dist/commands/sync.d.ts +8 -1
  70. package/dist/commands/sync.js +8 -1
  71. package/dist/commands/teams-picker.d.ts +4 -1
  72. package/dist/commands/teams-picker.js +55 -3
  73. package/dist/commands/teams.d.ts +15 -1
  74. package/dist/commands/teams.js +323 -69
  75. package/dist/commands/usage.d.ts +11 -0
  76. package/dist/commands/usage.js +60 -0
  77. package/dist/commands/utils.d.ts +6 -1
  78. package/dist/commands/utils.js +6 -1
  79. package/dist/commands/versions.d.ts +8 -1
  80. package/dist/commands/versions.js +4 -3
  81. package/dist/commands/view.d.ts +47 -2
  82. package/dist/commands/view.js +353 -20
  83. package/dist/index.d.ts +7 -2
  84. package/dist/index.js +205 -38
  85. package/dist/lib/acp/client.d.ts +31 -0
  86. package/dist/lib/acp/client.js +117 -0
  87. package/dist/lib/acp/harnesses.d.ts +26 -0
  88. package/dist/lib/acp/harnesses.js +65 -0
  89. package/dist/lib/acp/run.d.ts +18 -0
  90. package/dist/lib/acp/run.js +39 -0
  91. package/dist/lib/agents.d.ts +74 -2
  92. package/dist/lib/agents.js +207 -23
  93. package/dist/lib/artifact-actions.d.ts +8 -4
  94. package/dist/lib/artifact-actions.js +8 -6
  95. package/dist/lib/auto-pull-worker.d.ts +11 -0
  96. package/dist/lib/auto-pull-worker.js +121 -0
  97. package/dist/lib/auto-pull.d.ts +31 -0
  98. package/dist/lib/auto-pull.js +97 -0
  99. package/dist/lib/beta.d.ts +23 -0
  100. package/dist/lib/beta.js +90 -0
  101. package/dist/lib/capabilities.d.ts +29 -0
  102. package/dist/lib/capabilities.js +74 -0
  103. package/dist/lib/cloud/codex.d.ts +25 -0
  104. package/dist/lib/cloud/codex.js +250 -0
  105. package/dist/lib/cloud/factory.d.ts +31 -0
  106. package/dist/lib/cloud/factory.js +53 -0
  107. package/dist/lib/cloud/registry.d.ts +15 -0
  108. package/dist/lib/cloud/registry.js +67 -0
  109. package/dist/lib/cloud/rush.d.ts +75 -0
  110. package/dist/lib/cloud/rush.js +438 -0
  111. package/dist/lib/cloud/store.d.ts +22 -0
  112. package/dist/lib/cloud/store.js +115 -0
  113. package/dist/lib/cloud/stream.d.ts +23 -0
  114. package/dist/lib/cloud/stream.js +194 -0
  115. package/dist/lib/cloud/types.d.ts +205 -0
  116. package/dist/lib/cloud/types.js +34 -0
  117. package/dist/lib/command-skills.d.ts +20 -0
  118. package/dist/lib/command-skills.js +142 -0
  119. package/dist/lib/commands.d.ts +22 -2
  120. package/dist/lib/commands.js +51 -11
  121. package/dist/lib/convert.d.ts +10 -1
  122. package/dist/lib/convert.js +9 -1
  123. package/dist/lib/daemon.d.ts +21 -1
  124. package/dist/lib/daemon.js +97 -4
  125. package/dist/lib/drive-sync.d.ts +18 -1
  126. package/dist/lib/drive-sync.js +57 -15
  127. package/dist/lib/exec.d.ts +25 -5
  128. package/dist/lib/exec.js +72 -27
  129. package/dist/lib/fs-walk.d.ts +2 -0
  130. package/dist/lib/fs-walk.js +40 -0
  131. package/dist/lib/fuzzy.d.ts +53 -0
  132. package/dist/lib/fuzzy.js +72 -0
  133. package/dist/lib/gemini-settings.d.ts +4 -0
  134. package/dist/lib/gemini-settings.js +33 -0
  135. package/dist/lib/git.d.ts +12 -2
  136. package/dist/lib/git.js +17 -6
  137. package/dist/lib/help.d.ts +20 -1
  138. package/dist/lib/help.js +45 -6
  139. package/dist/lib/hooks/match.d.ts +32 -0
  140. package/dist/lib/hooks/match.js +120 -0
  141. package/dist/lib/hooks.d.ts +17 -4
  142. package/dist/lib/hooks.js +191 -21
  143. package/dist/lib/manifest.d.ts +6 -1
  144. package/dist/lib/manifest.js +15 -4
  145. package/dist/lib/markdown.d.ts +0 -1
  146. package/dist/lib/markdown.js +6 -1
  147. package/dist/lib/mcp.d.ts +0 -1
  148. package/dist/lib/mcp.js +29 -33
  149. package/dist/lib/memory-compile.d.ts +13 -3
  150. package/dist/lib/memory-compile.js +31 -9
  151. package/dist/lib/memory.d.ts +14 -7
  152. package/dist/lib/memory.js +67 -38
  153. package/dist/lib/migrate.d.ts +8 -0
  154. package/dist/lib/migrate.js +85 -0
  155. package/dist/lib/models.d.ts +25 -11
  156. package/dist/lib/models.js +405 -16
  157. package/dist/lib/onepassword.d.ts +63 -0
  158. package/dist/lib/onepassword.js +186 -0
  159. package/dist/lib/paths.d.ts +8 -0
  160. package/dist/lib/paths.js +20 -0
  161. package/dist/lib/permissions.d.ts +24 -2
  162. package/dist/lib/permissions.js +117 -48
  163. package/dist/lib/picker.d.ts +10 -1
  164. package/dist/lib/picker.js +15 -1
  165. package/dist/lib/plugins.d.ts +7 -1
  166. package/dist/lib/plugins.js +10 -1
  167. package/dist/lib/profiles-presets.d.ts +24 -0
  168. package/dist/lib/profiles-presets.js +103 -0
  169. package/dist/lib/profiles.d.ts +69 -0
  170. package/dist/lib/profiles.js +144 -0
  171. package/dist/lib/pty-client.d.ts +1 -1
  172. package/dist/lib/pty-client.js +0 -1
  173. package/dist/lib/pty-server.d.ts +16 -2
  174. package/dist/lib/pty-server.js +92 -3
  175. package/dist/lib/registry.d.ts +23 -3
  176. package/dist/lib/registry.js +153 -8
  177. package/dist/lib/resources.d.ts +28 -1
  178. package/dist/lib/resources.js +79 -1
  179. package/dist/lib/rotate.d.ts +89 -0
  180. package/dist/lib/rotate.js +327 -0
  181. package/dist/lib/routines.d.ts +29 -1
  182. package/dist/lib/routines.js +32 -5
  183. package/dist/lib/runner.d.ts +14 -1
  184. package/dist/lib/runner.js +22 -3
  185. package/dist/lib/sandbox.d.ts +16 -1
  186. package/dist/lib/sandbox.js +39 -16
  187. package/dist/lib/scheduler.d.ts +8 -1
  188. package/dist/lib/scheduler.js +8 -1
  189. package/dist/lib/secrets/AgentsKeychain.app/Contents/CodeResources +0 -0
  190. package/dist/lib/secrets/AgentsKeychain.app/Contents/Info.plist +22 -0
  191. package/dist/lib/secrets/AgentsKeychain.app/Contents/MacOS/AgentsKeychain +0 -0
  192. package/dist/lib/secrets/AgentsKeychain.app/Contents/_CodeSignature/CodeResources +123 -0
  193. package/dist/lib/secrets/AgentsKeychain.app/Contents/embedded.provisionprofile +0 -0
  194. package/dist/lib/secrets/bundles.d.ts +39 -0
  195. package/dist/lib/secrets/bundles.js +189 -0
  196. package/dist/lib/secrets/index.d.ts +55 -0
  197. package/dist/lib/secrets/index.js +211 -0
  198. package/dist/lib/secrets/profiles.d.ts +10 -0
  199. package/dist/lib/secrets/profiles.js +13 -0
  200. package/dist/lib/session/active.d.ts +43 -0
  201. package/dist/lib/session/active.js +392 -0
  202. package/dist/lib/session/artifacts.d.ts +16 -0
  203. package/dist/lib/session/artifacts.js +95 -0
  204. package/dist/lib/session/cloud.d.ts +30 -0
  205. package/dist/lib/session/cloud.js +121 -0
  206. package/dist/lib/session/db.d.ts +23 -2
  207. package/dist/lib/session/db.js +76 -12
  208. package/dist/lib/session/discover.d.ts +19 -4
  209. package/dist/lib/session/discover.js +344 -48
  210. package/dist/lib/session/parse.d.ts +28 -1
  211. package/dist/lib/session/parse.js +267 -9
  212. package/dist/lib/session/prompt.d.ts +9 -1
  213. package/dist/lib/session/prompt.js +17 -3
  214. package/dist/lib/session/render.d.ts +13 -1
  215. package/dist/lib/session/render.js +20 -1
  216. package/dist/lib/session/team-filter.d.ts +9 -1
  217. package/dist/lib/session/team-filter.js +11 -2
  218. package/dist/lib/session/types.d.ts +24 -2
  219. package/dist/lib/session/types.js +10 -2
  220. package/dist/lib/shims.d.ts +93 -5
  221. package/dist/lib/shims.js +380 -67
  222. package/dist/lib/skills.d.ts +27 -2
  223. package/dist/lib/skills.js +127 -65
  224. package/dist/lib/sqlite.d.ts +43 -0
  225. package/dist/lib/sqlite.js +94 -0
  226. package/dist/lib/state.d.ts +114 -22
  227. package/dist/lib/state.js +323 -138
  228. package/dist/lib/subagents.d.ts +9 -1
  229. package/dist/lib/subagents.js +70 -63
  230. package/dist/lib/sync-manifest.d.ts +81 -0
  231. package/dist/lib/sync-manifest.js +450 -0
  232. package/dist/lib/teams/agents.d.ts +103 -5
  233. package/dist/lib/teams/agents.js +414 -91
  234. package/dist/lib/teams/api.d.ts +26 -3
  235. package/dist/lib/teams/api.js +63 -3
  236. package/dist/lib/teams/debug.d.ts +6 -1
  237. package/dist/lib/teams/debug.js +6 -1
  238. package/dist/lib/teams/file_ops.d.ts +7 -1
  239. package/dist/lib/teams/file_ops.js +7 -1
  240. package/dist/lib/teams/index.d.ts +15 -0
  241. package/dist/lib/teams/index.js +14 -0
  242. package/dist/lib/teams/parsers.d.ts +4 -1
  243. package/dist/lib/teams/parsers.js +11 -1
  244. package/dist/lib/teams/persistence.d.ts +15 -1
  245. package/dist/lib/teams/persistence.js +102 -20
  246. package/dist/lib/teams/registry.d.ts +12 -1
  247. package/dist/lib/teams/registry.js +116 -33
  248. package/dist/lib/teams/summarizer.d.ts +15 -1
  249. package/dist/lib/teams/summarizer.js +14 -1
  250. package/dist/lib/teams/supervisor.d.ts +48 -0
  251. package/dist/lib/teams/supervisor.js +73 -0
  252. package/dist/lib/template.d.ts +8 -6
  253. package/dist/lib/template.js +8 -6
  254. package/dist/lib/types.d.ts +147 -8
  255. package/dist/lib/types.js +26 -3
  256. package/dist/lib/usage.d.ts +48 -1
  257. package/dist/lib/usage.js +97 -16
  258. package/dist/lib/version-duplicates.d.ts +21 -0
  259. package/dist/lib/version-duplicates.js +90 -0
  260. package/dist/lib/versions.d.ts +39 -4
  261. package/dist/lib/versions.js +401 -111
  262. package/package.json +33 -18
  263. package/scripts/postinstall.js +126 -30
  264. package/dist/commands/__tests__/sessions.test.d.ts +0 -2
  265. package/dist/commands/__tests__/sessions.test.d.ts.map +0 -1
  266. package/dist/commands/__tests__/sessions.test.js +0 -636
  267. package/dist/commands/__tests__/sessions.test.js.map +0 -1
  268. package/dist/commands/commands.d.ts.map +0 -1
  269. package/dist/commands/commands.js.map +0 -1
  270. package/dist/commands/daemon.d.ts.map +0 -1
  271. package/dist/commands/daemon.js.map +0 -1
  272. package/dist/commands/drive.d.ts.map +0 -1
  273. package/dist/commands/drive.js.map +0 -1
  274. package/dist/commands/exec.d.ts.map +0 -1
  275. package/dist/commands/exec.js.map +0 -1
  276. package/dist/commands/fork.d.ts.map +0 -1
  277. package/dist/commands/fork.js.map +0 -1
  278. package/dist/commands/hooks.d.ts.map +0 -1
  279. package/dist/commands/hooks.js.map +0 -1
  280. package/dist/commands/init.d.ts.map +0 -1
  281. package/dist/commands/init.js.map +0 -1
  282. package/dist/commands/mcp.d.ts.map +0 -1
  283. package/dist/commands/mcp.js.map +0 -1
  284. package/dist/commands/models.d.ts.map +0 -1
  285. package/dist/commands/models.js.map +0 -1
  286. package/dist/commands/packages.d.ts.map +0 -1
  287. package/dist/commands/packages.js.map +0 -1
  288. package/dist/commands/permissions.d.ts.map +0 -1
  289. package/dist/commands/permissions.js.map +0 -1
  290. package/dist/commands/plugins.d.ts.map +0 -1
  291. package/dist/commands/plugins.js.map +0 -1
  292. package/dist/commands/pty.d.ts.map +0 -1
  293. package/dist/commands/pty.js.map +0 -1
  294. package/dist/commands/pull.d.ts.map +0 -1
  295. package/dist/commands/pull.js.map +0 -1
  296. package/dist/commands/push.d.ts +0 -3
  297. package/dist/commands/push.d.ts.map +0 -1
  298. package/dist/commands/push.js +0 -180
  299. package/dist/commands/push.js.map +0 -1
  300. package/dist/commands/refresh-memory.d.ts.map +0 -1
  301. package/dist/commands/refresh-memory.js.map +0 -1
  302. package/dist/commands/resource-view.d.ts.map +0 -1
  303. package/dist/commands/resource-view.js.map +0 -1
  304. package/dist/commands/routines.d.ts.map +0 -1
  305. package/dist/commands/routines.js.map +0 -1
  306. package/dist/commands/rules.d.ts.map +0 -1
  307. package/dist/commands/rules.js.map +0 -1
  308. package/dist/commands/sessions-picker.d.ts.map +0 -1
  309. package/dist/commands/sessions-picker.js.map +0 -1
  310. package/dist/commands/sessions.d.ts.map +0 -1
  311. package/dist/commands/sessions.js.map +0 -1
  312. package/dist/commands/skills.d.ts.map +0 -1
  313. package/dist/commands/skills.js.map +0 -1
  314. package/dist/commands/status.d.ts.map +0 -1
  315. package/dist/commands/status.js.map +0 -1
  316. package/dist/commands/subagents.d.ts.map +0 -1
  317. package/dist/commands/subagents.js.map +0 -1
  318. package/dist/commands/sync.d.ts.map +0 -1
  319. package/dist/commands/sync.js.map +0 -1
  320. package/dist/commands/teams-picker.d.ts.map +0 -1
  321. package/dist/commands/teams-picker.js.map +0 -1
  322. package/dist/commands/teams.d.ts.map +0 -1
  323. package/dist/commands/teams.js.map +0 -1
  324. package/dist/commands/utils.d.ts.map +0 -1
  325. package/dist/commands/utils.js.map +0 -1
  326. package/dist/commands/versions.d.ts.map +0 -1
  327. package/dist/commands/versions.js.map +0 -1
  328. package/dist/commands/view.d.ts.map +0 -1
  329. package/dist/commands/view.js.map +0 -1
  330. package/dist/index.d.ts.map +0 -1
  331. package/dist/index.js.map +0 -1
  332. package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
  333. package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
  334. package/dist/lib/__tests__/bugfixes.test.js +0 -192
  335. package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
  336. package/dist/lib/__tests__/exec.test.d.ts +0 -2
  337. package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
  338. package/dist/lib/__tests__/exec.test.js +0 -446
  339. package/dist/lib/__tests__/exec.test.js.map +0 -1
  340. package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
  341. package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
  342. package/dist/lib/__tests__/git-sync.test.js +0 -138
  343. package/dist/lib/__tests__/git-sync.test.js.map +0 -1
  344. package/dist/lib/__tests__/hooks.test.d.ts +0 -2
  345. package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
  346. package/dist/lib/__tests__/hooks.test.js +0 -203
  347. package/dist/lib/__tests__/hooks.test.js.map +0 -1
  348. package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
  349. package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
  350. package/dist/lib/__tests__/memory-compile.test.js +0 -95
  351. package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
  352. package/dist/lib/__tests__/models.test.d.ts +0 -2
  353. package/dist/lib/__tests__/models.test.d.ts.map +0 -1
  354. package/dist/lib/__tests__/models.test.js +0 -184
  355. package/dist/lib/__tests__/models.test.js.map +0 -1
  356. package/dist/lib/__tests__/usage.test.d.ts +0 -2
  357. package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
  358. package/dist/lib/__tests__/usage.test.js +0 -218
  359. package/dist/lib/__tests__/usage.test.js.map +0 -1
  360. package/dist/lib/agents.d.ts.map +0 -1
  361. package/dist/lib/agents.js.map +0 -1
  362. package/dist/lib/artifact-actions.d.ts.map +0 -1
  363. package/dist/lib/artifact-actions.js.map +0 -1
  364. package/dist/lib/commands.d.ts.map +0 -1
  365. package/dist/lib/commands.js.map +0 -1
  366. package/dist/lib/convert.d.ts.map +0 -1
  367. package/dist/lib/convert.js.map +0 -1
  368. package/dist/lib/daemon.d.ts.map +0 -1
  369. package/dist/lib/daemon.js.map +0 -1
  370. package/dist/lib/drive-sync.d.ts.map +0 -1
  371. package/dist/lib/drive-sync.js.map +0 -1
  372. package/dist/lib/exec.d.ts.map +0 -1
  373. package/dist/lib/exec.js.map +0 -1
  374. package/dist/lib/factory.d.ts +0 -57
  375. package/dist/lib/factory.d.ts.map +0 -1
  376. package/dist/lib/factory.js +0 -110
  377. package/dist/lib/factory.js.map +0 -1
  378. package/dist/lib/git.d.ts.map +0 -1
  379. package/dist/lib/git.js.map +0 -1
  380. package/dist/lib/help.d.ts.map +0 -1
  381. package/dist/lib/help.js.map +0 -1
  382. package/dist/lib/hooks.d.ts.map +0 -1
  383. package/dist/lib/hooks.js.map +0 -1
  384. package/dist/lib/manifest.d.ts.map +0 -1
  385. package/dist/lib/manifest.js.map +0 -1
  386. package/dist/lib/markdown.d.ts.map +0 -1
  387. package/dist/lib/markdown.js.map +0 -1
  388. package/dist/lib/mcp.d.ts.map +0 -1
  389. package/dist/lib/mcp.js.map +0 -1
  390. package/dist/lib/memory-compile.d.ts.map +0 -1
  391. package/dist/lib/memory-compile.js.map +0 -1
  392. package/dist/lib/memory.d.ts.map +0 -1
  393. package/dist/lib/memory.js.map +0 -1
  394. package/dist/lib/models.d.ts.map +0 -1
  395. package/dist/lib/models.js.map +0 -1
  396. package/dist/lib/permissions.d.ts.map +0 -1
  397. package/dist/lib/permissions.js.map +0 -1
  398. package/dist/lib/picker.d.ts.map +0 -1
  399. package/dist/lib/picker.js.map +0 -1
  400. package/dist/lib/plugins.d.ts.map +0 -1
  401. package/dist/lib/plugins.js.map +0 -1
  402. package/dist/lib/pty-client.d.ts.map +0 -1
  403. package/dist/lib/pty-client.js.map +0 -1
  404. package/dist/lib/pty-server.d.ts.map +0 -1
  405. package/dist/lib/pty-server.js.map +0 -1
  406. package/dist/lib/registry.d.ts.map +0 -1
  407. package/dist/lib/registry.js.map +0 -1
  408. package/dist/lib/resources.d.ts.map +0 -1
  409. package/dist/lib/resources.js.map +0 -1
  410. package/dist/lib/routines.d.ts.map +0 -1
  411. package/dist/lib/routines.js.map +0 -1
  412. package/dist/lib/runner.d.ts.map +0 -1
  413. package/dist/lib/runner.js.map +0 -1
  414. package/dist/lib/sandbox.d.ts.map +0 -1
  415. package/dist/lib/sandbox.js.map +0 -1
  416. package/dist/lib/scheduler.d.ts.map +0 -1
  417. package/dist/lib/scheduler.js.map +0 -1
  418. package/dist/lib/session/__tests__/db.test.d.ts +0 -2
  419. package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
  420. package/dist/lib/session/__tests__/db.test.js +0 -54
  421. package/dist/lib/session/__tests__/db.test.js.map +0 -1
  422. package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
  423. package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
  424. package/dist/lib/session/__tests__/discover.test.js +0 -63
  425. package/dist/lib/session/__tests__/discover.test.js.map +0 -1
  426. package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
  427. package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
  428. package/dist/lib/session/__tests__/prompt.test.js +0 -44
  429. package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
  430. package/dist/lib/session/__tests__/render.test.d.ts +0 -2
  431. package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
  432. package/dist/lib/session/__tests__/render.test.js +0 -602
  433. package/dist/lib/session/__tests__/render.test.js.map +0 -1
  434. package/dist/lib/session/db.d.ts.map +0 -1
  435. package/dist/lib/session/db.js.map +0 -1
  436. package/dist/lib/session/discover.d.ts.map +0 -1
  437. package/dist/lib/session/discover.js.map +0 -1
  438. package/dist/lib/session/parse.d.ts.map +0 -1
  439. package/dist/lib/session/parse.js.map +0 -1
  440. package/dist/lib/session/prompt.d.ts.map +0 -1
  441. package/dist/lib/session/prompt.js.map +0 -1
  442. package/dist/lib/session/prompt.test.d.ts +0 -2
  443. package/dist/lib/session/prompt.test.d.ts.map +0 -1
  444. package/dist/lib/session/prompt.test.js +0 -57
  445. package/dist/lib/session/prompt.test.js.map +0 -1
  446. package/dist/lib/session/render.d.ts.map +0 -1
  447. package/dist/lib/session/render.js.map +0 -1
  448. package/dist/lib/session/team-filter.d.ts.map +0 -1
  449. package/dist/lib/session/team-filter.js.map +0 -1
  450. package/dist/lib/session/team-filter.test.d.ts +0 -2
  451. package/dist/lib/session/team-filter.test.d.ts.map +0 -1
  452. package/dist/lib/session/team-filter.test.js +0 -157
  453. package/dist/lib/session/team-filter.test.js.map +0 -1
  454. package/dist/lib/session/types.d.ts.map +0 -1
  455. package/dist/lib/session/types.js.map +0 -1
  456. package/dist/lib/shims.d.ts.map +0 -1
  457. package/dist/lib/shims.js.map +0 -1
  458. package/dist/lib/skills.d.ts.map +0 -1
  459. package/dist/lib/skills.js.map +0 -1
  460. package/dist/lib/state.d.ts.map +0 -1
  461. package/dist/lib/state.js.map +0 -1
  462. package/dist/lib/subagents.d.ts.map +0 -1
  463. package/dist/lib/subagents.js.map +0 -1
  464. package/dist/lib/teams/agents.d.ts.map +0 -1
  465. package/dist/lib/teams/agents.js.map +0 -1
  466. package/dist/lib/teams/api.d.ts.map +0 -1
  467. package/dist/lib/teams/api.js.map +0 -1
  468. package/dist/lib/teams/cloud.d.ts +0 -11
  469. package/dist/lib/teams/cloud.d.ts.map +0 -1
  470. package/dist/lib/teams/cloud.js +0 -169
  471. package/dist/lib/teams/cloud.js.map +0 -1
  472. package/dist/lib/teams/debug.d.ts.map +0 -1
  473. package/dist/lib/teams/debug.js.map +0 -1
  474. package/dist/lib/teams/file_ops.d.ts.map +0 -1
  475. package/dist/lib/teams/file_ops.js.map +0 -1
  476. package/dist/lib/teams/parsers.d.ts.map +0 -1
  477. package/dist/lib/teams/parsers.js.map +0 -1
  478. package/dist/lib/teams/persistence.d.ts.map +0 -1
  479. package/dist/lib/teams/persistence.js.map +0 -1
  480. package/dist/lib/teams/ralph.d.ts +0 -8
  481. package/dist/lib/teams/ralph.d.ts.map +0 -1
  482. package/dist/lib/teams/ralph.js +0 -59
  483. package/dist/lib/teams/ralph.js.map +0 -1
  484. package/dist/lib/teams/registry.d.ts.map +0 -1
  485. package/dist/lib/teams/registry.js.map +0 -1
  486. package/dist/lib/teams/summarizer.d.ts.map +0 -1
  487. package/dist/lib/teams/summarizer.js.map +0 -1
  488. package/dist/lib/template.d.ts.map +0 -1
  489. package/dist/lib/template.js.map +0 -1
  490. package/dist/lib/types.d.ts.map +0 -1
  491. package/dist/lib/types.js.map +0 -1
  492. package/dist/lib/usage.d.ts.map +0 -1
  493. package/dist/lib/usage.js.map +0 -1
  494. package/dist/lib/versions.d.ts.map +0 -1
  495. package/dist/lib/versions.js.map +0 -1
  496. package/scripts/rebuild-sqlite.sh +0 -46
@@ -1,8 +1,38 @@
1
+ /**
2
+ * Model catalog inspection command.
3
+ *
4
+ * Registers the hidden `agents models` command for listing models
5
+ * supported by installed agent versions. Extracts model catalogs from
6
+ * each agent's CLI bundle and displays IDs, aliases, and metadata.
7
+ */
1
8
  import chalk from 'chalk';
9
+ import * as fs from 'fs';
2
10
  import { resolveAgentName, formatAgentError, agentLabel, } from '../lib/agents.js';
3
- import { listInstalledVersions, getGlobalDefault, resolveVersion } from '../lib/versions.js';
11
+ import { listInstalledVersions, getGlobalDefault, resolveVersion, resolveVersionAlias } from '../lib/versions.js';
4
12
  import { getModelCatalog, locateModelSource } from '../lib/models.js';
5
- const MODEL_CAPABLE_AGENTS = ['claude', 'codex'];
13
+ const MODEL_CAPABLE_AGENTS = ['claude', 'codex', 'gemini', 'opencode', 'cursor', 'openclaw'];
14
+ /**
15
+ * Agents that don't necessarily install under ~/.agents/versions (cursor ships
16
+ * via a curl script). For these, fall back to the PATH binary and synthesize
17
+ * a version label from the install path so cache keys stay stable.
18
+ */
19
+ const PATH_ONLY_AGENTS = new Set(['cursor']);
20
+ /** Derive a version label from the PATH-installed binary location for agents without managed versions. */
21
+ function fallbackPathVersion(agent) {
22
+ const src = locateModelSource(agent, 'unresolved');
23
+ if (!src)
24
+ return null;
25
+ let real = src.path;
26
+ try {
27
+ real = fs.realpathSync(src.path);
28
+ }
29
+ catch {
30
+ /* keep symlink path */
31
+ }
32
+ const m = real.match(/\/versions\/([^/]+)\//);
33
+ return m ? m[1] : 'installed';
34
+ }
35
+ /** Register the hidden `agents models` command. */
6
36
  export function registerModelsCommand(program) {
7
37
  program
8
38
  .command('models [agentSpec]', { hidden: true })
@@ -32,11 +62,15 @@ export function registerModelsCommand(program) {
32
62
  }
33
63
  });
34
64
  }
65
+ /** Resolve the agent spec into one or more (agent, version) pairs to inspect. */
35
66
  async function resolveTargets(agentSpec) {
36
67
  if (!agentSpec) {
37
68
  const targets = [];
38
69
  for (const agent of MODEL_CAPABLE_AGENTS) {
39
- const version = getGlobalDefault(agent) || (listInstalledVersions(agent)[0] ?? null);
70
+ let version = getGlobalDefault(agent) || (listInstalledVersions(agent)[0] ?? null);
71
+ if (!version && PATH_ONLY_AGENTS.has(agent)) {
72
+ version = fallbackPathVersion(agent);
73
+ }
40
74
  if (version)
41
75
  targets.push({ agent, version, isDefault: true });
42
76
  }
@@ -63,13 +97,18 @@ async function resolveTargets(agentSpec) {
63
97
  isDefault: v === getGlobalDefault(agent),
64
98
  }));
65
99
  }
66
- const version = versionSpec || resolveVersion(agent, process.cwd()) || getGlobalDefault(agent);
100
+ const aliasedVersion = resolveVersionAlias(agent, versionSpec);
101
+ let version = aliasedVersion || resolveVersion(agent, process.cwd()) || getGlobalDefault(agent);
102
+ if (!version && PATH_ONLY_AGENTS.has(agent)) {
103
+ version = fallbackPathVersion(agent);
104
+ }
67
105
  if (!version) {
68
106
  console.error(chalk.red(`No version of ${agent} is installed. Try \`agents add ${agent}@latest\`.`));
69
107
  return [];
70
108
  }
71
109
  return [{ agent, version, isDefault: version === getGlobalDefault(agent) }];
72
110
  }
111
+ /** Print the model catalog for a single agent version with optional cloud/reasoning details. */
73
112
  function printCatalog(agent, version, isDefault, options) {
74
113
  const tag = isDefault ? chalk.gray(' (default)') : '';
75
114
  const header = `${agentLabel(agent)} ${chalk.bold(version)}${tag}`;
@@ -77,7 +116,7 @@ function printCatalog(agent, version, isDefault, options) {
77
116
  const src = locateModelSource(agent, version);
78
117
  if (!src) {
79
118
  console.log(chalk.yellow(` Could not locate model source for ${agent}@${version}.`));
80
- console.log(chalk.gray(` Expected the agent's CLI bundle or native binary under ~/.agents/versions/${agent}/${version}/.`));
119
+ console.log(chalk.gray(` Expected the agent's CLI bundle or native binary under ~/.agents-system/versions/${agent}/${version}/.`));
81
120
  return;
82
121
  }
83
122
  const catalog = getModelCatalog(agent, version);
@@ -125,7 +164,7 @@ function printCatalog(agent, version, isDefault, options) {
125
164
  }
126
165
  }
127
166
  }
167
+ /** Abbreviate a path by replacing the home directory with ~. */
128
168
  function shortPath(p) {
129
169
  return p.replace(process.env.HOME || '~', '~');
130
170
  }
131
- //# sourceMappingURL=models.js.map
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Package registry and installation commands.
3
+ *
4
+ * Registers `agents registry`, `agents search`, and `agents install`
5
+ * for discovering and installing MCP servers, skills, commands, and
6
+ * hooks from configured registries or GitHub sources.
7
+ */
1
8
  import type { Command } from 'commander';
9
+ /** Register the `agents registry`, `agents search`, and `agents install` commands. */
2
10
  export declare function registerPackagesCommands(program: Command): void;
3
- //# sourceMappingURL=packages.d.ts.map
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Package registry and installation commands.
3
+ *
4
+ * Registers `agents registry`, `agents search`, and `agents install`
5
+ * for discovering and installing MCP servers, skills, commands, and
6
+ * hooks from configured registries or GitHub sources.
7
+ */
1
8
  import chalk from 'chalk';
2
9
  import ora from 'ora';
3
10
  import { AGENTS, ALL_AGENT_IDS, MCP_CAPABLE_AGENTS, getAllCliStates, registerMcpToTargets, agentLabel, } from '../lib/agents.js';
@@ -10,9 +17,11 @@ import { discoverHooksFromRepo, installHooks, installHooksCentrally, } from '../
10
17
  import { listInstalledVersions, resolveInstalledAgentTargets, resolveConfiguredAgentTargets, syncResourcesToVersion, } from '../lib/versions.js';
11
18
  import { isInteractiveTerminal, isPromptCancelled, requireDestructiveArg, requireInteractiveSelection, } from './utils.js';
12
19
  import { itemPicker } from '../lib/picker.js';
13
- // Picker fallback for `registry enable/config [name]`. Returns the picked
14
- // name, or null if the user cancels. In non-TTY shells, hard-fails with a
15
- // clear reminder of the positional form.
20
+ /**
21
+ * Picker fallback for `registry enable/config [name]`.
22
+ * Returns the picked name, or null if the user cancels. In non-TTY shells,
23
+ * hard-fails with a clear reminder of the positional form.
24
+ */
16
25
  async function pickRegistryName(type, verb, pred) {
17
26
  const registries = getRegistries(type);
18
27
  const entries = Object.entries(registries).filter(([, cfg]) => (pred ? pred(cfg) : true));
@@ -55,6 +64,7 @@ async function pickRegistryName(type, verb, pred) {
55
64
  throw err;
56
65
  }
57
66
  }
67
+ /** Register the `agents registry`, `agents search`, and `agents install` commands. */
58
68
  export function registerPackagesCommands(program) {
59
69
  // ==========================================================================
60
70
  // REGISTRY COMMANDS
@@ -265,9 +275,6 @@ When to use:
265
275
  spinner.stop();
266
276
  if (results.length === 0) {
267
277
  console.log(chalk.yellow('\nNo packages found.'));
268
- if (!options.type) {
269
- console.log(chalk.gray('\nTip: skill registries not yet available. Use gh:user/repo for skills.'));
270
- }
271
278
  return;
272
279
  }
273
280
  console.log(chalk.bold(`Found ${results.length} packages`));
@@ -538,4 +545,3 @@ When to use:
538
545
  }
539
546
  });
540
547
  }
541
- //# sourceMappingURL=packages.js.map
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Permission management commands for controlling agent access boundaries.
3
+ *
4
+ * Implements `agents permissions` -- list, add, remove, and view permission
5
+ * sets (allow/deny rules for bash, tools, and filesystem). Supports importing
6
+ * from agent config files, GitHub repos, and YAML, with merge/replace
7
+ * semantics and multi-version targeting.
8
+ */
1
9
  import type { Command } from 'commander';
10
+ /** Register the `agents permissions` command tree (list, add, remove, view). */
2
11
  export declare function registerPermissionsCommands(program: Command): void;
3
- //# sourceMappingURL=permissions.d.ts.map
@@ -7,9 +7,10 @@ import { confirm, checkbox } from '@inquirer/prompts';
7
7
  import { AGENTS, resolveAgentName, formatAgentError, agentLabel, } from '../lib/agents.js';
8
8
  import { cloneRepo } from '../lib/git.js';
9
9
  import { PERMISSIONS_CAPABLE_AGENTS, listInstalledPermissions, discoverPermissionsFromRepo, installPermissionSet, removePermissionSet, applyPermissionsToVersion, readAgentPermissions, exportPermissionsFromPath, getDefaultPermissionSet, computePermissionsDiff, mergePermissionSets, saveDefaultPermissionSet, } from '../lib/permissions.js';
10
- import { listInstalledVersions, getGlobalDefault, getVersionHomePath, promptAgentVersionSelection, resolveAgentVersionTargets, } from '../lib/versions.js';
10
+ import { listInstalledVersions, getGlobalDefault, getVersionHomePath, promptAgentVersionSelection, resolveAgentVersionTargets, resolveVersionAlias, } from '../lib/versions.js';
11
11
  import { recordVersionResources } from '../lib/state.js';
12
12
  import { isPromptCancelled, isInteractiveTerminal, parseCommaSeparatedList, printWithPager, requireInteractiveSelection, } from './utils.js';
13
+ /** Register the `agents permissions` command tree (list, add, remove, view). */
13
14
  export function registerPermissionsCommands(program) {
14
15
  const permissionsCmd = program
15
16
  .command('permissions')
@@ -106,12 +107,12 @@ When to use:
106
107
  // Parse agent@version syntax
107
108
  const parts = agentArg.split('@');
108
109
  const agentName = parts[0];
109
- const requestedVersion = parts[1] || null;
110
110
  const agentId = resolveAgentName(agentName);
111
111
  if (!agentId) {
112
112
  console.log(chalk.red(formatAgentError(agentName, PERMISSIONS_CAPABLE_AGENTS)));
113
113
  process.exit(1);
114
114
  }
115
+ const requestedVersion = resolveVersionAlias(agentId, parts[1]) ?? null;
115
116
  if (!PERMISSIONS_CAPABLE_AGENTS.includes(agentId)) {
116
117
  console.log(chalk.yellow(`${AGENTS[agentId].name} does not support fine-grained permissions`));
117
118
  return;
@@ -720,4 +721,3 @@ Examples:
720
721
  // Note: This needs to be registered at the program level, not as a subcommand
721
722
  // The actual deprecation message is shown in index.ts
722
723
  }
723
- //# sourceMappingURL=permissions.js.map
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Plugin management commands.
3
+ *
4
+ * Registers the `agents plugins` command tree for listing, viewing,
5
+ * syncing, and removing plugin bundles (skills + hooks + permissions)
6
+ * stored in ~/.agents/plugins/.
7
+ */
1
8
  import type { Command } from 'commander';
9
+ /** Register the `agents plugins` command tree. */
2
10
  export declare function registerPluginsCommands(program: Command): void;
3
- //# sourceMappingURL=plugins.d.ts.map
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Plugin management commands.
3
+ *
4
+ * Registers the `agents plugins` command tree for listing, viewing,
5
+ * syncing, and removing plugin bundles (skills + hooks + permissions)
6
+ * stored in ~/.agents/plugins/.
7
+ */
1
8
  import * as fs from 'fs';
2
9
  import * as path from 'path';
3
10
  import chalk from 'chalk';
@@ -9,6 +16,8 @@ import { isPromptCancelled, isInteractiveTerminal, requireDestructiveArg, requir
9
16
  import { itemPicker } from '../lib/picker.js';
10
17
  import { showResourceList, buildTargetsSection, } from './resource-view.js';
11
18
  import { getPluginsDir } from '../lib/state.js';
19
+ import { safeJoin } from '../lib/paths.js';
20
+ /** Replace the home directory prefix with ~ for display. */
12
21
  function formatPath(p) {
13
22
  const home = process.env.HOME || '';
14
23
  if (home && p.startsWith(home)) {
@@ -16,6 +25,7 @@ function formatPath(p) {
16
25
  }
17
26
  return p;
18
27
  }
28
+ /** Register the `agents plugins` command tree. */
19
29
  export function registerPluginsCommands(program) {
20
30
  const pluginsCmd = program
21
31
  .command('plugins')
@@ -257,7 +267,7 @@ Examples:
257
267
  }
258
268
  const name = nameArg;
259
269
  const pluginsDir = path.join(process.env.HOME || '', '.agents', 'plugins');
260
- const pluginRoot = path.join(pluginsDir, name);
270
+ const pluginRoot = safeJoin(pluginsDir, name);
261
271
  // Use discovered plugin when present; fall back to name+root if source is already gone
262
272
  const plugin = getPlugin(name);
263
273
  const resolvedRoot = plugin?.root || pluginRoot;
@@ -295,6 +305,7 @@ Examples:
295
305
  }
296
306
  });
297
307
  }
308
+ /** Convert discovered plugins into rows suitable for the resource list view. */
298
309
  function buildPluginRows(plugins) {
299
310
  const rows = [];
300
311
  // Cache version lists per agent once.
@@ -337,6 +348,7 @@ function buildPluginRows(plugins) {
337
348
  });
338
349
  return rows;
339
350
  }
351
+ /** Build the multi-line detail pane shown when a plugin is selected in the picker. */
340
352
  function formatPluginDetail(plugin, targets) {
341
353
  const lines = [];
342
354
  const title = plugin.manifest.version
@@ -379,4 +391,3 @@ function formatPluginDetail(plugin, targets) {
379
391
  }
380
392
  return lines.join('\n');
381
393
  }
382
- //# sourceMappingURL=plugins.js.map
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Profile management commands.
3
+ *
4
+ * Registers the `agents profiles` command tree for creating, viewing,
5
+ * and removing named bundles of (host CLI, endpoint, model, keychain auth).
6
+ * Profiles let users run non-default providers (Kimi, DeepSeek, Qwen, etc.)
7
+ * through a standard agent CLI with no local proxy.
8
+ */
9
+ import type { Command } from 'commander';
10
+ /** Register the `agents profiles` command tree. */
11
+ export declare function registerProfilesCommands(program: Command): void;
@@ -0,0 +1,291 @@
1
+ /**
2
+ * Profile management commands.
3
+ *
4
+ * Registers the `agents profiles` command tree for creating, viewing,
5
+ * and removing named bundles of (host CLI, endpoint, model, keychain auth).
6
+ * Profiles let users run non-default providers (Kimi, DeepSeek, Qwen, etc.)
7
+ * through a standard agent CLI with no local proxy.
8
+ */
9
+ import chalk from 'chalk';
10
+ import * as fs from 'fs';
11
+ import { listProfiles, readProfile, writeProfile, deleteProfile, profileExists, profileFromPreset, getPresetForProfile, } from '../lib/profiles.js';
12
+ import { getPreset, listPresets } from '../lib/profiles-presets.js';
13
+ import { hasKeychainToken, keychainItemName, setKeychainToken, deleteKeychainToken, } from '../lib/secrets/profiles.js';
14
+ import { isInteractiveTerminal } from './utils.js';
15
+ /** Prompt the user for a secret value with masked input. Requires an interactive TTY. */
16
+ async function promptForSecret(message) {
17
+ if (!isInteractiveTerminal()) {
18
+ throw new Error('A secret is required but the shell is not interactive. Pipe the key via stdin (--key-stdin).');
19
+ }
20
+ const { password } = await import('@inquirer/prompts');
21
+ return await password({ message, mask: true });
22
+ }
23
+ /** Read all available data from stdin synchronously, trimmed. */
24
+ function readStdinSync() {
25
+ const chunks = [];
26
+ const buf = Buffer.alloc(65536);
27
+ while (true) {
28
+ let bytesRead;
29
+ try {
30
+ bytesRead = fs.readSync(0, buf, 0, buf.length, null);
31
+ }
32
+ catch {
33
+ break;
34
+ }
35
+ if (bytesRead === 0)
36
+ break;
37
+ chunks.push(Buffer.from(buf.subarray(0, bytesRead)));
38
+ }
39
+ return Buffer.concat(chunks).toString('utf-8').trim();
40
+ }
41
+ /** Ensure a provider API key exists in keychain, prompting or reading stdin if missing. */
42
+ async function ensureProviderToken(provider, signupUrl, fromStdin) {
43
+ const item = keychainItemName(provider);
44
+ if (hasKeychainToken(item)) {
45
+ return;
46
+ }
47
+ let token;
48
+ if (fromStdin) {
49
+ token = readStdinSync();
50
+ if (!token) {
51
+ throw new Error('No key received on stdin.');
52
+ }
53
+ }
54
+ else {
55
+ const hint = signupUrl ? ` (get one at ${signupUrl})` : '';
56
+ token = await promptForSecret(`Enter API key for ${provider}${hint}`);
57
+ }
58
+ setKeychainToken(item, token);
59
+ console.log(chalk.green(`Stored in keychain: ${item}`));
60
+ }
61
+ /** Format a single profile as a table row for the `profiles list` output. */
62
+ function renderProfileRow(p) {
63
+ const host = p.host.version ? `${p.host.agent}@${p.host.version}` : p.host.agent;
64
+ const model = p.env.ANTHROPIC_MODEL || p.env.OPENAI_MODEL || p.env.GEMINI_MODEL || '-';
65
+ const provider = p.provider || (p.auth?.keychainItem?.split('.')[1]) || '-';
66
+ return `${chalk.cyan(p.name.padEnd(16))} ${host.padEnd(14)} ${provider.padEnd(12)} ${chalk.gray(model)}`;
67
+ }
68
+ /** Register the `agents profiles` command tree. */
69
+ export function registerProfilesCommands(program) {
70
+ const cmd = program
71
+ .command('profiles')
72
+ .description('Named bundles of (host CLI, endpoint, model, auth) — run Kimi/DeepSeek/Qwen/etc through Claude Code without a proxy.')
73
+ .addHelpText('after', `
74
+ A profile pins a host CLI (claude, codex, gemini, ...) to a non-default endpoint
75
+ and model, with a keychain-backed API key. Running 'agents run <profile>' spawns
76
+ the host CLI with the right env vars — no plaintext tokens, no local proxy.
77
+
78
+ Built-in presets (via OpenRouter, one shared key):
79
+ kimi Kimi K2.5 (top HumanEval, reasoning — interactive only)
80
+ kimi-chat Kimi K2 0905 (non-reasoning, print-safe)
81
+ minimax MiniMax M2.5 (top SWE-bench, reasoning)
82
+ glm GLM 5 (top Chatbot Arena among open-weight, reasoning)
83
+ qwen Qwen3 Coder Next (latest coding Qwen, print-safe)
84
+ deepseek DeepSeek Chat V3 (latest non-reasoning chat, print-safe)
85
+
86
+ Run 'agents profiles presets' for the full list with pricing and context sizes.
87
+
88
+ Typical flow:
89
+ agents profiles add kimi # prompts for OpenRouter key, stored in Keychain
90
+ agents run kimi "refactor this" # Claude Code UI, Kimi model responses
91
+ agents profiles add deepseek # reuses OpenRouter key, no re-prompt
92
+
93
+ Managing keys:
94
+ agents profiles login openrouter # rotate the key (shared across openrouter profiles)
95
+ agents profiles logout openrouter # remove from Keychain
96
+
97
+ Custom endpoints — drop a YAML file at ~/.agents/profiles/<name>.yml:
98
+ name: local-llama
99
+ host: { agent: claude }
100
+ env:
101
+ ANTHROPIC_BASE_URL: http://localhost:11434
102
+ ANTHROPIC_MODEL: llama-3.3-70b
103
+ auth:
104
+ envVar: ANTHROPIC_AUTH_TOKEN
105
+ keychainItem: agents-cli.ollama.token
106
+
107
+ Profiles store no secrets — safe to 'agents push' to a shared repo.
108
+
109
+ Examples:
110
+ # One-time: store the OpenRouter key (every preset reuses it)
111
+ agents profiles login openrouter
112
+
113
+ # Add Kimi (top HumanEval) and run it through the Claude Code UI
114
+ agents profiles add kimi
115
+ agents run kimi "refactor api/handlers/checkout.py to use async sqlalchemy"
116
+
117
+ # Add MiniMax for SWE-bench style fixes; reuses the same OpenRouter key
118
+ agents profiles add minimax
119
+ agents run minimax "investigate RUSH-2317 and patch the off-by-one in pagination"
120
+
121
+ # Add DeepSeek for cheap, fast non-reasoning work
122
+ agents profiles add deepseek
123
+ agents run deepseek "rename UserSession -> AuthSession across the codebase"
124
+
125
+ # See every profile and which provider it talks to
126
+ agents profiles list
127
+
128
+ # Browse the catalog (pricing, context sizes, reasoning vs print-safe)
129
+ agents profiles presets
130
+
131
+ # Rotate the OpenRouter key (every openrouter profile picks it up)
132
+ agents profiles login openrouter
133
+
134
+ # Drop a profile, keep the key in Keychain for the next one
135
+ agents profiles remove kimi
136
+
137
+ # Fully remove the OpenRouter key from Keychain
138
+ agents profiles logout openrouter
139
+ `);
140
+ cmd
141
+ .command('list')
142
+ .alias('ls')
143
+ .description('List configured profiles')
144
+ .action(() => {
145
+ const profiles = listProfiles();
146
+ if (profiles.length === 0) {
147
+ console.log(chalk.gray('No profiles configured.'));
148
+ console.log(chalk.gray('Try: agents profiles add kimi'));
149
+ console.log(chalk.gray(' agents profiles presets'));
150
+ return;
151
+ }
152
+ console.log(chalk.bold(`${'NAME'.padEnd(16)} ${'HOST'.padEnd(14)} ${'PROVIDER'.padEnd(12)} MODEL`));
153
+ for (const p of profiles) {
154
+ console.log(renderProfileRow(p));
155
+ }
156
+ });
157
+ cmd
158
+ .command('presets')
159
+ .description('List built-in presets (OpenRouter + direct providers)')
160
+ .action(() => {
161
+ const presets = listPresets();
162
+ console.log(chalk.bold(`${'NAME'.padEnd(14)} ${'PROVIDER'.padEnd(12)} DESCRIPTION`));
163
+ for (const p of presets) {
164
+ console.log(`${chalk.cyan(p.name.padEnd(14))} ${p.provider.padEnd(12)} ${chalk.gray(p.description)}`);
165
+ }
166
+ });
167
+ cmd
168
+ .command('view <name>')
169
+ .alias('show')
170
+ .description('Show a profile (env, host, auth source, preset link)')
171
+ .action((name) => {
172
+ try {
173
+ const p = readProfile(name);
174
+ console.log(chalk.bold(p.name));
175
+ if (p.description)
176
+ console.log(chalk.gray(p.description));
177
+ console.log();
178
+ console.log(chalk.bold('Host:'), p.host.agent + (p.host.version ? `@${p.host.version}` : ''));
179
+ if (p.provider)
180
+ console.log(chalk.bold('Provider:'), p.provider);
181
+ if (p.preset)
182
+ console.log(chalk.bold('Preset:'), p.preset);
183
+ console.log();
184
+ console.log(chalk.bold('Env:'));
185
+ for (const [k, v] of Object.entries(p.env)) {
186
+ console.log(` ${k}=${v}`);
187
+ }
188
+ if (p.auth) {
189
+ console.log();
190
+ console.log(chalk.bold('Auth:'));
191
+ const tokenStatus = hasKeychainToken(p.auth.keychainItem) ? chalk.green('stored') : chalk.red('missing');
192
+ console.log(` ${p.auth.envVar} <- keychain:${p.auth.keychainItem} (${tokenStatus})`);
193
+ }
194
+ const preset = getPresetForProfile(p);
195
+ if (preset?.signupUrl) {
196
+ console.log();
197
+ console.log(chalk.gray(`Sign up: ${preset.signupUrl}`));
198
+ }
199
+ }
200
+ catch (err) {
201
+ console.error(chalk.red(err.message));
202
+ process.exit(1);
203
+ }
204
+ });
205
+ cmd
206
+ .command('add <name>')
207
+ .description('Add a profile. If <name> matches a built-in preset, the preset is applied. Prompts for API key (once per provider).')
208
+ .option('--preset <preset>', 'Use a named preset (defaults to <name> if a preset by that name exists)')
209
+ .option('--version <version>', 'Pin the host CLI version (e.g., 2.1.113)')
210
+ .option('--key-stdin', 'Read API key from stdin instead of prompting (for scripts/CI)')
211
+ .option('--force', 'Overwrite an existing profile with the same name')
212
+ .action(async (name, opts) => {
213
+ try {
214
+ if (profileExists(name) && !opts.force) {
215
+ console.error(chalk.red(`Profile '${name}' already exists. Use --force to overwrite.`));
216
+ process.exit(1);
217
+ }
218
+ const presetName = opts.preset || name;
219
+ const preset = getPreset(presetName);
220
+ if (!preset) {
221
+ console.error(chalk.red(`No preset '${presetName}'.`));
222
+ console.error(chalk.gray('Available presets: ' + listPresets().map((p) => p.name).join(', ')));
223
+ console.error(chalk.gray('Or pass --preset <name> to pick explicitly.'));
224
+ process.exit(1);
225
+ }
226
+ await ensureProviderToken(preset.provider, preset.signupUrl, opts.keyStdin);
227
+ const profile = profileFromPreset(name, preset, opts.version);
228
+ writeProfile(profile);
229
+ console.log(chalk.green(`Profile '${name}' added.`));
230
+ console.log(chalk.gray(`Try: agents run ${name} "hello"`));
231
+ }
232
+ catch (err) {
233
+ console.error(chalk.red(err.message));
234
+ process.exit(1);
235
+ }
236
+ });
237
+ cmd
238
+ .command('remove <name>')
239
+ .alias('rm')
240
+ .description('Delete a profile (keychain token is kept — use `profiles logout <provider>` to remove)')
241
+ .action((name) => {
242
+ const existed = deleteProfile(name);
243
+ if (!existed) {
244
+ console.error(chalk.red(`Profile '${name}' not found.`));
245
+ process.exit(1);
246
+ }
247
+ console.log(chalk.green(`Profile '${name}' removed.`));
248
+ });
249
+ cmd
250
+ .command('login <provider>')
251
+ .description('Store or rotate the API key for a provider (e.g., openrouter). Shared across profiles using that provider.')
252
+ .option('--key-stdin', 'Read API key from stdin')
253
+ .action(async (provider, opts) => {
254
+ try {
255
+ const item = keychainItemName(provider);
256
+ let token;
257
+ if (opts.keyStdin) {
258
+ token = readStdinSync();
259
+ if (!token)
260
+ throw new Error('No key received on stdin.');
261
+ }
262
+ else {
263
+ token = await promptForSecret(`Enter API key for ${provider}`);
264
+ }
265
+ setKeychainToken(item, token);
266
+ console.log(chalk.green(`Stored in keychain: ${item}`));
267
+ }
268
+ catch (err) {
269
+ console.error(chalk.red(err.message));
270
+ process.exit(1);
271
+ }
272
+ });
273
+ cmd
274
+ .command('logout <provider>')
275
+ .description('Remove a stored provider key from keychain')
276
+ .action((provider) => {
277
+ try {
278
+ const item = keychainItemName(provider);
279
+ const existed = deleteKeychainToken(item);
280
+ if (!existed) {
281
+ console.error(chalk.yellow(`No keychain item '${item}' to remove.`));
282
+ process.exit(1);
283
+ }
284
+ console.log(chalk.green(`Removed keychain item: ${item}`));
285
+ }
286
+ catch (err) {
287
+ console.error(chalk.red(err.message));
288
+ process.exit(1);
289
+ }
290
+ });
291
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Top-level `agents prune` — destructive cleanup across the install.
3
+ *
4
+ * Two kinds of cleanup, one verb:
5
+ * - Resource orphans: command/skill/hook files inside a version home that no
6
+ * longer come from any source (deleted from ~/.agents/ but never reconciled
7
+ * into the version install).
8
+ * - Version duplicates: older installed versions of an agent that share an
9
+ * account with a newer installed version of the same agent (the older copy
10
+ * is redundant; the newer one is what's signed in and active).
11
+ *
12
+ * Sync (additive: copy missing/changed files into version homes) is no longer
13
+ * a user-facing verb — `syncResourcesToVersion` runs at agent launch and
14
+ * applies adds/updates automatically. Pruning, however, is destructive, so it
15
+ * stays explicit.
16
+ *
17
+ * Default scope: each agent's currently-pinned default version for orphan
18
+ * cleanup, plus the standard cross-agent version-dedup pass. Pass `--all`
19
+ * to widen orphan cleanup to every installed version.
20
+ */
21
+ import type { Command } from 'commander';
22
+ export declare function registerPruneCommand(program: Command): void;