@phnx-labs/agents-cli 1.22.39 → 1.22.41

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 (569) hide show
  1. package/CHANGELOG.md +316 -0
  2. package/README.md +116 -70
  3. package/dist/bin/agents +0 -0
  4. package/dist/bootstrap.js +45 -27
  5. package/dist/browser.js +2 -2
  6. package/dist/cli/command-registry.d.ts +135 -0
  7. package/dist/cli/command-registry.js +259 -0
  8. package/dist/commands/accounts.d.ts +20 -0
  9. package/dist/commands/accounts.js +186 -25
  10. package/dist/commands/apply.d.ts +3 -3
  11. package/dist/commands/apply.js +20 -63
  12. package/dist/commands/browser.d.ts +15 -0
  13. package/dist/commands/browser.js +318 -131
  14. package/dist/commands/budget.d.ts +7 -6
  15. package/dist/commands/budget.js +8 -7
  16. package/dist/commands/cloud.js +17 -20
  17. package/dist/commands/commands.js +1 -1
  18. package/dist/commands/computer-actions.d.ts +1 -35
  19. package/dist/commands/computer-actions.js +13 -181
  20. package/dist/commands/computer.d.ts +28 -3
  21. package/dist/commands/computer.js +93 -65
  22. package/dist/commands/config.js +16 -3
  23. package/dist/commands/cost.d.ts +2 -1
  24. package/dist/commands/cost.js +7 -6
  25. package/dist/commands/daemon.js +151 -4
  26. package/dist/commands/detach.js +1 -1
  27. package/dist/commands/doctor.js +19 -11
  28. package/dist/commands/events.js +1 -1
  29. package/dist/commands/exec.d.ts +2 -50
  30. package/dist/commands/exec.js +160 -215
  31. package/dist/commands/factory.js +1 -1
  32. package/dist/commands/feed.d.ts +2 -2
  33. package/dist/commands/feed.js +12 -23
  34. package/dist/commands/fleet-capture.js +25 -27
  35. package/dist/commands/focus.d.ts +2 -3
  36. package/dist/commands/focus.js +34 -9
  37. package/dist/commands/go.js +15 -5
  38. package/dist/commands/harness.d.ts +3 -3
  39. package/dist/commands/harness.js +53 -5
  40. package/dist/commands/hooks.js +1 -1
  41. package/dist/commands/import.js +2 -2
  42. package/dist/commands/insights.d.ts +5 -5
  43. package/dist/commands/insights.js +15 -9
  44. package/dist/commands/inspect.d.ts +2 -3
  45. package/dist/commands/inspect.js +4 -16
  46. package/dist/commands/logs.d.ts +2 -2
  47. package/dist/commands/logs.js +9 -9
  48. package/dist/commands/mcp.js +2 -2
  49. package/dist/commands/memory.js +1 -1
  50. package/dist/commands/message.d.ts +1 -1
  51. package/dist/commands/message.js +7 -7
  52. package/dist/commands/mine.d.ts +11 -8
  53. package/dist/commands/mine.js +11 -10
  54. package/dist/commands/models.js +1 -1
  55. package/dist/commands/modes.js +1 -1
  56. package/dist/commands/monitors.js +23 -6
  57. package/dist/commands/output.d.ts +7 -6
  58. package/dist/commands/output.js +11 -10
  59. package/dist/commands/packages.js +4 -4
  60. package/dist/commands/perf.js +1 -1
  61. package/dist/commands/permissions.js +49 -32
  62. package/dist/commands/plugins.d.ts +1 -1
  63. package/dist/commands/plugins.js +3 -3
  64. package/dist/commands/profiles.d.ts +6 -9
  65. package/dist/commands/profiles.js +8 -321
  66. package/dist/commands/projects.d.ts +9 -0
  67. package/dist/commands/projects.js +140 -8
  68. package/dist/commands/prune.js +5 -13
  69. package/dist/commands/refresh-rules.js +1 -1
  70. package/dist/commands/repo.d.ts +5 -7
  71. package/dist/commands/repo.js +34 -18
  72. package/dist/commands/resource-view.js +4 -0
  73. package/dist/commands/resume.d.ts +11 -7
  74. package/dist/commands/resume.js +82 -98
  75. package/dist/commands/route.d.ts +12 -0
  76. package/dist/commands/route.js +261 -0
  77. package/dist/commands/routines.d.ts +2 -3
  78. package/dist/commands/routines.js +120 -145
  79. package/dist/commands/rules.js +1 -1
  80. package/dist/commands/run-account-picker.d.ts +1 -1
  81. package/dist/commands/run-account-picker.js +2 -2
  82. package/dist/commands/run-broadcast.d.ts +21 -0
  83. package/dist/commands/run-broadcast.js +89 -0
  84. package/dist/commands/run-cloud.js +1 -1
  85. package/dist/commands/secrets-vault.d.ts +10 -0
  86. package/dist/commands/{login.js → secrets-vault.js} +34 -14
  87. package/dist/commands/secrets.d.ts +4 -4
  88. package/dist/commands/secrets.js +158 -159
  89. package/dist/commands/sessions-backfill.js +1 -1
  90. package/dist/commands/sessions-browser.d.ts +1 -1
  91. package/dist/commands/sessions-browser.js +9 -5
  92. package/dist/commands/sessions-export.js +2 -2
  93. package/dist/commands/sessions-inject.js +4 -5
  94. package/dist/commands/sessions-migrate.js +16 -27
  95. package/dist/commands/sessions-picker.d.ts +14 -0
  96. package/dist/commands/sessions-picker.js +209 -13
  97. package/dist/commands/sessions-resume.d.ts +7 -3
  98. package/dist/commands/sessions-resume.js +81 -33
  99. package/dist/commands/sessions-share.d.ts +25 -0
  100. package/dist/commands/sessions-share.js +166 -0
  101. package/dist/commands/sessions-stats.js +2 -2
  102. package/dist/commands/sessions.d.ts +75 -68
  103. package/dist/commands/sessions.js +144 -180
  104. package/dist/commands/setup-browser.js +1 -1
  105. package/dist/commands/setup-computer.js +1 -1
  106. package/dist/commands/setup-fleet.js +3 -0
  107. package/dist/commands/setup-mine.d.ts +7 -3
  108. package/dist/commands/setup-mine.js +13 -8
  109. package/dist/commands/setup-preferences.js +2 -2
  110. package/dist/commands/setup-secrets.js +2 -2
  111. package/dist/commands/setup-watchdog.js +2 -2
  112. package/dist/commands/setup.js +7 -2
  113. package/dist/commands/share.d.ts +65 -0
  114. package/dist/commands/share.js +253 -20
  115. package/dist/commands/skills.js +3 -3
  116. package/dist/commands/snapshot.d.ts +2 -2
  117. package/dist/commands/snapshot.js +9 -9
  118. package/dist/commands/ssh.d.ts +1 -1
  119. package/dist/commands/ssh.js +186 -64
  120. package/dist/commands/subagents.js +1 -1
  121. package/dist/commands/sync.js +24 -9
  122. package/dist/commands/teams.d.ts +2 -2
  123. package/dist/commands/teams.js +9 -18
  124. package/dist/commands/tmux.js +5 -1
  125. package/dist/commands/trash.js +1 -1
  126. package/dist/commands/usage.d.ts +1 -1
  127. package/dist/commands/usage.js +2 -2
  128. package/dist/commands/utils.d.ts +4 -14
  129. package/dist/commands/utils.js +6 -27
  130. package/dist/commands/versions.js +2 -2
  131. package/dist/commands/view.d.ts +9 -77
  132. package/dist/commands/view.js +23 -8
  133. package/dist/commands/watchdog.js +1 -1
  134. package/dist/commands/webhook.js +25 -34
  135. package/dist/commands/workflows.js +1 -1
  136. package/dist/index.js +1 -1
  137. package/dist/lib/account-capabilities.d.ts +39 -0
  138. package/dist/lib/account-capabilities.js +59 -0
  139. package/dist/lib/account-catalog.js +1 -1
  140. package/dist/lib/account-registry.d.ts +66 -0
  141. package/dist/lib/account-registry.js +151 -5
  142. package/dist/lib/{rotate.d.ts → accounting/rotate.d.ts} +4 -4
  143. package/dist/lib/{rotate.js → accounting/rotate.js} +8 -8
  144. package/dist/lib/{usage.d.ts → accounting/usage.d.ts} +4 -4
  145. package/dist/lib/{usage.js → accounting/usage.js} +11 -11
  146. package/dist/lib/agent-spec/provider.js +1 -1
  147. package/dist/lib/agents.d.ts +72 -4
  148. package/dist/lib/agents.js +231 -199
  149. package/dist/lib/answer-router.d.ts +2 -2
  150. package/dist/lib/ask-classifier.d.ts +1 -1
  151. package/dist/lib/ask-classifier.js +1 -1
  152. package/dist/lib/audit/log.js +1 -1
  153. package/dist/lib/auth-health.d.ts +1 -1
  154. package/dist/lib/auth-health.js +2 -2
  155. package/dist/lib/brand.js +1 -1
  156. package/dist/lib/browser/caller-identity.d.ts +28 -0
  157. package/dist/lib/browser/caller-identity.js +156 -0
  158. package/dist/lib/browser/cdp.js +5 -1
  159. package/dist/lib/browser/chrome.js +12 -1
  160. package/dist/lib/browser/drivers/ssh.d.ts +1 -1
  161. package/dist/lib/browser/drivers/ssh.js +3 -2
  162. package/dist/lib/browser/hygiene.d.ts +10 -2
  163. package/dist/lib/browser/hygiene.js +7 -4
  164. package/dist/lib/browser/ipc.d.ts +22 -2
  165. package/dist/lib/browser/ipc.js +185 -21
  166. package/dist/lib/browser/profiles.d.ts +69 -5
  167. package/dist/lib/browser/profiles.js +135 -13
  168. package/dist/lib/browser/remote-control.d.ts +2 -2
  169. package/dist/lib/browser/remote-control.js +3 -3
  170. package/dist/lib/browser/runtime-state.d.ts +79 -0
  171. package/dist/lib/browser/runtime-state.js +119 -1
  172. package/dist/lib/browser/service.d.ts +137 -2
  173. package/dist/lib/browser/service.js +492 -54
  174. package/dist/lib/browser/sessions-list.d.ts +2 -1
  175. package/dist/lib/browser/sessions-list.js +4 -13
  176. package/dist/lib/browser/types.d.ts +19 -1
  177. package/dist/lib/budget/config.js +1 -1
  178. package/dist/lib/budget/ledger.js +1 -1
  179. package/dist/lib/byok-usage.js +1 -1
  180. package/dist/lib/capabilities.js +3 -15
  181. package/dist/lib/catchup.d.ts +1 -1
  182. package/dist/lib/catchup.js +1 -1
  183. package/dist/lib/cloud/dispatch.js +1 -1
  184. package/dist/lib/cloud/host.d.ts +3 -3
  185. package/dist/lib/cloud/host.js +5 -5
  186. package/dist/lib/cloud/rush.d.ts +9 -21
  187. package/dist/lib/cloud/rush.js +33 -120
  188. package/dist/lib/cloud/types.d.ts +2 -2
  189. package/dist/lib/commands.js +3 -13
  190. package/dist/lib/computer/actions.d.ts +36 -0
  191. package/dist/lib/computer/actions.js +162 -0
  192. package/dist/lib/computer/dispatch.d.ts +2 -2
  193. package/dist/lib/computer/dispatch.js +2 -2
  194. package/dist/lib/computer/sessions-list.d.ts +3 -3
  195. package/dist/lib/computer/sessions-list.js +2 -2
  196. package/dist/lib/config-keys.d.ts +2 -1
  197. package/dist/lib/config-keys.js +8 -4
  198. package/dist/lib/config-machine-keys.d.ts +4 -2
  199. package/dist/lib/config-machine-keys.js +5 -2
  200. package/dist/lib/crabbox/lease.js +9 -1
  201. package/dist/lib/crabbox/runtimes.d.ts +32 -7
  202. package/dist/lib/crabbox/runtimes.js +72 -30
  203. package/dist/lib/{daemon.d.ts → daemon/daemon.d.ts} +59 -1
  204. package/dist/lib/{daemon.js → daemon/daemon.js} +237 -49
  205. package/dist/lib/daemon-services.d.ts +1 -1
  206. package/dist/lib/daemon-services.js +5 -0
  207. package/dist/lib/daemon-ticks.d.ts +25 -0
  208. package/dist/lib/daemon-ticks.js +31 -1
  209. package/dist/lib/daemon-webhooks.d.ts +104 -0
  210. package/dist/lib/daemon-webhooks.js +215 -0
  211. package/dist/lib/device-config.d.ts +85 -75
  212. package/dist/lib/device-config.js +280 -142
  213. package/dist/lib/devices/config-migration.d.ts +29 -34
  214. package/dist/lib/devices/config-migration.js +209 -130
  215. package/dist/lib/devices/connect.d.ts +2 -2
  216. package/dist/lib/devices/connect.js +2 -2
  217. package/dist/lib/devices/discovery-policy.d.ts +30 -0
  218. package/dist/lib/devices/discovery-policy.js +101 -0
  219. package/dist/lib/devices/fleet-inventory.js +8 -3
  220. package/dist/lib/devices/harness-inventory.d.ts +1 -1
  221. package/dist/lib/devices/harness-inventory.js +12 -3
  222. package/dist/lib/devices/known-hosts.js +1 -1
  223. package/dist/lib/devices/pool.d.ts +10 -5
  224. package/dist/lib/devices/pool.js +5 -7
  225. package/dist/lib/devices/registry.d.ts +1 -1
  226. package/dist/lib/devices/registry.js +1 -1
  227. package/dist/lib/devices/resolve-profile.d.ts +2 -2
  228. package/dist/lib/devices/resolve-profile.js +2 -2
  229. package/dist/lib/devices/resolve-target.d.ts +1 -1
  230. package/dist/lib/devices/resolve-target.js +4 -4
  231. package/dist/lib/devices/self-host.d.ts +1 -1
  232. package/dist/lib/devices/self-host.js +3 -3
  233. package/dist/lib/devices/ssh-config.d.ts +1 -1
  234. package/dist/lib/devices/stats-cache.js +1 -1
  235. package/dist/lib/devices/sync.d.ts +3 -1
  236. package/dist/lib/devices/sync.js +3 -3
  237. package/dist/lib/doctor-diff.js +4 -4
  238. package/dist/lib/drift-sync.js +2 -2
  239. package/dist/lib/drift.js +2 -2
  240. package/dist/lib/event-families.d.ts +1 -1
  241. package/dist/lib/event-stream.d.ts +1 -1
  242. package/dist/lib/event-stream.js +2 -2
  243. package/dist/lib/events-ingest.js +2 -2
  244. package/dist/lib/exec.d.ts +4 -4
  245. package/dist/lib/exec.js +11 -11
  246. package/dist/lib/factory/snapshot.d.ts +1 -1
  247. package/dist/lib/factory/snapshot.js +1 -1
  248. package/dist/lib/{activity.d.ts → feed/activity.d.ts} +1 -1
  249. package/dist/lib/{activity.js → feed/activity.js} +7 -7
  250. package/dist/lib/{events.d.ts → feed/events.d.ts} +2 -2
  251. package/dist/lib/{events.js → feed/events.js} +5 -5
  252. package/dist/lib/{feed.js → feed/feed.js} +4 -4
  253. package/dist/lib/feed-outcome.d.ts +1 -1
  254. package/dist/lib/feed-policy.d.ts +1 -1
  255. package/dist/lib/feed-policy.js +1 -1
  256. package/dist/lib/feed-post.d.ts +1 -1
  257. package/dist/lib/feed-post.js +1 -1
  258. package/dist/lib/feed-ranking.d.ts +1 -1
  259. package/dist/lib/fleet/apply.d.ts +0 -6
  260. package/dist/lib/fleet/apply.js +18 -45
  261. package/dist/lib/fleet/auth-sync.d.ts +16 -35
  262. package/dist/lib/fleet/auth-sync.js +16 -75
  263. package/dist/lib/fleet/capture.js +8 -6
  264. package/dist/lib/fleet/manifest.js +23 -11
  265. package/dist/lib/fleet/types.d.ts +19 -7
  266. package/dist/lib/fleet-cache.d.ts +1 -1
  267. package/dist/lib/fleet-cache.js +1 -1
  268. package/dist/lib/format.d.ts +19 -0
  269. package/dist/lib/format.js +44 -1
  270. package/dist/lib/friction-heuristics.d.ts +1 -1
  271. package/dist/lib/git.d.ts +24 -1
  272. package/dist/lib/git.js +82 -38
  273. package/dist/lib/heal.js +3 -3
  274. package/dist/lib/hooks.d.ts +18 -0
  275. package/dist/lib/hooks.js +113 -1
  276. package/dist/lib/hosts/credentials.d.ts +30 -10
  277. package/dist/lib/hosts/credentials.js +38 -26
  278. package/dist/lib/hosts/dispatch.d.ts +3 -3
  279. package/dist/lib/hosts/dispatch.js +3 -3
  280. package/dist/lib/hosts/option.d.ts +3 -3
  281. package/dist/lib/hosts/option.js +7 -8
  282. package/dist/lib/hosts/passthrough.d.ts +17 -17
  283. package/dist/lib/hosts/passthrough.js +67 -50
  284. package/dist/lib/hosts/providers/devices.d.ts +1 -1
  285. package/dist/lib/hosts/providers/devices.js +1 -1
  286. package/dist/lib/hosts/reconcile.d.ts +1 -1
  287. package/dist/lib/hosts/reconcile.js +1 -1
  288. package/dist/lib/hosts/reconnect.d.ts +1 -1
  289. package/dist/lib/hosts/reconnect.js +2 -2
  290. package/dist/lib/hosts/registry.d.ts +5 -5
  291. package/dist/lib/hosts/registry.js +5 -5
  292. package/dist/lib/hosts/remote-cmd.d.ts +10 -10
  293. package/dist/lib/hosts/remote-cmd.js +25 -18
  294. package/dist/lib/hosts/remote-os.d.ts +4 -4
  295. package/dist/lib/hosts/remote-os.js +4 -4
  296. package/dist/lib/hosts/remote-session-id.d.ts +2 -2
  297. package/dist/lib/hosts/remote-session-id.js +2 -2
  298. package/dist/lib/hosts/routing-flag.d.ts +3 -3
  299. package/dist/lib/hosts/routing-flag.js +4 -5
  300. package/dist/lib/hosts/run-target.d.ts +4 -4
  301. package/dist/lib/hosts/run-target.js +4 -4
  302. package/dist/lib/hosts/session-index.d.ts +2 -2
  303. package/dist/lib/hosts/session-index.js +1 -1
  304. package/dist/lib/hosts/session-marker.d.ts +1 -1
  305. package/dist/lib/hosts/session-marker.js +1 -1
  306. package/dist/lib/hosts/types.d.ts +2 -2
  307. package/dist/lib/hosts/types.js +2 -2
  308. package/dist/lib/import.js +1 -1
  309. package/dist/lib/{migrate.d.ts → installations/migrate.d.ts} +13 -1
  310. package/dist/lib/{migrate.js → installations/migrate.js} +160 -40
  311. package/dist/lib/installations/resolve.js +1 -1
  312. package/dist/lib/installations/strategies.js +1 -1
  313. package/dist/lib/installations/update.js +2 -2
  314. package/dist/lib/{versions.d.ts → installations/versions.d.ts} +12 -3
  315. package/dist/lib/{versions.js → installations/versions.js} +51 -31
  316. package/dist/lib/isolation-boundary-report.js +1 -1
  317. package/dist/lib/linear-projects.d.ts +28 -0
  318. package/dist/lib/linear-projects.js +30 -0
  319. package/dist/lib/loop.js +1 -1
  320. package/dist/lib/mailbox-gc.js +1 -1
  321. package/dist/lib/mailbox.js +1 -1
  322. package/dist/lib/mcp-registry.d.ts +62 -0
  323. package/dist/lib/mcp-registry.js +177 -0
  324. package/dist/lib/mcp.d.ts +5 -0
  325. package/dist/lib/mcp.js +124 -307
  326. package/dist/lib/menubar/MenubarHelper.app/Contents/CodeResources +0 -0
  327. package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
  328. package/dist/lib/menubar/install-menubar.d.ts +7 -0
  329. package/dist/lib/menubar/install-menubar.js +24 -6
  330. package/dist/lib/menubar/snapshot.d.ts +7 -0
  331. package/dist/lib/menubar/snapshot.js +8 -6
  332. package/dist/lib/models.js +1 -1
  333. package/dist/lib/monitors/config.d.ts +12 -0
  334. package/dist/lib/monitors/config.js +3 -0
  335. package/dist/lib/monitors/dispatch.js +26 -5
  336. package/dist/lib/monitors/engine.js +10 -0
  337. package/dist/lib/monitors/sources/webhook.d.ts +1 -1
  338. package/dist/lib/monitors/state.d.ts +42 -0
  339. package/dist/lib/monitors/state.js +30 -0
  340. package/dist/lib/notify.d.ts +1 -1
  341. package/dist/lib/observe-aliases.d.ts +3 -3
  342. package/dist/lib/observe-aliases.js +3 -21
  343. package/dist/lib/output/git-output.js +2 -2
  344. package/dist/lib/overdue.d.ts +1 -1
  345. package/dist/lib/overdue.js +1 -1
  346. package/dist/lib/permissions-registry.d.ts +65 -0
  347. package/dist/lib/permissions-registry.js +599 -0
  348. package/dist/lib/permissions.d.ts +24 -13
  349. package/dist/lib/permissions.js +52 -271
  350. package/dist/lib/picker.d.ts +16 -0
  351. package/dist/lib/picker.js +33 -3
  352. package/dist/lib/placement.d.ts +1 -1
  353. package/dist/lib/placement.js +4 -4
  354. package/dist/lib/platform/paths.d.ts +8 -0
  355. package/dist/lib/platform/paths.js +11 -0
  356. package/dist/lib/platform/posixpath.js +3 -3
  357. package/dist/lib/{plugin-marketplace.d.ts → plugins/plugin-marketplace.d.ts} +1 -1
  358. package/dist/lib/{plugin-marketplace.js → plugins/plugin-marketplace.js} +2 -2
  359. package/dist/lib/{plugins.d.ts → plugins/plugins.d.ts} +1 -1
  360. package/dist/lib/{plugins.js → plugins/plugins.js} +7 -7
  361. package/dist/lib/{skills.d.ts → plugins/skills.d.ts} +1 -1
  362. package/dist/lib/{skills.js → plugins/skills.js} +7 -7
  363. package/dist/lib/pricing/cost.d.ts +1 -1
  364. package/dist/lib/pricing/cost.js +1 -1
  365. package/dist/lib/profiles-presets.d.ts +1 -1
  366. package/dist/lib/profiles-presets.js +1 -1
  367. package/dist/lib/profiles.js +2 -2
  368. package/dist/lib/project-import.js +4 -1
  369. package/dist/lib/project-key.js +7 -0
  370. package/dist/lib/project-launch.d.ts +1 -1
  371. package/dist/lib/project-launch.js +3 -3
  372. package/dist/lib/project-pull.d.ts +128 -0
  373. package/dist/lib/project-pull.js +384 -0
  374. package/dist/lib/project-root.d.ts +2 -2
  375. package/dist/lib/project-root.js +2 -2
  376. package/dist/lib/project-status.js +1 -1
  377. package/dist/lib/projects.d.ts +23 -0
  378. package/dist/lib/projects.js +29 -6
  379. package/dist/lib/refresh.d.ts +12 -1
  380. package/dist/lib/refresh.js +16 -9
  381. package/dist/lib/registry.d.ts +9 -2
  382. package/dist/lib/registry.js +11 -4
  383. package/dist/lib/resources.d.ts +2 -2
  384. package/dist/lib/resources.js +2 -2
  385. package/dist/lib/routers.d.ts +81 -0
  386. package/dist/lib/routers.js +153 -0
  387. package/dist/lib/routine-context.d.ts +1 -0
  388. package/dist/lib/routine-context.js +7 -2
  389. package/dist/lib/routine-notify-owner.d.ts +1 -1
  390. package/dist/lib/routine-notify.d.ts +1 -1
  391. package/dist/lib/routine-notify.js +1 -1
  392. package/dist/lib/routine-process-cleanup.d.ts +1 -1
  393. package/dist/lib/routine-readiness.d.ts +1 -1
  394. package/dist/lib/routine-readiness.js +11 -4
  395. package/dist/lib/routines-placement.d.ts +12 -2
  396. package/dist/lib/routines-placement.js +20 -3
  397. package/dist/lib/routines-project.d.ts +1 -1
  398. package/dist/lib/routines-project.js +1 -1
  399. package/dist/lib/rules/compile.d.ts +1 -0
  400. package/dist/lib/rules/compile.js +10 -2
  401. package/dist/lib/rules/rules.js +1 -1
  402. package/dist/lib/run-notify.js +1 -1
  403. package/dist/lib/runner.d.ts +80 -2
  404. package/dist/lib/runner.js +261 -67
  405. package/dist/lib/sandbox.d.ts +1 -1
  406. package/dist/lib/scheduler.d.ts +1 -1
  407. package/dist/lib/scheduler.js +1 -1
  408. package/dist/lib/{routines.d.ts → scheduling/routines.d.ts} +54 -9
  409. package/dist/lib/{routines.js → scheduling/routines.js} +173 -14
  410. package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
  411. package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
  412. package/dist/lib/secrets/agent.js +2 -2
  413. package/dist/lib/secrets/audit.js +1 -1
  414. package/dist/lib/secrets/bundles.d.ts +4 -4
  415. package/dist/lib/secrets/bundles.js +8 -8
  416. package/dist/lib/secrets/headless.d.ts +16 -0
  417. package/dist/lib/secrets/headless.js +21 -0
  418. package/dist/lib/secrets/index.js +1 -1
  419. package/dist/lib/secrets/list-filter.d.ts +1 -1
  420. package/dist/lib/secrets/list-filter.js +2 -2
  421. package/dist/lib/secrets/push.d.ts +1 -1
  422. package/dist/lib/secrets/push.js +10 -12
  423. package/dist/lib/secrets/remote.d.ts +21 -17
  424. package/dist/lib/secrets/remote.js +39 -23
  425. package/dist/lib/secrets/vault.js +2 -2
  426. package/dist/lib/self-heal/checks/shadowing.js +1 -1
  427. package/dist/lib/self-heal/checks/shims.js +1 -1
  428. package/dist/lib/self-update.d.ts +39 -4
  429. package/dist/lib/self-update.js +78 -25
  430. package/dist/lib/serve/control.d.ts +1 -1
  431. package/dist/lib/serve/control.js +4 -4
  432. package/dist/lib/serve/data.d.ts +1 -1
  433. package/dist/lib/serve/data.js +1 -1
  434. package/dist/lib/serve/stream.js +1 -1
  435. package/dist/lib/service-manifest.d.ts +29 -0
  436. package/dist/lib/service-manifest.js +80 -0
  437. package/dist/lib/session/active.d.ts +59 -7
  438. package/dist/lib/session/active.js +158 -17
  439. package/dist/lib/session/bash-command.js +1 -1
  440. package/dist/lib/session/claude-accounts.d.ts +1 -1
  441. package/dist/lib/session/claude-accounts.js +1 -1
  442. package/dist/lib/session/db.d.ts +10 -2
  443. package/dist/lib/session/db.js +25 -6
  444. package/dist/lib/session/discover.d.ts +77 -0
  445. package/dist/lib/session/discover.js +130 -25
  446. package/dist/lib/session/fork.js +1 -1
  447. package/dist/lib/session/inject.d.ts +1 -1
  448. package/dist/lib/session/insights.d.ts +1 -1
  449. package/dist/lib/session/insights.js +1 -1
  450. package/dist/lib/session/live-metadata.d.ts +15 -0
  451. package/dist/lib/session/live-metadata.js +76 -0
  452. package/dist/lib/session/migrate-targets.d.ts +1 -1
  453. package/dist/lib/session/recovery.d.ts +1 -1
  454. package/dist/lib/session/recovery.js +2 -2
  455. package/dist/lib/session/remote-active.d.ts +10 -1
  456. package/dist/lib/session/remote-active.js +8 -3
  457. package/dist/lib/session/remote-bundle.d.ts +1 -1
  458. package/dist/lib/session/remote-bundle.js +2 -2
  459. package/dist/lib/session/remote-list.d.ts +15 -4
  460. package/dist/lib/session/remote-list.js +40 -3
  461. package/dist/lib/session/remote.d.ts +5 -5
  462. package/dist/lib/session/remote.js +13 -17
  463. package/dist/lib/session/resume-command.d.ts +3 -2
  464. package/dist/lib/session/resume-command.js +4 -3
  465. package/dist/lib/session/resume-owner.d.ts +3 -3
  466. package/dist/lib/session/resume-owner.js +3 -3
  467. package/dist/lib/session/session-cache.d.ts +12 -0
  468. package/dist/lib/session/session-cache.js +2 -0
  469. package/dist/lib/session/share-html.d.ts +55 -0
  470. package/dist/lib/session/share-html.js +319 -0
  471. package/dist/lib/session/shell-programs.js +1 -1
  472. package/dist/lib/session/state.js +5 -5
  473. package/dist/lib/session/team-filter.d.ts +1 -1
  474. package/dist/lib/session/team-filter.js +1 -1
  475. package/dist/lib/session/types.d.ts +3 -3
  476. package/dist/lib/session/width.d.ts +2 -2
  477. package/dist/lib/session/width.js +2 -2
  478. package/dist/lib/settings-manifest.d.ts +2 -0
  479. package/dist/lib/settings-manifest.js +81 -3
  480. package/dist/lib/share/delete.d.ts +21 -0
  481. package/dist/lib/share/delete.js +42 -0
  482. package/dist/lib/share/publish.d.ts +120 -0
  483. package/dist/lib/share/publish.js +243 -18
  484. package/dist/lib/share/worker-template.js +172 -9
  485. package/dist/lib/shims.js +35 -7
  486. package/dist/lib/smart-launch.d.ts +4 -4
  487. package/dist/lib/smart-launch.js +6 -4
  488. package/dist/lib/snapshot.d.ts +4 -4
  489. package/dist/lib/snapshot.js +2 -2
  490. package/dist/lib/ssh-exec.d.ts +1 -1
  491. package/dist/lib/ssh-exec.js +2 -2
  492. package/dist/lib/ssh-tunnel.d.ts +10 -10
  493. package/dist/lib/ssh-tunnel.js +12 -12
  494. package/dist/lib/staleness/checkers/hooks.d.ts +1 -1
  495. package/dist/lib/staleness/checkers/hooks.js +1 -1
  496. package/dist/lib/staleness/detectors/permissions.js +0 -23
  497. package/dist/lib/staleness/detectors/plugins.js +1 -1
  498. package/dist/lib/staleness/fingerprint.js +1 -1
  499. package/dist/lib/staleness/layers.d.ts +1 -1
  500. package/dist/lib/staleness/layers.js +1 -1
  501. package/dist/lib/staleness/writers/mcp.js +3 -1
  502. package/dist/lib/staleness/writers/plugins.js +1 -1
  503. package/dist/lib/staleness/writers/types.d.ts +8 -0
  504. package/dist/lib/startup/command-registry.d.ts +6 -147
  505. package/dist/lib/startup/command-registry.js +40 -303
  506. package/dist/lib/startup/dev-build.d.ts +0 -21
  507. package/dist/lib/startup/dev-build.js +29 -8
  508. package/dist/lib/state.d.ts +19 -1
  509. package/dist/lib/state.js +120 -51
  510. package/dist/lib/subagents.js +1 -1
  511. package/dist/lib/sync-status.js +1 -1
  512. package/dist/lib/sync-umbrella.d.ts +6 -1
  513. package/dist/lib/sync-umbrella.js +9 -4
  514. package/dist/lib/teams/agents.js +2 -2
  515. package/dist/lib/teams/registry.js +1 -1
  516. package/dist/lib/terminal/backends/vscodium-agent.js +1 -1
  517. package/dist/lib/terminal/engine.js +1 -1
  518. package/dist/lib/terminal/index.d.ts +4 -0
  519. package/dist/lib/terminal/index.js +3 -0
  520. package/dist/lib/terminal/inject.d.ts +2 -2
  521. package/dist/lib/terminal/inject.js +2 -2
  522. package/dist/lib/terminal/transport.js +1 -1
  523. package/dist/lib/tmux/index.d.ts +1 -1
  524. package/dist/lib/tmux/index.js +1 -1
  525. package/dist/lib/tmux/session.d.ts +21 -5
  526. package/dist/lib/tmux/session.js +76 -22
  527. package/dist/lib/triggers/handlers.d.ts +38 -3
  528. package/dist/lib/triggers/handlers.js +58 -7
  529. package/dist/lib/triggers/webhook.d.ts +113 -5
  530. package/dist/lib/triggers/webhook.js +223 -44
  531. package/dist/lib/types.d.ts +19 -7
  532. package/dist/lib/usage-fleet.d.ts +1 -1
  533. package/dist/lib/usage-fleet.js +1 -1
  534. package/dist/lib/usage-refresh.d.ts +1 -1
  535. package/dist/lib/usage-refresh.js +3 -3
  536. package/dist/lib/version-duplicates.js +2 -2
  537. package/dist/lib/view-types.d.ts +56 -0
  538. package/dist/lib/view-types.js +1 -0
  539. package/dist/lib/watchdog/rotate.d.ts +2 -2
  540. package/dist/lib/watchdog/rotate.js +3 -3
  541. package/dist/lib/watchdog/runner.d.ts +2 -3
  542. package/dist/lib/watchdog/runner.js +3 -4
  543. package/dist/lib/workflows.js +1 -1
  544. package/dist/lib/wrap.d.ts +33 -0
  545. package/dist/lib/wrap.js +70 -0
  546. package/package.json +2 -1
  547. package/scripts/postinstall.js +2 -2
  548. package/dist/commands/bench.d.ts +0 -2
  549. package/dist/commands/bench.js +0 -101
  550. package/dist/commands/cp.d.ts +0 -84
  551. package/dist/commands/cp.js +0 -231
  552. package/dist/commands/login.d.ts +0 -2
  553. package/dist/lib/resources/commands.d.ts +0 -46
  554. package/dist/lib/resources/commands.js +0 -211
  555. package/dist/lib/resources/hooks.d.ts +0 -16
  556. package/dist/lib/resources/hooks.js +0 -153
  557. package/dist/lib/resources/mcp.d.ts +0 -34
  558. package/dist/lib/resources/mcp.js +0 -250
  559. package/dist/lib/resources/memory.d.ts +0 -15
  560. package/dist/lib/resources/memory.js +0 -46
  561. package/dist/lib/resources/permissions.d.ts +0 -13
  562. package/dist/lib/resources/permissions.js +0 -202
  563. package/dist/lib/resources/rules.d.ts +0 -46
  564. package/dist/lib/resources/rules.js +0 -179
  565. package/dist/lib/resources/skills.d.ts +0 -37
  566. package/dist/lib/resources/skills.js +0 -247
  567. package/dist/lib/resources/subagents.d.ts +0 -46
  568. package/dist/lib/resources/subagents.js +0 -202
  569. /package/dist/lib/{feed.d.ts → feed/feed.d.ts} +0 -0
@@ -8,8 +8,8 @@ import { confirm, checkbox } from '@inquirer/prompts';
8
8
  import { AGENTS, resolveAgentName, formatAgentError, agentLabel, } from '../lib/agents.js';
9
9
  import { cloneRepo } from '../lib/git.js';
10
10
  import { capableAgents, isCapable } from '../lib/capabilities.js';
11
- import { listInstalledPermissions, discoverPermissionsFromRepo, installPermissionSet, removePermissionSet, applyPermissionsToVersion, readAgentPermissions, exportPermissionsFromPath, getDefaultPermissionSet, computePermissionsDiff, mergePermissionSets, saveDefaultPermissionSet, containsBroadGrants, } from '../lib/permissions.js';
12
- import { listInstalledVersions, getGlobalDefault, getVersionHomePath, promptAgentVersionSelection, } from '../lib/versions.js';
11
+ import { listInstalledPermissions, discoverPermissionsFromRepo, installPermissionSet, removePermissionSet, applyPermissionsToVersion, readAgentPermissions, exportPermissionsFromPath, detectPermissionAgentFromPath, getDefaultPermissionSet, computePermissionsDiff, mergePermissionSets, saveDefaultPermissionSet, containsBroadGrants, } from '../lib/permissions.js';
12
+ import { listInstalledVersions, getGlobalDefault, getVersionHomePath, promptAgentVersionSelection, } from '../lib/installations/versions.js';
13
13
  import { recordVersionResources } from '../lib/state.js';
14
14
  import { isPromptCancelled, isInteractiveTerminal, parseCommaSeparatedList, printWithPager, requireInteractiveSelection, resolveAgentTargetsAutoInstalling, resolveListFilterOrExit, } from './utils.js';
15
15
  export function shouldRefuseBroadPermissions(permissions, allowBroadPermissions) {
@@ -51,17 +51,17 @@ When to use:
51
51
  .action(async (agentArg, options) => {
52
52
  const cwd = process.cwd();
53
53
  // Helper to render permissions for a specific version
54
- const renderVersionPermissions = (agentId, version, isDefault, home, scope) => {
55
- const agent = AGENTS[agentId];
56
- const defaultLabel = isDefault ? ' default' : '';
57
- const versionStr = chalk.gray(` (${version}${defaultLabel})`);
58
- const perms = readAgentPermissions(agentId, scope, cwd, { home });
59
- if (!perms) {
60
- console.log(` ${chalk.bold(agentLabel(agent.id))}${versionStr}: ${chalk.gray('none')}`);
61
- console.log();
62
- return;
63
- }
64
- console.log(` ${chalk.bold(agentLabel(agent.id))}${versionStr}:`);
54
+ /**
55
+ * Print one harness's permission block.
56
+ *
57
+ * claude/opencode/codex keep their native renderings (Codex in particular
58
+ * has no rule list showing its sandbox mode is more useful than the
59
+ * blanket grants that mode widens into). Every other allowlist-capable
60
+ * harness renders the canonical allow/deny that `PERMISSION_TARGETS` reads
61
+ * back, which is what makes `permissions list` answer for all 13 rather
62
+ * than three (RUSH-2676).
63
+ */
64
+ const renderPermissionBody = (agentId, perms) => {
65
65
  if (agentId === 'claude') {
66
66
  const claudePerms = perms;
67
67
  if (claudePerms.permissions.allow.length > 0) {
@@ -106,8 +106,34 @@ When to use:
106
106
  }
107
107
  }
108
108
  }
109
+ else {
110
+ const set = perms;
111
+ if (set.allow?.length) {
112
+ console.log(chalk.green(' Allow:'));
113
+ for (const p of set.allow)
114
+ console.log(` ${chalk.cyan(p)}`);
115
+ }
116
+ if (set.deny?.length) {
117
+ console.log(chalk.red(' Deny:'));
118
+ for (const p of set.deny)
119
+ console.log(` ${chalk.yellow(p)}`);
120
+ }
121
+ }
109
122
  console.log();
110
123
  };
124
+ const renderVersionPermissions = (agentId, version, isDefault, home, scope) => {
125
+ const agent = AGENTS[agentId];
126
+ const defaultLabel = isDefault ? ' default' : '';
127
+ const versionStr = chalk.gray(` (${version}${defaultLabel})`);
128
+ const perms = readAgentPermissions(agentId, scope, cwd, { home });
129
+ if (!perms) {
130
+ console.log(` ${chalk.bold(agentLabel(agent.id))}${versionStr}: ${chalk.gray('none')}`);
131
+ console.log();
132
+ return;
133
+ }
134
+ console.log(` ${chalk.bold(agentLabel(agent.id))}${versionStr}:`);
135
+ renderPermissionBody(agentId, perms);
136
+ };
111
137
  if (agentArg) {
112
138
  // Parse agent@version syntax
113
139
  const parts = agentArg.split('@');
@@ -134,21 +160,7 @@ When to use:
134
160
  return;
135
161
  }
136
162
  console.log(` ${chalk.bold(agentLabel(agent.id))}:`);
137
- if (agentId === 'claude') {
138
- const claudePerms = perms;
139
- if (claudePerms.permissions.allow.length > 0) {
140
- console.log(chalk.green(' Allow:'));
141
- for (const p of claudePerms.permissions.allow) {
142
- console.log(` ${chalk.cyan(p)}`);
143
- }
144
- }
145
- if (claudePerms.permissions.deny.length > 0) {
146
- console.log(chalk.red(' Deny:'));
147
- for (const p of claudePerms.permissions.deny) {
148
- console.log(` ${chalk.yellow(p)}`);
149
- }
150
- }
151
- }
163
+ renderPermissionBody(agentId, perms);
152
164
  return;
153
165
  }
154
166
  // Version-managed: determine which versions to show
@@ -361,10 +373,15 @@ Examples:
361
373
  }
362
374
  spinner.succeed('Using local path');
363
375
  }
364
- // Check if this is an agent config file
365
- const isAgentConfig = localPath.endsWith('.json') || localPath.endsWith('.jsonc') || localPath.endsWith('.toml');
366
- const looksLikeAgentConfig = localPath.includes('.claude') || localPath.includes('.opencode') || localPath.includes('.codex');
367
- if (isAgentConfig && looksLikeAgentConfig) {
376
+ // Is this a harness config agents-cli knows how to read?
377
+ //
378
+ // This used to hardcode `.json`/`.jsonc`/`.toml` plus a `.claude`/
379
+ // `.opencode`/`.codex` substring, which excluded the ten other harnesses
380
+ // the CLI writes -- and excluded kiro/hermes twice over, since
381
+ // their configs are YAML. The registry already answers this by matching
382
+ // each harness's own declared path, so ask it (RUSH-2676).
383
+ const isAgentConfig = detectPermissionAgentFromPath(localPath) !== null;
384
+ if (isAgentConfig) {
368
385
  // Handle agent config file - convert, diff, merge into default set
369
386
  const incoming = exportPermissionsFromPath(localPath);
370
387
  if (!incoming || (incoming.allow.length === 0 && (!incoming.deny || incoming.deny.length === 0))) {
@@ -6,7 +6,7 @@
6
6
  * stored in ~/.agents/plugins/.
7
7
  */
8
8
  import type { Command } from 'commander';
9
- import { type PluginCapabilities } from '../lib/plugins.js';
9
+ import { type PluginCapabilities } from '../lib/plugins/plugins.js';
10
10
  export declare function shouldRefusePluginInstall(capabilities: PluginCapabilities, allowExecSurfaces: boolean): boolean;
11
11
  /** Register the `agents plugins` command tree. */
12
12
  export declare function registerPluginsCommands(program: Command): void;
@@ -12,14 +12,14 @@ import { homeDir } from '../lib/platform/index.js';
12
12
  import { input } from '@inquirer/prompts';
13
13
  import { agentLabel } from '../lib/agents.js';
14
14
  import { capableAgents, isCapable } from '../lib/capabilities.js';
15
- import { discoverPlugins, getPlugin, pluginSupportsAgent, removePluginFromVersion, isPluginSynced, installPlugin, updatePlugin, loadUserConfig, saveUserConfig, checkPluginDependencies, hasPluginExecSurfaces, inspectPluginCapabilities, pluginCapabilityLabels, parseInstallSpec, syncPluginToVersion, pluginResourceGroups, } from '../lib/plugins.js';
16
- import { listInstalledVersions, syncResourcesToVersion, getGlobalDefault, getVersionHomePath, } from '../lib/versions.js';
15
+ import { discoverPlugins, getPlugin, pluginSupportsAgent, removePluginFromVersion, isPluginSynced, installPlugin, updatePlugin, loadUserConfig, saveUserConfig, checkPluginDependencies, hasPluginExecSurfaces, inspectPluginCapabilities, pluginCapabilityLabels, parseInstallSpec, syncPluginToVersion, pluginResourceGroups, } from '../lib/plugins/plugins.js';
16
+ import { listInstalledVersions, syncResourcesToVersion, getGlobalDefault, getVersionHomePath, } from '../lib/installations/versions.js';
17
17
  import { isPromptCancelled, isInteractiveTerminal, requireDestructiveArg, requireInteractiveSelection, promptRemovalTargets, } from './utils.js';
18
18
  import { itemPicker } from '../lib/picker.js';
19
19
  import { showResourceList, buildTargetsSection, } from './resource-view.js';
20
20
  import { getPluginsDir } from '../lib/state.js';
21
21
  import { safeJoin } from '../lib/paths.js';
22
- import { discoverMarketplaces } from '../lib/plugin-marketplace.js';
22
+ import { discoverMarketplaces } from '../lib/plugins/plugin-marketplace.js';
23
23
  /** Replace the home directory prefix with ~ for display. */
24
24
  function formatPath(p) {
25
25
  const home = homeDir();
@@ -1,12 +1,11 @@
1
1
  /**
2
- * Profile management commands.
2
+ * Custom-harness profile helpers (shared by `agents harness`).
3
3
  *
4
- * Registers the `agents profiles` command tree for creating, viewing,
5
- * and removing named bundles of (host CLI, endpoint, model, keychain auth).
6
- * Profiles let users run non-default providers (Kimi, DeepSeek, Qwen, etc.)
7
- * through a standard agent CLI with no local proxy.
4
+ * Named bundles of (host CLI, endpoint, model, keychain auth) live under
5
+ * ~/.agents/profiles/*.yml. The user-facing surface is `agents harness`
6
+ * (add/fork/edit/list/view/remove). This module keeps the shared write helpers
7
+ * (`addProfile`, `ensureProviderToken`, …) that harness and the run path use.
8
8
  */
9
- import type { Command } from 'commander';
10
9
  import { type Profile } from '../lib/profiles.js';
11
10
  import { type Preset } from '../lib/profiles-presets.js';
12
11
  /**
@@ -18,7 +17,7 @@ export declare function buildProfileFromCollection(name: string, preset: Preset,
18
17
  /** Read all available data from stdin synchronously, trimmed. */
19
18
  /** Ensure a provider API key exists in keychain, prompting or reading stdin if missing. */
20
19
  export declare function ensureProviderToken(provider: string, signupUrl?: string, fromStdin?: boolean): Promise<void>;
21
- /** Options accepted by {@link addProfile} — shared by `agents profiles add` and `agents harness add`. */
20
+ /** Options accepted by {@link addProfile} — shared by `agents harness add` and `agents harness add`. */
22
21
  export interface AddProfileOptions {
23
22
  preset?: string;
24
23
  host?: string;
@@ -81,5 +80,3 @@ export declare function applyFromSecrets(profile: Profile, spec: string, explici
81
80
  * `label` only tunes the success wording (Profile vs Harness). Throws on error.
82
81
  */
83
82
  export declare function addProfile(name: string, opts: AddProfileOptions, label?: 'Profile' | 'Harness'): Promise<void>;
84
- /** Register the `agents profiles` command tree. */
85
- export declare function registerProfilesCommands(program: Command): void;
@@ -1,21 +1,19 @@
1
1
  /**
2
- * Profile management commands.
2
+ * Custom-harness profile helpers (shared by `agents harness`).
3
3
  *
4
- * Registers the `agents profiles` command tree for creating, viewing,
5
- * and removing named bundles of (host CLI, endpoint, model, keychain auth).
6
- * Profiles let users run non-default providers (Kimi, DeepSeek, Qwen, etc.)
7
- * through a standard agent CLI with no local proxy.
4
+ * Named bundles of (host CLI, endpoint, model, keychain auth) live under
5
+ * ~/.agents/profiles/*.yml. The user-facing surface is `agents harness`
6
+ * (add/fork/edit/list/view/remove). This module keeps the shared write helpers
7
+ * (`addProfile`, `ensureProviderToken`, …) that harness and the run path use.
8
8
  */
9
9
  import chalk from 'chalk';
10
10
  import { readStdinSync } from '../lib/format.js';
11
- import { spawn } from 'child_process';
12
- import { listProfiles, readProfile, writeProfile, deleteProfile, profileExists, profileFromPreset, profileFromHostModel, baseUrlEnvKeyForHost, authEnvKeyForHost, validateProfileName, getPresetForProfile, } from '../lib/profiles.js';
13
- import { getPreset, listPresets, expandPreset } from '../lib/profiles-presets.js';
14
- import { hasKeychainToken, keychainItemName, setKeychainToken, deleteKeychainToken, getKeychainToken, } from '../lib/secrets/profiles.js';
11
+ import { writeProfile, profileFromPreset, profileFromHostModel, baseUrlEnvKeyForHost, authEnvKeyForHost, validateProfileName, profileExists, } from '../lib/profiles.js';
12
+ import { getPreset, listPresets } from '../lib/profiles-presets.js';
13
+ import { hasKeychainToken, keychainItemName, setKeychainToken, getKeychainToken, } from '../lib/secrets/profiles.js';
15
14
  import { parseBundleValue, secretsKeychainItem } from '../lib/secrets/index.js';
16
15
  import { readBundle } from '../lib/secrets/bundles.js';
17
16
  import { isInteractiveTerminal } from './utils.js';
18
- import { getAgentsInvocation } from '../lib/daemon.js';
19
17
  import { ALL_AGENT_IDS } from '../lib/agents.js';
20
18
  import { findAccount } from '../lib/account-registry.js';
21
19
  /**
@@ -224,314 +222,3 @@ export async function addProfile(name, opts, label = 'Profile') {
224
222
  console.log(chalk.green(`${label} '${name}' added.`));
225
223
  console.log(chalk.gray(`Try: agents run ${name} "hello"`));
226
224
  }
227
- /** Format a single profile as a table row for the `profiles list` output. */
228
- function renderProfileRow(p) {
229
- const host = p.host.version ? `${p.host.agent}@${p.host.version}` : p.host.agent;
230
- const model = p.env.ANTHROPIC_MODEL || p.env.OPENAI_MODEL || p.env.GEMINI_MODEL || '-';
231
- const provider = p.provider || (p.auth?.keychainItem?.split('.')[1]) || '-';
232
- return `${chalk.cyan(p.name.padEnd(16))} ${host.padEnd(14)} ${provider.padEnd(12)} ${chalk.gray(model)}`;
233
- }
234
- /** Register the `agents profiles` command tree. */
235
- export function registerProfilesCommands(program) {
236
- const cmd = program
237
- .command('profiles')
238
- .description('Named bundles of (host CLI, endpoint, model, auth) — run Kimi/DeepSeek/Qwen/etc through Claude Code without a proxy.')
239
- .addHelpText('after', `
240
- A profile pins a host CLI (claude, codex, antigravity, ...) to a non-default endpoint
241
- and model, with a keychain-backed API key. Running 'agents run <profile>' spawns
242
- the host CLI with the right env vars — no plaintext tokens, no local proxy.
243
-
244
- Built-in presets (via OpenRouter, one shared key):
245
- kimi Kimi K2.5 (top HumanEval, reasoning — interactive only)
246
- kimi-chat Kimi K2 0905 (non-reasoning, print-safe)
247
- minimax MiniMax M2.5 (top SWE-bench, reasoning)
248
- glm GLM 5 (top Chatbot Arena among open-weight, reasoning)
249
- qwen Qwen3 Coder Next (latest coding Qwen, print-safe)
250
- deepseek DeepSeek Chat V3 (latest non-reasoning chat, print-safe)
251
-
252
- Run 'agents profiles presets' for the full list with pricing and context sizes.
253
-
254
- Typical flow:
255
- agents profiles create # interactive wizard for any provider
256
- agents profiles add kimi # one-line preset (existing)
257
- agents run kimi "refactor this" # Claude Code UI, Kimi model responses
258
- agents profiles add deepseek # reuses OpenRouter key, no re-prompt
259
-
260
- Managing keys:
261
- agents profiles login openrouter # rotate the key (shared across openrouter profiles)
262
- agents profiles logout openrouter # remove from Keychain
263
-
264
- Custom endpoints — drop a YAML file at ~/.agents/profiles/<name>.yml:
265
- name: local-llama
266
- host: { agent: claude }
267
- env:
268
- ANTHROPIC_BASE_URL: http://localhost:11434
269
- ANTHROPIC_MODEL: llama-3.3-70b
270
- auth:
271
- envVar: ANTHROPIC_AUTH_TOKEN
272
- keychainItem: agents-cli.ollama.token
273
-
274
- Profiles store no secrets — safe to 'agents push' to a shared repo.
275
-
276
- Examples:
277
- # One-time: store the OpenRouter key (every preset reuses it)
278
- agents profiles login openrouter
279
-
280
- # Add Kimi (top HumanEval) and run it through the Claude Code UI
281
- agents profiles add kimi
282
- agents run kimi "refactor api/handlers/checkout.py to use async sqlalchemy"
283
-
284
- # Add MiniMax for SWE-bench style fixes; reuses the same OpenRouter key
285
- agents profiles add minimax
286
- agents run minimax "investigate PROJ-456 and patch the off-by-one in pagination"
287
-
288
- # Add DeepSeek for cheap, fast non-reasoning work
289
- agents profiles add deepseek
290
- agents run deepseek "rename UserSession -> AuthSession across the codebase"
291
-
292
- # See every profile and which provider it talks to
293
- agents profiles list
294
-
295
- # Browse the catalog (pricing, context sizes, reasoning vs print-safe)
296
- agents profiles presets
297
-
298
- # Rotate the OpenRouter key (every openrouter profile picks it up)
299
- agents profiles login openrouter
300
-
301
- # Drop a profile, keep the key in Keychain for the next one
302
- agents profiles remove kimi
303
-
304
- # Fully remove the OpenRouter key from Keychain
305
- agents profiles logout openrouter
306
- `);
307
- cmd
308
- .command('list')
309
- .alias('ls')
310
- .description('List configured profiles')
311
- .action(() => {
312
- const profiles = listProfiles();
313
- if (profiles.length === 0) {
314
- console.log(chalk.gray('No profiles configured.'));
315
- console.log(chalk.gray('Try: agents profiles add kimi'));
316
- console.log(chalk.gray(' agents profiles presets'));
317
- return;
318
- }
319
- console.log(chalk.bold(`${'NAME'.padEnd(16)} ${'HOST'.padEnd(14)} ${'PROVIDER'.padEnd(12)} MODEL`));
320
- for (const p of profiles) {
321
- console.log(renderProfileRow(p));
322
- }
323
- });
324
- cmd
325
- .command('presets')
326
- .description('List built-in presets (OpenRouter + direct providers)')
327
- .action(() => {
328
- const presets = listPresets();
329
- console.log(chalk.bold(`${'NAME'.padEnd(14)} ${'PROVIDER'.padEnd(12)} DESCRIPTION`));
330
- for (const p of presets) {
331
- console.log(`${chalk.cyan(p.name.padEnd(14))} ${p.provider.padEnd(12)} ${chalk.gray(p.description)}`);
332
- }
333
- });
334
- cmd
335
- .command('view <name>')
336
- .alias('show')
337
- .description('Show a profile (env, host, auth source, preset link)')
338
- .action((name) => {
339
- try {
340
- const p = readProfile(name);
341
- console.log(chalk.bold(p.name));
342
- if (p.description)
343
- console.log(chalk.gray(p.description));
344
- console.log();
345
- console.log(chalk.bold('Host:'), p.host.agent + (p.host.version ? `@${p.host.version}` : ''));
346
- if (p.provider)
347
- console.log(chalk.bold('Provider:'), p.provider);
348
- if (p.preset)
349
- console.log(chalk.bold('Preset:'), p.preset);
350
- console.log();
351
- console.log(chalk.bold('Env:'));
352
- for (const [k, v] of Object.entries(p.env)) {
353
- console.log(` ${k}=${v}`);
354
- }
355
- if (p.auth) {
356
- console.log();
357
- console.log(chalk.bold('Auth:'));
358
- const tokenStatus = hasKeychainToken(p.auth.keychainItem) ? chalk.green('stored') : chalk.red('missing');
359
- console.log(` ${p.auth.envVar} <- keychain:${p.auth.keychainItem} (${tokenStatus})`);
360
- }
361
- const preset = getPresetForProfile(p);
362
- if (preset?.signupUrl) {
363
- console.log();
364
- console.log(chalk.gray(`Sign up: ${preset.signupUrl}`));
365
- }
366
- }
367
- catch (err) {
368
- console.error(chalk.red(err.message));
369
- process.exit(1);
370
- }
371
- });
372
- cmd
373
- .command('create')
374
- .description('Interactive profile creation wizard (any provider, with prompts for endpoints + keys).')
375
- .option('--name <name>', 'Profile name (skips the name prompt)')
376
- .option('--provider <provider>', 'Provider preset name (skips the provider prompt)')
377
- .option('--no-smoke-test', 'Skip the post-create smoke test prompt')
378
- .action(async (opts) => {
379
- if (!isInteractiveTerminal()) {
380
- console.error(chalk.red('agents profiles create requires an interactive terminal. Use `agents profiles add <preset>` for scriptable creation.'));
381
- process.exit(1);
382
- }
383
- const { input, select, confirm } = await import('@inquirer/prompts');
384
- const name = opts.name
385
- ? opts.name
386
- : await input({
387
- message: 'Profile name',
388
- validate: (v) => /^[a-z0-9][a-z0-9-_]{0,48}$/i.test(v) || 'lowercase alphanumeric + -_ only, max 48 chars',
389
- });
390
- validateProfileName(name);
391
- if (profileExists(name)) {
392
- const overwrite = await confirm({
393
- message: `Profile '${name}' already exists. Overwrite?`,
394
- default: false,
395
- });
396
- if (!overwrite) {
397
- console.log(chalk.gray('Cancelled.'));
398
- return;
399
- }
400
- }
401
- const presets = listPresets();
402
- const providerName = opts.provider
403
- ? opts.provider
404
- : await select({
405
- message: 'Provider',
406
- choices: presets.map((p) => ({
407
- name: `${p.name.padEnd(18)} ${chalk.gray(p.description.slice(0, 70))}`,
408
- value: p.name,
409
- })),
410
- });
411
- const preset = getPreset(providerName);
412
- if (!preset) {
413
- console.error(chalk.red(`Unknown provider '${providerName}'. Run 'agents profiles presets' for the list.`));
414
- process.exit(1);
415
- }
416
- const expanded = expandPreset(preset);
417
- const collected = {};
418
- for (const v of expanded.prompts) {
419
- if (v.secret) {
420
- collected[v.envVar] = await promptForSecret(v.prompt);
421
- }
422
- else {
423
- const value = await input({
424
- message: v.hint ? `${v.prompt} ${chalk.gray('(' + v.hint + ')')}` : v.prompt,
425
- default: v.default,
426
- validate: v.pattern
427
- ? (val) => new RegExp(v.pattern).test(val) || `must match ${v.pattern}`
428
- : undefined,
429
- });
430
- collected[v.envVar] = value;
431
- }
432
- }
433
- if (!preset.authOptional) {
434
- await ensureProviderToken(preset.provider, preset.signupUrl);
435
- }
436
- const profile = buildProfileFromCollection(name, preset, collected);
437
- writeProfile(profile);
438
- console.log(chalk.green(`Profile '${name}' created.`));
439
- if (preset.docPath) {
440
- console.log(chalk.gray(`See docs/profiles/${preset.docPath}.md for provider-specific caveats.`));
441
- }
442
- if (opts.smokeTest !== false) {
443
- const run = await confirm({ message: 'Run smoke test now?', default: true });
444
- if (run) {
445
- console.log(chalk.gray(`Spawning: agents run ${name} "say alive in one word" (60s timeout)`));
446
- const inv = getAgentsInvocation([
447
- 'run',
448
- name,
449
- 'say alive in one word',
450
- '--headless',
451
- '--timeout',
452
- '60s',
453
- ]);
454
- const child = spawn(inv.command, inv.args, { stdio: 'inherit' });
455
- child.on('exit', (code) => process.exit(code ?? 0));
456
- }
457
- else {
458
- console.log(chalk.gray(`Try later: agents run ${name} "hello"`));
459
- }
460
- }
461
- });
462
- cmd
463
- .command('add <name>')
464
- .description('Add a profile. If <name> matches a built-in preset, the preset is applied. Prompts for API key (once per provider).')
465
- .option('--preset <preset>', 'Use a named preset (defaults to <name> if a preset by that name exists)')
466
- .option('--version <version>', 'Pin the host CLI version (e.g., 2.1.113)')
467
- .option('--account <name>', 'Attach an existing durable credential account')
468
- .option('--key-stdin', 'Read API key from stdin instead of prompting (for scripts/CI)')
469
- .option('--force', 'Overwrite an existing profile with the same name')
470
- .addHelpText('after', '\nTo build a custom harness from a host CLI + model in one shot, use `agents harness add`.\n')
471
- .action(async (name, opts) => {
472
- // Preset-only surface here — `--host` on `profiles` is reserved for remote
473
- // device routing (see lib/hosts/passthrough.ts). The host+model one-shot
474
- // lives on `agents harness add`, which owns its own `--host`.
475
- try {
476
- await addProfile(name, { preset: opts.preset, version: opts.version, account: opts.account, keyStdin: opts.keyStdin, force: opts.force }, 'Profile');
477
- }
478
- catch (err) {
479
- console.error(chalk.red(err.message));
480
- process.exit(1);
481
- }
482
- });
483
- cmd
484
- .command('remove <name>')
485
- .alias('rm')
486
- .description('Delete a profile (keychain token is kept — use `profiles logout <provider>` to remove)')
487
- .action((name) => {
488
- const existed = deleteProfile(name);
489
- if (!existed) {
490
- console.error(chalk.red(`Profile '${name}' not found.`));
491
- process.exit(1);
492
- }
493
- console.log(chalk.green(`Profile '${name}' removed.`));
494
- });
495
- cmd
496
- .command('login <provider>')
497
- .description('Store or rotate the API key for a provider (e.g., openrouter). Shared across profiles using that provider.')
498
- .option('--key-stdin', 'Read API key from stdin')
499
- .action(async (provider, opts) => {
500
- try {
501
- const item = keychainItemName(provider);
502
- let token;
503
- if (opts.keyStdin) {
504
- token = readStdinSync();
505
- if (!token)
506
- throw new Error('No key received on stdin.');
507
- }
508
- else {
509
- token = await promptForSecret(`Enter API key for ${provider}`);
510
- }
511
- setKeychainToken(item, token);
512
- console.log(chalk.green(`Stored in keychain: ${item}`));
513
- }
514
- catch (err) {
515
- console.error(chalk.red(err.message));
516
- process.exit(1);
517
- }
518
- });
519
- cmd
520
- .command('logout <provider>')
521
- .description('Remove a stored provider key from keychain')
522
- .action((provider) => {
523
- try {
524
- const item = keychainItemName(provider);
525
- const existed = deleteKeychainToken(item);
526
- if (!existed) {
527
- console.error(chalk.yellow(`No keychain item '${item}' to remove.`));
528
- process.exit(1);
529
- }
530
- console.log(chalk.green(`Removed keychain item: ${item}`));
531
- }
532
- catch (err) {
533
- console.error(chalk.red(err.message));
534
- process.exit(1);
535
- }
536
- });
537
- }
@@ -28,6 +28,15 @@ export declare function formatForCwdOutput(name: string | undefined, json: boole
28
28
  * string when everything answered.
29
29
  */
30
30
  export declare function formatFleetSkippedNote(skipped: string[]): string;
31
+ /**
32
+ * One compact trailing note for peers that DID answer a fan-out but whose
33
+ * payload failed verification — a wrong machine id, a fingerprint that doesn't
34
+ * match the targets we sent, or a malformed row. Deliberately separate from
35
+ * {@link formatFleetSkippedNote}: silence means a peer never ran, while this
36
+ * means it ran and we cannot trust what it reports, which is the worse state.
37
+ * Empty string when every answer verified.
38
+ */
39
+ export declare function formatFleetUnverifiedNote(unverified: string[]): string;
31
40
  /**
32
41
  * Best-effort `owner/repo` from a repo's origin remote.
33
42
  *