@phnx-labs/agents-cli 0.1.0 → 1.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (554) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/README.md +283 -372
  3. package/dist/commands/alias.d.ts +11 -0
  4. package/dist/commands/alias.js +117 -0
  5. package/dist/commands/beta.d.ts +2 -0
  6. package/dist/commands/beta.js +53 -0
  7. package/dist/commands/cloud.d.ts +8 -1
  8. package/dist/commands/cloud.js +108 -22
  9. package/dist/commands/commands.d.ts +9 -1
  10. package/dist/commands/commands.js +24 -172
  11. package/dist/commands/daemon.d.ts +8 -1
  12. package/dist/commands/daemon.js +13 -5
  13. package/dist/commands/doctor.d.ts +15 -0
  14. package/dist/commands/doctor.js +132 -0
  15. package/dist/commands/drive.d.ts +8 -1
  16. package/dist/commands/drive.js +20 -3
  17. package/dist/commands/exec.d.ts +8 -1
  18. package/dist/commands/exec.js +96 -27
  19. package/dist/commands/factory.d.ts +19 -0
  20. package/dist/commands/factory.js +71 -0
  21. package/dist/commands/fork.d.ts +8 -1
  22. package/dist/commands/fork.js +11 -4
  23. package/dist/commands/hooks.d.ts +9 -1
  24. package/dist/commands/hooks.js +30 -182
  25. package/dist/commands/init.d.ts +15 -1
  26. package/dist/commands/init.js +168 -74
  27. package/dist/commands/mcp.d.ts +9 -1
  28. package/dist/commands/mcp.js +11 -7
  29. package/dist/commands/models.d.ts +8 -1
  30. package/dist/commands/models.js +16 -4
  31. package/dist/commands/packages.d.ts +8 -1
  32. package/dist/commands/packages.js +13 -7
  33. package/dist/commands/permissions.d.ts +9 -1
  34. package/dist/commands/permissions.js +3 -3
  35. package/dist/commands/plugins.d.ts +8 -1
  36. package/dist/commands/plugins.js +13 -2
  37. package/dist/commands/profiles.d.ts +9 -1
  38. package/dist/commands/profiles.js +56 -7
  39. package/dist/commands/prune.d.ts +22 -0
  40. package/dist/commands/prune.js +191 -0
  41. package/dist/commands/pty.d.ts +1 -1
  42. package/dist/commands/pty.js +2 -1
  43. package/dist/commands/pull.d.ts +8 -1
  44. package/dist/commands/pull.js +58 -128
  45. package/dist/commands/refresh-memory.d.ts +7 -1
  46. package/dist/commands/refresh-memory.js +7 -1
  47. package/dist/commands/repo.d.ts +15 -0
  48. package/dist/commands/repo.js +570 -0
  49. package/dist/commands/resource-view.d.ts +10 -3
  50. package/dist/commands/resource-view.js +18 -5
  51. package/dist/commands/routines.d.ts +8 -1
  52. package/dist/commands/routines.js +17 -4
  53. package/dist/commands/rules.d.ts +9 -1
  54. package/dist/commands/rules.js +16 -11
  55. package/dist/commands/secrets.d.ts +8 -1
  56. package/dist/commands/secrets.js +235 -63
  57. package/dist/commands/sessions-picker.d.ts +2 -1
  58. package/dist/commands/sessions-picker.js +88 -11
  59. package/dist/commands/sessions-tail.d.ts +19 -0
  60. package/dist/commands/sessions-tail.js +235 -0
  61. package/dist/commands/sessions.d.ts +2 -1
  62. package/dist/commands/sessions.js +188 -7
  63. package/dist/commands/skills.d.ts +9 -1
  64. package/dist/commands/skills.js +28 -178
  65. package/dist/commands/status.d.ts +7 -1
  66. package/dist/commands/status.js +7 -1
  67. package/dist/commands/subagents.d.ts +8 -1
  68. package/dist/commands/subagents.js +11 -1
  69. package/dist/commands/sync.d.ts +8 -1
  70. package/dist/commands/sync.js +8 -1
  71. package/dist/commands/teams-picker.d.ts +4 -1
  72. package/dist/commands/teams-picker.js +55 -3
  73. package/dist/commands/teams.d.ts +15 -1
  74. package/dist/commands/teams.js +323 -69
  75. package/dist/commands/usage.d.ts +11 -0
  76. package/dist/commands/usage.js +60 -0
  77. package/dist/commands/utils.d.ts +6 -1
  78. package/dist/commands/utils.js +6 -1
  79. package/dist/commands/versions.d.ts +8 -1
  80. package/dist/commands/versions.js +4 -3
  81. package/dist/commands/view.d.ts +47 -2
  82. package/dist/commands/view.js +317 -24
  83. package/dist/index.d.ts +7 -2
  84. package/dist/index.js +172 -34
  85. package/dist/lib/acp/client.d.ts +31 -0
  86. package/dist/lib/acp/client.js +117 -0
  87. package/dist/lib/acp/harnesses.d.ts +26 -0
  88. package/dist/lib/acp/harnesses.js +65 -0
  89. package/dist/lib/acp/run.d.ts +18 -0
  90. package/dist/lib/acp/run.js +39 -0
  91. package/dist/lib/agents.d.ts +74 -2
  92. package/dist/lib/agents.js +197 -21
  93. package/dist/lib/artifact-actions.d.ts +8 -4
  94. package/dist/lib/artifact-actions.js +8 -6
  95. package/dist/lib/auto-pull-worker.d.ts +11 -0
  96. package/dist/lib/auto-pull-worker.js +121 -0
  97. package/dist/lib/auto-pull.d.ts +31 -0
  98. package/dist/lib/auto-pull.js +97 -0
  99. package/dist/lib/beta.d.ts +23 -0
  100. package/dist/lib/beta.js +90 -0
  101. package/dist/lib/capabilities.d.ts +29 -0
  102. package/dist/lib/capabilities.js +74 -0
  103. package/dist/lib/cloud/codex.d.ts +9 -3
  104. package/dist/lib/cloud/codex.js +53 -13
  105. package/dist/lib/cloud/factory.d.ts +8 -3
  106. package/dist/lib/cloud/factory.js +19 -3
  107. package/dist/lib/cloud/registry.d.ts +10 -1
  108. package/dist/lib/cloud/registry.js +14 -3
  109. package/dist/lib/cloud/rush.d.ts +63 -3
  110. package/dist/lib/cloud/rush.js +273 -20
  111. package/dist/lib/cloud/store.d.ts +13 -1
  112. package/dist/lib/cloud/store.js +23 -4
  113. package/dist/lib/cloud/stream.d.ts +6 -1
  114. package/dist/lib/cloud/stream.js +95 -39
  115. package/dist/lib/cloud/types.d.ts +153 -8
  116. package/dist/lib/cloud/types.js +34 -2
  117. package/dist/lib/command-skills.d.ts +20 -0
  118. package/dist/lib/command-skills.js +142 -0
  119. package/dist/lib/commands.d.ts +22 -2
  120. package/dist/lib/commands.js +51 -11
  121. package/dist/lib/convert.d.ts +10 -1
  122. package/dist/lib/convert.js +9 -1
  123. package/dist/lib/daemon.d.ts +21 -1
  124. package/dist/lib/daemon.js +97 -4
  125. package/dist/lib/drive-sync.d.ts +18 -1
  126. package/dist/lib/drive-sync.js +57 -15
  127. package/dist/lib/exec.d.ts +23 -6
  128. package/dist/lib/exec.js +53 -17
  129. package/dist/lib/fs-walk.d.ts +2 -0
  130. package/dist/lib/fs-walk.js +40 -0
  131. package/dist/lib/fuzzy.d.ts +53 -0
  132. package/dist/lib/fuzzy.js +72 -0
  133. package/dist/lib/gemini-settings.d.ts +4 -0
  134. package/dist/lib/gemini-settings.js +33 -0
  135. package/dist/lib/git.d.ts +12 -2
  136. package/dist/lib/git.js +17 -6
  137. package/dist/lib/help.d.ts +20 -1
  138. package/dist/lib/help.js +45 -6
  139. package/dist/lib/hooks/match.d.ts +32 -0
  140. package/dist/lib/hooks/match.js +120 -0
  141. package/dist/lib/hooks.d.ts +17 -4
  142. package/dist/lib/hooks.js +119 -101
  143. package/dist/lib/manifest.d.ts +6 -1
  144. package/dist/lib/manifest.js +15 -4
  145. package/dist/lib/markdown.d.ts +0 -1
  146. package/dist/lib/markdown.js +6 -1
  147. package/dist/lib/mcp.d.ts +0 -1
  148. package/dist/lib/mcp.js +29 -33
  149. package/dist/lib/memory-compile.d.ts +13 -3
  150. package/dist/lib/memory-compile.js +31 -9
  151. package/dist/lib/memory.d.ts +14 -7
  152. package/dist/lib/memory.js +67 -38
  153. package/dist/lib/migrate.d.ts +8 -0
  154. package/dist/lib/migrate.js +85 -0
  155. package/dist/lib/models.d.ts +10 -4
  156. package/dist/lib/models.js +36 -15
  157. package/dist/lib/onepassword.d.ts +63 -0
  158. package/dist/lib/onepassword.js +186 -0
  159. package/dist/lib/paths.d.ts +8 -0
  160. package/dist/lib/paths.js +20 -0
  161. package/dist/lib/permissions.d.ts +24 -2
  162. package/dist/lib/permissions.js +117 -48
  163. package/dist/lib/picker.d.ts +10 -1
  164. package/dist/lib/picker.js +15 -1
  165. package/dist/lib/plugins.d.ts +7 -1
  166. package/dist/lib/plugins.js +10 -1
  167. package/dist/lib/profiles-presets.d.ts +10 -1
  168. package/dist/lib/profiles-presets.js +9 -1
  169. package/dist/lib/profiles.d.ts +35 -1
  170. package/dist/lib/profiles.js +36 -15
  171. package/dist/lib/pty-client.d.ts +1 -1
  172. package/dist/lib/pty-client.js +0 -1
  173. package/dist/lib/pty-server.d.ts +16 -2
  174. package/dist/lib/pty-server.js +92 -3
  175. package/dist/lib/registry.d.ts +23 -3
  176. package/dist/lib/registry.js +153 -8
  177. package/dist/lib/resources.d.ts +28 -1
  178. package/dist/lib/resources.js +79 -1
  179. package/dist/lib/rotate.d.ts +40 -13
  180. package/dist/lib/rotate.js +238 -40
  181. package/dist/lib/routines.d.ts +29 -1
  182. package/dist/lib/routines.js +32 -5
  183. package/dist/lib/runner.d.ts +14 -1
  184. package/dist/lib/runner.js +22 -3
  185. package/dist/lib/sandbox.d.ts +16 -1
  186. package/dist/lib/sandbox.js +39 -16
  187. package/dist/lib/scheduler.d.ts +8 -1
  188. package/dist/lib/scheduler.js +8 -1
  189. package/dist/lib/secrets/AgentsKeychain.app/Contents/CodeResources +0 -0
  190. package/dist/lib/secrets/AgentsKeychain.app/Contents/Info.plist +22 -0
  191. package/dist/lib/secrets/AgentsKeychain.app/Contents/MacOS/AgentsKeychain +0 -0
  192. package/dist/lib/secrets/AgentsKeychain.app/Contents/_CodeSignature/CodeResources +123 -0
  193. package/dist/lib/secrets/AgentsKeychain.app/Contents/embedded.provisionprofile +0 -0
  194. package/dist/lib/{secrets-bundles.d.ts → secrets/bundles.d.ts} +12 -2
  195. package/dist/lib/{secrets-bundles.js → secrets/bundles.js} +38 -17
  196. package/dist/lib/secrets/index.d.ts +55 -0
  197. package/dist/lib/secrets/index.js +211 -0
  198. package/dist/lib/secrets/profiles.d.ts +10 -0
  199. package/dist/lib/secrets/profiles.js +13 -0
  200. package/dist/lib/session/active.d.ts +43 -0
  201. package/dist/lib/session/active.js +392 -0
  202. package/dist/lib/session/artifacts.d.ts +12 -1
  203. package/dist/lib/session/artifacts.js +25 -5
  204. package/dist/lib/session/cloud.d.ts +30 -0
  205. package/dist/lib/session/cloud.js +121 -0
  206. package/dist/lib/session/db.d.ts +23 -2
  207. package/dist/lib/session/db.js +76 -12
  208. package/dist/lib/session/discover.d.ts +19 -4
  209. package/dist/lib/session/discover.js +344 -48
  210. package/dist/lib/session/parse.d.ts +28 -1
  211. package/dist/lib/session/parse.js +267 -9
  212. package/dist/lib/session/prompt.d.ts +9 -1
  213. package/dist/lib/session/prompt.js +17 -3
  214. package/dist/lib/session/render.d.ts +13 -1
  215. package/dist/lib/session/render.js +20 -1
  216. package/dist/lib/session/team-filter.d.ts +9 -1
  217. package/dist/lib/session/team-filter.js +11 -2
  218. package/dist/lib/session/types.d.ts +16 -2
  219. package/dist/lib/session/types.js +10 -2
  220. package/dist/lib/shims.d.ts +64 -5
  221. package/dist/lib/shims.js +309 -47
  222. package/dist/lib/skills.d.ts +27 -2
  223. package/dist/lib/skills.js +127 -65
  224. package/dist/lib/sqlite.d.ts +43 -0
  225. package/dist/lib/sqlite.js +94 -0
  226. package/dist/lib/state.d.ts +112 -27
  227. package/dist/lib/state.js +320 -148
  228. package/dist/lib/subagents.d.ts +9 -1
  229. package/dist/lib/subagents.js +70 -63
  230. package/dist/lib/sync-manifest.d.ts +81 -0
  231. package/dist/lib/sync-manifest.js +450 -0
  232. package/dist/lib/teams/agents.d.ts +103 -5
  233. package/dist/lib/teams/agents.js +414 -91
  234. package/dist/lib/teams/api.d.ts +26 -3
  235. package/dist/lib/teams/api.js +63 -3
  236. package/dist/lib/teams/debug.d.ts +6 -1
  237. package/dist/lib/teams/debug.js +6 -1
  238. package/dist/lib/teams/file_ops.d.ts +7 -1
  239. package/dist/lib/teams/file_ops.js +7 -1
  240. package/dist/lib/teams/index.d.ts +15 -0
  241. package/dist/lib/teams/index.js +14 -0
  242. package/dist/lib/teams/parsers.d.ts +4 -1
  243. package/dist/lib/teams/parsers.js +11 -1
  244. package/dist/lib/teams/persistence.d.ts +15 -1
  245. package/dist/lib/teams/persistence.js +102 -20
  246. package/dist/lib/teams/registry.d.ts +12 -1
  247. package/dist/lib/teams/registry.js +116 -33
  248. package/dist/lib/teams/summarizer.d.ts +15 -1
  249. package/dist/lib/teams/summarizer.js +14 -1
  250. package/dist/lib/teams/supervisor.d.ts +48 -0
  251. package/dist/lib/teams/supervisor.js +73 -0
  252. package/dist/lib/template.d.ts +8 -6
  253. package/dist/lib/template.js +8 -6
  254. package/dist/lib/types.d.ts +147 -8
  255. package/dist/lib/types.js +26 -3
  256. package/dist/lib/usage.d.ts +32 -1
  257. package/dist/lib/usage.js +70 -6
  258. package/dist/lib/version-duplicates.d.ts +21 -0
  259. package/dist/lib/version-duplicates.js +90 -0
  260. package/dist/lib/versions.d.ts +33 -4
  261. package/dist/lib/versions.js +376 -108
  262. package/package.json +32 -17
  263. package/scripts/postinstall.js +126 -30
  264. package/dist/commands/__tests__/sessions.test.d.ts +0 -2
  265. package/dist/commands/__tests__/sessions.test.d.ts.map +0 -1
  266. package/dist/commands/__tests__/sessions.test.js +0 -636
  267. package/dist/commands/__tests__/sessions.test.js.map +0 -1
  268. package/dist/commands/cloud.d.ts.map +0 -1
  269. package/dist/commands/cloud.js.map +0 -1
  270. package/dist/commands/commands.d.ts.map +0 -1
  271. package/dist/commands/commands.js.map +0 -1
  272. package/dist/commands/daemon.d.ts.map +0 -1
  273. package/dist/commands/daemon.js.map +0 -1
  274. package/dist/commands/drive.d.ts.map +0 -1
  275. package/dist/commands/drive.js.map +0 -1
  276. package/dist/commands/exec.d.ts.map +0 -1
  277. package/dist/commands/exec.js.map +0 -1
  278. package/dist/commands/fork.d.ts.map +0 -1
  279. package/dist/commands/fork.js.map +0 -1
  280. package/dist/commands/hooks.d.ts.map +0 -1
  281. package/dist/commands/hooks.js.map +0 -1
  282. package/dist/commands/init.d.ts.map +0 -1
  283. package/dist/commands/init.js.map +0 -1
  284. package/dist/commands/mcp.d.ts.map +0 -1
  285. package/dist/commands/mcp.js.map +0 -1
  286. package/dist/commands/models.d.ts.map +0 -1
  287. package/dist/commands/models.js.map +0 -1
  288. package/dist/commands/packages.d.ts.map +0 -1
  289. package/dist/commands/packages.js.map +0 -1
  290. package/dist/commands/permissions.d.ts.map +0 -1
  291. package/dist/commands/permissions.js.map +0 -1
  292. package/dist/commands/plugins.d.ts.map +0 -1
  293. package/dist/commands/plugins.js.map +0 -1
  294. package/dist/commands/profiles.d.ts.map +0 -1
  295. package/dist/commands/profiles.js.map +0 -1
  296. package/dist/commands/pty.d.ts.map +0 -1
  297. package/dist/commands/pty.js.map +0 -1
  298. package/dist/commands/pull.d.ts.map +0 -1
  299. package/dist/commands/pull.js.map +0 -1
  300. package/dist/commands/push.d.ts +0 -3
  301. package/dist/commands/push.d.ts.map +0 -1
  302. package/dist/commands/push.js +0 -180
  303. package/dist/commands/push.js.map +0 -1
  304. package/dist/commands/refresh-memory.d.ts.map +0 -1
  305. package/dist/commands/refresh-memory.js.map +0 -1
  306. package/dist/commands/resource-view.d.ts.map +0 -1
  307. package/dist/commands/resource-view.js.map +0 -1
  308. package/dist/commands/routines.d.ts.map +0 -1
  309. package/dist/commands/routines.js.map +0 -1
  310. package/dist/commands/rules.d.ts.map +0 -1
  311. package/dist/commands/rules.js.map +0 -1
  312. package/dist/commands/secrets.d.ts.map +0 -1
  313. package/dist/commands/secrets.js.map +0 -1
  314. package/dist/commands/sessions-picker.d.ts.map +0 -1
  315. package/dist/commands/sessions-picker.js.map +0 -1
  316. package/dist/commands/sessions.d.ts.map +0 -1
  317. package/dist/commands/sessions.js.map +0 -1
  318. package/dist/commands/skills.d.ts.map +0 -1
  319. package/dist/commands/skills.js.map +0 -1
  320. package/dist/commands/status.d.ts.map +0 -1
  321. package/dist/commands/status.js.map +0 -1
  322. package/dist/commands/subagents.d.ts.map +0 -1
  323. package/dist/commands/subagents.js.map +0 -1
  324. package/dist/commands/sync.d.ts.map +0 -1
  325. package/dist/commands/sync.js.map +0 -1
  326. package/dist/commands/teams-picker.d.ts.map +0 -1
  327. package/dist/commands/teams-picker.js.map +0 -1
  328. package/dist/commands/teams.d.ts.map +0 -1
  329. package/dist/commands/teams.js.map +0 -1
  330. package/dist/commands/utils.d.ts.map +0 -1
  331. package/dist/commands/utils.js.map +0 -1
  332. package/dist/commands/versions.d.ts.map +0 -1
  333. package/dist/commands/versions.js.map +0 -1
  334. package/dist/commands/view.d.ts.map +0 -1
  335. package/dist/commands/view.js.map +0 -1
  336. package/dist/index.d.ts.map +0 -1
  337. package/dist/index.js.map +0 -1
  338. package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
  339. package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
  340. package/dist/lib/__tests__/bugfixes.test.js +0 -192
  341. package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
  342. package/dist/lib/__tests__/exec.test.d.ts +0 -2
  343. package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
  344. package/dist/lib/__tests__/exec.test.js +0 -446
  345. package/dist/lib/__tests__/exec.test.js.map +0 -1
  346. package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
  347. package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
  348. package/dist/lib/__tests__/git-sync.test.js +0 -138
  349. package/dist/lib/__tests__/git-sync.test.js.map +0 -1
  350. package/dist/lib/__tests__/hooks.test.d.ts +0 -2
  351. package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
  352. package/dist/lib/__tests__/hooks.test.js +0 -203
  353. package/dist/lib/__tests__/hooks.test.js.map +0 -1
  354. package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
  355. package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
  356. package/dist/lib/__tests__/memory-compile.test.js +0 -95
  357. package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
  358. package/dist/lib/__tests__/models.test.d.ts +0 -2
  359. package/dist/lib/__tests__/models.test.d.ts.map +0 -1
  360. package/dist/lib/__tests__/models.test.js +0 -239
  361. package/dist/lib/__tests__/models.test.js.map +0 -1
  362. package/dist/lib/__tests__/rotate.test.d.ts +0 -2
  363. package/dist/lib/__tests__/rotate.test.d.ts.map +0 -1
  364. package/dist/lib/__tests__/rotate.test.js +0 -80
  365. package/dist/lib/__tests__/rotate.test.js.map +0 -1
  366. package/dist/lib/__tests__/secrets-bundles.test.d.ts +0 -2
  367. package/dist/lib/__tests__/secrets-bundles.test.d.ts.map +0 -1
  368. package/dist/lib/__tests__/secrets-bundles.test.js +0 -104
  369. package/dist/lib/__tests__/secrets-bundles.test.js.map +0 -1
  370. package/dist/lib/__tests__/secrets.test.d.ts +0 -2
  371. package/dist/lib/__tests__/secrets.test.d.ts.map +0 -1
  372. package/dist/lib/__tests__/secrets.test.js +0 -90
  373. package/dist/lib/__tests__/secrets.test.js.map +0 -1
  374. package/dist/lib/__tests__/shims.test.d.ts +0 -2
  375. package/dist/lib/__tests__/shims.test.d.ts.map +0 -1
  376. package/dist/lib/__tests__/shims.test.js +0 -39
  377. package/dist/lib/__tests__/shims.test.js.map +0 -1
  378. package/dist/lib/__tests__/usage.test.d.ts +0 -2
  379. package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
  380. package/dist/lib/__tests__/usage.test.js +0 -220
  381. package/dist/lib/__tests__/usage.test.js.map +0 -1
  382. package/dist/lib/__tests__/versions.test.d.ts +0 -2
  383. package/dist/lib/__tests__/versions.test.d.ts.map +0 -1
  384. package/dist/lib/__tests__/versions.test.js +0 -63
  385. package/dist/lib/__tests__/versions.test.js.map +0 -1
  386. package/dist/lib/agents.d.ts.map +0 -1
  387. package/dist/lib/agents.js.map +0 -1
  388. package/dist/lib/artifact-actions.d.ts.map +0 -1
  389. package/dist/lib/artifact-actions.js.map +0 -1
  390. package/dist/lib/cloud/codex.d.ts.map +0 -1
  391. package/dist/lib/cloud/codex.js.map +0 -1
  392. package/dist/lib/cloud/factory.d.ts.map +0 -1
  393. package/dist/lib/cloud/factory.js.map +0 -1
  394. package/dist/lib/cloud/registry.d.ts.map +0 -1
  395. package/dist/lib/cloud/registry.js.map +0 -1
  396. package/dist/lib/cloud/rush.d.ts.map +0 -1
  397. package/dist/lib/cloud/rush.js.map +0 -1
  398. package/dist/lib/cloud/store.d.ts.map +0 -1
  399. package/dist/lib/cloud/store.js.map +0 -1
  400. package/dist/lib/cloud/stream.d.ts.map +0 -1
  401. package/dist/lib/cloud/stream.js.map +0 -1
  402. package/dist/lib/cloud/types.d.ts.map +0 -1
  403. package/dist/lib/cloud/types.js.map +0 -1
  404. package/dist/lib/commands.d.ts.map +0 -1
  405. package/dist/lib/commands.js.map +0 -1
  406. package/dist/lib/convert.d.ts.map +0 -1
  407. package/dist/lib/convert.js.map +0 -1
  408. package/dist/lib/daemon.d.ts.map +0 -1
  409. package/dist/lib/daemon.js.map +0 -1
  410. package/dist/lib/drive-sync.d.ts.map +0 -1
  411. package/dist/lib/drive-sync.js.map +0 -1
  412. package/dist/lib/exec.d.ts.map +0 -1
  413. package/dist/lib/exec.js.map +0 -1
  414. package/dist/lib/factory.d.ts +0 -57
  415. package/dist/lib/factory.d.ts.map +0 -1
  416. package/dist/lib/factory.js +0 -110
  417. package/dist/lib/factory.js.map +0 -1
  418. package/dist/lib/git.d.ts.map +0 -1
  419. package/dist/lib/git.js.map +0 -1
  420. package/dist/lib/help.d.ts.map +0 -1
  421. package/dist/lib/help.js.map +0 -1
  422. package/dist/lib/hooks.d.ts.map +0 -1
  423. package/dist/lib/hooks.js.map +0 -1
  424. package/dist/lib/manifest.d.ts.map +0 -1
  425. package/dist/lib/manifest.js.map +0 -1
  426. package/dist/lib/markdown.d.ts.map +0 -1
  427. package/dist/lib/markdown.js.map +0 -1
  428. package/dist/lib/mcp.d.ts.map +0 -1
  429. package/dist/lib/mcp.js.map +0 -1
  430. package/dist/lib/memory-compile.d.ts.map +0 -1
  431. package/dist/lib/memory-compile.js.map +0 -1
  432. package/dist/lib/memory.d.ts.map +0 -1
  433. package/dist/lib/memory.js.map +0 -1
  434. package/dist/lib/models.d.ts.map +0 -1
  435. package/dist/lib/models.js.map +0 -1
  436. package/dist/lib/permissions.d.ts.map +0 -1
  437. package/dist/lib/permissions.js.map +0 -1
  438. package/dist/lib/picker.d.ts.map +0 -1
  439. package/dist/lib/picker.js.map +0 -1
  440. package/dist/lib/plugins.d.ts.map +0 -1
  441. package/dist/lib/plugins.js.map +0 -1
  442. package/dist/lib/profiles-keychain.d.ts +0 -3
  443. package/dist/lib/profiles-keychain.d.ts.map +0 -1
  444. package/dist/lib/profiles-keychain.js +0 -10
  445. package/dist/lib/profiles-keychain.js.map +0 -1
  446. package/dist/lib/profiles-presets.d.ts.map +0 -1
  447. package/dist/lib/profiles-presets.js.map +0 -1
  448. package/dist/lib/profiles.d.ts.map +0 -1
  449. package/dist/lib/profiles.js.map +0 -1
  450. package/dist/lib/pty-client.d.ts.map +0 -1
  451. package/dist/lib/pty-client.js.map +0 -1
  452. package/dist/lib/pty-server.d.ts.map +0 -1
  453. package/dist/lib/pty-server.js.map +0 -1
  454. package/dist/lib/registry.d.ts.map +0 -1
  455. package/dist/lib/registry.js.map +0 -1
  456. package/dist/lib/resources.d.ts.map +0 -1
  457. package/dist/lib/resources.js.map +0 -1
  458. package/dist/lib/rotate.d.ts.map +0 -1
  459. package/dist/lib/rotate.js.map +0 -1
  460. package/dist/lib/routines.d.ts.map +0 -1
  461. package/dist/lib/routines.js.map +0 -1
  462. package/dist/lib/runner.d.ts.map +0 -1
  463. package/dist/lib/runner.js.map +0 -1
  464. package/dist/lib/sandbox.d.ts.map +0 -1
  465. package/dist/lib/sandbox.js.map +0 -1
  466. package/dist/lib/scheduler.d.ts.map +0 -1
  467. package/dist/lib/scheduler.js.map +0 -1
  468. package/dist/lib/secrets-bundles.d.ts.map +0 -1
  469. package/dist/lib/secrets-bundles.js.map +0 -1
  470. package/dist/lib/secrets.d.ts +0 -27
  471. package/dist/lib/secrets.d.ts.map +0 -1
  472. package/dist/lib/secrets.js +0 -127
  473. package/dist/lib/secrets.js.map +0 -1
  474. package/dist/lib/session/__tests__/db.test.d.ts +0 -2
  475. package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
  476. package/dist/lib/session/__tests__/db.test.js +0 -54
  477. package/dist/lib/session/__tests__/db.test.js.map +0 -1
  478. package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
  479. package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
  480. package/dist/lib/session/__tests__/discover.test.js +0 -63
  481. package/dist/lib/session/__tests__/discover.test.js.map +0 -1
  482. package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
  483. package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
  484. package/dist/lib/session/__tests__/prompt.test.js +0 -44
  485. package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
  486. package/dist/lib/session/__tests__/render.test.d.ts +0 -2
  487. package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
  488. package/dist/lib/session/__tests__/render.test.js +0 -602
  489. package/dist/lib/session/__tests__/render.test.js.map +0 -1
  490. package/dist/lib/session/artifacts.d.ts.map +0 -1
  491. package/dist/lib/session/artifacts.js.map +0 -1
  492. package/dist/lib/session/db.d.ts.map +0 -1
  493. package/dist/lib/session/db.js.map +0 -1
  494. package/dist/lib/session/discover.d.ts.map +0 -1
  495. package/dist/lib/session/discover.js.map +0 -1
  496. package/dist/lib/session/parse.d.ts.map +0 -1
  497. package/dist/lib/session/parse.js.map +0 -1
  498. package/dist/lib/session/prompt.d.ts.map +0 -1
  499. package/dist/lib/session/prompt.js.map +0 -1
  500. package/dist/lib/session/prompt.test.d.ts +0 -2
  501. package/dist/lib/session/prompt.test.d.ts.map +0 -1
  502. package/dist/lib/session/prompt.test.js +0 -57
  503. package/dist/lib/session/prompt.test.js.map +0 -1
  504. package/dist/lib/session/render.d.ts.map +0 -1
  505. package/dist/lib/session/render.js.map +0 -1
  506. package/dist/lib/session/team-filter.d.ts.map +0 -1
  507. package/dist/lib/session/team-filter.js.map +0 -1
  508. package/dist/lib/session/team-filter.test.d.ts +0 -2
  509. package/dist/lib/session/team-filter.test.d.ts.map +0 -1
  510. package/dist/lib/session/team-filter.test.js +0 -157
  511. package/dist/lib/session/team-filter.test.js.map +0 -1
  512. package/dist/lib/session/types.d.ts.map +0 -1
  513. package/dist/lib/session/types.js.map +0 -1
  514. package/dist/lib/shims.d.ts.map +0 -1
  515. package/dist/lib/shims.js.map +0 -1
  516. package/dist/lib/skills.d.ts.map +0 -1
  517. package/dist/lib/skills.js.map +0 -1
  518. package/dist/lib/state.d.ts.map +0 -1
  519. package/dist/lib/state.js.map +0 -1
  520. package/dist/lib/subagents.d.ts.map +0 -1
  521. package/dist/lib/subagents.js.map +0 -1
  522. package/dist/lib/teams/agents.d.ts.map +0 -1
  523. package/dist/lib/teams/agents.js.map +0 -1
  524. package/dist/lib/teams/api.d.ts.map +0 -1
  525. package/dist/lib/teams/api.js.map +0 -1
  526. package/dist/lib/teams/cloud.d.ts +0 -11
  527. package/dist/lib/teams/cloud.d.ts.map +0 -1
  528. package/dist/lib/teams/cloud.js +0 -169
  529. package/dist/lib/teams/cloud.js.map +0 -1
  530. package/dist/lib/teams/debug.d.ts.map +0 -1
  531. package/dist/lib/teams/debug.js.map +0 -1
  532. package/dist/lib/teams/file_ops.d.ts.map +0 -1
  533. package/dist/lib/teams/file_ops.js.map +0 -1
  534. package/dist/lib/teams/parsers.d.ts.map +0 -1
  535. package/dist/lib/teams/parsers.js.map +0 -1
  536. package/dist/lib/teams/persistence.d.ts.map +0 -1
  537. package/dist/lib/teams/persistence.js.map +0 -1
  538. package/dist/lib/teams/ralph.d.ts +0 -8
  539. package/dist/lib/teams/ralph.d.ts.map +0 -1
  540. package/dist/lib/teams/ralph.js +0 -59
  541. package/dist/lib/teams/ralph.js.map +0 -1
  542. package/dist/lib/teams/registry.d.ts.map +0 -1
  543. package/dist/lib/teams/registry.js.map +0 -1
  544. package/dist/lib/teams/summarizer.d.ts.map +0 -1
  545. package/dist/lib/teams/summarizer.js.map +0 -1
  546. package/dist/lib/template.d.ts.map +0 -1
  547. package/dist/lib/template.js.map +0 -1
  548. package/dist/lib/types.d.ts.map +0 -1
  549. package/dist/lib/types.js.map +0 -1
  550. package/dist/lib/usage.d.ts.map +0 -1
  551. package/dist/lib/usage.js.map +0 -1
  552. package/dist/lib/versions.d.ts.map +0 -1
  553. package/dist/lib/versions.js.map +0 -1
  554. package/scripts/rebuild-sqlite.sh +0 -46
@@ -1,56 +1,139 @@
1
+ /**
2
+ * Team registry.
3
+ *
4
+ * Manages the persistent registry of named teams stored in registry.json
5
+ * under the teams data directory. Provides CRUD operations for team metadata
6
+ * (creation timestamp and optional description).
7
+ */
1
8
  import * as fs from 'fs/promises';
9
+ import * as fsSync from 'fs';
2
10
  import * as path from 'path';
3
- import { resolveBaseDir } from './persistence.js';
11
+ import { randomBytes } from 'crypto';
12
+ import lockfile from 'proper-lockfile';
13
+ import { getUserAgentsDir } from '../state.js';
4
14
  async function registryPath() {
5
- const base = await resolveBaseDir();
6
- return path.join(base, 'registry.json');
15
+ return path.join(getUserAgentsDir(), 'teams', 'registry.json');
7
16
  }
17
+ /**
18
+ * Atomic JSON write: writes to a unique sibling tmp file then renames over
19
+ * the target. rename(2) is atomic on POSIX, so a crashed write leaves the
20
+ * old file untouched instead of producing a half-written registry that
21
+ * loadTeams() would reject.
22
+ */
23
+ async function atomicWriteJson(p, data) {
24
+ await fs.mkdir(path.dirname(p), { recursive: true });
25
+ const tmp = `${p}.tmp.${process.pid}.${randomBytes(4).toString('hex')}`;
26
+ const body = JSON.stringify(data, null, 2);
27
+ await fs.writeFile(tmp, body);
28
+ try {
29
+ await fs.rename(tmp, p);
30
+ }
31
+ catch (err) {
32
+ await fs.unlink(tmp).catch(() => { });
33
+ throw err;
34
+ }
35
+ }
36
+ /**
37
+ * Run `fn` while holding an exclusive cross-process lock on the registry
38
+ * file. proper-lockfile requires the target to exist, so we touch it first.
39
+ * Stale locks (from crashed callers) auto-expire after `stale` ms.
40
+ */
41
+ async function withRegistryLock(p, fn) {
42
+ await fs.mkdir(path.dirname(p), { recursive: true });
43
+ if (!fsSync.existsSync(p)) {
44
+ // Use 'wx' so a concurrent caller doesn't clobber data written between
45
+ // our existsSync check and writeFile.
46
+ try {
47
+ await fs.writeFile(p, '{}', { flag: 'wx' });
48
+ }
49
+ catch (err) {
50
+ if (err && err.code !== 'EEXIST')
51
+ throw err;
52
+ }
53
+ }
54
+ const release = await lockfile.lock(p, {
55
+ retries: { retries: 60, minTimeout: 25, maxTimeout: 250, factor: 1.5 },
56
+ stale: 10_000,
57
+ });
58
+ try {
59
+ return await fn();
60
+ }
61
+ finally {
62
+ await release();
63
+ }
64
+ }
65
+ /**
66
+ * Load all teams from the registry file. Returns an empty object only when
67
+ * the file does not exist. A malformed file is a hard error — silently
68
+ * returning {} would let any caller wipe the user's registry on the next
69
+ * write, which is exactly the data-loss path we are trying to close.
70
+ */
8
71
  export async function loadTeams() {
72
+ const p = await registryPath();
73
+ let raw;
74
+ try {
75
+ raw = await fs.readFile(p, 'utf-8');
76
+ }
77
+ catch (err) {
78
+ if (err && err.code === 'ENOENT')
79
+ return {};
80
+ throw err;
81
+ }
9
82
  try {
10
- const raw = await fs.readFile(await registryPath(), 'utf-8');
11
83
  return JSON.parse(raw);
12
84
  }
13
- catch {
14
- return {};
85
+ catch (err) {
86
+ throw new Error(`Team registry corrupted at ${p}: ${err?.message ?? err}. Inspect and restore from backup.`);
15
87
  }
16
88
  }
17
89
  async function saveTeams(reg) {
18
90
  const p = await registryPath();
19
- await fs.mkdir(path.dirname(p), { recursive: true });
20
- await fs.writeFile(p, JSON.stringify(reg, null, 2));
91
+ await atomicWriteJson(p, reg);
21
92
  }
93
+ /** Create a new team. Throws if a team with the same name already exists. */
22
94
  export async function createTeam(name, description) {
23
- const reg = await loadTeams();
24
- if (reg[name]) {
25
- throw new Error(`Team '${name}' already exists`);
26
- }
27
- const meta = {
28
- created_at: new Date().toISOString(),
29
- ...(description ? { description } : {}),
30
- };
31
- reg[name] = meta;
32
- await saveTeams(reg);
33
- return meta;
95
+ const p = await registryPath();
96
+ return withRegistryLock(p, async () => {
97
+ const reg = await loadTeams();
98
+ if (reg[name]) {
99
+ throw new Error(`Team '${name}' already exists`);
100
+ }
101
+ const meta = {
102
+ created_at: new Date().toISOString(),
103
+ ...(description ? { description } : {}),
104
+ };
105
+ reg[name] = meta;
106
+ await saveTeams(reg);
107
+ return meta;
108
+ });
34
109
  }
110
+ /** Return existing team metadata or create a new team if it does not exist. */
35
111
  export async function ensureTeam(name) {
36
- const reg = await loadTeams();
37
- if (reg[name])
38
- return reg[name];
39
- const meta = { created_at: new Date().toISOString() };
40
- reg[name] = meta;
41
- await saveTeams(reg);
42
- return meta;
112
+ const p = await registryPath();
113
+ return withRegistryLock(p, async () => {
114
+ const reg = await loadTeams();
115
+ if (reg[name])
116
+ return reg[name];
117
+ const meta = { created_at: new Date().toISOString() };
118
+ reg[name] = meta;
119
+ await saveTeams(reg);
120
+ return meta;
121
+ });
43
122
  }
123
+ /** Remove a team from the registry. Returns false if the team did not exist. */
44
124
  export async function removeTeam(name) {
45
- const reg = await loadTeams();
46
- if (!reg[name])
47
- return false;
48
- delete reg[name];
49
- await saveTeams(reg);
50
- return true;
125
+ const p = await registryPath();
126
+ return withRegistryLock(p, async () => {
127
+ const reg = await loadTeams();
128
+ if (!reg[name])
129
+ return false;
130
+ delete reg[name];
131
+ await saveTeams(reg);
132
+ return true;
133
+ });
51
134
  }
135
+ /** Check whether a team with the given name exists in the registry. */
52
136
  export async function teamExists(name) {
53
137
  const reg = await loadTeams();
54
138
  return Boolean(reg[name]);
55
139
  }
56
- //# sourceMappingURL=registry.js.map
@@ -1,3 +1,4 @@
1
+ /** Event type priority tiers for filtering. Higher tiers surface more important events. */
1
2
  export declare const PRIORITY: Record<string, string[]>;
2
3
  /**
3
4
  * Collapse sequential events of the same type into summary entries.
@@ -8,7 +9,9 @@ export declare function collapseEvents(events: any[], maxEvents?: number): any[]
8
9
  * Get a breakdown of tool calls by type.
9
10
  */
10
11
  export declare function getToolBreakdown(events: any[]): Record<string, number>;
12
+ /** Group consecutive events of the same type into combined entries with counts and truncated content. */
11
13
  export declare function groupAndFlattenEvents(events: any[]): any[];
14
+ /** Accumulated summary of an agent's activity: files touched, tools used, errors, and final message. */
12
15
  export declare class AgentSummary {
13
16
  agentId: string;
14
17
  agentType: string;
@@ -31,10 +34,18 @@ export declare class AgentSummary {
31
34
  toDict(detailLevel?: 'brief' | 'standard' | 'detailed'): any;
32
35
  private truncate;
33
36
  }
37
+ /** Build an AgentSummary by walking all events and accumulating file ops, tool calls, errors, and messages. */
34
38
  export declare function summarizeEvents(agentId: string, agentType: string, status: string, events: any[], duration?: string | null): AgentSummary;
39
+ /**
40
+ * Compute the delta of new activity since a given point in time (ISO timestamp)
41
+ * or event index. Used for incremental status polling.
42
+ */
35
43
  export declare function getDelta(agentId: string, agentType: string, status: string, events: any[], since?: string | number): any;
44
+ /** Filter events to only those in the specified priority tiers (defaults to critical + important). */
36
45
  export declare function filterEventsByPriority(events: any[], includeLevels?: string[] | null): any[];
46
+ /** Return the event type of the last tool-related or significant event, or null. */
37
47
  export declare function getLastTool(events: any[]): string | null;
48
+ /** Lightweight status snapshot with counts, recent commands, and error flag. */
38
49
  export interface QuickStatus {
39
50
  agent_id: string;
40
51
  agent_type: string;
@@ -48,11 +59,14 @@ export interface QuickStatus {
48
59
  has_errors: boolean;
49
60
  last_message: string | null;
50
61
  }
62
+ /** Extract all tool_use events as {tool, args} pairs. */
51
63
  export declare function getToolUses(events: any[]): Array<{
52
64
  tool: string;
53
65
  args: any;
54
66
  }>;
67
+ /** Extract the last N complete messages from the event stream, joining streaming deltas. */
55
68
  export declare function getLastMessages(events: any[], count?: number): string[];
69
+ /** Build a lightweight QuickStatus snapshot from agent events. */
56
70
  export declare function getQuickStatus(agentId: string, agentType: string, status: string, events: any[]): QuickStatus;
71
+ /** Produce a one-line human-readable status summary string (e.g. "Running, modified 3 files, used bash 5 times"). */
57
72
  export declare function getStatusSummary(agentId: string, agentType: string, status: string, events: any[], duration?: string | null): string;
58
- //# sourceMappingURL=summarizer.d.ts.map
@@ -19,6 +19,7 @@ function extractErrorFromRawEvents(events, maxChars = 500) {
19
19
  }
20
20
  return null;
21
21
  }
22
+ /** Event type priority tiers for filtering. Higher tiers surface more important events. */
22
23
  export const PRIORITY = {
23
24
  critical: [
24
25
  'error',
@@ -146,6 +147,7 @@ export function getToolBreakdown(events) {
146
147
  }
147
148
  return breakdown;
148
149
  }
150
+ /** Group consecutive events of the same type into combined entries with counts and truncated content. */
149
151
  export function groupAndFlattenEvents(events) {
150
152
  if (events.length === 0)
151
153
  return [];
@@ -254,6 +256,7 @@ export function groupAndFlattenEvents(events) {
254
256
  }
255
257
  return grouped;
256
258
  }
259
+ /** Accumulated summary of an agent's activity: files touched, tools used, errors, and final message. */
257
260
  export class AgentSummary {
258
261
  agentId;
259
262
  agentType;
@@ -335,6 +338,7 @@ export class AgentSummary {
335
338
  return text.substring(0, maxLen - 3) + '...';
336
339
  }
337
340
  }
341
+ /** Build an AgentSummary by walking all events and accumulating file ops, tool calls, errors, and messages. */
338
342
  export function summarizeEvents(agentId, agentType, status, events, duration = null) {
339
343
  const summary = new AgentSummary(agentId, agentType, status, duration, events.length);
340
344
  summary.eventsCache = events;
@@ -467,6 +471,10 @@ export function summarizeEvents(agentId, agentType, status, events, duration = n
467
471
  }
468
472
  return summary;
469
473
  }
474
+ /**
475
+ * Compute the delta of new activity since a given point in time (ISO timestamp)
476
+ * or event index. Used for incremental status polling.
477
+ */
470
478
  export function getDelta(agentId, agentType, status, events, since // Optional: ISO timestamp (string) or event index (number)
471
479
  ) {
472
480
  // Filter events by timestamp (string) or index (number)
@@ -535,6 +543,7 @@ export function getDelta(agentId, agentType, status, events, since // Optional:
535
543
  new_errors: summary.errors,
536
544
  };
537
545
  }
546
+ /** Filter events to only those in the specified priority tiers (defaults to critical + important). */
538
547
  export function filterEventsByPriority(events, includeLevels = null) {
539
548
  if (!includeLevels) {
540
549
  includeLevels = ['critical', 'important'];
@@ -548,6 +557,7 @@ export function filterEventsByPriority(events, includeLevels = null) {
548
557
  }
549
558
  return events.filter(e => allowedTypes.has(e.type));
550
559
  }
560
+ /** Return the event type of the last tool-related or significant event, or null. */
551
561
  export function getLastTool(events) {
552
562
  if (events.length === 0)
553
563
  return null;
@@ -559,6 +569,7 @@ export function getLastTool(events) {
559
569
  }
560
570
  return null;
561
571
  }
572
+ /** Extract all tool_use events as {tool, args} pairs. */
562
573
  export function getToolUses(events) {
563
574
  const toolUses = [];
564
575
  for (const event of events) {
@@ -570,6 +581,7 @@ export function getToolUses(events) {
570
581
  }
571
582
  return toolUses;
572
583
  }
584
+ /** Extract the last N complete messages from the event stream, joining streaming deltas. */
573
585
  export function getLastMessages(events, count = 3) {
574
586
  const messages = [];
575
587
  let currentBuffer = '';
@@ -607,6 +619,7 @@ export function getLastMessages(events, count = 3) {
607
619
  }
608
620
  return messages.slice(-count);
609
621
  }
622
+ /** Build a lightweight QuickStatus snapshot from agent events. */
610
623
  export function getQuickStatus(agentId, agentType, status, events) {
611
624
  const filesCreatedSet = new Set();
612
625
  const filesModifiedSet = new Set();
@@ -693,6 +706,7 @@ export function getQuickStatus(agentId, agentType, status, events) {
693
706
  last_message: lastMessage,
694
707
  };
695
708
  }
709
+ /** Produce a one-line human-readable status summary string (e.g. "Running, modified 3 files, used bash 5 times"). */
696
710
  export function getStatusSummary(agentId, agentType, status, events, duration = null) {
697
711
  if (events.length === 0) {
698
712
  if (status === 'running') {
@@ -763,4 +777,3 @@ export function getStatusSummary(agentId, agentType, status, events, duration =
763
777
  }
764
778
  return parts.join(', ');
765
779
  }
766
- //# sourceMappingURL=summarizer.js.map
@@ -0,0 +1,48 @@
1
+ /**
2
+ * DAG supervisor — the continuous dispatch loop that makes the Factory
3
+ * dynamic.
4
+ *
5
+ * `teams start --watch` and `factory run` both use this. Each wave:
6
+ * 1. call startReady(team) to fire any now-ready teammates
7
+ * 2. listByTask(team) to count pending / running / done / failed
8
+ * 3. emit one status event (via the caller's callback)
9
+ * 4. exit when pending + running == 0 (DAG drained)
10
+ *
11
+ * Why a shared function:
12
+ * - the loop is the orchestration, the thing that lets any worker add
13
+ * tasks mid-flight via `agents teams add` and have them picked up
14
+ * - `factory run` is just `teams start --watch` with factory-flavored
15
+ * presentation; keeping them in sync avoids drift
16
+ *
17
+ * The caller supplies a presenter callback so the same loop can drive
18
+ * terminal output, json-per-wave output, or a TUI.
19
+ */
20
+ import type { AgentManager, AgentProcess } from './agents.js';
21
+ export interface WaveSummary {
22
+ wave: number;
23
+ timestamp: string;
24
+ team: string;
25
+ launched: AgentProcess[];
26
+ pending: number;
27
+ running: number;
28
+ completed: number;
29
+ failed: number;
30
+ drained: boolean;
31
+ }
32
+ export interface SupervisorOptions {
33
+ team: string;
34
+ intervalMs?: number;
35
+ maxWaves?: number;
36
+ /** Called once per wave. Return false to stop the loop gracefully. */
37
+ onWave: (summary: WaveSummary) => void | Promise<void> | boolean | Promise<boolean>;
38
+ }
39
+ export interface SupervisorResult {
40
+ waves: number;
41
+ stoppedBy: 'drained' | 'max-waves' | 'signal' | 'callback';
42
+ elapsed_ms: number;
43
+ }
44
+ /**
45
+ * Run the continuous DAG dispatcher until the team drains, the caller
46
+ * returns false from onWave, or SIGINT/SIGTERM arrives.
47
+ */
48
+ export declare function runSupervisor(mgr: AgentManager, opts: SupervisorOptions): Promise<SupervisorResult>;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Run the continuous DAG dispatcher until the team drains, the caller
3
+ * returns false from onWave, or SIGINT/SIGTERM arrives.
4
+ */
5
+ export async function runSupervisor(mgr, opts) {
6
+ const intervalMs = opts.intervalMs ?? 8000;
7
+ const maxWaves = opts.maxWaves ?? 1000;
8
+ const team = opts.team;
9
+ const startedAt = Date.now();
10
+ let stopSignal = false;
11
+ const onSig = () => { stopSignal = true; };
12
+ process.once('SIGINT', onSig);
13
+ process.once('SIGTERM', onSig);
14
+ try {
15
+ for (let wave = 1; wave <= maxWaves; wave++) {
16
+ // Pick up teammates added by other processes (e.g. the Planner's
17
+ // `agents teams add` calls). Without this the supervisor only ever
18
+ // sees teammates it created itself.
19
+ await mgr.rescanFromDisk();
20
+ const launched = await mgr.startReady(team);
21
+ const all = await mgr.listByTask(team);
22
+ let pending = 0, running = 0, completed = 0, failed = 0;
23
+ for (const a of all) {
24
+ if (a.status === 'pending')
25
+ pending++;
26
+ else if (a.status === 'running')
27
+ running++;
28
+ else if (a.status === 'completed')
29
+ completed++;
30
+ else if (a.status === 'failed')
31
+ failed++;
32
+ }
33
+ const summary = {
34
+ wave,
35
+ timestamp: new Date().toISOString(),
36
+ team,
37
+ launched,
38
+ pending,
39
+ running,
40
+ completed,
41
+ failed,
42
+ drained: pending === 0 && running === 0,
43
+ };
44
+ const keepGoing = await opts.onWave(summary);
45
+ if (keepGoing === false) {
46
+ return { waves: wave, stoppedBy: 'callback', elapsed_ms: Date.now() - startedAt };
47
+ }
48
+ // Re-check drain AFTER the callback. The callback may have added new
49
+ // teammates mid-flight (that's the whole point of the dynamic DAG), so
50
+ // trusting the pre-callback snapshot would drain prematurely. Rescan
51
+ // too, because the callback could have triggered a sibling process
52
+ // that wrote a fresh meta.json.
53
+ await mgr.rescanFromDisk();
54
+ const afterCallback = await mgr.listByTask(team);
55
+ const stillLive = afterCallback.some((a) => a.status === 'pending' || a.status === 'running');
56
+ if (!stillLive) {
57
+ return { waves: wave, stoppedBy: 'drained', elapsed_ms: Date.now() - startedAt };
58
+ }
59
+ if (stopSignal) {
60
+ return { waves: wave, stoppedBy: 'signal', elapsed_ms: Date.now() - startedAt };
61
+ }
62
+ await new Promise((r) => setTimeout(r, intervalMs));
63
+ if (stopSignal) {
64
+ return { waves: wave, stoppedBy: 'signal', elapsed_ms: Date.now() - startedAt };
65
+ }
66
+ }
67
+ return { waves: maxWaves, stoppedBy: 'max-waves', elapsed_ms: Date.now() - startedAt };
68
+ }
69
+ finally {
70
+ process.off('SIGINT', onSig);
71
+ process.off('SIGTERM', onSig);
72
+ }
73
+ }
@@ -1,10 +1,13 @@
1
1
  /**
2
- * Template resolution utilities
3
- * Ported from agents/halo/cli/pkg/template
2
+ * Template resolution utilities.
3
+ * Ported from agents/halo/cli/pkg/template.
4
+ *
5
+ * Supports {{artifact.*}} and {{preflight.*}} placeholder patterns used in
6
+ * artifact action input mappings.
4
7
  */
5
8
  /**
6
- * Resolve template placeholders with artifact and preflight data
7
- * Replaces {{artifact.*}} and {{preflight.*}} patterns
9
+ * Resolve template placeholders with artifact and preflight data.
10
+ * Replaces {{artifact.*}} and {{preflight.*}} patterns.
8
11
  *
9
12
  * @param tmpl - Template string with placeholders
10
13
  * @param artifact - Map of artifact key-value pairs
@@ -13,7 +16,7 @@
13
16
  */
14
17
  export declare function resolveTemplate(tmpl: string, artifact: Record<string, string>, preflight: Record<string, string | string[] | unknown>): string;
15
18
  /**
16
- * Extract all template variables from a template string
19
+ * Extract all template variables from a template string.
17
20
  * @param tmpl - Template string
18
21
  * @returns Object with artifact and preflight variable names
19
22
  */
@@ -21,4 +24,3 @@ export declare function extractTemplateVariables(tmpl: string): {
21
24
  artifact: string[];
22
25
  preflight: string[];
23
26
  };
24
- //# sourceMappingURL=template.d.ts.map
@@ -1,10 +1,13 @@
1
1
  /**
2
- * Template resolution utilities
3
- * Ported from agents/halo/cli/pkg/template
2
+ * Template resolution utilities.
3
+ * Ported from agents/halo/cli/pkg/template.
4
+ *
5
+ * Supports {{artifact.*}} and {{preflight.*}} placeholder patterns used in
6
+ * artifact action input mappings.
4
7
  */
5
8
  /**
6
- * Resolve template placeholders with artifact and preflight data
7
- * Replaces {{artifact.*}} and {{preflight.*}} patterns
9
+ * Resolve template placeholders with artifact and preflight data.
10
+ * Replaces {{artifact.*}} and {{preflight.*}} patterns.
8
11
  *
9
12
  * @param tmpl - Template string with placeholders
10
13
  * @param artifact - Map of artifact key-value pairs
@@ -34,7 +37,7 @@ export function resolveTemplate(tmpl, artifact, preflight) {
34
37
  return result;
35
38
  }
36
39
  /**
37
- * Extract all template variables from a template string
40
+ * Extract all template variables from a template string.
38
41
  * @param tmpl - Template string
39
42
  * @returns Object with artifact and preflight variable names
40
43
  */
@@ -54,4 +57,3 @@ export function extractTemplateVariables(tmpl) {
54
57
  }
55
58
  return { artifact, preflight };
56
59
  }
57
- //# sourceMappingURL=template.js.map