@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
@@ -0,0 +1,320 @@
1
+ /**
2
+ * Reap the helper processes an exited agent leaves behind (RUSH-2521).
3
+ *
4
+ * ## The leak
5
+ *
6
+ * An interactive agent runs as the leaf of a detached tmux pane
7
+ * (`runInTmux` → `createSession`, [`../exec.ts`](../exec.ts)). Anything the
8
+ * harness spawns — MCP servers, background daemons, `exec` helper trees — is a
9
+ * child of that pane. When the agent exits, the kernel SIGHUPs the pane's
10
+ * FOREGROUND process group only. A helper that put itself in its own process
11
+ * group, or that ignores SIGHUP, survives: it reparents to init and keeps its
12
+ * memory forever. Measured on the fleet: one pane holding 2.5 GB of Claude Code
13
+ * background daemons 22 days after its session ended, and 34 orphaned
14
+ * `cgraph-mcp --daemon` processes on a single worker.
15
+ *
16
+ * ## Why attribution is by ENVIRONMENT, not by pid ancestry / tty / pgid
17
+ *
18
+ * Every obvious OS handle is destroyed by exactly the event we are detecting:
19
+ *
20
+ * - **ppid ancestry** — an orphan is reparented to init the instant its parent
21
+ * dies, so the chain back to the pane is gone.
22
+ * - **controlling terminal** — POSIX disassociates the controlling terminal from
23
+ * every process in a session when the session leader exits, so the orphan's
24
+ * `tty` reads `?`. Verified on Linux: an orphan under a dead pane leader shows
25
+ * `tty=?` while its own pane still reports `pane_tty=/dev/pts/6`.
26
+ * - **process group** — the helpers that survive are precisely the ones that
27
+ * left the pane's process group (that is why they survived the SIGHUP).
28
+ * - **POSIX session id** — durable and correct, but not portable: `ps -o sid=`
29
+ * exists on Linux and does not exist on macOS (`ps: sid: keyword not found`),
30
+ * `ps -o sess=` reports 0 there, and `pgrep -s` is Linux-only.
31
+ *
32
+ * What DOES survive all of it is the process environment. `runInTmux` stamps
33
+ * `AGENT_TMUX_SESSION_NAME` into the pane env ([`../exec.ts`](../exec.ts)), and
34
+ * every descendant inherits it — including a reparented one. So a process
35
+ * carrying `AGENT_TMUX_SESSION_NAME=<name>` is attributable to that tmux session
36
+ * with no heuristics at all, and tmux itself is the liveness oracle for whether
37
+ * that session's agent is still running.
38
+ *
39
+ * ## The second tier: harness daemons that scrub the environment
40
+ *
41
+ * Claude Code's background pool (`claude … daemon run`, which owns the
42
+ * `bg-pty-host` / `bg-spare` processes) starts with a clean environment, so tier
43
+ * one cannot see it. It does, however, declare its owner in its own argv:
44
+ * `daemon run --origin transient --spawned-by {"label":"claude",…,"pid":3834601}`.
45
+ * A pool whose declared spawner pid is dead is unowned, so it and its descendants
46
+ * are reaped. That rule lives in {@link DETACHED_HELPER_RULES} rather than an
47
+ * inline `if (agent === 'claude')`, so another harness that detaches helpers the
48
+ * same way is one table entry.
49
+ *
50
+ * ## Safety
51
+ *
52
+ * Nothing is killed without positive proof its owner is gone:
53
+ *
54
+ * - a tmux session that still exists AND whose agent pane process is alive
55
+ * protects every process it owns;
56
+ * - a tmux session with a client attached protects every process it owns,
57
+ * whatever the pane state;
58
+ * - the reaping process itself, its ancestors, pid 1, and every long-lived
59
+ * agents-cli service ({@link isProtectedAgentsService}) are never candidates.
60
+ * - an UNRELIABLE read of tmux's session state (the query threw, timed out, or
61
+ * tmux itself never answered) disables tier 1 for that sweep entirely — an
62
+ * absent map entry proves a session is gone only when the map is known-good.
63
+ * Distinguishing "tmux answered: no such session" (a completed, if nonzero,
64
+ * exit — genuinely nothing there) from "tmux did not answer" (a thrown
65
+ * error/timeout — unknown) is exactly this: a completed process is a real
66
+ * answer, a rejected promise is not one at all.
67
+ * - tier 2 is anchored on the actual claude EXECUTABLE (argv[0]'s basename),
68
+ * never a substring match anywhere in the command line, and excludes any
69
+ * process still structurally part of a LIVE pane leaf's process tree right
70
+ * now (tmux's own `#{pane_pid}`, expanded to its current descendants —
71
+ * independent of whether any of those processes' environment markers were
72
+ * ever readable) or that carries a marker whose own session is
73
+ * live/attached — a live interactive agent, OR a subprocess it spawns
74
+ * (e.g. its own Bash tool invoking `claude --print "…"` as a sub-task),
75
+ * whose argv happens to quote this file's docblock (it contains the exact
76
+ * `daemon run --spawned-by {"pid":...}` shape) must never become a kill
77
+ * seed, and that has to hold even where tier 1's marker is dead (macOS, or
78
+ * any `claude` invocation started outside an agents-cli pane). Two review
79
+ * rounds found this: first that marker-only exclusion left the whole
80
+ * macOS/bare-invocation case open (round 2, closed by the pane-pid check),
81
+ * then that the pane-pid check alone only covered the pane LEAF itself, not
82
+ * its own live children (round 3, closed by expanding the check to the
83
+ * leaf's current descendant set via {@link descendantsOf}). A process that
84
+ * has genuinely reparented away — a real detached daemon, no longer chained
85
+ * to any live leaf by ppid — is deliberately NOT in that set and remains
86
+ * reapable, whatever unrelated live agent happens to also be running.
87
+ *
88
+ * ## Known platform gap — tier 1 is Linux-only today
89
+ *
90
+ * Tier 1's env-marker attribution requires reading another process's
91
+ * environment. `/proc/<pid>/environ` makes that a plain file read on Linux.
92
+ * macOS has no `/proc`; `ps -E` was the fallback, but on modern macOS (verified
93
+ * live on mac-mini 15.6, macOS Sequoia) `ps -E` no longer prints another
94
+ * process's environment at all — only the CALLING process's own env shows up.
95
+ * `readAgentProcesses()` therefore returns every macOS process with
96
+ * `tmuxSession: undefined`, and tier 1's `if (!p.tmuxSession) continue` skips
97
+ * all of them. This is SAFE (tier 1 silently no-ops rather than misattributing
98
+ * anything) but not effective: on macOS, only tier 2 — the detached-helper
99
+ * registry — can reap anything today. A macOS fix needs a different channel
100
+ * entirely (env is inherently unreadable cross-process there without a native
101
+ * helper); it is not a parsing bug {@link parseTmuxSessionMarker} can fix.
102
+ */
103
+ /** Grace between SIGTERM and SIGKILL for a reaped orphan. */
104
+ export declare const REAP_GRACE_MS = 2000;
105
+ /** Env var `runInTmux` stamps into the pane, inherited by every descendant. */
106
+ export declare const TMUX_SESSION_ENV = "AGENT_TMUX_SESSION_NAME";
107
+ /** One process, with the fields the reaper attributes on. */
108
+ export interface AgentProcess {
109
+ pid: number;
110
+ ppid: number;
111
+ /** Full command line (`ps -o args=`). */
112
+ args: string;
113
+ /** Value of {@link TMUX_SESSION_ENV} inherited from the pane, when present. */
114
+ tmuxSession?: string;
115
+ }
116
+ /** Liveness of the tmux session that owns a set of processes. */
117
+ export interface PaneOwner {
118
+ /** The session's agent pane process is still running. */
119
+ agentAlive: boolean;
120
+ /** A client is attached to the session — a human is looking at it. */
121
+ attached: boolean;
122
+ }
123
+ /** Why a process was selected, for human output and tests. */
124
+ export type OrphanReason = 'tmux-session-gone' | 'tmux-agent-exited' | 'detached-helper';
125
+ export interface OrphanCandidate {
126
+ pid: number;
127
+ args: string;
128
+ reason: OrphanReason;
129
+ /** Owning tmux session, when the process carried the marker. */
130
+ tmuxSession?: string;
131
+ }
132
+ export interface OrphanReapResult {
133
+ /** Processes signalled (SIGTERM, escalated to SIGKILL when they ignore it). */
134
+ killed: number;
135
+ /** One human-readable line per reaped process. */
136
+ details: string[];
137
+ /** Selected candidates, whether or not they were killed (`dryRun`). */
138
+ candidates: OrphanCandidate[];
139
+ /**
140
+ * Non-fatal observations worth logging — e.g. "tier 1 skipped this sweep:
141
+ * a tmux query failed" (see {@link selectOrphanProcesses}'s `ownersReliable`).
142
+ * Never gates the reap; it only explains why fewer candidates were found.
143
+ */
144
+ warnings: string[];
145
+ }
146
+ /**
147
+ * A harness that detaches helper daemons from the session environment, and the
148
+ * pid it records as their owner.
149
+ *
150
+ * Registry rather than per-agent branches: a second harness with the same shape
151
+ * is one entry, and the completeness of the table is what a reviewer checks.
152
+ */
153
+ export interface DetachedHelperRule {
154
+ /** Harness id, for the reap detail line. */
155
+ agent: string;
156
+ /** Owner pid the helper declares in its own argv, or undefined when it is not this rule's process. */
157
+ spawnerPid(args: string): number | undefined;
158
+ }
159
+ export declare const DETACHED_HELPER_RULES: DetachedHelperRule[];
160
+ /**
161
+ * Long-lived agents-cli services that must never be reaped, even when they
162
+ * inherited a pane's environment because the CLI invocation that started them
163
+ * happened to run inside an agent pane.
164
+ *
165
+ * This is a safety invariant, not a fallback: the routines daemon runs this very
166
+ * reaper, so killing it would make the reaper delete its own executor, and the
167
+ * secrets broker holds the keychain session every live agent depends on.
168
+ */
169
+ export declare function isProtectedAgentsService(args: string): boolean;
170
+ /**
171
+ * Pure. Select the processes whose owning agent is provably gone.
172
+ *
173
+ * `owners` maps a tmux session name to its liveness; a name ABSENT from the map
174
+ * is a session tmux no longer has, which is the strongest orphan signal there is
175
+ * — but ONLY when `owners` is itself known-complete. `opts.ownersReliable`
176
+ * (default `true`, so existing direct callers/tests keep their prior meaning)
177
+ * says whether the caller actually got a real answer from tmux for every
178
+ * socket it queried. When it is `false` — a query threw, timed out, or tmux
179
+ * itself never answered — tier 1 is skipped entirely for this call: an absent
180
+ * map entry proves nothing when the map itself might be missing entries for
181
+ * sessions tmux never got asked about (RUSH-2521 review — a flaky tick must
182
+ * never fall back to "treat every marked process as orphaned").
183
+ */
184
+ export declare function selectOrphanProcesses(procs: AgentProcess[], owners: Map<string, PaneOwner>, opts: {
185
+ protectedPids: Set<number>;
186
+ isAlive?: (pid: number) => boolean;
187
+ ownersReliable?: boolean;
188
+ /**
189
+ * Every pane leaf pid tmux itself currently reports (see
190
+ * {@link parsePanePids}) — marker-independent, so it protects a live pane
191
+ * leaf process even when {@link TMUX_SESSION_ENV} was never readable for
192
+ * it (tier 1 is dead on macOS by design; a bare `claude` invocation
193
+ * outside an agents-cli-managed pane never carries the marker either).
194
+ * Without this, a live interactive agent whose OWN argv happened to
195
+ * quote {@link DETACHED_HELPER_RULES}'s match pattern (this file's own
196
+ * docblock does) could seed tier 2 the moment its marker was unreadable
197
+ * — the exact residual gap the executable anchor alone did not close
198
+ * (RUSH-2521 review, round 2).
199
+ */
200
+ livePanePids?: Set<number>;
201
+ }): OrphanCandidate[];
202
+ /**
203
+ * Pure. `seeds` plus every process reachable from them through ppid links.
204
+ * Depth is bounded by the table size, so a ppid cycle (which the kernel cannot
205
+ * produce, but a malformed snapshot could) terminates.
206
+ */
207
+ export declare function descendantsOf(procs: AgentProcess[], seeds: number[]): number[];
208
+ /** Pure. Parse `ps -A -o pid=,ppid=,args=` output. */
209
+ export declare function parseProcessRows(stdout: string): AgentProcess[];
210
+ /**
211
+ * Pure. Extract the pane marker from a blob that contains the process
212
+ * environment — a NUL-separated `/proc/<pid>/environ` on Linux, or the
213
+ * space-separated `KEY=VALUE` tail macOS `ps -E` appends after the command.
214
+ * Session names are `[A-Za-z0-9_-]` ({@link ../tmux/session.ts} `VALID_NAME`),
215
+ * so the value ends at the first character outside that set.
216
+ */
217
+ export declare function parseTmuxSessionMarker(blob: string): string | undefined;
218
+ /** Pure. Parse `tmux list-panes -a -F '#{session_name}\t#{pane_pid}\t#{session_attached}'`. */
219
+ export declare function parsePaneOwners(stdout: string, isAlive?: (pid: number) => boolean): Map<string, PaneOwner>;
220
+ /**
221
+ * Pure. Every `#{pane_pid}` tmux reports in the same `list-panes -a` output
222
+ * {@link parsePaneOwners} reads — a pid tmux itself says is a pane's leaf
223
+ * process, independent of whether that process's OWN environment is readable.
224
+ *
225
+ * This is the marker-independent half of pane ownership: {@link parsePaneOwners}
226
+ * answers "is SESSION X owned" by aggregating over every pane a session has;
227
+ * this answers "is PID N itself a pane leaf tmux currently tracks" for exactly
228
+ * one candidate pid, with no dependency on {@link TMUX_SESSION_ENV} ever having
229
+ * been readable for it.
230
+ */
231
+ export declare function parsePanePids(stdout: string): Set<number>;
232
+ /**
233
+ * Snapshot the process table with each process's pane marker.
234
+ *
235
+ * Two readers because no single command works on both platforms: Linux exposes
236
+ * `/proc/<pid>/environ` (one cheap read per pid), while macOS has no `/proc` and
237
+ * instead lets `ps -E` print a process's own-uid environment after its command
238
+ * — though on modern macOS `ps -E` no longer includes it at all (see the
239
+ * "Known platform gap" section in this file's docblock); tier 1 safely no-ops
240
+ * there rather than misattributing anything. Windows has no tmux integration
241
+ * at all, so it returns an empty table rather than pretending to reap.
242
+ *
243
+ * `opts.pids` restricts the `ps` snapshot to an explicit pid allowlist instead
244
+ * of the whole machine (`-A`) — a test-only escape hatch so a reap exercised
245
+ * against real spawned processes can never select or signal a real, unrelated
246
+ * process on a shared box (RUSH-2521 review: the integration tests previously
247
+ * called the machine-wide reap directly, which is safe only by construction of
248
+ * the fixture, not by anything the reaper itself guarantees).
249
+ */
250
+ export declare function readAgentProcesses(opts?: {
251
+ pids?: number[];
252
+ }): Promise<AgentProcess[]>;
253
+ /** One socket's pane-ownership read. `ok: false` means tmux never actually answered. */
254
+ export interface PaneOwnersRead {
255
+ /**
256
+ * `true` when tmux completed the query (whatever its exit code — a nonzero
257
+ * exit from `list-panes -a` IS tmux affirmatively answering "no server /
258
+ * no sessions here", a real and trustworthy empty result). `false` means the
259
+ * query never got that far: a thrown error, a timeout, or a missing/wrong
260
+ * tmux — in which case `owners` carries no information and must not be
261
+ * trusted as "no sessions".
262
+ */
263
+ ok: boolean;
264
+ owners: Map<string, PaneOwner>;
265
+ /** Every pane leaf pid tmux reported, marker-independent (see {@link parsePanePids}). */
266
+ panePids: Set<number>;
267
+ }
268
+ /**
269
+ * Read one tmux socket's session-ownership state.
270
+ *
271
+ * Distinguishes "tmux answered: nothing here" from "tmux did not answer" —
272
+ * the two were previously conflated (`.catch(() => null)` then `!res` folded
273
+ * into the same empty-map return as a clean nonzero exit), which meant a
274
+ * missing/wrong-version tmux, a spawn failure, or a wedged server were
275
+ * indistinguishable from a genuinely empty box. A completed process — even a
276
+ * nonzero exit — is a real answer; a rejected promise is not an answer at all
277
+ * (RUSH-2521 review).
278
+ */
279
+ export declare function readPaneOwners(socket: string): Promise<PaneOwnersRead>;
280
+ /**
281
+ * Reap every helper process whose owning agent has exited.
282
+ *
283
+ * Called from the daemon's periodic tick and from `agents sessions reap`. Panes
284
+ * are read BEFORE processes so a session that disappears mid-scan is treated as
285
+ * gone (reapable) rather than as a live owner.
286
+ *
287
+ * `opts.pids` is the test-only process-table scope described on
288
+ * {@link readAgentProcesses} — never set by production callers.
289
+ */
290
+ export declare function reapOrphanAgentProcesses(opts?: {
291
+ socket: string;
292
+ dryRun?: boolean;
293
+ graceMs?: number;
294
+ pids?: number[];
295
+ }): Promise<OrphanReapResult>;
296
+ /**
297
+ * Reap the helper processes belonging to ONE tmux session, on the teardown path.
298
+ *
299
+ * `killSession` calls this so an agent's helpers die with the session that owned
300
+ * them instead of waiting for the next daemon tick. The tmux session is being
301
+ * destroyed by the caller, so ownership needs no liveness check — anything still
302
+ * carrying this session's marker is leftover by definition, PROVIDED the name
303
+ * is unique to the socket in play.
304
+ *
305
+ * `socket` narrows that: a session name is only unique WITHIN one tmux server,
306
+ * so the exact same marker value could legitimately belong to a live, unrelated
307
+ * session on a DIFFERENT socket (e.g. the shared agents socket vs. a test's own
308
+ * temp socket). When `socket` names a non-default socket, this checks the
309
+ * default agents socket for a live/attached session of the same name and backs
310
+ * off entirely if one exists — the caller is tearing down one session, not a
311
+ * same-named one it does not own.
312
+ *
313
+ * `opts.pids` is the test-only process-table scope described on
314
+ * {@link readAgentProcesses} — never set by production callers.
315
+ */
316
+ export declare function reapProcessesForTmuxSession(name: string, socket?: string, opts?: {
317
+ dryRun?: boolean;
318
+ graceMs?: number;
319
+ pids?: number[];
320
+ }): Promise<OrphanReapResult>;