@phnx-labs/agents-cli 1.12.0 → 1.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/README.md +308 -297
  3. package/dist/commands/alias.d.ts +11 -0
  4. package/dist/commands/alias.js +117 -0
  5. package/dist/commands/beta.d.ts +2 -0
  6. package/dist/commands/beta.js +53 -0
  7. package/dist/commands/cloud.d.ts +10 -0
  8. package/dist/commands/cloud.js +408 -0
  9. package/dist/commands/commands.d.ts +9 -1
  10. package/dist/commands/commands.js +24 -172
  11. package/dist/commands/daemon.d.ts +8 -1
  12. package/dist/commands/daemon.js +13 -5
  13. package/dist/commands/doctor.d.ts +15 -0
  14. package/dist/commands/doctor.js +132 -0
  15. package/dist/commands/drive.d.ts +8 -1
  16. package/dist/commands/drive.js +20 -3
  17. package/dist/commands/exec.d.ts +8 -1
  18. package/dist/commands/exec.js +207 -20
  19. package/dist/commands/factory.d.ts +19 -0
  20. package/dist/commands/factory.js +71 -0
  21. package/dist/commands/fork.d.ts +8 -1
  22. package/dist/commands/fork.js +11 -4
  23. package/dist/commands/hooks.d.ts +9 -1
  24. package/dist/commands/hooks.js +30 -182
  25. package/dist/commands/init.d.ts +15 -1
  26. package/dist/commands/init.js +168 -74
  27. package/dist/commands/mcp.d.ts +9 -1
  28. package/dist/commands/mcp.js +11 -7
  29. package/dist/commands/models.d.ts +8 -1
  30. package/dist/commands/models.js +45 -6
  31. package/dist/commands/packages.d.ts +8 -1
  32. package/dist/commands/packages.js +13 -7
  33. package/dist/commands/permissions.d.ts +9 -1
  34. package/dist/commands/permissions.js +3 -3
  35. package/dist/commands/plugins.d.ts +8 -1
  36. package/dist/commands/plugins.js +13 -2
  37. package/dist/commands/profiles.d.ts +11 -0
  38. package/dist/commands/profiles.js +291 -0
  39. package/dist/commands/prune.d.ts +22 -0
  40. package/dist/commands/prune.js +191 -0
  41. package/dist/commands/pty.d.ts +1 -1
  42. package/dist/commands/pty.js +2 -1
  43. package/dist/commands/pull.d.ts +8 -1
  44. package/dist/commands/pull.js +93 -129
  45. package/dist/commands/refresh-memory.d.ts +7 -1
  46. package/dist/commands/refresh-memory.js +7 -1
  47. package/dist/commands/repo.d.ts +15 -0
  48. package/dist/commands/repo.js +570 -0
  49. package/dist/commands/resource-view.d.ts +10 -3
  50. package/dist/commands/resource-view.js +18 -5
  51. package/dist/commands/routines.d.ts +8 -1
  52. package/dist/commands/routines.js +17 -4
  53. package/dist/commands/rules.d.ts +9 -1
  54. package/dist/commands/rules.js +16 -11
  55. package/dist/commands/secrets.d.ts +10 -0
  56. package/dist/commands/secrets.js +518 -0
  57. package/dist/commands/sessions-picker.d.ts +2 -1
  58. package/dist/commands/sessions-picker.js +88 -11
  59. package/dist/commands/sessions-tail.d.ts +19 -0
  60. package/dist/commands/sessions-tail.js +235 -0
  61. package/dist/commands/sessions.d.ts +2 -1
  62. package/dist/commands/sessions.js +288 -7
  63. package/dist/commands/skills.d.ts +9 -1
  64. package/dist/commands/skills.js +28 -178
  65. package/dist/commands/status.d.ts +7 -1
  66. package/dist/commands/status.js +7 -1
  67. package/dist/commands/subagents.d.ts +8 -1
  68. package/dist/commands/subagents.js +11 -1
  69. package/dist/commands/sync.d.ts +8 -1
  70. package/dist/commands/sync.js +8 -1
  71. package/dist/commands/teams-picker.d.ts +4 -1
  72. package/dist/commands/teams-picker.js +55 -3
  73. package/dist/commands/teams.d.ts +15 -1
  74. package/dist/commands/teams.js +323 -69
  75. package/dist/commands/usage.d.ts +11 -0
  76. package/dist/commands/usage.js +60 -0
  77. package/dist/commands/utils.d.ts +6 -1
  78. package/dist/commands/utils.js +6 -1
  79. package/dist/commands/versions.d.ts +8 -1
  80. package/dist/commands/versions.js +4 -3
  81. package/dist/commands/view.d.ts +47 -2
  82. package/dist/commands/view.js +353 -20
  83. package/dist/index.d.ts +7 -2
  84. package/dist/index.js +205 -38
  85. package/dist/lib/acp/client.d.ts +31 -0
  86. package/dist/lib/acp/client.js +117 -0
  87. package/dist/lib/acp/harnesses.d.ts +26 -0
  88. package/dist/lib/acp/harnesses.js +65 -0
  89. package/dist/lib/acp/run.d.ts +18 -0
  90. package/dist/lib/acp/run.js +39 -0
  91. package/dist/lib/agents.d.ts +74 -2
  92. package/dist/lib/agents.js +207 -23
  93. package/dist/lib/artifact-actions.d.ts +8 -4
  94. package/dist/lib/artifact-actions.js +8 -6
  95. package/dist/lib/auto-pull-worker.d.ts +11 -0
  96. package/dist/lib/auto-pull-worker.js +121 -0
  97. package/dist/lib/auto-pull.d.ts +31 -0
  98. package/dist/lib/auto-pull.js +97 -0
  99. package/dist/lib/beta.d.ts +23 -0
  100. package/dist/lib/beta.js +90 -0
  101. package/dist/lib/capabilities.d.ts +29 -0
  102. package/dist/lib/capabilities.js +74 -0
  103. package/dist/lib/cloud/codex.d.ts +25 -0
  104. package/dist/lib/cloud/codex.js +250 -0
  105. package/dist/lib/cloud/factory.d.ts +31 -0
  106. package/dist/lib/cloud/factory.js +53 -0
  107. package/dist/lib/cloud/registry.d.ts +15 -0
  108. package/dist/lib/cloud/registry.js +67 -0
  109. package/dist/lib/cloud/rush.d.ts +75 -0
  110. package/dist/lib/cloud/rush.js +438 -0
  111. package/dist/lib/cloud/store.d.ts +22 -0
  112. package/dist/lib/cloud/store.js +115 -0
  113. package/dist/lib/cloud/stream.d.ts +23 -0
  114. package/dist/lib/cloud/stream.js +194 -0
  115. package/dist/lib/cloud/types.d.ts +205 -0
  116. package/dist/lib/cloud/types.js +34 -0
  117. package/dist/lib/command-skills.d.ts +20 -0
  118. package/dist/lib/command-skills.js +142 -0
  119. package/dist/lib/commands.d.ts +22 -2
  120. package/dist/lib/commands.js +51 -11
  121. package/dist/lib/convert.d.ts +10 -1
  122. package/dist/lib/convert.js +9 -1
  123. package/dist/lib/daemon.d.ts +21 -1
  124. package/dist/lib/daemon.js +97 -4
  125. package/dist/lib/drive-sync.d.ts +18 -1
  126. package/dist/lib/drive-sync.js +57 -15
  127. package/dist/lib/exec.d.ts +25 -5
  128. package/dist/lib/exec.js +72 -27
  129. package/dist/lib/fs-walk.d.ts +2 -0
  130. package/dist/lib/fs-walk.js +40 -0
  131. package/dist/lib/fuzzy.d.ts +53 -0
  132. package/dist/lib/fuzzy.js +72 -0
  133. package/dist/lib/gemini-settings.d.ts +4 -0
  134. package/dist/lib/gemini-settings.js +33 -0
  135. package/dist/lib/git.d.ts +12 -2
  136. package/dist/lib/git.js +17 -6
  137. package/dist/lib/help.d.ts +20 -1
  138. package/dist/lib/help.js +45 -6
  139. package/dist/lib/hooks/match.d.ts +32 -0
  140. package/dist/lib/hooks/match.js +120 -0
  141. package/dist/lib/hooks.d.ts +17 -4
  142. package/dist/lib/hooks.js +191 -21
  143. package/dist/lib/manifest.d.ts +6 -1
  144. package/dist/lib/manifest.js +15 -4
  145. package/dist/lib/markdown.d.ts +0 -1
  146. package/dist/lib/markdown.js +6 -1
  147. package/dist/lib/mcp.d.ts +0 -1
  148. package/dist/lib/mcp.js +29 -33
  149. package/dist/lib/memory-compile.d.ts +13 -3
  150. package/dist/lib/memory-compile.js +31 -9
  151. package/dist/lib/memory.d.ts +14 -7
  152. package/dist/lib/memory.js +67 -38
  153. package/dist/lib/migrate.d.ts +8 -0
  154. package/dist/lib/migrate.js +85 -0
  155. package/dist/lib/models.d.ts +25 -11
  156. package/dist/lib/models.js +405 -16
  157. package/dist/lib/onepassword.d.ts +63 -0
  158. package/dist/lib/onepassword.js +186 -0
  159. package/dist/lib/paths.d.ts +8 -0
  160. package/dist/lib/paths.js +20 -0
  161. package/dist/lib/permissions.d.ts +24 -2
  162. package/dist/lib/permissions.js +117 -48
  163. package/dist/lib/picker.d.ts +10 -1
  164. package/dist/lib/picker.js +15 -1
  165. package/dist/lib/plugins.d.ts +7 -1
  166. package/dist/lib/plugins.js +10 -1
  167. package/dist/lib/profiles-presets.d.ts +24 -0
  168. package/dist/lib/profiles-presets.js +103 -0
  169. package/dist/lib/profiles.d.ts +69 -0
  170. package/dist/lib/profiles.js +144 -0
  171. package/dist/lib/pty-client.d.ts +1 -1
  172. package/dist/lib/pty-client.js +0 -1
  173. package/dist/lib/pty-server.d.ts +16 -2
  174. package/dist/lib/pty-server.js +92 -3
  175. package/dist/lib/registry.d.ts +23 -3
  176. package/dist/lib/registry.js +153 -8
  177. package/dist/lib/resources.d.ts +28 -1
  178. package/dist/lib/resources.js +79 -1
  179. package/dist/lib/rotate.d.ts +89 -0
  180. package/dist/lib/rotate.js +327 -0
  181. package/dist/lib/routines.d.ts +29 -1
  182. package/dist/lib/routines.js +32 -5
  183. package/dist/lib/runner.d.ts +14 -1
  184. package/dist/lib/runner.js +22 -3
  185. package/dist/lib/sandbox.d.ts +16 -1
  186. package/dist/lib/sandbox.js +39 -16
  187. package/dist/lib/scheduler.d.ts +8 -1
  188. package/dist/lib/scheduler.js +8 -1
  189. package/dist/lib/secrets/AgentsKeychain.app/Contents/CodeResources +0 -0
  190. package/dist/lib/secrets/AgentsKeychain.app/Contents/Info.plist +22 -0
  191. package/dist/lib/secrets/AgentsKeychain.app/Contents/MacOS/AgentsKeychain +0 -0
  192. package/dist/lib/secrets/AgentsKeychain.app/Contents/_CodeSignature/CodeResources +123 -0
  193. package/dist/lib/secrets/AgentsKeychain.app/Contents/embedded.provisionprofile +0 -0
  194. package/dist/lib/secrets/bundles.d.ts +39 -0
  195. package/dist/lib/secrets/bundles.js +189 -0
  196. package/dist/lib/secrets/index.d.ts +55 -0
  197. package/dist/lib/secrets/index.js +211 -0
  198. package/dist/lib/secrets/profiles.d.ts +10 -0
  199. package/dist/lib/secrets/profiles.js +13 -0
  200. package/dist/lib/session/active.d.ts +43 -0
  201. package/dist/lib/session/active.js +392 -0
  202. package/dist/lib/session/artifacts.d.ts +16 -0
  203. package/dist/lib/session/artifacts.js +95 -0
  204. package/dist/lib/session/cloud.d.ts +30 -0
  205. package/dist/lib/session/cloud.js +121 -0
  206. package/dist/lib/session/db.d.ts +23 -2
  207. package/dist/lib/session/db.js +76 -12
  208. package/dist/lib/session/discover.d.ts +19 -4
  209. package/dist/lib/session/discover.js +344 -48
  210. package/dist/lib/session/parse.d.ts +28 -1
  211. package/dist/lib/session/parse.js +267 -9
  212. package/dist/lib/session/prompt.d.ts +9 -1
  213. package/dist/lib/session/prompt.js +17 -3
  214. package/dist/lib/session/render.d.ts +13 -1
  215. package/dist/lib/session/render.js +20 -1
  216. package/dist/lib/session/team-filter.d.ts +9 -1
  217. package/dist/lib/session/team-filter.js +11 -2
  218. package/dist/lib/session/types.d.ts +24 -2
  219. package/dist/lib/session/types.js +10 -2
  220. package/dist/lib/shims.d.ts +93 -5
  221. package/dist/lib/shims.js +380 -67
  222. package/dist/lib/skills.d.ts +27 -2
  223. package/dist/lib/skills.js +127 -65
  224. package/dist/lib/sqlite.d.ts +43 -0
  225. package/dist/lib/sqlite.js +94 -0
  226. package/dist/lib/state.d.ts +114 -22
  227. package/dist/lib/state.js +323 -138
  228. package/dist/lib/subagents.d.ts +9 -1
  229. package/dist/lib/subagents.js +70 -63
  230. package/dist/lib/sync-manifest.d.ts +81 -0
  231. package/dist/lib/sync-manifest.js +450 -0
  232. package/dist/lib/teams/agents.d.ts +103 -5
  233. package/dist/lib/teams/agents.js +414 -91
  234. package/dist/lib/teams/api.d.ts +26 -3
  235. package/dist/lib/teams/api.js +63 -3
  236. package/dist/lib/teams/debug.d.ts +6 -1
  237. package/dist/lib/teams/debug.js +6 -1
  238. package/dist/lib/teams/file_ops.d.ts +7 -1
  239. package/dist/lib/teams/file_ops.js +7 -1
  240. package/dist/lib/teams/index.d.ts +15 -0
  241. package/dist/lib/teams/index.js +14 -0
  242. package/dist/lib/teams/parsers.d.ts +4 -1
  243. package/dist/lib/teams/parsers.js +11 -1
  244. package/dist/lib/teams/persistence.d.ts +15 -1
  245. package/dist/lib/teams/persistence.js +102 -20
  246. package/dist/lib/teams/registry.d.ts +12 -1
  247. package/dist/lib/teams/registry.js +116 -33
  248. package/dist/lib/teams/summarizer.d.ts +15 -1
  249. package/dist/lib/teams/summarizer.js +14 -1
  250. package/dist/lib/teams/supervisor.d.ts +48 -0
  251. package/dist/lib/teams/supervisor.js +73 -0
  252. package/dist/lib/template.d.ts +8 -6
  253. package/dist/lib/template.js +8 -6
  254. package/dist/lib/types.d.ts +147 -8
  255. package/dist/lib/types.js +26 -3
  256. package/dist/lib/usage.d.ts +48 -1
  257. package/dist/lib/usage.js +97 -16
  258. package/dist/lib/version-duplicates.d.ts +21 -0
  259. package/dist/lib/version-duplicates.js +90 -0
  260. package/dist/lib/versions.d.ts +39 -4
  261. package/dist/lib/versions.js +401 -111
  262. package/package.json +33 -18
  263. package/scripts/postinstall.js +126 -30
  264. package/dist/commands/__tests__/sessions.test.d.ts +0 -2
  265. package/dist/commands/__tests__/sessions.test.d.ts.map +0 -1
  266. package/dist/commands/__tests__/sessions.test.js +0 -636
  267. package/dist/commands/__tests__/sessions.test.js.map +0 -1
  268. package/dist/commands/commands.d.ts.map +0 -1
  269. package/dist/commands/commands.js.map +0 -1
  270. package/dist/commands/daemon.d.ts.map +0 -1
  271. package/dist/commands/daemon.js.map +0 -1
  272. package/dist/commands/drive.d.ts.map +0 -1
  273. package/dist/commands/drive.js.map +0 -1
  274. package/dist/commands/exec.d.ts.map +0 -1
  275. package/dist/commands/exec.js.map +0 -1
  276. package/dist/commands/fork.d.ts.map +0 -1
  277. package/dist/commands/fork.js.map +0 -1
  278. package/dist/commands/hooks.d.ts.map +0 -1
  279. package/dist/commands/hooks.js.map +0 -1
  280. package/dist/commands/init.d.ts.map +0 -1
  281. package/dist/commands/init.js.map +0 -1
  282. package/dist/commands/mcp.d.ts.map +0 -1
  283. package/dist/commands/mcp.js.map +0 -1
  284. package/dist/commands/models.d.ts.map +0 -1
  285. package/dist/commands/models.js.map +0 -1
  286. package/dist/commands/packages.d.ts.map +0 -1
  287. package/dist/commands/packages.js.map +0 -1
  288. package/dist/commands/permissions.d.ts.map +0 -1
  289. package/dist/commands/permissions.js.map +0 -1
  290. package/dist/commands/plugins.d.ts.map +0 -1
  291. package/dist/commands/plugins.js.map +0 -1
  292. package/dist/commands/pty.d.ts.map +0 -1
  293. package/dist/commands/pty.js.map +0 -1
  294. package/dist/commands/pull.d.ts.map +0 -1
  295. package/dist/commands/pull.js.map +0 -1
  296. package/dist/commands/push.d.ts +0 -3
  297. package/dist/commands/push.d.ts.map +0 -1
  298. package/dist/commands/push.js +0 -180
  299. package/dist/commands/push.js.map +0 -1
  300. package/dist/commands/refresh-memory.d.ts.map +0 -1
  301. package/dist/commands/refresh-memory.js.map +0 -1
  302. package/dist/commands/resource-view.d.ts.map +0 -1
  303. package/dist/commands/resource-view.js.map +0 -1
  304. package/dist/commands/routines.d.ts.map +0 -1
  305. package/dist/commands/routines.js.map +0 -1
  306. package/dist/commands/rules.d.ts.map +0 -1
  307. package/dist/commands/rules.js.map +0 -1
  308. package/dist/commands/sessions-picker.d.ts.map +0 -1
  309. package/dist/commands/sessions-picker.js.map +0 -1
  310. package/dist/commands/sessions.d.ts.map +0 -1
  311. package/dist/commands/sessions.js.map +0 -1
  312. package/dist/commands/skills.d.ts.map +0 -1
  313. package/dist/commands/skills.js.map +0 -1
  314. package/dist/commands/status.d.ts.map +0 -1
  315. package/dist/commands/status.js.map +0 -1
  316. package/dist/commands/subagents.d.ts.map +0 -1
  317. package/dist/commands/subagents.js.map +0 -1
  318. package/dist/commands/sync.d.ts.map +0 -1
  319. package/dist/commands/sync.js.map +0 -1
  320. package/dist/commands/teams-picker.d.ts.map +0 -1
  321. package/dist/commands/teams-picker.js.map +0 -1
  322. package/dist/commands/teams.d.ts.map +0 -1
  323. package/dist/commands/teams.js.map +0 -1
  324. package/dist/commands/utils.d.ts.map +0 -1
  325. package/dist/commands/utils.js.map +0 -1
  326. package/dist/commands/versions.d.ts.map +0 -1
  327. package/dist/commands/versions.js.map +0 -1
  328. package/dist/commands/view.d.ts.map +0 -1
  329. package/dist/commands/view.js.map +0 -1
  330. package/dist/index.d.ts.map +0 -1
  331. package/dist/index.js.map +0 -1
  332. package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
  333. package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
  334. package/dist/lib/__tests__/bugfixes.test.js +0 -192
  335. package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
  336. package/dist/lib/__tests__/exec.test.d.ts +0 -2
  337. package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
  338. package/dist/lib/__tests__/exec.test.js +0 -446
  339. package/dist/lib/__tests__/exec.test.js.map +0 -1
  340. package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
  341. package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
  342. package/dist/lib/__tests__/git-sync.test.js +0 -138
  343. package/dist/lib/__tests__/git-sync.test.js.map +0 -1
  344. package/dist/lib/__tests__/hooks.test.d.ts +0 -2
  345. package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
  346. package/dist/lib/__tests__/hooks.test.js +0 -203
  347. package/dist/lib/__tests__/hooks.test.js.map +0 -1
  348. package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
  349. package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
  350. package/dist/lib/__tests__/memory-compile.test.js +0 -95
  351. package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
  352. package/dist/lib/__tests__/models.test.d.ts +0 -2
  353. package/dist/lib/__tests__/models.test.d.ts.map +0 -1
  354. package/dist/lib/__tests__/models.test.js +0 -184
  355. package/dist/lib/__tests__/models.test.js.map +0 -1
  356. package/dist/lib/__tests__/usage.test.d.ts +0 -2
  357. package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
  358. package/dist/lib/__tests__/usage.test.js +0 -218
  359. package/dist/lib/__tests__/usage.test.js.map +0 -1
  360. package/dist/lib/agents.d.ts.map +0 -1
  361. package/dist/lib/agents.js.map +0 -1
  362. package/dist/lib/artifact-actions.d.ts.map +0 -1
  363. package/dist/lib/artifact-actions.js.map +0 -1
  364. package/dist/lib/commands.d.ts.map +0 -1
  365. package/dist/lib/commands.js.map +0 -1
  366. package/dist/lib/convert.d.ts.map +0 -1
  367. package/dist/lib/convert.js.map +0 -1
  368. package/dist/lib/daemon.d.ts.map +0 -1
  369. package/dist/lib/daemon.js.map +0 -1
  370. package/dist/lib/drive-sync.d.ts.map +0 -1
  371. package/dist/lib/drive-sync.js.map +0 -1
  372. package/dist/lib/exec.d.ts.map +0 -1
  373. package/dist/lib/exec.js.map +0 -1
  374. package/dist/lib/factory.d.ts +0 -57
  375. package/dist/lib/factory.d.ts.map +0 -1
  376. package/dist/lib/factory.js +0 -110
  377. package/dist/lib/factory.js.map +0 -1
  378. package/dist/lib/git.d.ts.map +0 -1
  379. package/dist/lib/git.js.map +0 -1
  380. package/dist/lib/help.d.ts.map +0 -1
  381. package/dist/lib/help.js.map +0 -1
  382. package/dist/lib/hooks.d.ts.map +0 -1
  383. package/dist/lib/hooks.js.map +0 -1
  384. package/dist/lib/manifest.d.ts.map +0 -1
  385. package/dist/lib/manifest.js.map +0 -1
  386. package/dist/lib/markdown.d.ts.map +0 -1
  387. package/dist/lib/markdown.js.map +0 -1
  388. package/dist/lib/mcp.d.ts.map +0 -1
  389. package/dist/lib/mcp.js.map +0 -1
  390. package/dist/lib/memory-compile.d.ts.map +0 -1
  391. package/dist/lib/memory-compile.js.map +0 -1
  392. package/dist/lib/memory.d.ts.map +0 -1
  393. package/dist/lib/memory.js.map +0 -1
  394. package/dist/lib/models.d.ts.map +0 -1
  395. package/dist/lib/models.js.map +0 -1
  396. package/dist/lib/permissions.d.ts.map +0 -1
  397. package/dist/lib/permissions.js.map +0 -1
  398. package/dist/lib/picker.d.ts.map +0 -1
  399. package/dist/lib/picker.js.map +0 -1
  400. package/dist/lib/plugins.d.ts.map +0 -1
  401. package/dist/lib/plugins.js.map +0 -1
  402. package/dist/lib/pty-client.d.ts.map +0 -1
  403. package/dist/lib/pty-client.js.map +0 -1
  404. package/dist/lib/pty-server.d.ts.map +0 -1
  405. package/dist/lib/pty-server.js.map +0 -1
  406. package/dist/lib/registry.d.ts.map +0 -1
  407. package/dist/lib/registry.js.map +0 -1
  408. package/dist/lib/resources.d.ts.map +0 -1
  409. package/dist/lib/resources.js.map +0 -1
  410. package/dist/lib/routines.d.ts.map +0 -1
  411. package/dist/lib/routines.js.map +0 -1
  412. package/dist/lib/runner.d.ts.map +0 -1
  413. package/dist/lib/runner.js.map +0 -1
  414. package/dist/lib/sandbox.d.ts.map +0 -1
  415. package/dist/lib/sandbox.js.map +0 -1
  416. package/dist/lib/scheduler.d.ts.map +0 -1
  417. package/dist/lib/scheduler.js.map +0 -1
  418. package/dist/lib/session/__tests__/db.test.d.ts +0 -2
  419. package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
  420. package/dist/lib/session/__tests__/db.test.js +0 -54
  421. package/dist/lib/session/__tests__/db.test.js.map +0 -1
  422. package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
  423. package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
  424. package/dist/lib/session/__tests__/discover.test.js +0 -63
  425. package/dist/lib/session/__tests__/discover.test.js.map +0 -1
  426. package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
  427. package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
  428. package/dist/lib/session/__tests__/prompt.test.js +0 -44
  429. package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
  430. package/dist/lib/session/__tests__/render.test.d.ts +0 -2
  431. package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
  432. package/dist/lib/session/__tests__/render.test.js +0 -602
  433. package/dist/lib/session/__tests__/render.test.js.map +0 -1
  434. package/dist/lib/session/db.d.ts.map +0 -1
  435. package/dist/lib/session/db.js.map +0 -1
  436. package/dist/lib/session/discover.d.ts.map +0 -1
  437. package/dist/lib/session/discover.js.map +0 -1
  438. package/dist/lib/session/parse.d.ts.map +0 -1
  439. package/dist/lib/session/parse.js.map +0 -1
  440. package/dist/lib/session/prompt.d.ts.map +0 -1
  441. package/dist/lib/session/prompt.js.map +0 -1
  442. package/dist/lib/session/prompt.test.d.ts +0 -2
  443. package/dist/lib/session/prompt.test.d.ts.map +0 -1
  444. package/dist/lib/session/prompt.test.js +0 -57
  445. package/dist/lib/session/prompt.test.js.map +0 -1
  446. package/dist/lib/session/render.d.ts.map +0 -1
  447. package/dist/lib/session/render.js.map +0 -1
  448. package/dist/lib/session/team-filter.d.ts.map +0 -1
  449. package/dist/lib/session/team-filter.js.map +0 -1
  450. package/dist/lib/session/team-filter.test.d.ts +0 -2
  451. package/dist/lib/session/team-filter.test.d.ts.map +0 -1
  452. package/dist/lib/session/team-filter.test.js +0 -157
  453. package/dist/lib/session/team-filter.test.js.map +0 -1
  454. package/dist/lib/session/types.d.ts.map +0 -1
  455. package/dist/lib/session/types.js.map +0 -1
  456. package/dist/lib/shims.d.ts.map +0 -1
  457. package/dist/lib/shims.js.map +0 -1
  458. package/dist/lib/skills.d.ts.map +0 -1
  459. package/dist/lib/skills.js.map +0 -1
  460. package/dist/lib/state.d.ts.map +0 -1
  461. package/dist/lib/state.js.map +0 -1
  462. package/dist/lib/subagents.d.ts.map +0 -1
  463. package/dist/lib/subagents.js.map +0 -1
  464. package/dist/lib/teams/agents.d.ts.map +0 -1
  465. package/dist/lib/teams/agents.js.map +0 -1
  466. package/dist/lib/teams/api.d.ts.map +0 -1
  467. package/dist/lib/teams/api.js.map +0 -1
  468. package/dist/lib/teams/cloud.d.ts +0 -11
  469. package/dist/lib/teams/cloud.d.ts.map +0 -1
  470. package/dist/lib/teams/cloud.js +0 -169
  471. package/dist/lib/teams/cloud.js.map +0 -1
  472. package/dist/lib/teams/debug.d.ts.map +0 -1
  473. package/dist/lib/teams/debug.js.map +0 -1
  474. package/dist/lib/teams/file_ops.d.ts.map +0 -1
  475. package/dist/lib/teams/file_ops.js.map +0 -1
  476. package/dist/lib/teams/parsers.d.ts.map +0 -1
  477. package/dist/lib/teams/parsers.js.map +0 -1
  478. package/dist/lib/teams/persistence.d.ts.map +0 -1
  479. package/dist/lib/teams/persistence.js.map +0 -1
  480. package/dist/lib/teams/ralph.d.ts +0 -8
  481. package/dist/lib/teams/ralph.d.ts.map +0 -1
  482. package/dist/lib/teams/ralph.js +0 -59
  483. package/dist/lib/teams/ralph.js.map +0 -1
  484. package/dist/lib/teams/registry.d.ts.map +0 -1
  485. package/dist/lib/teams/registry.js.map +0 -1
  486. package/dist/lib/teams/summarizer.d.ts.map +0 -1
  487. package/dist/lib/teams/summarizer.js.map +0 -1
  488. package/dist/lib/template.d.ts.map +0 -1
  489. package/dist/lib/template.js.map +0 -1
  490. package/dist/lib/types.d.ts.map +0 -1
  491. package/dist/lib/types.js.map +0 -1
  492. package/dist/lib/usage.d.ts.map +0 -1
  493. package/dist/lib/usage.js.map +0 -1
  494. package/dist/lib/versions.d.ts.map +0 -1
  495. package/dist/lib/versions.js.map +0 -1
  496. package/scripts/rebuild-sqlite.sh +0 -46
@@ -1,6 +1,14 @@
1
+ /**
2
+ * Package registry client -- search, resolve, and install from remote registries.
3
+ *
4
+ * Queries the MCP registry (registry.modelcontextprotocol.io) and future skill
5
+ * registries to find packages, then resolves them into installable entries
6
+ * with transport, runtime, and argument metadata.
7
+ */
1
8
  import * as fs from 'fs';
2
9
  import { DEFAULT_REGISTRIES } from './types.js';
3
10
  import { readMeta, writeMeta } from './state.js';
11
+ /** Get all registries of a given type, merging defaults with user overrides. */
4
12
  export function getRegistries(type) {
5
13
  const meta = readMeta();
6
14
  const defaultRegs = DEFAULT_REGISTRIES[type] || {};
@@ -8,12 +16,14 @@ export function getRegistries(type) {
8
16
  // Merge defaults with user config (user overrides defaults)
9
17
  return { ...defaultRegs, ...userRegs };
10
18
  }
19
+ /** Get only the enabled registries of a given type. */
11
20
  export function getEnabledRegistries(type) {
12
21
  const registries = getRegistries(type);
13
22
  return Object.entries(registries)
14
23
  .filter(([, config]) => config.enabled)
15
24
  .map(([name, config]) => ({ name, config }));
16
25
  }
26
+ /** Add or update a registry configuration in agents.yaml. */
17
27
  export function setRegistry(type, name, config) {
18
28
  const meta = readMeta();
19
29
  if (!meta.registries) {
@@ -26,6 +36,7 @@ export function setRegistry(type, name, config) {
26
36
  meta.registries[type][name] = { ...existing, ...config };
27
37
  writeMeta(meta);
28
38
  }
39
+ /** Remove a user-configured registry. Returns false if it did not exist. */
29
40
  export function removeRegistry(type, name) {
30
41
  const meta = readMeta();
31
42
  if (meta.registries?.[type]?.[name]) {
@@ -53,6 +64,7 @@ async function fetchMcpRegistry(url, query, limit = 20, apiKey) {
53
64
  }
54
65
  return response.json();
55
66
  }
67
+ /** Search MCP registries for servers matching a query string. */
56
68
  export async function searchMcpRegistries(query, options) {
57
69
  const registries = getEnabledRegistries('mcp');
58
70
  const results = [];
@@ -86,6 +98,7 @@ export async function searchMcpRegistries(query, options) {
86
98
  }
87
99
  return results;
88
100
  }
101
+ /** Look up detailed info for an MCP server by exact name. */
89
102
  export async function getMcpServerInfo(serverName, registryName) {
90
103
  const registries = getEnabledRegistries('mcp');
91
104
  const targetRegistries = registryName
@@ -108,16 +121,134 @@ export async function getMcpServerInfo(serverName, registryName) {
108
121
  }
109
122
  return null;
110
123
  }
111
- export async function searchSkillRegistries(_query, _options) {
124
+ const skillIndexCache = new Map();
125
+ const SKILL_INDEX_TTL_MS = 10 * 60_000;
126
+ /** Fetch and cache a flat skill-index JSON document. */
127
+ async function fetchSkillIndex(url, apiKey) {
128
+ const cached = skillIndexCache.get(url);
129
+ if (cached && Date.now() - cached.fetchedAt < SKILL_INDEX_TTL_MS) {
130
+ return cached.doc;
131
+ }
132
+ const headers = { Accept: 'application/json' };
133
+ if (apiKey)
134
+ headers['Authorization'] = `Bearer ${apiKey}`;
135
+ const response = await fetch(url, { headers });
136
+ if (!response.ok) {
137
+ throw new Error(`Registry request failed: ${response.status} ${response.statusText}`);
138
+ }
139
+ const doc = (await response.json());
140
+ skillIndexCache.set(url, { fetchedAt: Date.now(), doc });
141
+ return doc;
142
+ }
143
+ /** Map a raw skill-index row into the canonical SkillEntry shape. */
144
+ function normalizeSkillEntry(raw) {
145
+ return {
146
+ name: raw.name,
147
+ description: raw.description,
148
+ source: raw.source || 'unknown',
149
+ identifier: raw.identifier,
150
+ repo: raw.repo || undefined,
151
+ path: raw.path || undefined,
152
+ author: raw.author,
153
+ installs: raw.installs,
154
+ tags: raw.tags,
155
+ trustLevel: raw.trust_level,
156
+ };
157
+ }
158
+ /** Case-insensitive substring match against the fields users expect to search. */
159
+ function skillMatchesQuery(entry, query) {
160
+ if (!query)
161
+ return true;
162
+ const q = query.toLowerCase();
163
+ const haystack = [
164
+ entry.name,
165
+ entry.identifier,
166
+ entry.description,
167
+ entry.source,
168
+ ...(entry.tags || []),
169
+ ]
170
+ .filter(Boolean)
171
+ .join(' ')
172
+ .toLowerCase();
173
+ return haystack.includes(q);
174
+ }
175
+ /** Search skill registries for entries matching a query string. */
176
+ export async function searchSkillRegistries(query, options) {
112
177
  const registries = getEnabledRegistries('skill');
113
- if (registries.length === 0) {
114
- // No skill registries configured - this is expected for now
178
+ if (registries.length === 0)
179
+ return [];
180
+ const targetRegistries = options?.registry
181
+ ? registries.filter((r) => r.name === options.registry)
182
+ : registries;
183
+ if (targetRegistries.length === 0) {
184
+ if (options?.registry) {
185
+ throw new Error(`Registry '${options.registry}' not found or not enabled`);
186
+ }
115
187
  return [];
116
188
  }
117
- // Future: implement skill registry API calls when available
118
- // For now, skill: prefix falls back to git sources
119
- return [];
189
+ const limit = options?.limit ?? 20;
190
+ const results = [];
191
+ for (const { name, config } of targetRegistries) {
192
+ try {
193
+ const doc = await fetchSkillIndex(config.url, config.apiKey);
194
+ for (const raw of doc.skills || []) {
195
+ const entry = normalizeSkillEntry(raw);
196
+ if (!skillMatchesQuery(entry, query))
197
+ continue;
198
+ results.push({
199
+ name: entry.identifier || entry.name,
200
+ description: entry.description,
201
+ type: 'skill',
202
+ source: entry.source,
203
+ registry: name,
204
+ installs: entry.installs,
205
+ });
206
+ if (results.length >= limit)
207
+ break;
208
+ }
209
+ if (results.length >= limit)
210
+ break;
211
+ }
212
+ catch (err) {
213
+ console.error(`Failed to search ${name}: ${err.message}`);
214
+ }
215
+ }
216
+ return results;
217
+ }
218
+ /** Look up a skill by identifier (or name) across enabled skill registries. */
219
+ export async function getSkillEntry(skillIdentifier, registryName) {
220
+ const registries = getEnabledRegistries('skill');
221
+ const targets = registryName
222
+ ? registries.filter((r) => r.name === registryName)
223
+ : registries;
224
+ for (const { config } of targets) {
225
+ try {
226
+ const doc = await fetchSkillIndex(config.url, config.apiKey);
227
+ const match = (doc.skills || []).find((s) => s.identifier === skillIdentifier || s.name === skillIdentifier);
228
+ if (match)
229
+ return normalizeSkillEntry(match);
230
+ }
231
+ catch {
232
+ /* try next registry */
233
+ }
234
+ }
235
+ return null;
236
+ }
237
+ /** Derive a cloneable git source from a skill entry's repo/source metadata. */
238
+ export function skillEntryToGitSource(entry) {
239
+ if (entry.repo) {
240
+ // Already an owner/repo; cloneRepo understands the `gh:` shorthand.
241
+ return `gh:${entry.repo.replace(/\.git$/, '')}`;
242
+ }
243
+ if (entry.source === 'official') {
244
+ // Hermes 'official' entries live in NousResearch/hermes-agent; the path
245
+ // sits under optional-skills/. cloneRepo pulls the whole repo — the
246
+ // per-path narrowing is a follow-on improvement.
247
+ return 'gh:NousResearch/hermes-agent';
248
+ }
249
+ return null;
120
250
  }
251
+ /** Unified search across all enabled registries of the specified type(s). */
121
252
  export async function search(query, options) {
122
253
  const results = [];
123
254
  if (!options?.type || options.type === 'mcp') {
@@ -130,6 +261,7 @@ export async function search(query, options) {
130
261
  }
131
262
  return results;
132
263
  }
264
+ /** Parse a package identifier into its type (mcp, skill, git) and name. */
133
265
  export function parsePackageIdentifier(identifier) {
134
266
  // mcp:filesystem -> MCP registry
135
267
  if (identifier.startsWith('mcp:')) {
@@ -161,6 +293,7 @@ export function parsePackageIdentifier(identifier) {
161
293
  // Single word -> search MCP registries first
162
294
  return { type: 'unknown', name: identifier };
163
295
  }
296
+ /** Resolve a package identifier to an installable package with source metadata. */
164
297
  export async function resolvePackage(identifier) {
165
298
  const parsed = parsePackageIdentifier(identifier);
166
299
  if (parsed.type === 'git') {
@@ -178,7 +311,20 @@ export async function resolvePackage(identifier) {
178
311
  return null;
179
312
  }
180
313
  if (parsed.type === 'skill') {
181
- // Skill registries not available yet, treat as git source
314
+ const entry = await getSkillEntry(parsed.name);
315
+ if (entry) {
316
+ const gitSource = skillEntryToGitSource(entry);
317
+ if (gitSource) {
318
+ return {
319
+ type: 'skill',
320
+ source: gitSource,
321
+ skillEntry: entry,
322
+ };
323
+ }
324
+ // Entry found but has no installable repo (e.g. lobehub-only listings).
325
+ return null;
326
+ }
327
+ // Fall back to git shorthand when the identifier isn't in any registry.
182
328
  const gitSource = parsed.name.startsWith('gh:') ? parsed.name : `gh:${parsed.name}`;
183
329
  return { type: 'git', source: gitSource };
184
330
  }
@@ -200,4 +346,3 @@ export async function resolvePackage(identifier) {
200
346
  }
201
347
  return null;
202
348
  }
203
- //# sourceMappingURL=registry.js.map
@@ -4,19 +4,46 @@
4
4
  */
5
5
  import type { AgentId } from './types.js';
6
6
  import { type SkillParseError } from './skills.js';
7
+ /** Resource kind — matches the subdirectory name under each repo root. */
8
+ export type ResourceKind = 'commands' | 'skills' | 'hooks' | 'rules' | 'mcp' | 'permissions' | 'subagents' | 'profiles' | 'secrets';
9
+ /** A resource resolved with its origin. */
10
+ export interface ResolvedResource {
11
+ name: string;
12
+ /** Absolute path to the resource file or directory. */
13
+ path: string;
14
+ source: 'project' | 'user' | 'system';
15
+ }
16
+ /**
17
+ * Resolve a single resource by kind + name using project > user > system precedence.
18
+ * For file-based resources the path ends in `.md`, `.yaml`, or `.yml` as appropriate.
19
+ * Returns null when the resource does not exist in any scope.
20
+ *
21
+ * Extra repos are searched last (after system) to match syncResourcesToVersion order.
22
+ */
23
+ export declare function resolveResource(kind: ResourceKind, name: string, cwd?: string): ResolvedResource | null;
24
+ /**
25
+ * List all resources of a given kind across project, user, and system scopes.
26
+ * Returns a deduplicated union (project wins on name collision), each entry
27
+ * annotated with its origin source.
28
+ */
29
+ export declare function listResources(kind: ResourceKind, cwd?: string): ResolvedResource[];
30
+ /** A single installed resource (command, skill, memory file, or hook). */
7
31
  export interface ResourceEntry {
8
32
  name: string;
9
33
  path: string;
10
34
  scope: 'user' | 'project';
11
35
  }
36
+ /** A skill resource entry with optional rule count. */
12
37
  export interface SkillResourceEntry extends ResourceEntry {
13
38
  ruleCount?: number;
14
39
  }
40
+ /** An MCP server resource entry. */
15
41
  export interface McpResourceEntry {
16
42
  name: string;
17
43
  scope: 'user' | 'project';
18
44
  version?: string;
19
45
  }
46
+ /** All resources installed for a specific agent. */
20
47
  export interface AgentResources {
21
48
  agentId: AgentId;
22
49
  commands: ResourceEntry[];
@@ -26,6 +53,7 @@ export interface AgentResources {
26
53
  memory: ResourceEntry[];
27
54
  hooks: ResourceEntry[];
28
55
  }
56
+ /** Options for resource discovery. */
29
57
  export interface GetAgentResourcesOptions {
30
58
  cwd?: string;
31
59
  scope?: 'user' | 'project' | 'all';
@@ -47,4 +75,3 @@ export declare function getAllAgentResources(agentIds: AgentId[], options?: GetA
47
75
  installed: boolean;
48
76
  }>;
49
77
  }): AgentResources[];
50
- //# sourceMappingURL=resources.d.ts.map
@@ -2,6 +2,8 @@
2
2
  * Unified resource discovery for agents.
3
3
  * Scans filesystem (source of truth) to find all installed resources for an agent.
4
4
  */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
5
7
  import { AGENTS, listInstalledMcpsWithScope } from './agents.js';
6
8
  import { listInstalledCommandsWithScope } from './commands.js';
7
9
  import { listInstalledSkillsWithScope } from './skills.js';
@@ -9,6 +11,83 @@ import { listInstalledHooksWithScope } from './hooks.js';
9
11
  import { listInstalledInstructionsWithScope } from './memory.js';
10
12
  import { getEffectiveHome } from './versions.js';
11
13
  import { listMcpServerConfigs } from './mcp.js';
14
+ import { getProjectAgentsDir, getUserAgentsDir, getSystemAgentsDir, getEnabledExtraRepos, } from './state.js';
15
+ /**
16
+ * Resolve a single resource by kind + name using project > user > system precedence.
17
+ * For file-based resources the path ends in `.md`, `.yaml`, or `.yml` as appropriate.
18
+ * Returns null when the resource does not exist in any scope.
19
+ *
20
+ * Extra repos are searched last (after system) to match syncResourcesToVersion order.
21
+ */
22
+ export function resolveResource(kind, name, cwd) {
23
+ const projectDir = getProjectAgentsDir(cwd);
24
+ const extraRepos = getEnabledExtraRepos();
25
+ const candidates = [
26
+ ...(projectDir ? [[path.join(projectDir, kind), 'project']] : []),
27
+ [path.join(getUserAgentsDir(), kind), 'user'],
28
+ [path.join(getSystemAgentsDir(), kind), 'system'],
29
+ ...extraRepos.map((e) => [path.join(e.dir, kind), 'system']),
30
+ ];
31
+ for (const [dir, source] of candidates) {
32
+ if (!fs.existsSync(dir))
33
+ continue;
34
+ // Try exact name (for directories like skills/subagents)
35
+ const exactPath = path.join(dir, name);
36
+ if (fs.existsSync(exactPath)) {
37
+ return { name, path: exactPath, source };
38
+ }
39
+ // Try with common file extensions
40
+ for (const ext of ['.md', '.yaml', '.yml']) {
41
+ const withExt = exactPath + ext;
42
+ if (fs.existsSync(withExt)) {
43
+ return { name, path: withExt, source };
44
+ }
45
+ }
46
+ }
47
+ return null;
48
+ }
49
+ /**
50
+ * List all resources of a given kind across project, user, and system scopes.
51
+ * Returns a deduplicated union (project wins on name collision), each entry
52
+ * annotated with its origin source.
53
+ */
54
+ export function listResources(kind, cwd) {
55
+ const seen = new Set();
56
+ const results = [];
57
+ const projectDir = getProjectAgentsDir(cwd);
58
+ const extraRepos = getEnabledExtraRepos();
59
+ const roots = [
60
+ ...(projectDir ? [[path.join(projectDir, kind), 'project']] : []),
61
+ [path.join(getUserAgentsDir(), kind), 'user'],
62
+ [path.join(getSystemAgentsDir(), kind), 'system'],
63
+ ...extraRepos.map((e) => [path.join(e.dir, kind), 'system']),
64
+ ];
65
+ for (const [dir, source] of roots) {
66
+ if (!fs.existsSync(dir))
67
+ continue;
68
+ let entries;
69
+ try {
70
+ entries = fs.readdirSync(dir, { withFileTypes: true });
71
+ }
72
+ catch {
73
+ continue;
74
+ }
75
+ for (const entry of entries) {
76
+ if (entry.name.startsWith('.'))
77
+ continue;
78
+ const rawName = entry.name.replace(/\.(md|yaml|yml)$/, '');
79
+ if (seen.has(rawName))
80
+ continue;
81
+ seen.add(rawName);
82
+ results.push({
83
+ name: rawName,
84
+ path: path.join(dir, entry.name),
85
+ source,
86
+ });
87
+ }
88
+ }
89
+ return results;
90
+ }
12
91
  /**
13
92
  * Get all resources installed for a specific agent by scanning the filesystem.
14
93
  * This is the source of truth - not the tracking data in agents.yaml.
@@ -100,4 +179,3 @@ export function getAllAgentResources(agentIds, options = {}) {
100
179
  return getAgentResources(agentId, { ...restOptions, cliInstalled });
101
180
  });
102
181
  }
103
- //# sourceMappingURL=resources.js.map
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Account rotation across agent versions.
3
+ *
4
+ * Detects which installed versions have expired credentials and rotates
5
+ * authentication tokens so users maintain active sessions across version switches.
6
+ */
7
+ import type { AgentId, RunStrategy } from './types.js';
8
+ import { type AccountInfo } from './agents.js';
9
+ import { type UsageSnapshot } from './usage.js';
10
+ export interface RotateCandidate {
11
+ agent: AgentId;
12
+ version: string;
13
+ email: string | null;
14
+ usageStatus: AccountInfo['usageStatus'];
15
+ usageSnapshot: UsageSnapshot | null;
16
+ authValid: boolean;
17
+ lastActive: Date | null;
18
+ }
19
+ export interface RotateResult {
20
+ /** The version picked for this run. */
21
+ picked: RotateCandidate;
22
+ /** Candidates that were considered healthy (including the picked one). */
23
+ healthy: RotateCandidate[];
24
+ /** Candidates excluded (not signed in, or out of credits). */
25
+ excluded: RotateCandidate[];
26
+ }
27
+ export declare const RUN_STRATEGIES: RunStrategy[];
28
+ /**
29
+ * Return a run strategy when the input is valid, otherwise null.
30
+ *
31
+ * `'rotate'` is accepted as a deprecated alias for `'balanced'` so old yaml
32
+ * configs and `--strategy rotate` invocations keep working. The legacy alias
33
+ * normalizes to `'balanced'` and uses the weighted-random algorithm.
34
+ */
35
+ export declare function normalizeRunStrategy(value: unknown): RunStrategy | null;
36
+ /** Read project-local run strategy from the nearest agents.yaml, if present. */
37
+ export declare function getProjectRunStrategy(agent: AgentId, startPath: string): RunStrategy | null;
38
+ /** Resolve the configured strategy: project agents.yaml, then ~/.agents-system/agents.yaml, then pinned. */
39
+ export declare function getConfiguredRunStrategy(agent: AgentId, startPath?: string): RunStrategy;
40
+ /** Persist the global run strategy used by bare `agents run <agent>`. */
41
+ export declare function setGlobalRunStrategy(agent: AgentId, strategy: RunStrategy): void;
42
+ /**
43
+ * Pick a healthy candidate using weighted random by remaining capacity.
44
+ *
45
+ * Each healthy candidate gets weight = max(1, 100 - usedPercent) where
46
+ * usedPercent is the highest-utilized non-session window (week / sonnet_week
47
+ * for Claude). An account at 10% used gets weight 90; one at 90% used gets
48
+ * weight 10 — so the fresher account is 9× more likely to be picked. Over N
49
+ * calls, traffic distributes across healthy accounts proportional to their
50
+ * headroom, with no stampede on the lowest-usage one. Stateless — parallel
51
+ * callers naturally fan out via the random roll.
52
+ *
53
+ * Eligibility: signed in (email present), auth valid, and usage available
54
+ * (any non-session window strictly under 100%, or local flag not exhausted
55
+ * when no live snapshot exists).
56
+ *
57
+ * Dedupe: when multiple versions share an email, collapse to one candidate
58
+ * per email (the least-recently-active version). Prevents two parallel pods
59
+ * from "balancing" to different versions but hitting the same Anthropic
60
+ * account and both 429ing.
61
+ *
62
+ * Returns null if no candidate is eligible — callers fall back to the pinned
63
+ * version so behavior stays predictable.
64
+ */
65
+ export declare function pickBalancedCandidate(candidates: RotateCandidate[]): RotateResult | null;
66
+ /**
67
+ * Pick an available candidate. Prefers the configured pinned version when that
68
+ * version has usage available; otherwise routes to the candidate with the most
69
+ * usage headroom.
70
+ */
71
+ export declare function pickAvailableCandidate(candidates: RotateCandidate[], preferredVersion?: string | null): RotateResult | null;
72
+ /**
73
+ * Pick a healthy version for `agent` using weighted random by remaining
74
+ * capacity. See `pickBalancedCandidate` for algorithm details.
75
+ *
76
+ * No external state — health and capacity are both read off per-version
77
+ * AccountInfo (same data `agents view` surfaces). The weighted random roll
78
+ * keeps parallel callers fanned out without rotation files or locks.
79
+ *
80
+ * Returns null if no installed version is eligible. Callers fall back to the
81
+ * global default so behavior stays predictable — we never refuse to run.
82
+ */
83
+ export declare function selectBalancedVersion(agent: AgentId): Promise<RotateResult | null>;
84
+ /** Select the configured version if available, otherwise another available version. */
85
+ export declare function selectAvailableVersion(agent: AgentId, preferredVersion?: string | null): Promise<RotateResult | null>;
86
+ export declare function resolveRunVersion(agent: AgentId, strategy: RunStrategy, cwd?: string): Promise<{
87
+ version: string | null;
88
+ rotation: RotateResult | null;
89
+ }>;