@phnx-labs/agents-cli 1.22.39 → 1.22.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (569) hide show
  1. package/CHANGELOG.md +316 -0
  2. package/README.md +116 -70
  3. package/dist/bin/agents +0 -0
  4. package/dist/bootstrap.js +45 -27
  5. package/dist/browser.js +2 -2
  6. package/dist/cli/command-registry.d.ts +135 -0
  7. package/dist/cli/command-registry.js +259 -0
  8. package/dist/commands/accounts.d.ts +20 -0
  9. package/dist/commands/accounts.js +186 -25
  10. package/dist/commands/apply.d.ts +3 -3
  11. package/dist/commands/apply.js +20 -63
  12. package/dist/commands/browser.d.ts +15 -0
  13. package/dist/commands/browser.js +318 -131
  14. package/dist/commands/budget.d.ts +7 -6
  15. package/dist/commands/budget.js +8 -7
  16. package/dist/commands/cloud.js +17 -20
  17. package/dist/commands/commands.js +1 -1
  18. package/dist/commands/computer-actions.d.ts +1 -35
  19. package/dist/commands/computer-actions.js +13 -181
  20. package/dist/commands/computer.d.ts +28 -3
  21. package/dist/commands/computer.js +93 -65
  22. package/dist/commands/config.js +16 -3
  23. package/dist/commands/cost.d.ts +2 -1
  24. package/dist/commands/cost.js +7 -6
  25. package/dist/commands/daemon.js +151 -4
  26. package/dist/commands/detach.js +1 -1
  27. package/dist/commands/doctor.js +19 -11
  28. package/dist/commands/events.js +1 -1
  29. package/dist/commands/exec.d.ts +2 -50
  30. package/dist/commands/exec.js +160 -215
  31. package/dist/commands/factory.js +1 -1
  32. package/dist/commands/feed.d.ts +2 -2
  33. package/dist/commands/feed.js +12 -23
  34. package/dist/commands/fleet-capture.js +25 -27
  35. package/dist/commands/focus.d.ts +2 -3
  36. package/dist/commands/focus.js +34 -9
  37. package/dist/commands/go.js +15 -5
  38. package/dist/commands/harness.d.ts +3 -3
  39. package/dist/commands/harness.js +53 -5
  40. package/dist/commands/hooks.js +1 -1
  41. package/dist/commands/import.js +2 -2
  42. package/dist/commands/insights.d.ts +5 -5
  43. package/dist/commands/insights.js +15 -9
  44. package/dist/commands/inspect.d.ts +2 -3
  45. package/dist/commands/inspect.js +4 -16
  46. package/dist/commands/logs.d.ts +2 -2
  47. package/dist/commands/logs.js +9 -9
  48. package/dist/commands/mcp.js +2 -2
  49. package/dist/commands/memory.js +1 -1
  50. package/dist/commands/message.d.ts +1 -1
  51. package/dist/commands/message.js +7 -7
  52. package/dist/commands/mine.d.ts +11 -8
  53. package/dist/commands/mine.js +11 -10
  54. package/dist/commands/models.js +1 -1
  55. package/dist/commands/modes.js +1 -1
  56. package/dist/commands/monitors.js +23 -6
  57. package/dist/commands/output.d.ts +7 -6
  58. package/dist/commands/output.js +11 -10
  59. package/dist/commands/packages.js +4 -4
  60. package/dist/commands/perf.js +1 -1
  61. package/dist/commands/permissions.js +49 -32
  62. package/dist/commands/plugins.d.ts +1 -1
  63. package/dist/commands/plugins.js +3 -3
  64. package/dist/commands/profiles.d.ts +6 -9
  65. package/dist/commands/profiles.js +8 -321
  66. package/dist/commands/projects.d.ts +9 -0
  67. package/dist/commands/projects.js +140 -8
  68. package/dist/commands/prune.js +5 -13
  69. package/dist/commands/refresh-rules.js +1 -1
  70. package/dist/commands/repo.d.ts +5 -7
  71. package/dist/commands/repo.js +34 -18
  72. package/dist/commands/resource-view.js +4 -0
  73. package/dist/commands/resume.d.ts +11 -7
  74. package/dist/commands/resume.js +82 -98
  75. package/dist/commands/route.d.ts +12 -0
  76. package/dist/commands/route.js +261 -0
  77. package/dist/commands/routines.d.ts +2 -3
  78. package/dist/commands/routines.js +120 -145
  79. package/dist/commands/rules.js +1 -1
  80. package/dist/commands/run-account-picker.d.ts +1 -1
  81. package/dist/commands/run-account-picker.js +2 -2
  82. package/dist/commands/run-broadcast.d.ts +21 -0
  83. package/dist/commands/run-broadcast.js +89 -0
  84. package/dist/commands/run-cloud.js +1 -1
  85. package/dist/commands/secrets-vault.d.ts +10 -0
  86. package/dist/commands/{login.js → secrets-vault.js} +34 -14
  87. package/dist/commands/secrets.d.ts +4 -4
  88. package/dist/commands/secrets.js +158 -159
  89. package/dist/commands/sessions-backfill.js +1 -1
  90. package/dist/commands/sessions-browser.d.ts +1 -1
  91. package/dist/commands/sessions-browser.js +9 -5
  92. package/dist/commands/sessions-export.js +2 -2
  93. package/dist/commands/sessions-inject.js +4 -5
  94. package/dist/commands/sessions-migrate.js +16 -27
  95. package/dist/commands/sessions-picker.d.ts +14 -0
  96. package/dist/commands/sessions-picker.js +209 -13
  97. package/dist/commands/sessions-resume.d.ts +7 -3
  98. package/dist/commands/sessions-resume.js +81 -33
  99. package/dist/commands/sessions-share.d.ts +25 -0
  100. package/dist/commands/sessions-share.js +166 -0
  101. package/dist/commands/sessions-stats.js +2 -2
  102. package/dist/commands/sessions.d.ts +75 -68
  103. package/dist/commands/sessions.js +144 -180
  104. package/dist/commands/setup-browser.js +1 -1
  105. package/dist/commands/setup-computer.js +1 -1
  106. package/dist/commands/setup-fleet.js +3 -0
  107. package/dist/commands/setup-mine.d.ts +7 -3
  108. package/dist/commands/setup-mine.js +13 -8
  109. package/dist/commands/setup-preferences.js +2 -2
  110. package/dist/commands/setup-secrets.js +2 -2
  111. package/dist/commands/setup-watchdog.js +2 -2
  112. package/dist/commands/setup.js +7 -2
  113. package/dist/commands/share.d.ts +65 -0
  114. package/dist/commands/share.js +253 -20
  115. package/dist/commands/skills.js +3 -3
  116. package/dist/commands/snapshot.d.ts +2 -2
  117. package/dist/commands/snapshot.js +9 -9
  118. package/dist/commands/ssh.d.ts +1 -1
  119. package/dist/commands/ssh.js +186 -64
  120. package/dist/commands/subagents.js +1 -1
  121. package/dist/commands/sync.js +24 -9
  122. package/dist/commands/teams.d.ts +2 -2
  123. package/dist/commands/teams.js +9 -18
  124. package/dist/commands/tmux.js +5 -1
  125. package/dist/commands/trash.js +1 -1
  126. package/dist/commands/usage.d.ts +1 -1
  127. package/dist/commands/usage.js +2 -2
  128. package/dist/commands/utils.d.ts +4 -14
  129. package/dist/commands/utils.js +6 -27
  130. package/dist/commands/versions.js +2 -2
  131. package/dist/commands/view.d.ts +9 -77
  132. package/dist/commands/view.js +23 -8
  133. package/dist/commands/watchdog.js +1 -1
  134. package/dist/commands/webhook.js +25 -34
  135. package/dist/commands/workflows.js +1 -1
  136. package/dist/index.js +1 -1
  137. package/dist/lib/account-capabilities.d.ts +39 -0
  138. package/dist/lib/account-capabilities.js +59 -0
  139. package/dist/lib/account-catalog.js +1 -1
  140. package/dist/lib/account-registry.d.ts +66 -0
  141. package/dist/lib/account-registry.js +151 -5
  142. package/dist/lib/{rotate.d.ts → accounting/rotate.d.ts} +4 -4
  143. package/dist/lib/{rotate.js → accounting/rotate.js} +8 -8
  144. package/dist/lib/{usage.d.ts → accounting/usage.d.ts} +4 -4
  145. package/dist/lib/{usage.js → accounting/usage.js} +11 -11
  146. package/dist/lib/agent-spec/provider.js +1 -1
  147. package/dist/lib/agents.d.ts +72 -4
  148. package/dist/lib/agents.js +231 -199
  149. package/dist/lib/answer-router.d.ts +2 -2
  150. package/dist/lib/ask-classifier.d.ts +1 -1
  151. package/dist/lib/ask-classifier.js +1 -1
  152. package/dist/lib/audit/log.js +1 -1
  153. package/dist/lib/auth-health.d.ts +1 -1
  154. package/dist/lib/auth-health.js +2 -2
  155. package/dist/lib/brand.js +1 -1
  156. package/dist/lib/browser/caller-identity.d.ts +28 -0
  157. package/dist/lib/browser/caller-identity.js +156 -0
  158. package/dist/lib/browser/cdp.js +5 -1
  159. package/dist/lib/browser/chrome.js +12 -1
  160. package/dist/lib/browser/drivers/ssh.d.ts +1 -1
  161. package/dist/lib/browser/drivers/ssh.js +3 -2
  162. package/dist/lib/browser/hygiene.d.ts +10 -2
  163. package/dist/lib/browser/hygiene.js +7 -4
  164. package/dist/lib/browser/ipc.d.ts +22 -2
  165. package/dist/lib/browser/ipc.js +185 -21
  166. package/dist/lib/browser/profiles.d.ts +69 -5
  167. package/dist/lib/browser/profiles.js +135 -13
  168. package/dist/lib/browser/remote-control.d.ts +2 -2
  169. package/dist/lib/browser/remote-control.js +3 -3
  170. package/dist/lib/browser/runtime-state.d.ts +79 -0
  171. package/dist/lib/browser/runtime-state.js +119 -1
  172. package/dist/lib/browser/service.d.ts +137 -2
  173. package/dist/lib/browser/service.js +492 -54
  174. package/dist/lib/browser/sessions-list.d.ts +2 -1
  175. package/dist/lib/browser/sessions-list.js +4 -13
  176. package/dist/lib/browser/types.d.ts +19 -1
  177. package/dist/lib/budget/config.js +1 -1
  178. package/dist/lib/budget/ledger.js +1 -1
  179. package/dist/lib/byok-usage.js +1 -1
  180. package/dist/lib/capabilities.js +3 -15
  181. package/dist/lib/catchup.d.ts +1 -1
  182. package/dist/lib/catchup.js +1 -1
  183. package/dist/lib/cloud/dispatch.js +1 -1
  184. package/dist/lib/cloud/host.d.ts +3 -3
  185. package/dist/lib/cloud/host.js +5 -5
  186. package/dist/lib/cloud/rush.d.ts +9 -21
  187. package/dist/lib/cloud/rush.js +33 -120
  188. package/dist/lib/cloud/types.d.ts +2 -2
  189. package/dist/lib/commands.js +3 -13
  190. package/dist/lib/computer/actions.d.ts +36 -0
  191. package/dist/lib/computer/actions.js +162 -0
  192. package/dist/lib/computer/dispatch.d.ts +2 -2
  193. package/dist/lib/computer/dispatch.js +2 -2
  194. package/dist/lib/computer/sessions-list.d.ts +3 -3
  195. package/dist/lib/computer/sessions-list.js +2 -2
  196. package/dist/lib/config-keys.d.ts +2 -1
  197. package/dist/lib/config-keys.js +8 -4
  198. package/dist/lib/config-machine-keys.d.ts +4 -2
  199. package/dist/lib/config-machine-keys.js +5 -2
  200. package/dist/lib/crabbox/lease.js +9 -1
  201. package/dist/lib/crabbox/runtimes.d.ts +32 -7
  202. package/dist/lib/crabbox/runtimes.js +72 -30
  203. package/dist/lib/{daemon.d.ts → daemon/daemon.d.ts} +59 -1
  204. package/dist/lib/{daemon.js → daemon/daemon.js} +237 -49
  205. package/dist/lib/daemon-services.d.ts +1 -1
  206. package/dist/lib/daemon-services.js +5 -0
  207. package/dist/lib/daemon-ticks.d.ts +25 -0
  208. package/dist/lib/daemon-ticks.js +31 -1
  209. package/dist/lib/daemon-webhooks.d.ts +104 -0
  210. package/dist/lib/daemon-webhooks.js +215 -0
  211. package/dist/lib/device-config.d.ts +85 -75
  212. package/dist/lib/device-config.js +280 -142
  213. package/dist/lib/devices/config-migration.d.ts +29 -34
  214. package/dist/lib/devices/config-migration.js +209 -130
  215. package/dist/lib/devices/connect.d.ts +2 -2
  216. package/dist/lib/devices/connect.js +2 -2
  217. package/dist/lib/devices/discovery-policy.d.ts +30 -0
  218. package/dist/lib/devices/discovery-policy.js +101 -0
  219. package/dist/lib/devices/fleet-inventory.js +8 -3
  220. package/dist/lib/devices/harness-inventory.d.ts +1 -1
  221. package/dist/lib/devices/harness-inventory.js +12 -3
  222. package/dist/lib/devices/known-hosts.js +1 -1
  223. package/dist/lib/devices/pool.d.ts +10 -5
  224. package/dist/lib/devices/pool.js +5 -7
  225. package/dist/lib/devices/registry.d.ts +1 -1
  226. package/dist/lib/devices/registry.js +1 -1
  227. package/dist/lib/devices/resolve-profile.d.ts +2 -2
  228. package/dist/lib/devices/resolve-profile.js +2 -2
  229. package/dist/lib/devices/resolve-target.d.ts +1 -1
  230. package/dist/lib/devices/resolve-target.js +4 -4
  231. package/dist/lib/devices/self-host.d.ts +1 -1
  232. package/dist/lib/devices/self-host.js +3 -3
  233. package/dist/lib/devices/ssh-config.d.ts +1 -1
  234. package/dist/lib/devices/stats-cache.js +1 -1
  235. package/dist/lib/devices/sync.d.ts +3 -1
  236. package/dist/lib/devices/sync.js +3 -3
  237. package/dist/lib/doctor-diff.js +4 -4
  238. package/dist/lib/drift-sync.js +2 -2
  239. package/dist/lib/drift.js +2 -2
  240. package/dist/lib/event-families.d.ts +1 -1
  241. package/dist/lib/event-stream.d.ts +1 -1
  242. package/dist/lib/event-stream.js +2 -2
  243. package/dist/lib/events-ingest.js +2 -2
  244. package/dist/lib/exec.d.ts +4 -4
  245. package/dist/lib/exec.js +11 -11
  246. package/dist/lib/factory/snapshot.d.ts +1 -1
  247. package/dist/lib/factory/snapshot.js +1 -1
  248. package/dist/lib/{activity.d.ts → feed/activity.d.ts} +1 -1
  249. package/dist/lib/{activity.js → feed/activity.js} +7 -7
  250. package/dist/lib/{events.d.ts → feed/events.d.ts} +2 -2
  251. package/dist/lib/{events.js → feed/events.js} +5 -5
  252. package/dist/lib/{feed.js → feed/feed.js} +4 -4
  253. package/dist/lib/feed-outcome.d.ts +1 -1
  254. package/dist/lib/feed-policy.d.ts +1 -1
  255. package/dist/lib/feed-policy.js +1 -1
  256. package/dist/lib/feed-post.d.ts +1 -1
  257. package/dist/lib/feed-post.js +1 -1
  258. package/dist/lib/feed-ranking.d.ts +1 -1
  259. package/dist/lib/fleet/apply.d.ts +0 -6
  260. package/dist/lib/fleet/apply.js +18 -45
  261. package/dist/lib/fleet/auth-sync.d.ts +16 -35
  262. package/dist/lib/fleet/auth-sync.js +16 -75
  263. package/dist/lib/fleet/capture.js +8 -6
  264. package/dist/lib/fleet/manifest.js +23 -11
  265. package/dist/lib/fleet/types.d.ts +19 -7
  266. package/dist/lib/fleet-cache.d.ts +1 -1
  267. package/dist/lib/fleet-cache.js +1 -1
  268. package/dist/lib/format.d.ts +19 -0
  269. package/dist/lib/format.js +44 -1
  270. package/dist/lib/friction-heuristics.d.ts +1 -1
  271. package/dist/lib/git.d.ts +24 -1
  272. package/dist/lib/git.js +82 -38
  273. package/dist/lib/heal.js +3 -3
  274. package/dist/lib/hooks.d.ts +18 -0
  275. package/dist/lib/hooks.js +113 -1
  276. package/dist/lib/hosts/credentials.d.ts +30 -10
  277. package/dist/lib/hosts/credentials.js +38 -26
  278. package/dist/lib/hosts/dispatch.d.ts +3 -3
  279. package/dist/lib/hosts/dispatch.js +3 -3
  280. package/dist/lib/hosts/option.d.ts +3 -3
  281. package/dist/lib/hosts/option.js +7 -8
  282. package/dist/lib/hosts/passthrough.d.ts +17 -17
  283. package/dist/lib/hosts/passthrough.js +67 -50
  284. package/dist/lib/hosts/providers/devices.d.ts +1 -1
  285. package/dist/lib/hosts/providers/devices.js +1 -1
  286. package/dist/lib/hosts/reconcile.d.ts +1 -1
  287. package/dist/lib/hosts/reconcile.js +1 -1
  288. package/dist/lib/hosts/reconnect.d.ts +1 -1
  289. package/dist/lib/hosts/reconnect.js +2 -2
  290. package/dist/lib/hosts/registry.d.ts +5 -5
  291. package/dist/lib/hosts/registry.js +5 -5
  292. package/dist/lib/hosts/remote-cmd.d.ts +10 -10
  293. package/dist/lib/hosts/remote-cmd.js +25 -18
  294. package/dist/lib/hosts/remote-os.d.ts +4 -4
  295. package/dist/lib/hosts/remote-os.js +4 -4
  296. package/dist/lib/hosts/remote-session-id.d.ts +2 -2
  297. package/dist/lib/hosts/remote-session-id.js +2 -2
  298. package/dist/lib/hosts/routing-flag.d.ts +3 -3
  299. package/dist/lib/hosts/routing-flag.js +4 -5
  300. package/dist/lib/hosts/run-target.d.ts +4 -4
  301. package/dist/lib/hosts/run-target.js +4 -4
  302. package/dist/lib/hosts/session-index.d.ts +2 -2
  303. package/dist/lib/hosts/session-index.js +1 -1
  304. package/dist/lib/hosts/session-marker.d.ts +1 -1
  305. package/dist/lib/hosts/session-marker.js +1 -1
  306. package/dist/lib/hosts/types.d.ts +2 -2
  307. package/dist/lib/hosts/types.js +2 -2
  308. package/dist/lib/import.js +1 -1
  309. package/dist/lib/{migrate.d.ts → installations/migrate.d.ts} +13 -1
  310. package/dist/lib/{migrate.js → installations/migrate.js} +160 -40
  311. package/dist/lib/installations/resolve.js +1 -1
  312. package/dist/lib/installations/strategies.js +1 -1
  313. package/dist/lib/installations/update.js +2 -2
  314. package/dist/lib/{versions.d.ts → installations/versions.d.ts} +12 -3
  315. package/dist/lib/{versions.js → installations/versions.js} +51 -31
  316. package/dist/lib/isolation-boundary-report.js +1 -1
  317. package/dist/lib/linear-projects.d.ts +28 -0
  318. package/dist/lib/linear-projects.js +30 -0
  319. package/dist/lib/loop.js +1 -1
  320. package/dist/lib/mailbox-gc.js +1 -1
  321. package/dist/lib/mailbox.js +1 -1
  322. package/dist/lib/mcp-registry.d.ts +62 -0
  323. package/dist/lib/mcp-registry.js +177 -0
  324. package/dist/lib/mcp.d.ts +5 -0
  325. package/dist/lib/mcp.js +124 -307
  326. package/dist/lib/menubar/MenubarHelper.app/Contents/CodeResources +0 -0
  327. package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
  328. package/dist/lib/menubar/install-menubar.d.ts +7 -0
  329. package/dist/lib/menubar/install-menubar.js +24 -6
  330. package/dist/lib/menubar/snapshot.d.ts +7 -0
  331. package/dist/lib/menubar/snapshot.js +8 -6
  332. package/dist/lib/models.js +1 -1
  333. package/dist/lib/monitors/config.d.ts +12 -0
  334. package/dist/lib/monitors/config.js +3 -0
  335. package/dist/lib/monitors/dispatch.js +26 -5
  336. package/dist/lib/monitors/engine.js +10 -0
  337. package/dist/lib/monitors/sources/webhook.d.ts +1 -1
  338. package/dist/lib/monitors/state.d.ts +42 -0
  339. package/dist/lib/monitors/state.js +30 -0
  340. package/dist/lib/notify.d.ts +1 -1
  341. package/dist/lib/observe-aliases.d.ts +3 -3
  342. package/dist/lib/observe-aliases.js +3 -21
  343. package/dist/lib/output/git-output.js +2 -2
  344. package/dist/lib/overdue.d.ts +1 -1
  345. package/dist/lib/overdue.js +1 -1
  346. package/dist/lib/permissions-registry.d.ts +65 -0
  347. package/dist/lib/permissions-registry.js +599 -0
  348. package/dist/lib/permissions.d.ts +24 -13
  349. package/dist/lib/permissions.js +52 -271
  350. package/dist/lib/picker.d.ts +16 -0
  351. package/dist/lib/picker.js +33 -3
  352. package/dist/lib/placement.d.ts +1 -1
  353. package/dist/lib/placement.js +4 -4
  354. package/dist/lib/platform/paths.d.ts +8 -0
  355. package/dist/lib/platform/paths.js +11 -0
  356. package/dist/lib/platform/posixpath.js +3 -3
  357. package/dist/lib/{plugin-marketplace.d.ts → plugins/plugin-marketplace.d.ts} +1 -1
  358. package/dist/lib/{plugin-marketplace.js → plugins/plugin-marketplace.js} +2 -2
  359. package/dist/lib/{plugins.d.ts → plugins/plugins.d.ts} +1 -1
  360. package/dist/lib/{plugins.js → plugins/plugins.js} +7 -7
  361. package/dist/lib/{skills.d.ts → plugins/skills.d.ts} +1 -1
  362. package/dist/lib/{skills.js → plugins/skills.js} +7 -7
  363. package/dist/lib/pricing/cost.d.ts +1 -1
  364. package/dist/lib/pricing/cost.js +1 -1
  365. package/dist/lib/profiles-presets.d.ts +1 -1
  366. package/dist/lib/profiles-presets.js +1 -1
  367. package/dist/lib/profiles.js +2 -2
  368. package/dist/lib/project-import.js +4 -1
  369. package/dist/lib/project-key.js +7 -0
  370. package/dist/lib/project-launch.d.ts +1 -1
  371. package/dist/lib/project-launch.js +3 -3
  372. package/dist/lib/project-pull.d.ts +128 -0
  373. package/dist/lib/project-pull.js +384 -0
  374. package/dist/lib/project-root.d.ts +2 -2
  375. package/dist/lib/project-root.js +2 -2
  376. package/dist/lib/project-status.js +1 -1
  377. package/dist/lib/projects.d.ts +23 -0
  378. package/dist/lib/projects.js +29 -6
  379. package/dist/lib/refresh.d.ts +12 -1
  380. package/dist/lib/refresh.js +16 -9
  381. package/dist/lib/registry.d.ts +9 -2
  382. package/dist/lib/registry.js +11 -4
  383. package/dist/lib/resources.d.ts +2 -2
  384. package/dist/lib/resources.js +2 -2
  385. package/dist/lib/routers.d.ts +81 -0
  386. package/dist/lib/routers.js +153 -0
  387. package/dist/lib/routine-context.d.ts +1 -0
  388. package/dist/lib/routine-context.js +7 -2
  389. package/dist/lib/routine-notify-owner.d.ts +1 -1
  390. package/dist/lib/routine-notify.d.ts +1 -1
  391. package/dist/lib/routine-notify.js +1 -1
  392. package/dist/lib/routine-process-cleanup.d.ts +1 -1
  393. package/dist/lib/routine-readiness.d.ts +1 -1
  394. package/dist/lib/routine-readiness.js +11 -4
  395. package/dist/lib/routines-placement.d.ts +12 -2
  396. package/dist/lib/routines-placement.js +20 -3
  397. package/dist/lib/routines-project.d.ts +1 -1
  398. package/dist/lib/routines-project.js +1 -1
  399. package/dist/lib/rules/compile.d.ts +1 -0
  400. package/dist/lib/rules/compile.js +10 -2
  401. package/dist/lib/rules/rules.js +1 -1
  402. package/dist/lib/run-notify.js +1 -1
  403. package/dist/lib/runner.d.ts +80 -2
  404. package/dist/lib/runner.js +261 -67
  405. package/dist/lib/sandbox.d.ts +1 -1
  406. package/dist/lib/scheduler.d.ts +1 -1
  407. package/dist/lib/scheduler.js +1 -1
  408. package/dist/lib/{routines.d.ts → scheduling/routines.d.ts} +54 -9
  409. package/dist/lib/{routines.js → scheduling/routines.js} +173 -14
  410. package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
  411. package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
  412. package/dist/lib/secrets/agent.js +2 -2
  413. package/dist/lib/secrets/audit.js +1 -1
  414. package/dist/lib/secrets/bundles.d.ts +4 -4
  415. package/dist/lib/secrets/bundles.js +8 -8
  416. package/dist/lib/secrets/headless.d.ts +16 -0
  417. package/dist/lib/secrets/headless.js +21 -0
  418. package/dist/lib/secrets/index.js +1 -1
  419. package/dist/lib/secrets/list-filter.d.ts +1 -1
  420. package/dist/lib/secrets/list-filter.js +2 -2
  421. package/dist/lib/secrets/push.d.ts +1 -1
  422. package/dist/lib/secrets/push.js +10 -12
  423. package/dist/lib/secrets/remote.d.ts +21 -17
  424. package/dist/lib/secrets/remote.js +39 -23
  425. package/dist/lib/secrets/vault.js +2 -2
  426. package/dist/lib/self-heal/checks/shadowing.js +1 -1
  427. package/dist/lib/self-heal/checks/shims.js +1 -1
  428. package/dist/lib/self-update.d.ts +39 -4
  429. package/dist/lib/self-update.js +78 -25
  430. package/dist/lib/serve/control.d.ts +1 -1
  431. package/dist/lib/serve/control.js +4 -4
  432. package/dist/lib/serve/data.d.ts +1 -1
  433. package/dist/lib/serve/data.js +1 -1
  434. package/dist/lib/serve/stream.js +1 -1
  435. package/dist/lib/service-manifest.d.ts +29 -0
  436. package/dist/lib/service-manifest.js +80 -0
  437. package/dist/lib/session/active.d.ts +59 -7
  438. package/dist/lib/session/active.js +158 -17
  439. package/dist/lib/session/bash-command.js +1 -1
  440. package/dist/lib/session/claude-accounts.d.ts +1 -1
  441. package/dist/lib/session/claude-accounts.js +1 -1
  442. package/dist/lib/session/db.d.ts +10 -2
  443. package/dist/lib/session/db.js +25 -6
  444. package/dist/lib/session/discover.d.ts +77 -0
  445. package/dist/lib/session/discover.js +130 -25
  446. package/dist/lib/session/fork.js +1 -1
  447. package/dist/lib/session/inject.d.ts +1 -1
  448. package/dist/lib/session/insights.d.ts +1 -1
  449. package/dist/lib/session/insights.js +1 -1
  450. package/dist/lib/session/live-metadata.d.ts +15 -0
  451. package/dist/lib/session/live-metadata.js +76 -0
  452. package/dist/lib/session/migrate-targets.d.ts +1 -1
  453. package/dist/lib/session/recovery.d.ts +1 -1
  454. package/dist/lib/session/recovery.js +2 -2
  455. package/dist/lib/session/remote-active.d.ts +10 -1
  456. package/dist/lib/session/remote-active.js +8 -3
  457. package/dist/lib/session/remote-bundle.d.ts +1 -1
  458. package/dist/lib/session/remote-bundle.js +2 -2
  459. package/dist/lib/session/remote-list.d.ts +15 -4
  460. package/dist/lib/session/remote-list.js +40 -3
  461. package/dist/lib/session/remote.d.ts +5 -5
  462. package/dist/lib/session/remote.js +13 -17
  463. package/dist/lib/session/resume-command.d.ts +3 -2
  464. package/dist/lib/session/resume-command.js +4 -3
  465. package/dist/lib/session/resume-owner.d.ts +3 -3
  466. package/dist/lib/session/resume-owner.js +3 -3
  467. package/dist/lib/session/session-cache.d.ts +12 -0
  468. package/dist/lib/session/session-cache.js +2 -0
  469. package/dist/lib/session/share-html.d.ts +55 -0
  470. package/dist/lib/session/share-html.js +319 -0
  471. package/dist/lib/session/shell-programs.js +1 -1
  472. package/dist/lib/session/state.js +5 -5
  473. package/dist/lib/session/team-filter.d.ts +1 -1
  474. package/dist/lib/session/team-filter.js +1 -1
  475. package/dist/lib/session/types.d.ts +3 -3
  476. package/dist/lib/session/width.d.ts +2 -2
  477. package/dist/lib/session/width.js +2 -2
  478. package/dist/lib/settings-manifest.d.ts +2 -0
  479. package/dist/lib/settings-manifest.js +81 -3
  480. package/dist/lib/share/delete.d.ts +21 -0
  481. package/dist/lib/share/delete.js +42 -0
  482. package/dist/lib/share/publish.d.ts +120 -0
  483. package/dist/lib/share/publish.js +243 -18
  484. package/dist/lib/share/worker-template.js +172 -9
  485. package/dist/lib/shims.js +35 -7
  486. package/dist/lib/smart-launch.d.ts +4 -4
  487. package/dist/lib/smart-launch.js +6 -4
  488. package/dist/lib/snapshot.d.ts +4 -4
  489. package/dist/lib/snapshot.js +2 -2
  490. package/dist/lib/ssh-exec.d.ts +1 -1
  491. package/dist/lib/ssh-exec.js +2 -2
  492. package/dist/lib/ssh-tunnel.d.ts +10 -10
  493. package/dist/lib/ssh-tunnel.js +12 -12
  494. package/dist/lib/staleness/checkers/hooks.d.ts +1 -1
  495. package/dist/lib/staleness/checkers/hooks.js +1 -1
  496. package/dist/lib/staleness/detectors/permissions.js +0 -23
  497. package/dist/lib/staleness/detectors/plugins.js +1 -1
  498. package/dist/lib/staleness/fingerprint.js +1 -1
  499. package/dist/lib/staleness/layers.d.ts +1 -1
  500. package/dist/lib/staleness/layers.js +1 -1
  501. package/dist/lib/staleness/writers/mcp.js +3 -1
  502. package/dist/lib/staleness/writers/plugins.js +1 -1
  503. package/dist/lib/staleness/writers/types.d.ts +8 -0
  504. package/dist/lib/startup/command-registry.d.ts +6 -147
  505. package/dist/lib/startup/command-registry.js +40 -303
  506. package/dist/lib/startup/dev-build.d.ts +0 -21
  507. package/dist/lib/startup/dev-build.js +29 -8
  508. package/dist/lib/state.d.ts +19 -1
  509. package/dist/lib/state.js +120 -51
  510. package/dist/lib/subagents.js +1 -1
  511. package/dist/lib/sync-status.js +1 -1
  512. package/dist/lib/sync-umbrella.d.ts +6 -1
  513. package/dist/lib/sync-umbrella.js +9 -4
  514. package/dist/lib/teams/agents.js +2 -2
  515. package/dist/lib/teams/registry.js +1 -1
  516. package/dist/lib/terminal/backends/vscodium-agent.js +1 -1
  517. package/dist/lib/terminal/engine.js +1 -1
  518. package/dist/lib/terminal/index.d.ts +4 -0
  519. package/dist/lib/terminal/index.js +3 -0
  520. package/dist/lib/terminal/inject.d.ts +2 -2
  521. package/dist/lib/terminal/inject.js +2 -2
  522. package/dist/lib/terminal/transport.js +1 -1
  523. package/dist/lib/tmux/index.d.ts +1 -1
  524. package/dist/lib/tmux/index.js +1 -1
  525. package/dist/lib/tmux/session.d.ts +21 -5
  526. package/dist/lib/tmux/session.js +76 -22
  527. package/dist/lib/triggers/handlers.d.ts +38 -3
  528. package/dist/lib/triggers/handlers.js +58 -7
  529. package/dist/lib/triggers/webhook.d.ts +113 -5
  530. package/dist/lib/triggers/webhook.js +223 -44
  531. package/dist/lib/types.d.ts +19 -7
  532. package/dist/lib/usage-fleet.d.ts +1 -1
  533. package/dist/lib/usage-fleet.js +1 -1
  534. package/dist/lib/usage-refresh.d.ts +1 -1
  535. package/dist/lib/usage-refresh.js +3 -3
  536. package/dist/lib/version-duplicates.js +2 -2
  537. package/dist/lib/view-types.d.ts +56 -0
  538. package/dist/lib/view-types.js +1 -0
  539. package/dist/lib/watchdog/rotate.d.ts +2 -2
  540. package/dist/lib/watchdog/rotate.js +3 -3
  541. package/dist/lib/watchdog/runner.d.ts +2 -3
  542. package/dist/lib/watchdog/runner.js +3 -4
  543. package/dist/lib/workflows.js +1 -1
  544. package/dist/lib/wrap.d.ts +33 -0
  545. package/dist/lib/wrap.js +70 -0
  546. package/package.json +2 -1
  547. package/scripts/postinstall.js +2 -2
  548. package/dist/commands/bench.d.ts +0 -2
  549. package/dist/commands/bench.js +0 -101
  550. package/dist/commands/cp.d.ts +0 -84
  551. package/dist/commands/cp.js +0 -231
  552. package/dist/commands/login.d.ts +0 -2
  553. package/dist/lib/resources/commands.d.ts +0 -46
  554. package/dist/lib/resources/commands.js +0 -211
  555. package/dist/lib/resources/hooks.d.ts +0 -16
  556. package/dist/lib/resources/hooks.js +0 -153
  557. package/dist/lib/resources/mcp.d.ts +0 -34
  558. package/dist/lib/resources/mcp.js +0 -250
  559. package/dist/lib/resources/memory.d.ts +0 -15
  560. package/dist/lib/resources/memory.js +0 -46
  561. package/dist/lib/resources/permissions.d.ts +0 -13
  562. package/dist/lib/resources/permissions.js +0 -202
  563. package/dist/lib/resources/rules.d.ts +0 -46
  564. package/dist/lib/resources/rules.js +0 -179
  565. package/dist/lib/resources/skills.d.ts +0 -37
  566. package/dist/lib/resources/skills.js +0 -247
  567. package/dist/lib/resources/subagents.d.ts +0 -46
  568. package/dist/lib/resources/subagents.js +0 -202
  569. /package/dist/lib/{feed.d.ts → feed/feed.d.ts} +0 -0
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Consent gate for driving THIS machine's browser from another fleet machine.
3
3
  *
4
- * `browser --host <device>` routes a browser command to `<device>` over SSH (the
4
+ * `browser --device <device>` routes a browser command to `<device>` over SSH (the
5
5
  * fleet passthrough) and runs `agents browser ...` there. Every such remote
6
6
  * invocation carries the {@link FLEET_REMOTE_ENV} marker, set once at the fleet
7
7
  * dispatch site (`maybeRunOnHost`). A machine only accepts being driven when its
@@ -15,7 +15,7 @@
15
15
  import { getConfigValue } from '../device-config.js';
16
16
  /** Env marker set on every remote `agents` invocation by `buildRemoteAgentsInvocation`. */
17
17
  export const FLEET_REMOTE_ENV = 'AGENTS_FLEET_REMOTE';
18
- /** True when this process was dispatched to this machine by a fleet `--host` run. */
18
+ /** True when this process was dispatched to this machine by a fleet `--device` run. */
19
19
  export function isFleetRemoteInvocation(env = process.env) {
20
20
  return env[FLEET_REMOTE_ENV] === '1';
21
21
  }
@@ -42,7 +42,7 @@ export function assertRemoteControlAllowed(opts) {
42
42
  if (enabled)
43
43
  return;
44
44
  const who = env.AGENTS_ACTOR_HOST || env.AGENTS_ACTOR || 'A fleet machine';
45
- throw new Error(`${who} tried to drive this machine's browser over \`browser --host\`, but remote ` +
45
+ throw new Error(`${who} tried to drive this machine's browser over \`browser --device\`, but remote ` +
46
46
  `browser control is off here. To allow it, run on THIS machine:\n` +
47
47
  ` agents browser remote-control on`);
48
48
  }
@@ -1,3 +1,4 @@
1
+ import { type ProfileScope } from './profiles.js';
1
2
  /**
2
3
  * Per-profile runtime files we persist under
3
4
  * `~/.agents/.cache/browser/<composite>/`:
@@ -114,3 +115,81 @@ export declare function reapOrphanedProcesses(): {
114
115
  reaped: number;
115
116
  details: string[];
116
117
  };
118
+ /**
119
+ * True when ANY cache dir belonging to this profile still has a live browser or
120
+ * SSH tunnel, or an open task. The composite naming (`<name>@<endpoint>`) means
121
+ * one profile can own several runtime dirs, so checking only
122
+ * `getProfileRuntimeDir(name)` would miss a running composite — and prune must
123
+ * never remove a profile that is in use.
124
+ *
125
+ * A recorded `pid: 0` means "attached to a browser someone else launched", so it
126
+ * is not our process to protect; an open task on that dir still counts as in use.
127
+ */
128
+ export declare function isProfileInUse(profileName: string): boolean;
129
+ /** Why a profile is considered dead. */
130
+ export type PruneReason = 'binary-missing' | 'never-used';
131
+ export interface PruneCandidate {
132
+ name: string;
133
+ scope: ProfileScope;
134
+ reason: PruneReason;
135
+ /** Cache dirs that would be removed along with the config entry. */
136
+ cacheDirs: string[];
137
+ }
138
+ export interface PrunePlan {
139
+ /** Profiles that would be (or were) removed. */
140
+ candidates: PruneCandidate[];
141
+ /** Profiles deliberately left alone, with the guard that kept them. */
142
+ kept: Array<{
143
+ name: string;
144
+ scope: ProfileScope;
145
+ why: string;
146
+ }>;
147
+ }
148
+ export declare const PRUNE_REASON_TEXT: Record<PruneReason, string>;
149
+ /**
150
+ * Decide which browser profiles are dead, WITHOUT touching anything.
151
+ * `pruneProfiles` executes exactly this plan, so `--dry-run` and the real run
152
+ * can never disagree.
153
+ *
154
+ * Dead means one of {@link PruneReason}: the configured browser cannot launch
155
+ * here at all, or the profile has never been started so nothing on this disk
156
+ * refers to it. That second reason is what actually reclaims agent-minted
157
+ * throwaway profiles (RUSH-2716) — they are created for an installed browser, so
158
+ * only "never started" identifies them.
159
+ *
160
+ * Four guards, and each exists because removing that profile would be wrong
161
+ * rather than merely tidy:
162
+ * - **in use** — a live browser, SSH tunnel, or open task on any of its dirs.
163
+ * - **the configured default** — this machine resolves a bare
164
+ * `agents browser start` to it; removing it breaks that command.
165
+ * - **`default`** — auto-regenerated by `ensureDefaultBrowserProfile`, so
166
+ * pruning it is pure churn.
167
+ * - **fleet-synced** — deleting one removes it from EVERY machine, so it takes
168
+ * the explicit `includeFleet` opt-in.
169
+ *
170
+ * Known limitation: `BrowserProfileConfig` records no creation time, so a
171
+ * profile created seconds ago and not yet started is indistinguishable from an
172
+ * abandoned one and is reported `never-used`. That is why the verb is explicit
173
+ * and `--dry-run` exists.
174
+ */
175
+ export declare function planProfilePrune(profiles: Array<{
176
+ name: string;
177
+ scope: ProfileScope;
178
+ launchableHere: boolean;
179
+ }>, opts?: {
180
+ includeFleet?: boolean;
181
+ configuredDefault?: string;
182
+ }): PrunePlan;
183
+ /**
184
+ * Build the prune plan from live config. Split from {@link planProfilePrune} so
185
+ * the decision rules stay unit-testable without a configured machine.
186
+ */
187
+ export declare function buildProfilePrunePlan(opts?: {
188
+ includeFleet?: boolean;
189
+ }): Promise<PrunePlan>;
190
+ /**
191
+ * Execute a prune plan: drop each candidate's config entry and wipe its cache
192
+ * dirs. Returns the plan that was applied so the caller can report exactly what
193
+ * went, matching what `--dry-run` printed.
194
+ */
195
+ export declare function pruneProfiles(plan: PrunePlan): Promise<PrunePlan>;
@@ -1,7 +1,7 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
3
  import { execFileSync } from 'child_process';
4
- import { getProfileRuntimeDir, getBrowserRuntimeDir } from './profiles.js';
4
+ import { getProfileRuntimeDir, getBrowserRuntimeDir, listProfilesWithScope, getConfiguredDefaultProfileName, isProfileLaunchableHere, deleteProfile, DEFAULT_BROWSER_PROFILE_NAME, } from './profiles.js';
5
5
  const PID_FILE = 'pid';
6
6
  const PORT_FILE = 'port';
7
7
  const COMMAND_FILE = 'command';
@@ -247,6 +247,124 @@ export function reapOrphanedProcesses() {
247
247
  }
248
248
  return { reaped, details };
249
249
  }
250
+ /**
251
+ * True when ANY cache dir belonging to this profile still has a live browser or
252
+ * SSH tunnel, or an open task. The composite naming (`<name>@<endpoint>`) means
253
+ * one profile can own several runtime dirs, so checking only
254
+ * `getProfileRuntimeDir(name)` would miss a running composite — and prune must
255
+ * never remove a profile that is in use.
256
+ *
257
+ * A recorded `pid: 0` means "attached to a browser someone else launched", so it
258
+ * is not our process to protect; an open task on that dir still counts as in use.
259
+ */
260
+ export function isProfileInUse(profileName) {
261
+ for (const dir of listProfileCacheDirs(profileName)) {
262
+ const entry = path.basename(dir);
263
+ if (readTaskCount(dir) > 0)
264
+ return true;
265
+ const meta = readProfileRuntimeMeta(entry);
266
+ if (!meta)
267
+ continue;
268
+ if (meta.pid && isProcessAlive(meta.pid, meta.command))
269
+ return true;
270
+ if (meta.tunnelPid && isProcessAlive(meta.tunnelPid, 'ssh'))
271
+ return true;
272
+ }
273
+ return false;
274
+ }
275
+ export const PRUNE_REASON_TEXT = {
276
+ 'binary-missing': 'its browser/binary is not installed on this machine',
277
+ 'never-used': 'it has never been started (no runtime dir)',
278
+ };
279
+ /**
280
+ * Decide which browser profiles are dead, WITHOUT touching anything.
281
+ * `pruneProfiles` executes exactly this plan, so `--dry-run` and the real run
282
+ * can never disagree.
283
+ *
284
+ * Dead means one of {@link PruneReason}: the configured browser cannot launch
285
+ * here at all, or the profile has never been started so nothing on this disk
286
+ * refers to it. That second reason is what actually reclaims agent-minted
287
+ * throwaway profiles (RUSH-2716) — they are created for an installed browser, so
288
+ * only "never started" identifies them.
289
+ *
290
+ * Four guards, and each exists because removing that profile would be wrong
291
+ * rather than merely tidy:
292
+ * - **in use** — a live browser, SSH tunnel, or open task on any of its dirs.
293
+ * - **the configured default** — this machine resolves a bare
294
+ * `agents browser start` to it; removing it breaks that command.
295
+ * - **`default`** — auto-regenerated by `ensureDefaultBrowserProfile`, so
296
+ * pruning it is pure churn.
297
+ * - **fleet-synced** — deleting one removes it from EVERY machine, so it takes
298
+ * the explicit `includeFleet` opt-in.
299
+ *
300
+ * Known limitation: `BrowserProfileConfig` records no creation time, so a
301
+ * profile created seconds ago and not yet started is indistinguishable from an
302
+ * abandoned one and is reported `never-used`. That is why the verb is explicit
303
+ * and `--dry-run` exists.
304
+ */
305
+ export function planProfilePrune(profiles, opts = {}) {
306
+ const plan = { candidates: [], kept: [] };
307
+ for (const { name, scope, launchableHere } of profiles) {
308
+ const keep = (why) => { plan.kept.push({ name, scope, why }); };
309
+ if (scope === 'fleet' && !opts.includeFleet) {
310
+ keep('fleet-synced (pass --fleet to include it)');
311
+ continue;
312
+ }
313
+ if (name === DEFAULT_BROWSER_PROFILE_NAME) {
314
+ keep('the auto-detected default profile');
315
+ continue;
316
+ }
317
+ if (opts.configuredDefault && name === opts.configuredDefault) {
318
+ keep("this machine's configured default profile");
319
+ continue;
320
+ }
321
+ if (isProfileInUse(name)) {
322
+ keep('in use (live browser, tunnel, or open task)');
323
+ continue;
324
+ }
325
+ const cacheDirs = listProfileCacheDirs(name);
326
+ if (!launchableHere) {
327
+ plan.candidates.push({ name, scope, reason: 'binary-missing', cacheDirs });
328
+ continue;
329
+ }
330
+ if (cacheDirs.length === 0) {
331
+ plan.candidates.push({ name, scope, reason: 'never-used', cacheDirs });
332
+ continue;
333
+ }
334
+ keep('healthy (browser installed, has runtime state)');
335
+ }
336
+ return plan;
337
+ }
338
+ /**
339
+ * Build the prune plan from live config. Split from {@link planProfilePrune} so
340
+ * the decision rules stay unit-testable without a configured machine.
341
+ */
342
+ export async function buildProfilePrunePlan(opts = {}) {
343
+ const scoped = await listProfilesWithScope();
344
+ return planProfilePrune(scoped.map(({ profile, scope }) => ({
345
+ name: profile.name,
346
+ scope,
347
+ launchableHere: isProfileLaunchableHere(profile),
348
+ })), { includeFleet: opts.includeFleet, configuredDefault: getConfiguredDefaultProfileName() });
349
+ }
350
+ /**
351
+ * Execute a prune plan: drop each candidate's config entry and wipe its cache
352
+ * dirs. Returns the plan that was applied so the caller can report exactly what
353
+ * went, matching what `--dry-run` printed.
354
+ */
355
+ export async function pruneProfiles(plan) {
356
+ for (const candidate of plan.candidates) {
357
+ await deleteProfile(candidate.name);
358
+ for (const dir of candidate.cacheDirs) {
359
+ try {
360
+ fs.rmSync(dir, { recursive: true, force: true });
361
+ }
362
+ catch { /* already gone */ }
363
+ }
364
+ removeProfileCache(candidate.name);
365
+ }
366
+ return plan;
367
+ }
250
368
  function matchesCommand(pid, expectedCommand) {
251
369
  const out = liveProcessCommand(pid);
252
370
  if (!out)
@@ -1,5 +1,6 @@
1
+ import { CDPClient } from './cdp.js';
1
2
  import { type ResolvedDomainSkill } from './domain-skills.js';
2
- import { type Task, type TabInfo, type ProfileStatus, type HistoricalTask, type ReapResult } from './types.js';
3
+ import { type Task, type TabInfo, type ProfileStatus, type BrowserType, type HistoricalTask, type ReapResult } from './types.js';
3
4
  import { type ReapOptions } from './hygiene.js';
4
5
  import { type RefOpts, type RefNode } from './refs.js';
5
6
  import type { TargetFilter } from './types.js';
@@ -44,6 +45,76 @@ export declare function pickWindowTarget<T extends {
44
45
  export declare function parseSinceUntil(s: string): Date;
45
46
  export declare function readNewestMatchingRemoteFileCommand(dir: string, prefix: string, tailLines: number): string;
46
47
  export declare function readNewestMatchingFile(dir: string, prefix: string, tailLines: number): string;
48
+ interface ProfileConnection {
49
+ cdp: CDPClient;
50
+ port: number;
51
+ pid: number;
52
+ electron?: boolean;
53
+ /**
54
+ * The profile's declared browser family. Load-bearing for Arc: Arc answers
55
+ * `Browser.getVersion` but exposes zero CDP page targets and CRASHES on
56
+ * `Target.createTarget` (verified live, PR #2778), so any tab-creating path
57
+ * must refuse rather than crash the user's Arc. See `createPageTarget`.
58
+ */
59
+ browserType?: BrowserType;
60
+ /** Raw `url:<v>` / `title:<v>` filter copied from the profile config. */
61
+ targetFilter?: string;
62
+ /**
63
+ * The composite key this connection is registered under in `this.connections`
64
+ * (`<profile>` / `<profile>@<endpoint>` / `<profile>.<fork>`). It is the same
65
+ * name used to key the profile's runtime dir, so downloads and session
66
+ * captures land under `.cache/browser/<profileName>/`. Set at registration.
67
+ */
68
+ profileName?: string;
69
+ /**
70
+ * Bare YAML profile name without the `@<endpoint>` suffix. Kept so
71
+ * `status --profile comet-local` matches the composite connection key
72
+ * `comet-local@endpoint-0` without prefix-matching wrong browsers.
73
+ */
74
+ bareName?: string;
75
+ forkedFrom?: string;
76
+ tasks: Map<string, Task>;
77
+ windowId?: string;
78
+ targetCache?: {
79
+ targets: TargetInfo[];
80
+ ts: number;
81
+ };
82
+ sessionCache: Map<string, string>;
83
+ /**
84
+ * Connection-specific teardown (e.g. killing the SSH tunnel for an ssh://
85
+ * profile). Must be called whenever the connection is removed from
86
+ * `this.connections`, otherwise the tunnel leaks across daemon restarts
87
+ * and hijacks future `cdp://127.0.0.1:N` profiles on the same local port.
88
+ */
89
+ cleanup?: () => void;
90
+ }
91
+ /** Join error lines so callers get a next command, not a dead-end message. */
92
+ export declare function actionable(...lines: string[]): string;
93
+ /**
94
+ * Arc answers `Browser.getVersion` (so a connection succeeds) but exposes zero
95
+ * CDP page targets via every discovery method and CRASHES when a new tab is
96
+ * requested via `Target.createTarget` (verified live, PR #2778). It is therefore
97
+ * not drivable. This is the single clear, actionable error every tab-creating
98
+ * path throws instead of crashing the user's Arc window.
99
+ */
100
+ export declare function arcNotDrivableError(profileName?: string): Error;
101
+ /** Derive a human label from an explicit title or a navigated URL. */
102
+ export declare function deriveTaskLabel(opts: {
103
+ title?: string;
104
+ url?: string;
105
+ existing?: string;
106
+ }): string;
107
+ /**
108
+ * True when `key` is the bare profile name or one of its composite endpoint
109
+ * keys (`name@endpoint`). Used by status/stop so `comet-local` matches
110
+ * `comet-local@endpoint-0`.
111
+ */
112
+ export declare function connectionKeyMatchesProfile(key: string, profileName: string): boolean;
113
+ type TargetInfo = {
114
+ targetId: string;
115
+ url?: string;
116
+ title?: string;
117
+ };
47
118
  /** Describes a ref that was re-resolved from a drifted integer via its cached descriptor. */
48
119
  export interface HealInfo {
49
120
  from: number;
@@ -94,6 +165,8 @@ export declare class BrowserService {
94
165
  launchId?: string;
95
166
  /** Calling agent session, forwarded from the CLI (see IPCRequest.sessionId). */
96
167
  sessionId?: string;
168
+ /** Explicit human label (`--title`). */
169
+ title?: string;
97
170
  }): Promise<{
98
171
  task: string;
99
172
  name: string;
@@ -264,6 +337,7 @@ export declare class BrowserService {
264
337
  };
265
338
  status(profileName?: string): Promise<ProfileStatus[]>;
266
339
  private reconcileFromDisk;
340
+ private profileStatusFromDisk;
267
341
  setViewport(taskId: string, width: number, height: number, options?: {
268
342
  mobile?: boolean;
269
343
  deviceScaleFactor?: number;
@@ -333,9 +407,47 @@ export declare class BrowserService {
333
407
  private connectProfile;
334
408
  private connectEndpoint;
335
409
  private enableDomains;
410
+ /**
411
+ * The single path that opens a new CDP page/window target. It exists so the
412
+ * Arc guard lives in exactly one place: `Target.createTarget` crashes Arc
413
+ * (verified, PR #2778), so an Arc connection throws a clear, actionable error
414
+ * here instead of every call site re-checking. Every drivable Chromium-family
415
+ * browser goes straight through.
416
+ */
417
+ private createPageTarget;
336
418
  private getOrCreateWindow;
337
419
  private hasTaskNamed;
338
- private generateUniqueTaskName;
420
+ /** Map key for a task on a connection (tasks are keyed by `name`). */
421
+ private taskMapKey;
422
+ /** Find a task by map key, id, or name on one connection. */
423
+ private lookupTaskOnConn;
424
+ private maybeUpdateLabelFromUrl;
425
+ /**
426
+ * Resolve a task for a page/close verb.
427
+ *
428
+ * - explicit `task` handle → look up (with disk rehydrate on RAM miss)
429
+ * - no handle, exactly one live task for this caller → use it
430
+ * - no handle, multiple for this caller → error listing them + `--task`
431
+ * - no handle, zero for this caller, createIfMissing → start a new task
432
+ * - no handle, zero, !createIfMissing → return null (caller reports "nothing to close")
433
+ */
434
+ resolveOrCreateTask(opts: {
435
+ task?: string;
436
+ profile?: string;
437
+ actor?: string;
438
+ launchId?: string;
439
+ sessionId?: string;
440
+ createIfMissing: boolean;
441
+ title?: string;
442
+ url?: string;
443
+ }): Promise<{
444
+ conn: ProfileConnection;
445
+ task: Task;
446
+ profileName: string;
447
+ created: boolean;
448
+ } | null>;
449
+ private listTasksForCaller;
450
+ private currentUrlHint;
339
451
  /**
340
452
  * Mark a task as active, so the reaper's idle window measures time since the
341
453
  * last real use rather than time since `start` (RUSH-2622).
@@ -356,6 +468,28 @@ export declare class BrowserService {
356
468
  */
357
469
  private touchTask;
358
470
  private findTask;
471
+ /**
472
+ * Soft-attach to an already-running browser for a runtime dir.
473
+ *
474
+ * Never launches a browser and never clears pid/port files on failure —
475
+ * `connectProfile` does both, which made `status()` wipe disk state when
476
+ * CDP was unreachable (CI / post-reaper) and then return an empty list.
477
+ * Returns null when nothing is speaking CDP so callers can fall through
478
+ * to disk reconcile.
479
+ */
480
+ private attachRunningProfile;
481
+ /**
482
+ * Reconnect every profile runtime dir that still has a live browser and
483
+ * tasks.json entries. Used before identity-based resolution so a daemon
484
+ * restart does not make the caller's tasks invisible.
485
+ */
486
+ private rehydrateAllFromDisk;
487
+ /**
488
+ * On a RAM miss, scan profile runtime dirs for a tasks.json entry matching
489
+ * `taskId`, soft-attach when CDP is still up, and register the connection.
490
+ * Does not launch browsers or clear runtime files.
491
+ */
492
+ private rehydrateTaskFromDisk;
359
493
  private getTabsForTask;
360
494
  private getProfileStatus;
361
495
  private getTarget;
@@ -366,3 +500,4 @@ export declare class BrowserService {
366
500
  private saveToHistory;
367
501
  getHistory(limit?: number): Promise<HistoricalTask[]>;
368
502
  }
503
+ export {};