@phnx-labs/agents-cli 1.12.0 → 1.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/README.md +293 -300
  3. package/dist/commands/alias.d.ts +11 -0
  4. package/dist/commands/alias.js +117 -0
  5. package/dist/commands/beta.d.ts +2 -0
  6. package/dist/commands/beta.js +53 -0
  7. package/dist/commands/cloud.d.ts +10 -0
  8. package/dist/commands/cloud.js +408 -0
  9. package/dist/commands/commands.d.ts +9 -1
  10. package/dist/commands/commands.js +24 -172
  11. package/dist/commands/daemon.d.ts +8 -1
  12. package/dist/commands/daemon.js +13 -5
  13. package/dist/commands/doctor.d.ts +15 -0
  14. package/dist/commands/doctor.js +132 -0
  15. package/dist/commands/drive.d.ts +8 -1
  16. package/dist/commands/drive.js +20 -3
  17. package/dist/commands/exec.d.ts +8 -1
  18. package/dist/commands/exec.js +207 -20
  19. package/dist/commands/factory.d.ts +19 -0
  20. package/dist/commands/factory.js +71 -0
  21. package/dist/commands/fork.d.ts +8 -1
  22. package/dist/commands/fork.js +11 -4
  23. package/dist/commands/hooks.d.ts +9 -1
  24. package/dist/commands/hooks.js +30 -182
  25. package/dist/commands/init.d.ts +15 -1
  26. package/dist/commands/init.js +168 -74
  27. package/dist/commands/mcp.d.ts +9 -1
  28. package/dist/commands/mcp.js +11 -7
  29. package/dist/commands/models.d.ts +8 -1
  30. package/dist/commands/models.js +45 -6
  31. package/dist/commands/packages.d.ts +8 -1
  32. package/dist/commands/packages.js +13 -7
  33. package/dist/commands/permissions.d.ts +9 -1
  34. package/dist/commands/permissions.js +3 -3
  35. package/dist/commands/plugins.d.ts +8 -1
  36. package/dist/commands/plugins.js +13 -2
  37. package/dist/commands/profiles.d.ts +11 -0
  38. package/dist/commands/profiles.js +291 -0
  39. package/dist/commands/prune.d.ts +22 -0
  40. package/dist/commands/prune.js +191 -0
  41. package/dist/commands/pty.d.ts +1 -1
  42. package/dist/commands/pty.js +2 -1
  43. package/dist/commands/pull.d.ts +8 -1
  44. package/dist/commands/pull.js +93 -129
  45. package/dist/commands/refresh-memory.d.ts +7 -1
  46. package/dist/commands/refresh-memory.js +7 -1
  47. package/dist/commands/repo.d.ts +15 -0
  48. package/dist/commands/repo.js +570 -0
  49. package/dist/commands/resource-view.d.ts +10 -3
  50. package/dist/commands/resource-view.js +18 -5
  51. package/dist/commands/routines.d.ts +8 -1
  52. package/dist/commands/routines.js +17 -4
  53. package/dist/commands/rules.d.ts +9 -1
  54. package/dist/commands/rules.js +16 -11
  55. package/dist/commands/secrets.d.ts +10 -0
  56. package/dist/commands/secrets.js +511 -0
  57. package/dist/commands/sessions-picker.d.ts +2 -1
  58. package/dist/commands/sessions-picker.js +88 -11
  59. package/dist/commands/sessions-tail.d.ts +19 -0
  60. package/dist/commands/sessions-tail.js +235 -0
  61. package/dist/commands/sessions.d.ts +2 -1
  62. package/dist/commands/sessions.js +288 -7
  63. package/dist/commands/skills.d.ts +9 -1
  64. package/dist/commands/skills.js +28 -178
  65. package/dist/commands/status.d.ts +7 -1
  66. package/dist/commands/status.js +7 -1
  67. package/dist/commands/subagents.d.ts +8 -1
  68. package/dist/commands/subagents.js +11 -1
  69. package/dist/commands/sync.d.ts +8 -1
  70. package/dist/commands/sync.js +8 -1
  71. package/dist/commands/teams-picker.d.ts +4 -1
  72. package/dist/commands/teams-picker.js +55 -3
  73. package/dist/commands/teams.d.ts +15 -1
  74. package/dist/commands/teams.js +323 -69
  75. package/dist/commands/usage.d.ts +11 -0
  76. package/dist/commands/usage.js +60 -0
  77. package/dist/commands/utils.d.ts +6 -1
  78. package/dist/commands/utils.js +6 -1
  79. package/dist/commands/versions.d.ts +8 -1
  80. package/dist/commands/versions.js +4 -3
  81. package/dist/commands/view.d.ts +47 -2
  82. package/dist/commands/view.js +353 -20
  83. package/dist/index.d.ts +7 -2
  84. package/dist/index.js +205 -38
  85. package/dist/lib/acp/client.d.ts +31 -0
  86. package/dist/lib/acp/client.js +117 -0
  87. package/dist/lib/acp/harnesses.d.ts +26 -0
  88. package/dist/lib/acp/harnesses.js +65 -0
  89. package/dist/lib/acp/run.d.ts +18 -0
  90. package/dist/lib/acp/run.js +39 -0
  91. package/dist/lib/agents.d.ts +74 -2
  92. package/dist/lib/agents.js +207 -23
  93. package/dist/lib/artifact-actions.d.ts +8 -4
  94. package/dist/lib/artifact-actions.js +8 -6
  95. package/dist/lib/auto-pull-worker.d.ts +11 -0
  96. package/dist/lib/auto-pull-worker.js +121 -0
  97. package/dist/lib/auto-pull.d.ts +31 -0
  98. package/dist/lib/auto-pull.js +97 -0
  99. package/dist/lib/beta.d.ts +23 -0
  100. package/dist/lib/beta.js +90 -0
  101. package/dist/lib/capabilities.d.ts +29 -0
  102. package/dist/lib/capabilities.js +74 -0
  103. package/dist/lib/cloud/codex.d.ts +25 -0
  104. package/dist/lib/cloud/codex.js +250 -0
  105. package/dist/lib/cloud/factory.d.ts +31 -0
  106. package/dist/lib/cloud/factory.js +53 -0
  107. package/dist/lib/cloud/registry.d.ts +15 -0
  108. package/dist/lib/cloud/registry.js +67 -0
  109. package/dist/lib/cloud/rush.d.ts +75 -0
  110. package/dist/lib/cloud/rush.js +438 -0
  111. package/dist/lib/cloud/store.d.ts +22 -0
  112. package/dist/lib/cloud/store.js +115 -0
  113. package/dist/lib/cloud/stream.d.ts +23 -0
  114. package/dist/lib/cloud/stream.js +194 -0
  115. package/dist/lib/cloud/types.d.ts +205 -0
  116. package/dist/lib/cloud/types.js +34 -0
  117. package/dist/lib/command-skills.d.ts +20 -0
  118. package/dist/lib/command-skills.js +142 -0
  119. package/dist/lib/commands.d.ts +22 -2
  120. package/dist/lib/commands.js +51 -11
  121. package/dist/lib/convert.d.ts +10 -1
  122. package/dist/lib/convert.js +9 -1
  123. package/dist/lib/daemon.d.ts +21 -1
  124. package/dist/lib/daemon.js +97 -4
  125. package/dist/lib/drive-sync.d.ts +18 -1
  126. package/dist/lib/drive-sync.js +57 -15
  127. package/dist/lib/exec.d.ts +25 -5
  128. package/dist/lib/exec.js +72 -27
  129. package/dist/lib/fs-walk.d.ts +2 -0
  130. package/dist/lib/fs-walk.js +40 -0
  131. package/dist/lib/fuzzy.d.ts +53 -0
  132. package/dist/lib/fuzzy.js +72 -0
  133. package/dist/lib/gemini-settings.d.ts +4 -0
  134. package/dist/lib/gemini-settings.js +33 -0
  135. package/dist/lib/git.d.ts +12 -2
  136. package/dist/lib/git.js +17 -6
  137. package/dist/lib/help.d.ts +20 -1
  138. package/dist/lib/help.js +45 -6
  139. package/dist/lib/hooks/match.d.ts +32 -0
  140. package/dist/lib/hooks/match.js +120 -0
  141. package/dist/lib/hooks.d.ts +17 -4
  142. package/dist/lib/hooks.js +191 -21
  143. package/dist/lib/manifest.d.ts +6 -1
  144. package/dist/lib/manifest.js +15 -4
  145. package/dist/lib/markdown.d.ts +0 -1
  146. package/dist/lib/markdown.js +6 -1
  147. package/dist/lib/mcp.d.ts +0 -1
  148. package/dist/lib/mcp.js +29 -33
  149. package/dist/lib/memory-compile.d.ts +13 -3
  150. package/dist/lib/memory-compile.js +31 -9
  151. package/dist/lib/memory.d.ts +14 -7
  152. package/dist/lib/memory.js +67 -38
  153. package/dist/lib/migrate.d.ts +8 -0
  154. package/dist/lib/migrate.js +85 -0
  155. package/dist/lib/models.d.ts +25 -11
  156. package/dist/lib/models.js +405 -16
  157. package/dist/lib/onepassword.d.ts +63 -0
  158. package/dist/lib/onepassword.js +186 -0
  159. package/dist/lib/paths.d.ts +8 -0
  160. package/dist/lib/paths.js +20 -0
  161. package/dist/lib/permissions.d.ts +24 -2
  162. package/dist/lib/permissions.js +117 -48
  163. package/dist/lib/picker.d.ts +10 -1
  164. package/dist/lib/picker.js +15 -1
  165. package/dist/lib/plugins.d.ts +7 -1
  166. package/dist/lib/plugins.js +10 -1
  167. package/dist/lib/profiles-presets.d.ts +24 -0
  168. package/dist/lib/profiles-presets.js +103 -0
  169. package/dist/lib/profiles.d.ts +69 -0
  170. package/dist/lib/profiles.js +144 -0
  171. package/dist/lib/pty-client.d.ts +1 -1
  172. package/dist/lib/pty-client.js +0 -1
  173. package/dist/lib/pty-server.d.ts +16 -2
  174. package/dist/lib/pty-server.js +92 -3
  175. package/dist/lib/registry.d.ts +23 -3
  176. package/dist/lib/registry.js +153 -8
  177. package/dist/lib/resources.d.ts +28 -1
  178. package/dist/lib/resources.js +79 -1
  179. package/dist/lib/rotate.d.ts +79 -0
  180. package/dist/lib/rotate.js +285 -0
  181. package/dist/lib/routines.d.ts +29 -1
  182. package/dist/lib/routines.js +32 -5
  183. package/dist/lib/runner.d.ts +14 -1
  184. package/dist/lib/runner.js +22 -3
  185. package/dist/lib/sandbox.d.ts +16 -1
  186. package/dist/lib/sandbox.js +39 -16
  187. package/dist/lib/scheduler.d.ts +8 -1
  188. package/dist/lib/scheduler.js +8 -1
  189. package/dist/lib/secrets/AgentsKeychain.app/Contents/CodeResources +0 -0
  190. package/dist/lib/secrets/AgentsKeychain.app/Contents/Info.plist +22 -0
  191. package/dist/lib/secrets/AgentsKeychain.app/Contents/MacOS/AgentsKeychain +0 -0
  192. package/dist/lib/secrets/AgentsKeychain.app/Contents/_CodeSignature/CodeResources +123 -0
  193. package/dist/lib/secrets/AgentsKeychain.app/Contents/embedded.provisionprofile +0 -0
  194. package/dist/lib/secrets/bundles.d.ts +39 -0
  195. package/dist/lib/secrets/bundles.js +189 -0
  196. package/dist/lib/secrets/index.d.ts +55 -0
  197. package/dist/lib/secrets/index.js +211 -0
  198. package/dist/lib/secrets/profiles.d.ts +10 -0
  199. package/dist/lib/secrets/profiles.js +13 -0
  200. package/dist/lib/session/active.d.ts +43 -0
  201. package/dist/lib/session/active.js +392 -0
  202. package/dist/lib/session/artifacts.d.ts +16 -0
  203. package/dist/lib/session/artifacts.js +95 -0
  204. package/dist/lib/session/cloud.d.ts +30 -0
  205. package/dist/lib/session/cloud.js +121 -0
  206. package/dist/lib/session/db.d.ts +23 -2
  207. package/dist/lib/session/db.js +76 -12
  208. package/dist/lib/session/discover.d.ts +19 -4
  209. package/dist/lib/session/discover.js +344 -48
  210. package/dist/lib/session/parse.d.ts +28 -1
  211. package/dist/lib/session/parse.js +267 -9
  212. package/dist/lib/session/prompt.d.ts +9 -1
  213. package/dist/lib/session/prompt.js +17 -3
  214. package/dist/lib/session/render.d.ts +13 -1
  215. package/dist/lib/session/render.js +20 -1
  216. package/dist/lib/session/team-filter.d.ts +9 -1
  217. package/dist/lib/session/team-filter.js +11 -2
  218. package/dist/lib/session/types.d.ts +24 -2
  219. package/dist/lib/session/types.js +10 -2
  220. package/dist/lib/shims.d.ts +93 -5
  221. package/dist/lib/shims.js +380 -67
  222. package/dist/lib/skills.d.ts +27 -2
  223. package/dist/lib/skills.js +127 -65
  224. package/dist/lib/sqlite.d.ts +43 -0
  225. package/dist/lib/sqlite.js +94 -0
  226. package/dist/lib/state.d.ts +114 -22
  227. package/dist/lib/state.js +323 -138
  228. package/dist/lib/subagents.d.ts +9 -1
  229. package/dist/lib/subagents.js +70 -63
  230. package/dist/lib/sync-manifest.d.ts +81 -0
  231. package/dist/lib/sync-manifest.js +450 -0
  232. package/dist/lib/teams/agents.d.ts +103 -5
  233. package/dist/lib/teams/agents.js +414 -91
  234. package/dist/lib/teams/api.d.ts +26 -3
  235. package/dist/lib/teams/api.js +63 -3
  236. package/dist/lib/teams/debug.d.ts +6 -1
  237. package/dist/lib/teams/debug.js +6 -1
  238. package/dist/lib/teams/file_ops.d.ts +7 -1
  239. package/dist/lib/teams/file_ops.js +7 -1
  240. package/dist/lib/teams/index.d.ts +15 -0
  241. package/dist/lib/teams/index.js +14 -0
  242. package/dist/lib/teams/parsers.d.ts +4 -1
  243. package/dist/lib/teams/parsers.js +11 -1
  244. package/dist/lib/teams/persistence.d.ts +15 -1
  245. package/dist/lib/teams/persistence.js +102 -20
  246. package/dist/lib/teams/registry.d.ts +12 -1
  247. package/dist/lib/teams/registry.js +116 -33
  248. package/dist/lib/teams/summarizer.d.ts +15 -1
  249. package/dist/lib/teams/summarizer.js +14 -1
  250. package/dist/lib/teams/supervisor.d.ts +48 -0
  251. package/dist/lib/teams/supervisor.js +73 -0
  252. package/dist/lib/template.d.ts +8 -6
  253. package/dist/lib/template.js +8 -6
  254. package/dist/lib/types.d.ts +147 -8
  255. package/dist/lib/types.js +26 -3
  256. package/dist/lib/usage.d.ts +48 -1
  257. package/dist/lib/usage.js +97 -16
  258. package/dist/lib/version-duplicates.d.ts +21 -0
  259. package/dist/lib/version-duplicates.js +90 -0
  260. package/dist/lib/versions.d.ts +39 -4
  261. package/dist/lib/versions.js +401 -111
  262. package/package.json +33 -18
  263. package/scripts/postinstall.js +126 -30
  264. package/dist/commands/__tests__/sessions.test.d.ts +0 -2
  265. package/dist/commands/__tests__/sessions.test.d.ts.map +0 -1
  266. package/dist/commands/__tests__/sessions.test.js +0 -636
  267. package/dist/commands/__tests__/sessions.test.js.map +0 -1
  268. package/dist/commands/commands.d.ts.map +0 -1
  269. package/dist/commands/commands.js.map +0 -1
  270. package/dist/commands/daemon.d.ts.map +0 -1
  271. package/dist/commands/daemon.js.map +0 -1
  272. package/dist/commands/drive.d.ts.map +0 -1
  273. package/dist/commands/drive.js.map +0 -1
  274. package/dist/commands/exec.d.ts.map +0 -1
  275. package/dist/commands/exec.js.map +0 -1
  276. package/dist/commands/fork.d.ts.map +0 -1
  277. package/dist/commands/fork.js.map +0 -1
  278. package/dist/commands/hooks.d.ts.map +0 -1
  279. package/dist/commands/hooks.js.map +0 -1
  280. package/dist/commands/init.d.ts.map +0 -1
  281. package/dist/commands/init.js.map +0 -1
  282. package/dist/commands/mcp.d.ts.map +0 -1
  283. package/dist/commands/mcp.js.map +0 -1
  284. package/dist/commands/models.d.ts.map +0 -1
  285. package/dist/commands/models.js.map +0 -1
  286. package/dist/commands/packages.d.ts.map +0 -1
  287. package/dist/commands/packages.js.map +0 -1
  288. package/dist/commands/permissions.d.ts.map +0 -1
  289. package/dist/commands/permissions.js.map +0 -1
  290. package/dist/commands/plugins.d.ts.map +0 -1
  291. package/dist/commands/plugins.js.map +0 -1
  292. package/dist/commands/pty.d.ts.map +0 -1
  293. package/dist/commands/pty.js.map +0 -1
  294. package/dist/commands/pull.d.ts.map +0 -1
  295. package/dist/commands/pull.js.map +0 -1
  296. package/dist/commands/push.d.ts +0 -3
  297. package/dist/commands/push.d.ts.map +0 -1
  298. package/dist/commands/push.js +0 -180
  299. package/dist/commands/push.js.map +0 -1
  300. package/dist/commands/refresh-memory.d.ts.map +0 -1
  301. package/dist/commands/refresh-memory.js.map +0 -1
  302. package/dist/commands/resource-view.d.ts.map +0 -1
  303. package/dist/commands/resource-view.js.map +0 -1
  304. package/dist/commands/routines.d.ts.map +0 -1
  305. package/dist/commands/routines.js.map +0 -1
  306. package/dist/commands/rules.d.ts.map +0 -1
  307. package/dist/commands/rules.js.map +0 -1
  308. package/dist/commands/sessions-picker.d.ts.map +0 -1
  309. package/dist/commands/sessions-picker.js.map +0 -1
  310. package/dist/commands/sessions.d.ts.map +0 -1
  311. package/dist/commands/sessions.js.map +0 -1
  312. package/dist/commands/skills.d.ts.map +0 -1
  313. package/dist/commands/skills.js.map +0 -1
  314. package/dist/commands/status.d.ts.map +0 -1
  315. package/dist/commands/status.js.map +0 -1
  316. package/dist/commands/subagents.d.ts.map +0 -1
  317. package/dist/commands/subagents.js.map +0 -1
  318. package/dist/commands/sync.d.ts.map +0 -1
  319. package/dist/commands/sync.js.map +0 -1
  320. package/dist/commands/teams-picker.d.ts.map +0 -1
  321. package/dist/commands/teams-picker.js.map +0 -1
  322. package/dist/commands/teams.d.ts.map +0 -1
  323. package/dist/commands/teams.js.map +0 -1
  324. package/dist/commands/utils.d.ts.map +0 -1
  325. package/dist/commands/utils.js.map +0 -1
  326. package/dist/commands/versions.d.ts.map +0 -1
  327. package/dist/commands/versions.js.map +0 -1
  328. package/dist/commands/view.d.ts.map +0 -1
  329. package/dist/commands/view.js.map +0 -1
  330. package/dist/index.d.ts.map +0 -1
  331. package/dist/index.js.map +0 -1
  332. package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
  333. package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
  334. package/dist/lib/__tests__/bugfixes.test.js +0 -192
  335. package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
  336. package/dist/lib/__tests__/exec.test.d.ts +0 -2
  337. package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
  338. package/dist/lib/__tests__/exec.test.js +0 -446
  339. package/dist/lib/__tests__/exec.test.js.map +0 -1
  340. package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
  341. package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
  342. package/dist/lib/__tests__/git-sync.test.js +0 -138
  343. package/dist/lib/__tests__/git-sync.test.js.map +0 -1
  344. package/dist/lib/__tests__/hooks.test.d.ts +0 -2
  345. package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
  346. package/dist/lib/__tests__/hooks.test.js +0 -203
  347. package/dist/lib/__tests__/hooks.test.js.map +0 -1
  348. package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
  349. package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
  350. package/dist/lib/__tests__/memory-compile.test.js +0 -95
  351. package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
  352. package/dist/lib/__tests__/models.test.d.ts +0 -2
  353. package/dist/lib/__tests__/models.test.d.ts.map +0 -1
  354. package/dist/lib/__tests__/models.test.js +0 -184
  355. package/dist/lib/__tests__/models.test.js.map +0 -1
  356. package/dist/lib/__tests__/usage.test.d.ts +0 -2
  357. package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
  358. package/dist/lib/__tests__/usage.test.js +0 -218
  359. package/dist/lib/__tests__/usage.test.js.map +0 -1
  360. package/dist/lib/agents.d.ts.map +0 -1
  361. package/dist/lib/agents.js.map +0 -1
  362. package/dist/lib/artifact-actions.d.ts.map +0 -1
  363. package/dist/lib/artifact-actions.js.map +0 -1
  364. package/dist/lib/commands.d.ts.map +0 -1
  365. package/dist/lib/commands.js.map +0 -1
  366. package/dist/lib/convert.d.ts.map +0 -1
  367. package/dist/lib/convert.js.map +0 -1
  368. package/dist/lib/daemon.d.ts.map +0 -1
  369. package/dist/lib/daemon.js.map +0 -1
  370. package/dist/lib/drive-sync.d.ts.map +0 -1
  371. package/dist/lib/drive-sync.js.map +0 -1
  372. package/dist/lib/exec.d.ts.map +0 -1
  373. package/dist/lib/exec.js.map +0 -1
  374. package/dist/lib/factory.d.ts +0 -57
  375. package/dist/lib/factory.d.ts.map +0 -1
  376. package/dist/lib/factory.js +0 -110
  377. package/dist/lib/factory.js.map +0 -1
  378. package/dist/lib/git.d.ts.map +0 -1
  379. package/dist/lib/git.js.map +0 -1
  380. package/dist/lib/help.d.ts.map +0 -1
  381. package/dist/lib/help.js.map +0 -1
  382. package/dist/lib/hooks.d.ts.map +0 -1
  383. package/dist/lib/hooks.js.map +0 -1
  384. package/dist/lib/manifest.d.ts.map +0 -1
  385. package/dist/lib/manifest.js.map +0 -1
  386. package/dist/lib/markdown.d.ts.map +0 -1
  387. package/dist/lib/markdown.js.map +0 -1
  388. package/dist/lib/mcp.d.ts.map +0 -1
  389. package/dist/lib/mcp.js.map +0 -1
  390. package/dist/lib/memory-compile.d.ts.map +0 -1
  391. package/dist/lib/memory-compile.js.map +0 -1
  392. package/dist/lib/memory.d.ts.map +0 -1
  393. package/dist/lib/memory.js.map +0 -1
  394. package/dist/lib/models.d.ts.map +0 -1
  395. package/dist/lib/models.js.map +0 -1
  396. package/dist/lib/permissions.d.ts.map +0 -1
  397. package/dist/lib/permissions.js.map +0 -1
  398. package/dist/lib/picker.d.ts.map +0 -1
  399. package/dist/lib/picker.js.map +0 -1
  400. package/dist/lib/plugins.d.ts.map +0 -1
  401. package/dist/lib/plugins.js.map +0 -1
  402. package/dist/lib/pty-client.d.ts.map +0 -1
  403. package/dist/lib/pty-client.js.map +0 -1
  404. package/dist/lib/pty-server.d.ts.map +0 -1
  405. package/dist/lib/pty-server.js.map +0 -1
  406. package/dist/lib/registry.d.ts.map +0 -1
  407. package/dist/lib/registry.js.map +0 -1
  408. package/dist/lib/resources.d.ts.map +0 -1
  409. package/dist/lib/resources.js.map +0 -1
  410. package/dist/lib/routines.d.ts.map +0 -1
  411. package/dist/lib/routines.js.map +0 -1
  412. package/dist/lib/runner.d.ts.map +0 -1
  413. package/dist/lib/runner.js.map +0 -1
  414. package/dist/lib/sandbox.d.ts.map +0 -1
  415. package/dist/lib/sandbox.js.map +0 -1
  416. package/dist/lib/scheduler.d.ts.map +0 -1
  417. package/dist/lib/scheduler.js.map +0 -1
  418. package/dist/lib/session/__tests__/db.test.d.ts +0 -2
  419. package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
  420. package/dist/lib/session/__tests__/db.test.js +0 -54
  421. package/dist/lib/session/__tests__/db.test.js.map +0 -1
  422. package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
  423. package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
  424. package/dist/lib/session/__tests__/discover.test.js +0 -63
  425. package/dist/lib/session/__tests__/discover.test.js.map +0 -1
  426. package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
  427. package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
  428. package/dist/lib/session/__tests__/prompt.test.js +0 -44
  429. package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
  430. package/dist/lib/session/__tests__/render.test.d.ts +0 -2
  431. package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
  432. package/dist/lib/session/__tests__/render.test.js +0 -602
  433. package/dist/lib/session/__tests__/render.test.js.map +0 -1
  434. package/dist/lib/session/db.d.ts.map +0 -1
  435. package/dist/lib/session/db.js.map +0 -1
  436. package/dist/lib/session/discover.d.ts.map +0 -1
  437. package/dist/lib/session/discover.js.map +0 -1
  438. package/dist/lib/session/parse.d.ts.map +0 -1
  439. package/dist/lib/session/parse.js.map +0 -1
  440. package/dist/lib/session/prompt.d.ts.map +0 -1
  441. package/dist/lib/session/prompt.js.map +0 -1
  442. package/dist/lib/session/prompt.test.d.ts +0 -2
  443. package/dist/lib/session/prompt.test.d.ts.map +0 -1
  444. package/dist/lib/session/prompt.test.js +0 -57
  445. package/dist/lib/session/prompt.test.js.map +0 -1
  446. package/dist/lib/session/render.d.ts.map +0 -1
  447. package/dist/lib/session/render.js.map +0 -1
  448. package/dist/lib/session/team-filter.d.ts.map +0 -1
  449. package/dist/lib/session/team-filter.js.map +0 -1
  450. package/dist/lib/session/team-filter.test.d.ts +0 -2
  451. package/dist/lib/session/team-filter.test.d.ts.map +0 -1
  452. package/dist/lib/session/team-filter.test.js +0 -157
  453. package/dist/lib/session/team-filter.test.js.map +0 -1
  454. package/dist/lib/session/types.d.ts.map +0 -1
  455. package/dist/lib/session/types.js.map +0 -1
  456. package/dist/lib/shims.d.ts.map +0 -1
  457. package/dist/lib/shims.js.map +0 -1
  458. package/dist/lib/skills.d.ts.map +0 -1
  459. package/dist/lib/skills.js.map +0 -1
  460. package/dist/lib/state.d.ts.map +0 -1
  461. package/dist/lib/state.js.map +0 -1
  462. package/dist/lib/subagents.d.ts.map +0 -1
  463. package/dist/lib/subagents.js.map +0 -1
  464. package/dist/lib/teams/agents.d.ts.map +0 -1
  465. package/dist/lib/teams/agents.js.map +0 -1
  466. package/dist/lib/teams/api.d.ts.map +0 -1
  467. package/dist/lib/teams/api.js.map +0 -1
  468. package/dist/lib/teams/cloud.d.ts +0 -11
  469. package/dist/lib/teams/cloud.d.ts.map +0 -1
  470. package/dist/lib/teams/cloud.js +0 -169
  471. package/dist/lib/teams/cloud.js.map +0 -1
  472. package/dist/lib/teams/debug.d.ts.map +0 -1
  473. package/dist/lib/teams/debug.js.map +0 -1
  474. package/dist/lib/teams/file_ops.d.ts.map +0 -1
  475. package/dist/lib/teams/file_ops.js.map +0 -1
  476. package/dist/lib/teams/parsers.d.ts.map +0 -1
  477. package/dist/lib/teams/parsers.js.map +0 -1
  478. package/dist/lib/teams/persistence.d.ts.map +0 -1
  479. package/dist/lib/teams/persistence.js.map +0 -1
  480. package/dist/lib/teams/ralph.d.ts +0 -8
  481. package/dist/lib/teams/ralph.d.ts.map +0 -1
  482. package/dist/lib/teams/ralph.js +0 -59
  483. package/dist/lib/teams/ralph.js.map +0 -1
  484. package/dist/lib/teams/registry.d.ts.map +0 -1
  485. package/dist/lib/teams/registry.js.map +0 -1
  486. package/dist/lib/teams/summarizer.d.ts.map +0 -1
  487. package/dist/lib/teams/summarizer.js.map +0 -1
  488. package/dist/lib/template.d.ts.map +0 -1
  489. package/dist/lib/template.js.map +0 -1
  490. package/dist/lib/types.d.ts.map +0 -1
  491. package/dist/lib/types.js.map +0 -1
  492. package/dist/lib/usage.d.ts.map +0 -1
  493. package/dist/lib/usage.js.map +0 -1
  494. package/dist/lib/versions.d.ts.map +0 -1
  495. package/dist/lib/versions.js.map +0 -1
  496. package/scripts/rebuild-sqlite.sh +0 -46
@@ -1,31 +1,76 @@
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';
10
+ import { profileExists, resolveProfileForRun } from '../lib/profiles.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';
3
14
  const VALID_AGENTS = Object.keys(AGENT_COMMANDS);
15
+ /** Type guard that narrows a string to a known AgentId. */
4
16
  function isValidAgent(agent) {
5
17
  return VALID_AGENTS.includes(agent);
6
18
  }
19
+ /** Build a one-line banner describing which version the rotation picked. */
20
+ function formatRotationBanner(result) {
21
+ const { picked, healthy, excluded } = result;
22
+ const label = picked.email ? `${picked.email} · ${picked.agent}@${picked.version}` : `${picked.agent}@${picked.version}`;
23
+ const ratio = `${healthy.length} of ${healthy.length + excluded.length} healthy`;
24
+ return `[agents] rotation picked ${label} (${ratio})`;
25
+ }
26
+ /** Register the `agents run <agent> [prompt]` command. */
7
27
  export function registerRunCommand(program) {
8
28
  program
9
- .command('run <agent> <prompt>')
10
- .description('Execute an agent non-interactively from scripts, scheduled jobs, or automation pipelines. Returns when the agent finishes.')
29
+ .command('run <agent> [prompt]')
30
+ .description('Execute an agent. Pass a prompt for headless runs; omit it to launch the agent interactively.')
11
31
  .option('-m, --mode <mode>', 'How much the agent can do: plan (read-only), edit (can write files), full (writes + all permissions)', 'plan')
12
32
  .option('-e, --effort <effort>', 'Reasoning effort: low | medium | high | xhigh | max | auto (claude and codex only)', 'auto')
13
33
  .option('--model <model>', 'Override the model directly (e.g., claude-opus-4-6)')
14
34
  .option('--env <key=value>', 'Pass environment variable to the agent (repeatable, e.g., --env DEBUG=1 --env API_KEY=xyz)', (val, prev) => [...prev, val], [])
35
+ .option('--secrets <bundle>', 'Inject a secrets bundle (repeatable). Values resolve from macOS Keychain at run time. See `agents secrets`.', (val, prev) => [...prev, val], [])
15
36
  .option('--cwd <dir>', 'Working directory for the agent (defaults to current directory)')
16
37
  .option('--add-dir <dir>', 'Grant access to an additional directory outside the project (Claude only, repeatable)', (val, prev) => [...prev, val], [])
17
38
  .option('--json', 'Stream events as JSON lines (for parsing by other tools)')
18
39
  .option('--headless', 'Non-interactive mode (default for run)', true)
40
+ .option('-i, --interactive', 'Force interactive mode even when a prompt is provided')
19
41
  .option('--session-id <id>', 'Resume a previous conversation (Claude only)')
20
42
  .option('--verbose', 'Show detailed execution logs')
21
43
  .option('--timeout <duration>', 'Kill the agent after this duration (e.g., 30m, 1h, 2h30m)')
22
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.')
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.')
23
48
  .addHelpText('after', `
49
+ Modes:
50
+ With a prompt -> headless (pipes output, no TTY, exits when the agent finishes).
51
+ Without a prompt -> interactive (launches the agent's TUI; stdio is fully inherited).
52
+
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.
61
+ Ignored when @version is pinned, when a profile is used, or with --fallback.
62
+
24
63
  Examples:
25
- # Quick read-only analysis (plan mode, low reasoning effort)
26
- agents run claude "summarize recent git commits" --mode plan --effort low
64
+ # Interactive with the pinned default version
65
+ agents run claude
66
+
67
+ # Interactive, rotate to the least-used healthy account
68
+ agents run claude --strategy rotate
69
+
70
+ # Headless, switch away from the pinned version when usage is unavailable
71
+ agents run claude "summarize recent git commits" --mode plan --strategy available
27
72
 
28
- # Edit files with the agent's default effort
73
+ # Pin a specific version (rotation ignored)
29
74
  agents run codex@0.116.0 "fix linting errors in src/" --mode edit
30
75
 
31
76
  # Full autonomy with maximum reasoning for a complex task
@@ -40,20 +85,93 @@ Examples:
40
85
  # Auto-fallback to codex then gemini if claude hits a rate limit
41
86
  agents run claude "refactor auth module" --mode edit --fallback codex,gemini
42
87
 
88
+ # Inject a named secrets bundle (keychain-backed)
89
+ agents run claude "charge a test card" --secrets prod-stripe
90
+
43
91
  # Pin fallback versions: primary claude@2.0.65, fallback codex@0.116.0 then gemini
44
92
  agents run claude@2.0.65 "deep refactor" --fallback codex@0.116.0,gemini
45
-
46
- Note: 'agents run' executes non-interactively (no TTY). To work interactively with
47
- the agent, launch it directly (e.g., 'claude', 'codex') instead of using 'run'.
48
93
  `)
49
94
  .action(async (agentSpec, prompt, options) => {
50
95
  // Parse agent@version
51
- const [agent, version] = agentSpec.split('@');
52
- if (!isValidAgent(agent)) {
53
- console.error(chalk.red(`Unknown agent: ${agent}`));
54
- console.error(chalk.gray(`Available: ${VALID_AGENTS.join(', ')}`));
96
+ const [rawAgent, rawVersion] = agentSpec.split('@');
97
+ let agent;
98
+ let version = rawVersion || undefined;
99
+ let profileEnv;
100
+ let fromProfile = false;
101
+ if (isValidAgent(rawAgent)) {
102
+ agent = rawAgent;
103
+ }
104
+ else if (profileExists(rawAgent)) {
105
+ // Not a known agent id, but a profile by this name exists. Profiles
106
+ // bind (host agent, version, env overrides, keychain-backed auth)
107
+ // so Chinese models (Kimi, DeepSeek, Qwen, GLM) can run inside
108
+ // Claude Code without a local proxy.
109
+ try {
110
+ const resolved = resolveProfileForRun(rawAgent);
111
+ agent = resolved.agent;
112
+ if (!version)
113
+ version = resolved.version;
114
+ profileEnv = resolved.env;
115
+ fromProfile = true;
116
+ process.stderr.write(chalk.gray(`Resolved profile '${resolved.profileName}' -> ${agent}${version ? `@${version}` : ''}\n`));
117
+ }
118
+ catch (err) {
119
+ console.error(chalk.red(err.message));
120
+ process.exit(1);
121
+ }
122
+ }
123
+ else {
124
+ console.error(chalk.red(`Unknown agent: ${rawAgent}`));
125
+ console.error(chalk.gray(`Available agents: ${VALID_AGENTS.join(', ')}`));
126
+ console.error(chalk.gray(`Or add a profile: agents profiles add <name>`));
127
+ process.exit(1);
128
+ }
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.'));
55
139
  process.exit(1);
56
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) {
145
+ if (version) {
146
+ process.stderr.write(chalk.yellow(`[agents] strategy ${strategy} ignored: version ${version} is pinned\n`));
147
+ }
148
+ else if (fromProfile) {
149
+ process.stderr.write(chalk.yellow(`[agents] strategy ${strategy} ignored: profile pins its own version/auth\n`));
150
+ }
151
+ else if (options.fallback) {
152
+ process.stderr.write(chalk.yellow(`[agents] strategy ${strategy} ignored: --fallback pins versions directly\n`));
153
+ }
154
+ else {
155
+ try {
156
+ const resolved = await resolveRunVersion(agent, strategy, cwd);
157
+ if (resolved.version) {
158
+ version = resolved.version;
159
+ if (resolved.rotation) {
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'));
164
+ }
165
+ }
166
+ else {
167
+ process.stderr.write(chalk.yellow(`[agents] strategy ${strategy} found no usable ${agent} version; falling back to defaults\n`));
168
+ }
169
+ }
170
+ catch (err) {
171
+ process.stderr.write(chalk.yellow(`[agents] strategy ${strategy} skipped: ${err.message}\n`));
172
+ }
173
+ }
174
+ }
57
175
  const mode = options.mode;
58
176
  if (!['plan', 'edit', 'full'].includes(mode)) {
59
177
  console.error(chalk.red(`Invalid mode: ${mode}. Use 'plan', 'edit', or 'full'`));
@@ -64,18 +182,40 @@ the agent, launch it directly (e.g., 'claude', 'codex') instead of using 'run'.
64
182
  console.error(chalk.red(`Invalid effort: ${effort}. Use 'low', 'medium', 'high', 'xhigh', 'max', or 'auto'`));
65
183
  process.exit(1);
66
184
  }
67
- let env;
185
+ let userEnv;
68
186
  try {
69
- env = parseExecEnv(options.env);
187
+ userEnv = parseExecEnv(options.env);
70
188
  }
71
189
  catch (err) {
72
190
  console.error(chalk.red(err.message));
73
191
  process.exit(1);
74
192
  }
193
+ // Resolve --secrets bundles in flag order. Later bundles override earlier
194
+ // ones. Any resolution failure (missing keychain item, blocked exec ref)
195
+ // aborts before spawn so the agent never sees a partial env.
196
+ let secretsEnv = {};
197
+ for (const bundleName of options.secrets) {
198
+ try {
199
+ const bundle = readBundle(bundleName);
200
+ secretsEnv = { ...secretsEnv, ...resolveBundleEnv(bundle) };
201
+ }
202
+ catch (err) {
203
+ console.error(chalk.red(err.message));
204
+ process.exit(1);
205
+ }
206
+ }
207
+ // Merge order (later wins): profile env < secrets bundles < --env K=V.
208
+ // Profile carries provider auth; secrets bundles carry user-defined
209
+ // values; --env is the per-invocation override.
210
+ const hasOverrides = profileEnv || options.secrets.length > 0 || userEnv;
211
+ const env = hasOverrides
212
+ ? { ...(profileEnv ?? {}), ...secretsEnv, ...(userEnv ?? {}) }
213
+ : undefined;
75
214
  const execOptions = {
76
215
  agent,
77
216
  version,
78
217
  prompt,
218
+ interactive: options.interactive,
79
219
  mode,
80
220
  effort,
81
221
  cwd: options.cwd,
@@ -88,8 +228,22 @@ the agent, launch it directly (e.g., 'claude', 'codex') instead of using 'run'.
88
228
  timeout: options.timeout,
89
229
  env,
90
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
+ }
91
241
  const fallback = [];
92
242
  if (options.fallback) {
243
+ if (prompt === undefined) {
244
+ console.error(chalk.red('--fallback requires a prompt. Fallback hands off headless runs only — interactive sessions can\'t be resumed on a different CLI.'));
245
+ process.exit(1);
246
+ }
93
247
  const entries = options.fallback.split(',').map(s => s.trim()).filter(Boolean);
94
248
  for (const entry of entries) {
95
249
  const [fbAgent, fbVersion] = entry.split('@');
@@ -102,16 +256,50 @@ the agent, launch it directly (e.g., 'claude', 'codex') instead of using 'run'.
102
256
  console.error(chalk.red(`Fallback cannot include the primary agent (${agent}). Rate-limit fallback only helps when switching providers.`));
103
257
  process.exit(1);
104
258
  }
105
- 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);
106
290
  }
107
291
  }
108
- // Show what we're running (stderr so stdout stays clean for piping)
109
292
  const cmd = buildExecCommand(execOptions);
110
293
  process.stderr.write(chalk.gray(`Running: ${cmd.join(' ')}\n\n`));
111
294
  try {
112
- const exitCode = fallback.length > 0
113
- ? await runWithFallback({ ...execOptions, fallback })
114
- : await execAgent(execOptions);
295
+ let exitCode;
296
+ if (fallback.length > 0) {
297
+ // fallback requires a prompt — enforced above, narrow the type here.
298
+ exitCode = await runWithFallback({ ...execOptions, prompt: prompt, fallback });
299
+ }
300
+ else {
301
+ exitCode = await execAgent(execOptions);
302
+ }
115
303
  process.exit(exitCode);
116
304
  }
117
305
  catch (err) {
@@ -120,4 +308,3 @@ the agent, launch it directly (e.g., 'claude', 'codex') instead of using 'run'.
120
308
  }
121
309
  });
122
310
  }
123
- //# 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