@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
package/dist/bootstrap.js CHANGED
@@ -53,18 +53,18 @@ if (IS_DEV_BUILD) {
53
53
  // Command registration is lazy: instead of statically importing every command
54
54
  // module on each invocation (which loaded the whole ~50-module tree before the
55
55
  // first byte of output), the registry maps a command name to a thunk that
56
- // imports only what that command needs. See src/lib/startup/command-registry.ts.
56
+ // imports only what that command needs. See src/cli/command-registry.ts.
57
57
  // Individual load* registrars are not imported here — registerEagerForRequest
58
58
  // and the lazy path pull them via COMMAND_LOADERS. The full-tree
59
59
  // registerAllEagerCommands path was removed (RUSH-2329): unknown/typo commands
60
60
  // spellcheck against KNOWN_TOP_LEVEL_COMMANDS and register only the corrected
61
61
  // name.
62
- import { COMMAND_LOADERS, LAZY_COMMAND_NAMES, KNOWN_TOP_LEVEL_COMMANDS, RETIRED_TOP_LEVEL_COMMANDS, } from './lib/startup/command-registry.js';
62
+ import { COMMAND_LOADERS, LAZY_COMMAND_NAMES, KNOWN_TOP_LEVEL_COMMANDS, RETIRED_TOP_LEVEL_COMMANDS, } from './cli/command-registry.js';
63
63
  import { closestTopLevelCommand } from './lib/startup/spellcheck.js';
64
64
  import { applyGlobalHelpConventions } from './lib/help.js';
65
65
  import { renderWhatsNew } from './lib/whats-new.js';
66
66
  import { getCliLaunch } from './lib/cli-entry.js';
67
- import { emit, emitFriction, redactArgs } from './lib/events.js';
67
+ import { emit, emitFriction, redactArgs } from './lib/feed/events.js';
68
68
  import { stampProvenance } from './lib/event-provenance.js';
69
69
  import { die } from './lib/format.js';
70
70
  // Leaf (zero imports). Gates the dynamic passthrough import so the ~187ms
@@ -244,7 +244,7 @@ Packages:
244
244
 
245
245
  Run and dispatch:
246
246
  run <agent|profile> [prompt] Run an agent. Omit prompt for interactive mode.
247
- config Configure run defaults, project root, and device options
247
+ config Configure run defaults, project root, device options, and spend caps (config budget)
248
248
  teams Coordinate multiple agents on shared work
249
249
  routines Run agents on a cron schedule (scheduler auto-starts)
250
250
  daemon Runtime status/control for the always-on daemon (secrets broker, browser IPC, scheduler)
@@ -258,22 +258,21 @@ Run and dispatch:
258
258
 
259
259
  Observe (read the fleet — no store merge; aliases point at the real readers):
260
260
  feed / inbox Needs-you inbox (open blocks waiting on you)
261
- timeline Agent progress stream (= feed --filter updates)
262
- roster Live agents (= sessions --active)
261
+ sessions --active Live agents (who is running right now)
263
262
  events Unified ops + activity event trail
264
263
  audit Tamper-evident run-dispatch log (not events)
265
- snapshot One-process inventory + active sessions poll
266
264
  status Sync/drift only (not the live fleet snapshot)
265
+ devices snapshot One-process inventory + active sessions poll
267
266
 
268
- Credentials and profiles:
269
- profile Activate resource profiles across skills, MCP, permissions, and secrets
270
- profiles Bundles of (host CLI, endpoint, model, auth)
271
- secrets Keychain-backed env bundles; use 'secrets exec <bundle> -- <cmd>' to inject into a subprocess
267
+ Credentials:
268
+ harness Custom (host CLI + model + auth) harnesses; replaces former profiles command
269
+ secrets Keychain-backed env bundles; synced vault: secrets vault unlock|lock
270
+ accounts Provider credentials + native OAuth logout
272
271
 
273
272
  Diagnostics:
274
273
  doctor [agent[@version]] Diagnose CLI availability, sync status, and resource divergence; --check for the CI drift gate
275
274
  usage [agent] Show rate-limit and quota usage per agent
276
- insights How work looks — behaviour (default) or counter mix (insights mix)
275
+ insights How work looks — behaviour (default), mix, cost, and output
277
276
  perf Latency rollups (hooks, commands, runs) from the disposable perf warehouse
278
277
 
279
278
  Config sync:
@@ -337,7 +336,7 @@ async function showWhatsNew(fromVersion, toVersion) {
337
336
  const UPDATE_CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
338
337
  import { getUpdateCheckPath, getMigratedSentinelPath, getUserAgentsDir, getRuntimeStateDir } from './lib/state.js';
339
338
  import { resolveBrandName, disabledCommandsForActiveBrand } from './lib/brand.js';
340
- import { readUpdateCache, saveUpdateCheck, dismissUpdateVersion, shouldPromptUpgrade, resolveMultiInstallInventory, remediateStaleAgentsCliInstalls, resolveRunningPackageRoot, } from './lib/self-update.js';
339
+ import { readUpdateCache, saveUpdateCheck, dismissUpdateVersion, shouldPromptUpgrade, resolveMultiInstallInventory, remediateStaleAgentsCliInstalls, resolveRunningPackageRoot, manualUninstallCommand, } from './lib/self-update.js';
341
340
  const UPDATE_CHECK_FILE = getUpdateCheckPath();
342
341
  // Beside the existing update-check cache (RUSH-2324): short-TTL memo of the
343
342
  // multi-install PATH scan so every ordinary CLI invocation does not re-walk
@@ -386,7 +385,19 @@ function maybeWarnMultiInstall() {
386
385
  for (const info of inventory) {
387
386
  console.error(chalk.gray(` ${info.packageRoot} ${info.version} (${info.note})`));
388
387
  }
389
- console.error(chalk.gray('Upgrades apply to the running copy. Purge npx-cache / legacy / pre-1.22.30 copies with: agents doctor --fix'));
388
+ // RUSH-2705/2713: only advertise `agents doctor --fix` for copies it will
389
+ // really delete. A duplicate --fix won't auto-purge (a healthy >=1.22.30 peer,
390
+ // OR a pre-1.22.30 copy left alone only because no fixed peer exists — the
391
+ // latter is genuinely vulnerable, not healthy) makes --fix a remedy that
392
+ // no-ops forever — name the manual removal command instead.
393
+ const peers = inventory.filter((info) => !info.running);
394
+ console.error(chalk.gray('Upgrades apply to the running copy.'));
395
+ if (peers.some((info) => info.autoPurgeable)) {
396
+ console.error(chalk.gray('Purge npx-cache / legacy / pre-1.22.30 copies with: agents doctor --fix'));
397
+ }
398
+ for (const peer of peers.filter((info) => !info.autoPurgeable)) {
399
+ console.error(chalk.gray(`Remove the ${peer.version} copy at ${peer.packageRoot} with: ${manualUninstallCommand(peer.packageRoot)}`));
400
+ }
390
401
  try {
391
402
  fs.mkdirSync(path.dirname(sentinel), { recursive: true });
392
403
  fs.writeFileSync(sentinel, key);
@@ -789,6 +800,13 @@ async function runUpgrade(version, options) {
789
800
  if (purge.failed.length > 0) {
790
801
  console.log(chalk.yellow(`Could not purge ${purge.failed.length} stale install${purge.failed.length === 1 ? '' : 's'}; re-run agents doctor --fix.`));
791
802
  }
803
+ // RUSH-2705/2713: duplicates --fix won't auto-purge (a healthy
804
+ // >=1.22.30 peer, or a pre-1.22.30 copy with no fixed peer to fall back
805
+ // to — not healthy) — name the command that removes them instead of
806
+ // leaving a silent nag behind.
807
+ for (const u of purge.unresolved) {
808
+ console.log(chalk.gray(`Duplicate ${u.version} at ${u.packageRoot} left in place; remove it with: ${u.manualRemoveCommand}`));
809
+ }
792
810
  }
793
811
  catch {
794
812
  /* best-effort; upgrade already succeeded */
@@ -879,14 +897,14 @@ program.on('command:*', (operands) => {
879
897
  if (minDist === 1 && closest && !RETIRED_TOP_LEVEL_COMMANDS.has(unknown)) {
880
898
  const args = process.argv.slice(2);
881
899
  args[0] = closest;
882
- // The typo'd name was unknown, so the top-level --host router (which ran
900
+ // The typo'd name was unknown, so the top-level --device router (which ran
883
901
  // before commander parsing, against the ORIGINAL name) could not have
884
902
  // routed it - it correctly fell through to reach this handler at all
885
903
  // (that fallthrough is this ticket's own fix). But falling through to a
886
904
  // plain local re-parse means a routing flag on a corrected REAL
887
- // host-routable command (e.g. `docto --host box`, corrected to `doctor`)
905
+ // host-routable command (e.g. `docto --device box`, corrected to `doctor`)
888
906
  // silently ran LOCALLY instead of remotely, with no error - worse than
889
- // the loud "does not support --host" this ticket replaced. Re-run the
907
+ // the loud "does not support --device" this ticket replaced. Re-run the
890
908
  // router with the CORRECTED name before falling through to local parse;
891
909
  // it already no-ops when no routing flag is present. RUSH-2022 review r2.
892
910
  void (async () => {
@@ -947,11 +965,11 @@ const helpOrVersionRequested = passedArgs.some((arg) => arg === '--help' || arg
947
965
  // the unbranded CLI, so all of this is a no-op there.
948
966
  const brandDisabled = disabledCommandsForActiveBrand();
949
967
  const requestedIsDisabled = requestedCommand !== undefined && brandDisabled.has(requestedCommand);
950
- // `--host` passthrough: run this invocation on a remote machine over SSH instead
968
+ // `--device` passthrough: run this invocation on a remote machine over SSH instead
951
969
  // of locally. Handled before any local command registration / update check /
952
970
  // background sync — a remote run needs none of that. Only the allowlisted
953
971
  // read-only + config + teams commands route here; `run`/`sessions` are absent
954
- // from the table and fall through to their own richer `--host` handling below.
972
+ // from the table and fall through to their own richer `--device` handling below.
955
973
  // `--help`/`--version` stay local (docs must work without a reachable host).
956
974
  //
957
975
  // RUSH-2374: gate the dynamic import on a routing flag actually being present.
@@ -1010,7 +1028,7 @@ else if (requestedIsUnknown && requestedCommand) {
1010
1028
  closest &&
1011
1029
  !requestedIsDisabled &&
1012
1030
  !RETIRED_TOP_LEVEL_COMMANDS.has(requestedCommand)) {
1013
- // Auto-correct: register ONLY the corrected command, then re-route --host
1031
+ // Auto-correct: register ONLY the corrected command, then re-route --device
1014
1032
  // and reparse under the real name (RUSH-2329 + RUSH-2022 review r2).
1015
1033
  passedArgs[0] = closest;
1016
1034
  // Keep process.argv in sync for the command:* safety-net and any code that
@@ -1121,7 +1139,7 @@ if (!firstRun &&
1121
1139
  // Skipped for --help/--version (RUSH-2454): same pure-docs gate as fold, the
1122
1140
  // update check, background sync, ensureInitialized, and the menu-bar self-heal.
1123
1141
  // The sentinel check itself is pure fs and does not load migrate.js — only a
1124
- // missing/stale sentinel pays for `await import('./lib/migrate.js')` (which
1142
+ // missing/stale sentinel pays for `await import('./lib/installations/migrate.js')` (which
1125
1143
  // pulls the hosts/routine/teams/daemon/menubar graph).
1126
1144
  if (process.env.AGENTS_SKIP_MIGRATION !== '1' && !helpOrVersionRequested) {
1127
1145
  try {
@@ -1130,7 +1148,7 @@ if (process.env.AGENTS_SKIP_MIGRATION !== '1' && !helpOrVersionRequested) {
1130
1148
  // Bumping the suffix re-runs migrations for every user; binary releases that
1131
1149
  // don't change the schema must NOT re-run (they would destroy user content
1132
1150
  // when migration steps overlap with user-authored paths). See issue #20.
1133
- const sentinelValue = 'v20';
1151
+ const sentinelValue = 'v21';
1134
1152
  let needRun = true;
1135
1153
  try {
1136
1154
  if (fs.existsSync(sentinel) && fs.readFileSync(sentinel, 'utf-8').trim() === sentinelValue) {
@@ -1139,7 +1157,7 @@ if (process.env.AGENTS_SKIP_MIGRATION !== '1' && !helpOrVersionRequested) {
1139
1157
  }
1140
1158
  catch { /* best-effort — fall through to run */ }
1141
1159
  if (needRun) {
1142
- const { runMigration } = await import('./lib/migrate.js');
1160
+ const { runMigration } = await import('./lib/installations/migrate.js');
1143
1161
  await runMigration();
1144
1162
  try {
1145
1163
  fs.mkdirSync(path.dirname(sentinel), { recursive: true });
@@ -1199,10 +1217,10 @@ catch (err) {
1199
1217
  console.error(err.message);
1200
1218
  process.exit(1);
1201
1219
  }
1202
- // A --host targeting a password-auth device throws this from resolveHost.
1203
- // It carries an actionable message (switch to key auth);
1204
- // handling it here covers every resolveHost caller (run, teams,
1205
- // secrets --host) at the source instead of a catch at each call site.
1220
+ // A --device targeting a password-auth device throws this from resolveHost.
1221
+ // It carries an actionable message (switch to key auth / enroll as a host);
1222
+ // handling it here covers every resolveHost caller (run, hosts check/rm,
1223
+ // secrets --device) at the source instead of a catch at each call site.
1206
1224
  if (err.name === 'DeviceOffloadUnsupportedError') {
1207
1225
  console.error(err.message);
1208
1226
  process.exit(1);
package/dist/browser.js CHANGED
@@ -3,8 +3,8 @@ import { Command } from 'commander';
3
3
  import { registerBrowserSubcommands } from './commands/browser.js';
4
4
  import { maybeRunStandaloneOnHost } from './lib/hosts/passthrough.js';
5
5
  async function main() {
6
- // `browser … --host <box>` routes to a remote over SSH, exactly like
7
- // `agents browser … --host <box>` does through index.ts. Standalone-only:
6
+ // `browser … --device <box>` routes to a remote over SSH, exactly like
7
+ // `agents browser … --device <box>` does through index.ts. Standalone-only:
8
8
  // this binary never enters index.ts, so without this the flag was dropped.
9
9
  if (await maybeRunStandaloneOnHost('browser')) {
10
10
  process.exit(process.exitCode ?? 0);
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Lazy command registry.
3
+ *
4
+ * The CLI entry point (src/index.ts) used to statically import every command
5
+ * module and call its `registerXCommand(program)` on every invocation. That
6
+ * loaded the entire command tree (~50 modules) before the first line of output,
7
+ * dominating cold-start latency.
8
+ *
9
+ * This module maps each user-typed top-level command name to a thunk that
10
+ * dynamically imports ONLY the module(s) that command needs. Fast commands
11
+ * (`--version`, `view`, ...) now pay for just the one module they use; the full
12
+ * tree is loaded only on the rare slow paths (unknown-command spellcheck, bare
13
+ * help) via `registerAllEagerCommands` in src/index.ts.
14
+ *
15
+ * Parity is non-negotiable: the name -> loader map below mirrors exactly which
16
+ * module registers which top-level command on `main`. Multi-command modules
17
+ * (versions, packages) map several names to the same loader; `prune` needs BOTH
18
+ * versions (which creates `prune <specs...>`) and prune.js (which attaches the
19
+ * `cleanup` subcommand to it), in that order — see commands/prune.ts.
20
+ */
21
+ import { Command } from 'commander';
22
+ export { KNOWN_TOP_LEVEL_COMMANDS, RETIRED_TOP_LEVEL_COMMANDS } from '../lib/startup/command-registry.js';
23
+ /** A function that registers one or more commands onto the root program. */
24
+ export type Registrar = (program: Command) => void;
25
+ /** A thunk that dynamically imports a command module and returns its registrar. */
26
+ export type ModuleLoader = () => Promise<Registrar>;
27
+ export declare const loadView: ModuleLoader;
28
+ export declare const loadInspect: ModuleLoader;
29
+ export declare const loadFeedback: ModuleLoader;
30
+ export declare const loadCommands: ModuleLoader;
31
+ export declare const loadHooks: ModuleLoader;
32
+ export declare const loadSkills: ModuleLoader;
33
+ export declare const loadRules: ModuleLoader;
34
+ export declare const loadMemory: ModuleLoader;
35
+ export declare const loadPermissions: ModuleLoader;
36
+ export declare const loadMcp: ModuleLoader;
37
+ export declare const loadCli: ModuleLoader;
38
+ export declare const loadSubagents: ModuleLoader;
39
+ export declare const loadPlugins: ModuleLoader;
40
+ export declare const loadWorkflows: ModuleLoader;
41
+ export declare const loadVersions: ModuleLoader;
42
+ export declare const loadUpdate: ModuleLoader;
43
+ export declare const loadImport: ModuleLoader;
44
+ export declare const loadPackages: ModuleLoader;
45
+ export declare const loadRoutines: ModuleLoader;
46
+ export declare const loadMonitors: ModuleLoader;
47
+ export declare const loadProjects: ModuleLoader;
48
+ export declare const loadRun: ModuleLoader;
49
+ export declare const loadOpen: ModuleLoader;
50
+ export declare const loadReconnect: ModuleLoader;
51
+ export declare const loadFork: ModuleLoader;
52
+ export declare const loadConfig: ModuleLoader;
53
+ export declare const loadModels: ModuleLoader;
54
+ export declare const loadModes: ModuleLoader;
55
+ export declare const loadPrune: ModuleLoader;
56
+ export declare const loadTrash: ModuleLoader;
57
+ export declare const loadRestore: ModuleLoader;
58
+ export declare const loadDoctor: ModuleLoader;
59
+ export declare const loadApply: ModuleLoader;
60
+ export declare const loadStatus: ModuleLoader;
61
+ export declare const loadRoute: ModuleLoader;
62
+ export declare const loadHarness: ModuleLoader;
63
+ export declare const loadSecrets: ModuleLoader;
64
+ export declare const loadMenubar: ModuleLoader;
65
+ export declare const loadBeta: ModuleLoader;
66
+ export declare const loadSync: ModuleLoader;
67
+ export declare const loadRefreshRules: ModuleLoader;
68
+ export declare const loadFactory: ModuleLoader;
69
+ export declare const loadUsage: ModuleLoader;
70
+ export declare const loadInsights: ModuleLoader;
71
+ export declare const loadPerf: ModuleLoader;
72
+ export declare const loadTrends: ModuleLoader;
73
+ export declare const loadAlias: ModuleLoader;
74
+ export declare const loadPty: ModuleLoader;
75
+ export declare const loadTmux: ModuleLoader;
76
+ export declare const loadWatchdog: ModuleLoader;
77
+ export declare const loadBrowser: ModuleLoader;
78
+ export declare const loadComputer: ModuleLoader;
79
+ export declare const loadLogs: ModuleLoader;
80
+ export declare const loadEvents: ModuleLoader;
81
+ export declare const loadSsh: ModuleLoader;
82
+ export declare const loadRepo: ModuleLoader;
83
+ export declare const loadSetup: ModuleLoader;
84
+ export declare const loadUninstall: ModuleLoader;
85
+ export declare const loadUpgrade: ModuleLoader;
86
+ export declare const loadSessions: ModuleLoader;
87
+ export declare const loadTeams: ModuleLoader;
88
+ export declare const loadTickets: ModuleLoader;
89
+ export declare const loadCloud: ModuleLoader;
90
+ export declare const loadMessage: ModuleLoader;
91
+ export declare const loadSend: ModuleLoader;
92
+ export declare const loadFeed: ModuleLoader;
93
+ export declare const loadMailboxes: ModuleLoader;
94
+ export declare const loadServe: ModuleLoader;
95
+ export declare const loadArtifacts: ModuleLoader;
96
+ export declare const loadAudit: ModuleLoader;
97
+ export declare const loadWebhooks: ModuleLoader;
98
+ export declare const loadHumans: ModuleLoader;
99
+ export declare const loadAccounts: ModuleLoader;
100
+ export declare const loadDaemon: ModuleLoader;
101
+ /**
102
+ * Commands whose modules pull in the SQLite-backed session/cloud stack. They are
103
+ * registered AFTER `applyGlobalHelpConventions` (mirroring main's order: help
104
+ * conventions at module top-level, lazy registration just before parse), so they
105
+ * inherit the root's custom help formatter rather than getting the per-command
106
+ * recursive pass. Keeping that ordering preserves their `--help` output exactly.
107
+ */
108
+ export declare const LAZY_COMMAND_NAMES: ReadonlySet<string>;
109
+ /**
110
+ * User-typed top-level command name -> ordered list of module loaders to run.
111
+ *
112
+ * Most names map to a single loader. The exceptions encode real coupling on main:
113
+ * - `add`/`use`/`list`/`remove`/`rm`/`purge` all come from the versions module.
114
+ * - `registry`/`search`/`install` all come from the packages module.
115
+ * - `trash` and `restore` are separate registrars in the trash module.
116
+ * - `prune` needs versions FIRST (it creates `prune <specs...>`) then prune.js
117
+ * (which finds that command and attaches the `cleanup` subcommand).
118
+ *
119
+ * Inline deprecated aliases (memory/perms/exec/jobs/cron) and the inline
120
+ * `upgrade` command are NOT here — they are closures over entry-point state and
121
+ * are handled directly in src/index.ts.
122
+ */
123
+ export declare const COMMAND_LOADERS: Record<string, ModuleLoader[]>;
124
+ /**
125
+ * Register every module in {@link COMMAND_LOADERS} onto one fresh program and
126
+ * return it — the full public command tree, deduped by loader identity so a
127
+ * loader mapped to several names (e.g. `add`/`use`/`list` -> versions) runs once.
128
+ *
129
+ * Off the hot path only: the command-index generator (`scripts/gen-command-index.ts`)
130
+ * and the tests build the tree from this. Startup never calls it — src/index.ts
131
+ * registers just the one requested command via `registerEagerForRequest`. The
132
+ * inline aliases/tombstones ({@link INLINE_COMMAND_NAMES}) are NOT included: they
133
+ * are closures over entry-point state that src/index.ts registers directly.
134
+ */
135
+ export declare function buildFullCommandTree(): Promise<Command>;
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Lazy command registry.
3
+ *
4
+ * The CLI entry point (src/index.ts) used to statically import every command
5
+ * module and call its `registerXCommand(program)` on every invocation. That
6
+ * loaded the entire command tree (~50 modules) before the first line of output,
7
+ * dominating cold-start latency.
8
+ *
9
+ * This module maps each user-typed top-level command name to a thunk that
10
+ * dynamically imports ONLY the module(s) that command needs. Fast commands
11
+ * (`--version`, `view`, ...) now pay for just the one module they use; the full
12
+ * tree is loaded only on the rare slow paths (unknown-command spellcheck, bare
13
+ * help) via `registerAllEagerCommands` in src/index.ts.
14
+ *
15
+ * Parity is non-negotiable: the name -> loader map below mirrors exactly which
16
+ * module registers which top-level command on `main`. Multi-command modules
17
+ * (versions, packages) map several names to the same loader; `prune` needs BOTH
18
+ * versions (which creates `prune <specs...>`) and prune.js (which attaches the
19
+ * `cleanup` subcommand to it), in that order — see commands/prune.ts.
20
+ */
21
+ import { Command } from 'commander';
22
+ import { readFileSync } from 'node:fs';
23
+ import { fileURLToPath } from 'node:url';
24
+ import { configureRootCommand } from '../lib/startup/root-command.js';
25
+ export { KNOWN_TOP_LEVEL_COMMANDS, RETIRED_TOP_LEVEL_COMMANDS } from '../lib/startup/command-registry.js';
26
+ // One loader per command module. Each dynamically imports the module and hands
27
+ // back its register function. Kept as named consts so src/index.ts can compose
28
+ // them into the exact main-branch registration order for the slow path.
29
+ export const loadView = async () => (await import('../commands/view.js')).registerViewCommand;
30
+ export const loadInspect = async () => (await import('../commands/inspect.js')).registerInspectCommand;
31
+ export const loadFeedback = async () => (await import('../commands/feedback.js')).registerFeedbackCommand;
32
+ export const loadCommands = async () => (await import('../commands/commands.js')).registerCommandsCommands;
33
+ export const loadHooks = async () => (await import('../commands/hooks.js')).registerHooksCommands;
34
+ export const loadSkills = async () => (await import('../commands/skills.js')).registerSkillsCommands;
35
+ export const loadRules = async () => (await import('../commands/rules.js')).registerRulesCommands;
36
+ export const loadMemory = async () => (await import('../commands/memory.js')).registerMemoryCommands;
37
+ export const loadPermissions = async () => (await import('../commands/permissions.js')).registerPermissionsCommands;
38
+ export const loadMcp = async () => (await import('../commands/mcp.js')).registerMcpCommands;
39
+ export const loadCli = async () => (await import('../commands/cli.js')).registerCliCommands;
40
+ export const loadSubagents = async () => (await import('../commands/subagents.js')).registerSubagentsCommands;
41
+ export const loadPlugins = async () => (await import('../commands/plugins.js')).registerPluginsCommands;
42
+ export const loadWorkflows = async () => (await import('../commands/workflows.js')).registerWorkflowsCommands;
43
+ export const loadVersions = async () => (await import('../commands/versions.js')).registerVersionsCommands;
44
+ export const loadUpdate = async () => (await import('../commands/update.js')).registerUpdateCommand;
45
+ export const loadImport = async () => (await import('../commands/import.js')).registerImportCommand;
46
+ export const loadPackages = async () => (await import('../commands/packages.js')).registerPackagesCommands;
47
+ export const loadRoutines = async () => (await import('../commands/routines.js')).registerRoutinesCommands;
48
+ export const loadMonitors = async () => (await import('../commands/monitors.js')).registerMonitorsCommands;
49
+ export const loadProjects = async () => (await import('../commands/projects.js')).registerProjectsCommands;
50
+ export const loadRun = async () => (await import('../commands/exec.js')).registerRunCommand;
51
+ export const loadOpen = async () => (await import('../commands/open.js')).registerOpenCommand;
52
+ export const loadReconnect = async () => (await import('../commands/reconnect.js')).registerReconnectCommand;
53
+ export const loadFork = async () => (await import('../commands/fork.js')).registerForkCommand;
54
+ export const loadConfig = async () => (await import('../commands/config.js')).registerConfigCommand;
55
+ export const loadModels = async () => (await import('../commands/models.js')).registerModelsCommand;
56
+ export const loadModes = async () => (await import('../commands/modes.js')).registerModesCommand;
57
+ export const loadPrune = async () => (await import('../commands/prune.js')).registerPruneCommand;
58
+ export const loadTrash = async () => (await import('../commands/trash.js')).registerTrashCommands;
59
+ export const loadRestore = async () => (await import('../commands/trash.js')).registerRestoreCommand;
60
+ export const loadDoctor = async () => (await import('../commands/doctor.js')).registerDoctorCommand;
61
+ export const loadApply = async () => (await import('../commands/apply.js')).registerApplyCommand;
62
+ export const loadStatus = async () => (await import('../commands/status.js')).registerStatusCommand;
63
+ export const loadRoute = async () => (await import('../commands/route.js')).registerRouteCommands;
64
+ export const loadHarness = async () => (await import('../commands/harness.js')).registerHarnessCommands;
65
+ export const loadSecrets = async () => (await import('../commands/secrets.js')).registerSecretsCommands;
66
+ export const loadMenubar = async () => (await import('../commands/menubar.js')).registerMenubarCommands;
67
+ export const loadBeta = async () => (await import('../commands/beta.js')).registerBetaCommands;
68
+ export const loadSync = async () => (await import('../commands/sync.js')).registerSyncCommand;
69
+ export const loadRefreshRules = async () => (await import('../commands/refresh-rules.js')).registerRefreshRulesCommand;
70
+ export const loadFactory = async () => (await import('../commands/factory.js')).registerFactoryCommands;
71
+ export const loadUsage = async () => (await import('../commands/usage.js')).registerUsageCommand;
72
+ export const loadInsights = async () => (await import('../commands/insights.js')).registerInsightsCommand;
73
+ export const loadPerf = async () => (await import('../commands/perf.js')).registerPerfCommand;
74
+ // Thin deprecated alias of `agents insights mix` — no second mix implementation.
75
+ export const loadTrends = async () => (await import('../commands/trends.js')).registerTrendsCommand;
76
+ export const loadAlias = async () => (await import('../commands/alias.js')).registerAliasCommand;
77
+ export const loadPty = async () => (await import('../commands/pty.js')).registerPtyCommands;
78
+ export const loadTmux = async () => (await import('../commands/tmux.js')).registerTmuxCommands;
79
+ export const loadWatchdog = async () => (await import('../commands/watchdog.js')).registerWatchdogCommand;
80
+ export const loadBrowser = async () => (await import('../commands/browser.js')).registerBrowserCommand;
81
+ export const loadComputer = async () => (await import('../commands/computer.js')).registerComputerCommand;
82
+ export const loadLogs = async () => (await import('../commands/logs.js')).registerLogsCommand;
83
+ export const loadEvents = async () => (await import('../commands/events.js')).registerEventsCommand;
84
+ export const loadSsh = async () => (await import('../commands/ssh.js')).registerSshCommands;
85
+ export const loadRepo = async () => (await import('../commands/repo.js')).registerRepoCommands;
86
+ export const loadSetup = async () => (await import('../commands/setup.js')).registerSetupCommand;
87
+ export const loadUninstall = async () => (await import('../commands/uninstall.js')).registerUninstallCommands;
88
+ export const loadUpgrade = async () => (await import('../commands/upgrade.js')).registerUpgradeCommand;
89
+ export const loadSessions = async () => (await import('../commands/sessions.js')).registerSessionsCommands;
90
+ export const loadTeams = async () => (await import('../commands/teams.js')).registerTeamsCommands;
91
+ export const loadTickets = async () => (await import('../commands/tickets.js')).registerTicketsCommand;
92
+ export const loadCloud = async () => (await import('../commands/cloud.js')).registerCloudCommands;
93
+ export const loadMessage = async () => (await import('../commands/message.js')).registerMessageCommand;
94
+ export const loadSend = async () => (await import('../commands/send.js')).registerSendCommand;
95
+ export const loadFeed = async () => (await import('../commands/feed.js')).registerFeedCommand;
96
+ export const loadMailboxes = async () => (await import('../commands/mailboxes.js')).registerMailboxesCommand;
97
+ export const loadServe = async () => (await import('../commands/serve.js')).registerServeCommand;
98
+ // Registers the `artifacts` group (with `share` + `setup` under it) AND the
99
+ // top-level `unshare` alias — see commands/artifacts.ts.
100
+ export const loadArtifacts = async () => (await import('../commands/artifacts.js')).registerArtifactsCommands;
101
+ export const loadAudit = async () => (await import('../commands/audit.js')).registerAuditCommands;
102
+ export const loadWebhooks = async () => (await import('../commands/webhook.js')).registerWebhooksCommand;
103
+ export const loadHumans = async () => (await import('../commands/humans.js')).registerHumansCommands;
104
+ export const loadAccounts = async () => (await import('../commands/accounts.js')).registerAccountsCommand;
105
+ export const loadDaemon = async () => (await import('../commands/daemon.js')).registerDaemonCommand;
106
+ /**
107
+ * Commands whose modules pull in the SQLite-backed session/cloud stack. They are
108
+ * registered AFTER `applyGlobalHelpConventions` (mirroring main's order: help
109
+ * conventions at module top-level, lazy registration just before parse), so they
110
+ * inherit the root's custom help formatter rather than getting the per-command
111
+ * recursive pass. Keeping that ordering preserves their `--help` output exactly.
112
+ */
113
+ // `roster` was a sessions --active alias — removed; use sessions --active.
114
+ export const LAZY_COMMAND_NAMES = new Set([
115
+ 'sessions',
116
+ 'reconnect',
117
+ 'teams',
118
+ 'cloud',
119
+ 'message',
120
+ 'serve',
121
+ ]);
122
+ /**
123
+ * User-typed top-level command name -> ordered list of module loaders to run.
124
+ *
125
+ * Most names map to a single loader. The exceptions encode real coupling on main:
126
+ * - `add`/`use`/`list`/`remove`/`rm`/`purge` all come from the versions module.
127
+ * - `registry`/`search`/`install` all come from the packages module.
128
+ * - `trash` and `restore` are separate registrars in the trash module.
129
+ * - `prune` needs versions FIRST (it creates `prune <specs...>`) then prune.js
130
+ * (which finds that command and attaches the `cleanup` subcommand).
131
+ *
132
+ * Inline deprecated aliases (memory/perms/exec/jobs/cron) and the inline
133
+ * `upgrade` command are NOT here — they are closures over entry-point state and
134
+ * are handled directly in src/index.ts.
135
+ */
136
+ export const COMMAND_LOADERS = {
137
+ accounts: [loadAccounts],
138
+ view: [loadView],
139
+ inspect: [loadInspect],
140
+ feedback: [loadFeedback],
141
+ commands: [loadCommands],
142
+ hooks: [loadHooks],
143
+ skills: [loadSkills],
144
+ rules: [loadRules],
145
+ memory: [loadMemory],
146
+ permissions: [loadPermissions],
147
+ mcp: [loadMcp],
148
+ clis: [loadCli],
149
+ subagents: [loadSubagents],
150
+ plugins: [loadPlugins],
151
+ workflows: [loadWorkflows],
152
+ add: [loadVersions],
153
+ use: [loadVersions],
154
+ list: [loadVersions],
155
+ remove: [loadVersions],
156
+ rm: [loadVersions],
157
+ purge: [loadVersions],
158
+ update: [loadUpdate],
159
+ prune: [loadVersions, loadPrune],
160
+ import: [loadImport],
161
+ registry: [loadPackages],
162
+ search: [loadPackages],
163
+ install: [loadPackages],
164
+ routines: [loadRoutines],
165
+ monitors: [loadMonitors],
166
+ projects: [loadProjects],
167
+ run: [loadRun],
168
+ open: [loadOpen],
169
+ reconnect: [loadReconnect],
170
+ fork: [loadFork],
171
+ config: [loadConfig],
172
+ models: [loadModels],
173
+ modes: [loadModes],
174
+ trash: [loadTrash],
175
+ restore: [loadRestore],
176
+ doctor: [loadDoctor],
177
+ apply: [loadApply],
178
+ status: [loadStatus],
179
+ route: [loadRoute],
180
+ harness: [loadHarness],
181
+ harnesses: [loadHarness],
182
+ secrets: [loadSecrets],
183
+ menubar: [loadMenubar],
184
+ beta: [loadBeta],
185
+ sync: [loadSync],
186
+ 'refresh-rules': [loadRefreshRules],
187
+ factory: [loadFactory],
188
+ usage: [loadUsage],
189
+ insights: [loadInsights],
190
+ perf: [loadPerf],
191
+ trends: [loadTrends],
192
+ alias: [loadAlias],
193
+ pty: [loadPty],
194
+ tmux: [loadTmux],
195
+ watchdog: [loadWatchdog],
196
+ browser: [loadBrowser],
197
+ computer: [loadComputer],
198
+ logs: [loadLogs],
199
+ events: [loadEvents],
200
+ ssh: [loadSsh],
201
+ devices: [loadSsh],
202
+ // `fleet` is a commander alias of `devices` (see commands/ssh.ts); list it so
203
+ // lazy registration loads the devices tree when the user types `agents fleet`.
204
+ fleet: [loadSsh],
205
+ // `repos` is the canonical command name; `repo` remains a convenience alias
206
+ // (see commands/repo.ts). List both so lazy registration loads the tree
207
+ // whichever the user types.
208
+ repos: [loadRepo],
209
+ repo: [loadRepo],
210
+ setup: [loadSetup],
211
+ uninstall: [loadUninstall],
212
+ upgrade: [loadUpgrade],
213
+ sessions: [loadSessions],
214
+ teams: [loadTeams],
215
+ tickets: [loadTickets],
216
+ cloud: [loadCloud],
217
+ message: [loadMessage],
218
+ send: [loadSend],
219
+ notify: [loadSend],
220
+ feed: [loadFeed],
221
+ // Observe-umbrella alias of feed (the `timeline` alias was removed in RUSH-2692).
222
+ inbox: [loadFeed],
223
+ mailboxes: [loadMailboxes],
224
+ mailbox: [loadMailboxes],
225
+ serve: [loadServe],
226
+ artifacts: [loadArtifacts],
227
+ // `unshare` is a top-level convenience alias of `artifacts share delete` (see
228
+ // commands/share.ts) — same module, registered as its own program.command().
229
+ unshare: [loadArtifacts],
230
+ audit: [loadAudit],
231
+ webhooks: [loadWebhooks],
232
+ humans: [loadHumans],
233
+ daemon: [loadDaemon],
234
+ };
235
+ /**
236
+ * Register every module in {@link COMMAND_LOADERS} onto one fresh program and
237
+ * return it — the full public command tree, deduped by loader identity so a
238
+ * loader mapped to several names (e.g. `add`/`use`/`list` -> versions) runs once.
239
+ *
240
+ * Off the hot path only: the command-index generator (`scripts/gen-command-index.ts`)
241
+ * and the tests build the tree from this. Startup never calls it — src/index.ts
242
+ * registers just the one requested command via `registerEagerForRequest`. The
243
+ * inline aliases/tombstones ({@link INLINE_COMMAND_NAMES}) are NOT included: they
244
+ * are closures over entry-point state that src/index.ts registers directly.
245
+ */
246
+ export async function buildFullCommandTree() {
247
+ const packageJson = JSON.parse(readFileSync(fileURLToPath(new URL('../../package.json', import.meta.url)), 'utf8'));
248
+ const program = configureRootCommand(new Command(), 'agents', packageJson.version);
249
+ const done = new Set();
250
+ for (const loaders of Object.values(COMMAND_LOADERS)) {
251
+ for (const loader of loaders) {
252
+ if (done.has(loader))
253
+ continue;
254
+ done.add(loader);
255
+ (await loader())(program);
256
+ }
257
+ }
258
+ return program;
259
+ }
@@ -1,6 +1,26 @@
1
1
  import type { Command } from 'commander';
2
+ import type { AgentId } from '../lib/types.js';
3
+ import { type Profile } from '../lib/profiles.js';
4
+ type AttachTarget = {
5
+ kind: 'installation';
6
+ agent: AgentId;
7
+ version: string;
8
+ } | {
9
+ kind: 'device-agent';
10
+ agent: AgentId;
11
+ } | {
12
+ kind: 'profile';
13
+ profile: Profile;
14
+ };
15
+ /**
16
+ * Classify + validate an attach target, rejecting a typo BEFORE any binding is
17
+ * written: it must be an existing custom-harness profile, an installed
18
+ * `agent@version`, or a known harness id.
19
+ */
20
+ export declare function classifyAttachTarget(target: string): AttachTarget;
2
21
  export declare function parseBundleKey(raw: string): {
3
22
  bundle: string;
4
23
  key: string;
5
24
  };
6
25
  export declare function registerAccountsCommand(program: Command): void;
26
+ export {};