@phnx-labs/agents-cli 1.22.35 → 1.22.37

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 (487) hide show
  1. package/CHANGELOG.md +666 -2
  2. package/README.md +75 -35
  3. package/dist/bin/agents +0 -0
  4. package/dist/bootstrap.d.ts +15 -0
  5. package/dist/bootstrap.js +1211 -0
  6. package/dist/commands/accounts.d.ts +4 -11
  7. package/dist/commands/accounts.js +159 -27
  8. package/dist/commands/attach.js +17 -4
  9. package/dist/commands/audit.d.ts +8 -8
  10. package/dist/commands/audit.js +57 -47
  11. package/dist/commands/browser.js +15 -11
  12. package/dist/commands/cloud.js +1 -1
  13. package/dist/commands/commands.js +0 -11
  14. package/dist/commands/computer-actions.js +33 -0
  15. package/dist/commands/computer-sessions-picker.d.ts +21 -0
  16. package/dist/commands/computer-sessions-picker.js +141 -0
  17. package/dist/commands/computer.d.ts +16 -0
  18. package/dist/commands/computer.js +37 -0
  19. package/dist/commands/config.d.ts +17 -0
  20. package/dist/commands/config.js +401 -0
  21. package/dist/commands/cp.d.ts +84 -0
  22. package/dist/commands/cp.js +231 -0
  23. package/dist/commands/daemon.js +243 -14
  24. package/dist/commands/detach-core.d.ts +1 -1
  25. package/dist/commands/detach-core.js +12 -2
  26. package/dist/commands/detach.js +1 -1
  27. package/dist/commands/doctor.js +64 -5
  28. package/dist/commands/events.d.ts +24 -12
  29. package/dist/commands/events.js +144 -28
  30. package/dist/commands/exec.js +85 -41
  31. package/dist/commands/feed.d.ts +1 -1
  32. package/dist/commands/feed.js +16 -8
  33. package/dist/commands/focus.d.ts +33 -1
  34. package/dist/commands/focus.js +177 -17
  35. package/dist/commands/funnel.d.ts +1 -1
  36. package/dist/commands/go.js +9 -8
  37. package/dist/commands/harness-wizard.d.ts +1 -0
  38. package/dist/commands/harness-wizard.js +18 -20
  39. package/dist/commands/harness.d.ts +2 -0
  40. package/dist/commands/harness.js +59 -26
  41. package/dist/commands/hooks.js +0 -11
  42. package/dist/commands/inspect.d.ts +94 -1
  43. package/dist/commands/inspect.js +866 -40
  44. package/dist/commands/lease.d.ts +4 -4
  45. package/dist/commands/lease.js +6 -6
  46. package/dist/commands/login.js +0 -13
  47. package/dist/commands/logs.d.ts +2 -2
  48. package/dist/commands/logs.js +2 -2
  49. package/dist/commands/mcp.js +7 -2
  50. package/dist/commands/memory.js +7 -2
  51. package/dist/commands/message.d.ts +1 -1
  52. package/dist/commands/message.js +37 -6
  53. package/dist/commands/models.js +4 -0
  54. package/dist/commands/monitors.d.ts +0 -1
  55. package/dist/commands/monitors.js +199 -16
  56. package/dist/commands/open.d.ts +18 -0
  57. package/dist/commands/open.js +57 -0
  58. package/dist/commands/packages.js +2 -107
  59. package/dist/commands/plugins.js +6 -3
  60. package/dist/commands/profiles.d.ts +1 -0
  61. package/dist/commands/profiles.js +16 -160
  62. package/dist/commands/projects.d.ts +28 -0
  63. package/dist/commands/projects.js +125 -5
  64. package/dist/commands/reconnect.js +9 -3
  65. package/dist/commands/repo.js +42 -1
  66. package/dist/commands/resource-view.d.ts +17 -0
  67. package/dist/commands/resource-view.js +36 -14
  68. package/dist/commands/resume.js +9 -2
  69. package/dist/commands/routines.d.ts +0 -2
  70. package/dist/commands/routines.js +473 -289
  71. package/dist/commands/secrets.js +52 -9
  72. package/dist/commands/sessions-export.d.ts +47 -0
  73. package/dist/commands/sessions-export.js +116 -6
  74. package/dist/commands/sessions-import.d.ts +17 -0
  75. package/dist/commands/sessions-import.js +114 -6
  76. package/dist/commands/sessions-migrate.d.ts +27 -0
  77. package/dist/commands/sessions-migrate.js +50 -9
  78. package/dist/commands/sessions-picker.js +23 -4
  79. package/dist/commands/sessions-resume.d.ts +5 -3
  80. package/dist/commands/sessions-resume.js +30 -8
  81. package/dist/commands/sessions-watch.d.ts +2 -0
  82. package/dist/commands/sessions-watch.js +53 -0
  83. package/dist/commands/sessions.d.ts +66 -3
  84. package/dist/commands/sessions.js +298 -47
  85. package/dist/commands/set.d.ts +1 -1
  86. package/dist/commands/set.js +2 -2
  87. package/dist/commands/setup-browser.js +2 -2
  88. package/dist/commands/setup-mine.js +0 -1
  89. package/dist/commands/setup-preferences.js +1 -1
  90. package/dist/commands/setup-share.js +34 -4
  91. package/dist/commands/setup.d.ts +5 -0
  92. package/dist/commands/setup.js +26 -0
  93. package/dist/commands/share.d.ts +67 -0
  94. package/dist/commands/share.js +275 -12
  95. package/dist/commands/skills.js +0 -11
  96. package/dist/commands/snapshot.js +1 -1
  97. package/dist/commands/ssh.d.ts +18 -0
  98. package/dist/commands/ssh.js +549 -210
  99. package/dist/commands/sync.d.ts +5 -0
  100. package/dist/commands/sync.js +212 -32
  101. package/dist/commands/teams.d.ts +13 -0
  102. package/dist/commands/teams.js +187 -30
  103. package/dist/commands/tickets.d.ts +2 -0
  104. package/dist/commands/tickets.js +43 -0
  105. package/dist/commands/update.js +2 -4
  106. package/dist/commands/usage.js +5 -3
  107. package/dist/commands/versions.js +11 -5
  108. package/dist/commands/view.js +15 -7
  109. package/dist/commands/webhook.d.ts +2 -2
  110. package/dist/commands/webhook.js +7 -7
  111. package/dist/index.d.ts +18 -2
  112. package/dist/index.js +53 -1264
  113. package/dist/lib/account-catalog.d.ts +18 -0
  114. package/dist/lib/account-catalog.js +38 -0
  115. package/dist/lib/account-provider-registry.d.ts +18 -0
  116. package/dist/lib/account-provider-registry.js +59 -0
  117. package/dist/lib/account-registry.d.ts +40 -0
  118. package/dist/lib/account-registry.js +239 -0
  119. package/dist/lib/account-schema.d.ts +44 -0
  120. package/dist/lib/account-schema.js +91 -0
  121. package/dist/lib/account-state-service.d.ts +21 -0
  122. package/dist/lib/account-state-service.js +60 -0
  123. package/dist/lib/activity.d.ts +1 -1
  124. package/dist/lib/activity.js +8 -1
  125. package/dist/lib/add-dir.d.ts +80 -0
  126. package/dist/lib/add-dir.js +241 -0
  127. package/dist/lib/agent-cli-commands.d.ts +11 -0
  128. package/dist/lib/agent-cli-commands.js +30 -0
  129. package/dist/lib/agents.js +44 -36
  130. package/dist/lib/answer-router.js +1 -1
  131. package/dist/lib/audit/log.d.ts +10 -27
  132. package/dist/lib/audit/log.js +20 -33
  133. package/dist/lib/auth-health.d.ts +9 -2
  134. package/dist/lib/auth-health.js +42 -9
  135. package/dist/lib/auto-pull-worker.js +7 -3
  136. package/dist/lib/auto-pull.d.ts +44 -3
  137. package/dist/lib/auto-pull.js +88 -5
  138. package/dist/lib/binary-shadow.d.ts +28 -0
  139. package/dist/lib/binary-shadow.js +121 -0
  140. package/dist/lib/brand.js +9 -3
  141. package/dist/lib/browser/ipc.d.ts +30 -0
  142. package/dist/lib/browser/ipc.js +81 -4
  143. package/dist/lib/browser/profiles.d.ts +3 -2
  144. package/dist/lib/browser/profiles.js +65 -22
  145. package/dist/lib/browser/service.d.ts +4 -0
  146. package/dist/lib/browser/service.js +30 -3
  147. package/dist/lib/browser/sessions-list.d.ts +22 -2
  148. package/dist/lib/browser/sessions-list.js +54 -6
  149. package/dist/lib/browser/stream.d.ts +2 -0
  150. package/dist/lib/browser/stream.js +1 -0
  151. package/dist/lib/browser/types.d.ts +19 -0
  152. package/dist/lib/byok-usage.d.ts +9 -2
  153. package/dist/lib/byok-usage.js +133 -31
  154. package/dist/lib/cli-entry.d.ts +11 -0
  155. package/dist/lib/cli-entry.js +46 -0
  156. package/dist/lib/cloud/host.d.ts +1 -1
  157. package/dist/lib/cloud/host.js +2 -2
  158. package/dist/lib/cloud/registry.js +1 -1
  159. package/dist/lib/cloud/types.d.ts +1 -1
  160. package/dist/lib/commands.d.ts +2 -0
  161. package/dist/lib/commands.js +2 -0
  162. package/dist/lib/computer/sessions-list.d.ts +150 -0
  163. package/dist/lib/computer/sessions-list.js +363 -0
  164. package/dist/lib/config-keys.d.ts +86 -0
  165. package/dist/lib/config-keys.js +193 -0
  166. package/dist/lib/config-machine-keys.d.ts +12 -0
  167. package/dist/lib/config-machine-keys.js +17 -0
  168. package/dist/lib/config-transfer.js +3 -4
  169. package/dist/lib/crabbox/cli.d.ts +2 -2
  170. package/dist/lib/crabbox/cli.js +3 -3
  171. package/dist/lib/daemon-health.d.ts +22 -0
  172. package/dist/lib/daemon-health.js +33 -3
  173. package/dist/lib/daemon-services.d.ts +50 -0
  174. package/dist/lib/daemon-services.js +147 -0
  175. package/dist/lib/daemon-ticks.d.ts +35 -66
  176. package/dist/lib/daemon-ticks.js +77 -159
  177. package/dist/lib/daemon.d.ts +72 -4
  178. package/dist/lib/daemon.js +792 -202
  179. package/dist/lib/deeplink/register.d.ts +49 -0
  180. package/dist/lib/deeplink/register.js +253 -0
  181. package/dist/lib/deeplink/url.d.ts +34 -0
  182. package/dist/lib/deeplink/url.js +78 -0
  183. package/dist/lib/device-config.d.ts +124 -29
  184. package/dist/lib/device-config.js +346 -141
  185. package/dist/lib/devices/config-migration.d.ts +42 -0
  186. package/dist/lib/devices/config-migration.js +203 -0
  187. package/dist/lib/devices/connect.js +14 -7
  188. package/dist/lib/devices/doctor-findings.d.ts +4 -1
  189. package/dist/lib/devices/doctor-findings.js +20 -1
  190. package/dist/lib/devices/harness-inventory.d.ts +11 -2
  191. package/dist/lib/devices/harness-inventory.js +0 -0
  192. package/dist/lib/devices/health.d.ts +1 -1
  193. package/dist/lib/devices/health.js +1 -1
  194. package/dist/lib/devices/pending.d.ts +22 -1
  195. package/dist/lib/devices/pending.js +67 -2
  196. package/dist/lib/devices/registry.d.ts +0 -25
  197. package/dist/lib/devices/registry.js +2 -83
  198. package/dist/lib/devices/resolve-profile.d.ts +20 -0
  199. package/dist/lib/devices/resolve-profile.js +44 -0
  200. package/dist/lib/devices/rollout-verify.d.ts +101 -0
  201. package/dist/lib/devices/rollout-verify.js +193 -0
  202. package/dist/lib/devices/ssh-config.js +10 -6
  203. package/dist/lib/event-families.d.ts +28 -0
  204. package/dist/lib/event-families.js +159 -0
  205. package/dist/lib/event-stream.d.ts +9 -1
  206. package/dist/lib/event-stream.js +26 -9
  207. package/dist/lib/events.d.ts +9 -1
  208. package/dist/lib/events.js +21 -6
  209. package/dist/lib/exec.d.ts +30 -0
  210. package/dist/lib/exec.js +219 -121
  211. package/dist/lib/feed-broadcast.d.ts +25 -0
  212. package/dist/lib/feed-broadcast.js +33 -0
  213. package/dist/lib/feed.d.ts +1 -1
  214. package/dist/lib/feed.js +12 -2
  215. package/dist/lib/fleet/capture.js +15 -0
  216. package/dist/lib/fleet/manifest.js +9 -0
  217. package/dist/lib/fleet/types.d.ts +9 -0
  218. package/dist/lib/fleet-status.js +10 -8
  219. package/dist/lib/git.d.ts +20 -6
  220. package/dist/lib/git.js +121 -17
  221. package/dist/lib/hosts/dispatch.d.ts +8 -3
  222. package/dist/lib/hosts/dispatch.js +29 -3
  223. package/dist/lib/hosts/logs.d.ts +2 -2
  224. package/dist/lib/hosts/logs.js +2 -2
  225. package/dist/lib/hosts/option.js +1 -1
  226. package/dist/lib/hosts/passthrough.d.ts +2 -3
  227. package/dist/lib/hosts/passthrough.js +10 -24
  228. package/dist/lib/hosts/progress.js +2 -2
  229. package/dist/lib/hosts/providers/devices.d.ts +3 -3
  230. package/dist/lib/hosts/providers/devices.js +18 -12
  231. package/dist/lib/hosts/ready.d.ts +5 -1
  232. package/dist/lib/hosts/ready.js +9 -3
  233. package/dist/lib/hosts/reconcile.d.ts +2 -2
  234. package/dist/lib/hosts/reconcile.js +2 -2
  235. package/dist/lib/hosts/registry.js +14 -9
  236. package/dist/lib/hosts/remote-cmd.js +1 -1
  237. package/dist/lib/hosts/remote-os.d.ts +9 -6
  238. package/dist/lib/hosts/remote-os.js +13 -6
  239. package/dist/lib/hosts/routing-flag.d.ts +23 -0
  240. package/dist/lib/hosts/routing-flag.js +41 -0
  241. package/dist/lib/hosts/run-target.js +1 -1
  242. package/dist/lib/hosts/session-index.js +1 -1
  243. package/dist/lib/hosts/tasks.d.ts +6 -6
  244. package/dist/lib/hosts/tasks.js +4 -4
  245. package/dist/lib/hosts/types.js +1 -2
  246. package/dist/lib/installations/resolve.js +2 -8
  247. package/dist/lib/isolation-boundary-report.js +0 -1
  248. package/dist/lib/linear-cache.d.ts +7 -0
  249. package/dist/lib/linear-cache.js +31 -4
  250. package/dist/lib/linear-project-counts.d.ts +1 -1
  251. package/dist/lib/linear-project-counts.js +2 -3
  252. package/dist/lib/linear-projects.js +1 -1
  253. package/dist/lib/loop.d.ts +2 -2
  254. package/dist/lib/loop.js +1 -1
  255. package/dist/lib/mailbox-target.d.ts +1 -1
  256. package/dist/lib/mailbox-target.js +1 -1
  257. package/dist/lib/manifest.js +7 -4
  258. package/dist/lib/menubar/MenubarHelper.app/Contents/CodeResources +0 -0
  259. package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
  260. package/dist/lib/menubar/snapshot.d.ts +3 -2
  261. package/dist/lib/menubar/snapshot.js +6 -2
  262. package/dist/lib/migrate-fold.d.ts +33 -0
  263. package/dist/lib/migrate-fold.js +130 -0
  264. package/dist/lib/migrate.d.ts +34 -34
  265. package/dist/lib/migrate.js +106 -128
  266. package/dist/lib/model-tier-overrides.d.ts +1 -1
  267. package/dist/lib/model-tier-overrides.js +15 -2
  268. package/dist/lib/monitors/config.d.ts +17 -3
  269. package/dist/lib/monitors/config.js +52 -18
  270. package/dist/lib/monitors/engine.d.ts +32 -1
  271. package/dist/lib/monitors/engine.js +94 -11
  272. package/dist/lib/monitors/fingerprint.d.ts +46 -0
  273. package/dist/lib/monitors/fingerprint.js +100 -0
  274. package/dist/lib/monitors/remote.d.ts +47 -0
  275. package/dist/lib/monitors/remote.js +81 -0
  276. package/dist/lib/monitors/state.d.ts +39 -0
  277. package/dist/lib/monitors/state.js +56 -0
  278. package/dist/lib/onepassword.d.ts +17 -0
  279. package/dist/lib/onepassword.js +52 -22
  280. package/dist/lib/open-url.js +1 -1
  281. package/dist/lib/picker.d.ts +14 -2
  282. package/dist/lib/picker.js +35 -13
  283. package/dist/lib/placement.d.ts +1 -1
  284. package/dist/lib/placement.js +1 -1
  285. package/dist/lib/pr-land-detach.d.ts +32 -0
  286. package/dist/lib/pr-land-detach.js +79 -0
  287. package/dist/lib/profiles-presets.js +13 -0
  288. package/dist/lib/profiles.d.ts +2 -0
  289. package/dist/lib/profiles.js +44 -1
  290. package/dist/lib/project-focus.d.ts +1 -1
  291. package/dist/lib/project-focus.js +1 -1
  292. package/dist/lib/project-probe.d.ts +4 -1
  293. package/dist/lib/project-probe.js +5 -4
  294. package/dist/lib/project-resources.js +2 -18
  295. package/dist/lib/project-root.d.ts +16 -0
  296. package/dist/lib/project-root.js +20 -2
  297. package/dist/lib/projects.d.ts +20 -1
  298. package/dist/lib/projects.js +78 -1
  299. package/dist/lib/refresh-coordinator.d.ts +24 -0
  300. package/dist/lib/refresh-coordinator.js +52 -0
  301. package/dist/lib/registry.d.ts +2 -2
  302. package/dist/lib/registry.js +1 -1
  303. package/dist/lib/resource-aliases.d.ts +13 -0
  304. package/dist/lib/resource-aliases.js +26 -0
  305. package/dist/lib/resources/types.d.ts +1 -1
  306. package/dist/lib/resources.d.ts +16 -0
  307. package/dist/lib/resources.js +66 -10
  308. package/dist/lib/rotate.d.ts +3 -4
  309. package/dist/lib/rotate.js +4 -5
  310. package/dist/lib/routine-activation.d.ts +22 -2
  311. package/dist/lib/routine-activation.js +63 -16
  312. package/dist/lib/routine-context.d.ts +9 -2
  313. package/dist/lib/routine-context.js +21 -6
  314. package/dist/lib/routines-project.d.ts +58 -48
  315. package/dist/lib/routines-project.js +190 -159
  316. package/dist/lib/routines.d.ts +41 -6
  317. package/dist/lib/routines.js +92 -34
  318. package/dist/lib/run-defaults.d.ts +5 -0
  319. package/dist/lib/run-defaults.js +11 -1
  320. package/dist/lib/runner.d.ts +10 -8
  321. package/dist/lib/runner.js +122 -39
  322. package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
  323. package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
  324. package/dist/lib/secrets/agent.d.ts +10 -3
  325. package/dist/lib/secrets/agent.js +43 -8
  326. package/dist/lib/secrets/bundles.d.ts +1 -0
  327. package/dist/lib/secrets/bundles.js +92 -80
  328. package/dist/lib/secrets/index.js +32 -9
  329. package/dist/lib/secrets/install-helper.d.ts +4 -4
  330. package/dist/lib/secrets/install-helper.js +4 -4
  331. package/dist/lib/secrets/push.d.ts +40 -6
  332. package/dist/lib/secrets/push.js +58 -11
  333. package/dist/lib/secrets/read-backoff.d.ts +1 -1
  334. package/dist/lib/secrets/read-backoff.js +1 -1
  335. package/dist/lib/secrets/remote.d.ts +24 -0
  336. package/dist/lib/secrets/remote.js +54 -4
  337. package/dist/lib/self-update.d.ts +108 -0
  338. package/dist/lib/self-update.js +276 -1
  339. package/dist/lib/session/active.d.ts +89 -5
  340. package/dist/lib/session/active.js +165 -10
  341. package/dist/lib/session/actor-sidecar.d.ts +1 -1
  342. package/dist/lib/session/actor-sidecar.js +2 -1
  343. package/dist/lib/session/db.d.ts +176 -2
  344. package/dist/lib/session/db.js +484 -17
  345. package/dist/lib/session/discover.js +27 -4
  346. package/dist/lib/session/hook-sessions.js +2 -2
  347. package/dist/lib/session/host-link.d.ts +2 -2
  348. package/dist/lib/session/host-link.js +2 -2
  349. package/dist/lib/session/pid-registry.d.ts +21 -0
  350. package/dist/lib/session/pid-registry.js +57 -0
  351. package/dist/lib/session/remote-active.js +15 -1
  352. package/dist/lib/session/remote.js +2 -2
  353. package/dist/lib/session/session-cache.d.ts +14 -7
  354. package/dist/lib/session/session-cache.js +51 -9
  355. package/dist/lib/session/state.d.ts +2 -2
  356. package/dist/lib/session/state.js +1 -1
  357. package/dist/lib/session/sync/config.d.ts +10 -10
  358. package/dist/lib/session/sync/config.js +10 -10
  359. package/dist/lib/session/sync/r2.d.ts +34 -0
  360. package/dist/lib/session/sync/r2.js +123 -0
  361. package/dist/lib/session/throughput.d.ts +1 -1
  362. package/dist/lib/session/throughput.js +1 -1
  363. package/dist/lib/session/types.d.ts +23 -1
  364. package/dist/lib/session/types.js +15 -0
  365. package/dist/lib/session/viewing-in.d.ts +1 -1
  366. package/dist/lib/session/viewing-in.js +1 -1
  367. package/dist/lib/session/watch.d.ts +101 -0
  368. package/dist/lib/session/watch.js +242 -0
  369. package/dist/lib/share/config.d.ts +4 -0
  370. package/dist/lib/share/config.js +1 -0
  371. package/dist/lib/share/provision.d.ts +38 -0
  372. package/dist/lib/share/provision.js +50 -0
  373. package/dist/lib/share/publish.d.ts +40 -1
  374. package/dist/lib/share/publish.js +116 -3
  375. package/dist/lib/share/worker-template.js +71 -6
  376. package/dist/lib/shims.d.ts +17 -3
  377. package/dist/lib/shims.js +98 -26
  378. package/dist/lib/signin-badge.js +3 -2
  379. package/dist/lib/skills.js +2 -0
  380. package/dist/lib/smart-launch.d.ts +8 -8
  381. package/dist/lib/smart-launch.js +80 -59
  382. package/dist/lib/ssh-exec.d.ts +1 -1
  383. package/dist/lib/ssh-exec.js +1 -1
  384. package/dist/lib/staleness/prune.d.ts +88 -0
  385. package/dist/lib/staleness/prune.js +69 -0
  386. package/dist/lib/staleness/registry.d.ts +1 -1
  387. package/dist/lib/staleness/writers/commands.js +34 -2
  388. package/dist/lib/staleness/writers/hooks.js +16 -0
  389. package/dist/lib/staleness/writers/kinds.d.ts +6 -0
  390. package/dist/lib/staleness/writers/skills.js +19 -0
  391. package/dist/lib/staleness/writers/subagents.d.ts +2 -3
  392. package/dist/lib/staleness/writers/subagents.js +0 -4
  393. package/dist/lib/staleness/writers/types.d.ts +32 -0
  394. package/dist/lib/startup/command-registry.d.ts +6 -12
  395. package/dist/lib/startup/command-registry.js +11 -31
  396. package/dist/lib/startup/dev-build.d.ts +10 -0
  397. package/dist/lib/startup/dev-build.js +13 -1
  398. package/dist/lib/startup/spellcheck.d.ts +18 -0
  399. package/dist/lib/startup/spellcheck.js +45 -0
  400. package/dist/lib/state.d.ts +36 -9
  401. package/dist/lib/state.js +96 -46
  402. package/dist/lib/subagents-registry.d.ts +0 -7
  403. package/dist/lib/subagents-registry.js +38 -65
  404. package/dist/lib/subagents.d.ts +0 -33
  405. package/dist/lib/subagents.js +0 -75
  406. package/dist/lib/sync-umbrella.js +1 -1
  407. package/dist/lib/teams/agents.d.ts +41 -1
  408. package/dist/lib/teams/agents.js +187 -9
  409. package/dist/lib/teams/api.d.ts +11 -1
  410. package/dist/lib/teams/api.js +11 -2
  411. package/dist/lib/teams/delivery.d.ts +41 -0
  412. package/dist/lib/teams/delivery.js +60 -0
  413. package/dist/lib/teams/registry.d.ts +14 -0
  414. package/dist/lib/teams/registry.js +51 -1
  415. package/dist/lib/teams/remoteWorktree.d.ts +19 -0
  416. package/dist/lib/teams/remoteWorktree.js +29 -0
  417. package/dist/lib/teams/scheduler.d.ts +1 -1
  418. package/dist/lib/teams/scheduler.js +1 -1
  419. package/dist/lib/teams/worktree.d.ts +24 -0
  420. package/dist/lib/teams/worktree.js +42 -0
  421. package/dist/lib/terminal/backends/vscodium-agent.d.ts +10 -1
  422. package/dist/lib/terminal/backends/vscodium-agent.js +16 -5
  423. package/dist/lib/terminal/engine.d.ts +4 -0
  424. package/dist/lib/terminal/engine.js +8 -2
  425. package/dist/lib/terminal/types.d.ts +21 -2
  426. package/dist/lib/testdata/refresh-coordinator-worker.d.ts +1 -0
  427. package/dist/lib/testdata/refresh-coordinator-worker.js +23 -0
  428. package/dist/lib/tickets/list.d.ts +53 -0
  429. package/dist/lib/tickets/list.js +153 -0
  430. package/dist/lib/tmux/orphan-reap.d.ts +320 -0
  431. package/dist/lib/tmux/orphan-reap.js +644 -0
  432. package/dist/lib/tmux/session.d.ts +68 -3
  433. package/dist/lib/tmux/session.js +95 -5
  434. package/dist/lib/triggers/handlers.d.ts +20 -0
  435. package/dist/lib/triggers/handlers.js +6 -1
  436. package/dist/lib/types.d.ts +46 -34
  437. package/dist/lib/usage-fleet.d.ts +32 -0
  438. package/dist/lib/usage-fleet.js +125 -0
  439. package/dist/lib/usage-refresh.d.ts +3 -3
  440. package/dist/lib/usage-refresh.js +19 -16
  441. package/dist/lib/usage.d.ts +51 -47
  442. package/dist/lib/usage.js +145 -153
  443. package/dist/lib/version-duplicates.js +2 -2
  444. package/dist/lib/versions.d.ts +56 -13
  445. package/dist/lib/versions.js +195 -45
  446. package/dist/lib/watchdog/log.d.ts +1 -1
  447. package/dist/lib/watchdog/log.js +3 -3
  448. package/dist/lib/watchdog/rotate.d.ts +6 -6
  449. package/dist/lib/watchdog/rotate.js +6 -6
  450. package/dist/lib/workflows.d.ts +1 -1
  451. package/dist/lib/yaml-io.d.ts +47 -0
  452. package/dist/lib/yaml-io.js +55 -0
  453. package/package.json +2 -1
  454. package/scripts/install-helper.js +2 -2
  455. package/scripts/postinstall.js +23 -20
  456. package/dist/commands/defaults.d.ts +0 -7
  457. package/dist/commands/defaults.js +0 -107
  458. package/dist/commands/export.d.ts +0 -11
  459. package/dist/commands/export.js +0 -215
  460. package/dist/commands/helper.d.ts +0 -12
  461. package/dist/commands/helper.js +0 -87
  462. package/dist/commands/hosts.d.ts +0 -11
  463. package/dist/commands/hosts.js +0 -330
  464. package/dist/commands/lock.d.ts +0 -12
  465. package/dist/commands/lock.js +0 -70
  466. package/dist/commands/pull.d.ts +0 -17
  467. package/dist/commands/pull.js +0 -39
  468. package/dist/commands/push.d.ts +0 -14
  469. package/dist/commands/push.js +0 -30
  470. package/dist/commands/wallet.d.ts +0 -20
  471. package/dist/commands/wallet.js +0 -216
  472. package/dist/commands/worktree.d.ts +0 -19
  473. package/dist/commands/worktree.js +0 -272
  474. package/dist/lib/account-labels.d.ts +0 -24
  475. package/dist/lib/account-labels.js +0 -72
  476. package/dist/lib/auto-dispatch-linear.d.ts +0 -18
  477. package/dist/lib/auto-dispatch-linear.js +0 -107
  478. package/dist/lib/auto-dispatch-provider.d.ts +0 -10
  479. package/dist/lib/auto-dispatch-provider.js +0 -30
  480. package/dist/lib/auto-dispatch.d.ts +0 -93
  481. package/dist/lib/auto-dispatch.js +0 -128
  482. package/dist/lib/export.d.ts +0 -72
  483. package/dist/lib/export.js +0 -269
  484. package/dist/lib/lock.d.ts +0 -93
  485. package/dist/lib/lock.js +0 -207
  486. package/dist/lib/wallet/index.d.ts +0 -78
  487. package/dist/lib/wallet/index.js +0 -253
@@ -1,123 +1,81 @@
1
1
  /**
2
- * Daemon housekeeping ticks — one-shot bodies invoked by system routines.
2
+ * Daemon account-state tick bodies.
3
3
  *
4
- * RUSH-2353: these were ~15 hardcoded `setInterval` timers inside
5
- * `runDaemon()` (daemon.ts) a parallel, inferior reimplementation of the
6
- * routines system (no declaration, no run history, no pause/disable, no
7
- * device pin). Each function here is one migrated tick's *body*, unchanged in
8
- * behavior, now invoked as a detached one-shot process by a system routine's
9
- * `command:` (via the `agents __daemon-tick <name>` entrypoint in index.ts)
10
- * instead of an in-process interval closure.
4
+ * These two bodies are the `refreshUsage` / `refreshAuth` implementations the
5
+ * daemon's `account-state-service.ts` timers call directly, in-process, on a
6
+ * plain `setInterval` (usage every 60s, auth every ~3 min). They are NOT
7
+ * routines and are never fired through the scheduler the daemon owns usage and
8
+ * authentication health as first-party device state (RUSH-2451).
11
9
  *
12
- * Overlap protection that used to live in daemon.ts as a per-tick boolean
13
- * flag (`watchdogInFlight`, `probingDevices`, ...) is now provided by the
14
- * routine runner's launch claim (`withRoutineLaunchClaim` in runner.ts) two
15
- * fires of the same routine name never run concurrently.
16
- *
17
- * Output goes to `console.log`/`console.error`: each tick runs as a spawned
18
- * child of `executeCommandJobDetached`, which redirects the child's stdout to
19
- * the run's `stdout.log` — so this doubles as the run's log, readable via
20
- * `agents routines runs <name>`.
10
+ * `refreshLocalFleetAuthState` is also called by `agents fleet`/`ssh` surfaces
11
+ * that need a fresh local auth snapshot on demand; provider-level work is guarded
12
+ * by the cross-process refresh lease so an explicit CLI refresh and the daemon
13
+ * timer converge on the same published result.
21
14
  */
22
- import { getConfigValue } from './device-config.js';
23
- /** ~every 3 min. Mirrors the old WATCHDOG_TICK_MS. */
24
- export async function runWatchdogTick() {
25
- if (getConfigValue('watchdog.enabled').value !== true) {
26
- console.log('watchdog: disabled (watchdog.enabled != true) — skipping');
27
- return;
28
- }
29
- const { runWatchdogPass } = await import('./watchdog/service.js');
30
- const result = await runWatchdogPass({ nudge: true });
31
- console.log(`watchdog: ${result.counts.total} live, ${result.counts.stalled} stalled, ${result.counts.nudged} nudged`);
32
- }
33
- /**
34
- * Device probe: refresh registered devices' reachability and detect newly
35
- * appeared tailnet nodes, dropping a sentinel per pending device so the
36
- * menu-bar helper can surface "NEW DEVICES -> Register / Ignore". Refresh
37
- * mode never auto-registers a newcomer. A machine without tailscale is a
38
- * clean no-op. ~every 3 min.
39
- */
40
- export async function runDeviceProbeTick() {
41
- const { runDeviceSync } = await import('./devices/sync.js');
42
- const { reconcilePendingSentinels } = await import('./devices/pending.js');
43
- const dev = await runDeviceSync({ soft: true, mode: 'refresh' });
44
- if (!dev.ok) {
45
- console.log('device probe: sync not ok — skipping sentinel reconcile');
46
- return;
47
- }
48
- reconcilePendingSentinels(dev.pending);
49
- if (dev.pending.length) {
50
- console.log(`devices: ${dev.pending.length} new pending (${dev.pending.map((p) => p.name).join(', ')})`);
51
- }
52
- else {
53
- console.log('device probe: no new pending devices');
54
- }
55
- }
56
- /**
57
- * tmux hook reconcile: retrofit the guarded `pane-died` hook onto managed
58
- * `agents run` sessions a pre-fix binary left with the old unconditional
59
- * hook. Non-destructive: set-hook only, never a kill or detach. ~every 5 min.
60
- */
61
- export async function runTmuxReconcileTick() {
62
- const { isTmuxInstalled } = await import('./tmux/binary.js');
63
- if (!isTmuxInstalled()) {
64
- console.log('tmux reconcile: tmux not installed — skipping');
65
- return;
66
- }
67
- const { reconcileSessionHooks } = await import('./tmux/session.js');
68
- const r = await reconcileSessionHooks();
69
- console.log(`tmux: retrofitted pane-died hook on ${r.reconciled} session(s)`);
70
- }
71
- /**
72
- * Launch-health self-heal: probe that each agent's DEFAULT version actually
73
- * LAUNCHES, and repair a gutted install. Never repoints the global default
74
- * (allowDefaultSwitch: false) — a background default switch would be a
75
- * silent logout. ~every 6h.
76
- */
77
- export async function runLaunchHealthTick() {
78
- const { healBrokenDefaultLaunches } = await import('./versions.js');
79
- const { repaired, unhealed } = await healBrokenDefaultLaunches((m) => console.log(`launch-health: ${m}`), { allowDefaultSwitch: false });
80
- if (repaired.length)
81
- console.log(`launch-health: repaired ${repaired.join(', ')}`);
82
- if (unhealed.length) {
83
- console.log(`launch-health: ${unhealed.join(', ')} won't launch and will not be auto-switched — choose a version with \`agents use <agent> <version>\` or \`agents add <agent>@latest\``);
84
- }
85
- if (!repaired.length && !unhealed.length)
86
- console.log('launch-health: all default launches healthy');
15
+ export function isFreshFleetAuthSnapshot(value, minimumCapturedAt) {
16
+ return value.row.capturedAt >= minimumCapturedAt
17
+ && value.authRows.length > 0
18
+ && value.authRows.every(authRow => authRow.health.checkedAt >= minimumCapturedAt);
87
19
  }
88
20
  /**
89
21
  * Fleet cache warm: publish THIS host's row for the caches `agents fleet
90
22
  * status` / `agents devices list` read (PUBLISH-OWN / READ-UNION, RUSH-2061).
91
- * ~every 3 min.
92
23
  */
93
- export async function runFleetCacheWarmTick() {
24
+ export async function refreshLocalFleetAuthState() {
94
25
  const { machineId } = await import('./machine-id.js');
95
- const self = machineId();
96
- const { probeLocalFleetAuth, writeFleetAuthRows } = await import('./auth-health.js');
26
+ const { probeLocalFleetAuth, readFleetAuthRows, writeFleetAuthRows } = await import('./auth-health.js');
97
27
  const { getCliVersion } = await import('./version.js');
98
- const authRows = await probeLocalFleetAuth({ cliVersion: getCliVersion() });
99
- writeFleetAuthRows(self, authRows);
100
- const { publishLocalFleetStatus } = await import('./fleet-status.js');
101
- const row = await publishLocalFleetStatus(self);
102
- console.log(`fleet cache warm: ${authRows.length} auth row(s), ${row.agents.running} running agent(s) on ${self}`);
28
+ const self = machineId();
29
+ const requestedAt = Date.now();
30
+ const minimumCapturedAt = requestedAt - 2 * 60_000;
31
+ const { withRefreshLease } = await import('./refresh-coordinator.js');
32
+ const { readFleetStatus, publishLocalFleetStatus } = await import('./fleet-status.js');
33
+ return withRefreshLease({
34
+ scope: 'auth',
35
+ key: self,
36
+ readCompleted: () => {
37
+ const row = readFleetStatus()[self];
38
+ if (!row)
39
+ return null;
40
+ return { row, authRows: readFleetAuthRows(self) };
41
+ },
42
+ // A recent daemon publication is the completed result, not a reason to probe
43
+ // every provider a second time.
44
+ isCompleted: (value) => isFreshFleetAuthSnapshot(value, minimumCapturedAt),
45
+ refresh: async () => {
46
+ const authRows = await probeLocalFleetAuth({ cliVersion: getCliVersion() });
47
+ writeFleetAuthRows(self, authRows);
48
+ const row = await publishLocalFleetStatus(self);
49
+ return { row, authRows };
50
+ },
51
+ });
103
52
  }
104
- /**
105
- * Session-status cache warm (RUSH-2062): publish THIS host's local active
106
- * sessions so menubar / Factory / watchdog / CLI share one warm snapshot.
107
- * Publish-own only (no cross-host SSH). ~every 3 min.
108
- */
109
- export async function runSessionCacheWarmTick() {
110
- const { publishLocalActiveSessions } = await import('./session/session-cache.js');
111
- const r = await publishLocalActiveSessions();
112
- console.log(`session cache warm: ${r.sessions.length} local session(s)`);
53
+ export async function runFleetCacheWarmTick() {
54
+ const result = await refreshLocalFleetAuthState();
55
+ // A waiter receives the already-published fleet row. The auth-row count is
56
+ // available only to the process that performed the provider probes.
57
+ const row = result.row;
58
+ const authCount = result.authRows.length;
59
+ console.log(`fleet cache warm: ${authCount} auth row(s) refreshed, ${row.agents.running} running agent(s) on ${row.host}`);
113
60
  }
114
61
  /**
115
62
  * Usage refresh: keep the usage cache the `agents run` router reads
116
63
  * (RUSH-2061, readOnly hot path) fresh, WITHOUT the hot path ever fetching.
117
- * This host is the sole writer for its own local accounts. ~every 60s
118
- * (USAGE_REFRESH_TICK_MS in usage-refresh.ts keep in sync).
64
+ * The configured primary host is the fleet's sole provider-facing writer;
65
+ * subscribers import its token-free derived cache.
119
66
  */
120
67
  export async function runUsageRefreshTick() {
68
+ const { resolveUsagePrimaryHost } = await import('./device-config.js');
69
+ const { machineId } = await import('./machine-id.js');
70
+ // usage.primary-host, else interactive.host, else null (standalone local refresh)
71
+ const primaryHost = resolveUsagePrimaryHost() ?? undefined;
72
+ const self = machineId();
73
+ const { importUsageFleetFromHost, usageRefreshRole } = await import('./usage-fleet.js');
74
+ if (usageRefreshRole(primaryHost, self) === 'subscriber') {
75
+ const imported = await importUsageFleetFromHost(primaryHost);
76
+ console.log(`usage refresh: imported ${Object.keys(imported.usage).length} account(s) from primary host ${primaryHost}`);
77
+ return;
78
+ }
121
79
  const { runUsageRefresh, buildLocalUsageAccounts } = await import('./usage-refresh.js');
122
80
  const { writeClaudeUsageCache } = await import('./usage.js');
123
81
  const { usageRateLimitedUntil } = await import('./usage-backoff.js');
@@ -126,65 +84,25 @@ export async function runUsageRefreshTick() {
126
84
  writeUsageCache: writeClaudeUsageCache,
127
85
  backoffUntil: usageRateLimitedUntil,
128
86
  });
129
- console.log(`usage refresh: ${r.refreshed} refreshed, ${r.failed} failed, ${r.skippedNotDue} not-due, ${r.skippedBackoff} backed-off, ${r.skippedCap} capped`);
87
+ const { listProfiles } = await import('./profiles.js');
88
+ const { refreshDueByokUsage } = await import('./byok-usage.js');
89
+ const byok = await refreshDueByokUsage(listProfiles());
90
+ const { exportUsageFleet } = await import('./usage-fleet.js');
91
+ const published = exportUsageFleet();
92
+ console.log(`usage refresh: ${r.refreshed} refreshed, ${r.failed} failed, ${r.skippedNotDue} not-due, ${r.skippedBackoff} backed-off, ${r.skippedCap} capped; BYOK ${byok.refreshed} refreshed, ${byok.skipped} not-due; published ${Object.keys(published.usage).length} account(s)`);
130
93
  }
131
94
  /**
132
- * Auto-dispatch: for any managed project that has opted in (autoDispatch:true
133
- * + maxAgents>0 in ~/.agents/factory/projects.json), pick up Linear tickets
134
- * delegated to an agent and still in Todo, and dispatch each through
135
- * agents-cli's own cloud-provider layer. OFF unless a project opts in; no
136
- * opted-in project or no LINEAR_API_KEY is a clean no-op. ~every 3 min.
95
+ * Active-sessions warm (RUSH-2062 / RUSH-2484): publish THIS host's live session
96
+ * rows so `agents sessions watch` (and the extension that tails it) receive
97
+ * journal deltas. Publish-own only no cross-host SSH.
137
98
  *
138
- * Migrated to a routine (RUSH-2353) so it inherits the `devices:` allowlist —
139
- * pin with `agents routines devices auto-dispatch --set <one>` to fix the
140
- * shared-input double-fire problem this job had hardcoded (every daemon on
141
- * the fleet polled the same Linear queue with no coordination).
99
+ * Cadence matches {@link DEFAULT_ACTIVE_CACHE_MAX_AGE_MS} so one-shot readers and
100
+ * long-lived watchers share one writer. Without this tick the journal has no
101
+ * continuous producer and Factory freezes after the initial cache snapshot.
142
102
  */
143
- export async function runAutoDispatchTick() {
144
- const { readAutoDispatchProjects, isEligible, autoDispatchTick } = await import('./auto-dispatch.js');
145
- const projects = readAutoDispatchProjects();
146
- if (!projects.some(isEligible)) {
147
- console.log('auto-dispatch: no opted-in project — skipping');
148
- return;
149
- }
150
- const { createLinearGateway } = await import('./auto-dispatch-linear.js');
151
- const linear = createLinearGateway();
152
- if (!linear) {
153
- console.log('auto-dispatch: no LINEAR_API_KEY configured — skipping');
154
- return;
155
- }
156
- const { createProviderDispatcher } = await import('./auto-dispatch-provider.js');
157
- const dispatcher = createProviderDispatcher();
158
- const dispatched = await autoDispatchTick({
159
- projects,
160
- linear,
161
- dispatcher,
162
- log: (lvl, m) => (lvl === 'ERROR' ? console.error(m) : console.log(m)),
163
- });
164
- if (dispatched.length) {
165
- console.log(`auto-dispatch: started ${dispatched.length} delegated ticket(s): ${dispatched.map((d) => d.identifier).join(', ')}`);
166
- }
167
- else {
168
- console.log('auto-dispatch: no delegated tickets to dispatch');
169
- }
170
- }
171
- /** Registry: routine-facing name -> tick body. Keys match the shipped routine YAML names. */
172
- export const DAEMON_TICKS = {
173
- watchdog: runWatchdogTick,
174
- 'device-probe': runDeviceProbeTick,
175
- 'tmux-reconcile': runTmuxReconcileTick,
176
- 'launch-health': runLaunchHealthTick,
177
- 'fleet-cache-warm': runFleetCacheWarmTick,
178
- 'session-cache-warm': runSessionCacheWarmTick,
179
- 'usage-refresh': runUsageRefreshTick,
180
- 'auto-dispatch': runAutoDispatchTick,
181
- };
182
- export const DAEMON_TICK_ROUTINE_NAMES = Object.freeze(Object.keys(DAEMON_TICKS));
183
- /** Run one named tick, or throw for an unknown name (fails the routine run loud). */
184
- export async function runDaemonTick(name) {
185
- const fn = DAEMON_TICKS[name];
186
- if (!fn) {
187
- throw new Error(`Unknown daemon tick '${name}'. Known: ${Object.keys(DAEMON_TICKS).join(', ')}`);
188
- }
189
- await fn();
103
+ export async function runActiveSessionsWarmTick(opts = {}) {
104
+ const { publishLocalActiveSessions } = await import('./session/session-cache.js');
105
+ const r = await publishLocalActiveSessions({ gather: opts.gather });
106
+ console.log(`active-sessions warm: ${r.sessions.length} session(s) published`);
107
+ return { sessions: r.sessions.length };
190
108
  }
@@ -7,6 +7,13 @@
7
7
  * log output, reload (SIGHUP), and graceful shutdown are handled here.
8
8
  */
9
9
  import { getAgentsBinPath } from './cli-entry.js';
10
+ /**
11
+ * How many consecutive failed daemon starts disable the *implicit* auto-start
12
+ * (`ensureDaemonStarted`). Matches `DAEMON_START_LIMIT_BURST` so the two layers
13
+ * give up together rather than one silently masking the other. `agents daemon
14
+ * start` is the deliberate override and is never gated by this.
15
+ */
16
+ export declare const DAEMON_AUTOSTART_FAILURE_LIMIT = 5;
10
17
  /**
11
18
  * RUSH-1817: decide whether the daemon should (re)take over hosting the secrets
12
19
  * broker. The startup host decision is one-shot; this drives the periodic
@@ -29,6 +36,35 @@ export declare function shouldTakeOverBroker(isHosting: boolean, brokerReachable
29
36
  */
30
37
  export type SchedulerGateTransition = 'reload' | 'stop' | 'boot' | 'none';
31
38
  export declare function schedulerGateTransition(running: boolean, enabled: boolean): SchedulerGateTransition;
39
+ /**
40
+ * Wrap an async routine so it runs AT MOST ONCE, however many callers fire it.
41
+ *
42
+ * Extracted rather than left as a `let shuttingDown = false` inside runDaemon so
43
+ * the property can actually be tested (RUSH-2423). The daemon's shutdown is
44
+ * reachable from SIGTERM, SIGINT, and the state-dir self-check, but a real
45
+ * shutdown completes in ~26ms, so the re-entrant window is not reachable from
46
+ * outside the process — an end-to-end "send three signals" test passes with the
47
+ * guard removed and proves nothing. The mechanism is what is testable, so the
48
+ * mechanism is what is separated out.
49
+ *
50
+ * The flag is set synchronously before the first `await`, which is what makes
51
+ * this safe: two callers in the same tick cannot both get past it.
52
+ *
53
+ * A rejected `fn` leaves the guard SET — one attempt is all there is, and the
54
+ * rejection propagates to the caller that made it. That is right for shutdown
55
+ * (a failed shutdown must not be silently retried by the next signal) but is
56
+ * the thing to re-examine before giving this a second consumer.
57
+ */
58
+ export declare function singleShot(fn: () => Promise<void>): () => Promise<void>;
59
+ /**
60
+ * Absolute path to the daemon's structured log.
61
+ *
62
+ * Exported because two commands rebuilt the same path from a hardcoded
63
+ * `'logs.jsonl'` literal (`commands/daemon.ts`, `commands/routines.ts`), so
64
+ * renaming the file would have silently pointed them at nothing (RUSH-2423).
65
+ * One definition, three callers.
66
+ */
67
+ export declare function getDaemonLogPath(): string;
32
68
  /** Read the stored daemon PID from disk. Returns null if not present or invalid. */
33
69
  export declare function readDaemonPid(): number | null;
34
70
  /** Write the daemon PID to the pid file. */
@@ -74,15 +110,15 @@ export declare function claimDaemonInstance(): boolean;
74
110
  * Record this daemon in the device's instance registry — a marker file named by
75
111
  * pid under `<daemonDir>/instances/`. The registry, not a process scan, is how
76
112
  * the reaper enumerates the device singleton: because the dir lives INSIDE the
77
- * daemon dir (`AGENTS_DAEMON_DIR` ?? `<HOME>/.agents/.cache/helpers/daemon`), every
113
+ * state dir (`AGENTS_DAEMON_DIR` ?? `<HOME>/.agents/.cache/helpers/daemon`), every
78
114
  * daemon of one device — however it was launched — registers in the same place,
79
115
  * while a genuinely separate install/home or a test fixture registers under its
80
- * own daemon dir and is invisible here. This is what fixes the two-entry pile-up:
116
+ * own state dir and is invisible here. This is what fixes the two-entry pile-up:
81
117
  * the compiled `dist/bin/agents` binary and the `node <shim>` JS entry have
82
118
  * different `process.argv[1]`, so the old launch-entry-scoped `ps` match never
83
119
  * reaped across them and duplicates accumulated (78 observed on one box), every
84
120
  * routine double-firing. Best-effort — the reaper self-heals a missing/stale
85
- * marker, and reading another process's ENV to key on the daemon dir directly is
121
+ * marker, and reading another process's ENV to key on the state dir directly is
86
122
  * not portable (hardened macOS hides it from `ps`), so identity rides the shared
87
123
  * on-disk registry instead. No-op on Windows (POSIX-only reaper).
88
124
  */
@@ -175,6 +211,14 @@ export declare function startDaemon(agentsBin?: string): {
175
211
  pid: number | null;
176
212
  method: string;
177
213
  };
214
+ /**
215
+ * Is the auto-start circuit breaker open (RUSH-2418)? True once
216
+ * {@link DAEMON_AUTOSTART_FAILURE_LIMIT} consecutive starts have failed to
217
+ * produce a daemon that reported healthy. Pure read of the persisted health
218
+ * record, and `agents daemon doctor` reports the same record — the message the
219
+ * breaker prints has to lead somewhere that can explain it.
220
+ */
221
+ export declare function isDaemonAutostartCircuitOpen(): boolean;
178
222
  /**
179
223
  * Bring the always-on daemon up as a side effect of a background-adjacent
180
224
  * command (secrets unlock, browser start, ...), not only from `routines add`.
@@ -256,6 +300,30 @@ export declare function startDetached(opts?: StartDetachedOptions): {
256
300
  pid: number | null;
257
301
  method: string;
258
302
  };
303
+ /**
304
+ * One piece of daemon state that a graceful `handleShutdown` removes and an
305
+ * escalated kill leaves behind (RUSH-2421).
306
+ */
307
+ export interface StopResidueArtifact {
308
+ label: string;
309
+ present: boolean;
310
+ /** The file names a pid that is alive and is NOT the daemon we stopped. */
311
+ ownedByLiveOther: boolean;
312
+ reclaim: () => void;
313
+ stillPresent: () => boolean;
314
+ }
315
+ /**
316
+ * The lifetime marker, heartbeat, and instance-registry entry, described so
317
+ * {@link stopDaemon} can assert them the same way it asserts the two sockets.
318
+ *
319
+ * Ownership, not mere presence, decides: a file naming a pid that is alive and
320
+ * is not the daemon we just stopped belongs to a DIFFERENT daemon (a successor
321
+ * that started during the stop, or a peer serving this state dir), and deleting
322
+ * it would break that live daemon — the same reasoning the broker-socket branch
323
+ * above uses for a standalone owner. Everything else is residue from a provably
324
+ * dead owner and is reclaimed.
325
+ */
326
+ export declare function stopResidueArtifacts(stoppedPid: number | null, survivors?: number[]): StopResidueArtifact[];
259
327
  /**
260
328
  * Structured outcome of {@link stopDaemon} (SING-12, RUSH-2355). `stopDaemon`
261
329
  * asserts its postcondition instead of assuming it: `ok` is true only when every
@@ -276,7 +344,7 @@ export interface DaemonStopResult {
276
344
  /**
277
345
  * Live `__daemon-run` processes still registered in THIS state dir's instance
278
346
  * registry, excluding `exclude`. State-dir-scoped by construction: the registry
279
- * lives inside this daemon dir, so a daemon serving a DIFFERENT state dir (a test
347
+ * lives inside this state dir, so a daemon serving a DIFFERENT state dir (a test
280
348
  * fixture with its own HOME, a separate install/home) registers elsewhere and is
281
349
  * invisible here — it is never a stop/takeover target. POSIX-only (the registry
282
350
  * and its `ps` liveness probe are); `[]` on Windows.