@swarmify/agents-cli 1.12.0 → 1.13.0

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 (539) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/LICENSE +21 -0
  3. package/README.md +209 -233
  4. package/dist/commands/__tests__/sessions.test.js +90 -20
  5. package/dist/commands/__tests__/sessions.test.js.map +1 -1
  6. package/dist/commands/cloud.d.ts +11 -0
  7. package/dist/commands/cloud.d.ts.map +1 -0
  8. package/dist/commands/cloud.js +363 -0
  9. package/dist/commands/cloud.js.map +1 -0
  10. package/dist/commands/commands.d.ts +9 -0
  11. package/dist/commands/commands.d.ts.map +1 -1
  12. package/dist/commands/commands.js +330 -139
  13. package/dist/commands/commands.js.map +1 -1
  14. package/dist/commands/daemon.d.ts +8 -0
  15. package/dist/commands/daemon.d.ts.map +1 -1
  16. package/dist/commands/daemon.js +38 -222
  17. package/dist/commands/daemon.js.map +1 -1
  18. package/dist/commands/drive.d.ts +8 -0
  19. package/dist/commands/drive.d.ts.map +1 -1
  20. package/dist/commands/drive.js +70 -7
  21. package/dist/commands/drive.js.map +1 -1
  22. package/dist/commands/exec.d.ts +9 -1
  23. package/dist/commands/exec.d.ts.map +1 -1
  24. package/dist/commands/exec.js +198 -24
  25. package/dist/commands/exec.js.map +1 -1
  26. package/dist/commands/factory.d.ts +11 -0
  27. package/dist/commands/factory.d.ts.map +1 -0
  28. package/dist/commands/factory.js +445 -0
  29. package/dist/commands/factory.js.map +1 -0
  30. package/dist/commands/fork.d.ts +8 -0
  31. package/dist/commands/fork.d.ts.map +1 -1
  32. package/dist/commands/fork.js +38 -4
  33. package/dist/commands/fork.js.map +1 -1
  34. package/dist/commands/hooks.d.ts +9 -0
  35. package/dist/commands/hooks.d.ts.map +1 -1
  36. package/dist/commands/hooks.js +252 -18
  37. package/dist/commands/hooks.js.map +1 -1
  38. package/dist/commands/init.d.ts +15 -0
  39. package/dist/commands/init.d.ts.map +1 -0
  40. package/dist/commands/init.js +137 -0
  41. package/dist/commands/init.js.map +1 -0
  42. package/dist/commands/mcp.d.ts +9 -0
  43. package/dist/commands/mcp.d.ts.map +1 -1
  44. package/dist/commands/mcp.js +250 -169
  45. package/dist/commands/mcp.js.map +1 -1
  46. package/dist/commands/models.d.ts +11 -0
  47. package/dist/commands/models.d.ts.map +1 -0
  48. package/dist/commands/models.js +170 -0
  49. package/dist/commands/models.js.map +1 -0
  50. package/dist/commands/packages.d.ts +8 -0
  51. package/dist/commands/packages.d.ts.map +1 -1
  52. package/dist/commands/packages.js +155 -14
  53. package/dist/commands/packages.js.map +1 -1
  54. package/dist/commands/permissions.d.ts +9 -0
  55. package/dist/commands/permissions.d.ts.map +1 -1
  56. package/dist/commands/permissions.js +72 -13
  57. package/dist/commands/permissions.js.map +1 -1
  58. package/dist/commands/plugins.d.ts +8 -0
  59. package/dist/commands/plugins.d.ts.map +1 -1
  60. package/dist/commands/plugins.js +265 -44
  61. package/dist/commands/plugins.js.map +1 -1
  62. package/dist/commands/profiles.d.ts +12 -0
  63. package/dist/commands/profiles.d.ts.map +1 -0
  64. package/dist/commands/profiles.js +255 -0
  65. package/dist/commands/profiles.js.map +1 -0
  66. package/dist/commands/pty.d.ts +1 -0
  67. package/dist/commands/pty.d.ts.map +1 -1
  68. package/dist/commands/pty.js +133 -22
  69. package/dist/commands/pty.js.map +1 -1
  70. package/dist/commands/pull.d.ts +8 -0
  71. package/dist/commands/pull.d.ts.map +1 -1
  72. package/dist/commands/pull.js +103 -14
  73. package/dist/commands/pull.js.map +1 -1
  74. package/dist/commands/push.d.ts +8 -0
  75. package/dist/commands/push.d.ts.map +1 -1
  76. package/dist/commands/push.js +37 -3
  77. package/dist/commands/push.js.map +1 -1
  78. package/dist/commands/refresh-memory.d.ts +16 -0
  79. package/dist/commands/refresh-memory.d.ts.map +1 -0
  80. package/dist/commands/refresh-memory.js +52 -0
  81. package/dist/commands/refresh-memory.js.map +1 -0
  82. package/dist/commands/resource-view.d.ts +39 -0
  83. package/dist/commands/resource-view.d.ts.map +1 -0
  84. package/dist/commands/resource-view.js +197 -0
  85. package/dist/commands/resource-view.js.map +1 -0
  86. package/dist/commands/routines.d.ts +8 -0
  87. package/dist/commands/routines.d.ts.map +1 -1
  88. package/dist/commands/routines.js +163 -34
  89. package/dist/commands/routines.js.map +1 -1
  90. package/dist/commands/rules.d.ts +9 -0
  91. package/dist/commands/rules.d.ts.map +1 -1
  92. package/dist/commands/rules.js +83 -12
  93. package/dist/commands/rules.js.map +1 -1
  94. package/dist/commands/secrets.d.ts +11 -0
  95. package/dist/commands/secrets.d.ts.map +1 -0
  96. package/dist/commands/secrets.js +352 -0
  97. package/dist/commands/secrets.js.map +1 -0
  98. package/dist/commands/sessions-picker.d.ts +18 -0
  99. package/dist/commands/sessions-picker.d.ts.map +1 -0
  100. package/dist/commands/sessions-picker.js +265 -0
  101. package/dist/commands/sessions-picker.js.map +1 -0
  102. package/dist/commands/sessions.d.ts +15 -0
  103. package/dist/commands/sessions.d.ts.map +1 -1
  104. package/dist/commands/sessions.js +700 -263
  105. package/dist/commands/sessions.js.map +1 -1
  106. package/dist/commands/skills.d.ts +9 -0
  107. package/dist/commands/skills.d.ts.map +1 -1
  108. package/dist/commands/skills.js +355 -233
  109. package/dist/commands/skills.js.map +1 -1
  110. package/dist/commands/status.d.ts +7 -0
  111. package/dist/commands/status.d.ts.map +1 -1
  112. package/dist/commands/status.js +7 -0
  113. package/dist/commands/status.js.map +1 -1
  114. package/dist/commands/subagents.d.ts +8 -0
  115. package/dist/commands/subagents.d.ts.map +1 -1
  116. package/dist/commands/subagents.js +214 -74
  117. package/dist/commands/subagents.js.map +1 -1
  118. package/dist/commands/sync.d.ts +8 -0
  119. package/dist/commands/sync.d.ts.map +1 -1
  120. package/dist/commands/sync.js +15 -7
  121. package/dist/commands/sync.js.map +1 -1
  122. package/dist/commands/teams-picker.d.ts +18 -0
  123. package/dist/commands/teams-picker.d.ts.map +1 -0
  124. package/dist/commands/teams-picker.js +290 -0
  125. package/dist/commands/teams-picker.js.map +1 -0
  126. package/dist/commands/teams.d.ts +18 -0
  127. package/dist/commands/teams.d.ts.map +1 -0
  128. package/dist/commands/teams.js +1098 -0
  129. package/dist/commands/teams.js.map +1 -0
  130. package/dist/commands/utils.d.ts +20 -0
  131. package/dist/commands/utils.d.ts.map +1 -1
  132. package/dist/commands/utils.js +34 -0
  133. package/dist/commands/utils.js.map +1 -1
  134. package/dist/commands/versions.d.ts +8 -0
  135. package/dist/commands/versions.d.ts.map +1 -1
  136. package/dist/commands/versions.js +71 -8
  137. package/dist/commands/versions.js.map +1 -1
  138. package/dist/commands/view.d.ts +34 -1
  139. package/dist/commands/view.d.ts.map +1 -1
  140. package/dist/commands/view.js +207 -13
  141. package/dist/commands/view.js.map +1 -1
  142. package/dist/index.d.ts +6 -0
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js +136 -51
  145. package/dist/index.js.map +1 -1
  146. package/dist/lib/__tests__/bugfixes.test.js +3 -3
  147. package/dist/lib/__tests__/bugfixes.test.js.map +1 -1
  148. package/dist/lib/__tests__/exec.test.js +125 -19
  149. package/dist/lib/__tests__/exec.test.js.map +1 -1
  150. package/dist/lib/__tests__/hooks.test.d.ts +2 -0
  151. package/dist/lib/__tests__/hooks.test.d.ts.map +1 -0
  152. package/dist/lib/__tests__/hooks.test.js +203 -0
  153. package/dist/lib/__tests__/hooks.test.js.map +1 -0
  154. package/dist/lib/__tests__/memory-compile.test.d.ts +2 -0
  155. package/dist/lib/__tests__/memory-compile.test.d.ts.map +1 -0
  156. package/dist/lib/__tests__/memory-compile.test.js +95 -0
  157. package/dist/lib/__tests__/memory-compile.test.js.map +1 -0
  158. package/dist/lib/__tests__/models.test.d.ts +2 -0
  159. package/dist/lib/__tests__/models.test.d.ts.map +1 -0
  160. package/dist/lib/__tests__/models.test.js +239 -0
  161. package/dist/lib/__tests__/models.test.js.map +1 -0
  162. package/dist/lib/__tests__/rotate.test.d.ts +2 -0
  163. package/dist/lib/__tests__/rotate.test.d.ts.map +1 -0
  164. package/dist/lib/__tests__/rotate.test.js +80 -0
  165. package/dist/lib/__tests__/rotate.test.js.map +1 -0
  166. package/dist/lib/__tests__/secrets-bundles.test.d.ts +2 -0
  167. package/dist/lib/__tests__/secrets-bundles.test.d.ts.map +1 -0
  168. package/dist/lib/__tests__/secrets-bundles.test.js +104 -0
  169. package/dist/lib/__tests__/secrets-bundles.test.js.map +1 -0
  170. package/dist/lib/__tests__/secrets.test.d.ts +2 -0
  171. package/dist/lib/__tests__/secrets.test.d.ts.map +1 -0
  172. package/dist/lib/__tests__/secrets.test.js +90 -0
  173. package/dist/lib/__tests__/secrets.test.js.map +1 -0
  174. package/dist/lib/__tests__/shims.test.d.ts +2 -0
  175. package/dist/lib/__tests__/shims.test.d.ts.map +1 -0
  176. package/dist/lib/__tests__/shims.test.js +39 -0
  177. package/dist/lib/__tests__/shims.test.js.map +1 -0
  178. package/dist/lib/__tests__/usage.test.js +4 -2
  179. package/dist/lib/__tests__/usage.test.js.map +1 -1
  180. package/dist/lib/__tests__/versions.test.d.ts +2 -0
  181. package/dist/lib/__tests__/versions.test.d.ts.map +1 -0
  182. package/dist/lib/__tests__/versions.test.js +63 -0
  183. package/dist/lib/__tests__/versions.test.js.map +1 -0
  184. package/dist/lib/agents.d.ts +53 -1
  185. package/dist/lib/agents.d.ts.map +1 -1
  186. package/dist/lib/agents.js +178 -37
  187. package/dist/lib/agents.js.map +1 -1
  188. package/dist/lib/artifact-actions.d.ts +8 -3
  189. package/dist/lib/artifact-actions.d.ts.map +1 -1
  190. package/dist/lib/artifact-actions.js +8 -5
  191. package/dist/lib/artifact-actions.js.map +1 -1
  192. package/dist/lib/cloud/codex.d.ts +26 -0
  193. package/dist/lib/cloud/codex.d.ts.map +1 -0
  194. package/dist/lib/cloud/codex.js +237 -0
  195. package/dist/lib/cloud/codex.js.map +1 -0
  196. package/dist/lib/cloud/factory.d.ts +32 -0
  197. package/dist/lib/cloud/factory.d.ts.map +1 -0
  198. package/dist/lib/cloud/factory.js +43 -0
  199. package/dist/lib/cloud/factory.js.map +1 -0
  200. package/dist/lib/cloud/registry.d.ts +16 -0
  201. package/dist/lib/cloud/registry.d.ts.map +1 -0
  202. package/dist/lib/cloud/registry.js +68 -0
  203. package/dist/lib/cloud/registry.js.map +1 -0
  204. package/dist/lib/cloud/rush.d.ts +37 -0
  205. package/dist/lib/cloud/rush.d.ts.map +1 -0
  206. package/dist/lib/cloud/rush.js +230 -0
  207. package/dist/lib/cloud/rush.js.map +1 -0
  208. package/dist/lib/cloud/rush.test.d.ts +2 -0
  209. package/dist/lib/cloud/rush.test.d.ts.map +1 -0
  210. package/dist/lib/cloud/rush.test.js +63 -0
  211. package/dist/lib/cloud/rush.test.js.map +1 -0
  212. package/dist/lib/cloud/store.d.ts +23 -0
  213. package/dist/lib/cloud/store.d.ts.map +1 -0
  214. package/dist/lib/cloud/store.js +116 -0
  215. package/dist/lib/cloud/store.js.map +1 -0
  216. package/dist/lib/cloud/stream.d.ts +24 -0
  217. package/dist/lib/cloud/stream.d.ts.map +1 -0
  218. package/dist/lib/cloud/stream.js +145 -0
  219. package/dist/lib/cloud/stream.js.map +1 -0
  220. package/dist/lib/cloud/types.d.ts +109 -0
  221. package/dist/lib/cloud/types.d.ts.map +1 -0
  222. package/dist/lib/cloud/types.js +33 -0
  223. package/dist/lib/cloud/types.js.map +1 -0
  224. package/dist/lib/cloud/types.test.d.ts +2 -0
  225. package/dist/lib/cloud/types.test.d.ts.map +1 -0
  226. package/dist/lib/cloud/types.test.js +41 -0
  227. package/dist/lib/cloud/types.test.js.map +1 -0
  228. package/dist/lib/commands.d.ts +67 -0
  229. package/dist/lib/commands.d.ts.map +1 -1
  230. package/dist/lib/commands.js +161 -2
  231. package/dist/lib/commands.js.map +1 -1
  232. package/dist/lib/convert.d.ts +10 -0
  233. package/dist/lib/convert.d.ts.map +1 -1
  234. package/dist/lib/convert.js +9 -0
  235. package/dist/lib/convert.js.map +1 -1
  236. package/dist/lib/daemon.d.ts +21 -0
  237. package/dist/lib/daemon.d.ts.map +1 -1
  238. package/dist/lib/daemon.js +21 -0
  239. package/dist/lib/daemon.js.map +1 -1
  240. package/dist/lib/drive-sync.d.ts +18 -0
  241. package/dist/lib/drive-sync.d.ts.map +1 -1
  242. package/dist/lib/drive-sync.js +16 -0
  243. package/dist/lib/drive-sync.js.map +1 -1
  244. package/dist/lib/exec.d.ts +64 -3
  245. package/dist/lib/exec.d.ts.map +1 -1
  246. package/dist/lib/exec.js +218 -80
  247. package/dist/lib/exec.js.map +1 -1
  248. package/dist/lib/factory/__tests__/config.test.d.ts +2 -0
  249. package/dist/lib/factory/__tests__/config.test.d.ts.map +1 -0
  250. package/dist/lib/factory/__tests__/config.test.js +128 -0
  251. package/dist/lib/factory/__tests__/config.test.js.map +1 -0
  252. package/dist/lib/factory/config.d.ts +49 -0
  253. package/dist/lib/factory/config.d.ts.map +1 -0
  254. package/dist/lib/factory/config.js +127 -0
  255. package/dist/lib/factory/config.js.map +1 -0
  256. package/dist/lib/factory.js +1 -1
  257. package/dist/lib/factory.js.map +1 -1
  258. package/dist/lib/git.d.ts +16 -1
  259. package/dist/lib/git.d.ts.map +1 -1
  260. package/dist/lib/git.js +33 -4
  261. package/dist/lib/git.js.map +1 -1
  262. package/dist/lib/help.d.ts +7 -0
  263. package/dist/lib/help.d.ts.map +1 -1
  264. package/dist/lib/help.js +3 -0
  265. package/dist/lib/help.js.map +1 -1
  266. package/dist/lib/hooks.d.ts +59 -3
  267. package/dist/lib/hooks.d.ts.map +1 -1
  268. package/dist/lib/hooks.js +413 -33
  269. package/dist/lib/hooks.js.map +1 -1
  270. package/dist/lib/ledger/__tests__/local.test.d.ts +2 -0
  271. package/dist/lib/ledger/__tests__/local.test.d.ts.map +1 -0
  272. package/dist/lib/ledger/__tests__/local.test.js +177 -0
  273. package/dist/lib/ledger/__tests__/local.test.js.map +1 -0
  274. package/dist/lib/ledger/__tests__/sync.test.d.ts +2 -0
  275. package/dist/lib/ledger/__tests__/sync.test.d.ts.map +1 -0
  276. package/dist/lib/ledger/__tests__/sync.test.js +117 -0
  277. package/dist/lib/ledger/__tests__/sync.test.js.map +1 -0
  278. package/dist/lib/ledger/index.d.ts +18 -0
  279. package/dist/lib/ledger/index.d.ts.map +1 -0
  280. package/dist/lib/ledger/index.js +32 -0
  281. package/dist/lib/ledger/index.js.map +1 -0
  282. package/dist/lib/ledger/local.d.ts +22 -0
  283. package/dist/lib/ledger/local.d.ts.map +1 -0
  284. package/dist/lib/ledger/local.js +333 -0
  285. package/dist/lib/ledger/local.js.map +1 -0
  286. package/dist/lib/ledger/r2.d.ts +41 -0
  287. package/dist/lib/ledger/r2.d.ts.map +1 -0
  288. package/dist/lib/ledger/r2.js +335 -0
  289. package/dist/lib/ledger/r2.js.map +1 -0
  290. package/dist/lib/ledger/sync.d.ts +33 -0
  291. package/dist/lib/ledger/sync.d.ts.map +1 -0
  292. package/dist/lib/ledger/sync.js +106 -0
  293. package/dist/lib/ledger/sync.js.map +1 -0
  294. package/dist/lib/ledger/types.d.ts +100 -0
  295. package/dist/lib/ledger/types.d.ts.map +1 -0
  296. package/dist/lib/ledger/types.js +21 -0
  297. package/dist/lib/ledger/types.js.map +1 -0
  298. package/dist/lib/manifest.d.ts +6 -0
  299. package/dist/lib/manifest.d.ts.map +1 -1
  300. package/dist/lib/manifest.js +12 -0
  301. package/dist/lib/manifest.js.map +1 -1
  302. package/dist/lib/markdown.d.ts.map +1 -1
  303. package/dist/lib/markdown.js +6 -0
  304. package/dist/lib/markdown.js.map +1 -1
  305. package/dist/lib/mcp.d.ts +0 -9
  306. package/dist/lib/mcp.d.ts.map +1 -1
  307. package/dist/lib/mcp.js +0 -20
  308. package/dist/lib/mcp.js.map +1 -1
  309. package/dist/lib/memory-compile.d.ts +65 -0
  310. package/dist/lib/memory-compile.d.ts.map +1 -0
  311. package/dist/lib/memory-compile.js +174 -0
  312. package/dist/lib/memory-compile.js.map +1 -0
  313. package/dist/lib/memory.d.ts +8 -0
  314. package/dist/lib/memory.d.ts.map +1 -1
  315. package/dist/lib/memory.js +8 -0
  316. package/dist/lib/memory.js.map +1 -1
  317. package/dist/lib/models.d.ts +98 -0
  318. package/dist/lib/models.d.ts.map +1 -0
  319. package/dist/lib/models.js +722 -0
  320. package/dist/lib/models.js.map +1 -0
  321. package/dist/lib/permissions.d.ts +3 -1
  322. package/dist/lib/permissions.d.ts.map +1 -1
  323. package/dist/lib/permissions.js +13 -3
  324. package/dist/lib/permissions.js.map +1 -1
  325. package/dist/lib/picker.d.ts +27 -0
  326. package/dist/lib/picker.d.ts.map +1 -0
  327. package/dist/lib/picker.js +110 -0
  328. package/dist/lib/picker.js.map +1 -0
  329. package/dist/lib/plugins.d.ts +22 -0
  330. package/dist/lib/plugins.d.ts.map +1 -1
  331. package/dist/lib/plugins.js +114 -0
  332. package/dist/lib/plugins.js.map +1 -1
  333. package/dist/lib/profiles-keychain.d.ts +11 -0
  334. package/dist/lib/profiles-keychain.d.ts.map +1 -0
  335. package/dist/lib/profiles-keychain.js +14 -0
  336. package/dist/lib/profiles-keychain.js.map +1 -0
  337. package/dist/lib/profiles-presets.d.ts +25 -0
  338. package/dist/lib/profiles-presets.d.ts.map +1 -0
  339. package/dist/lib/profiles-presets.js +104 -0
  340. package/dist/lib/profiles-presets.js.map +1 -0
  341. package/dist/lib/profiles.d.ts +70 -0
  342. package/dist/lib/profiles.d.ts.map +1 -0
  343. package/dist/lib/profiles.js +145 -0
  344. package/dist/lib/profiles.js.map +1 -0
  345. package/dist/lib/pty-client.d.ts +1 -0
  346. package/dist/lib/pty-client.d.ts.map +1 -1
  347. package/dist/lib/pty-client.js.map +1 -1
  348. package/dist/lib/pty-server.d.ts +5 -0
  349. package/dist/lib/pty-server.d.ts.map +1 -1
  350. package/dist/lib/pty-server.js +5 -0
  351. package/dist/lib/pty-server.js.map +1 -1
  352. package/dist/lib/registry.d.ts +17 -0
  353. package/dist/lib/registry.d.ts.map +1 -1
  354. package/dist/lib/registry.js +17 -0
  355. package/dist/lib/registry.js.map +1 -1
  356. package/dist/lib/resources.d.ts +5 -0
  357. package/dist/lib/resources.d.ts.map +1 -1
  358. package/dist/lib/resources.js.map +1 -1
  359. package/dist/lib/rotate.d.ts +58 -0
  360. package/dist/lib/rotate.d.ts.map +1 -0
  361. package/dist/lib/rotate.js +93 -0
  362. package/dist/lib/rotate.js.map +1 -0
  363. package/dist/lib/routines.d.ts +30 -1
  364. package/dist/lib/routines.d.ts.map +1 -1
  365. package/dist/lib/routines.js +31 -4
  366. package/dist/lib/routines.js.map +1 -1
  367. package/dist/lib/runner.d.ts +14 -0
  368. package/dist/lib/runner.d.ts.map +1 -1
  369. package/dist/lib/runner.js +45 -11
  370. package/dist/lib/runner.js.map +1 -1
  371. package/dist/lib/sandbox.d.ts +16 -0
  372. package/dist/lib/sandbox.d.ts.map +1 -1
  373. package/dist/lib/sandbox.js +19 -2
  374. package/dist/lib/sandbox.js.map +1 -1
  375. package/dist/lib/scheduler.d.ts +8 -0
  376. package/dist/lib/scheduler.d.ts.map +1 -1
  377. package/dist/lib/scheduler.js +8 -0
  378. package/dist/lib/scheduler.js.map +1 -1
  379. package/dist/lib/secrets-bundles.d.ts +38 -0
  380. package/dist/lib/secrets-bundles.d.ts.map +1 -0
  381. package/dist/lib/secrets-bundles.js +176 -0
  382. package/dist/lib/secrets-bundles.js.map +1 -0
  383. package/dist/lib/secrets.d.ts +53 -0
  384. package/dist/lib/secrets.d.ts.map +1 -0
  385. package/dist/lib/secrets.js +140 -0
  386. package/dist/lib/secrets.js.map +1 -0
  387. package/dist/lib/session/__tests__/db.test.d.ts +2 -0
  388. package/dist/lib/session/__tests__/db.test.d.ts.map +1 -0
  389. package/dist/lib/session/__tests__/db.test.js +54 -0
  390. package/dist/lib/session/__tests__/db.test.js.map +1 -0
  391. package/dist/lib/session/__tests__/discover.test.js +54 -91
  392. package/dist/lib/session/__tests__/discover.test.js.map +1 -1
  393. package/dist/lib/session/__tests__/prompt.test.d.ts +2 -0
  394. package/dist/lib/session/__tests__/prompt.test.d.ts.map +1 -0
  395. package/dist/lib/session/__tests__/prompt.test.js +44 -0
  396. package/dist/lib/session/__tests__/prompt.test.js.map +1 -0
  397. package/dist/lib/session/__tests__/render.test.d.ts +2 -0
  398. package/dist/lib/session/__tests__/render.test.d.ts.map +1 -0
  399. package/dist/lib/session/__tests__/render.test.js +602 -0
  400. package/dist/lib/session/__tests__/render.test.js.map +1 -0
  401. package/dist/lib/session/artifacts.d.ts +15 -0
  402. package/dist/lib/session/artifacts.d.ts.map +1 -0
  403. package/dist/lib/session/artifacts.js +86 -0
  404. package/dist/lib/session/artifacts.js.map +1 -0
  405. package/dist/lib/session/db.d.ts +140 -0
  406. package/dist/lib/session/db.d.ts.map +1 -0
  407. package/dist/lib/session/db.js +599 -0
  408. package/dist/lib/session/db.js.map +1 -0
  409. package/dist/lib/session/discover.d.ts +44 -32
  410. package/dist/lib/session/discover.d.ts.map +1 -1
  411. package/dist/lib/session/discover.js +418 -464
  412. package/dist/lib/session/discover.js.map +1 -1
  413. package/dist/lib/session/parse.d.ts +11 -0
  414. package/dist/lib/session/parse.d.ts.map +1 -1
  415. package/dist/lib/session/parse.js +50 -0
  416. package/dist/lib/session/parse.js.map +1 -1
  417. package/dist/lib/session/prompt.d.ts +10 -0
  418. package/dist/lib/session/prompt.d.ts.map +1 -1
  419. package/dist/lib/session/prompt.js +38 -2
  420. package/dist/lib/session/prompt.js.map +1 -1
  421. package/dist/lib/session/prompt.test.d.ts +2 -0
  422. package/dist/lib/session/prompt.test.d.ts.map +1 -0
  423. package/dist/lib/session/prompt.test.js +57 -0
  424. package/dist/lib/session/prompt.test.js.map +1 -0
  425. package/dist/lib/session/render.d.ts +91 -10
  426. package/dist/lib/session/render.d.ts.map +1 -1
  427. package/dist/lib/session/render.js +708 -180
  428. package/dist/lib/session/render.js.map +1 -1
  429. package/dist/lib/session/team-filter.d.ts +35 -0
  430. package/dist/lib/session/team-filter.d.ts.map +1 -0
  431. package/dist/lib/session/team-filter.js +75 -0
  432. package/dist/lib/session/team-filter.js.map +1 -0
  433. package/dist/lib/session/team-filter.test.d.ts +2 -0
  434. package/dist/lib/session/team-filter.test.d.ts.map +1 -0
  435. package/dist/lib/session/team-filter.test.js +157 -0
  436. package/dist/lib/session/team-filter.test.js.map +1 -0
  437. package/dist/lib/session/types.d.ts +48 -6
  438. package/dist/lib/session/types.d.ts.map +1 -1
  439. package/dist/lib/session/types.js +9 -0
  440. package/dist/lib/session/types.js.map +1 -1
  441. package/dist/lib/shims.d.ts +73 -2
  442. package/dist/lib/shims.d.ts.map +1 -1
  443. package/dist/lib/shims.js +171 -25
  444. package/dist/lib/shims.js.map +1 -1
  445. package/dist/lib/skills.d.ts +68 -0
  446. package/dist/lib/skills.d.ts.map +1 -1
  447. package/dist/lib/skills.js +267 -1
  448. package/dist/lib/skills.js.map +1 -1
  449. package/dist/lib/state.d.ts +41 -2
  450. package/dist/lib/state.d.ts.map +1 -1
  451. package/dist/lib/state.js +63 -4
  452. package/dist/lib/state.js.map +1 -1
  453. package/dist/lib/subagents.d.ts +9 -0
  454. package/dist/lib/subagents.d.ts.map +1 -1
  455. package/dist/lib/subagents.js +9 -1
  456. package/dist/lib/subagents.js.map +1 -1
  457. package/dist/lib/teams/__tests__/oracle.test.d.ts +2 -0
  458. package/dist/lib/teams/__tests__/oracle.test.d.ts.map +1 -0
  459. package/dist/lib/teams/__tests__/oracle.test.js +89 -0
  460. package/dist/lib/teams/__tests__/oracle.test.js.map +1 -0
  461. package/dist/lib/teams/__tests__/supervisor.test.d.ts +2 -0
  462. package/dist/lib/teams/__tests__/supervisor.test.d.ts.map +1 -0
  463. package/dist/lib/teams/__tests__/supervisor.test.js +179 -0
  464. package/dist/lib/teams/__tests__/supervisor.test.js.map +1 -0
  465. package/dist/lib/teams/agents.d.ts +247 -0
  466. package/dist/lib/teams/agents.d.ts.map +1 -0
  467. package/dist/lib/teams/agents.js +1244 -0
  468. package/dist/lib/teams/agents.js.map +1 -0
  469. package/dist/lib/teams/api.d.ts +91 -0
  470. package/dist/lib/teams/api.d.ts.map +1 -0
  471. package/dist/lib/teams/api.js +239 -0
  472. package/dist/lib/teams/api.js.map +1 -0
  473. package/dist/lib/teams/cloud.d.ts +11 -0
  474. package/dist/lib/teams/cloud.d.ts.map +1 -0
  475. package/dist/lib/teams/cloud.js +169 -0
  476. package/dist/lib/teams/cloud.js.map +1 -0
  477. package/dist/lib/teams/debug.d.ts +8 -0
  478. package/dist/lib/teams/debug.d.ts.map +1 -0
  479. package/dist/lib/teams/debug.js +12 -0
  480. package/dist/lib/teams/debug.js.map +1 -0
  481. package/dist/lib/teams/file_ops.d.ts +13 -0
  482. package/dist/lib/teams/file_ops.d.ts.map +1 -0
  483. package/dist/lib/teams/file_ops.js +66 -0
  484. package/dist/lib/teams/file_ops.js.map +1 -0
  485. package/dist/lib/teams/index.d.ts +16 -0
  486. package/dist/lib/teams/index.d.ts.map +1 -0
  487. package/dist/lib/teams/index.js +15 -0
  488. package/dist/lib/teams/index.js.map +1 -0
  489. package/dist/lib/teams/oracle.d.ts +20 -0
  490. package/dist/lib/teams/oracle.d.ts.map +1 -0
  491. package/dist/lib/teams/oracle.js +59 -0
  492. package/dist/lib/teams/oracle.js.map +1 -0
  493. package/dist/lib/teams/parsers.d.ts +9 -0
  494. package/dist/lib/teams/parsers.d.ts.map +1 -0
  495. package/dist/lib/teams/parsers.js +837 -0
  496. package/dist/lib/teams/parsers.js.map +1 -0
  497. package/dist/lib/teams/persistence.d.ts +43 -0
  498. package/dist/lib/teams/persistence.d.ts.map +1 -0
  499. package/dist/lib/teams/persistence.js +299 -0
  500. package/dist/lib/teams/persistence.js.map +1 -0
  501. package/dist/lib/teams/ralph.d.ts +8 -0
  502. package/dist/lib/teams/ralph.d.ts.map +1 -0
  503. package/dist/lib/teams/ralph.js +59 -0
  504. package/dist/lib/teams/ralph.js.map +1 -0
  505. package/dist/lib/teams/registry.d.ts +18 -0
  506. package/dist/lib/teams/registry.d.ts.map +1 -0
  507. package/dist/lib/teams/registry.js +68 -0
  508. package/dist/lib/teams/registry.js.map +1 -0
  509. package/dist/lib/teams/summarizer.d.ts +73 -0
  510. package/dist/lib/teams/summarizer.d.ts.map +1 -0
  511. package/dist/lib/teams/summarizer.js +780 -0
  512. package/dist/lib/teams/summarizer.js.map +1 -0
  513. package/dist/lib/teams/supervisor.d.ts +49 -0
  514. package/dist/lib/teams/supervisor.d.ts.map +1 -0
  515. package/dist/lib/teams/supervisor.js +74 -0
  516. package/dist/lib/teams/supervisor.js.map +1 -0
  517. package/dist/lib/template.d.ts +8 -5
  518. package/dist/lib/template.d.ts.map +1 -1
  519. package/dist/lib/template.js +8 -5
  520. package/dist/lib/template.js.map +1 -1
  521. package/dist/lib/types.d.ts +58 -1
  522. package/dist/lib/types.d.ts.map +1 -1
  523. package/dist/lib/types.js +16 -1
  524. package/dist/lib/types.js.map +1 -1
  525. package/dist/lib/usage.d.ts +48 -0
  526. package/dist/lib/usage.d.ts.map +1 -1
  527. package/dist/lib/usage.js +103 -11
  528. package/dist/lib/usage.js.map +1 -1
  529. package/dist/lib/versions.d.ts +12 -1
  530. package/dist/lib/versions.d.ts.map +1 -1
  531. package/dist/lib/versions.js +91 -35
  532. package/dist/lib/versions.js.map +1 -1
  533. package/package.json +20 -6
  534. package/scripts/postinstall.js +1 -1
  535. package/scripts/rebuild-sqlite.sh +46 -0
  536. package/dist/commands/sessions.test.d.ts +0 -2
  537. package/dist/commands/sessions.test.d.ts.map +0 -1
  538. package/dist/commands/sessions.test.js +0 -53
  539. package/dist/commands/sessions.test.js.map +0 -1
package/dist/lib/exec.js CHANGED
@@ -1,8 +1,18 @@
1
+ /**
2
+ * Agent execution -- command building, process spawning, and rate-limit fallback.
3
+ *
4
+ * Translates high-level ExecOptions into CLI invocations for each supported agent,
5
+ * manages environment isolation per agent, and chains fallback agents on rate limits.
6
+ */
1
7
  import { spawn } from 'child_process';
8
+ import { randomUUID } from 'crypto';
2
9
  import * as path from 'path';
3
10
  import { parseTimeout } from './routines.js';
4
11
  import { getVersionHomePath, isVersionInstalled, resolveVersion } from './versions.js';
12
+ import { resolveModel, buildReasoningFlags } from './models.js';
13
+ /** Pattern for valid environment variable names (C identifier rules). */
5
14
  const EXEC_ENV_KEY_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
15
+ /** Parse a single KEY=VALUE string into a tuple, validating the key name. */
6
16
  function parseExecEnvEntry(entry) {
7
17
  const separatorIndex = entry.indexOf('=');
8
18
  if (separatorIndex <= 0) {
@@ -15,85 +25,40 @@ function parseExecEnvEntry(entry) {
15
25
  }
16
26
  return [key, value];
17
27
  }
28
+ /** Parse an array of KEY=VALUE strings into an env record. Returns undefined for empty input. */
18
29
  export function parseExecEnv(entries) {
19
30
  if (entries.length === 0) {
20
31
  return undefined;
21
32
  }
22
33
  return Object.fromEntries(entries.map(parseExecEnvEntry));
23
34
  }
35
+ /**
36
+ * Build the process environment for an agent invocation.
37
+ * Pins CLAUDE_CONFIG_DIR for Claude agents and strips it for all others.
38
+ */
24
39
  export function buildExecEnv(options) {
25
- const managedEnv = {};
40
+ const result = { ...process.env };
41
+ // CLAUDE_CONFIG_DIR is Claude-specific. When the caller is running inside
42
+ // a Claude-managed shell, process.env already carries it; spreading into a
43
+ // non-Claude agent's env would leak a config pointer that the target CLI
44
+ // doesn't understand. Strip it unless we're actually invoking Claude, and
45
+ // when we are, pin it to the resolved version's home.
26
46
  if (options.agent === 'claude') {
27
47
  const cwd = options.cwd || process.cwd();
28
48
  const version = options.version || resolveVersion('claude', cwd);
29
49
  if (version && isVersionInstalled('claude', version)) {
30
- managedEnv.CLAUDE_CONFIG_DIR = path.join(getVersionHomePath('claude', version), '.claude');
50
+ result.CLAUDE_CONFIG_DIR = path.join(getVersionHomePath('claude', version), '.claude');
31
51
  }
32
52
  }
53
+ else {
54
+ delete result.CLAUDE_CONFIG_DIR;
55
+ }
33
56
  return {
34
- ...process.env,
35
- ...managedEnv,
57
+ ...result,
36
58
  ...options.env,
37
59
  };
38
60
  }
39
- // Model mapping per agent per effort level
40
- export const EFFORT_MODELS = {
41
- claude: {
42
- fast: 'claude-haiku-4-5-20251001',
43
- default: 'claude-sonnet-4-5',
44
- detailed: 'claude-opus-4-5',
45
- },
46
- codex: {
47
- fast: 'gpt-4o-mini',
48
- default: 'gpt-5.2-codex',
49
- detailed: 'gpt-5.1-codex-max',
50
- },
51
- gemini: {
52
- fast: 'gemini-3-flash-preview',
53
- default: 'gemini-3-flash-preview',
54
- detailed: 'gemini-3-pro-preview',
55
- },
56
- cursor: {
57
- fast: 'composer-1',
58
- default: 'composer-1',
59
- detailed: 'composer-1',
60
- },
61
- opencode: {
62
- fast: 'zai-coding-plan/glm-4.7-flash',
63
- default: 'zai-coding-plan/glm-4.7',
64
- detailed: 'zai-coding-plan/glm-4.7',
65
- },
66
- openclaw: {
67
- fast: 'claude-haiku-4-5-20251001',
68
- default: 'claude-sonnet-4-5',
69
- detailed: 'claude-opus-4-5',
70
- },
71
- copilot: {
72
- fast: 'gpt-4o-mini',
73
- default: 'gpt-4o',
74
- detailed: 'claude-sonnet-4-5',
75
- },
76
- amp: {
77
- fast: 'claude-haiku-4-5-20251001',
78
- default: 'claude-sonnet-4-5',
79
- detailed: 'claude-opus-4-5',
80
- },
81
- kiro: {
82
- fast: 'claude-haiku-4-5-20251001',
83
- default: 'claude-sonnet-4-5',
84
- detailed: 'claude-opus-4-5',
85
- },
86
- goose: {
87
- fast: 'gpt-4o-mini',
88
- default: 'gpt-4o',
89
- detailed: 'claude-sonnet-4-5',
90
- },
91
- roo: {
92
- fast: 'claude-haiku-4-5-20251001',
93
- default: 'claude-sonnet-4-5',
94
- detailed: 'claude-opus-4-5',
95
- },
96
- };
61
+ /** CLI command templates for every supported agent. */
97
62
  export const AGENT_COMMANDS = {
98
63
  claude: {
99
64
  base: ['claude'],
@@ -213,28 +178,56 @@ export const AGENT_COMMANDS = {
213
178
  modelFlag: '--model',
214
179
  },
215
180
  };
181
+ /** Assemble the full CLI argument array for an agent invocation. */
216
182
  export function buildExecCommand(options) {
217
183
  const template = AGENT_COMMANDS[options.agent];
218
184
  const cmd = [...template.base];
185
+ const interactive = options.prompt === undefined;
219
186
  // Use versioned alias if a specific version was requested (e.g., claude@2.1.98)
220
187
  if (options.version && cmd.length > 0) {
221
188
  cmd[0] = `${cmd[0]}@${options.version}`;
222
189
  }
190
+ // Add reasoning effort flags (before mode flags for codex -c positioning)
191
+ // For codex, -c must come before 'exec' subcommand, so we insert at position 1
192
+ if (options.effort !== 'auto') {
193
+ const reasoningFlags = buildReasoningFlags(options.agent, options.effort);
194
+ if (reasoningFlags.length > 0) {
195
+ if (options.agent === 'codex') {
196
+ // Insert after 'codex' (or 'codex@version') but before 'exec'
197
+ cmd.splice(1, 0, ...reasoningFlags);
198
+ }
199
+ else {
200
+ // For other agents, append after base
201
+ cmd.push(...reasoningFlags);
202
+ }
203
+ }
204
+ }
223
205
  // Add mode flags
224
206
  const modeFlags = template.modeFlags[options.mode];
225
207
  cmd.push(...modeFlags);
226
- // Add print/headless flags
227
- if (options.headless && template.printFlags) {
208
+ // Add print/headless flags only when a prompt is provided. Without a prompt
209
+ // the caller wants an interactive REPL -- passing --print would immediately
210
+ // wait on stdin and never render the TUI.
211
+ if (!interactive && options.headless && template.printFlags) {
228
212
  cmd.push(...template.printFlags);
229
213
  }
230
214
  // Add session ID (Claude only)
231
215
  if (options.sessionId && options.agent === 'claude') {
232
216
  cmd.push('--session-id', options.sessionId);
233
217
  }
234
- // Add model (from explicit option or effort mapping)
235
- const model = options.model || EFFORT_MODELS[options.agent][options.effort];
236
- if (model && template.modelFlag) {
237
- cmd.push(template.modelFlag, model);
218
+ // Add model (only if explicitly provided by user)
219
+ if (options.model && template.modelFlag) {
220
+ const effectiveVersion = options.version || resolveVersion(options.agent, options.cwd || process.cwd());
221
+ if (effectiveVersion) {
222
+ const resolved = resolveModel(options.agent, effectiveVersion, options.model);
223
+ if (resolved.warning) {
224
+ process.stderr.write(`[agents] ${resolved.warning}\n`);
225
+ }
226
+ cmd.push(template.modelFlag, resolved.forwarded);
227
+ }
228
+ else {
229
+ cmd.push(template.modelFlag, options.model);
230
+ }
238
231
  }
239
232
  // Add JSON output flags if requested
240
233
  if (options.json && template.jsonFlags) {
@@ -247,12 +240,14 @@ export function buildExecCommand(options) {
247
240
  cmd.push(template.verboseFlag);
248
241
  }
249
242
  }
250
- // Add prompt
251
- if (template.promptFlag === 'positional') {
252
- cmd.push(options.prompt);
253
- }
254
- else {
255
- cmd.push(template.promptFlag, options.prompt);
243
+ // Add prompt (skipped in interactive mode so the CLI launches its TUI)
244
+ if (!interactive) {
245
+ if (template.promptFlag === 'positional') {
246
+ cmd.push(options.prompt);
247
+ }
248
+ else {
249
+ cmd.push(template.promptFlag, options.prompt);
250
+ }
256
251
  }
257
252
  // Claude-specific: add dirs
258
253
  if (options.agent === 'claude' && options.addDirs) {
@@ -262,24 +257,57 @@ export function buildExecCommand(options) {
262
257
  }
263
258
  return cmd;
264
259
  }
260
+ /** Spawn an agent and return its exit code. Convenience wrapper over spawnAgent. */
265
261
  export async function execAgent(options) {
262
+ const { exitCode } = await spawnAgent(options);
263
+ return exitCode;
264
+ }
265
+ /**
266
+ * Spawn an agent process and return its exit code plus a tee'd copy of stderr.
267
+ *
268
+ * Stderr is always piped so the caller can inspect it (e.g., for rate-limit
269
+ * detection) while also forwarding every chunk to process.stderr in real time --
270
+ * the user sees the same output they would with stdio: 'inherit'. Stdout keeps
271
+ * the original behavior: 'pipe' when downstream output is piped (so `agents
272
+ * run ... | ...` composes cleanly), otherwise 'inherit' so TTY output is
273
+ * unbuffered.
274
+ */
275
+ async function spawnAgent(options) {
266
276
  const cmd = buildExecCommand(options);
267
277
  const [executable, ...args] = cmd;
268
278
  const timeoutMs = options.timeout ? parseTimeout(options.timeout) : undefined;
269
- // When stdout is piped, separate agent output (stdout) from status (stderr)
270
- // so `agents exec claude "..." | agents exec codex "..."` works cleanly.
271
- // When interactive (TTY), inherit everything for the full experience.
272
279
  const piped = !process.stdout.isTTY;
280
+ const interactive = options.prompt === undefined;
273
281
  return new Promise((resolve, reject) => {
282
+ // Interactive mode inherits all stdio so the CLI owns the TTY (TUI
283
+ // rendering, raw-mode keystrokes, colored output). Headless mode pipes
284
+ // stderr so we can scan for rate limits and feed fallback. stdout stays
285
+ // inherited for TTY, piped when the caller pipes us downstream.
286
+ const stdio = interactive
287
+ ? ['inherit', 'inherit', 'inherit']
288
+ : ['inherit', piped ? 'pipe' : 'inherit', 'pipe'];
274
289
  const child = spawn(executable, args, {
275
290
  cwd: options.cwd || process.cwd(),
276
- stdio: piped ? ['inherit', 'pipe', 'inherit'] : 'inherit',
291
+ stdio,
277
292
  env: buildExecEnv(options),
278
293
  shell: false,
279
294
  });
280
- if (piped && child.stdout) {
295
+ if (!interactive && piped && child.stdout) {
281
296
  child.stdout.pipe(process.stdout);
282
297
  }
298
+ let stderrBuffer = '';
299
+ const STDERR_BUFFER_CAP = 64 * 1024;
300
+ if (!interactive && child.stderr) {
301
+ child.stderr.on('data', (chunk) => {
302
+ process.stderr.write(chunk);
303
+ if (stderrBuffer.length < STDERR_BUFFER_CAP) {
304
+ stderrBuffer += chunk.toString('utf-8');
305
+ if (stderrBuffer.length > STDERR_BUFFER_CAP) {
306
+ stderrBuffer = stderrBuffer.slice(-STDERR_BUFFER_CAP);
307
+ }
308
+ }
309
+ });
310
+ }
283
311
  let timer;
284
312
  if (timeoutMs) {
285
313
  timer = setTimeout(() => {
@@ -295,8 +323,118 @@ export async function execAgent(options) {
295
323
  child.on('close', (code) => {
296
324
  if (timer)
297
325
  clearTimeout(timer);
298
- resolve(code ?? 0);
326
+ resolve({ exitCode: code ?? 0, stderr: stderrBuffer });
299
327
  });
300
328
  });
301
329
  }
330
+ /**
331
+ * Patterns that indicate a rate/usage limit. Matching is intentionally broad
332
+ * because providers phrase these differently -- Anthropic uses "5-hour limit"
333
+ * and "rate limit", OpenAI surfaces 429s, Google says "quota exceeded".
334
+ * False positives here just trigger a fallback attempt; false negatives leave
335
+ * the original error unhandled, which is worse.
336
+ */
337
+ export const RATE_LIMIT_PATTERNS = [
338
+ /rate[\s-]?limit/i,
339
+ /usage[\s-]?limit/i,
340
+ /quota\s*(exceeded|reached|limit)/i,
341
+ /\b429\b/,
342
+ /5[\s-]?hour[\s-]?limit/i,
343
+ /too many requests/i,
344
+ /api[\s_-]?overloaded/i,
345
+ /\boverloaded\b/i,
346
+ ];
347
+ /** Return true if the text contains any known rate-limit or overload indicator. */
348
+ export function detectRateLimit(text) {
349
+ return RATE_LIMIT_PATTERNS.some(pattern => pattern.test(text));
350
+ }
351
+ /**
352
+ * Build the prompt handed to the fallback agent when the primary was stopped
353
+ * mid-task by a rate limit.
354
+ *
355
+ * When the prior agent was Claude we pin its session ID via `--session-id` so
356
+ * `prevSessionId` is always defined; for other primaries we pass undefined and
357
+ * get a simpler retry-with-context prompt. Claude understands `/continue <id>`
358
+ * via its shipped skill -- other agents fall through to an explicit instruction
359
+ * that points at the version-agnostic `agents sessions <id>` reader.
360
+ */
361
+ export function buildFallbackPrompt(prevAgent, prevSessionId, nextAgent, originalPrompt) {
362
+ if (nextAgent === 'claude' && prevSessionId) {
363
+ return `/continue ${prevSessionId}`;
364
+ }
365
+ const lines = [
366
+ `The previous ${prevAgent} session was interrupted by a rate limit.`,
367
+ ];
368
+ if (prevSessionId) {
369
+ lines.push(``, `Prior session ID: ${prevSessionId}`, `Read the transcript by running: agents sessions ${prevSessionId}`);
370
+ }
371
+ lines.push(``, `Original request: ${originalPrompt}`, ``, `Continue from where the prior agent left off.`);
372
+ return lines.join('\n');
373
+ }
374
+ /**
375
+ * Run an agent and, on rate-limit failure, cascade through the fallback chain.
376
+ *
377
+ * The primary agent gets the original prompt. Subsequent agents get a
378
+ * `/continue <id>`-style handoff (see buildFallbackPrompt) when we can pin a
379
+ * session ID -- which today means Claude as primary (supports `--session-id`).
380
+ * For other primaries, fallbacks run with the original prompt plus a
381
+ * retry-with-context note, since we can't deterministically resolve their
382
+ * auto-generated session IDs.
383
+ *
384
+ * Only rate-limit failures cascade. Other errors (missing flag, auth failure,
385
+ * compile error) bubble up from the primary so the caller sees the real cause
386
+ * instead of an opaque "all agents failed" message.
387
+ */
388
+ export async function runWithFallback(options) {
389
+ const chain = [
390
+ { agent: options.agent, version: options.version },
391
+ ...options.fallback,
392
+ ];
393
+ let prevAgent;
394
+ let prevSessionId;
395
+ for (let i = 0; i < chain.length; i++) {
396
+ const { agent, version } = chain[i];
397
+ const pinnedSessionId = agent === 'claude' ? randomUUID() : undefined;
398
+ const prompt = prevAgent
399
+ ? buildFallbackPrompt(prevAgent, prevSessionId, agent, options.prompt)
400
+ : options.prompt;
401
+ const execOpts = {
402
+ ...options,
403
+ agent,
404
+ version,
405
+ prompt,
406
+ sessionId: pinnedSessionId ?? (i === 0 ? options.sessionId : undefined),
407
+ };
408
+ const label = version ? `${agent}@${version}` : agent;
409
+ const banner = i === 0
410
+ ? `[agents] running ${label}`
411
+ : `[agents] fallback → ${label}`;
412
+ process.stderr.write(`${banner}${pinnedSessionId ? ` (session ${pinnedSessionId.slice(0, 8)})` : ''}\n`);
413
+ let result;
414
+ try {
415
+ result = await spawnAgent(execOpts);
416
+ }
417
+ catch (err) {
418
+ if (err.code === 'ENOENT' && i > 0) {
419
+ process.stderr.write(`[agents] ${label} not installed, skipping\n`);
420
+ continue;
421
+ }
422
+ throw err;
423
+ }
424
+ if (result.exitCode === 0)
425
+ return 0;
426
+ const isLast = i === chain.length - 1;
427
+ if (isLast)
428
+ return result.exitCode;
429
+ if (!detectRateLimit(result.stderr)) {
430
+ return result.exitCode;
431
+ }
432
+ const next = chain[i + 1];
433
+ const nextLabel = next.version ? `${next.agent}@${next.version}` : next.agent;
434
+ process.stderr.write(`[agents] ${label} hit rate limit. Handing off to ${nextLabel}...\n`);
435
+ prevAgent = agent;
436
+ prevSessionId = pinnedSessionId;
437
+ }
438
+ return 1;
439
+ }
302
440
  //# sourceMappingURL=exec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/lib/exec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/lib/exec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../../../src/lib/factory/__tests__/config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,128 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import * as fs from 'fs';
3
+ import * as fsp from 'fs/promises';
4
+ import * as path from 'path';
5
+ import * as os from 'os';
6
+ import { execSync } from 'child_process';
7
+ import { factoryConfigPath, readFactoryConfig, writeFactoryConfig, detectGitHubRepo, resolveDispatch, } from '../config.js';
8
+ // Tests point at a fake HOME so we never clobber the user's real config.
9
+ let fakeHome;
10
+ let origHome;
11
+ let cwd;
12
+ beforeEach(() => {
13
+ fakeHome = fs.mkdtempSync(path.join(os.tmpdir(), 'fac-cfg-'));
14
+ origHome = process.env.HOME;
15
+ process.env.HOME = fakeHome;
16
+ cwd = fs.mkdtempSync(path.join(os.tmpdir(), 'fac-cwd-'));
17
+ });
18
+ afterEach(() => {
19
+ if (origHome !== undefined)
20
+ process.env.HOME = origHome;
21
+ else
22
+ delete process.env.HOME;
23
+ fs.rmSync(fakeHome, { recursive: true, force: true });
24
+ fs.rmSync(cwd, { recursive: true, force: true });
25
+ });
26
+ describe('FactoryConfig — read/write', () => {
27
+ it('returns defaults when no file exists', async () => {
28
+ const cfg = await readFactoryConfig();
29
+ expect(cfg.cloud_priority).toEqual(['rush', 'codex', 'local']);
30
+ expect(cfg.auto_detect_repo).toBe(true);
31
+ expect(cfg.default_planner_agent).toBe('codex');
32
+ expect(cfg.supervisor_interval_seconds).toBe(8);
33
+ });
34
+ it('persists + reloads overrides, merging with defaults', async () => {
35
+ await writeFactoryConfig({ cloud_priority: ['codex', 'local'], supervisor_interval_seconds: 12 });
36
+ const cfg = await readFactoryConfig();
37
+ expect(cfg.cloud_priority).toEqual(['codex', 'local']);
38
+ expect(cfg.supervisor_interval_seconds).toBe(12);
39
+ // Untouched fields fall back to defaults.
40
+ expect(cfg.default_planner_agent).toBe('codex');
41
+ });
42
+ it('rejects bogus priority entries silently', async () => {
43
+ const p = factoryConfigPath();
44
+ await fsp.mkdir(path.dirname(p), { recursive: true });
45
+ await fsp.writeFile(p, JSON.stringify({ cloud_priority: ['hamster', 'rush'], supervisor_interval_seconds: 0 }));
46
+ const cfg = await readFactoryConfig();
47
+ // 'hamster' dropped, 'rush' kept. Interval 0 → falls back to default.
48
+ expect(cfg.cloud_priority).toEqual(['rush']);
49
+ expect(cfg.supervisor_interval_seconds).toBe(8);
50
+ });
51
+ it('falls back to defaults when the file is corrupt', async () => {
52
+ const p = factoryConfigPath();
53
+ await fsp.mkdir(path.dirname(p), { recursive: true });
54
+ await fsp.writeFile(p, '{{not json');
55
+ const cfg = await readFactoryConfig();
56
+ expect(cfg.cloud_priority).toEqual(['rush', 'codex', 'local']);
57
+ });
58
+ });
59
+ describe('detectGitHubRepo', () => {
60
+ it('parses https remotes', () => {
61
+ execSync('git init -q', { cwd });
62
+ execSync('git remote add origin https://github.com/acme/widgets.git', { cwd });
63
+ expect(detectGitHubRepo(cwd)).toBe('acme/widgets');
64
+ });
65
+ it('parses ssh remotes', () => {
66
+ execSync('git init -q', { cwd });
67
+ execSync('git remote add origin git@github.com:acme/widgets.git', { cwd });
68
+ expect(detectGitHubRepo(cwd)).toBe('acme/widgets');
69
+ });
70
+ it('returns null when not a git repo', () => {
71
+ expect(detectGitHubRepo(cwd)).toBeNull();
72
+ });
73
+ it('returns null when no origin remote', () => {
74
+ execSync('git init -q', { cwd });
75
+ expect(detectGitHubRepo(cwd)).toBeNull();
76
+ });
77
+ });
78
+ describe('resolveDispatch', () => {
79
+ beforeEach(() => {
80
+ // Make cwd a git repo with a detectable origin for the rush-path tests.
81
+ execSync('git init -q', { cwd });
82
+ execSync('git remote add origin https://github.com/acme/widgets.git', { cwd });
83
+ });
84
+ it('CLI --local wins over config', async () => {
85
+ await writeFactoryConfig({ cloud_priority: ['rush'] });
86
+ const r = await resolveDispatch(cwd, undefined, true, undefined);
87
+ expect(r.provider).toBe('local');
88
+ });
89
+ it('CLI --cloud wins over config and auto-detects repo for rush', async () => {
90
+ const r = await resolveDispatch(cwd, 'rush', false, undefined);
91
+ expect(r.provider).toBe('rush');
92
+ expect(r.repo).toBe('acme/widgets');
93
+ });
94
+ it('config priority picks the first viable provider', async () => {
95
+ await writeFactoryConfig({ cloud_priority: ['codex', 'local'] });
96
+ const r = await resolveDispatch(cwd, undefined, false, undefined);
97
+ expect(r.provider).toBe('codex');
98
+ });
99
+ it('rush priority skips to next when no repo can be detected', async () => {
100
+ // Use a non-git cwd to force rush to skip.
101
+ const noGit = fs.mkdtempSync(path.join(os.tmpdir(), 'no-git-'));
102
+ try {
103
+ await writeFactoryConfig({ cloud_priority: ['rush', 'codex'] });
104
+ const r = await resolveDispatch(noGit, undefined, false, undefined);
105
+ expect(r.considered).toEqual(['rush', 'codex']);
106
+ expect(r.provider).toBe('codex');
107
+ }
108
+ finally {
109
+ fs.rmSync(noGit, { recursive: true, force: true });
110
+ }
111
+ });
112
+ it('falls through to local when everything else skips', async () => {
113
+ await writeFactoryConfig({ cloud_priority: ['rush'] });
114
+ const noGit = fs.mkdtempSync(path.join(os.tmpdir(), 'no-git-'));
115
+ try {
116
+ const r = await resolveDispatch(noGit, undefined, false, undefined);
117
+ expect(r.provider).toBe('local');
118
+ }
119
+ finally {
120
+ fs.rmSync(noGit, { recursive: true, force: true });
121
+ }
122
+ });
123
+ it('explicit --repo wins over auto-detect', async () => {
124
+ const r = await resolveDispatch(cwd, 'rush', false, 'other/repo');
125
+ expect(r.repo).toBe('other/repo');
126
+ });
127
+ });
128
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../../../src/lib/factory/__tests__/config.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /** Dispatch backends in order of preference. First available wins. */
2
+ export type DispatchProvider = 'rush' | 'codex' | 'factory' | 'local';
3
+ export interface FactoryConfig {
4
+ /**
5
+ * Ordered list of dispatch backends to try. First entry is the default.
6
+ * `'local'` means run the teammate CLI on this machine.
7
+ */
8
+ cloud_priority: DispatchProvider[];
9
+ /**
10
+ * When true and the dispatch is `rush`, `factory start` auto-detects the
11
+ * repo from `git remote get-url origin` and forwards it as --repo.
12
+ */
13
+ auto_detect_repo: boolean;
14
+ /**
15
+ * Default agent type used for the Planner teammate. Workers can override.
16
+ */
17
+ default_planner_agent: 'claude' | 'codex' | 'gemini' | 'cursor' | 'opencode';
18
+ /**
19
+ * Seconds between supervisor waves when running `factory run` or the
20
+ * auto-launched supervisor from `factory start`.
21
+ */
22
+ supervisor_interval_seconds: number;
23
+ }
24
+ export declare function factoryConfigPath(): string;
25
+ /**
26
+ * Read the factory config, merging on-disk values with defaults. Missing
27
+ * file or invalid JSON silently returns defaults.
28
+ */
29
+ export declare function readFactoryConfig(): Promise<FactoryConfig>;
30
+ export declare function writeFactoryConfig(config: Partial<FactoryConfig>): Promise<FactoryConfig>;
31
+ /**
32
+ * Try to read `git remote get-url origin` in cwd and parse it into
33
+ * `<owner>/<repo>`. Returns null if not a git repo, no origin, or an
34
+ * unparseable URL.
35
+ */
36
+ export declare function detectGitHubRepo(cwd: string): string | null;
37
+ /**
38
+ * Resolve the dispatch decision for a factory operation given CLI overrides
39
+ * and config priority. Returns the first viable provider, auto-detected
40
+ * repo (if applicable), and a diagnostic list of providers that were
41
+ * considered.
42
+ */
43
+ export interface ResolvedDispatch {
44
+ provider: DispatchProvider;
45
+ repo?: string;
46
+ considered: DispatchProvider[];
47
+ }
48
+ export declare function resolveDispatch(cwd: string, cliCloud: string | undefined, cliLocal: boolean | undefined, cliRepo: string | undefined): Promise<ResolvedDispatch>;
49
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/factory/config.ts"],"names":[],"mappings":"AAaA,sEAAsE;AACtE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,cAAc,EAAE,gBAAgB,EAAE,CAAC;IAEnC;;;OAGG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,qBAAqB,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;IAE7E;;;OAGG;IACH,2BAA2B,EAAE,MAAM,CAAC;CACrC;AASD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC,CAmBhE;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAiB/F;AAoBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAc3D;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,EAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CA0B3B"}