@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
@@ -5,8 +5,8 @@ import { insertTask, updateTaskStatus, getTaskById, listTasks as listStoredTasks
5
5
  import { renderStream } from '../lib/cloud/stream.js';
6
6
  import { MAX_IMAGES_PER_DISPATCH } from '../lib/cloud/types.js';
7
7
  import { resolveCloudPrompt, executeCloudDispatch } from '../lib/cloud/dispatch.js';
8
- import { normalizeTriggerEvent, validateTrigger, writeJob, setJobEnabled, jobExists, GITHUB_TRIGGER_EVENTS } from '../lib/routines.js';
9
- import { emit } from '../lib/events.js';
8
+ import { normalizeTriggerEvent, validateTrigger, writeJob, setJobEnabled, jobExists, GITHUB_TRIGGER_EVENTS } from '../lib/scheduling/routines.js';
9
+ import { emit } from '../lib/feed/events.js';
10
10
  /** Return a chalk color function appropriate for the given task status. */
11
11
  export function statusColor(status) {
12
12
  switch (status) {
@@ -95,9 +95,9 @@ Examples:
95
95
  .option('--model <model>', 'Model override')
96
96
  .option('--env <id>', 'Codex Cloud environment ID')
97
97
  .option('--computer <name>', 'Factory/Droid computer target')
98
- .option('--host <name>', 'One of your machines as the target (a registered host, device, capability tag, or user@host). Implies --provider host.')
99
- .option('--remote-cwd <dir>', 'Working directory on the host (--provider host only)')
100
- .option('--any', 'With --host <cap> (a capability tag), pick any matching host instead of erroring when several match')
98
+ .option('--device <name>', 'One of your machines as the target (a registered device, capability tag, or user@host). Implies --provider host.')
99
+ .option('--remote-cwd <dir>', 'Working directory on the device (--provider host only)')
100
+ .option('--any', 'With --device <cap> (a capability tag), pick any matching device instead of erroring when several match')
101
101
  .option('--autonomy <level>', 'Factory/Droid autonomy: low, medium, high (default high)')
102
102
  .option('--mode <mode>', 'Execution mode (e.g., plan, edit, full)')
103
103
  .option('--image <path>', `Attach an image (.png/.jpg/.webp) for vision dispatch. Repeatable, up to ${MAX_IMAGES_PER_DISPATCH} (Rush Cloud only).`, (value, previous) => {
@@ -112,7 +112,6 @@ Examples:
112
112
  })
113
113
  .option('-b, --balanced', 'Shortcut for --strategy balanced. Route the factory run across all healthy accounts.')
114
114
  .option('--strategy <strategy>', 'Account selection strategy for the factory: balanced. Sends all healthy accounts so the factory pod rotates between them on rate-limit.')
115
- .option('--upload-account-tokens', 'Upload Claude OAuth credentials to Rush Cloud on first dispatch (consent recorded for future runs).')
116
115
  .option('--json', 'Structured JSON output')
117
116
  .option('--no-follow', 'Dispatch and exit without streaming output')
118
117
  .addHelpText('after', `
@@ -127,9 +126,9 @@ Examples:
127
126
  # Codex Cloud
128
127
  agents cloud run "add auth tests" --provider codex --env env_abc123
129
128
 
130
- # One of your own machines (agents devices), over SSH
131
- agents cloud run "run the nightly benchmark" --host gpu-box --agent claude
132
- agents cloud run "rebuild the index" --host gpu --any --remote-cwd ~/proj
129
+ # One of your own machines (agents hosts / agents devices), over SSH
130
+ agents cloud run "run the nightly benchmark" --device gpu-box --agent claude
131
+ agents cloud run "rebuild the index" --device gpu --any --remote-cwd ~/proj
133
132
 
134
133
  # Default provider (set in ~/.agents/agents.yaml)
135
134
  agents cloud run "refactor auth module" --repo user/repo
@@ -143,13 +142,13 @@ Examples:
143
142
  json,
144
143
  hint: 'agents cloud run "<task>" --repo <owner/repo>',
145
144
  });
146
- // --host names one of YOUR machines as the target — that only means
145
+ // --device names one of YOUR machines as the target — that only means
147
146
  // something to the host provider, so it implies --provider host rather
148
147
  // than silently riding along to a cloud backend that would ignore it.
149
- if (options.host && options.provider && options.provider !== 'host') {
150
- die(`--host targets your own machines (--provider host), not ${options.provider}. Drop --host, or use --provider host.`, 1, { json });
148
+ if (options.device && options.provider && options.provider !== 'host') {
149
+ die(`--device targets your own machines (--provider host), not ${options.provider}. Drop --device, or use --provider host.`, 1, { json });
151
150
  }
152
- const explicitProvider = options.provider ?? (options.host ? 'host' : undefined);
151
+ const explicitProvider = options.provider ?? (options.device ? 'host' : undefined);
153
152
  // Agent-aware: with no --provider, the agent routes to its native cloud
154
153
  // (claude→rush, codex→codex, droid→factory, antigravity→antigravity).
155
154
  const provider = resolveProvider(explicitProvider, options.agent);
@@ -176,8 +175,8 @@ Examples:
176
175
  dispatchOptions.providerOptions.env = options.env;
177
176
  if (options.computer)
178
177
  dispatchOptions.providerOptions.computer = options.computer;
179
- if (options.host)
180
- dispatchOptions.providerOptions.host = options.host;
178
+ if (options.device)
179
+ dispatchOptions.providerOptions.host = options.device;
181
180
  if (options.remoteCwd)
182
181
  dispatchOptions.providerOptions.remoteCwd = options.remoteCwd;
183
182
  if (options.any)
@@ -189,8 +188,6 @@ Examples:
189
188
  if (options.balanced || options.strategy === 'balanced') {
190
189
  dispatchOptions.providerOptions.strategy = 'balanced';
191
190
  }
192
- if (options.uploadAccountTokens)
193
- dispatchOptions.providerOptions.uploadAccountTokens = true;
194
191
  // --on <event>: register this run as an event trigger instead of
195
192
  // dispatching now. We parse + validate the event, attach it to
196
193
  // dispatchOptions.trigger, and persist a trigger-bound routine so the
@@ -231,10 +228,10 @@ Examples:
231
228
  };
232
229
  if (repoValues[0])
233
230
  routine.repo = repoValues[0];
234
- // --host controls where the enabled local receiver dispatches the run.
231
+ // --device controls where the enabled local receiver dispatches the run.
235
232
  // Device activation remains in this receiver's device manifest.
236
- if (options.host) {
237
- routine.host = options.host;
233
+ if (options.device) {
234
+ routine.host = options.device;
238
235
  if (options.remoteCwd)
239
236
  routine.remoteCwd = options.remoteCwd;
240
237
  }
@@ -10,7 +10,7 @@ import { cloneRepo } from '../lib/git.js';
10
10
  import { discoverCommands, resolveCommandSource, installCommandCentrally, listCentralCommands, listInstalledCommandsWithScope, getCommandInfo, diffVersionCommands, iterCommandsCapableVersions, removeCommandFromVersion, } from '../lib/commands.js';
11
11
  import { getCommandsDir } from '../lib/state.js';
12
12
  import { showResourceList, buildTargetsSection, } from './resource-view.js';
13
- import { listInstalledVersions, getGlobalDefault, syncResourcesToVersion, promptAgentVersionSelection, getVersionHomePath, resolveInstalledAgentTargets, } from '../lib/versions.js';
13
+ import { listInstalledVersions, getGlobalDefault, syncResourcesToVersion, promptAgentVersionSelection, getVersionHomePath, resolveInstalledAgentTargets, } from '../lib/installations/versions.js';
14
14
  import { recordVersionResources } from '../lib/state.js';
15
15
  import { isPromptCancelled, isInteractiveTerminal, parseCommaSeparatedList, printWithPager, requireInteractiveSelection, promptRemovalTargets, resolveAgentTargetsAutoInstalling, resolveListFilterOrExit, } from './utils.js';
16
16
  /** Register the `agents commands` command tree (list, add, remove, sync, prune, view). */
@@ -1,21 +1,6 @@
1
1
  import { Command } from 'commander';
2
2
  import { type ComputerClient, type RPCResponse } from '../lib/computer-rpc.js';
3
- export interface AppInfo {
4
- pid: number;
5
- name: string;
6
- bundle_id: string;
7
- active: boolean;
8
- }
9
- export declare function pickTarget(list: AppInfo[], opts: {
10
- pid?: number;
11
- bundle?: string;
12
- }): {
13
- ok: true;
14
- app: AppInfo;
15
- } | {
16
- ok: false;
17
- error: string;
18
- };
3
+ export { emitComputerAction, pickTarget, resolveTargetPidDecision, type AppInfo } from '../lib/computer/actions.js';
19
4
  export declare function parseXY(s: string, flag: string): {
20
5
  x: number;
21
6
  y: number;
@@ -55,21 +40,6 @@ export declare function buildWaitParams(opts: {
55
40
  };
56
41
  export declare function withClient<T>(fn: (client: ComputerClient) => Promise<T>): Promise<T>;
57
42
  export declare function unwrap(r: RPCResponse): Record<string, unknown>;
58
- export declare function resolveTargetPidDecision(client: ComputerClient, opts: {
59
- pid?: number;
60
- bundle?: string;
61
- }, gate?: {
62
- verb?: string;
63
- env?: NodeJS.ProcessEnv;
64
- nowMs?: number;
65
- }): Promise<{
66
- ok: true;
67
- pid: number;
68
- source: 'pid' | 'list_apps' | 'session_admission';
69
- } | {
70
- ok: false;
71
- error: string;
72
- }>;
73
43
  export declare function focusStealNotes(opts: {
74
44
  id?: string;
75
45
  x?: number;
@@ -82,8 +52,4 @@ export declare function shouldRaise(opts: {
82
52
  }): boolean;
83
53
  export declare function appPathIsElectron(appPath: string | null, exists?: (p: string) => boolean): boolean;
84
54
  export declare function electronWebviewTip(appLabel: string): string;
85
- export declare function emitComputerAction(verb: string, targetPid: number | undefined, opts: {
86
- bundle?: string;
87
- host?: string;
88
- }, extra?: Record<string, unknown>): void;
89
55
  export declare function registerActionCommands(program: Command): void;
@@ -9,121 +9,13 @@
9
9
  import { execFileSync } from 'child_process';
10
10
  import * as fs from 'fs';
11
11
  import * as path from 'path';
12
- import { randomUUID } from 'node:crypto';
13
- import { openComputerClient, describeTransport, resolvePolicyPath, } from '../lib/computer-rpc.js';
14
- import { COMPUTER_INPUT_GATED_VERBS, formatComputerPermissionGrantHint, } from '../lib/permissions.js';
15
- import { emit as emitEvent } from '../lib/events.js';
16
- import { recordComputerSession } from '../lib/session/db.js';
17
- import { resolveActor } from '../lib/actor.js';
18
- function isComputerInputVerb(verb) {
19
- return typeof verb === 'string' && COMPUTER_INPUT_GATED_VERBS.includes(verb);
20
- }
21
- function computerSessionId(env = process.env) {
22
- return env.CODEX_THREAD_ID
23
- || env.CLAUDE_CODE_SESSION_ID
24
- || env.CLAUDE_SESSION_ID
25
- || env.AGENTS_SESSION_ID
26
- || env.AGENTS_RUN_ID
27
- || null;
28
- }
29
- function admissionCachePath(env = process.env) {
30
- if (env.AGENTS_COMPUTER_ADMISSION_CACHE)
31
- return env.AGENTS_COMPUTER_ADMISSION_CACHE;
32
- return path.join(path.dirname(resolvePolicyPath()), 'computer-target-admissions.json');
33
- }
34
- function targetSelector(opts) {
35
- return opts.bundle ? `bundle:${opts.bundle}` : 'frontmost';
36
- }
37
- function readAdmissionCache(filePath) {
38
- try {
39
- const parsed = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
40
- return Array.isArray(parsed.admissions) ? parsed.admissions.filter(isAdmission) : [];
41
- }
42
- catch {
43
- return [];
44
- }
45
- }
46
- function isAdmission(v) {
47
- if (!v || typeof v !== 'object')
48
- return false;
49
- const r = v;
50
- return r.sessionId !== undefined
51
- && typeof r.sessionId === 'string'
52
- && typeof r.selector === 'string'
53
- && r.gateClass === 'input'
54
- && typeof r.pid === 'number'
55
- && typeof r.bundle_id === 'string'
56
- && typeof r.name === 'string'
57
- && typeof r.admittedAtMs === 'number'
58
- && isComputerInputVerb(r.admittedByVerb);
59
- }
60
- function rememberAdmission(app, opts) {
61
- const sessionId = computerSessionId(opts.env);
62
- if (!sessionId)
63
- return;
64
- const filePath = admissionCachePath(opts.env);
65
- const admissions = readAdmissionCache(filePath);
66
- const next = {
67
- sessionId,
68
- selector: opts.selector,
69
- gateClass: 'input',
70
- pid: app.pid,
71
- bundle_id: app.bundle_id,
72
- name: app.name,
73
- admittedAtMs: opts.nowMs ?? Date.now(),
74
- admittedByVerb: opts.verb,
75
- };
76
- const filtered = admissions.filter((a) => !(a.sessionId === sessionId && a.selector === opts.selector && a.gateClass === 'input'));
77
- filtered.push(next);
78
- try {
79
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
80
- fs.writeFileSync(filePath, JSON.stringify({ admissions: filtered }, null, 2), { mode: 0o600 });
81
- }
82
- catch {
83
- // Cache persistence is best-effort; the daemon remains the final gate.
84
- }
85
- }
86
- function findAdmission(opts) {
87
- const sessionId = computerSessionId(opts.env);
88
- if (!sessionId)
89
- return null;
90
- const admissions = readAdmissionCache(admissionCachePath(opts.env));
91
- const matches = admissions
92
- .filter((a) => a.sessionId === sessionId && a.selector === opts.selector && a.gateClass === 'input')
93
- .sort((a, b) => b.admittedAtMs - a.admittedAtMs);
94
- return matches[0] ?? null;
95
- }
12
+ import { openComputerClient, describeTransport, } from '../lib/computer-rpc.js';
13
+ import { emitComputerAction, resolveTargetPidDecision } from '../lib/computer/actions.js';
14
+ export { emitComputerAction, pickTarget, resolveTargetPidDecision } from '../lib/computer/actions.js';
96
15
  // Pure target picker — exercised by unit tests. Precedence: explicit --pid,
97
16
  // then --bundle, then the frontmost active allow-listed app (the same default
98
17
  // `screenshot` uses). Kept side-effect-free so the resolution rules are
99
18
  // testable without a live daemon.
100
- export function pickTarget(list, opts) {
101
- if (opts.pid != null) {
102
- const app = list.find((a) => a.pid === opts.pid);
103
- // A --pid the daemon doesn't list (not allow-listed / not running) is
104
- // still passed through: the daemon is the authority and will return a
105
- // precise permission_denied / app_not_found. We don't second-guess it.
106
- return { ok: true, app: app ?? { pid: opts.pid, name: '', bundle_id: '', active: false } };
107
- }
108
- if (opts.bundle) {
109
- const app = list.find((a) => a.bundle_id === opts.bundle);
110
- if (!app) {
111
- return {
112
- ok: false,
113
- error: `bundle not in allow list (or not running): ${opts.bundle}\n${formatComputerPermissionGrantHint(opts.bundle)}`,
114
- };
115
- }
116
- return { ok: true, app };
117
- }
118
- const active = list.find((a) => a.active);
119
- if (!active) {
120
- return {
121
- ok: false,
122
- error: `no active app found in allow list\n${formatComputerPermissionGrantHint()}`,
123
- };
124
- }
125
- return { ok: true, app: active };
126
- }
127
19
  // Parse an "x,y" coordinate pair. Pure + tested.
128
20
  export function parseXY(s, flag) {
129
21
  const parts = s.split(',').map((v) => v.trim());
@@ -227,28 +119,6 @@ export function unwrap(r) {
227
119
  }
228
120
  return r.result ?? {};
229
121
  }
230
- export async function resolveTargetPidDecision(client, opts, gate) {
231
- // A directly-supplied pid skips the list_apps roundtrip — the daemon gates.
232
- if (opts.pid != null)
233
- return { ok: true, pid: opts.pid, source: 'pid' };
234
- const apps = unwrap(await client.call('list_apps'));
235
- const list = apps.apps || [];
236
- const picked = pickTarget(list, opts);
237
- const verb = gate?.verb;
238
- const selector = targetSelector(opts);
239
- if (picked.ok && isComputerInputVerb(verb)) {
240
- rememberAdmission(picked.app, { selector, verb, env: gate?.env, nowMs: gate?.nowMs });
241
- }
242
- if (!picked.ok) {
243
- if (isComputerInputVerb(verb)) {
244
- const admitted = findAdmission({ selector, env: gate?.env });
245
- if (admitted)
246
- return { ok: true, pid: admitted.pid, source: 'session_admission' };
247
- }
248
- return { ok: false, error: picked.error };
249
- }
250
- return { ok: true, pid: picked.app.pid, source: 'list_apps' };
251
- }
252
122
  // Resolve the target pid via list_apps + pickTarget, printing a precise error
253
123
  // and exiting when no target matches.
254
124
  async function resolveTargetPid(client, opts, gate) {
@@ -339,9 +209,9 @@ export function electronWebviewTip(appLabel) {
339
209
  }
340
210
  // Print the CDP steer when the target is a known Electron app. Keyed off --bundle
341
211
  // (the recommended way to target); a frontmost-resolved target without --bundle is
342
- // left alone to avoid a second RPC on the hot path. Skipped for remote --host.
212
+ // left alone to avoid a second RPC on the hot path. Skipped for remote --device.
343
213
  function warnIfElectronWebview(opts) {
344
- if (opts.host)
214
+ if (opts.device)
345
215
  return;
346
216
  if (opts.bundle && isElectronApp(opts.bundle))
347
217
  console.error(electronWebviewTip(opts.bundle));
@@ -357,58 +227,20 @@ function emit(result, json, human) {
357
227
  // Record one `computer.action` per verb invocation, one call site per command
358
228
  // below. Session/agent/machine identity is stamped for free by emitEvent's
359
229
  // provenance floor (events.ts resolveProvenance) — this only carries the
360
- // action-specific facts: which verb, against which target pid/bundle/host.
230
+ // action-specific facts: which verb, against which target pid/bundle/device.
361
231
  // NOTE: the field is `targetPid`, never `pid` — `pid` is a reserved envelope
362
232
  // key (the emitting process's OWN pid, events.ts RESERVED_META_KEYS) that
363
233
  // sanitizePayload() silently strips from the payload before it can collide.
364
- const COMPUTER_INVOCATION_ID = randomUUID();
365
- export function emitComputerAction(verb, targetPid, opts, extra = {}) {
366
- emitEvent('computer.action', {
367
- command: verb,
368
- invocationId: COMPUTER_INVOCATION_ID,
369
- targetPid,
370
- bundle: opts.bundle,
371
- host: opts.host,
372
- ...extra,
373
- });
374
- // Mirror the invocation's IDENTITY into the durable store (RUSH-2549). The
375
- // event above stays the audit record, but the event ledger is bounded and
376
- // prunes at 7 days / 50 MiB (events.ts), so a run's history used to vanish on
377
- // day 8. This row is metadata only -- no screenshots, no typed text -- and
378
- // `action_count` accumulates across the many calls one invocation makes.
379
- //
380
- // Identity is read from this process's own env, exactly as stampProvenance()
381
- // does for the event: `agents computer` runs IN the caller's process, so there
382
- // is no shared daemon to mis-attribute it to (the browser problem).
383
- //
384
- // Guarded for the same reason `emit` above guards itself ("logging should
385
- // never break the CLI", events.ts): this is a RECORD of the action, not the
386
- // action. An unwritable or locked session DB must not stop `agents computer
387
- // click` from clicking. The action still happened and its event still landed;
388
- // only this row is missed, and the next call re-records the identity.
389
- try {
390
- recordComputerSession({
391
- invocationId: COMPUTER_INVOCATION_ID,
392
- sessionId: process.env.AGENT_SESSION_ID || process.env.AGENTS_SESSION_ID,
393
- launchId: process.env.AGENT_LAUNCH_ID,
394
- actor: resolveActor().id,
395
- actionCount: 1,
396
- taskPreview: typeof extra.task === 'string' ? extra.task : undefined,
397
- });
398
- }
399
- catch {
400
- // Recording is best-effort; the action and its event are already done.
401
- }
402
- }
403
- // Add the shared --pid/--bundle/--host target options to a verb. `--host` routes
404
- // the verb at a remote Windows device: the `computer` preAction hook hydrates
405
- // COMPUTER_HELPER_TCP from the tunnel `start --host` recorded, so withClient's
406
- // openComputerClient() transparently selects the TCP transport.
234
+ // emitComputerAction lives in lib/computer/actions.ts (re-exported above).
235
+ // Add the shared --pid/--bundle/--device target options to a verb. `--device`
236
+ // routes the verb at a remote Windows device: the `computer` preAction hook
237
+ // hydrates COMPUTER_HELPER_TCP from the tunnel `start --device` recorded, so
238
+ // withClient's openComputerClient() transparently selects the TCP transport.
407
239
  function addTargetOpts(cmd) {
408
240
  return cmd
409
241
  .option('--bundle <id>', 'Bundle id of the target app (default: frontmost allow-listed app)')
410
242
  .option('--pid <n>', 'Target pid directly (overrides --bundle)', (v) => parseInt(v, 10))
411
- .option('--host <device>', 'Drive a remote Windows device (requires `agents computer start --host <device>` first)');
243
+ .option('--device <name>', 'Drive a remote Windows device (requires `agents computer start --device <name>` first)');
412
244
  }
413
245
  // Add the shared --id/--x/--y element-or-coords options to a verb.
414
246
  function addElementOrCoordOpts(cmd) {
@@ -739,7 +571,7 @@ export function registerActionCommands(program) {
739
571
  .option('--bundle <id>', 'Bundle id (e.g. com.apple.TextEdit)')
740
572
  .option('--path <p>', 'Path to the .app bundle')
741
573
  .option('--name <s>', 'App name (resolved via /Applications and LaunchServices)')
742
- .option('--host <device>', 'Drive a remote Windows device (requires `agents computer start --host <device>` first)')
574
+ .option('--device <name>', 'Drive a remote Windows device (requires `agents computer start --device <name>` first)')
743
575
  .option('--json', 'Emit JSON')
744
576
  .action(async (opts) => {
745
577
  if (!opts.bundle && !opts.path && !opts.name) {
@@ -4,13 +4,13 @@ import { resolveHelperExec, resolveSocketPath } from '../lib/computer-rpc.js';
4
4
  * Pure platform gate. The computer subsystem is macOS-only for LOCAL driving
5
5
  * (Accessibility / launchctl). It is NOT blocked off macOS when a remote daemon
6
6
  * is reachable — either a configured TCP endpoint (COMPUTER_HELPER_TCP, e.g. a
7
- * Windows daemon over a tunnel) or a `--host <device>` remote invocation. Kept
7
+ * Windows daemon over a tunnel) or a `--device <name>` remote invocation. Kept
8
8
  * pure so the gating rule is unit-testable without a live command tree.
9
9
  */
10
10
  export declare function shouldBlockOffPlatform(opts: {
11
11
  platform: NodeJS.Platform;
12
12
  tcpConfigured: boolean;
13
- host?: string;
13
+ device?: string;
14
14
  }): boolean;
15
15
  /**
16
16
  * Sniff the image format from the leading magic bytes: PNG starts with the
@@ -52,8 +52,16 @@ export declare function buildRestartTaskScript(taskName: string, exeName: string
52
52
  export declare function emitComputerRunTaskMarker(opts: {
53
53
  task: string;
54
54
  bundle?: string;
55
- host?: string;
55
+ device?: string;
56
56
  }): void;
57
+ /**
58
+ * launchd Label for this process's helper — the production identifier for a real
59
+ * invocation, namespaced under a redirected HOME (RUSH-2639). launchd routes
60
+ * bootout/bootstrap/kickstart/print by identifier alone, never by the plist's
61
+ * path, so without this a process running under a sandbox HOME tears down the
62
+ * operator's live helper.
63
+ */
64
+ export declare function helperLabel(): string;
57
65
  /**
58
66
  * Install the macOS helper locally: resolve (or download + verify) the signed,
59
67
  * notarized .app, copy it to /Applications, verify the destination signature,
@@ -80,5 +88,22 @@ export declare function activateComputerHelperMacLocal(): Promise<{
80
88
  * Returns false (never throws) if the socket is down or the RPC errors — used to
81
89
  * poll while the user grants permissions in System Settings. */
82
90
  export declare function probeComputerTrust(): Promise<boolean>;
91
+ /**
92
+ * The helper's launchd plist.
93
+ *
94
+ * The `EnvironmentVariables` dict carries HOME (RUSH-2639, see
95
+ * `lib/service-manifest.ts`): launchd applies this dict on top of the LOGIN
96
+ * SESSION's environment, never the environment of whoever called `launchctl
97
+ * bootstrap`, so a manifest that omits HOME hands the helper the account home no
98
+ * matter which home the caller resolved. That is a silent escape from any
99
+ * redirected HOME — the hermetic test harness's, and an agent's isolated version
100
+ * home alike.
101
+ */
102
+ export declare function renderLaunchAgentPlist(opts: {
103
+ label: string;
104
+ exec: string;
105
+ socketPath: string;
106
+ logPath: string;
107
+ }): string;
83
108
  export { resolveHelperExec as resolveHelperPath };
84
109
  export { resolveSocketPath };