@phnx-labs/agents-cli 1.22.39 → 1.22.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (554) hide show
  1. package/CHANGELOG.md +294 -0
  2. package/README.md +111 -70
  3. package/dist/bin/agents +0 -0
  4. package/dist/bootstrap.js +45 -26
  5. package/dist/browser.js +2 -2
  6. package/dist/cli/command-registry.d.ts +135 -0
  7. package/dist/cli/command-registry.js +260 -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.js +206 -94
  13. package/dist/commands/budget.d.ts +7 -6
  14. package/dist/commands/budget.js +8 -7
  15. package/dist/commands/cloud.js +17 -20
  16. package/dist/commands/commands.js +1 -1
  17. package/dist/commands/computer-actions.d.ts +1 -35
  18. package/dist/commands/computer-actions.js +13 -181
  19. package/dist/commands/computer.d.ts +28 -3
  20. package/dist/commands/computer.js +93 -65
  21. package/dist/commands/config.js +16 -3
  22. package/dist/commands/cost.d.ts +2 -1
  23. package/dist/commands/cost.js +7 -6
  24. package/dist/commands/daemon.js +151 -4
  25. package/dist/commands/detach.js +1 -1
  26. package/dist/commands/doctor.js +19 -11
  27. package/dist/commands/events.js +1 -1
  28. package/dist/commands/exec.d.ts +2 -50
  29. package/dist/commands/exec.js +160 -215
  30. package/dist/commands/factory.js +1 -1
  31. package/dist/commands/feed.d.ts +2 -2
  32. package/dist/commands/feed.js +9 -12
  33. package/dist/commands/fleet-capture.js +25 -27
  34. package/dist/commands/focus.d.ts +2 -3
  35. package/dist/commands/focus.js +34 -9
  36. package/dist/commands/go.js +15 -5
  37. package/dist/commands/harness.d.ts +3 -3
  38. package/dist/commands/harness.js +53 -5
  39. package/dist/commands/hooks.js +1 -1
  40. package/dist/commands/import.js +2 -2
  41. package/dist/commands/insights.d.ts +5 -5
  42. package/dist/commands/insights.js +15 -9
  43. package/dist/commands/inspect.d.ts +2 -3
  44. package/dist/commands/inspect.js +4 -16
  45. package/dist/commands/logs.d.ts +2 -2
  46. package/dist/commands/logs.js +9 -9
  47. package/dist/commands/mcp.js +2 -2
  48. package/dist/commands/memory.js +1 -1
  49. package/dist/commands/message.d.ts +1 -1
  50. package/dist/commands/message.js +7 -7
  51. package/dist/commands/mine.d.ts +11 -8
  52. package/dist/commands/mine.js +11 -10
  53. package/dist/commands/models.js +1 -1
  54. package/dist/commands/modes.js +1 -1
  55. package/dist/commands/monitors.js +23 -6
  56. package/dist/commands/output.d.ts +7 -6
  57. package/dist/commands/output.js +11 -10
  58. package/dist/commands/packages.js +4 -4
  59. package/dist/commands/perf.js +1 -1
  60. package/dist/commands/permissions.js +49 -32
  61. package/dist/commands/plugins.d.ts +1 -1
  62. package/dist/commands/plugins.js +3 -3
  63. package/dist/commands/profiles.d.ts +6 -9
  64. package/dist/commands/profiles.js +8 -321
  65. package/dist/commands/projects.d.ts +9 -0
  66. package/dist/commands/projects.js +140 -8
  67. package/dist/commands/prune.js +5 -13
  68. package/dist/commands/refresh-rules.js +1 -1
  69. package/dist/commands/repo.d.ts +5 -7
  70. package/dist/commands/repo.js +34 -18
  71. package/dist/commands/resource-view.js +4 -0
  72. package/dist/commands/resume.d.ts +11 -7
  73. package/dist/commands/resume.js +82 -98
  74. package/dist/commands/route.d.ts +12 -0
  75. package/dist/commands/route.js +261 -0
  76. package/dist/commands/routines.d.ts +2 -3
  77. package/dist/commands/routines.js +120 -145
  78. package/dist/commands/rules.js +1 -1
  79. package/dist/commands/run-account-picker.d.ts +1 -1
  80. package/dist/commands/run-account-picker.js +2 -2
  81. package/dist/commands/run-broadcast.d.ts +21 -0
  82. package/dist/commands/run-broadcast.js +89 -0
  83. package/dist/commands/run-cloud.js +1 -1
  84. package/dist/commands/secrets-vault.d.ts +10 -0
  85. package/dist/commands/{login.js → secrets-vault.js} +34 -14
  86. package/dist/commands/secrets.d.ts +4 -4
  87. package/dist/commands/secrets.js +72 -63
  88. package/dist/commands/sessions-backfill.js +1 -1
  89. package/dist/commands/sessions-browser.d.ts +1 -1
  90. package/dist/commands/sessions-browser.js +9 -5
  91. package/dist/commands/sessions-export.js +2 -2
  92. package/dist/commands/sessions-inject.js +4 -5
  93. package/dist/commands/sessions-migrate.js +16 -27
  94. package/dist/commands/sessions-picker.d.ts +13 -0
  95. package/dist/commands/sessions-picker.js +182 -8
  96. package/dist/commands/sessions-resume.d.ts +7 -3
  97. package/dist/commands/sessions-resume.js +81 -33
  98. package/dist/commands/sessions-stats.js +2 -2
  99. package/dist/commands/sessions.d.ts +75 -68
  100. package/dist/commands/sessions.js +142 -180
  101. package/dist/commands/setup-computer.js +1 -1
  102. package/dist/commands/setup-fleet.js +3 -0
  103. package/dist/commands/setup-mine.d.ts +7 -3
  104. package/dist/commands/setup-mine.js +13 -8
  105. package/dist/commands/setup-secrets.js +2 -2
  106. package/dist/commands/setup-watchdog.js +2 -2
  107. package/dist/commands/setup.js +7 -2
  108. package/dist/commands/share.d.ts +65 -0
  109. package/dist/commands/share.js +253 -20
  110. package/dist/commands/skills.js +3 -3
  111. package/dist/commands/snapshot.d.ts +2 -2
  112. package/dist/commands/snapshot.js +9 -9
  113. package/dist/commands/ssh.d.ts +1 -1
  114. package/dist/commands/ssh.js +186 -64
  115. package/dist/commands/subagents.js +1 -1
  116. package/dist/commands/sync.js +24 -9
  117. package/dist/commands/teams.d.ts +2 -2
  118. package/dist/commands/teams.js +9 -18
  119. package/dist/commands/tmux.js +5 -1
  120. package/dist/commands/trash.js +1 -1
  121. package/dist/commands/usage.d.ts +1 -1
  122. package/dist/commands/usage.js +2 -2
  123. package/dist/commands/utils.d.ts +4 -14
  124. package/dist/commands/utils.js +6 -27
  125. package/dist/commands/versions.js +2 -2
  126. package/dist/commands/view.d.ts +9 -77
  127. package/dist/commands/view.js +23 -8
  128. package/dist/commands/watchdog.js +1 -1
  129. package/dist/commands/webhook.js +11 -25
  130. package/dist/commands/workflows.js +1 -1
  131. package/dist/index.js +1 -1
  132. package/dist/lib/account-capabilities.d.ts +39 -0
  133. package/dist/lib/account-capabilities.js +59 -0
  134. package/dist/lib/account-catalog.js +1 -1
  135. package/dist/lib/account-registry.d.ts +66 -0
  136. package/dist/lib/account-registry.js +151 -5
  137. package/dist/lib/{rotate.d.ts → accounting/rotate.d.ts} +4 -4
  138. package/dist/lib/{rotate.js → accounting/rotate.js} +8 -8
  139. package/dist/lib/{usage.d.ts → accounting/usage.d.ts} +4 -4
  140. package/dist/lib/{usage.js → accounting/usage.js} +11 -11
  141. package/dist/lib/agent-spec/provider.js +1 -1
  142. package/dist/lib/agents.d.ts +72 -4
  143. package/dist/lib/agents.js +231 -199
  144. package/dist/lib/answer-router.d.ts +2 -2
  145. package/dist/lib/ask-classifier.d.ts +1 -1
  146. package/dist/lib/ask-classifier.js +1 -1
  147. package/dist/lib/audit/log.js +1 -1
  148. package/dist/lib/auth-health.d.ts +1 -1
  149. package/dist/lib/auth-health.js +2 -2
  150. package/dist/lib/brand.js +1 -1
  151. package/dist/lib/browser/caller-identity.d.ts +28 -0
  152. package/dist/lib/browser/caller-identity.js +156 -0
  153. package/dist/lib/browser/cdp.js +1 -1
  154. package/dist/lib/browser/drivers/ssh.d.ts +1 -1
  155. package/dist/lib/browser/drivers/ssh.js +2 -2
  156. package/dist/lib/browser/hygiene.d.ts +10 -2
  157. package/dist/lib/browser/hygiene.js +7 -4
  158. package/dist/lib/browser/ipc.d.ts +22 -2
  159. package/dist/lib/browser/ipc.js +185 -21
  160. package/dist/lib/browser/profiles.d.ts +67 -3
  161. package/dist/lib/browser/profiles.js +129 -7
  162. package/dist/lib/browser/remote-control.d.ts +2 -2
  163. package/dist/lib/browser/remote-control.js +3 -3
  164. package/dist/lib/browser/runtime-state.d.ts +79 -0
  165. package/dist/lib/browser/runtime-state.js +119 -1
  166. package/dist/lib/browser/service.d.ts +113 -1
  167. package/dist/lib/browser/service.js +454 -40
  168. package/dist/lib/browser/sessions-list.d.ts +2 -1
  169. package/dist/lib/browser/sessions-list.js +4 -13
  170. package/dist/lib/browser/types.d.ts +18 -0
  171. package/dist/lib/budget/config.js +1 -1
  172. package/dist/lib/budget/ledger.js +1 -1
  173. package/dist/lib/byok-usage.js +1 -1
  174. package/dist/lib/capabilities.js +3 -15
  175. package/dist/lib/catchup.d.ts +1 -1
  176. package/dist/lib/catchup.js +1 -1
  177. package/dist/lib/cloud/dispatch.js +1 -1
  178. package/dist/lib/cloud/host.d.ts +3 -3
  179. package/dist/lib/cloud/host.js +5 -5
  180. package/dist/lib/cloud/rush.d.ts +9 -21
  181. package/dist/lib/cloud/rush.js +33 -120
  182. package/dist/lib/cloud/types.d.ts +2 -2
  183. package/dist/lib/commands.js +3 -13
  184. package/dist/lib/computer/actions.d.ts +36 -0
  185. package/dist/lib/computer/actions.js +162 -0
  186. package/dist/lib/computer/dispatch.d.ts +2 -2
  187. package/dist/lib/computer/dispatch.js +2 -2
  188. package/dist/lib/computer/sessions-list.d.ts +3 -3
  189. package/dist/lib/computer/sessions-list.js +2 -2
  190. package/dist/lib/config-keys.d.ts +2 -1
  191. package/dist/lib/config-keys.js +8 -4
  192. package/dist/lib/config-machine-keys.d.ts +4 -2
  193. package/dist/lib/config-machine-keys.js +5 -2
  194. package/dist/lib/crabbox/lease.js +9 -1
  195. package/dist/lib/crabbox/runtimes.d.ts +32 -7
  196. package/dist/lib/crabbox/runtimes.js +72 -30
  197. package/dist/lib/{daemon.d.ts → daemon/daemon.d.ts} +59 -1
  198. package/dist/lib/{daemon.js → daemon/daemon.js} +237 -49
  199. package/dist/lib/daemon-services.d.ts +1 -1
  200. package/dist/lib/daemon-services.js +5 -0
  201. package/dist/lib/daemon-ticks.d.ts +25 -0
  202. package/dist/lib/daemon-ticks.js +31 -1
  203. package/dist/lib/daemon-webhooks.d.ts +102 -0
  204. package/dist/lib/daemon-webhooks.js +210 -0
  205. package/dist/lib/device-config.d.ts +85 -75
  206. package/dist/lib/device-config.js +279 -141
  207. package/dist/lib/devices/config-migration.d.ts +29 -34
  208. package/dist/lib/devices/config-migration.js +209 -130
  209. package/dist/lib/devices/connect.d.ts +2 -2
  210. package/dist/lib/devices/connect.js +2 -2
  211. package/dist/lib/devices/discovery-policy.d.ts +30 -0
  212. package/dist/lib/devices/discovery-policy.js +101 -0
  213. package/dist/lib/devices/fleet-inventory.js +8 -3
  214. package/dist/lib/devices/harness-inventory.d.ts +1 -1
  215. package/dist/lib/devices/harness-inventory.js +12 -3
  216. package/dist/lib/devices/known-hosts.js +1 -1
  217. package/dist/lib/devices/pool.d.ts +10 -5
  218. package/dist/lib/devices/pool.js +5 -7
  219. package/dist/lib/devices/registry.d.ts +1 -1
  220. package/dist/lib/devices/registry.js +1 -1
  221. package/dist/lib/devices/resolve-profile.d.ts +2 -2
  222. package/dist/lib/devices/resolve-profile.js +2 -2
  223. package/dist/lib/devices/resolve-target.d.ts +1 -1
  224. package/dist/lib/devices/resolve-target.js +4 -4
  225. package/dist/lib/devices/self-host.d.ts +1 -1
  226. package/dist/lib/devices/self-host.js +3 -3
  227. package/dist/lib/devices/ssh-config.d.ts +1 -1
  228. package/dist/lib/devices/stats-cache.js +1 -1
  229. package/dist/lib/devices/sync.d.ts +3 -1
  230. package/dist/lib/devices/sync.js +3 -3
  231. package/dist/lib/doctor-diff.js +4 -4
  232. package/dist/lib/drift-sync.js +2 -2
  233. package/dist/lib/drift.js +2 -2
  234. package/dist/lib/event-families.d.ts +1 -1
  235. package/dist/lib/event-stream.d.ts +1 -1
  236. package/dist/lib/event-stream.js +2 -2
  237. package/dist/lib/events-ingest.js +2 -2
  238. package/dist/lib/exec.d.ts +4 -4
  239. package/dist/lib/exec.js +11 -11
  240. package/dist/lib/factory/snapshot.d.ts +1 -1
  241. package/dist/lib/factory/snapshot.js +1 -1
  242. package/dist/lib/{activity.d.ts → feed/activity.d.ts} +1 -1
  243. package/dist/lib/{activity.js → feed/activity.js} +7 -7
  244. package/dist/lib/{events.d.ts → feed/events.d.ts} +2 -2
  245. package/dist/lib/{events.js → feed/events.js} +5 -5
  246. package/dist/lib/{feed.js → feed/feed.js} +4 -4
  247. package/dist/lib/feed-outcome.d.ts +1 -1
  248. package/dist/lib/feed-policy.d.ts +1 -1
  249. package/dist/lib/feed-policy.js +1 -1
  250. package/dist/lib/feed-post.d.ts +1 -1
  251. package/dist/lib/feed-post.js +1 -1
  252. package/dist/lib/feed-ranking.d.ts +1 -1
  253. package/dist/lib/fleet/apply.d.ts +0 -6
  254. package/dist/lib/fleet/apply.js +18 -45
  255. package/dist/lib/fleet/auth-sync.d.ts +16 -35
  256. package/dist/lib/fleet/auth-sync.js +16 -75
  257. package/dist/lib/fleet/capture.js +8 -6
  258. package/dist/lib/fleet/manifest.js +23 -11
  259. package/dist/lib/fleet/types.d.ts +19 -7
  260. package/dist/lib/fleet-cache.d.ts +1 -1
  261. package/dist/lib/fleet-cache.js +1 -1
  262. package/dist/lib/format.d.ts +19 -0
  263. package/dist/lib/format.js +44 -1
  264. package/dist/lib/friction-heuristics.d.ts +1 -1
  265. package/dist/lib/git.d.ts +24 -1
  266. package/dist/lib/git.js +82 -38
  267. package/dist/lib/heal.js +3 -3
  268. package/dist/lib/hooks.d.ts +18 -0
  269. package/dist/lib/hooks.js +113 -1
  270. package/dist/lib/hosts/credentials.d.ts +30 -10
  271. package/dist/lib/hosts/credentials.js +38 -26
  272. package/dist/lib/hosts/dispatch.d.ts +3 -3
  273. package/dist/lib/hosts/dispatch.js +3 -3
  274. package/dist/lib/hosts/option.d.ts +3 -3
  275. package/dist/lib/hosts/option.js +7 -8
  276. package/dist/lib/hosts/passthrough.d.ts +17 -17
  277. package/dist/lib/hosts/passthrough.js +67 -50
  278. package/dist/lib/hosts/providers/devices.d.ts +1 -1
  279. package/dist/lib/hosts/providers/devices.js +1 -1
  280. package/dist/lib/hosts/reconcile.d.ts +1 -1
  281. package/dist/lib/hosts/reconcile.js +1 -1
  282. package/dist/lib/hosts/reconnect.d.ts +1 -1
  283. package/dist/lib/hosts/reconnect.js +2 -2
  284. package/dist/lib/hosts/registry.d.ts +5 -5
  285. package/dist/lib/hosts/registry.js +5 -5
  286. package/dist/lib/hosts/remote-cmd.d.ts +10 -10
  287. package/dist/lib/hosts/remote-cmd.js +25 -18
  288. package/dist/lib/hosts/remote-os.d.ts +4 -4
  289. package/dist/lib/hosts/remote-os.js +4 -4
  290. package/dist/lib/hosts/remote-session-id.d.ts +2 -2
  291. package/dist/lib/hosts/remote-session-id.js +2 -2
  292. package/dist/lib/hosts/routing-flag.d.ts +3 -3
  293. package/dist/lib/hosts/routing-flag.js +4 -5
  294. package/dist/lib/hosts/run-target.d.ts +4 -4
  295. package/dist/lib/hosts/run-target.js +4 -4
  296. package/dist/lib/hosts/session-index.d.ts +2 -2
  297. package/dist/lib/hosts/session-index.js +1 -1
  298. package/dist/lib/hosts/session-marker.d.ts +1 -1
  299. package/dist/lib/hosts/session-marker.js +1 -1
  300. package/dist/lib/hosts/types.d.ts +2 -2
  301. package/dist/lib/hosts/types.js +2 -2
  302. package/dist/lib/import.js +1 -1
  303. package/dist/lib/{migrate.d.ts → installations/migrate.d.ts} +13 -1
  304. package/dist/lib/{migrate.js → installations/migrate.js} +160 -40
  305. package/dist/lib/installations/resolve.js +1 -1
  306. package/dist/lib/installations/strategies.js +1 -1
  307. package/dist/lib/installations/update.js +2 -2
  308. package/dist/lib/{versions.d.ts → installations/versions.d.ts} +12 -3
  309. package/dist/lib/{versions.js → installations/versions.js} +51 -31
  310. package/dist/lib/isolation-boundary-report.js +1 -1
  311. package/dist/lib/linear-projects.d.ts +28 -0
  312. package/dist/lib/linear-projects.js +30 -0
  313. package/dist/lib/loop.js +1 -1
  314. package/dist/lib/mailbox-gc.js +1 -1
  315. package/dist/lib/mailbox.js +1 -1
  316. package/dist/lib/mcp-registry.d.ts +62 -0
  317. package/dist/lib/mcp-registry.js +177 -0
  318. package/dist/lib/mcp.d.ts +5 -0
  319. package/dist/lib/mcp.js +124 -307
  320. package/dist/lib/menubar/MenubarHelper.app/Contents/CodeResources +0 -0
  321. package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
  322. package/dist/lib/menubar/install-menubar.d.ts +7 -0
  323. package/dist/lib/menubar/install-menubar.js +24 -6
  324. package/dist/lib/menubar/snapshot.d.ts +7 -0
  325. package/dist/lib/menubar/snapshot.js +8 -6
  326. package/dist/lib/models.js +1 -1
  327. package/dist/lib/monitors/config.d.ts +12 -0
  328. package/dist/lib/monitors/config.js +3 -0
  329. package/dist/lib/monitors/dispatch.js +26 -5
  330. package/dist/lib/monitors/engine.js +10 -0
  331. package/dist/lib/monitors/sources/webhook.d.ts +1 -1
  332. package/dist/lib/monitors/state.d.ts +42 -0
  333. package/dist/lib/monitors/state.js +30 -0
  334. package/dist/lib/notify.d.ts +1 -1
  335. package/dist/lib/observe-aliases.d.ts +2 -2
  336. package/dist/lib/observe-aliases.js +2 -11
  337. package/dist/lib/output/git-output.js +2 -2
  338. package/dist/lib/overdue.d.ts +1 -1
  339. package/dist/lib/overdue.js +1 -1
  340. package/dist/lib/permissions-registry.d.ts +65 -0
  341. package/dist/lib/permissions-registry.js +599 -0
  342. package/dist/lib/permissions.d.ts +24 -13
  343. package/dist/lib/permissions.js +52 -271
  344. package/dist/lib/picker.d.ts +16 -0
  345. package/dist/lib/picker.js +33 -3
  346. package/dist/lib/placement.d.ts +1 -1
  347. package/dist/lib/placement.js +4 -4
  348. package/dist/lib/platform/paths.d.ts +8 -0
  349. package/dist/lib/platform/paths.js +11 -0
  350. package/dist/lib/platform/posixpath.js +3 -3
  351. package/dist/lib/{plugin-marketplace.d.ts → plugins/plugin-marketplace.d.ts} +1 -1
  352. package/dist/lib/{plugin-marketplace.js → plugins/plugin-marketplace.js} +2 -2
  353. package/dist/lib/{plugins.d.ts → plugins/plugins.d.ts} +1 -1
  354. package/dist/lib/{plugins.js → plugins/plugins.js} +7 -7
  355. package/dist/lib/{skills.d.ts → plugins/skills.d.ts} +1 -1
  356. package/dist/lib/{skills.js → plugins/skills.js} +7 -7
  357. package/dist/lib/pricing/cost.d.ts +1 -1
  358. package/dist/lib/pricing/cost.js +1 -1
  359. package/dist/lib/profiles-presets.d.ts +1 -1
  360. package/dist/lib/profiles-presets.js +1 -1
  361. package/dist/lib/profiles.js +2 -2
  362. package/dist/lib/project-import.js +4 -1
  363. package/dist/lib/project-launch.d.ts +1 -1
  364. package/dist/lib/project-launch.js +3 -3
  365. package/dist/lib/project-pull.d.ts +128 -0
  366. package/dist/lib/project-pull.js +384 -0
  367. package/dist/lib/project-root.d.ts +2 -2
  368. package/dist/lib/project-root.js +2 -2
  369. package/dist/lib/project-status.js +1 -1
  370. package/dist/lib/projects.d.ts +23 -0
  371. package/dist/lib/projects.js +29 -6
  372. package/dist/lib/refresh.d.ts +12 -1
  373. package/dist/lib/refresh.js +16 -9
  374. package/dist/lib/registry.d.ts +9 -2
  375. package/dist/lib/registry.js +11 -4
  376. package/dist/lib/resources.d.ts +2 -2
  377. package/dist/lib/resources.js +2 -2
  378. package/dist/lib/routers.d.ts +81 -0
  379. package/dist/lib/routers.js +153 -0
  380. package/dist/lib/routine-context.d.ts +1 -0
  381. package/dist/lib/routine-context.js +7 -2
  382. package/dist/lib/routine-notify-owner.d.ts +1 -1
  383. package/dist/lib/routine-notify.d.ts +1 -1
  384. package/dist/lib/routine-notify.js +1 -1
  385. package/dist/lib/routine-process-cleanup.d.ts +1 -1
  386. package/dist/lib/routine-readiness.d.ts +1 -1
  387. package/dist/lib/routine-readiness.js +11 -4
  388. package/dist/lib/routines-placement.d.ts +12 -2
  389. package/dist/lib/routines-placement.js +20 -3
  390. package/dist/lib/routines-project.d.ts +1 -1
  391. package/dist/lib/routines-project.js +1 -1
  392. package/dist/lib/rules/compile.d.ts +1 -0
  393. package/dist/lib/rules/compile.js +10 -2
  394. package/dist/lib/rules/rules.js +1 -1
  395. package/dist/lib/run-notify.js +1 -1
  396. package/dist/lib/runner.d.ts +80 -2
  397. package/dist/lib/runner.js +241 -62
  398. package/dist/lib/sandbox.d.ts +1 -1
  399. package/dist/lib/scheduler.d.ts +1 -1
  400. package/dist/lib/scheduler.js +1 -1
  401. package/dist/lib/{routines.d.ts → scheduling/routines.d.ts} +54 -9
  402. package/dist/lib/{routines.js → scheduling/routines.js} +173 -14
  403. package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
  404. package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
  405. package/dist/lib/secrets/agent.js +2 -2
  406. package/dist/lib/secrets/audit.js +1 -1
  407. package/dist/lib/secrets/bundles.d.ts +3 -3
  408. package/dist/lib/secrets/bundles.js +7 -7
  409. package/dist/lib/secrets/index.js +1 -1
  410. package/dist/lib/secrets/list-filter.d.ts +1 -1
  411. package/dist/lib/secrets/list-filter.js +2 -2
  412. package/dist/lib/secrets/push.d.ts +1 -1
  413. package/dist/lib/secrets/push.js +10 -12
  414. package/dist/lib/secrets/remote.d.ts +12 -10
  415. package/dist/lib/secrets/remote.js +21 -14
  416. package/dist/lib/secrets/vault.js +2 -2
  417. package/dist/lib/self-heal/checks/shadowing.js +1 -1
  418. package/dist/lib/self-heal/checks/shims.js +1 -1
  419. package/dist/lib/self-update.d.ts +39 -4
  420. package/dist/lib/self-update.js +78 -25
  421. package/dist/lib/serve/control.d.ts +1 -1
  422. package/dist/lib/serve/control.js +4 -4
  423. package/dist/lib/serve/data.d.ts +1 -1
  424. package/dist/lib/serve/data.js +1 -1
  425. package/dist/lib/serve/stream.js +1 -1
  426. package/dist/lib/service-manifest.d.ts +29 -0
  427. package/dist/lib/service-manifest.js +80 -0
  428. package/dist/lib/session/active.d.ts +59 -7
  429. package/dist/lib/session/active.js +158 -17
  430. package/dist/lib/session/bash-command.js +1 -1
  431. package/dist/lib/session/claude-accounts.d.ts +1 -1
  432. package/dist/lib/session/claude-accounts.js +1 -1
  433. package/dist/lib/session/db.d.ts +10 -2
  434. package/dist/lib/session/db.js +25 -6
  435. package/dist/lib/session/discover.d.ts +77 -0
  436. package/dist/lib/session/discover.js +130 -25
  437. package/dist/lib/session/fork.js +1 -1
  438. package/dist/lib/session/inject.d.ts +1 -1
  439. package/dist/lib/session/insights.d.ts +1 -1
  440. package/dist/lib/session/insights.js +1 -1
  441. package/dist/lib/session/live-metadata.d.ts +15 -0
  442. package/dist/lib/session/live-metadata.js +76 -0
  443. package/dist/lib/session/migrate-targets.d.ts +1 -1
  444. package/dist/lib/session/recovery.d.ts +1 -1
  445. package/dist/lib/session/recovery.js +2 -2
  446. package/dist/lib/session/remote-active.d.ts +10 -1
  447. package/dist/lib/session/remote-active.js +8 -3
  448. package/dist/lib/session/remote-bundle.d.ts +1 -1
  449. package/dist/lib/session/remote-bundle.js +2 -2
  450. package/dist/lib/session/remote-list.d.ts +15 -4
  451. package/dist/lib/session/remote-list.js +40 -3
  452. package/dist/lib/session/remote.d.ts +5 -5
  453. package/dist/lib/session/remote.js +13 -17
  454. package/dist/lib/session/resume-command.d.ts +3 -2
  455. package/dist/lib/session/resume-command.js +4 -3
  456. package/dist/lib/session/resume-owner.d.ts +3 -3
  457. package/dist/lib/session/resume-owner.js +3 -3
  458. package/dist/lib/session/session-cache.d.ts +12 -0
  459. package/dist/lib/session/session-cache.js +2 -0
  460. package/dist/lib/session/shell-programs.js +1 -1
  461. package/dist/lib/session/state.js +5 -5
  462. package/dist/lib/session/team-filter.d.ts +1 -1
  463. package/dist/lib/session/team-filter.js +1 -1
  464. package/dist/lib/session/types.d.ts +3 -3
  465. package/dist/lib/session/width.d.ts +2 -2
  466. package/dist/lib/session/width.js +2 -2
  467. package/dist/lib/share/delete.d.ts +21 -0
  468. package/dist/lib/share/delete.js +42 -0
  469. package/dist/lib/share/publish.d.ts +82 -0
  470. package/dist/lib/share/publish.js +170 -18
  471. package/dist/lib/share/worker-template.js +172 -9
  472. package/dist/lib/shims.js +35 -7
  473. package/dist/lib/smart-launch.d.ts +4 -4
  474. package/dist/lib/smart-launch.js +6 -4
  475. package/dist/lib/snapshot.d.ts +4 -4
  476. package/dist/lib/snapshot.js +2 -2
  477. package/dist/lib/ssh-exec.d.ts +1 -1
  478. package/dist/lib/ssh-exec.js +2 -2
  479. package/dist/lib/ssh-tunnel.d.ts +10 -10
  480. package/dist/lib/ssh-tunnel.js +12 -12
  481. package/dist/lib/staleness/checkers/hooks.d.ts +1 -1
  482. package/dist/lib/staleness/checkers/hooks.js +1 -1
  483. package/dist/lib/staleness/detectors/permissions.js +0 -23
  484. package/dist/lib/staleness/detectors/plugins.js +1 -1
  485. package/dist/lib/staleness/fingerprint.js +1 -1
  486. package/dist/lib/staleness/layers.d.ts +1 -1
  487. package/dist/lib/staleness/layers.js +1 -1
  488. package/dist/lib/staleness/writers/mcp.js +3 -1
  489. package/dist/lib/staleness/writers/plugins.js +1 -1
  490. package/dist/lib/staleness/writers/types.d.ts +8 -0
  491. package/dist/lib/startup/command-registry.d.ts +5 -147
  492. package/dist/lib/startup/command-registry.js +38 -303
  493. package/dist/lib/startup/dev-build.d.ts +0 -21
  494. package/dist/lib/startup/dev-build.js +29 -8
  495. package/dist/lib/state.d.ts +19 -1
  496. package/dist/lib/state.js +120 -51
  497. package/dist/lib/subagents.js +1 -1
  498. package/dist/lib/sync-status.js +1 -1
  499. package/dist/lib/sync-umbrella.d.ts +6 -1
  500. package/dist/lib/sync-umbrella.js +9 -4
  501. package/dist/lib/teams/agents.js +2 -2
  502. package/dist/lib/teams/registry.js +1 -1
  503. package/dist/lib/terminal/backends/vscodium-agent.js +1 -1
  504. package/dist/lib/terminal/engine.js +1 -1
  505. package/dist/lib/terminal/index.d.ts +4 -0
  506. package/dist/lib/terminal/index.js +3 -0
  507. package/dist/lib/terminal/inject.d.ts +2 -2
  508. package/dist/lib/terminal/inject.js +2 -2
  509. package/dist/lib/terminal/transport.js +1 -1
  510. package/dist/lib/tmux/index.d.ts +1 -1
  511. package/dist/lib/tmux/index.js +1 -1
  512. package/dist/lib/tmux/session.d.ts +21 -5
  513. package/dist/lib/tmux/session.js +76 -22
  514. package/dist/lib/triggers/handlers.d.ts +1 -1
  515. package/dist/lib/triggers/handlers.js +2 -2
  516. package/dist/lib/triggers/webhook.d.ts +36 -2
  517. package/dist/lib/triggers/webhook.js +97 -42
  518. package/dist/lib/types.d.ts +18 -6
  519. package/dist/lib/usage-fleet.d.ts +1 -1
  520. package/dist/lib/usage-fleet.js +1 -1
  521. package/dist/lib/usage-refresh.d.ts +1 -1
  522. package/dist/lib/usage-refresh.js +3 -3
  523. package/dist/lib/version-duplicates.js +2 -2
  524. package/dist/lib/view-types.d.ts +56 -0
  525. package/dist/lib/view-types.js +1 -0
  526. package/dist/lib/watchdog/rotate.d.ts +2 -2
  527. package/dist/lib/watchdog/rotate.js +3 -3
  528. package/dist/lib/watchdog/runner.d.ts +2 -3
  529. package/dist/lib/watchdog/runner.js +3 -4
  530. package/dist/lib/workflows.js +1 -1
  531. package/package.json +2 -1
  532. package/scripts/postinstall.js +2 -2
  533. package/dist/commands/bench.d.ts +0 -2
  534. package/dist/commands/bench.js +0 -101
  535. package/dist/commands/cp.d.ts +0 -84
  536. package/dist/commands/cp.js +0 -231
  537. package/dist/commands/login.d.ts +0 -2
  538. package/dist/lib/resources/commands.d.ts +0 -46
  539. package/dist/lib/resources/commands.js +0 -211
  540. package/dist/lib/resources/hooks.d.ts +0 -16
  541. package/dist/lib/resources/hooks.js +0 -153
  542. package/dist/lib/resources/mcp.d.ts +0 -34
  543. package/dist/lib/resources/mcp.js +0 -250
  544. package/dist/lib/resources/memory.d.ts +0 -15
  545. package/dist/lib/resources/memory.js +0 -46
  546. package/dist/lib/resources/permissions.d.ts +0 -13
  547. package/dist/lib/resources/permissions.js +0 -202
  548. package/dist/lib/resources/rules.d.ts +0 -46
  549. package/dist/lib/resources/rules.js +0 -179
  550. package/dist/lib/resources/skills.d.ts +0 -37
  551. package/dist/lib/resources/skills.js +0 -247
  552. package/dist/lib/resources/subagents.d.ts +0 -46
  553. package/dist/lib/resources/subagents.js +0 -202
  554. /package/dist/lib/{feed.d.ts → feed/feed.d.ts} +0 -0
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Shared `--host` option registrar. Every command that can run on a remote host
2
+ * Shared `--device` option registrar. Every command that can run on a remote device
3
3
  * declares the flag through here, so its spelling, help text, and companions
4
4
  * (`--remote-cwd`, `--no-tty`, `--any`) stay identical everywhere and show up in
5
5
  * each command's `--help`.
@@ -7,14 +7,13 @@
7
7
  * The flags are consumed centrally by `maybeRunOnHost` (passthrough.ts) *before*
8
8
  * commander parses, so for a real remote run the local action never sees them.
9
9
  * Registering them here still matters: it documents the flag and keeps the local
10
- * fall-through (e.g. `--host <this-machine>`) from erroring on an unknown option.
10
+ * fall-through (e.g. `--device <this-machine>`) from erroring on an unknown option.
11
11
  */
12
- /** Attach the standard `--host` flag family to a command and return it (chainable). */
12
+ /** Attach the standard `--device` flag family to a command and return it (chainable). */
13
13
  export function addHostOption(cmd) {
14
14
  return cmd
15
- .option('-H, --host <name>', 'Run this command on another machine over SSH instead of locally — a device, an ssh-config host, user@host, or `all` to fan out across every registered device. See `agents devices`.')
16
- .option('--device <name>', 'Alias of --host: run this command on a registered device (from `agents devices`), or `all` to run it across the whole fleet.')
17
- .option('--remote-cwd <dir>', "Working directory on the host for --host runs. Resolves on the REMOTE host — pass a '$HOME'-relative path (single-quoted so your local shell doesn't expand it) or a valid remote absolute path; a local ~ expands here and won't exist there (/Users/you vs /home/you). No effect on 'teams add'.")
18
- .option('--no-tty', 'Force non-interactive output for --host runs even from a terminal.')
19
- .option('--any', 'With --host <cap> (a capability tag), pick any matching host instead of erroring when several match.');
15
+ .option('-D, --device <name>', 'Run this command on another machine over SSH instead of locally — a registered device, user@host, or `all` to fan out across every registered device. See `agents devices` / `agents hosts`.')
16
+ .option('--remote-cwd <dir>', "Working directory on the device for --device runs. Resolves on the REMOTE device — pass a '$HOME'-relative path (single-quoted so your local shell doesn't expand it) or a valid remote absolute path; a local ~ expands here and won't exist there (/Users/you vs /home/you). No effect on 'teams add'.")
17
+ .option('--no-tty', 'Force non-interactive output for --device runs even from a terminal.')
18
+ .option('--any', 'With --device <cap> (a capability tag), pick any matching device instead of erroring when several match.');
20
19
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Generic `--host` passthrough — the single choke point that runs an allowlisted
2
+ * Generic `--device` passthrough — the single choke point that runs an allowlisted
3
3
  * `agents <command>` on a remote host instead of locally. Called once from
4
4
  * `index.ts` before commander parses; returns `true` when it handled the
5
5
  * invocation (the local command must then NOT run).
@@ -10,10 +10,10 @@
10
10
  * long-running case — `teams start --watch` — dispatches detached so the remote
11
11
  * supervisor outlives a dropped connection.
12
12
  *
13
- * Commands with their own richer `--host` handling (`run`/`sessions`/`feed`/
13
+ * Commands with their own richer `--device` handling (`run`/`sessions`/`feed`/
14
14
  * `computer`/`secrets`/`logs`/…) are listed in {@link OWN_HOST_COMMANDS} and
15
15
  * fall through to their local actions. Everything else either routes via this
16
- * table or, when `--host`/`--device` is present, exits with a clear
16
+ * table or, when `--device` is present, exits with a clear
17
17
  * "not supported" message — never commander's raw `unknown option`.
18
18
  */
19
19
  import { type Host } from './types.js';
@@ -28,7 +28,7 @@ interface RemoteSpec {
28
28
  }
29
29
  /**
30
30
  * First-class groups that run transparently on a remote via SSH when
31
- * `--host`/`--device` is present. Keep both canonical names and aliases
31
+ * `--device` is present. Keep both canonical names and aliases
32
32
  * (`repo`/`repos`, `exec`/`run`) so either argv form routes the same way.
33
33
  *
34
34
  * Prefer adding here over per-command SSH code — this is the single choke point.
@@ -43,7 +43,7 @@ interface RemoteSpec {
43
43
  */
44
44
  export declare const REMOTE_PASSTHROUGH: Record<string, RemoteSpec>;
45
45
  /**
46
- * Commands that register and interpret `--host`/`--device` themselves — must
46
+ * Commands that register and interpret `--device` themselves — must
47
47
  * fall through to local commander even when the flag is present. Do not add
48
48
  * these to {@link REMOTE_PASSTHROUGH}.
49
49
  */
@@ -71,34 +71,34 @@ export declare function markFleetRemote(cmd: string[], device: DeviceProfile): s
71
71
  /** Run `agents <command> …` across every registered device and render the roster. */
72
72
  export declare function runFleetPassthrough(command: string, allArgs: string[], spec: RemoteSpec, opts?: FleetPassthroughOptions): Promise<boolean>;
73
73
  /**
74
- * Route `agents <command> … --host <name>` to a remote if the command is
75
- * host-routable and a `--host` (or its `--device` alias) was given. Returns
76
- * `false` (run locally) when neither flag is present, the command owns its own
77
- * host handling, the target is this very machine, or placement flags need the
78
- * local action. Returns `true` after printing a clear error when the flag is
79
- * present on a command that is neither routable nor self-handling — so the user
80
- * never sees commander's raw `unknown option '--host'`.
74
+ * Route `agents <command> … --device <name>` to a remote if the command is
75
+ * device-routable and `--device` (or a fleet sentinel `--hosts`/`--devices`) was
76
+ * given. Returns `false` (run locally) when no routing flag is present, the
77
+ * command owns its own device handling, the target is this very machine, or
78
+ * placement flags need the local action. Returns `true` after printing a clear
79
+ * error when the flag is present on a command that is neither routable nor
80
+ * self-handling — so the user never sees commander's raw `unknown option`.
81
81
  *
82
82
  * @param command the resolved subcommand name (`process.argv`'s first non-flag).
83
83
  * @param allArgs `process.argv.slice(2)` — the command name followed by its args.
84
84
  */
85
85
  export declare function maybeRunOnHost(command: string, allArgs: string[], opts?: FleetPassthroughOptions): Promise<boolean>;
86
86
  /**
87
- * `--host` passthrough for a **standalone binary** whose command name is fixed by
87
+ * `--device` passthrough for a **standalone binary** whose command name is fixed by
88
88
  * the binary itself (the `browser`/`computer` bins, `dist/browser.js` etc.) rather
89
89
  * than being the first argv token.
90
90
  *
91
- * `agents browser … --host <box>` routes through {@link maybeRunOnHost} in
91
+ * `agents browser … --device <box>` routes through {@link maybeRunOnHost} in
92
92
  * index.ts, but the standalone `browser` binary never enters index.ts — so without
93
- * this it dropped `--host` entirely (commander errored with `unknown option
94
- * '--host'`). This wires the identical routing: it synthesizes the implicit command
93
+ * this it dropped `--device` entirely (commander errored with `unknown option
94
+ * '--device'`). This wires the identical routing: it synthesizes the implicit command
95
95
  * token (`browser`) at the front of the argv so the remote invocation builds as
96
96
  * `agents browser …`, delegates to {@link maybeRunOnHost}, and returns `true` when
97
97
  * it dispatched the run to a remote (the local program must then NOT parse).
98
98
  *
99
99
  * On a local / self-host fall-through it rewrites `process.argv` to the ORIGINAL
100
100
  * args minus the routing flags — never the synthetic command token — so the
101
- * standalone commander program parses cleanly and never sees an unknown `--host`.
101
+ * standalone commander program parses cleanly and never sees an unknown `--device`.
102
102
  * When no routing flag is present it leaves `process.argv` untouched (the common
103
103
  * case), so an unrelated flag like `--no-tty` is never stripped from a purely local
104
104
  * run.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Generic `--host` passthrough — the single choke point that runs an allowlisted
2
+ * Generic `--device` passthrough — the single choke point that runs an allowlisted
3
3
  * `agents <command>` on a remote host instead of locally. Called once from
4
4
  * `index.ts` before commander parses; returns `true` when it handled the
5
5
  * invocation (the local command must then NOT run).
@@ -10,10 +10,10 @@
10
10
  * long-running case — `teams start --watch` — dispatches detached so the remote
11
11
  * supervisor outlives a dropped connection.
12
12
  *
13
- * Commands with their own richer `--host` handling (`run`/`sessions`/`feed`/
13
+ * Commands with their own richer `--device` handling (`run`/`sessions`/`feed`/
14
14
  * `computer`/`secrets`/`logs`/…) are listed in {@link OWN_HOST_COMMANDS} and
15
15
  * fall through to their local actions. Everything else either routes via this
16
- * table or, when `--host`/`--device` is present, exits with a clear
16
+ * table or, when `--device` is present, exits with a clear
17
17
  * "not supported" message — never commander's raw `unknown option`.
18
18
  */
19
19
  import chalk from 'chalk';
@@ -38,7 +38,7 @@ import { isKnownTopLevelCommand } from '../startup/command-registry.js';
38
38
  export { flagValue, hasHostRoutingFlag } from './routing-flag.js';
39
39
  /**
40
40
  * First-class groups that run transparently on a remote via SSH when
41
- * `--host`/`--device` is present. Keep both canonical names and aliases
41
+ * `--device` is present. Keep both canonical names and aliases
42
42
  * (`repo`/`repos`, `exec`/`run`) so either argv form routes the same way.
43
43
  *
44
44
  * Prefer adding here over per-command SSH code — this is the single choke point.
@@ -60,11 +60,9 @@ export const REMOTE_PASSTHROUGH = {
60
60
  check: {},
61
61
  list: {},
62
62
  usage: {},
63
- cost: {},
64
63
  insights: {},
65
- output: {},
66
- budget: {},
67
64
  // config / resources
65
+ config: {},
68
66
  sync: { nonInteractive: ['--yes'] },
69
67
  pull: {},
70
68
  push: {},
@@ -82,7 +80,6 @@ export const REMOTE_PASSTHROUGH = {
82
80
  subagents: {},
83
81
  workflows: {},
84
82
  models: {},
85
- profiles: {},
86
83
  defaults: {},
87
84
  alias: {},
88
85
  // Installations are per-machine, so updating one on a peer means running it
@@ -109,14 +106,14 @@ export const REMOTE_PASSTHROUGH = {
109
106
  browser: {},
110
107
  };
111
108
  /**
112
- * Commands that register and interpret `--host`/`--device` themselves — must
109
+ * Commands that register and interpret `--device` themselves — must
113
110
  * fall through to local commander even when the flag is present. Do not add
114
111
  * these to {@link REMOTE_PASSTHROUGH}.
115
112
  */
116
113
  export const OWN_HOST_COMMANDS = new Set([
117
114
  'run',
118
115
  'exec', // deprecated alias of run
119
- 'harness', // `--host <agent>` names the host CLI to run under, not a remote device
116
+ 'harness', // `--host <agent>` names the host CLI to run under (not a device routing flag)
120
117
  'harnesses',
121
118
  'sessions',
122
119
  'feed',
@@ -149,7 +146,7 @@ function syntheticHost(target) {
149
146
  // Bare name: ssh resolves it from ~/.ssh/config, or connects to it as a hostname.
150
147
  return { name: target, provider: 'local', source: 'ssh-config' };
151
148
  }
152
- /** Resolve a `--host` value to a Host: enrolled name → capability tag → raw target. */
149
+ /** Resolve a `--device` value to a Host: enrolled name → capability tag → raw target. */
153
150
  async function resolveTargetHost(name, any) {
154
151
  const enrolled = await resolveHost(name);
155
152
  if (enrolled)
@@ -238,7 +235,7 @@ function formatCompactTokens(n) {
238
235
  return `${(n / 1e3).toFixed(1)}K`;
239
236
  return String(n);
240
237
  }
241
- /** One-line summary of a per-device `agents output --json` payload. */
238
+ /** One-line summary of a per-device `agents insights output --json` payload. */
242
239
  function summarizeOutputResult(json) {
243
240
  const p = json;
244
241
  const burn = p?.burn;
@@ -254,12 +251,38 @@ function summarizeOutputResult(json) {
254
251
  parts.push(`${commits} commits`);
255
252
  return parts.length ? parts.join(' · ') : 'ok';
256
253
  }
254
+ /**
255
+ * Summarize a `sync` payload, surfacing anything the peer REFUSED to write.
256
+ *
257
+ * The fan-out injects `--json`, so each peer returns the corrected `ok` and
258
+ * `declined` from RUSH-2700 — but the roster rendered a flat `ok` regardless,
259
+ * so `agents sync --device all` printed a green row for every box even when a
260
+ * harness's config was never written. That is the fleet-wide silent success
261
+ * this ticket exists to remove, one layer above where it was fixed.
262
+ *
263
+ * Covers both payload shapes: the umbrella carries a flat `declined`, the
264
+ * per-agent modes carry one per version.
265
+ */
266
+ function summarizeSyncResult(json) {
267
+ const p = json;
268
+ const flat = Array.isArray(p?.declined) ? p.declined : [];
269
+ const perVersion = Array.isArray(p?.versions)
270
+ ? p.versions.flatMap((v) => (Array.isArray(v?.declined) ? v.declined : []))
271
+ : [];
272
+ const declined = [...flat, ...perVersion];
273
+ if (declined.length === 0)
274
+ return 'ok';
275
+ return `${declined.length} not written`;
276
+ }
257
277
  /** Best-effort summary of any per-device JSON payload. */
258
278
  function summarizeResult(command, forwarded, json) {
259
279
  if (command === 'view')
260
280
  return summarizeViewResult(forwarded, json);
261
- if (command === 'output')
281
+ // #2621 nested `output` under `insights`; main added a sync declined tally.
282
+ if (command === 'insights' && forwarded[1] === 'output')
262
283
  return summarizeOutputResult(json);
284
+ if (command === 'sync')
285
+ return summarizeSyncResult(json);
263
286
  return 'ok';
264
287
  }
265
288
  const GROUP_ORDER = ['macOS', 'Linux', 'Windows', 'Other'];
@@ -382,39 +405,37 @@ export async function runFleetPassthrough(command, allArgs, spec, opts = {}) {
382
405
  return true;
383
406
  }
384
407
  /**
385
- * Route `agents <command> … --host <name>` to a remote if the command is
386
- * host-routable and a `--host` (or its `--device` alias) was given. Returns
387
- * `false` (run locally) when neither flag is present, the command owns its own
388
- * host handling, the target is this very machine, or placement flags need the
389
- * local action. Returns `true` after printing a clear error when the flag is
390
- * present on a command that is neither routable nor self-handling — so the user
391
- * never sees commander's raw `unknown option '--host'`.
408
+ * Route `agents <command> … --device <name>` to a remote if the command is
409
+ * device-routable and `--device` (or a fleet sentinel `--hosts`/`--devices`) was
410
+ * given. Returns `false` (run locally) when no routing flag is present, the
411
+ * command owns its own device handling, the target is this very machine, or
412
+ * placement flags need the local action. Returns `true` after printing a clear
413
+ * error when the flag is present on a command that is neither routable nor
414
+ * self-handling — so the user never sees commander's raw `unknown option`.
392
415
  *
393
416
  * @param command the resolved subcommand name (`process.argv`'s first non-flag).
394
417
  * @param allArgs `process.argv.slice(2)` — the command name followed by its args.
395
418
  */
396
419
  export async function maybeRunOnHost(command, allArgs, opts) {
397
- const hostFlag = flagValue(allArgs, 'host', 'H');
398
- const deviceFlag = flagValue(allArgs, 'device');
420
+ const deviceFlag = flagValue(allArgs, 'device', 'D');
399
421
  const hostsFlag = flagValue(allArgs, 'hosts');
400
422
  const devicesFlag = flagValue(allArgs, 'devices');
401
- let hostName = hostFlag ?? deviceFlag;
402
- const fleetAll = isFleetAllSentinel(hostFlag, deviceFlag, hostsFlag, devicesFlag);
423
+ let hostName = deviceFlag;
424
+ const fleetAll = isFleetAllSentinel(undefined, deviceFlag, hostsFlag, devicesFlag);
403
425
  // Proceed when any routing flag is present, including the plural fleet flags
404
426
  // that may carry the `all` sentinel.
405
427
  if (!hostName && !hostsFlag && !devicesFlag)
406
428
  return false;
407
- // Commands with their own richer --host semantics must reach local commander
408
- // BEFORE any single-target conflict gate. sessions/feed merge --host and
409
- // --device into a multi-host list; rejecting "conflicting" pairs would break
410
- // `agents sessions --host a --device b` / `agents feed --host a --device b`.
429
+ // Commands with their own richer --device semantics must reach local commander
430
+ // directly. sessions/feed handle multi-host lists themselves; fall through so
431
+ // those flags reach the local action.
411
432
  if (OWN_HOST_COMMANDS.has(command))
412
433
  return false;
413
434
  // Placement, not routing: `teams add`/`teams create` read `--device`/`--devices`
414
- // (and `--host`/`--hosts`) as WHERE to place a teammate / the team pool — the
435
+ // (and `--hosts`) as WHERE to place a teammate / the team pool — the
415
436
  // command itself always runs locally on the orchestrator. Bail before the
416
437
  // generic teams routing below so those flags reach the local action. Every
417
- // other teams subcommand (`status`/`logs`/`stop`/…) keeps `--host` routing.
438
+ // other teams subcommand (`status`/`logs`/`stop`/…) keeps `--device` routing.
418
439
  // Find the subcommand = the first non-flag token AFTER `teams` (robust to any
419
440
  // leading global flags), then bail for the add/create aliases.
420
441
  if (command === 'teams') {
@@ -428,7 +449,7 @@ export async function maybeRunOnHost(command, allArgs, opts) {
428
449
  // the `all` sentinel, which this module fans out generically. On `routines`,
429
450
  // a non-all `--devices` value is placement (which devices may run the routine).
430
451
  if (allArgs.includes('--hosts') && hostsFlag?.toLowerCase() !== 'all')
431
- return false;
452
+ return false; // legacy plural sentinel; prefer --devices
432
453
  if (allArgs.includes('--devices')) {
433
454
  if (devicesFlag === undefined)
434
455
  return false; // malformed, let commander error
@@ -438,8 +459,8 @@ export async function maybeRunOnHost(command, allArgs, opts) {
438
459
  }
439
460
  // A command that does not exist is an unknown-command error, not a routing
440
461
  // error. The router runs BEFORE commander parses, so without this gate a typo
441
- // (`agents session resume --host box`) was answered with "does not support
442
- // --host/--device" — a true statement about a command the user never typed,
462
+ // (`agents session resume --device box`) was answered with "does not support
463
+ // --device" — a true statement about a command the user never typed,
443
464
  // and the exact opposite of the truth for the `sessions` they meant, which
444
465
  // does support it. Fall through so commander reports `unknown command` (and
445
466
  // its did-you-mean). RUSH-2022.
@@ -449,25 +470,21 @@ export async function maybeRunOnHost(command, allArgs, opts) {
449
470
  if (!spec) {
450
471
  // Flag was accepted (no raw commander "unknown option") but this group has
451
472
  // no remote semantics — say so clearly instead of falling through.
452
- console.error(chalk.red(`\`agents ${command}\` does not support --host/--device (no remote interpretation).`) +
453
- chalk.gray(' Run without the flag, or use a host-routable group (repos, view, sync, teams, doctor, …).'));
454
- process.exitCode = 1;
455
- return true;
456
- }
457
- // Reject a conflicting --host/--device pair before either the fleet fan-out
458
- // or single-target path runs. Equal values (e.g. both `all`) are allowed.
459
- if (hostFlag && deviceFlag && hostFlag !== deviceFlag) {
460
- console.error(chalk.red('Conflicting --host/--device values — pass just one.'));
473
+ console.error(chalk.red(`\`agents ${command}\` does not support --device (no remote interpretation).`) +
474
+ chalk.gray(' Run without the flag, or use a device-routable group (repos, view, sync, teams, doctor, …).'));
461
475
  process.exitCode = 1;
462
476
  return true;
463
477
  }
478
+ // Reject duplicate --device flags before either the fleet fan-out
479
+ // or single-target path runs. (Conflict detection: only --device exists now.)
480
+ // No conflict gate needed — a single canonical flag cannot conflict with itself.
464
481
  // Generic fleet fan-out for the `all` sentinel — before single-host resolution
465
482
  // so `all` is never treated as a literal hostname.
466
483
  if (fleetAll) {
467
484
  return runFleetPassthrough(command, allArgs, spec, opts);
468
485
  }
469
486
  // After the bailouts and fleet fan-out above, the only remaining path is a
470
- // single-target --host/--device. Guard for the type checker: plural non-all
487
+ // single-target --device. Guard for the type checker: plural non-all
471
488
  // flags and bare flags were already handled.
472
489
  if (!hostName)
473
490
  return false;
@@ -489,10 +506,10 @@ export async function maybeRunOnHost(command, allArgs, opts) {
489
506
  }
490
507
  // Running against your own machine is just a local run — skip the SSH round-trip.
491
508
  // Match EVERY identity the box answers to (short id, loopback, tailscale
492
- // dnsName), not just machineId() — a `--host <self-dnsName>` used to slip past a
509
+ // dnsName), not just machineId() — a `--device <self-dnsName>` used to slip past a
493
510
  // short-hostname-only check and self-SSH (RUSH-2114). Strip the routing flags
494
511
  // from process.argv so the local command never sees an unregistered
495
- // `--host`/`--device` and dies with "unknown option".
512
+ // `--device` and dies with "unknown option".
496
513
  if (isSelfHost(hostName)) {
497
514
  const stripped = stripRoutingFlags(allArgs, STRIP_SPECS);
498
515
  process.argv = [process.argv[0], process.argv[1], ...stripped];
@@ -551,21 +568,21 @@ export async function maybeRunOnHost(command, allArgs, opts) {
551
568
  return true;
552
569
  }
553
570
  /**
554
- * `--host` passthrough for a **standalone binary** whose command name is fixed by
571
+ * `--device` passthrough for a **standalone binary** whose command name is fixed by
555
572
  * the binary itself (the `browser`/`computer` bins, `dist/browser.js` etc.) rather
556
573
  * than being the first argv token.
557
574
  *
558
- * `agents browser … --host <box>` routes through {@link maybeRunOnHost} in
575
+ * `agents browser … --device <box>` routes through {@link maybeRunOnHost} in
559
576
  * index.ts, but the standalone `browser` binary never enters index.ts — so without
560
- * this it dropped `--host` entirely (commander errored with `unknown option
561
- * '--host'`). This wires the identical routing: it synthesizes the implicit command
577
+ * this it dropped `--device` entirely (commander errored with `unknown option
578
+ * '--device'`). This wires the identical routing: it synthesizes the implicit command
562
579
  * token (`browser`) at the front of the argv so the remote invocation builds as
563
580
  * `agents browser …`, delegates to {@link maybeRunOnHost}, and returns `true` when
564
581
  * it dispatched the run to a remote (the local program must then NOT parse).
565
582
  *
566
583
  * On a local / self-host fall-through it rewrites `process.argv` to the ORIGINAL
567
584
  * args minus the routing flags — never the synthetic command token — so the
568
- * standalone commander program parses cleanly and never sees an unknown `--host`.
585
+ * standalone commander program parses cleanly and never sees an unknown `--device`.
569
586
  * When no routing flag is present it leaves `process.argv` untouched (the common
570
587
  * case), so an unrelated flag like `--no-tty` is never stripped from a purely local
571
588
  * run.
@@ -5,7 +5,7 @@
5
5
  * registry.json) into the host pool behind the same `HostProvider` seam as
6
6
  * `local` — the "tailscale provider" fast-follow named in docs/hosts.md. With
7
7
  * it, a machine registered once via `agents devices sync` becomes a resolvable
8
- * `--host`/`--device` dispatch target, participates in capability routing, and
8
+ * `--device`/`--device` dispatch target, participates in capability routing, and
9
9
  * is enumerable by target pickers — not just resolvable by exact name.
10
10
  *
11
11
  * Password-auth devices are listed (the pool stays honest about what exists)
@@ -5,7 +5,7 @@
5
5
  * registry.json) into the host pool behind the same `HostProvider` seam as
6
6
  * `local` — the "tailscale provider" fast-follow named in docs/hosts.md. With
7
7
  * it, a machine registered once via `agents devices sync` becomes a resolvable
8
- * `--host`/`--device` dispatch target, participates in capability routing, and
8
+ * `--device`/`--device` dispatch target, participates in capability routing, and
9
9
  * is enumerable by target pickers — not just resolvable by exact name.
10
10
  *
11
11
  * Password-auth devices are listed (the pool stays honest about what exists)
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Reconcile a local host-task record against the remote run's ground truth.
3
3
  *
4
- * A detached `--host` run outlives the local follower: it keeps running and
4
+ * A detached `--device` run outlives the local follower: it keeps running and
5
5
  * writes its exit code to `<id>.exit` on the host even if the laptop sleeps or
6
6
  * the SSH connection drops mid-follow. When that happens the local record is
7
7
  * left at `status:'running'` forever, because the only path that finalizes it
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Reconcile a local host-task record against the remote run's ground truth.
3
3
  *
4
- * A detached `--host` run outlives the local follower: it keeps running and
4
+ * A detached `--device` run outlives the local follower: it keeps running and
5
5
  * writes its exit code to `<id>.exit` on the host even if the laptop sleeps or
6
6
  * the SSH connection drops mid-follow. When that happens the local record is
7
7
  * left at `status:'running'` forever, because the only path that finalizes it
@@ -99,7 +99,7 @@ export declare function remoteExitNotice(sessionId: string, host: string): strin
99
99
  * {@link REMOTE_EXIT_255_REMAPPED} before the wrapper exits — see the file
100
100
  * header for why. Every other code (0, 1, …) passes through unchanged. This
101
101
  * carries no PATH bootstrap of its own — `ensureHostReady`/`readyProbe` already
102
- * gates every `--host` dispatch on `bash -lc 'agents --version'` succeeding
102
+ * gates every `--device` dispatch on `bash -lc 'agents --version'` succeeding
103
103
  * before a run is attempted at all, so the peer's login shell resolving `agents`
104
104
  * is an established precondition here too. Pure string-building, so it is
105
105
  * unit-tested without SSH (and, since the constructed script is ordinary POSIX,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Auto-reconnect for an interactive `agents run --device/--host` session whose
2
+ * Auto-reconnect for an interactive `agents run --device` session whose
3
3
  * SSH link dropped.
4
4
  *
5
5
  * A remote interactive agent runs in a DETACHED tmux session on the peer (see
@@ -174,7 +174,7 @@ export function remoteExitNotice(sessionId, host) {
174
174
  * {@link REMOTE_EXIT_255_REMAPPED} before the wrapper exits — see the file
175
175
  * header for why. Every other code (0, 1, …) passes through unchanged. This
176
176
  * carries no PATH bootstrap of its own — `ensureHostReady`/`readyProbe` already
177
- * gates every `--host` dispatch on `bash -lc 'agents --version'` succeeding
177
+ * gates every `--device` dispatch on `bash -lc 'agents --version'` succeeding
178
178
  * before a run is attempted at all, so the peer's login shell resolving `agents`
179
179
  * is an established precondition here too. Pure string-building, so it is
180
180
  * unit-tested without SSH (and, since the constructed script is ordinary POSIX,
@@ -58,7 +58,7 @@ export interface MatchHostOptions {
58
58
  resolveAuto?: () => DeviceAffinityPlan;
59
59
  }
60
60
  /**
61
- * The one place a `--host` / `--device` token becomes a resolved host. Reads the
61
+ * The one place a `--device` / `--device` token becomes a resolved host. Reads the
62
62
  * devices registry, the agents.yaml overlay, and ssh_config, and merges them
63
63
  * per-field (see {@link deviceHost}). One grammar for every caller: `name`,
64
64
  * `user@name`, a tailnet FQDN, an ssh_config alias, and a literal `user@host`
@@ -77,8 +77,8 @@ export declare function matchHost(name: string, opts?: MatchHostOptions): Promis
77
77
  * with it). Provider order still decides the base row (`local` first). */
78
78
  export declare function listAllHosts(): Promise<Host[]>;
79
79
  /**
80
- * Resolve a `--host`/`--device` token for DISPATCH — the shape every offload
81
- * caller consumes (`run --host`, the generic passthrough, teams placement, the
80
+ * Resolve a `--device`/`--device` token for DISPATCH — the shape every offload
81
+ * caller consumes (`run --device`, the generic passthrough, teams placement, the
82
82
  * cloud host provider, doctor, funnel, remote secrets). Grammar and merge come
83
83
  * from {@link matchHost}; on top, this layer applies the device-only dispatch
84
84
  * refusals so they hold even when an inline overlay shadows the device:
@@ -88,11 +88,11 @@ export declare function listAllHosts(): Promise<Host[]>;
88
88
  * - an addressless device has nothing to dial.
89
89
  *
90
90
  * A bare unknown name returns null so capability-tag routing (`resolveHostByCap`,
91
- * e.g. `--host gpu`) stays reachable, and an ad-hoc `user@host` still resolves.
91
+ * e.g. `--device gpu`) stays reachable, and an ad-hoc `user@host` still resolves.
92
92
  */
93
93
  export declare function resolveHost(name: string): Promise<Host | null>;
94
94
  /**
95
- * Resolve a host by capability tag (e.g. `--host gpu`). Returns the single
95
+ * Resolve a host by capability tag (e.g. `--device gpu`). Returns the single
96
96
  * matching host, or throws on 0 or >1 matches unless `any` is set (then first).
97
97
  */
98
98
  export declare function resolveHostByCap(cap: string, any?: boolean): Promise<Host>;
@@ -141,7 +141,7 @@ function literalHost(token, host, user) {
141
141
  };
142
142
  }
143
143
  /**
144
- * The one place a `--host` / `--device` token becomes a resolved host. Reads the
144
+ * The one place a `--device` / `--device` token becomes a resolved host. Reads the
145
145
  * devices registry, the agents.yaml overlay, and ssh_config, and merges them
146
146
  * per-field (see {@link deviceHost}). One grammar for every caller: `name`,
147
147
  * `user@name`, a tailnet FQDN, an ssh_config alias, and a literal `user@host`
@@ -236,8 +236,8 @@ export async function listAllHosts() {
236
236
  return [...byName.values()].sort((a, b) => a.name.localeCompare(b.name));
237
237
  }
238
238
  /**
239
- * Resolve a `--host`/`--device` token for DISPATCH — the shape every offload
240
- * caller consumes (`run --host`, the generic passthrough, teams placement, the
239
+ * Resolve a `--device`/`--device` token for DISPATCH — the shape every offload
240
+ * caller consumes (`run --device`, the generic passthrough, teams placement, the
241
241
  * cloud host provider, doctor, funnel, remote secrets). Grammar and merge come
242
242
  * from {@link matchHost}; on top, this layer applies the device-only dispatch
243
243
  * refusals so they hold even when an inline overlay shadows the device:
@@ -247,7 +247,7 @@ export async function listAllHosts() {
247
247
  * - an addressless device has nothing to dial.
248
248
  *
249
249
  * A bare unknown name returns null so capability-tag routing (`resolveHostByCap`,
250
- * e.g. `--host gpu`) stays reachable, and an ad-hoc `user@host` still resolves.
250
+ * e.g. `--device gpu`) stays reachable, and an ad-hoc `user@host` still resolves.
251
251
  */
252
252
  export async function resolveHost(name) {
253
253
  const host = await matchHost(name);
@@ -267,7 +267,7 @@ export async function resolveHost(name) {
267
267
  return host;
268
268
  }
269
269
  /**
270
- * Resolve a host by capability tag (e.g. `--host gpu`). Returns the single
270
+ * Resolve a host by capability tag (e.g. `--device gpu`). Returns the single
271
271
  * matching host, or throws on 0 or >1 matches unless `any` is set (then first).
272
272
  */
273
273
  export async function resolveHostByCap(cap, any = false) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Pure argv helpers for `--host` passthrough — build the remote `agents …`
2
+ * Pure argv helpers for `--device` passthrough — build the remote `agents …`
3
3
  * invocation and strip the local-only routing flags before forwarding.
4
4
  *
5
5
  * Kept free of any SSH/process side effects so the two-layer quoting and the
@@ -13,7 +13,7 @@ export interface StripSpec {
13
13
  long: string;
14
14
  /** Optional single-letter short form without the dash, e.g. `H`. */
15
15
  short?: string;
16
- /** True when the flag takes a following value token (`--host <name>`). */
16
+ /** True when the flag takes a following value token (`--device <name>`). */
17
17
  takesValue: boolean;
18
18
  }
19
19
  /**
@@ -26,14 +26,13 @@ export interface StripSpec {
26
26
  */
27
27
  export declare function stripRoutingFlags(args: string[], specs: StripSpec[]): string[];
28
28
  /**
29
- * The routing flags every `--host`-capable command shares. `--device` is a
30
- * first-class alias of `--host` (the device registry is the source of truth for
31
- * machine identity see `agents devices`), mirroring `agents run --device`.
32
- * Both are stripped before forwarding so the alias never leaks to the remote
33
- * binary (which would re-trigger routing).
29
+ * The routing flags every `--device`-capable command shares. Stripped before
30
+ * forwarding so the flag never leaks to the remote binary (which would
31
+ * re-trigger routing). `--host`/`-H` are kept for backward-compat strip only
32
+ * (they are no longer user-facing routing flags).
34
33
  */
35
34
  export declare const HOST_ROUTING_SPECS: StripSpec[];
36
- /** How one `agents run` option behaves when the run is offloaded with `--host`. */
35
+ /** How one `agents run` option behaves when the run is offloaded with `--device`. */
37
36
  export type RunOptionForwarding =
38
37
  /** Appended to the remote `agents run` argv — same behavior local or remote. */
39
38
  'forward'
@@ -42,7 +41,7 @@ export type RunOptionForwarding =
42
41
  /** Consumed by the dispatching side (routing, follow rendering, cwd portability). */
43
42
  | 'local-only';
44
43
  /**
45
- * The forwarding contract for `agents run … --host`: every option of the `run`
44
+ * The forwarding contract for `agents run … --device`: every option of the `run`
46
45
  * command is classified here, keyed by its commander attribute name. A
47
46
  * commander-introspection test (run-forwarding.test.ts) fails when a run
48
47
  * option is missing from this table, so a new option can never silently drop
@@ -161,7 +160,7 @@ export declare function windowsAgentsScript(cmd: WindowsAgentsCommand): string;
161
160
  /**
162
161
  * Build the `ssh <target> <cmd>` string for one `agents …` invocation on a
163
162
  * Windows remote: a `powershell -NoProfile -EncodedCommand <base64>` call. The
164
- * Windows counterpart of `bash -lc '<...>'`, shared by every `--host` site.
163
+ * Windows counterpart of `bash -lc '<...>'`, shared by every `--device` site.
165
164
  */
166
165
  export declare function buildWindowsAgentsCommand(cmd: WindowsAgentsCommand): string;
167
166
  /**
@@ -180,4 +179,5 @@ export declare function buildWindowsAgentsCommand(cmd: WindowsAgentsCommand): st
180
179
  */
181
180
  export declare function buildWindowsStdinImportCommand(bundle: string, opts?: {
182
181
  force?: boolean;
182
+ policyNever?: boolean;
183
183
  }): string;