@swarmify/agents-cli 1.13.4 → 1.14.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 (567) hide show
  1. package/README.md +2 -319
  2. package/bin/agents.js +2 -0
  3. package/package.json +13 -79
  4. package/scripts/postinstall.js +4 -71
  5. package/CHANGELOG.md +0 -316
  6. package/LICENSE +0 -21
  7. package/dist/commands/__tests__/sessions-tail.test.d.ts +0 -2
  8. package/dist/commands/__tests__/sessions-tail.test.d.ts.map +0 -1
  9. package/dist/commands/__tests__/sessions-tail.test.js +0 -108
  10. package/dist/commands/__tests__/sessions-tail.test.js.map +0 -1
  11. package/dist/commands/__tests__/sessions.test.d.ts +0 -2
  12. package/dist/commands/__tests__/sessions.test.d.ts.map +0 -1
  13. package/dist/commands/__tests__/sessions.test.js +0 -636
  14. package/dist/commands/__tests__/sessions.test.js.map +0 -1
  15. package/dist/commands/cloud.d.ts +0 -11
  16. package/dist/commands/cloud.d.ts.map +0 -1
  17. package/dist/commands/cloud.js +0 -363
  18. package/dist/commands/cloud.js.map +0 -1
  19. package/dist/commands/commands.d.ts +0 -12
  20. package/dist/commands/commands.d.ts.map +0 -1
  21. package/dist/commands/commands.js +0 -629
  22. package/dist/commands/commands.js.map +0 -1
  23. package/dist/commands/daemon.d.ts +0 -11
  24. package/dist/commands/daemon.d.ts.map +0 -1
  25. package/dist/commands/daemon.js +0 -119
  26. package/dist/commands/daemon.js.map +0 -1
  27. package/dist/commands/drive.d.ts +0 -11
  28. package/dist/commands/drive.d.ts.map +0 -1
  29. package/dist/commands/drive.js +0 -175
  30. package/dist/commands/drive.js.map +0 -1
  31. package/dist/commands/exec.d.ts +0 -11
  32. package/dist/commands/exec.d.ts.map +0 -1
  33. package/dist/commands/exec.js +0 -251
  34. package/dist/commands/exec.js.map +0 -1
  35. package/dist/commands/factory.d.ts +0 -11
  36. package/dist/commands/factory.d.ts.map +0 -1
  37. package/dist/commands/factory.js +0 -445
  38. package/dist/commands/factory.js.map +0 -1
  39. package/dist/commands/fork.d.ts +0 -11
  40. package/dist/commands/fork.d.ts.map +0 -1
  41. package/dist/commands/fork.js +0 -147
  42. package/dist/commands/fork.js.map +0 -1
  43. package/dist/commands/hooks.d.ts +0 -12
  44. package/dist/commands/hooks.d.ts.map +0 -1
  45. package/dist/commands/hooks.js +0 -690
  46. package/dist/commands/hooks.js.map +0 -1
  47. package/dist/commands/init.d.ts +0 -15
  48. package/dist/commands/init.d.ts.map +0 -1
  49. package/dist/commands/init.js +0 -137
  50. package/dist/commands/init.js.map +0 -1
  51. package/dist/commands/mcp.d.ts +0 -12
  52. package/dist/commands/mcp.d.ts.map +0 -1
  53. package/dist/commands/mcp.js +0 -583
  54. package/dist/commands/mcp.js.map +0 -1
  55. package/dist/commands/models.d.ts +0 -11
  56. package/dist/commands/models.d.ts.map +0 -1
  57. package/dist/commands/models.js +0 -170
  58. package/dist/commands/models.js.map +0 -1
  59. package/dist/commands/packages.d.ts +0 -11
  60. package/dist/commands/packages.d.ts.map +0 -1
  61. package/dist/commands/packages.js +0 -551
  62. package/dist/commands/packages.js.map +0 -1
  63. package/dist/commands/permissions.d.ts +0 -12
  64. package/dist/commands/permissions.d.ts.map +0 -1
  65. package/dist/commands/permissions.js +0 -724
  66. package/dist/commands/permissions.js.map +0 -1
  67. package/dist/commands/plugins.d.ts +0 -11
  68. package/dist/commands/plugins.d.ts.map +0 -1
  69. package/dist/commands/plugins.js +0 -393
  70. package/dist/commands/plugins.js.map +0 -1
  71. package/dist/commands/profiles.d.ts +0 -12
  72. package/dist/commands/profiles.d.ts.map +0 -1
  73. package/dist/commands/profiles.js +0 -255
  74. package/dist/commands/profiles.js.map +0 -1
  75. package/dist/commands/pty.d.ts +0 -21
  76. package/dist/commands/pty.d.ts.map +0 -1
  77. package/dist/commands/pty.js +0 -391
  78. package/dist/commands/pty.js.map +0 -1
  79. package/dist/commands/pull.d.ts +0 -11
  80. package/dist/commands/pull.d.ts.map +0 -1
  81. package/dist/commands/pull.js +0 -456
  82. package/dist/commands/pull.js.map +0 -1
  83. package/dist/commands/push.d.ts +0 -11
  84. package/dist/commands/push.d.ts.map +0 -1
  85. package/dist/commands/push.js +0 -188
  86. package/dist/commands/push.js.map +0 -1
  87. package/dist/commands/refresh-memory.d.ts +0 -16
  88. package/dist/commands/refresh-memory.d.ts.map +0 -1
  89. package/dist/commands/refresh-memory.js +0 -52
  90. package/dist/commands/refresh-memory.js.map +0 -1
  91. package/dist/commands/resource-view.d.ts +0 -39
  92. package/dist/commands/resource-view.d.ts.map +0 -1
  93. package/dist/commands/resource-view.js +0 -197
  94. package/dist/commands/resource-view.js.map +0 -1
  95. package/dist/commands/routines.d.ts +0 -11
  96. package/dist/commands/routines.d.ts.map +0 -1
  97. package/dist/commands/routines.js +0 -590
  98. package/dist/commands/routines.js.map +0 -1
  99. package/dist/commands/rules.d.ts +0 -12
  100. package/dist/commands/rules.d.ts.map +0 -1
  101. package/dist/commands/rules.js +0 -489
  102. package/dist/commands/rules.js.map +0 -1
  103. package/dist/commands/secrets.d.ts +0 -11
  104. package/dist/commands/secrets.d.ts.map +0 -1
  105. package/dist/commands/secrets.js +0 -352
  106. package/dist/commands/secrets.js.map +0 -1
  107. package/dist/commands/sessions-picker.d.ts +0 -18
  108. package/dist/commands/sessions-picker.d.ts.map +0 -1
  109. package/dist/commands/sessions-picker.js +0 -265
  110. package/dist/commands/sessions-picker.js.map +0 -1
  111. package/dist/commands/sessions-tail.d.ts +0 -20
  112. package/dist/commands/sessions-tail.d.ts.map +0 -1
  113. package/dist/commands/sessions-tail.js +0 -236
  114. package/dist/commands/sessions-tail.js.map +0 -1
  115. package/dist/commands/sessions.d.ts +0 -18
  116. package/dist/commands/sessions.d.ts.map +0 -1
  117. package/dist/commands/sessions.js +0 -1173
  118. package/dist/commands/sessions.js.map +0 -1
  119. package/dist/commands/skills.d.ts +0 -12
  120. package/dist/commands/skills.d.ts.map +0 -1
  121. package/dist/commands/skills.js +0 -717
  122. package/dist/commands/skills.js.map +0 -1
  123. package/dist/commands/status.d.ts +0 -10
  124. package/dist/commands/status.d.ts.map +0 -1
  125. package/dist/commands/status.js +0 -26
  126. package/dist/commands/status.js.map +0 -1
  127. package/dist/commands/subagents.d.ts +0 -11
  128. package/dist/commands/subagents.d.ts.map +0 -1
  129. package/dist/commands/subagents.js +0 -361
  130. package/dist/commands/subagents.js.map +0 -1
  131. package/dist/commands/sync.d.ts +0 -11
  132. package/dist/commands/sync.d.ts.map +0 -1
  133. package/dist/commands/sync.js +0 -70
  134. package/dist/commands/sync.js.map +0 -1
  135. package/dist/commands/teams-picker.d.ts +0 -18
  136. package/dist/commands/teams-picker.d.ts.map +0 -1
  137. package/dist/commands/teams-picker.js +0 -290
  138. package/dist/commands/teams-picker.js.map +0 -1
  139. package/dist/commands/teams.d.ts +0 -18
  140. package/dist/commands/teams.d.ts.map +0 -1
  141. package/dist/commands/teams.js +0 -1144
  142. package/dist/commands/teams.js.map +0 -1
  143. package/dist/commands/utils.d.ts +0 -45
  144. package/dist/commands/utils.d.ts.map +0 -1
  145. package/dist/commands/utils.js +0 -106
  146. package/dist/commands/utils.js.map +0 -1
  147. package/dist/commands/versions.d.ts +0 -11
  148. package/dist/commands/versions.d.ts.map +0 -1
  149. package/dist/commands/versions.js +0 -701
  150. package/dist/commands/versions.js.map +0 -1
  151. package/dist/commands/view.d.ts +0 -43
  152. package/dist/commands/view.d.ts.map +0 -1
  153. package/dist/commands/view.js +0 -894
  154. package/dist/commands/view.js.map +0 -1
  155. package/dist/index.d.ts +0 -9
  156. package/dist/index.d.ts.map +0 -1
  157. package/dist/index.js +0 -496
  158. package/dist/index.js.map +0 -1
  159. package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
  160. package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
  161. package/dist/lib/__tests__/bugfixes.test.js +0 -192
  162. package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
  163. package/dist/lib/__tests__/exec.test.d.ts +0 -2
  164. package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
  165. package/dist/lib/__tests__/exec.test.js +0 -446
  166. package/dist/lib/__tests__/exec.test.js.map +0 -1
  167. package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
  168. package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
  169. package/dist/lib/__tests__/git-sync.test.js +0 -138
  170. package/dist/lib/__tests__/git-sync.test.js.map +0 -1
  171. package/dist/lib/__tests__/hooks.test.d.ts +0 -2
  172. package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
  173. package/dist/lib/__tests__/hooks.test.js +0 -203
  174. package/dist/lib/__tests__/hooks.test.js.map +0 -1
  175. package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
  176. package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
  177. package/dist/lib/__tests__/memory-compile.test.js +0 -95
  178. package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
  179. package/dist/lib/__tests__/models.test.d.ts +0 -2
  180. package/dist/lib/__tests__/models.test.d.ts.map +0 -1
  181. package/dist/lib/__tests__/models.test.js +0 -239
  182. package/dist/lib/__tests__/models.test.js.map +0 -1
  183. package/dist/lib/__tests__/rotate.test.d.ts +0 -2
  184. package/dist/lib/__tests__/rotate.test.d.ts.map +0 -1
  185. package/dist/lib/__tests__/rotate.test.js +0 -80
  186. package/dist/lib/__tests__/rotate.test.js.map +0 -1
  187. package/dist/lib/__tests__/secrets-bundles.test.d.ts +0 -2
  188. package/dist/lib/__tests__/secrets-bundles.test.d.ts.map +0 -1
  189. package/dist/lib/__tests__/secrets-bundles.test.js +0 -104
  190. package/dist/lib/__tests__/secrets-bundles.test.js.map +0 -1
  191. package/dist/lib/__tests__/secrets.test.d.ts +0 -2
  192. package/dist/lib/__tests__/secrets.test.d.ts.map +0 -1
  193. package/dist/lib/__tests__/secrets.test.js +0 -90
  194. package/dist/lib/__tests__/secrets.test.js.map +0 -1
  195. package/dist/lib/__tests__/shims.test.d.ts +0 -2
  196. package/dist/lib/__tests__/shims.test.d.ts.map +0 -1
  197. package/dist/lib/__tests__/shims.test.js +0 -57
  198. package/dist/lib/__tests__/shims.test.js.map +0 -1
  199. package/dist/lib/__tests__/usage.test.d.ts +0 -2
  200. package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
  201. package/dist/lib/__tests__/usage.test.js +0 -220
  202. package/dist/lib/__tests__/usage.test.js.map +0 -1
  203. package/dist/lib/__tests__/versions.test.d.ts +0 -2
  204. package/dist/lib/__tests__/versions.test.d.ts.map +0 -1
  205. package/dist/lib/__tests__/versions.test.js +0 -63
  206. package/dist/lib/__tests__/versions.test.js.map +0 -1
  207. package/dist/lib/agents.d.ts +0 -158
  208. package/dist/lib/agents.d.ts.map +0 -1
  209. package/dist/lib/agents.js +0 -1159
  210. package/dist/lib/agents.js.map +0 -1
  211. package/dist/lib/artifact-actions.d.ts +0 -27
  212. package/dist/lib/artifact-actions.d.ts.map +0 -1
  213. package/dist/lib/artifact-actions.js +0 -58
  214. package/dist/lib/artifact-actions.js.map +0 -1
  215. package/dist/lib/cloud/codex.d.ts +0 -26
  216. package/dist/lib/cloud/codex.d.ts.map +0 -1
  217. package/dist/lib/cloud/codex.js +0 -237
  218. package/dist/lib/cloud/codex.js.map +0 -1
  219. package/dist/lib/cloud/factory.d.ts +0 -32
  220. package/dist/lib/cloud/factory.d.ts.map +0 -1
  221. package/dist/lib/cloud/factory.js +0 -43
  222. package/dist/lib/cloud/factory.js.map +0 -1
  223. package/dist/lib/cloud/registry.d.ts +0 -16
  224. package/dist/lib/cloud/registry.d.ts.map +0 -1
  225. package/dist/lib/cloud/registry.js +0 -68
  226. package/dist/lib/cloud/registry.js.map +0 -1
  227. package/dist/lib/cloud/rush.d.ts +0 -37
  228. package/dist/lib/cloud/rush.d.ts.map +0 -1
  229. package/dist/lib/cloud/rush.js +0 -230
  230. package/dist/lib/cloud/rush.js.map +0 -1
  231. package/dist/lib/cloud/rush.test.d.ts +0 -2
  232. package/dist/lib/cloud/rush.test.d.ts.map +0 -1
  233. package/dist/lib/cloud/rush.test.js +0 -63
  234. package/dist/lib/cloud/rush.test.js.map +0 -1
  235. package/dist/lib/cloud/store.d.ts +0 -23
  236. package/dist/lib/cloud/store.d.ts.map +0 -1
  237. package/dist/lib/cloud/store.js +0 -116
  238. package/dist/lib/cloud/store.js.map +0 -1
  239. package/dist/lib/cloud/stream.d.ts +0 -24
  240. package/dist/lib/cloud/stream.d.ts.map +0 -1
  241. package/dist/lib/cloud/stream.js +0 -145
  242. package/dist/lib/cloud/stream.js.map +0 -1
  243. package/dist/lib/cloud/types.d.ts +0 -109
  244. package/dist/lib/cloud/types.d.ts.map +0 -1
  245. package/dist/lib/cloud/types.js +0 -33
  246. package/dist/lib/cloud/types.js.map +0 -1
  247. package/dist/lib/cloud/types.test.d.ts +0 -2
  248. package/dist/lib/cloud/types.test.d.ts.map +0 -1
  249. package/dist/lib/cloud/types.test.js +0 -41
  250. package/dist/lib/cloud/types.test.js.map +0 -1
  251. package/dist/lib/commands.d.ts +0 -141
  252. package/dist/lib/commands.d.ts.map +0 -1
  253. package/dist/lib/commands.js +0 -514
  254. package/dist/lib/commands.js.map +0 -1
  255. package/dist/lib/convert.d.ts +0 -21
  256. package/dist/lib/convert.d.ts.map +0 -1
  257. package/dist/lib/convert.js +0 -54
  258. package/dist/lib/convert.js.map +0 -1
  259. package/dist/lib/daemon.d.ts +0 -43
  260. package/dist/lib/daemon.d.ts.map +0 -1
  261. package/dist/lib/daemon.js +0 -332
  262. package/dist/lib/daemon.js.map +0 -1
  263. package/dist/lib/drive-sync.d.ts +0 -46
  264. package/dist/lib/drive-sync.d.ts.map +0 -1
  265. package/dist/lib/drive-sync.js +0 -209
  266. package/dist/lib/drive-sync.js.map +0 -1
  267. package/dist/lib/exec.d.ts +0 -101
  268. package/dist/lib/exec.d.ts.map +0 -1
  269. package/dist/lib/exec.js +0 -450
  270. package/dist/lib/exec.js.map +0 -1
  271. package/dist/lib/factory/__tests__/config.test.d.ts +0 -2
  272. package/dist/lib/factory/__tests__/config.test.d.ts.map +0 -1
  273. package/dist/lib/factory/__tests__/config.test.js +0 -128
  274. package/dist/lib/factory/__tests__/config.test.js.map +0 -1
  275. package/dist/lib/factory/config.d.ts +0 -49
  276. package/dist/lib/factory/config.d.ts.map +0 -1
  277. package/dist/lib/factory/config.js +0 -127
  278. package/dist/lib/factory/config.js.map +0 -1
  279. package/dist/lib/factory.d.ts +0 -57
  280. package/dist/lib/factory.d.ts.map +0 -1
  281. package/dist/lib/factory.js +0 -107
  282. package/dist/lib/factory.js.map +0 -1
  283. package/dist/lib/git.d.ts +0 -157
  284. package/dist/lib/git.d.ts.map +0 -1
  285. package/dist/lib/git.js +0 -647
  286. package/dist/lib/git.js.map +0 -1
  287. package/dist/lib/help.d.ts +0 -10
  288. package/dist/lib/help.d.ts.map +0 -1
  289. package/dist/lib/help.js +0 -66
  290. package/dist/lib/help.js.map +0 -1
  291. package/dist/lib/hooks.d.ts +0 -125
  292. package/dist/lib/hooks.d.ts.map +0 -1
  293. package/dist/lib/hooks.js +0 -846
  294. package/dist/lib/hooks.js.map +0 -1
  295. package/dist/lib/ledger/__tests__/local.test.d.ts +0 -2
  296. package/dist/lib/ledger/__tests__/local.test.d.ts.map +0 -1
  297. package/dist/lib/ledger/__tests__/local.test.js +0 -177
  298. package/dist/lib/ledger/__tests__/local.test.js.map +0 -1
  299. package/dist/lib/ledger/__tests__/sync.test.d.ts +0 -2
  300. package/dist/lib/ledger/__tests__/sync.test.d.ts.map +0 -1
  301. package/dist/lib/ledger/__tests__/sync.test.js +0 -117
  302. package/dist/lib/ledger/__tests__/sync.test.js.map +0 -1
  303. package/dist/lib/ledger/index.d.ts +0 -18
  304. package/dist/lib/ledger/index.d.ts.map +0 -1
  305. package/dist/lib/ledger/index.js +0 -32
  306. package/dist/lib/ledger/index.js.map +0 -1
  307. package/dist/lib/ledger/local.d.ts +0 -22
  308. package/dist/lib/ledger/local.d.ts.map +0 -1
  309. package/dist/lib/ledger/local.js +0 -333
  310. package/dist/lib/ledger/local.js.map +0 -1
  311. package/dist/lib/ledger/r2.d.ts +0 -41
  312. package/dist/lib/ledger/r2.d.ts.map +0 -1
  313. package/dist/lib/ledger/r2.js +0 -335
  314. package/dist/lib/ledger/r2.js.map +0 -1
  315. package/dist/lib/ledger/sync.d.ts +0 -33
  316. package/dist/lib/ledger/sync.d.ts.map +0 -1
  317. package/dist/lib/ledger/sync.js +0 -106
  318. package/dist/lib/ledger/sync.js.map +0 -1
  319. package/dist/lib/ledger/types.d.ts +0 -100
  320. package/dist/lib/ledger/types.d.ts.map +0 -1
  321. package/dist/lib/ledger/types.js +0 -21
  322. package/dist/lib/ledger/types.js.map +0 -1
  323. package/dist/lib/manifest.d.ts +0 -14
  324. package/dist/lib/manifest.d.ts.map +0 -1
  325. package/dist/lib/manifest.js +0 -48
  326. package/dist/lib/manifest.js.map +0 -1
  327. package/dist/lib/markdown.d.ts +0 -5
  328. package/dist/lib/markdown.d.ts.map +0 -1
  329. package/dist/lib/markdown.js +0 -17
  330. package/dist/lib/markdown.js.map +0 -1
  331. package/dist/lib/mcp.d.ts +0 -64
  332. package/dist/lib/mcp.d.ts.map +0 -1
  333. package/dist/lib/mcp.js +0 -327
  334. package/dist/lib/mcp.js.map +0 -1
  335. package/dist/lib/memory-compile.d.ts +0 -65
  336. package/dist/lib/memory-compile.d.ts.map +0 -1
  337. package/dist/lib/memory-compile.js +0 -174
  338. package/dist/lib/memory-compile.js.map +0 -1
  339. package/dist/lib/memory.d.ts +0 -64
  340. package/dist/lib/memory.d.ts.map +0 -1
  341. package/dist/lib/memory.js +0 -275
  342. package/dist/lib/memory.js.map +0 -1
  343. package/dist/lib/models.d.ts +0 -98
  344. package/dist/lib/models.d.ts.map +0 -1
  345. package/dist/lib/models.js +0 -728
  346. package/dist/lib/models.js.map +0 -1
  347. package/dist/lib/permissions.d.ts +0 -227
  348. package/dist/lib/permissions.d.ts.map +0 -1
  349. package/dist/lib/permissions.js +0 -1085
  350. package/dist/lib/permissions.js.map +0 -1
  351. package/dist/lib/picker.d.ts +0 -27
  352. package/dist/lib/picker.d.ts.map +0 -1
  353. package/dist/lib/picker.js +0 -110
  354. package/dist/lib/picker.js.map +0 -1
  355. package/dist/lib/plugins.d.ts +0 -80
  356. package/dist/lib/plugins.d.ts.map +0 -1
  357. package/dist/lib/plugins.js +0 -556
  358. package/dist/lib/plugins.js.map +0 -1
  359. package/dist/lib/profiles-keychain.d.ts +0 -11
  360. package/dist/lib/profiles-keychain.d.ts.map +0 -1
  361. package/dist/lib/profiles-keychain.js +0 -14
  362. package/dist/lib/profiles-keychain.js.map +0 -1
  363. package/dist/lib/profiles-presets.d.ts +0 -25
  364. package/dist/lib/profiles-presets.d.ts.map +0 -1
  365. package/dist/lib/profiles-presets.js +0 -104
  366. package/dist/lib/profiles-presets.js.map +0 -1
  367. package/dist/lib/profiles.d.ts +0 -70
  368. package/dist/lib/profiles.d.ts.map +0 -1
  369. package/dist/lib/profiles.js +0 -145
  370. package/dist/lib/profiles.js.map +0 -1
  371. package/dist/lib/pty-client.d.ts +0 -23
  372. package/dist/lib/pty-client.d.ts.map +0 -1
  373. package/dist/lib/pty-client.js +0 -181
  374. package/dist/lib/pty-client.js.map +0 -1
  375. package/dist/lib/pty-server.d.ts +0 -21
  376. package/dist/lib/pty-server.d.ts.map +0 -1
  377. package/dist/lib/pty-server.js +0 -427
  378. package/dist/lib/pty-server.js.map +0 -1
  379. package/dist/lib/registry.d.ts +0 -45
  380. package/dist/lib/registry.d.ts.map +0 -1
  381. package/dist/lib/registry.js +0 -220
  382. package/dist/lib/registry.js.map +0 -1
  383. package/dist/lib/resources.d.ts +0 -55
  384. package/dist/lib/resources.d.ts.map +0 -1
  385. package/dist/lib/resources.js +0 -103
  386. package/dist/lib/resources.js.map +0 -1
  387. package/dist/lib/rotate.d.ts +0 -58
  388. package/dist/lib/rotate.d.ts.map +0 -1
  389. package/dist/lib/rotate.js +0 -93
  390. package/dist/lib/rotate.js.map +0 -1
  391. package/dist/lib/routines.d.ts +0 -99
  392. package/dist/lib/routines.d.ts.map +0 -1
  393. package/dist/lib/routines.js +0 -352
  394. package/dist/lib/routines.js.map +0 -1
  395. package/dist/lib/runner.d.ts +0 -26
  396. package/dist/lib/runner.d.ts.map +0 -1
  397. package/dist/lib/runner.js +0 -325
  398. package/dist/lib/runner.js.map +0 -1
  399. package/dist/lib/sandbox.d.ts +0 -26
  400. package/dist/lib/sandbox.d.ts.map +0 -1
  401. package/dist/lib/sandbox.js +0 -218
  402. package/dist/lib/sandbox.js.map +0 -1
  403. package/dist/lib/scheduler.d.ts +0 -26
  404. package/dist/lib/scheduler.d.ts.map +0 -1
  405. package/dist/lib/scheduler.js +0 -77
  406. package/dist/lib/scheduler.js.map +0 -1
  407. package/dist/lib/secrets-bundles.d.ts +0 -38
  408. package/dist/lib/secrets-bundles.d.ts.map +0 -1
  409. package/dist/lib/secrets-bundles.js +0 -176
  410. package/dist/lib/secrets-bundles.js.map +0 -1
  411. package/dist/lib/secrets.d.ts +0 -53
  412. package/dist/lib/secrets.d.ts.map +0 -1
  413. package/dist/lib/secrets.js +0 -140
  414. package/dist/lib/secrets.js.map +0 -1
  415. package/dist/lib/session/__tests__/db.test.d.ts +0 -2
  416. package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
  417. package/dist/lib/session/__tests__/db.test.js +0 -54
  418. package/dist/lib/session/__tests__/db.test.js.map +0 -1
  419. package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
  420. package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
  421. package/dist/lib/session/__tests__/discover.test.js +0 -63
  422. package/dist/lib/session/__tests__/discover.test.js.map +0 -1
  423. package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
  424. package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
  425. package/dist/lib/session/__tests__/prompt.test.js +0 -44
  426. package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
  427. package/dist/lib/session/__tests__/render.test.d.ts +0 -2
  428. package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
  429. package/dist/lib/session/__tests__/render.test.js +0 -602
  430. package/dist/lib/session/__tests__/render.test.js.map +0 -1
  431. package/dist/lib/session/active.d.ts +0 -44
  432. package/dist/lib/session/active.d.ts.map +0 -1
  433. package/dist/lib/session/active.js +0 -379
  434. package/dist/lib/session/active.js.map +0 -1
  435. package/dist/lib/session/artifacts.d.ts +0 -15
  436. package/dist/lib/session/artifacts.d.ts.map +0 -1
  437. package/dist/lib/session/artifacts.js +0 -86
  438. package/dist/lib/session/artifacts.js.map +0 -1
  439. package/dist/lib/session/db.d.ts +0 -140
  440. package/dist/lib/session/db.d.ts.map +0 -1
  441. package/dist/lib/session/db.js +0 -599
  442. package/dist/lib/session/db.js.map +0 -1
  443. package/dist/lib/session/discover.d.ts +0 -72
  444. package/dist/lib/session/discover.d.ts.map +0 -1
  445. package/dist/lib/session/discover.js +0 -1315
  446. package/dist/lib/session/discover.js.map +0 -1
  447. package/dist/lib/session/parse.d.ts +0 -34
  448. package/dist/lib/session/parse.d.ts.map +0 -1
  449. package/dist/lib/session/parse.js +0 -663
  450. package/dist/lib/session/parse.js.map +0 -1
  451. package/dist/lib/session/prompt.d.ts +0 -13
  452. package/dist/lib/session/prompt.d.ts.map +0 -1
  453. package/dist/lib/session/prompt.js +0 -79
  454. package/dist/lib/session/prompt.js.map +0 -1
  455. package/dist/lib/session/prompt.test.d.ts +0 -2
  456. package/dist/lib/session/prompt.test.d.ts.map +0 -1
  457. package/dist/lib/session/prompt.test.js +0 -57
  458. package/dist/lib/session/prompt.test.js.map +0 -1
  459. package/dist/lib/session/render.d.ts +0 -103
  460. package/dist/lib/session/render.d.ts.map +0 -1
  461. package/dist/lib/session/render.js +0 -798
  462. package/dist/lib/session/render.js.map +0 -1
  463. package/dist/lib/session/team-filter.d.ts +0 -35
  464. package/dist/lib/session/team-filter.d.ts.map +0 -1
  465. package/dist/lib/session/team-filter.js +0 -75
  466. package/dist/lib/session/team-filter.js.map +0 -1
  467. package/dist/lib/session/team-filter.test.d.ts +0 -2
  468. package/dist/lib/session/team-filter.test.d.ts.map +0 -1
  469. package/dist/lib/session/team-filter.test.js +0 -157
  470. package/dist/lib/session/team-filter.test.js.map +0 -1
  471. package/dist/lib/session/types.d.ts +0 -84
  472. package/dist/lib/session/types.d.ts.map +0 -1
  473. package/dist/lib/session/types.js +0 -11
  474. package/dist/lib/session/types.js.map +0 -1
  475. package/dist/lib/shims.d.ts +0 -272
  476. package/dist/lib/shims.d.ts.map +0 -1
  477. package/dist/lib/shims.js +0 -1322
  478. package/dist/lib/shims.js.map +0 -1
  479. package/dist/lib/skills.d.ts +0 -142
  480. package/dist/lib/skills.d.ts.map +0 -1
  481. package/dist/lib/skills.js +0 -791
  482. package/dist/lib/skills.js.map +0 -1
  483. package/dist/lib/state.d.ts +0 -87
  484. package/dist/lib/state.d.ts.map +0 -1
  485. package/dist/lib/state.js +0 -333
  486. package/dist/lib/state.js.map +0 -1
  487. package/dist/lib/subagents.d.ts +0 -84
  488. package/dist/lib/subagents.d.ts.map +0 -1
  489. package/dist/lib/subagents.js +0 -410
  490. package/dist/lib/subagents.js.map +0 -1
  491. package/dist/lib/teams/__tests__/oracle.test.d.ts +0 -2
  492. package/dist/lib/teams/__tests__/oracle.test.d.ts.map +0 -1
  493. package/dist/lib/teams/__tests__/oracle.test.js +0 -89
  494. package/dist/lib/teams/__tests__/oracle.test.js.map +0 -1
  495. package/dist/lib/teams/__tests__/supervisor.test.d.ts +0 -2
  496. package/dist/lib/teams/__tests__/supervisor.test.d.ts.map +0 -1
  497. package/dist/lib/teams/__tests__/supervisor.test.js +0 -179
  498. package/dist/lib/teams/__tests__/supervisor.test.js.map +0 -1
  499. package/dist/lib/teams/agents.d.ts +0 -247
  500. package/dist/lib/teams/agents.d.ts.map +0 -1
  501. package/dist/lib/teams/agents.js +0 -1244
  502. package/dist/lib/teams/agents.js.map +0 -1
  503. package/dist/lib/teams/api.d.ts +0 -91
  504. package/dist/lib/teams/api.d.ts.map +0 -1
  505. package/dist/lib/teams/api.js +0 -239
  506. package/dist/lib/teams/api.js.map +0 -1
  507. package/dist/lib/teams/cloud.d.ts +0 -11
  508. package/dist/lib/teams/cloud.d.ts.map +0 -1
  509. package/dist/lib/teams/cloud.js +0 -169
  510. package/dist/lib/teams/cloud.js.map +0 -1
  511. package/dist/lib/teams/debug.d.ts +0 -8
  512. package/dist/lib/teams/debug.d.ts.map +0 -1
  513. package/dist/lib/teams/debug.js +0 -12
  514. package/dist/lib/teams/debug.js.map +0 -1
  515. package/dist/lib/teams/file_ops.d.ts +0 -13
  516. package/dist/lib/teams/file_ops.d.ts.map +0 -1
  517. package/dist/lib/teams/file_ops.js +0 -66
  518. package/dist/lib/teams/file_ops.js.map +0 -1
  519. package/dist/lib/teams/index.d.ts +0 -16
  520. package/dist/lib/teams/index.d.ts.map +0 -1
  521. package/dist/lib/teams/index.js +0 -15
  522. package/dist/lib/teams/index.js.map +0 -1
  523. package/dist/lib/teams/oracle.d.ts +0 -20
  524. package/dist/lib/teams/oracle.d.ts.map +0 -1
  525. package/dist/lib/teams/oracle.js +0 -59
  526. package/dist/lib/teams/oracle.js.map +0 -1
  527. package/dist/lib/teams/parsers.d.ts +0 -9
  528. package/dist/lib/teams/parsers.d.ts.map +0 -1
  529. package/dist/lib/teams/parsers.js +0 -837
  530. package/dist/lib/teams/parsers.js.map +0 -1
  531. package/dist/lib/teams/persistence.d.ts +0 -43
  532. package/dist/lib/teams/persistence.d.ts.map +0 -1
  533. package/dist/lib/teams/persistence.js +0 -299
  534. package/dist/lib/teams/persistence.js.map +0 -1
  535. package/dist/lib/teams/ralph.d.ts +0 -8
  536. package/dist/lib/teams/ralph.d.ts.map +0 -1
  537. package/dist/lib/teams/ralph.js +0 -59
  538. package/dist/lib/teams/ralph.js.map +0 -1
  539. package/dist/lib/teams/registry.d.ts +0 -18
  540. package/dist/lib/teams/registry.d.ts.map +0 -1
  541. package/dist/lib/teams/registry.js +0 -68
  542. package/dist/lib/teams/registry.js.map +0 -1
  543. package/dist/lib/teams/summarizer.d.ts +0 -73
  544. package/dist/lib/teams/summarizer.d.ts.map +0 -1
  545. package/dist/lib/teams/summarizer.js +0 -780
  546. package/dist/lib/teams/summarizer.js.map +0 -1
  547. package/dist/lib/teams/supervisor.d.ts +0 -49
  548. package/dist/lib/teams/supervisor.d.ts.map +0 -1
  549. package/dist/lib/teams/supervisor.js +0 -74
  550. package/dist/lib/teams/supervisor.js.map +0 -1
  551. package/dist/lib/template.d.ts +0 -27
  552. package/dist/lib/template.d.ts.map +0 -1
  553. package/dist/lib/template.js +0 -60
  554. package/dist/lib/template.js.map +0 -1
  555. package/dist/lib/types.d.ts +0 -331
  556. package/dist/lib/types.d.ts.map +0 -1
  557. package/dist/lib/types.js +0 -29
  558. package/dist/lib/types.js.map +0 -1
  559. package/dist/lib/usage.d.ts +0 -105
  560. package/dist/lib/usage.d.ts.map +0 -1
  561. package/dist/lib/usage.js +0 -686
  562. package/dist/lib/usage.js.map +0 -1
  563. package/dist/lib/versions.d.ts +0 -253
  564. package/dist/lib/versions.d.ts.map +0 -1
  565. package/dist/lib/versions.js +0 -1796
  566. package/dist/lib/versions.js.map +0 -1
  567. package/scripts/rebuild-sqlite.sh +0 -46
@@ -1,192 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import * as fs from 'fs';
3
- import * as path from 'path';
4
- import * as os from 'os';
5
- import { symlinkAllowedDirs } from '../sandbox.js';
6
- import { validateJob, parseAtTime, writeJob, readJob, deleteJob, resolveJobPrompt } from '../routines.js';
7
- import { cleanOrphanedPluginSkills } from '../plugins.js';
8
- describe('Bug Fix: Path traversal in sandbox.ts', () => {
9
- let overlayHome;
10
- beforeEach(() => {
11
- overlayHome = fs.mkdtempSync(path.join(os.tmpdir(), 'sandbox-test-'));
12
- });
13
- afterEach(() => {
14
- fs.rmSync(overlayHome, { recursive: true, force: true });
15
- });
16
- it('should block path traversal via .. components', () => {
17
- // ~/../../../etc should resolve outside HOME and be rejected
18
- symlinkAllowedDirs(overlayHome, ['~/../../../etc']);
19
- // No symlink should be created for the traversal path
20
- const entries = fs.readdirSync(overlayHome);
21
- const hasEtc = entries.some(e => e === 'etc' || e.includes('etc'));
22
- expect(hasEtc).toBe(false);
23
- });
24
- it('should block ~/../../../ style traversals', () => {
25
- symlinkAllowedDirs(overlayHome, ['~/../../..']);
26
- const entries = fs.readdirSync(overlayHome);
27
- expect(entries.length).toBe(0);
28
- });
29
- it('should allow valid paths under HOME', () => {
30
- const validDir = path.join(os.homedir(), '.agents');
31
- if (!fs.existsSync(validDir))
32
- return; // skip if doesn't exist
33
- symlinkAllowedDirs(overlayHome, ['~/.agents']);
34
- // Should create symlink for .agents
35
- const symlinkPath = path.join(overlayHome, '.agents');
36
- expect(fs.existsSync(symlinkPath)).toBe(true);
37
- expect(fs.lstatSync(symlinkPath).isSymbolicLink()).toBe(true);
38
- });
39
- it('should block absolute paths outside HOME', () => {
40
- symlinkAllowedDirs(overlayHome, ['/etc', '/tmp', '/var']);
41
- const entries = fs.readdirSync(overlayHome);
42
- expect(entries.length).toBe(0);
43
- });
44
- });
45
- describe('Bug Fix: Cron expression validation', () => {
46
- it('should reject invalid cron expressions', () => {
47
- const errors = validateJob({
48
- name: 'test',
49
- schedule: '99 99 99 99 99',
50
- agent: 'claude',
51
- prompt: 'test',
52
- });
53
- expect(errors.some(e => e.includes('invalid cron expression'))).toBe(true);
54
- });
55
- it('should accept valid cron expressions', () => {
56
- const errors = validateJob({
57
- name: 'test',
58
- schedule: '0 9 * * 1-5',
59
- agent: 'claude',
60
- prompt: 'test',
61
- });
62
- expect(errors.some(e => e.includes('invalid cron expression'))).toBe(false);
63
- });
64
- it('should reject invalid agent names', () => {
65
- const errors = validateJob({
66
- name: 'test',
67
- schedule: '0 9 * * *',
68
- agent: 'fake-agent',
69
- prompt: 'test',
70
- });
71
- expect(errors.some(e => e.includes('agent must be one of'))).toBe(true);
72
- });
73
- it('should accept openclaw as a valid agent', () => {
74
- const errors = validateJob({
75
- name: 'test',
76
- schedule: '0 9 * * *',
77
- agent: 'openclaw',
78
- prompt: 'test',
79
- });
80
- expect(errors.some(e => e.includes('agent must be one of'))).toBe(false);
81
- });
82
- });
83
- describe('Bug Fix: Timezone day resolution', () => {
84
- it('should resolve {day} correctly for a timezone', () => {
85
- const config = {
86
- name: 'test',
87
- schedule: '0 9 * * *',
88
- agent: 'claude',
89
- mode: 'plan',
90
- effort: 'auto',
91
- timeout: '30m',
92
- enabled: true,
93
- prompt: 'Today is {day}',
94
- timezone: 'America/New_York',
95
- };
96
- const resolved = resolveJobPrompt(config);
97
- const validDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
98
- const dayFound = validDays.some(day => resolved.includes(day));
99
- expect(dayFound).toBe(true);
100
- });
101
- it('should resolve {day} using Intl API for correct timezone', () => {
102
- const config = {
103
- name: 'test',
104
- schedule: '0 9 * * *',
105
- agent: 'claude',
106
- mode: 'plan',
107
- effort: 'auto',
108
- timeout: '30m',
109
- enabled: true,
110
- prompt: '{day}',
111
- timezone: 'UTC',
112
- };
113
- const resolved = resolveJobPrompt(config);
114
- // Verify it's a valid day name (not empty or broken)
115
- const validDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
116
- expect(validDays).toContain(resolved);
117
- });
118
- });
119
- describe('Bug Fix: One-shot job runOnce field', () => {
120
- it('parseAtTime should return runOnce: true', () => {
121
- const result = parseAtTime('14:30');
122
- expect(result).not.toBeNull();
123
- expect(result.runOnce).toBe(true);
124
- });
125
- it('parseAtTime with date should return runOnce: true', () => {
126
- const result = parseAtTime('2030-06-15 09:00');
127
- expect(result).not.toBeNull();
128
- expect(result.runOnce).toBe(true);
129
- });
130
- it('runOnce should survive write/read cycle', () => {
131
- const testJobName = '__test-runonce-bugfix__';
132
- try {
133
- writeJob({
134
- name: testJobName,
135
- schedule: '30 14 25 3 *',
136
- agent: 'claude',
137
- mode: 'plan',
138
- effort: 'auto',
139
- timeout: '30m',
140
- enabled: true,
141
- prompt: 'test',
142
- runOnce: true,
143
- });
144
- const read = readJob(testJobName);
145
- expect(read).not.toBeNull();
146
- expect(read.runOnce).toBe(true);
147
- }
148
- finally {
149
- deleteJob(testJobName);
150
- }
151
- });
152
- });
153
- describe('Bug Fix: Plugin orphan cleanup', () => {
154
- let tempDir;
155
- beforeEach(() => {
156
- tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'plugin-orphan-test-'));
157
- });
158
- afterEach(() => {
159
- fs.rmSync(tempDir, { recursive: true, force: true });
160
- });
161
- it('should remove orphaned plugin skill dirs', () => {
162
- // Create a fake version home with plugin skills
163
- const skillsDir = path.join(tempDir, '.claude', 'skills');
164
- fs.mkdirSync(skillsDir, { recursive: true });
165
- // Active plugin skill
166
- fs.mkdirSync(path.join(skillsDir, 'active-plugin--skill1'));
167
- fs.writeFileSync(path.join(skillsDir, 'active-plugin--skill1', 'SKILL.md'), 'test');
168
- // Orphaned plugin skill (plugin no longer exists)
169
- fs.mkdirSync(path.join(skillsDir, 'deleted-plugin--skill1'));
170
- fs.writeFileSync(path.join(skillsDir, 'deleted-plugin--skill1', 'SKILL.md'), 'test');
171
- // Regular skill (not a plugin)
172
- fs.mkdirSync(path.join(skillsDir, 'regular-skill'));
173
- fs.writeFileSync(path.join(skillsDir, 'regular-skill', 'SKILL.md'), 'test');
174
- const activePlugins = new Set(['active-plugin']);
175
- const removed = cleanOrphanedPluginSkills('claude', tempDir, activePlugins);
176
- // Should remove deleted-plugin--skill1 but keep others
177
- expect(removed).toEqual(['deleted-plugin--skill1']);
178
- expect(fs.existsSync(path.join(skillsDir, 'active-plugin--skill1'))).toBe(true);
179
- expect(fs.existsSync(path.join(skillsDir, 'deleted-plugin--skill1'))).toBe(false);
180
- expect(fs.existsSync(path.join(skillsDir, 'regular-skill'))).toBe(true);
181
- });
182
- it('should not touch non-plugin dirs (no -- separator)', () => {
183
- const skillsDir = path.join(tempDir, '.claude', 'skills');
184
- fs.mkdirSync(skillsDir, { recursive: true });
185
- fs.mkdirSync(path.join(skillsDir, 'my-normal-skill'));
186
- fs.writeFileSync(path.join(skillsDir, 'my-normal-skill', 'SKILL.md'), 'test');
187
- const removed = cleanOrphanedPluginSkills('claude', tempDir, new Set());
188
- expect(removed).toEqual([]);
189
- expect(fs.existsSync(path.join(skillsDir, 'my-normal-skill'))).toBe(true);
190
- });
191
- });
192
- //# sourceMappingURL=bugfixes.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bugfixes.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/bugfixes.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=exec.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exec.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/exec.test.ts"],"names":[],"mappings":""}
@@ -1,446 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { buildExecCommand, buildExecEnv, buildFallbackPrompt, detectRateLimit, AGENT_COMMANDS, parseExecEnv, } from '../exec.js';
3
- function opts(overrides) {
4
- return {
5
- agent: 'claude',
6
- prompt: 'do the thing',
7
- mode: 'plan',
8
- effort: 'auto',
9
- ...overrides,
10
- };
11
- }
12
- const ALL_AGENTS = Object.keys(AGENT_COMMANDS);
13
- const ALL_MODES = ['plan', 'edit', 'full'];
14
- describe('buildExecCommand', () => {
15
- // --- Mode flags per agent ---
16
- describe('mode flags', () => {
17
- it('claude plan produces --permission-mode plan', () => {
18
- const cmd = buildExecCommand(opts({ agent: 'claude', mode: 'plan' }));
19
- expect(cmd).toContain('--permission-mode');
20
- expect(cmd[cmd.indexOf('--permission-mode') + 1]).toBe('plan');
21
- });
22
- it('claude edit produces --permission-mode acceptEdits', () => {
23
- const cmd = buildExecCommand(opts({ agent: 'claude', mode: 'edit' }));
24
- expect(cmd).toContain('--permission-mode');
25
- expect(cmd[cmd.indexOf('--permission-mode') + 1]).toBe('acceptEdits');
26
- });
27
- it('claude full produces --dangerously-skip-permissions', () => {
28
- const cmd = buildExecCommand(opts({ agent: 'claude', mode: 'full' }));
29
- expect(cmd).toContain('--dangerously-skip-permissions');
30
- expect(cmd).not.toContain('--permission-mode');
31
- });
32
- it('codex plan produces --sandbox workspace-write', () => {
33
- const cmd = buildExecCommand(opts({ agent: 'codex', mode: 'plan' }));
34
- expect(cmd).toContain('--sandbox');
35
- expect(cmd[cmd.indexOf('--sandbox') + 1]).toBe('workspace-write');
36
- expect(cmd).not.toContain('--full-auto');
37
- });
38
- it('codex edit produces --sandbox workspace-write --full-auto', () => {
39
- const cmd = buildExecCommand(opts({ agent: 'codex', mode: 'edit' }));
40
- expect(cmd).toContain('--sandbox');
41
- expect(cmd).toContain('--full-auto');
42
- });
43
- it('codex full produces --full-auto without --sandbox', () => {
44
- const cmd = buildExecCommand(opts({ agent: 'codex', mode: 'full' }));
45
- expect(cmd).toContain('--full-auto');
46
- expect(cmd).not.toContain('--sandbox');
47
- });
48
- it('gemini plan has no mode flags', () => {
49
- const cmd = buildExecCommand(opts({ agent: 'gemini', mode: 'plan' }));
50
- expect(cmd).not.toContain('--yolo');
51
- });
52
- it('gemini edit produces --yolo', () => {
53
- const cmd = buildExecCommand(opts({ agent: 'gemini', mode: 'edit' }));
54
- expect(cmd).toContain('--yolo');
55
- });
56
- it('gemini full produces --yolo', () => {
57
- const cmd = buildExecCommand(opts({ agent: 'gemini', mode: 'full' }));
58
- expect(cmd).toContain('--yolo');
59
- });
60
- it('cursor plan has no mode flags', () => {
61
- const cmd = buildExecCommand(opts({ agent: 'cursor', mode: 'plan' }));
62
- expect(cmd).not.toContain('-f');
63
- });
64
- it('cursor edit produces -f', () => {
65
- const cmd = buildExecCommand(opts({ agent: 'cursor', mode: 'edit' }));
66
- expect(cmd).toContain('-f');
67
- });
68
- it('cursor full produces -f', () => {
69
- const cmd = buildExecCommand(opts({ agent: 'cursor', mode: 'full' }));
70
- expect(cmd).toContain('-f');
71
- });
72
- it('opencode plan produces --agent plan', () => {
73
- const cmd = buildExecCommand(opts({ agent: 'opencode', mode: 'plan' }));
74
- expect(cmd).toContain('--agent');
75
- expect(cmd[cmd.indexOf('--agent') + 1]).toBe('plan');
76
- });
77
- it('opencode edit produces --agent build', () => {
78
- const cmd = buildExecCommand(opts({ agent: 'opencode', mode: 'edit' }));
79
- expect(cmd[cmd.indexOf('--agent') + 1]).toBe('build');
80
- });
81
- it('opencode full produces --agent build', () => {
82
- const cmd = buildExecCommand(opts({ agent: 'opencode', mode: 'full' }));
83
- expect(cmd[cmd.indexOf('--agent') + 1]).toBe('build');
84
- });
85
- it('openclaw plan produces --mode plan', () => {
86
- const cmd = buildExecCommand(opts({ agent: 'openclaw', mode: 'plan' }));
87
- expect(cmd).toContain('--mode');
88
- expect(cmd[cmd.indexOf('--mode') + 1]).toBe('plan');
89
- });
90
- it('openclaw edit produces --mode edit', () => {
91
- const cmd = buildExecCommand(opts({ agent: 'openclaw', mode: 'edit' }));
92
- expect(cmd[cmd.indexOf('--mode') + 1]).toBe('edit');
93
- });
94
- it('openclaw full produces --mode full', () => {
95
- const cmd = buildExecCommand(opts({ agent: 'openclaw', mode: 'full' }));
96
- expect(cmd[cmd.indexOf('--mode') + 1]).toBe('full');
97
- });
98
- it('every agent has all three mode entries', () => {
99
- for (const agent of ALL_AGENTS) {
100
- const template = AGENT_COMMANDS[agent];
101
- for (const mode of ALL_MODES) {
102
- expect(template.modeFlags[mode]).toBeDefined();
103
- expect(Array.isArray(template.modeFlags[mode])).toBe(true);
104
- }
105
- }
106
- });
107
- });
108
- // --- Print / headless ---
109
- describe('print/headless flags', () => {
110
- it('claude headless adds --print', () => {
111
- const cmd = buildExecCommand(opts({ agent: 'claude', headless: true }));
112
- expect(cmd).toContain('--print');
113
- });
114
- it('claude headless=false omits --print', () => {
115
- const cmd = buildExecCommand(opts({ agent: 'claude', headless: false }));
116
- expect(cmd).not.toContain('--print');
117
- });
118
- it('codex headless adds nothing (no printFlags)', () => {
119
- const cmd = buildExecCommand(opts({ agent: 'codex', headless: true }));
120
- expect(cmd).not.toContain('--print');
121
- });
122
- it('gemini headless adds nothing', () => {
123
- const cmd = buildExecCommand(opts({ agent: 'gemini', headless: true }));
124
- expect(cmd).not.toContain('--print');
125
- });
126
- });
127
- // --- Session ID ---
128
- describe('session ID', () => {
129
- it('claude with sessionId adds --session-id', () => {
130
- const cmd = buildExecCommand(opts({ agent: 'claude', sessionId: 'abc-123' }));
131
- const idx = cmd.indexOf('--session-id');
132
- expect(idx).toBeGreaterThan(-1);
133
- expect(cmd[idx + 1]).toBe('abc-123');
134
- });
135
- it('codex ignores sessionId', () => {
136
- const cmd = buildExecCommand(opts({ agent: 'codex', sessionId: 'abc-123' }));
137
- expect(cmd).not.toContain('--session-id');
138
- });
139
- it('gemini ignores sessionId', () => {
140
- const cmd = buildExecCommand(opts({ agent: 'gemini', sessionId: 'abc-123' }));
141
- expect(cmd).not.toContain('--session-id');
142
- });
143
- it('omits --session-id when not provided', () => {
144
- const cmd = buildExecCommand(opts({ agent: 'claude' }));
145
- expect(cmd).not.toContain('--session-id');
146
- });
147
- });
148
- // --- Verbose ---
149
- describe('verbose flag', () => {
150
- it('claude verbose adds --verbose', () => {
151
- const cmd = buildExecCommand(opts({ agent: 'claude', verbose: true }));
152
- expect(cmd).toContain('--verbose');
153
- });
154
- it('claude verbose + json does not duplicate --verbose', () => {
155
- const cmd = buildExecCommand(opts({ agent: 'claude', verbose: true, json: true }));
156
- const count = cmd.filter((f) => f === '--verbose').length;
157
- expect(count).toBe(1);
158
- });
159
- it('codex verbose adds nothing (no verboseFlag)', () => {
160
- const cmd = buildExecCommand(opts({ agent: 'codex', verbose: true }));
161
- expect(cmd).not.toContain('--verbose');
162
- });
163
- it('claude json without verbose still includes --verbose from jsonFlags', () => {
164
- const cmd = buildExecCommand(opts({ agent: 'claude', json: true, verbose: false }));
165
- expect(cmd).toContain('--verbose');
166
- });
167
- });
168
- // --- JSON flags ---
169
- describe('JSON flags', () => {
170
- it('claude json adds --output-format stream-json --verbose', () => {
171
- const cmd = buildExecCommand(opts({ agent: 'claude', json: true }));
172
- expect(cmd).toContain('--output-format');
173
- expect(cmd).toContain('stream-json');
174
- expect(cmd).toContain('--verbose');
175
- });
176
- it('codex json adds --json', () => {
177
- const cmd = buildExecCommand(opts({ agent: 'codex', json: true }));
178
- expect(cmd).toContain('--json');
179
- });
180
- it('json=false adds no json flags', () => {
181
- const cmd = buildExecCommand(opts({ agent: 'claude', json: false }));
182
- expect(cmd).not.toContain('--output-format');
183
- expect(cmd).not.toContain('stream-json');
184
- });
185
- });
186
- // --- Model selection ---
187
- describe('model selection', () => {
188
- it('explicit model is forwarded via --model', () => {
189
- const cmd = buildExecCommand(opts({ agent: 'claude', model: 'custom-model' }));
190
- expect(cmd).toContain('--model');
191
- expect(cmd[cmd.indexOf('--model') + 1]).toBe('custom-model');
192
- });
193
- it('no --model flag when model is not provided (agent uses its default)', () => {
194
- const cmd = buildExecCommand(opts({ agent: 'claude' }));
195
- expect(cmd).not.toContain('--model');
196
- });
197
- it('no --model flag for codex without explicit model', () => {
198
- const cmd = buildExecCommand(opts({ agent: 'codex' }));
199
- expect(cmd).not.toContain('--model');
200
- });
201
- });
202
- // --- Reasoning effort flags ---
203
- describe('reasoning effort', () => {
204
- it('claude effort=high adds --effort high', () => {
205
- const cmd = buildExecCommand(opts({ agent: 'claude', effort: 'high' }));
206
- const idx = cmd.indexOf('--effort');
207
- expect(idx).toBeGreaterThan(-1);
208
- expect(cmd[idx + 1]).toBe('high');
209
- });
210
- it('claude effort=auto omits reasoning flags (agent uses its default)', () => {
211
- const cmd = buildExecCommand(opts({ agent: 'claude', effort: 'auto' }));
212
- expect(cmd).not.toContain('--effort');
213
- });
214
- it('codex effort=medium injects -c model_reasoning_effort=medium before exec', () => {
215
- const cmd = buildExecCommand(opts({ agent: 'codex', effort: 'medium' }));
216
- const cIdx = cmd.indexOf('-c');
217
- const execIdx = cmd.indexOf('exec');
218
- expect(cIdx).toBeGreaterThan(-1);
219
- expect(execIdx).toBeGreaterThan(cIdx);
220
- expect(cmd[cIdx + 1]).toBe('model_reasoning_effort=medium');
221
- });
222
- it('codex effort=xhigh clamps to high', () => {
223
- const cmd = buildExecCommand(opts({ agent: 'codex', effort: 'xhigh' }));
224
- const cIdx = cmd.indexOf('-c');
225
- expect(cmd[cIdx + 1]).toBe('model_reasoning_effort=high');
226
- });
227
- it('codex effort=auto omits reasoning flags', () => {
228
- const cmd = buildExecCommand(opts({ agent: 'codex', effort: 'auto' }));
229
- expect(cmd).not.toContain('-c');
230
- });
231
- it('gemini ignores effort (no reasoning flags)', () => {
232
- const cmd = buildExecCommand(opts({ agent: 'gemini', effort: 'high' }));
233
- expect(cmd).not.toContain('--effort');
234
- expect(cmd).not.toContain('-c');
235
- });
236
- });
237
- // --- Prompt positioning ---
238
- describe('prompt positioning', () => {
239
- it('claude uses -p flag for prompt', () => {
240
- const cmd = buildExecCommand(opts({ agent: 'claude', prompt: 'hello world' }));
241
- const idx = cmd.indexOf('-p');
242
- expect(idx).toBeGreaterThan(-1);
243
- expect(cmd[idx + 1]).toBe('hello world');
244
- });
245
- it('codex uses positional prompt', () => {
246
- const cmd = buildExecCommand(opts({ agent: 'codex', prompt: 'hello world' }));
247
- expect(cmd).not.toContain('-p');
248
- expect(cmd).toContain('hello world');
249
- });
250
- it('gemini uses positional prompt', () => {
251
- const cmd = buildExecCommand(opts({ agent: 'gemini', prompt: 'hello world' }));
252
- expect(cmd).not.toContain('-p');
253
- expect(cmd).toContain('hello world');
254
- });
255
- });
256
- // --- Add dirs ---
257
- describe('add dirs', () => {
258
- it('claude addDirs adds --add-dir for each directory', () => {
259
- const cmd = buildExecCommand(opts({ agent: 'claude', addDirs: ['/a', '/b'] }));
260
- const indices = cmd.reduce((acc, v, i) => (v === '--add-dir' ? [...acc, i] : acc), []);
261
- expect(indices).toHaveLength(2);
262
- expect(cmd[indices[0] + 1]).toBe('/a');
263
- expect(cmd[indices[1] + 1]).toBe('/b');
264
- });
265
- it('codex ignores addDirs', () => {
266
- const cmd = buildExecCommand(opts({ agent: 'codex', addDirs: ['/a'] }));
267
- expect(cmd).not.toContain('--add-dir');
268
- });
269
- });
270
- describe('exec env', () => {
271
- it('parses repeated KEY=VALUE entries', () => {
272
- expect(parseExecEnv(['ANTHROPIC_BASE_URL=https://ollama.example.com', 'ANTHROPIC_MODEL=qwen3.6:35b'])).toEqual({
273
- ANTHROPIC_BASE_URL: 'https://ollama.example.com',
274
- ANTHROPIC_MODEL: 'qwen3.6:35b',
275
- });
276
- });
277
- it('preserves equals signs in values', () => {
278
- expect(parseExecEnv(['AUTH_HEADER=Bearer abc=123'])).toEqual({
279
- AUTH_HEADER: 'Bearer abc=123',
280
- });
281
- });
282
- it('rejects malformed entries', () => {
283
- expect(() => parseExecEnv(['NOT_VALID'])).toThrow('Invalid --env value "NOT_VALID". Use KEY=VALUE.');
284
- });
285
- it('merges explicit env over process env', () => {
286
- const previous = process.env.ANTHROPIC_MODEL;
287
- process.env.ANTHROPIC_MODEL = 'claude-sonnet-4-5';
288
- try {
289
- const env = buildExecEnv(opts({ env: { ANTHROPIC_MODEL: 'qwen3.6:35b', ANTHROPIC_BASE_URL: 'https://ollama.example.com' } }));
290
- expect(env.ANTHROPIC_MODEL).toBe('qwen3.6:35b');
291
- expect(env.ANTHROPIC_BASE_URL).toBe('https://ollama.example.com');
292
- }
293
- finally {
294
- if (previous === undefined) {
295
- delete process.env.ANTHROPIC_MODEL;
296
- }
297
- else {
298
- process.env.ANTHROPIC_MODEL = previous;
299
- }
300
- }
301
- });
302
- it('injects Claude config dir for pinned Claude versions', () => {
303
- const env = buildExecEnv(opts({ agent: 'claude', version: '2.1.98' }));
304
- expect(env.CLAUDE_CONFIG_DIR).toBe(`${process.env.HOME}/.agents/versions/claude/2.1.98/home/.claude`);
305
- });
306
- it('lets explicit env override injected Claude config dir', () => {
307
- const env = buildExecEnv(opts({
308
- agent: 'claude',
309
- version: '2.1.98',
310
- env: { CLAUDE_CONFIG_DIR: '/tmp/custom-claude-config' },
311
- }));
312
- expect(env.CLAUDE_CONFIG_DIR).toBe('/tmp/custom-claude-config');
313
- });
314
- it('does not inject Claude config dir for non-Claude agents', () => {
315
- const env = buildExecEnv(opts({ agent: 'codex', version: '0.98.0' }));
316
- expect(env.CLAUDE_CONFIG_DIR).toBeUndefined();
317
- });
318
- });
319
- // --- Version pinning ---
320
- describe('version pinning', () => {
321
- it('appends @version to base command when version is set', () => {
322
- const cmd = buildExecCommand(opts({ agent: 'claude', version: '2.1.98', mode: 'full' }));
323
- expect(cmd[0]).toBe('claude@2.1.98');
324
- });
325
- it('does not append @version when version is undefined', () => {
326
- const cmd = buildExecCommand(opts({ agent: 'claude', mode: 'full' }));
327
- expect(cmd[0]).toBe('claude');
328
- });
329
- it('works for codex with version', () => {
330
- const cmd = buildExecCommand(opts({ agent: 'codex', version: '0.98.0', mode: 'full' }));
331
- expect(cmd[0]).toBe('codex@0.98.0');
332
- expect(cmd[1]).toBe('exec');
333
- });
334
- });
335
- // --- Snapshot: agent-runner.sh patterns ---
336
- describe('agent-runner.sh compatibility', () => {
337
- it('produces claude command matching agent-runner pattern', () => {
338
- const cmd = buildExecCommand(opts({
339
- agent: 'claude',
340
- mode: 'full',
341
- headless: true,
342
- sessionId: 'sess-123',
343
- verbose: true,
344
- prompt: 'fix the bug',
345
- }));
346
- expect(cmd).toEqual([
347
- 'claude',
348
- '--dangerously-skip-permissions',
349
- '--print',
350
- '--session-id', 'sess-123',
351
- '--verbose',
352
- '-p', 'fix the bug',
353
- ]);
354
- });
355
- it('produces codex command matching agent-runner pattern', () => {
356
- const cmd = buildExecCommand(opts({
357
- agent: 'codex',
358
- mode: 'full',
359
- prompt: 'fix the bug',
360
- }));
361
- expect(cmd).toEqual([
362
- 'codex', 'exec',
363
- '--full-auto',
364
- 'fix the bug',
365
- ]);
366
- });
367
- it('claude with effort=high emits --effort high', () => {
368
- const cmd = buildExecCommand(opts({
369
- agent: 'claude',
370
- mode: 'full',
371
- effort: 'high',
372
- prompt: 'fix the bug',
373
- }));
374
- expect(cmd).toEqual([
375
- 'claude',
376
- '--effort', 'high',
377
- '--dangerously-skip-permissions',
378
- '-p', 'fix the bug',
379
- ]);
380
- });
381
- it('codex with effort=medium emits -c model_reasoning_effort=medium before exec', () => {
382
- const cmd = buildExecCommand(opts({
383
- agent: 'codex',
384
- mode: 'full',
385
- effort: 'medium',
386
- prompt: 'fix the bug',
387
- }));
388
- expect(cmd).toEqual([
389
- 'codex',
390
- '-c', 'model_reasoning_effort=medium',
391
- 'exec',
392
- '--full-auto',
393
- 'fix the bug',
394
- ]);
395
- });
396
- });
397
- });
398
- describe('detectRateLimit', () => {
399
- it.each([
400
- ['Anthropic 5-hour limit', 'Your 5-hour limit has been reached. Resets in 2h.'],
401
- ['generic rate-limit phrasing', 'Error: rate limit exceeded for claude-opus'],
402
- ['hyphenated rate-limit phrasing', 'rate-limit hit'],
403
- ['HTTP 429 code in error body', 'Request failed with status 429'],
404
- ['Google quota exceeded', 'RESOURCE_EXHAUSTED: quota exceeded for requests'],
405
- ['OpenAI usage limit', 'You have exceeded your usage limit for this month'],
406
- ['429 too many requests', '429: Too Many Requests'],
407
- ['Anthropic overloaded', 'API Error: Overloaded'],
408
- ['api_overloaded snake case', 'error_type: api_overloaded'],
409
- ])('matches %s', (_label, text) => {
410
- expect(detectRateLimit(text)).toBe(true);
411
- });
412
- it.each([
413
- ['normal success output', 'Task completed successfully.'],
414
- ['unrelated error', 'TypeError: Cannot read property foo of undefined'],
415
- ['auth error', 'Authentication failed: invalid API key'],
416
- ['file not found', 'ENOENT: no such file or directory'],
417
- ['empty stderr', ''],
418
- ])('does not match %s', (_label, text) => {
419
- expect(detectRateLimit(text)).toBe(false);
420
- });
421
- });
422
- describe('buildFallbackPrompt', () => {
423
- const uuid = 'f47ac10b-58cc-4372-a567-0e02b2c3d479';
424
- it('returns /continue <id> when next agent is Claude and we have a session ID', () => {
425
- expect(buildFallbackPrompt('claude', uuid, 'claude', 'original task')).toBe(`/continue ${uuid}`);
426
- });
427
- it('uses plain-text handoff for non-Claude next agent even with session ID', () => {
428
- const prompt = buildFallbackPrompt('claude', uuid, 'codex', 'refactor auth');
429
- expect(prompt).toContain('previous claude session was interrupted by a rate limit');
430
- expect(prompt).toContain(`agents sessions ${uuid}`);
431
- expect(prompt).toContain('Original request: refactor auth');
432
- });
433
- it('falls back to context note without session reference when no session ID is known', () => {
434
- const prompt = buildFallbackPrompt('codex', undefined, 'gemini', 'write tests');
435
- expect(prompt).toContain('previous codex session was interrupted by a rate limit');
436
- expect(prompt).not.toContain('agents sessions');
437
- expect(prompt).toContain('Original request: write tests');
438
- });
439
- it('/continue branch requires a session ID (not just Claude as next)', () => {
440
- // No session ID + Claude-as-next must fall through to the plain-text form.
441
- const prompt = buildFallbackPrompt('codex', undefined, 'claude', 'deploy');
442
- expect(prompt).not.toMatch(/^\/continue/);
443
- expect(prompt).toContain('Original request: deploy');
444
- });
445
- });
446
- //# sourceMappingURL=exec.test.js.map