@phnx-labs/agents-cli 1.22.38 → 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 +302 -0
  2. package/README.md +111 -70
  3. package/dist/bin/agents +0 -0
  4. package/dist/bootstrap.js +46 -27
  5. package/dist/browser.js +2 -2
  6. package/dist/cli/command-registry.d.ts +135 -0
  7. package/dist/cli/command-registry.js +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 +47 -4
  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 +161 -216
  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 +318 -48
  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 +12 -3
  191. package/dist/lib/config-keys.js +29 -6
  192. package/dist/lib/config-machine-keys.d.ts +4 -2
  193. package/dist/lib/config-machine-keys.js +6 -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 +116 -72
  206. package/dist/lib/device-config.js +366 -132
  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 +61 -0
  218. package/dist/lib/devices/pool.js +83 -0
  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 +8 -5
  239. package/dist/lib/exec.js +19 -13
  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} +49 -1
  304. package/dist/lib/{migrate.js → installations/migrate.js} +265 -38
  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 +36 -6
  474. package/dist/lib/smart-launch.js +65 -8
  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
@@ -10,9 +10,9 @@
10
10
  * This module picks the delivery mechanism from (open feed block × session
11
11
  * liveness × runtime rail). Pure — unit-testable without a live PTY.
12
12
  */
13
- import type { OpenBlock, BlockOption } from './feed.js';
13
+ import type { OpenBlock, BlockOption } from './feed/feed.js';
14
14
  import type { ActiveSession } from './session/active.js';
15
- import type { InjectTarget } from './terminal/inject.js';
15
+ import type { InjectTarget } from './terminal/index.js';
16
16
  export type AnswerRouteKind = 'mailbox' | 'pty' | 'tmux' | 'iterm' | 'resume' | 'refuse';
17
17
  export interface AnswerRoute {
18
18
  kind: AnswerRouteKind;
@@ -13,7 +13,7 @@
13
13
  * Rules-based on stable high-volume shapes. Pure classify/match; suppression has
14
14
  * side effects via the feed store when applied.
15
15
  */
16
- import type { OpenBlock } from './feed.js';
16
+ import type { OpenBlock } from './feed/feed.js';
17
17
  /** Taxonomy for a published ask. Exactly one class per block. */
18
18
  export type AskClass = 'decision' | 'approval' | 'clarification' | 'stall' | 'fyi';
19
19
  export interface Classification {
@@ -1,4 +1,4 @@
1
- import { recordAnswer, recordMessageReceipt, removeBlock } from './feed.js';
1
+ import { recordAnswer, recordMessageReceipt, removeBlock } from './feed/feed.js';
2
2
  import { enqueue, mailboxDir } from './mailbox.js';
3
3
  /** Scan text used for classification. */
4
4
  export function askScanText(block) {
@@ -14,7 +14,7 @@ import { spawnSync } from 'child_process';
14
14
  import { sha256 } from '../staleness/fingerprint.js';
15
15
  import { getHistoryDir } from '../state.js';
16
16
  import { ensureLockTarget, withFileLock } from '../fs-atomic.js';
17
- import { emit } from '../events.js';
17
+ import { emit } from '../feed/events.js';
18
18
  /** First record's `prevHash` — a fixed anchor so the chain has a root. */
19
19
  export const GENESIS_HASH = 'GENESIS';
20
20
  /**
@@ -1,6 +1,6 @@
1
1
  import { type AccountInfo } from './agents.js';
2
2
  import type { AgentId } from './types.js';
3
- import { type ProviderProbe } from './usage.js';
3
+ import { type ProviderProbe } from './accounting/usage.js';
4
4
  /**
5
5
  * - `live` — completed an authenticated request (200).
6
6
  * - `revoked` — the server rejected the token (401/403), except Claude
@@ -20,8 +20,8 @@ import * as fs from 'fs';
20
20
  import * as path from 'path';
21
21
  import { ALL_AGENT_IDS, getAccountInfo } from './agents.js';
22
22
  import { getCacheDir } from './state.js';
23
- import { probeClaudeStatus, probeDroidStatus, probeKimiStatus, USAGE_HEADLESS_SCOPE_MARKER, } from './usage.js';
24
- import { getVersionHomePath, listInstalledVersions } from './versions.js';
23
+ import { probeClaudeStatus, probeDroidStatus, probeKimiStatus, USAGE_HEADLESS_SCOPE_MARKER, } from './accounting/usage.js';
24
+ import { getVersionHomePath, listInstalledVersions } from './installations/versions.js';
25
25
  import { atomicWriteFileSync, ensureLockTarget, withFileLock } from './fs-atomic.js';
26
26
  /** Agents with a live network probe wired up today. The rest are best-effort. */
27
27
  export const LIVE_PROBE_AGENTS = new Set(['claude', 'kimi', 'droid']);
package/dist/lib/brand.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * personally-named binary (e.g. `jack` instead of `agents`), skinned with their
4
4
  * name and pinned to the exact feature set they enable.
5
5
  *
6
- * A brand is minted by `agents setup mine` / `agents mine init <name>`, which
6
+ * A brand is minted by `agents setup mine` / `agents setup mine init <name>`, which
7
7
  * writes a pure pass-through shim (`~/.agents/.cache/shims/<name>`) that sets
8
8
  * `AGENTS_BRAND=<name>` then execs the real agents-cli entrypoint. The entrypoint
9
9
  * reads `AGENTS_BRAND` to (a) present its own name/help/errors as the brand, and
@@ -0,0 +1,28 @@
1
+ export interface CallerIdentity {
2
+ actor: string;
3
+ launchId?: string;
4
+ sessionId?: string;
5
+ /** Agent pid when identity came from the process-table anchor. */
6
+ agentPid?: number;
7
+ }
8
+ /**
9
+ * Resolve caller identity once per CLI process for browser IPC stamping.
10
+ *
11
+ * Starts from `process.ppid` — the shell or harness that launched this
12
+ * `agents browser` invocation — and walks up until a state file or known
13
+ * agent comm is found.
14
+ */
15
+ export declare function resolveCallerIdentity(env?: NodeJS.ProcessEnv): CallerIdentity;
16
+ /**
17
+ * True when a live task belongs to this caller. Match on sessionId or
18
+ * launchId — either is enough. A task with no recorded identity never
19
+ * matches a caller that has one (and vice versa for the no-identity case
20
+ * handled separately by the resolver).
21
+ */
22
+ export declare function taskMatchesCaller(task: {
23
+ sessionId?: string;
24
+ launchId?: string;
25
+ }, caller: {
26
+ sessionId?: string;
27
+ launchId?: string;
28
+ }): boolean;
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Resolve the agent identity of whoever invoked `agents browser`.
3
+ *
4
+ * The browser daemon is shared and long-lived, so identity must be captured in
5
+ * the CLI process and forwarded over IPC. Order:
6
+ *
7
+ * 1. Env already set by `agents run` (`AGENT_SESSION_ID` / `AGENT_LAUNCH_ID`)
8
+ * 2. Session-tracker state file under `~/.agents/.cache/terminals/sessions/`
9
+ * (and the deployed fleet path under `state/sessions/`), keyed by
10
+ * process.ppid and walked up the ancestor chain
11
+ * 3. Process-table anchor — nearest ancestor whose comm maps to a known
12
+ * harness via `agentKindFromComm` (derived from SESSION_AGENTS)
13
+ *
14
+ * No per-harness env-var table: the state-file reader and the process-table
15
+ * classifier cover every harness by construction.
16
+ */
17
+ import { execFileSync } from 'child_process';
18
+ import { resolveActor } from '../actor.js';
19
+ import { agentKindFromComm } from '../session/active.js';
20
+ import { loadHookSessionIndex, readStateSessionRecord, } from '../session/hook-sessions.js';
21
+ const MAX_ANCESTOR_WALK = 16;
22
+ /**
23
+ * Read pid→ppid→comm for one process. Returns null when the process is gone
24
+ * or `ps` fails.
25
+ */
26
+ function readProc(pid) {
27
+ if (!pid || pid <= 1)
28
+ return null;
29
+ try {
30
+ const out = execFileSync('ps', ['-p', String(pid), '-o', 'pid=,ppid=,comm='], {
31
+ encoding: 'utf8',
32
+ timeout: 1000,
33
+ }).trim();
34
+ const m = out.match(/^(\d+)\s+(\d+)\s+(.+)$/);
35
+ if (!m)
36
+ return null;
37
+ return {
38
+ pid: parseInt(m[1], 10),
39
+ ppid: parseInt(m[2], 10),
40
+ comm: m[3].trim(),
41
+ };
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ /**
48
+ * Walk ancestors starting at `startPid` (inclusive). Yields each pid once.
49
+ */
50
+ function* ancestorPids(startPid) {
51
+ let cur = startPid;
52
+ const seen = new Set();
53
+ for (let i = 0; i < MAX_ANCESTOR_WALK && cur > 1 && !seen.has(cur); i++) {
54
+ seen.add(cur);
55
+ yield cur;
56
+ const proc = readProc(cur);
57
+ if (!proc)
58
+ return;
59
+ cur = proc.ppid;
60
+ }
61
+ }
62
+ /**
63
+ * Look up a session-tracker / deployed-hook state record for `pid`.
64
+ * Prefers the richer terminals/sessions index; falls back to the fleet
65
+ * state/sessions path (RUSH-2007).
66
+ */
67
+ function stateForPid(pid, index) {
68
+ const fromIndex = index.byPid.get(pid);
69
+ if (fromIndex?.session_id)
70
+ return fromIndex;
71
+ return readStateSessionRecord(pid);
72
+ }
73
+ /**
74
+ * Resolve caller identity once per CLI process for browser IPC stamping.
75
+ *
76
+ * Starts from `process.ppid` — the shell or harness that launched this
77
+ * `agents browser` invocation — and walks up until a state file or known
78
+ * agent comm is found.
79
+ */
80
+ export function resolveCallerIdentity(env = process.env) {
81
+ const actor = resolveActor().id;
82
+ let sessionId = env.AGENT_SESSION_ID || env.AGENTS_SESSION_ID || undefined;
83
+ let launchId = env.AGENT_LAUNCH_ID || undefined;
84
+ let agentPid;
85
+ if (sessionId && launchId) {
86
+ return { actor, sessionId, launchId };
87
+ }
88
+ // Start at ppid: when an agent runs a Bash tool call, the browser CLI's
89
+ // parent is that shell (or the agent itself when launched directly).
90
+ const startPid = typeof process.ppid === 'number' && process.ppid > 0 ? process.ppid : 0;
91
+ if (startPid > 0) {
92
+ let index;
93
+ try {
94
+ index = loadHookSessionIndex();
95
+ }
96
+ catch {
97
+ index = undefined;
98
+ }
99
+ for (const pid of ancestorPids(startPid)) {
100
+ if (index) {
101
+ const rec = stateForPid(pid, index);
102
+ if (rec?.session_id) {
103
+ sessionId = sessionId || rec.session_id;
104
+ launchId = launchId || rec.launch_id;
105
+ agentPid = pid;
106
+ break;
107
+ }
108
+ }
109
+ else {
110
+ const rec = readStateSessionRecord(pid);
111
+ if (rec?.session_id) {
112
+ sessionId = sessionId || rec.session_id;
113
+ launchId = launchId || rec.launch_id;
114
+ agentPid = pid;
115
+ break;
116
+ }
117
+ }
118
+ }
119
+ // Process-table anchor: nearest ancestor whose comm is a known harness.
120
+ // Covers harnesses with no SessionStart hook (and sessions the hook missed).
121
+ //
122
+ // IMPORTANT: stamp as launchId, NEVER as sessionId. A synthetic
123
+ // `agent-pid:<n>` is not a real agent session UUID — if it lands in
124
+ // sessionId, hygiene.taskOwnerIsGone treats it as a dead session (the
125
+ // process-table session probe rejects non-UUID shapes) and reaps the
126
+ // task mid-run. launchId-only tasks are never session-reaped
127
+ // (hygiene.ts: launchId alone is not proof of death).
128
+ if (!sessionId && !launchId) {
129
+ for (const pid of ancestorPids(startPid)) {
130
+ const proc = readProc(pid);
131
+ if (!proc)
132
+ continue;
133
+ const kind = agentKindFromComm(proc.comm);
134
+ if (kind) {
135
+ launchId = `agent-pid:${pid}`;
136
+ agentPid = pid;
137
+ break;
138
+ }
139
+ }
140
+ }
141
+ }
142
+ return { actor, sessionId, launchId, agentPid };
143
+ }
144
+ /**
145
+ * True when a live task belongs to this caller. Match on sessionId or
146
+ * launchId — either is enough. A task with no recorded identity never
147
+ * matches a caller that has one (and vice versa for the no-identity case
148
+ * handled separately by the resolver).
149
+ */
150
+ export function taskMatchesCaller(task, caller) {
151
+ if (caller.sessionId && task.sessionId && caller.sessionId === task.sessionId)
152
+ return true;
153
+ if (caller.launchId && task.launchId && caller.launchId === task.launchId)
154
+ return true;
155
+ return false;
156
+ }
@@ -4,7 +4,7 @@
4
4
  // with code 1006 ("Max decompressed message size exceeded") while the command
5
5
  // is pending. `ws` offers no permessage-deflate by default and takes an
6
6
  // explicit payload cap. (Reproduced live against a remote Edge over
7
- // `browser --host`: fresh blank newtab passed, reused content-rich newtab
7
+ // `browser --device`: fresh blank newtab passed, reused content-rich newtab
8
8
  // failed on every Page.captureScreenshot.)
9
9
  import WSWebSocket from 'ws';
10
10
  const pipeTransports = new Map();
@@ -54,7 +54,7 @@ export declare function buildWindowsLaunchScript(browserType: string, port: numb
54
54
  * killing only the port-owning main process orphans its children. The orphans
55
55
  * keep the profile's SingletonLock, so every later launch against the same
56
56
  * `--user-data-dir` delegates to the zombie tree, exits, and never binds the
57
- * CDP port — `browser start --host` then fails until someone hand-cleans the
57
+ * CDP port — `browser start --device` then fails until someone hand-cleans the
58
58
  * box (found live on win-mini by the #561 e2e suite).
59
59
  */
60
60
  export declare function buildWindowsKillScript(port: number): string;
@@ -8,7 +8,7 @@ import { writeProfileRuntime, clearProfileRuntime } from '../runtime-state.js';
8
8
  // so existing importers of `shellQuote` from this module keep working.
9
9
  import { shellQuote, assertValidSshTarget, controlOpts, sshConnectOpts } from '../../ssh-exec.js';
10
10
  export { shellQuote };
11
- // The `ssh -L` tunnel spawn is shared with `agents computer --host`; it lives in
11
+ // The `ssh -L` tunnel spawn is shared with `agents computer --device`; it lives in
12
12
  // the single ssh-tunnel helper. Calling it with no options preserves this
13
13
  // driver's original foreground, stderr-captured behavior exactly.
14
14
  import { startSSHTunnel } from '../../ssh-tunnel.js';
@@ -244,7 +244,7 @@ export function buildWindowsLaunchScript(browserType, port, customBinary) {
244
244
  * killing only the port-owning main process orphans its children. The orphans
245
245
  * keep the profile's SingletonLock, so every later launch against the same
246
246
  * `--user-data-dir` delegates to the zombie tree, exits, and never binds the
247
- * CDP port — `browser start --host` then fails until someone hand-cleans the
247
+ * CDP port — `browser start --device` then fails until someone hand-cleans the
248
248
  * box (found live on win-mini by the #561 e2e suite).
249
249
  */
250
250
  export function buildWindowsKillScript(port) {
@@ -33,8 +33,16 @@ export interface ReapDeps {
33
33
  sessionLiveOnProcessTable?: (sessionId: string) => Promise<boolean>;
34
34
  }
35
35
  export interface ReapOptions {
36
- /** Idle window in ms. Default {@link DEFAULT_IDLE_MS}. */
37
- idleMs?: number;
36
+ /**
37
+ * Idle window in ms. Default {@link DEFAULT_IDLE_MS}.
38
+ *
39
+ * `null` is the explicit "idle reaping is off" signal
40
+ * (`browser.task-idle-minutes=0`) — session-dead reaping below is
41
+ * unaffected. A caller-supplied `0` is a DIFFERENT thing and still throws
42
+ * (see the guard below): it is far likelier to be a bug (a value that
43
+ * survived `??` unset) than an intentional "reap everything immediately."
44
+ */
45
+ idleMs?: number | null;
38
46
  /** Clock, injectable for tests. Default `Date.now()`. */
39
47
  now?: number;
40
48
  /** Report what would be closed without closing anything. */
@@ -98,12 +98,15 @@ export async function taskOwnerIsGone(task, live, deps = {}) {
98
98
  * asked for, and an in-flight recording is itself proof the task is in use.
99
99
  */
100
100
  export async function reapAbandonedTasks(service, opts = {}) {
101
- const idleMs = opts.idleMs ?? DEFAULT_IDLE_MS;
101
+ const idleDisabled = opts.idleMs === null;
102
+ const idleMs = idleDisabled ? undefined : (opts.idleMs ?? DEFAULT_IDLE_MS);
102
103
  // Fail loud rather than reap everything. A caller-supplied `0` survives `??`
103
104
  // and would close every task including one created a millisecond ago; a
104
105
  // non-numeric value makes every `>=` comparison false and silently disables
105
- // idle reaping. Both are worse than an error.
106
- if (!Number.isFinite(idleMs) || idleMs <= 0) {
106
+ // idle reaping. Both are worse than an error. `null` (idleDisabled) skips
107
+ // this check entirely that is the one deliberate way to turn idle
108
+ // reaping off, distinct from an accidental `0`.
109
+ if (!idleDisabled && (!Number.isFinite(idleMs) || idleMs <= 0)) {
107
110
  throw new Error(`idleMs must be a positive number of milliseconds, got ${String(idleMs)}`);
108
111
  }
109
112
  const now = opts.now ?? Date.now();
@@ -120,7 +123,7 @@ export async function reapAbandonedTasks(service, opts = {}) {
120
123
  if (await taskOwnerIsGone(task, live, deps)) {
121
124
  reason = 'session-dead';
122
125
  }
123
- else if (now - (task.lastActionAt ?? task.createdAt) >= idleMs) {
126
+ else if (!idleDisabled && now - (task.lastActionAt ?? task.createdAt) >= idleMs) {
124
127
  reason = 'idle';
125
128
  }
126
129
  if (!reason) {
@@ -67,16 +67,36 @@ export declare class BrowserIPCServer {
67
67
  private doStop;
68
68
  /** Release the listening binding, resolving only once it is genuinely gone. */
69
69
  private closeServer;
70
+ /**
71
+ * Resolve `request.task` from caller identity when omitted. Page verbs may
72
+ * create; done/stop never create. Returns an error response to short-circuit
73
+ * the action, or undefined when the request is ready (task filled in).
74
+ */
75
+ private bindTask;
70
76
  private handleRequest;
71
77
  }
72
78
  /**
73
- * Decide whether a running daemon is stale and must be restarted. A daemon
74
- * is stale when it reports a concrete version that differs from this CLI's.
79
+ * Decide whether a running daemon is stale and must be restarted.
80
+ *
81
+ * FORWARD ONLY: restart when the daemon is *older* than this CLI so a newer
82
+ * install loads current code. An older CLI rides a newer daemon instead of
83
+ * evicting it — two installs sharing one daemon dir (keyed off $HOME) must
84
+ * not flap the daemon indefinitely.
85
+ *
75
86
  * `undefined`/`'unknown'` means the daemon is too old to answer the `version`
76
87
  * action reliably — don't churn it on that ambiguous signal.
88
+ *
89
+ * When numeric compare cannot order two distinct strings (e.g. two
90
+ * `0.0.0-dev.*` builds), treat the mismatch as a restart so a concrete
91
+ * code change still loads.
77
92
  */
78
93
  export declare function shouldRestartStaleDaemon(daemonVersion: string | undefined, clientVersion: string): boolean;
79
94
  export declare function sendIPCRequest(request: IPCRequest, opts?: IPCRequestOptions): Promise<IPCResponse>;
95
+ /**
96
+ * Fill actor / launchId / sessionId from the calling process when the request
97
+ * left them blank. Explicit values on the request always win.
98
+ */
99
+ export declare function stampCallerIdentity(request: IPCRequest): IPCRequest;
80
100
  /**
81
101
  * Open one connection that can serve many browser operations. This uses the
82
102
  * same daemon readiness and version-reconciliation path as sendIPCRequest;