@phnx-labs/agents-cli 1.22.35 → 1.22.38

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 (500) hide show
  1. package/CHANGELOG.md +708 -2
  2. package/README.md +83 -43
  3. package/dist/bin/agents +0 -0
  4. package/dist/bootstrap.d.ts +15 -0
  5. package/dist/bootstrap.js +1212 -0
  6. package/dist/commands/accounts.d.ts +4 -11
  7. package/dist/commands/accounts.js +159 -27
  8. package/dist/commands/artifacts-setup.d.ts +53 -0
  9. package/dist/commands/artifacts-setup.js +161 -0
  10. package/dist/commands/artifacts.d.ts +18 -0
  11. package/dist/commands/artifacts.js +58 -0
  12. package/dist/commands/attach.js +17 -4
  13. package/dist/commands/audit.d.ts +8 -8
  14. package/dist/commands/audit.js +57 -47
  15. package/dist/commands/browser.js +17 -11
  16. package/dist/commands/cloud.js +1 -1
  17. package/dist/commands/commands.js +0 -11
  18. package/dist/commands/computer-actions.js +33 -0
  19. package/dist/commands/computer-sessions-picker.d.ts +21 -0
  20. package/dist/commands/computer-sessions-picker.js +141 -0
  21. package/dist/commands/computer.d.ts +16 -0
  22. package/dist/commands/computer.js +37 -0
  23. package/dist/commands/config.d.ts +17 -0
  24. package/dist/commands/config.js +401 -0
  25. package/dist/commands/cp.d.ts +84 -0
  26. package/dist/commands/cp.js +231 -0
  27. package/dist/commands/daemon.js +243 -14
  28. package/dist/commands/detach-core.d.ts +1 -1
  29. package/dist/commands/detach-core.js +12 -2
  30. package/dist/commands/detach.js +1 -1
  31. package/dist/commands/doctor.js +64 -5
  32. package/dist/commands/events.d.ts +24 -12
  33. package/dist/commands/events.js +144 -28
  34. package/dist/commands/exec.js +86 -42
  35. package/dist/commands/feed.d.ts +1 -1
  36. package/dist/commands/feed.js +16 -8
  37. package/dist/commands/focus.d.ts +33 -1
  38. package/dist/commands/focus.js +177 -17
  39. package/dist/commands/funnel.d.ts +1 -1
  40. package/dist/commands/go.js +9 -8
  41. package/dist/commands/harness-wizard.d.ts +1 -0
  42. package/dist/commands/harness-wizard.js +18 -20
  43. package/dist/commands/harness.d.ts +2 -0
  44. package/dist/commands/harness.js +59 -26
  45. package/dist/commands/hooks.js +0 -11
  46. package/dist/commands/inspect.d.ts +94 -1
  47. package/dist/commands/inspect.js +866 -40
  48. package/dist/commands/lease.d.ts +4 -4
  49. package/dist/commands/lease.js +6 -6
  50. package/dist/commands/login.js +0 -13
  51. package/dist/commands/logs.d.ts +2 -2
  52. package/dist/commands/logs.js +2 -2
  53. package/dist/commands/mcp.js +7 -2
  54. package/dist/commands/memory.js +7 -2
  55. package/dist/commands/message.d.ts +1 -1
  56. package/dist/commands/message.js +37 -6
  57. package/dist/commands/models.js +71 -0
  58. package/dist/commands/monitors.d.ts +0 -1
  59. package/dist/commands/monitors.js +199 -16
  60. package/dist/commands/open.d.ts +18 -0
  61. package/dist/commands/open.js +57 -0
  62. package/dist/commands/packages.js +2 -107
  63. package/dist/commands/plugins.js +6 -3
  64. package/dist/commands/profiles.d.ts +1 -0
  65. package/dist/commands/profiles.js +16 -160
  66. package/dist/commands/projects.d.ts +28 -0
  67. package/dist/commands/projects.js +125 -5
  68. package/dist/commands/reconnect.js +9 -3
  69. package/dist/commands/repo.js +42 -1
  70. package/dist/commands/resource-view.d.ts +17 -0
  71. package/dist/commands/resource-view.js +36 -14
  72. package/dist/commands/resume.js +9 -2
  73. package/dist/commands/routines.d.ts +0 -2
  74. package/dist/commands/routines.js +473 -289
  75. package/dist/commands/secrets.js +52 -9
  76. package/dist/commands/sessions-export.d.ts +47 -0
  77. package/dist/commands/sessions-export.js +116 -6
  78. package/dist/commands/sessions-import.d.ts +17 -0
  79. package/dist/commands/sessions-import.js +114 -6
  80. package/dist/commands/sessions-migrate.d.ts +27 -0
  81. package/dist/commands/sessions-migrate.js +50 -9
  82. package/dist/commands/sessions-picker.js +23 -4
  83. package/dist/commands/sessions-resume.d.ts +5 -3
  84. package/dist/commands/sessions-resume.js +30 -8
  85. package/dist/commands/sessions-watch.d.ts +2 -0
  86. package/dist/commands/sessions-watch.js +53 -0
  87. package/dist/commands/sessions.d.ts +66 -3
  88. package/dist/commands/sessions.js +298 -47
  89. package/dist/commands/setup-browser.js +2 -2
  90. package/dist/commands/setup-mine.js +0 -1
  91. package/dist/commands/setup-preferences.js +1 -1
  92. package/dist/commands/setup.d.ts +5 -0
  93. package/dist/commands/setup.js +31 -5
  94. package/dist/commands/share.d.ts +87 -7
  95. package/dist/commands/share.js +320 -58
  96. package/dist/commands/skills.js +0 -11
  97. package/dist/commands/snapshot.js +1 -1
  98. package/dist/commands/ssh.d.ts +18 -0
  99. package/dist/commands/ssh.js +549 -210
  100. package/dist/commands/sync.d.ts +5 -0
  101. package/dist/commands/sync.js +212 -32
  102. package/dist/commands/teams.d.ts +13 -0
  103. package/dist/commands/teams.js +187 -30
  104. package/dist/commands/tickets.d.ts +2 -0
  105. package/dist/commands/tickets.js +43 -0
  106. package/dist/commands/update.js +2 -4
  107. package/dist/commands/usage.js +5 -3
  108. package/dist/commands/versions.js +11 -5
  109. package/dist/commands/view.js +15 -7
  110. package/dist/commands/webhook.d.ts +2 -2
  111. package/dist/commands/webhook.js +7 -7
  112. package/dist/index.d.ts +18 -2
  113. package/dist/index.js +53 -1264
  114. package/dist/lib/account-catalog.d.ts +18 -0
  115. package/dist/lib/account-catalog.js +38 -0
  116. package/dist/lib/account-provider-registry.d.ts +18 -0
  117. package/dist/lib/account-provider-registry.js +59 -0
  118. package/dist/lib/account-registry.d.ts +40 -0
  119. package/dist/lib/account-registry.js +239 -0
  120. package/dist/lib/account-schema.d.ts +44 -0
  121. package/dist/lib/account-schema.js +91 -0
  122. package/dist/lib/account-state-service.d.ts +21 -0
  123. package/dist/lib/account-state-service.js +60 -0
  124. package/dist/lib/activity.d.ts +1 -1
  125. package/dist/lib/activity.js +8 -1
  126. package/dist/lib/add-dir.d.ts +80 -0
  127. package/dist/lib/add-dir.js +241 -0
  128. package/dist/lib/agent-cli-commands.d.ts +11 -0
  129. package/dist/lib/agent-cli-commands.js +30 -0
  130. package/dist/lib/agents.js +44 -36
  131. package/dist/lib/answer-router.js +1 -1
  132. package/dist/lib/audit/log.d.ts +10 -27
  133. package/dist/lib/audit/log.js +20 -33
  134. package/dist/lib/auth-health.d.ts +9 -2
  135. package/dist/lib/auth-health.js +42 -9
  136. package/dist/lib/auto-pull-worker.js +7 -3
  137. package/dist/lib/auto-pull.d.ts +44 -3
  138. package/dist/lib/auto-pull.js +88 -5
  139. package/dist/lib/binary-shadow.d.ts +28 -0
  140. package/dist/lib/binary-shadow.js +121 -0
  141. package/dist/lib/brand.js +9 -3
  142. package/dist/lib/browser/hygiene.d.ts +90 -0
  143. package/dist/lib/browser/hygiene.js +146 -0
  144. package/dist/lib/browser/ipc.d.ts +30 -0
  145. package/dist/lib/browser/ipc.js +93 -4
  146. package/dist/lib/browser/profiles.d.ts +3 -2
  147. package/dist/lib/browser/profiles.js +65 -22
  148. package/dist/lib/browser/service.d.ts +79 -1
  149. package/dist/lib/browser/service.js +231 -14
  150. package/dist/lib/browser/sessions-list.d.ts +22 -2
  151. package/dist/lib/browser/sessions-list.js +54 -6
  152. package/dist/lib/browser/stream.d.ts +2 -0
  153. package/dist/lib/browser/stream.js +1 -0
  154. package/dist/lib/browser/types.d.ts +63 -1
  155. package/dist/lib/byok-usage.d.ts +9 -2
  156. package/dist/lib/byok-usage.js +133 -31
  157. package/dist/lib/cli-entry.d.ts +11 -0
  158. package/dist/lib/cli-entry.js +46 -0
  159. package/dist/lib/cloud/host.d.ts +1 -1
  160. package/dist/lib/cloud/host.js +2 -2
  161. package/dist/lib/cloud/registry.js +1 -1
  162. package/dist/lib/cloud/types.d.ts +1 -1
  163. package/dist/lib/commands.d.ts +2 -0
  164. package/dist/lib/commands.js +2 -0
  165. package/dist/lib/computer/sessions-list.d.ts +150 -0
  166. package/dist/lib/computer/sessions-list.js +363 -0
  167. package/dist/lib/config-keys.d.ts +86 -0
  168. package/dist/lib/config-keys.js +193 -0
  169. package/dist/lib/config-machine-keys.d.ts +12 -0
  170. package/dist/lib/config-machine-keys.js +17 -0
  171. package/dist/lib/config-transfer.js +3 -4
  172. package/dist/lib/crabbox/cli.d.ts +2 -2
  173. package/dist/lib/crabbox/cli.js +3 -3
  174. package/dist/lib/daemon-health.d.ts +22 -0
  175. package/dist/lib/daemon-health.js +33 -3
  176. package/dist/lib/daemon-services.d.ts +50 -0
  177. package/dist/lib/daemon-services.js +147 -0
  178. package/dist/lib/daemon-ticks.d.ts +35 -66
  179. package/dist/lib/daemon-ticks.js +77 -159
  180. package/dist/lib/daemon.d.ts +72 -4
  181. package/dist/lib/daemon.js +792 -202
  182. package/dist/lib/deeplink/register.d.ts +49 -0
  183. package/dist/lib/deeplink/register.js +253 -0
  184. package/dist/lib/deeplink/url.d.ts +34 -0
  185. package/dist/lib/deeplink/url.js +78 -0
  186. package/dist/lib/device-config.d.ts +124 -29
  187. package/dist/lib/device-config.js +346 -141
  188. package/dist/lib/devices/config-migration.d.ts +42 -0
  189. package/dist/lib/devices/config-migration.js +203 -0
  190. package/dist/lib/devices/connect.js +14 -7
  191. package/dist/lib/devices/doctor-findings.d.ts +4 -1
  192. package/dist/lib/devices/doctor-findings.js +20 -1
  193. package/dist/lib/devices/harness-inventory.d.ts +11 -2
  194. package/dist/lib/devices/harness-inventory.js +0 -0
  195. package/dist/lib/devices/health.d.ts +1 -1
  196. package/dist/lib/devices/health.js +1 -1
  197. package/dist/lib/devices/pending.d.ts +22 -1
  198. package/dist/lib/devices/pending.js +67 -2
  199. package/dist/lib/devices/registry.d.ts +0 -25
  200. package/dist/lib/devices/registry.js +2 -83
  201. package/dist/lib/devices/resolve-profile.d.ts +20 -0
  202. package/dist/lib/devices/resolve-profile.js +44 -0
  203. package/dist/lib/devices/rollout-verify.d.ts +101 -0
  204. package/dist/lib/devices/rollout-verify.js +193 -0
  205. package/dist/lib/devices/ssh-config.js +10 -6
  206. package/dist/lib/event-families.d.ts +28 -0
  207. package/dist/lib/event-families.js +159 -0
  208. package/dist/lib/event-stream.d.ts +9 -1
  209. package/dist/lib/event-stream.js +26 -9
  210. package/dist/lib/events.d.ts +9 -1
  211. package/dist/lib/events.js +21 -6
  212. package/dist/lib/exec.d.ts +30 -0
  213. package/dist/lib/exec.js +219 -121
  214. package/dist/lib/feed-broadcast.d.ts +25 -0
  215. package/dist/lib/feed-broadcast.js +33 -0
  216. package/dist/lib/feed.d.ts +1 -1
  217. package/dist/lib/feed.js +12 -2
  218. package/dist/lib/fleet/capture.js +15 -0
  219. package/dist/lib/fleet/manifest.js +9 -0
  220. package/dist/lib/fleet/types.d.ts +9 -0
  221. package/dist/lib/fleet-status.js +10 -8
  222. package/dist/lib/git.d.ts +21 -7
  223. package/dist/lib/git.js +122 -18
  224. package/dist/lib/hosts/dispatch.d.ts +8 -3
  225. package/dist/lib/hosts/dispatch.js +29 -3
  226. package/dist/lib/hosts/logs.d.ts +2 -2
  227. package/dist/lib/hosts/logs.js +2 -2
  228. package/dist/lib/hosts/option.js +1 -1
  229. package/dist/lib/hosts/passthrough.d.ts +2 -3
  230. package/dist/lib/hosts/passthrough.js +10 -24
  231. package/dist/lib/hosts/progress.js +2 -2
  232. package/dist/lib/hosts/providers/devices.d.ts +3 -3
  233. package/dist/lib/hosts/providers/devices.js +18 -12
  234. package/dist/lib/hosts/ready.d.ts +5 -1
  235. package/dist/lib/hosts/ready.js +9 -3
  236. package/dist/lib/hosts/reconcile.d.ts +2 -2
  237. package/dist/lib/hosts/reconcile.js +2 -2
  238. package/dist/lib/hosts/registry.js +14 -9
  239. package/dist/lib/hosts/remote-cmd.js +1 -1
  240. package/dist/lib/hosts/remote-os.d.ts +9 -6
  241. package/dist/lib/hosts/remote-os.js +13 -6
  242. package/dist/lib/hosts/routing-flag.d.ts +23 -0
  243. package/dist/lib/hosts/routing-flag.js +41 -0
  244. package/dist/lib/hosts/run-target.js +1 -1
  245. package/dist/lib/hosts/session-index.js +1 -1
  246. package/dist/lib/hosts/tasks.d.ts +6 -6
  247. package/dist/lib/hosts/tasks.js +4 -4
  248. package/dist/lib/hosts/types.js +1 -2
  249. package/dist/lib/installations/resolve.js +2 -8
  250. package/dist/lib/isolation-boundary-report.js +0 -1
  251. package/dist/lib/linear-cache.d.ts +7 -0
  252. package/dist/lib/linear-cache.js +31 -4
  253. package/dist/lib/linear-project-counts.d.ts +1 -1
  254. package/dist/lib/linear-project-counts.js +2 -3
  255. package/dist/lib/linear-projects.js +1 -1
  256. package/dist/lib/loop.d.ts +2 -2
  257. package/dist/lib/loop.js +1 -1
  258. package/dist/lib/mailbox-target.d.ts +1 -1
  259. package/dist/lib/mailbox-target.js +1 -1
  260. package/dist/lib/manifest.js +7 -4
  261. package/dist/lib/menubar/MenubarHelper.app/Contents/CodeResources +0 -0
  262. package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
  263. package/dist/lib/menubar/snapshot.d.ts +3 -2
  264. package/dist/lib/menubar/snapshot.js +6 -2
  265. package/dist/lib/migrate-fold.d.ts +33 -0
  266. package/dist/lib/migrate-fold.js +130 -0
  267. package/dist/lib/migrate.d.ts +34 -34
  268. package/dist/lib/migrate.js +106 -128
  269. package/dist/lib/model-tier-overrides.d.ts +1 -1
  270. package/dist/lib/model-tier-overrides.js +15 -2
  271. package/dist/lib/monitors/config.d.ts +17 -3
  272. package/dist/lib/monitors/config.js +52 -18
  273. package/dist/lib/monitors/engine.d.ts +32 -1
  274. package/dist/lib/monitors/engine.js +94 -11
  275. package/dist/lib/monitors/fingerprint.d.ts +46 -0
  276. package/dist/lib/monitors/fingerprint.js +100 -0
  277. package/dist/lib/monitors/remote.d.ts +47 -0
  278. package/dist/lib/monitors/remote.js +81 -0
  279. package/dist/lib/monitors/state.d.ts +39 -0
  280. package/dist/lib/monitors/state.js +56 -0
  281. package/dist/lib/onepassword.d.ts +17 -0
  282. package/dist/lib/onepassword.js +52 -22
  283. package/dist/lib/open-url.js +1 -1
  284. package/dist/lib/picker.d.ts +14 -2
  285. package/dist/lib/picker.js +35 -13
  286. package/dist/lib/placement.d.ts +1 -1
  287. package/dist/lib/placement.js +1 -1
  288. package/dist/lib/pr-land-detach.d.ts +32 -0
  289. package/dist/lib/pr-land-detach.js +79 -0
  290. package/dist/lib/profiles-presets.js +13 -0
  291. package/dist/lib/profiles.d.ts +2 -0
  292. package/dist/lib/profiles.js +44 -1
  293. package/dist/lib/project-focus.d.ts +1 -1
  294. package/dist/lib/project-focus.js +1 -1
  295. package/dist/lib/project-probe.d.ts +4 -1
  296. package/dist/lib/project-probe.js +5 -4
  297. package/dist/lib/project-resources.js +2 -18
  298. package/dist/lib/project-root.d.ts +16 -0
  299. package/dist/lib/project-root.js +20 -2
  300. package/dist/lib/projects.d.ts +20 -1
  301. package/dist/lib/projects.js +78 -1
  302. package/dist/lib/refresh-coordinator.d.ts +24 -0
  303. package/dist/lib/refresh-coordinator.js +52 -0
  304. package/dist/lib/registry.d.ts +2 -2
  305. package/dist/lib/registry.js +1 -1
  306. package/dist/lib/resource-aliases.d.ts +13 -0
  307. package/dist/lib/resource-aliases.js +26 -0
  308. package/dist/lib/resources/types.d.ts +1 -1
  309. package/dist/lib/resources.d.ts +16 -0
  310. package/dist/lib/resources.js +66 -10
  311. package/dist/lib/rotate.d.ts +3 -4
  312. package/dist/lib/rotate.js +4 -5
  313. package/dist/lib/routine-activation.d.ts +22 -2
  314. package/dist/lib/routine-activation.js +63 -16
  315. package/dist/lib/routine-context.d.ts +9 -2
  316. package/dist/lib/routine-context.js +21 -6
  317. package/dist/lib/routines-project.d.ts +58 -48
  318. package/dist/lib/routines-project.js +190 -159
  319. package/dist/lib/routines.d.ts +44 -7
  320. package/dist/lib/routines.js +92 -34
  321. package/dist/lib/run-defaults.d.ts +5 -0
  322. package/dist/lib/run-defaults.js +11 -1
  323. package/dist/lib/runner.d.ts +10 -8
  324. package/dist/lib/runner.js +122 -39
  325. package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
  326. package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
  327. package/dist/lib/secrets/agent.d.ts +10 -3
  328. package/dist/lib/secrets/agent.js +43 -8
  329. package/dist/lib/secrets/bundles.d.ts +1 -0
  330. package/dist/lib/secrets/bundles.js +92 -80
  331. package/dist/lib/secrets/index.js +32 -9
  332. package/dist/lib/secrets/install-helper.d.ts +4 -4
  333. package/dist/lib/secrets/install-helper.js +4 -4
  334. package/dist/lib/secrets/push.d.ts +40 -6
  335. package/dist/lib/secrets/push.js +58 -11
  336. package/dist/lib/secrets/read-backoff.d.ts +1 -1
  337. package/dist/lib/secrets/read-backoff.js +1 -1
  338. package/dist/lib/secrets/remote.d.ts +24 -0
  339. package/dist/lib/secrets/remote.js +54 -4
  340. package/dist/lib/self-update.d.ts +108 -0
  341. package/dist/lib/self-update.js +276 -1
  342. package/dist/lib/session/active.d.ts +89 -5
  343. package/dist/lib/session/active.js +165 -10
  344. package/dist/lib/session/actor-sidecar.d.ts +1 -1
  345. package/dist/lib/session/actor-sidecar.js +2 -1
  346. package/dist/lib/session/db.d.ts +176 -2
  347. package/dist/lib/session/db.js +484 -17
  348. package/dist/lib/session/discover.js +27 -4
  349. package/dist/lib/session/hook-sessions.js +2 -2
  350. package/dist/lib/session/host-link.d.ts +2 -2
  351. package/dist/lib/session/host-link.js +2 -2
  352. package/dist/lib/session/pid-registry.d.ts +21 -0
  353. package/dist/lib/session/pid-registry.js +57 -0
  354. package/dist/lib/session/remote-active.js +15 -1
  355. package/dist/lib/session/remote.js +2 -2
  356. package/dist/lib/session/session-cache.d.ts +14 -7
  357. package/dist/lib/session/session-cache.js +51 -9
  358. package/dist/lib/session/state.d.ts +2 -2
  359. package/dist/lib/session/state.js +1 -1
  360. package/dist/lib/session/sync/config.d.ts +10 -10
  361. package/dist/lib/session/sync/config.js +10 -10
  362. package/dist/lib/session/sync/r2.d.ts +34 -0
  363. package/dist/lib/session/sync/r2.js +123 -0
  364. package/dist/lib/session/throughput.d.ts +1 -1
  365. package/dist/lib/session/throughput.js +1 -1
  366. package/dist/lib/session/types.d.ts +23 -1
  367. package/dist/lib/session/types.js +15 -0
  368. package/dist/lib/session/viewing-in.d.ts +1 -1
  369. package/dist/lib/session/viewing-in.js +1 -1
  370. package/dist/lib/session/watch.d.ts +101 -0
  371. package/dist/lib/session/watch.js +242 -0
  372. package/dist/lib/share/analytics.js +1 -1
  373. package/dist/lib/share/capture.d.ts +1 -1
  374. package/dist/lib/share/capture.js +3 -3
  375. package/dist/lib/share/config.d.ts +6 -2
  376. package/dist/lib/share/config.js +6 -5
  377. package/dist/lib/share/delete.js +3 -3
  378. package/dist/lib/share/provision.d.ts +38 -0
  379. package/dist/lib/share/provision.js +51 -1
  380. package/dist/lib/share/publish.d.ts +40 -1
  381. package/dist/lib/share/publish.js +119 -6
  382. package/dist/lib/share/worker-template.d.ts +12 -1
  383. package/dist/lib/share/worker-template.js +83 -7
  384. package/dist/lib/shims.d.ts +17 -3
  385. package/dist/lib/shims.js +98 -26
  386. package/dist/lib/signin-badge.js +3 -2
  387. package/dist/lib/skills.js +2 -0
  388. package/dist/lib/smart-launch.d.ts +8 -8
  389. package/dist/lib/smart-launch.js +80 -59
  390. package/dist/lib/ssh-exec.d.ts +1 -1
  391. package/dist/lib/ssh-exec.js +1 -1
  392. package/dist/lib/staleness/prune.d.ts +88 -0
  393. package/dist/lib/staleness/prune.js +69 -0
  394. package/dist/lib/staleness/registry.d.ts +1 -1
  395. package/dist/lib/staleness/writers/commands.js +34 -2
  396. package/dist/lib/staleness/writers/hooks.js +16 -0
  397. package/dist/lib/staleness/writers/kinds.d.ts +6 -0
  398. package/dist/lib/staleness/writers/skills.js +19 -0
  399. package/dist/lib/staleness/writers/subagents.d.ts +2 -3
  400. package/dist/lib/staleness/writers/subagents.js +0 -4
  401. package/dist/lib/staleness/writers/types.d.ts +32 -0
  402. package/dist/lib/startup/command-registry.d.ts +16 -14
  403. package/dist/lib/startup/command-registry.js +26 -37
  404. package/dist/lib/startup/dev-build.d.ts +10 -0
  405. package/dist/lib/startup/dev-build.js +13 -1
  406. package/dist/lib/startup/spellcheck.d.ts +18 -0
  407. package/dist/lib/startup/spellcheck.js +45 -0
  408. package/dist/lib/state.d.ts +36 -9
  409. package/dist/lib/state.js +96 -46
  410. package/dist/lib/subagents-registry.d.ts +0 -7
  411. package/dist/lib/subagents-registry.js +38 -65
  412. package/dist/lib/subagents.d.ts +0 -33
  413. package/dist/lib/subagents.js +0 -75
  414. package/dist/lib/sync-umbrella.js +1 -1
  415. package/dist/lib/teams/agents.d.ts +41 -1
  416. package/dist/lib/teams/agents.js +187 -9
  417. package/dist/lib/teams/api.d.ts +11 -1
  418. package/dist/lib/teams/api.js +11 -2
  419. package/dist/lib/teams/delivery.d.ts +41 -0
  420. package/dist/lib/teams/delivery.js +60 -0
  421. package/dist/lib/teams/registry.d.ts +14 -0
  422. package/dist/lib/teams/registry.js +51 -1
  423. package/dist/lib/teams/remoteWorktree.d.ts +19 -0
  424. package/dist/lib/teams/remoteWorktree.js +29 -0
  425. package/dist/lib/teams/scheduler.d.ts +1 -1
  426. package/dist/lib/teams/scheduler.js +1 -1
  427. package/dist/lib/teams/worktree.d.ts +24 -0
  428. package/dist/lib/teams/worktree.js +42 -0
  429. package/dist/lib/terminal/backends/vscodium-agent.d.ts +10 -1
  430. package/dist/lib/terminal/backends/vscodium-agent.js +16 -5
  431. package/dist/lib/terminal/engine.d.ts +4 -0
  432. package/dist/lib/terminal/engine.js +8 -2
  433. package/dist/lib/terminal/types.d.ts +21 -2
  434. package/dist/lib/testdata/refresh-coordinator-worker.d.ts +1 -0
  435. package/dist/lib/testdata/refresh-coordinator-worker.js +23 -0
  436. package/dist/lib/tickets/list.d.ts +53 -0
  437. package/dist/lib/tickets/list.js +153 -0
  438. package/dist/lib/tmux/orphan-reap.d.ts +316 -0
  439. package/dist/lib/tmux/orphan-reap.js +638 -0
  440. package/dist/lib/tmux/session.d.ts +68 -3
  441. package/dist/lib/tmux/session.js +96 -5
  442. package/dist/lib/triggers/handlers.d.ts +20 -0
  443. package/dist/lib/triggers/handlers.js +16 -1
  444. package/dist/lib/triggers/webhook.js +10 -0
  445. package/dist/lib/types.d.ts +47 -35
  446. package/dist/lib/usage-fleet.d.ts +32 -0
  447. package/dist/lib/usage-fleet.js +125 -0
  448. package/dist/lib/usage-refresh.d.ts +3 -3
  449. package/dist/lib/usage-refresh.js +19 -16
  450. package/dist/lib/usage.d.ts +51 -47
  451. package/dist/lib/usage.js +145 -153
  452. package/dist/lib/version-duplicates.js +2 -2
  453. package/dist/lib/versions.d.ts +56 -13
  454. package/dist/lib/versions.js +195 -45
  455. package/dist/lib/watchdog/log.d.ts +1 -1
  456. package/dist/lib/watchdog/log.js +3 -3
  457. package/dist/lib/watchdog/rotate.d.ts +6 -6
  458. package/dist/lib/watchdog/rotate.js +6 -6
  459. package/dist/lib/workflows.d.ts +1 -1
  460. package/dist/lib/yaml-io.d.ts +47 -0
  461. package/dist/lib/yaml-io.js +55 -0
  462. package/package.json +2 -1
  463. package/scripts/install-helper.js +2 -2
  464. package/scripts/postinstall.js +23 -20
  465. package/dist/commands/defaults.d.ts +0 -7
  466. package/dist/commands/defaults.js +0 -107
  467. package/dist/commands/export.d.ts +0 -11
  468. package/dist/commands/export.js +0 -215
  469. package/dist/commands/helper.d.ts +0 -12
  470. package/dist/commands/helper.js +0 -87
  471. package/dist/commands/hosts.d.ts +0 -11
  472. package/dist/commands/hosts.js +0 -330
  473. package/dist/commands/lock.d.ts +0 -12
  474. package/dist/commands/lock.js +0 -70
  475. package/dist/commands/pull.d.ts +0 -17
  476. package/dist/commands/pull.js +0 -39
  477. package/dist/commands/push.d.ts +0 -14
  478. package/dist/commands/push.js +0 -30
  479. package/dist/commands/set.d.ts +0 -15
  480. package/dist/commands/set.js +0 -79
  481. package/dist/commands/setup-share.d.ts +0 -17
  482. package/dist/commands/setup-share.js +0 -85
  483. package/dist/commands/wallet.d.ts +0 -20
  484. package/dist/commands/wallet.js +0 -216
  485. package/dist/commands/worktree.d.ts +0 -19
  486. package/dist/commands/worktree.js +0 -272
  487. package/dist/lib/account-labels.d.ts +0 -24
  488. package/dist/lib/account-labels.js +0 -72
  489. package/dist/lib/auto-dispatch-linear.d.ts +0 -18
  490. package/dist/lib/auto-dispatch-linear.js +0 -107
  491. package/dist/lib/auto-dispatch-provider.d.ts +0 -10
  492. package/dist/lib/auto-dispatch-provider.js +0 -30
  493. package/dist/lib/auto-dispatch.d.ts +0 -93
  494. package/dist/lib/auto-dispatch.js +0 -128
  495. package/dist/lib/export.d.ts +0 -72
  496. package/dist/lib/export.js +0 -269
  497. package/dist/lib/lock.d.ts +0 -93
  498. package/dist/lib/lock.js +0 -207
  499. package/dist/lib/wallet/index.d.ts +0 -78
  500. package/dist/lib/wallet/index.js +0 -253
@@ -0,0 +1,316 @@
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;
62
+ * - an absent session entry is unknown, even after a reliable read. A tmux
63
+ * server restart can produce the same empty snapshot while marked agents
64
+ * remain alive, so tier 1 requires a present owner with positive death proof.
65
+ * - tier 2 is anchored on the actual claude EXECUTABLE (argv[0]'s basename),
66
+ * never a substring match anywhere in the command line, and excludes any
67
+ * process still structurally part of a LIVE pane leaf's process tree right
68
+ * now (tmux's own `#{pane_pid}`, expanded to its current descendants —
69
+ * independent of whether any of those processes' environment markers were
70
+ * ever readable) or that carries a marker whose own session is
71
+ * live/attached — a live interactive agent, OR a subprocess it spawns
72
+ * (e.g. its own Bash tool invoking `claude --print "…"` as a sub-task),
73
+ * whose argv happens to quote this file's docblock (it contains the exact
74
+ * `daemon run --spawned-by {"pid":...}` shape) must never become a kill
75
+ * seed, and that has to hold even where tier 1's marker is dead (macOS, or
76
+ * any `claude` invocation started outside an agents-cli pane). Two review
77
+ * rounds found this: first that marker-only exclusion left the whole
78
+ * macOS/bare-invocation case open (round 2, closed by the pane-pid check),
79
+ * then that the pane-pid check alone only covered the pane LEAF itself, not
80
+ * its own live children (round 3, closed by expanding the check to the
81
+ * leaf's current descendant set via {@link descendantsOf}). A process that
82
+ * has genuinely reparented away — a real detached daemon, no longer chained
83
+ * to any live leaf by ppid — is deliberately NOT in that set and remains
84
+ * reapable, whatever unrelated live agent happens to also be running.
85
+ *
86
+ * ## Known platform gap — tier 1 is Linux-only today
87
+ *
88
+ * Tier 1's env-marker attribution requires reading another process's
89
+ * environment. `/proc/<pid>/environ` makes that a plain file read on Linux.
90
+ * macOS has no `/proc`; `ps -E` was the fallback, but on modern macOS (verified
91
+ * live on mac-mini 15.6, macOS Sequoia) `ps -E` no longer prints another
92
+ * process's environment at all — only the CALLING process's own env shows up.
93
+ * `readAgentProcesses()` therefore returns every macOS process with
94
+ * `tmuxSession: undefined`, and tier 1's `if (!p.tmuxSession) continue` skips
95
+ * all of them. This is SAFE (tier 1 silently no-ops rather than misattributing
96
+ * anything) but not effective: on macOS, only tier 2 — the detached-helper
97
+ * registry — can reap anything today. A macOS fix needs a different channel
98
+ * entirely (env is inherently unreadable cross-process there without a native
99
+ * helper); it is not a parsing bug {@link parseTmuxSessionMarker} can fix.
100
+ */
101
+ /** Grace between SIGTERM and SIGKILL for a reaped orphan. */
102
+ export declare const REAP_GRACE_MS = 2000;
103
+ /** Env var `runInTmux` stamps into the pane, inherited by every descendant. */
104
+ export declare const TMUX_SESSION_ENV = "AGENT_TMUX_SESSION_NAME";
105
+ /** One process, with the fields the reaper attributes on. */
106
+ export interface AgentProcess {
107
+ pid: number;
108
+ ppid: number;
109
+ /** Full command line (`ps -o args=`). */
110
+ args: string;
111
+ /** Value of {@link TMUX_SESSION_ENV} inherited from the pane, when present. */
112
+ tmuxSession?: string;
113
+ }
114
+ /** Liveness of the tmux session that owns a set of processes. */
115
+ export interface PaneOwner {
116
+ /** The session's agent pane process is still running. */
117
+ agentAlive: boolean;
118
+ /** A client is attached to the session — a human is looking at it. */
119
+ attached: boolean;
120
+ }
121
+ /** Why a process was selected, for human output and tests. */
122
+ export type OrphanReason = 'tmux-agent-exited' | 'detached-helper';
123
+ export interface OrphanCandidate {
124
+ pid: number;
125
+ args: string;
126
+ reason: OrphanReason;
127
+ /** Owning tmux session, when the process carried the marker. */
128
+ tmuxSession?: string;
129
+ }
130
+ export interface OrphanReapResult {
131
+ /** Processes signalled (SIGTERM, escalated to SIGKILL when they ignore it). */
132
+ killed: number;
133
+ /** One human-readable line per reaped process. */
134
+ details: string[];
135
+ /** Selected candidates, whether or not they were killed (`dryRun`). */
136
+ candidates: OrphanCandidate[];
137
+ /**
138
+ * Non-fatal observations worth logging — e.g. "tier 1 skipped this sweep:
139
+ * a tmux query failed" (see {@link selectOrphanProcesses}'s `ownersReliable`).
140
+ * Never gates the reap; it only explains why fewer candidates were found.
141
+ */
142
+ warnings: string[];
143
+ }
144
+ /**
145
+ * A harness that detaches helper daemons from the session environment, and the
146
+ * pid it records as their owner.
147
+ *
148
+ * Registry rather than per-agent branches: a second harness with the same shape
149
+ * is one entry, and the completeness of the table is what a reviewer checks.
150
+ */
151
+ export interface DetachedHelperRule {
152
+ /** Harness id, for the reap detail line. */
153
+ agent: string;
154
+ /** Owner pid the helper declares in its own argv, or undefined when it is not this rule's process. */
155
+ spawnerPid(args: string): number | undefined;
156
+ }
157
+ export declare const DETACHED_HELPER_RULES: DetachedHelperRule[];
158
+ /**
159
+ * Long-lived agents-cli services that must never be reaped, even when they
160
+ * inherited a pane's environment because the CLI invocation that started them
161
+ * happened to run inside an agent pane.
162
+ *
163
+ * This is a safety invariant, not a fallback: the routines daemon runs this very
164
+ * reaper, so killing it would make the reaper delete its own executor, and the
165
+ * secrets broker holds the keychain session every live agent depends on.
166
+ */
167
+ export declare function isProtectedAgentsService(args: string): boolean;
168
+ /**
169
+ * Pure. Select the processes whose owning agent is provably gone.
170
+ *
171
+ * `owners` maps a tmux session name to its liveness. An ABSENT name is never
172
+ * proof that the marked process is orphaned: the tmux server can restart or its
173
+ * socket can disappear while the pane's process tree is still alive. That exact
174
+ * state made the daemon classify every live agent as `tmux-session-gone` and
175
+ * SIGTERM it on startup (RUSH-2603). Tier 1 therefore requires a PRESENT owner
176
+ * whose pane process is confirmed dead and has no attached client. A reliable
177
+ * empty map means "nothing proven dead", not "every marked process is dead".
178
+ * `opts.ownersReliable` still disables tier 1 when any query failed to answer.
179
+ */
180
+ export declare function selectOrphanProcesses(procs: AgentProcess[], owners: Map<string, PaneOwner>, opts: {
181
+ protectedPids: Set<number>;
182
+ isAlive?: (pid: number) => boolean;
183
+ ownersReliable?: boolean;
184
+ /**
185
+ * Every pane leaf pid tmux itself currently reports (see
186
+ * {@link parsePanePids}) — marker-independent, so it protects a live pane
187
+ * leaf process even when {@link TMUX_SESSION_ENV} was never readable for
188
+ * it (tier 1 is dead on macOS by design; a bare `claude` invocation
189
+ * outside an agents-cli-managed pane never carries the marker either).
190
+ * Without this, a live interactive agent whose OWN argv happened to
191
+ * quote {@link DETACHED_HELPER_RULES}'s match pattern (this file's own
192
+ * docblock does) could seed tier 2 the moment its marker was unreadable
193
+ * — the exact residual gap the executable anchor alone did not close
194
+ * (RUSH-2521 review, round 2).
195
+ */
196
+ livePanePids?: Set<number>;
197
+ }): OrphanCandidate[];
198
+ /**
199
+ * Pure. `seeds` plus every process reachable from them through ppid links.
200
+ * Depth is bounded by the table size, so a ppid cycle (which the kernel cannot
201
+ * produce, but a malformed snapshot could) terminates.
202
+ */
203
+ export declare function descendantsOf(procs: AgentProcess[], seeds: number[]): number[];
204
+ /** Pure. Parse `ps -A -o pid=,ppid=,args=` output. */
205
+ export declare function parseProcessRows(stdout: string): AgentProcess[];
206
+ /**
207
+ * Pure. Extract the pane marker from a blob that contains the process
208
+ * environment — a NUL-separated `/proc/<pid>/environ` on Linux, or the
209
+ * space-separated `KEY=VALUE` tail macOS `ps -E` appends after the command.
210
+ * Session names are `[A-Za-z0-9_-]` ({@link ../tmux/session.ts} `VALID_NAME`),
211
+ * so the value ends at the first character outside that set.
212
+ */
213
+ export declare function parseTmuxSessionMarker(blob: string): string | undefined;
214
+ /** Pure. Parse `tmux list-panes -a -F '#{session_name}\t#{pane_pid}\t#{session_attached}'`. */
215
+ export declare function parsePaneOwners(stdout: string, isAlive?: (pid: number) => boolean): Map<string, PaneOwner>;
216
+ /**
217
+ * Pure. Every `#{pane_pid}` tmux reports in the same `list-panes -a` output
218
+ * {@link parsePaneOwners} reads — a pid tmux itself says is a pane's leaf
219
+ * process, independent of whether that process's OWN environment is readable.
220
+ *
221
+ * This is the marker-independent half of pane ownership: {@link parsePaneOwners}
222
+ * answers "is SESSION X owned" by aggregating over every pane a session has;
223
+ * this answers "is PID N itself a pane leaf tmux currently tracks" for exactly
224
+ * one candidate pid, with no dependency on {@link TMUX_SESSION_ENV} ever having
225
+ * been readable for it.
226
+ */
227
+ export declare function parsePanePids(stdout: string): Set<number>;
228
+ /**
229
+ * Snapshot the process table with each process's pane marker.
230
+ *
231
+ * Two readers because no single command works on both platforms: Linux exposes
232
+ * `/proc/<pid>/environ` (one cheap read per pid), while macOS has no `/proc` and
233
+ * instead lets `ps -E` print a process's own-uid environment after its command
234
+ * — though on modern macOS `ps -E` no longer includes it at all (see the
235
+ * "Known platform gap" section in this file's docblock); tier 1 safely no-ops
236
+ * there rather than misattributing anything. Windows has no tmux integration
237
+ * at all, so it returns an empty table rather than pretending to reap.
238
+ *
239
+ * `opts.pids` restricts the `ps` snapshot to an explicit pid allowlist instead
240
+ * of the whole machine (`-A`) — a test-only escape hatch so a reap exercised
241
+ * against real spawned processes can never select or signal a real, unrelated
242
+ * process on a shared box (RUSH-2521 review: the integration tests previously
243
+ * called the machine-wide reap directly, which is safe only by construction of
244
+ * the fixture, not by anything the reaper itself guarantees).
245
+ */
246
+ export declare function readAgentProcesses(opts?: {
247
+ pids?: number[];
248
+ }): Promise<AgentProcess[]>;
249
+ /** One socket's pane-ownership read. `ok: false` means tmux never actually answered. */
250
+ export interface PaneOwnersRead {
251
+ /**
252
+ * `true` when tmux completed the query (whatever its exit code — a nonzero
253
+ * exit from `list-panes -a` IS tmux affirmatively answering "no server /
254
+ * no sessions here", a real and trustworthy empty result). `false` means the
255
+ * query never got that far: a thrown error, a timeout, or a missing/wrong
256
+ * tmux — in which case `owners` carries no information and must not be
257
+ * trusted as "no sessions".
258
+ */
259
+ ok: boolean;
260
+ owners: Map<string, PaneOwner>;
261
+ /** Every pane leaf pid tmux reported, marker-independent (see {@link parsePanePids}). */
262
+ panePids: Set<number>;
263
+ }
264
+ /**
265
+ * Read one tmux socket's session-ownership state.
266
+ *
267
+ * Distinguishes "tmux answered: nothing here" from "tmux did not answer" —
268
+ * the two were previously conflated (`.catch(() => null)` then `!res` folded
269
+ * into the same empty-map return as a clean nonzero exit), which meant a
270
+ * missing/wrong-version tmux, a spawn failure, or a wedged server were
271
+ * indistinguishable from a genuinely empty box. A completed process — even a
272
+ * nonzero exit — is a real answer; a rejected promise is not an answer at all
273
+ * (RUSH-2521 review).
274
+ */
275
+ export declare function readPaneOwners(socket: string): Promise<PaneOwnersRead>;
276
+ /**
277
+ * Reap every helper process whose owning agent has exited.
278
+ *
279
+ * Called from the daemon's periodic tick and from `agents sessions reap`. Panes
280
+ * are read before processes to take one ownership snapshot. A session absent
281
+ * from that snapshot is unknown and is never sufficient proof for tier 1.
282
+ *
283
+ * `opts.pids` is the test-only process-table scope described on
284
+ * {@link readAgentProcesses} — never set by production callers.
285
+ */
286
+ export declare function reapOrphanAgentProcesses(opts?: {
287
+ socket: string;
288
+ dryRun?: boolean;
289
+ graceMs?: number;
290
+ pids?: number[];
291
+ }): Promise<OrphanReapResult>;
292
+ /**
293
+ * Reap the helper processes belonging to ONE tmux session, on the teardown path.
294
+ *
295
+ * `killSession` calls this so an agent's helpers die with the session that owned
296
+ * them instead of waiting for the next daemon tick. The tmux session is being
297
+ * destroyed by the caller, so ownership needs no liveness check — anything still
298
+ * carrying this session's marker is leftover by definition, PROVIDED the name
299
+ * is unique to the socket in play.
300
+ *
301
+ * `socket` narrows that: a session name is only unique WITHIN one tmux server,
302
+ * so the exact same marker value could legitimately belong to a live, unrelated
303
+ * session on a DIFFERENT socket (e.g. the shared agents socket vs. a test's own
304
+ * temp socket). When `socket` names a non-default socket, this checks the
305
+ * default agents socket for a live/attached session of the same name and backs
306
+ * off entirely if one exists — the caller is tearing down one session, not a
307
+ * same-named one it does not own.
308
+ *
309
+ * `opts.pids` is the test-only process-table scope described on
310
+ * {@link readAgentProcesses} — never set by production callers.
311
+ */
312
+ export declare function reapProcessesForTmuxSession(name: string, socket?: string, opts?: {
313
+ dryRun?: boolean;
314
+ graceMs?: number;
315
+ pids?: number[];
316
+ }): Promise<OrphanReapResult>;