@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
+ * Deprecated daemon commands.
3
+ *
4
+ * Registers the hidden `agents daemon` command tree as backward-compatible
5
+ * aliases for `agents routines` scheduler lifecycle commands. Scheduled
6
+ * for removal in v2.0.
7
+ */
1
8
  import type { Command } from 'commander';
9
+ /** Register the deprecated `agents daemon` command tree. */
2
10
  export declare function registerDaemonCommands(program: Command): void;
3
- //# sourceMappingURL=daemon.d.ts.map
@@ -1,11 +1,21 @@
1
+ /**
2
+ * Deprecated daemon commands.
3
+ *
4
+ * Registers the hidden `agents daemon` command tree as backward-compatible
5
+ * aliases for `agents routines` scheduler lifecycle commands. Scheduled
6
+ * for removal in v2.0.
7
+ */
8
+ import { spawn } from 'child_process';
1
9
  import chalk from 'chalk';
2
10
  import * as path from 'path';
3
11
  import { startDaemon, stopDaemon, isDaemonRunning, readDaemonPid, readDaemonLog, runDaemon, } from '../lib/daemon.js';
4
12
  import { listJobs as listAllJobs } from '../lib/routines.js';
5
13
  import { JobScheduler } from '../lib/scheduler.js';
14
+ /** Print a deprecation warning pointing to the replacement command. */
6
15
  function warnDeprecated(subcommand, replacement) {
7
16
  console.log(chalk.yellow(`\u26a0 'agents daemon ${subcommand}' is deprecated and will be removed in v2.0. Use '${replacement}' instead.\n`));
8
17
  }
18
+ /** Register the deprecated `agents daemon` command tree. */
9
19
  export function registerDaemonCommands(program) {
10
20
  const daemonCmd = program
11
21
  .command('daemon', { hidden: true })
@@ -81,12 +91,11 @@ you never need to start it manually.
81
91
  .action(async (options) => {
82
92
  warnDeprecated('logs', 'agents routines scheduler-logs');
83
93
  if (options.follow) {
84
- const { exec: execCb } = await import('child_process');
85
94
  const { getAgentsDir } = await import('../lib/state.js');
86
95
  const logPath = path.join(getAgentsDir(), 'daemon.log');
87
- const child = execCb(`tail -f "${logPath}"`);
88
- child.stdout?.pipe(process.stdout);
89
- child.stderr?.pipe(process.stderr);
96
+ const child = spawn('tail', ['-f', logPath], { stdio: ['ignore', 'pipe', 'pipe'] });
97
+ child.stdout.pipe(process.stdout);
98
+ child.stderr.pipe(process.stderr);
90
99
  child.on('exit', () => process.exit(0));
91
100
  process.on('SIGINT', () => { child.kill(); process.exit(0); });
92
101
  return;
@@ -107,4 +116,3 @@ you never need to start it manually.
107
116
  await runDaemon();
108
117
  });
109
118
  }
110
- //# sourceMappingURL=daemon.js.map
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `agents doctor` — diagnostic readout across the install.
3
+ *
4
+ * Three sections:
5
+ * 1. CLI availability — which agent binaries can be invoked.
6
+ * 2. Sync status — per (agent, default-version), is the version-home sync
7
+ * manifest fresh? (sync runs at launch; this surfaces what would happen.)
8
+ * 3. Orphans — per resource type per default version, count of files that
9
+ * would be removed by `agents prune`.
10
+ *
11
+ * Read-only: doctor never mutates state. Run `agents prune` to act on the
12
+ * orphan readout, or just launch the agent to apply pending sync.
13
+ */
14
+ import type { Command } from 'commander';
15
+ export declare function registerDoctorCommand(program: Command): void;
@@ -0,0 +1,132 @@
1
+ import chalk from 'chalk';
2
+ import { checkAllClis } from '../lib/teams/agents.js';
3
+ import { AGENTS, ALL_AGENT_IDS } from '../lib/agents.js';
4
+ import { getAvailableResources, getGlobalDefault, } from '../lib/versions.js';
5
+ import { loadSyncManifest, isSyncStale } from '../lib/sync-manifest.js';
6
+ import { diffVersionCommands, iterCommandsCapableVersions } from '../lib/commands.js';
7
+ import { diffVersionSkills, iterSkillsCapableVersions } from '../lib/skills.js';
8
+ import { diffVersionHooks, iterHooksCapableVersions } from '../lib/hooks.js';
9
+ const AGENT_NAMES = Object.fromEntries(ALL_AGENT_IDS.map((id) => [id, AGENTS[id].name]));
10
+ function checkSyncStatus(cwd) {
11
+ const rows = [];
12
+ for (const agent of ALL_AGENT_IDS) {
13
+ const version = getGlobalDefault(agent);
14
+ if (!version)
15
+ continue;
16
+ const manifest = loadSyncManifest(agent, version);
17
+ if (!manifest) {
18
+ rows.push({ agent, version, status: 'never-synced' });
19
+ continue;
20
+ }
21
+ const available = getAvailableResources(cwd);
22
+ const stale = isSyncStale(manifest, available, agent, version, cwd);
23
+ rows.push({ agent, version, status: stale ? 'stale' : 'fresh' });
24
+ }
25
+ return rows;
26
+ }
27
+ function countOrphans() {
28
+ const byKey = new Map();
29
+ const ensure = (agent, version) => {
30
+ const key = `${agent}@${version}`;
31
+ let row = byKey.get(key);
32
+ if (!row) {
33
+ row = { agent, version, commands: 0, skills: 0, hooks: 0 };
34
+ byKey.set(key, row);
35
+ }
36
+ return row;
37
+ };
38
+ for (const { agent, version } of iterCommandsCapableVersions()) {
39
+ if (version !== getGlobalDefault(agent))
40
+ continue;
41
+ const diff = diffVersionCommands(agent, version);
42
+ if (diff.orphans.length > 0)
43
+ ensure(agent, version).commands = diff.orphans.length;
44
+ }
45
+ for (const { agent, version } of iterSkillsCapableVersions()) {
46
+ if (version !== getGlobalDefault(agent))
47
+ continue;
48
+ const diff = diffVersionSkills(agent, version);
49
+ if (diff.orphans.length > 0)
50
+ ensure(agent, version).skills = diff.orphans.length;
51
+ }
52
+ for (const { agent, version } of iterHooksCapableVersions()) {
53
+ if (version !== getGlobalDefault(agent))
54
+ continue;
55
+ const diff = diffVersionHooks(agent, version);
56
+ if (diff.orphans.length > 0)
57
+ ensure(agent, version).hooks = diff.orphans.length;
58
+ }
59
+ return Array.from(byKey.values()).filter((r) => r.commands + r.skills + r.hooks > 0);
60
+ }
61
+ function renderText(clis, syncRows, orphanRows) {
62
+ console.log(chalk.bold('Agent CLIs'));
63
+ if (Object.keys(clis).length === 0) {
64
+ console.log(chalk.gray(' (no agents reported)'));
65
+ }
66
+ else {
67
+ for (const [name, entry] of Object.entries(clis)) {
68
+ const pretty = AGENT_NAMES[name] || name;
69
+ if (entry.installed) {
70
+ console.log(` ${chalk.green('ready')} ${pretty.padEnd(10)} ${chalk.gray(entry.path || '')}`);
71
+ }
72
+ else {
73
+ console.log(` ${chalk.red('no ')} ${pretty.padEnd(10)} ${chalk.gray(entry.error || 'not installed')}`);
74
+ }
75
+ }
76
+ }
77
+ console.log();
78
+ console.log(chalk.bold('Sync status (default versions)'));
79
+ if (syncRows.length === 0) {
80
+ console.log(chalk.gray(' (no default versions set; pin one with `agents use <agent>@<version>`)'));
81
+ }
82
+ else {
83
+ for (const row of syncRows) {
84
+ const label = `${AGENT_NAMES[row.agent] || row.agent}@${row.version}`;
85
+ if (row.status === 'fresh') {
86
+ console.log(` ${chalk.green('fresh')} ${label}`);
87
+ }
88
+ else if (row.status === 'stale') {
89
+ console.log(` ${chalk.yellow('stale')} ${label} ${chalk.gray('— will sync on next launch')}`);
90
+ }
91
+ else {
92
+ console.log(` ${chalk.gray('cold ')} ${label} ${chalk.gray('— never synced; first launch will populate')}`);
93
+ }
94
+ }
95
+ }
96
+ console.log();
97
+ console.log(chalk.bold('Orphans (default versions)'));
98
+ if (orphanRows.length === 0) {
99
+ console.log(chalk.gray(' (none — version homes match central sources)'));
100
+ }
101
+ else {
102
+ for (const row of orphanRows) {
103
+ const parts = [];
104
+ if (row.commands > 0)
105
+ parts.push(`${row.commands} command${row.commands === 1 ? '' : 's'}`);
106
+ if (row.skills > 0)
107
+ parts.push(`${row.skills} skill${row.skills === 1 ? '' : 's'}`);
108
+ if (row.hooks > 0)
109
+ parts.push(`${row.hooks} hook${row.hooks === 1 ? '' : 's'}`);
110
+ const label = `${AGENT_NAMES[row.agent] || row.agent}@${row.version}`;
111
+ console.log(` ${chalk.yellow('warn ')} ${label} ${chalk.gray(parts.join(', '))}`);
112
+ }
113
+ console.log(chalk.gray(' Run `agents prune` to remove.'));
114
+ }
115
+ }
116
+ export function registerDoctorCommand(program) {
117
+ program
118
+ .command('doctor')
119
+ .description('Diagnose CLI availability, sync status, and orphan resources')
120
+ .option('--json', 'Output machine-readable JSON')
121
+ .action((opts) => {
122
+ const cwd = process.cwd();
123
+ const clis = checkAllClis();
124
+ const syncRows = checkSyncStatus(cwd);
125
+ const orphanRows = countOrphans();
126
+ if (opts.json) {
127
+ console.log(JSON.stringify({ clis, sync: syncRows, orphans: orphanRows }, null, 2));
128
+ return;
129
+ }
130
+ renderText(clis, syncRows, orphanRows);
131
+ });
132
+ }
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Drive sync commands.
3
+ *
4
+ * Registers the `agents drive` command tree for syncing agent session
5
+ * history across machines via rsync. Supports pull, push, attach
6
+ * (redirect agent homes to drive), and detach operations.
7
+ */
1
8
  import type { Command } from 'commander';
9
+ /** Register the `agents drive` command tree. */
2
10
  export declare function registerDriveCommands(program: Command): void;
3
- //# sourceMappingURL=drive.d.ts.map
@@ -1,9 +1,19 @@
1
+ /**
2
+ * Drive sync commands.
3
+ *
4
+ * Registers the `agents drive` command tree for syncing agent session
5
+ * history across machines via rsync. Supports pull, push, attach
6
+ * (redirect agent homes to drive), and detach operations.
7
+ */
1
8
  import chalk from 'chalk';
2
9
  import ora from 'ora';
10
+ import { betaEnableHint, isBetaEnabled } from '../lib/beta.js';
3
11
  import { setRemote, pull, push, attach, detach, getDriveStatus, } from '../lib/drive-sync.js';
12
+ /** Register the `agents drive` command tree. */
4
13
  export function registerDriveCommands(program) {
14
+ const enabled = isBetaEnabled('drive');
5
15
  const driveCmd = program
6
- .command('drive')
16
+ .command('drive', { hidden: !enabled })
7
17
  .description('Sync agent session history across machines via rsync. Set up once, then pull/push to keep sessions in sync.')
8
18
  .addHelpText('after', `
9
19
  Typical workflow:
@@ -24,13 +34,20 @@ Typical workflow:
24
34
  Use case: Keep session history consistent across your laptop and desktop,
25
35
  or back up sessions to a server you control.
26
36
  `);
37
+ driveCmd.hook('preAction', () => {
38
+ if (enabled)
39
+ return;
40
+ console.error(chalk.red('agents drive is in beta.'));
41
+ console.error(chalk.gray(betaEnableHint('drive')));
42
+ process.exit(1);
43
+ });
27
44
  driveCmd
28
45
  .command('remote <target>')
29
46
  .description('Set the rsync remote target (e.g., user@hostname). Sessions sync to <target>:~/.agents/drive/')
30
47
  .addHelpText('after', `
31
48
  Examples:
32
49
  # Set remote to a server
33
- agents drive remote muqsit@spark
50
+ agents drive remote user@server
34
51
 
35
52
  # Set remote to a local machine on your network
36
53
  agents drive remote macbook.local
@@ -146,6 +163,7 @@ Example:
146
163
  }
147
164
  });
148
165
  }
166
+ /** Format an ISO timestamp as a human-readable relative time (e.g. "5 min ago"). */
149
167
  function formatTime(iso) {
150
168
  const d = new Date(iso);
151
169
  const now = Date.now();
@@ -163,4 +181,3 @@ function formatTime(iso) {
163
181
  const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
164
182
  return `${months[d.getMonth()]} ${d.getDate()}`;
165
183
  }
166
- //# sourceMappingURL=drive.js.map
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Agent execution command.
3
+ *
4
+ * Registers the `agents run` command which spawns agent CLIs interactively
5
+ * or headlessly. Supports profile resolution, version rotation, secrets
6
+ * injection, and multi-agent fallback chains for rate-limit resilience.
7
+ */
1
8
  import type { Command } from 'commander';
9
+ /** Register the `agents run <agent> [prompt]` command. */
2
10
  export declare function registerRunCommand(program: Command): void;
3
- //# sourceMappingURL=exec.d.ts.map
@@ -1,18 +1,29 @@
1
+ /**
2
+ * Agent execution command.
3
+ *
4
+ * Registers the `agents run` command which spawns agent CLIs interactively
5
+ * or headlessly. Supports profile resolution, version rotation, secrets
6
+ * injection, and multi-agent fallback chains for rate-limit resilience.
7
+ */
1
8
  import chalk from 'chalk';
2
9
  import { buildExecCommand, parseExecEnv, execAgent, runWithFallback, AGENT_COMMANDS, } from '../lib/exec.js';
3
10
  import { profileExists, resolveProfileForRun } from '../lib/profiles.js';
4
- import { readBundle, resolveBundleEnv } from '../lib/secrets-bundles.js';
5
- import { resolveRunVersion } from '../lib/rotate.js';
11
+ import { readBundle, resolveBundleEnv } from '../lib/secrets/bundles.js';
12
+ import { getConfiguredRunStrategy, normalizeRunStrategy, resolveRunVersion, RUN_STRATEGIES, } from '../lib/rotate.js';
13
+ import { resolveVersionAlias } from '../lib/versions.js';
6
14
  const VALID_AGENTS = Object.keys(AGENT_COMMANDS);
15
+ /** Type guard that narrows a string to a known AgentId. */
7
16
  function isValidAgent(agent) {
8
17
  return VALID_AGENTS.includes(agent);
9
18
  }
19
+ /** Build a one-line banner describing which version the rotation picked. */
10
20
  function formatRotationBanner(result) {
11
21
  const { picked, healthy, excluded } = result;
12
22
  const label = picked.email ? `${picked.email} · ${picked.agent}@${picked.version}` : `${picked.agent}@${picked.version}`;
13
23
  const ratio = `${healthy.length} of ${healthy.length + excluded.length} healthy`;
14
24
  return `[agents] rotation picked ${label} (${ratio})`;
15
25
  }
26
+ /** Register the `agents run <agent> [prompt]` command. */
16
27
  export function registerRunCommand(program) {
17
28
  program
18
29
  .command('run <agent> [prompt]')
@@ -26,20 +37,27 @@ export function registerRunCommand(program) {
26
37
  .option('--add-dir <dir>', 'Grant access to an additional directory outside the project (Claude only, repeatable)', (val, prev) => [...prev, val], [])
27
38
  .option('--json', 'Stream events as JSON lines (for parsing by other tools)')
28
39
  .option('--headless', 'Non-interactive mode (default for run)', true)
40
+ .option('-i, --interactive', 'Force interactive mode even when a prompt is provided')
29
41
  .option('--session-id <id>', 'Resume a previous conversation (Claude only)')
30
42
  .option('--verbose', 'Show detailed execution logs')
31
43
  .option('--timeout <duration>', 'Kill the agent after this duration (e.g., 30m, 1h, 2h30m)')
32
44
  .option('--fallback <agents>', 'Comma-separated agents to try on rate-limit failure. Each entry accepts an optional @version pin (e.g., codex@0.116.0,gemini). The primary runs first; if it exits with a rate-limit error, the next agent picks up via /continue handoff.')
33
- .option('-r, --rotate', 'Rotate across installed versions of the agent. Picks the signed-in, not-out-of-credits account with the oldest last-active timestamp. Ignored when @version is pinned.')
45
+ .option('-r, --rotate', 'Shortcut for --strategy rotate. Ignored when @version is pinned.')
46
+ .option('--strategy <strategy>', 'Version/account selection strategy: pinned | available | rotate. Defaults to run.<agent>.strategy, then pinned.')
47
+ .option('--acp', 'Route through the Agent Client Protocol instead of direct exec. Supported for gemini, claude (via @zed-industries/claude-code-acp adapter). Unified event stream; emits ndjson when --json.')
34
48
  .addHelpText('after', `
35
49
  Modes:
36
50
  With a prompt -> headless (pipes output, no TTY, exits when the agent finishes).
37
51
  Without a prompt -> interactive (launches the agent's TUI; stdio is fully inherited).
38
52
 
39
- Version rotation (opt-in with --rotate):
40
- Picks across installed versions using the account data 'agents view' already
41
- shows: signed-in only, skip out-of-credits, least-recently-active wins. Useful
42
- when you have multiple accounts of the same CLI and want to spread usage.
53
+ Run strategy:
54
+ pinned Use the workspace/global pinned version from agents.yaml.
55
+ available Use the pinned version if it has usage available; otherwise switch
56
+ to another signed-in version with usage available.
57
+ rotate Pick the signed-in account with usage available and the most
58
+ headroom; last-active breaks ties.
59
+ Configure with run.<agent>.strategy in agents.yaml, or override with
60
+ --strategy. --rotate is kept as a shortcut for --strategy rotate.
43
61
  Ignored when @version is pinned, when a profile is used, or with --fallback.
44
62
 
45
63
  Examples:
@@ -47,10 +65,10 @@ Examples:
47
65
  agents run claude
48
66
 
49
67
  # Interactive, rotate to the least-used healthy account
50
- agents run claude --rotate
68
+ agents run claude --strategy rotate
51
69
 
52
- # Headless, rotate per invocation (spreads across accounts over time)
53
- agents run claude "summarize recent git commits" --mode plan --rotate
70
+ # Headless, switch away from the pinned version when usage is unavailable
71
+ agents run claude "summarize recent git commits" --mode plan --strategy available
54
72
 
55
73
  # Pin a specific version (rotation ignored)
56
74
  agents run codex@0.116.0 "fix linting errors in src/" --mode edit
@@ -108,37 +126,49 @@ Examples:
108
126
  console.error(chalk.gray(`Or add a profile: agents profiles add <name>`));
109
127
  process.exit(1);
110
128
  }
111
- // Rotation is opt-in via --rotate. Default honors the pinned default
112
- // version (from `agents use`) so behavior stays predictable. When
113
- // opted in, pick the least-recently-active signed-in version that
114
- // isn't out of credits. Skipped when @version is pinned, when running
115
- // a profile (profile carries its own version + auth), or when a
116
- // fallback chain is configured (fallback pins versions directly).
117
- if (options.rotate) {
129
+ version = resolveVersionAlias(agent, version);
130
+ const cwd = options.cwd ?? process.cwd();
131
+ const configuredStrategy = getConfiguredRunStrategy(agent, cwd);
132
+ const explicitStrategy = options.strategy ? normalizeRunStrategy(options.strategy) : null;
133
+ if (options.strategy && !explicitStrategy) {
134
+ console.error(chalk.red(`Invalid strategy: ${options.strategy}. Use ${RUN_STRATEGIES.join(', ')}.`));
135
+ process.exit(1);
136
+ }
137
+ if (options.rotate && explicitStrategy && explicitStrategy !== 'rotate') {
138
+ console.error(chalk.red('--rotate conflicts with --strategy. Use one strategy override.'));
139
+ process.exit(1);
140
+ }
141
+ const strategy = options.rotate ? 'rotate' : explicitStrategy ?? configuredStrategy;
142
+ // Strategy only applies to bare agent invocations. Explicit @version,
143
+ // profiles, and fallback chains already define their execution target.
144
+ if (strategy !== 'pinned' || options.rotate || explicitStrategy) {
118
145
  if (version) {
119
- process.stderr.write(chalk.yellow(`[agents] --rotate ignored: version ${version} is pinned\n`));
146
+ process.stderr.write(chalk.yellow(`[agents] strategy ${strategy} ignored: version ${version} is pinned\n`));
120
147
  }
121
148
  else if (fromProfile) {
122
- process.stderr.write(chalk.yellow(`[agents] --rotate ignored: profile pins its own version/auth\n`));
149
+ process.stderr.write(chalk.yellow(`[agents] strategy ${strategy} ignored: profile pins its own version/auth\n`));
123
150
  }
124
151
  else if (options.fallback) {
125
- process.stderr.write(chalk.yellow(`[agents] --rotate ignored: --fallback pins versions directly\n`));
152
+ process.stderr.write(chalk.yellow(`[agents] strategy ${strategy} ignored: --fallback pins versions directly\n`));
126
153
  }
127
154
  else {
128
155
  try {
129
- const resolved = await resolveRunVersion(agent);
156
+ const resolved = await resolveRunVersion(agent, strategy, cwd);
130
157
  if (resolved.version) {
131
158
  version = resolved.version;
132
159
  if (resolved.rotation) {
133
- process.stderr.write(chalk.gray(formatRotationBanner(resolved.rotation) + '\n'));
160
+ const banner = strategy === 'available'
161
+ ? formatRotationBanner(resolved.rotation).replace('rotation picked', 'available picked')
162
+ : formatRotationBanner(resolved.rotation);
163
+ process.stderr.write(chalk.gray(banner + '\n'));
134
164
  }
135
165
  }
136
166
  else {
137
- process.stderr.write(chalk.yellow(`[agents] --rotate found no healthy ${agent} version; falling back to defaults\n`));
167
+ process.stderr.write(chalk.yellow(`[agents] strategy ${strategy} found no usable ${agent} version; falling back to defaults\n`));
138
168
  }
139
169
  }
140
170
  catch (err) {
141
- process.stderr.write(chalk.yellow(`[agents] rotation skipped: ${err.message}\n`));
171
+ process.stderr.write(chalk.yellow(`[agents] strategy ${strategy} skipped: ${err.message}\n`));
142
172
  }
143
173
  }
144
174
  }
@@ -185,6 +215,7 @@ Examples:
185
215
  agent,
186
216
  version,
187
217
  prompt,
218
+ interactive: options.interactive,
188
219
  mode,
189
220
  effort,
190
221
  cwd: options.cwd,
@@ -197,6 +228,16 @@ Examples:
197
228
  timeout: options.timeout,
198
229
  env,
199
230
  };
231
+ if (options.interactive) {
232
+ if (options.fallback) {
233
+ console.error(chalk.red('--interactive is not compatible with --fallback. Fallback only works for headless prompt runs.'));
234
+ process.exit(1);
235
+ }
236
+ if (options.acp) {
237
+ console.error(chalk.red('--interactive is not compatible with --acp. ACP is a headless protocol.'));
238
+ process.exit(1);
239
+ }
240
+ }
200
241
  const fallback = [];
201
242
  if (options.fallback) {
202
243
  if (prompt === undefined) {
@@ -215,10 +256,39 @@ Examples:
215
256
  console.error(chalk.red(`Fallback cannot include the primary agent (${agent}). Rate-limit fallback only helps when switching providers.`));
216
257
  process.exit(1);
217
258
  }
218
- fallback.push({ agent: fbAgent, version: fbVersion || undefined });
259
+ fallback.push({ agent: fbAgent, version: resolveVersionAlias(fbAgent, fbVersion || undefined) });
260
+ }
261
+ }
262
+ if (options.acp) {
263
+ if (prompt === undefined) {
264
+ console.error(chalk.red('--acp requires a prompt. ACP is a programmatic protocol; interactive TUI sessions still use the native CLI.'));
265
+ process.exit(1);
266
+ }
267
+ if (fallback.length > 0) {
268
+ console.error(chalk.red('--acp is not compatible with --fallback yet. Drop one.'));
269
+ process.exit(1);
270
+ }
271
+ const { supportsAcp } = await import('../lib/acp/harnesses.js');
272
+ if (!supportsAcp(agent)) {
273
+ console.error(chalk.red(`Agent '${agent}' does not support ACP. Drop --acp to use direct exec.`));
274
+ process.exit(1);
275
+ }
276
+ const { runAcpHeadless } = await import('../lib/acp/run.js');
277
+ try {
278
+ const exitCode = await runAcpHeadless({
279
+ agent,
280
+ prompt,
281
+ cwd: options.cwd ?? process.cwd(),
282
+ mode,
283
+ json: options.json ?? false,
284
+ });
285
+ process.exit(exitCode);
286
+ }
287
+ catch (err) {
288
+ console.error(chalk.red(`ACP run failed for ${agent}: ${err.message}`));
289
+ process.exit(1);
219
290
  }
220
291
  }
221
- // Show what we're running (stderr so stdout stays clean for piping)
222
292
  const cmd = buildExecCommand(execOptions);
223
293
  process.stderr.write(chalk.gray(`Running: ${cmd.join(' ')}\n\n`));
224
294
  try {
@@ -238,4 +308,3 @@ Examples:
238
308
  }
239
309
  });
240
310
  }
241
- //# sourceMappingURL=exec.js.map
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Software Factory CLI -- thin client over `prix/factory/service`.
3
+ *
4
+ * One verb today:
5
+ *
6
+ * agents factory submit <linear-ref> POST /factory/submit
7
+ *
8
+ * Everything else (planner pod, worker dispatch, PR-merged/CI-failed
9
+ * webhooks, retry caps, heartbeat reaper) lives server-side in
10
+ * `agents/prix/factory/service/src/factory.ts`, driven by the
11
+ * `factory-tick` k8s CronJob. The laptop is optional after submit.
12
+ *
13
+ * Future verbs (list / status / tail / cancel / message) are intentionally
14
+ * deferred until the matching server endpoints land; they'll be thin
15
+ * clients too. No supervisor, ledger, oracle, or `~/.agents/factory/`
16
+ * registry on the laptop -- ever.
17
+ */
18
+ import type { Command } from 'commander';
19
+ export declare function registerFactoryCommands(program: Command): void;
@@ -0,0 +1,71 @@
1
+ import chalk from 'chalk';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import { homedir } from 'os';
5
+ import { betaEnableHint, isBetaEnabled } from '../lib/beta.js';
6
+ const FACTORY_URL = process.env.FACTORY_FLOOR_URL ?? 'https://agents.427yosemite.com';
7
+ function die(msg, code = 1) {
8
+ console.error(chalk.red(msg));
9
+ process.exit(code);
10
+ }
11
+ function readRushToken() {
12
+ const userYaml = path.join(homedir(), '.rush', 'user.yaml');
13
+ if (!fs.existsSync(userYaml)) {
14
+ die('Not logged in to Rush. Run `rush login` first.');
15
+ }
16
+ const raw = fs.readFileSync(userYaml, 'utf-8');
17
+ const match = raw.match(/access_token:\s*([^\s#]+)/);
18
+ if (!match) {
19
+ die('No session token in ~/.rush/user.yaml. Run `rush login` first.');
20
+ }
21
+ return match[1].replace(/^['"]|['"]$/g, '');
22
+ }
23
+ async function postFactorySubmit(ref) {
24
+ const token = readRushToken();
25
+ const res = await fetch(`${FACTORY_URL}/factory/submit`, {
26
+ method: 'POST',
27
+ headers: {
28
+ 'Authorization': `Bearer ${token}`,
29
+ 'Content-Type': 'application/json',
30
+ },
31
+ body: JSON.stringify({ ref }),
32
+ });
33
+ if (!res.ok) {
34
+ const body = await res.text().catch(() => '');
35
+ die(`Factory submit failed (${res.status}): ${body.slice(0, 400)}`);
36
+ }
37
+ return res.json();
38
+ }
39
+ export function registerFactoryCommands(program) {
40
+ const enabled = isBetaEnabled('factory');
41
+ const factory = program
42
+ .command('factory', { hidden: !enabled })
43
+ .description('Software Factory -- submit Linear tickets to the cloud orchestrator.')
44
+ .addHelpText('after', `
45
+ Examples:
46
+ agents factory submit RUSH-2451
47
+ agents factory submit https://linear.app/getrush/issue/RUSH-2451
48
+ `);
49
+ factory.hook('preAction', () => {
50
+ if (enabled)
51
+ return;
52
+ console.error(chalk.red('agents factory is in beta.'));
53
+ console.error(chalk.gray(betaEnableHint('factory')));
54
+ process.exit(1);
55
+ });
56
+ factory
57
+ .command('submit <linear-ref>')
58
+ .description('Submit a Linear issue (RUSH-123 or URL) to the Software Factory.')
59
+ .option('--json', 'Output machine-readable JSON')
60
+ .action(async (ref, opts) => {
61
+ const result = await postFactorySubmit(ref);
62
+ if (opts.json) {
63
+ console.log(JSON.stringify(result, null, 2));
64
+ return;
65
+ }
66
+ console.log(chalk.green(`Submitted ${result.linear_identifier} (${result.label})`));
67
+ console.log(` ticket ${result.ticket_id}`);
68
+ console.log(` execution ${result.cloud_execution_id}`);
69
+ console.log(` tail output agents cloud tail ${result.cloud_execution_id}`);
70
+ });
71
+ }
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Repository fork command.
3
+ *
4
+ * Registers the `agents fork` command which forks the default system
5
+ * config repo to the user's GitHub account, reconfigures remotes
6
+ * (origin -> user fork, upstream -> system repo), and pushes.
7
+ */
1
8
  import type { Command } from 'commander';
9
+ /** Register the `agents fork` command. */
2
10
  export declare function registerForkCommand(program: Command): void;
3
- //# sourceMappingURL=fork.d.ts.map
@@ -1,9 +1,17 @@
1
+ /**
2
+ * Repository fork command.
3
+ *
4
+ * Registers the `agents fork` command which forks the default system
5
+ * config repo to the user's GitHub account, reconfigures remotes
6
+ * (origin -> user fork, upstream -> system repo), and pushes.
7
+ */
1
8
  import chalk from 'chalk';
2
9
  import ora from 'ora';
3
10
  import { getAgentsDir, ensureAgentsDir } from '../lib/state.js';
4
11
  import { isGitRepo, isSystemRepoOrigin, getGitHubUsername, hasLocalChanges, setUpstreamRemote, setRemoteUrl, getRemoteUrl, } from '../lib/git.js';
5
12
  import { DEFAULT_SYSTEM_REPO, systemRepoSlug } from '../lib/types.js';
6
13
  import { isPromptCancelled } from './utils.js';
14
+ /** Register the `agents fork` command. */
7
15
  export function registerForkCommand(program) {
8
16
  program
9
17
  .command('fork')
@@ -66,14 +74,14 @@ Requirements:
66
74
  spinner.succeed(`Logged in as ${username}`);
67
75
  // Fork the system repo
68
76
  const forkSpinner = ora('Forking system repo...').start();
69
- const { exec } = await import('child_process');
77
+ const { execFile } = await import('child_process');
70
78
  const { promisify } = await import('util');
71
- const execAsync = promisify(exec);
79
+ const execFileAsync = promisify(execFile);
72
80
  const repoSlug = systemRepoSlug(DEFAULT_SYSTEM_REPO);
73
81
  try {
74
82
  // gh repo fork creates a fork and optionally clones it
75
83
  // We just want to create the fork on GitHub, not clone
76
- await execAsync(`gh repo fork ${repoSlug} --clone=false`);
84
+ await execFileAsync('gh', ['repo', 'fork', repoSlug, '--clone=false']);
77
85
  forkSpinner.succeed(`Forked to ${username}/.agents`);
78
86
  }
79
87
  catch (err) {
@@ -136,4 +144,3 @@ Requirements:
136
144
  }
137
145
  });
138
146
  }
139
- //# sourceMappingURL=fork.js.map
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Hook management commands for automating workflows on agent events.
3
+ *
4
+ * Implements `agents hooks` -- list, add, remove, sync, prune, and view
5
+ * shell scripts that fire on agent lifecycle events (session start, file
6
+ * edit, task completion). Central storage lives in ~/.agents/hooks/ and
7
+ * scripts are synced to individual version homes.
8
+ */
1
9
  import type { Command } from 'commander';
10
+ /** Register the `agents hooks` command tree (list, add, remove, sync, prune, view). */
2
11
  export declare function registerHooksCommands(program: Command): void;
3
- //# sourceMappingURL=hooks.d.ts.map