@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
@@ -38,7 +38,12 @@ import { auditWindowsSshEnrollment, diagnoseWindowsSshFailure } from '../lib/dev
38
38
  import { scanUserRcFiles, masterPassphraseInEnv } from '../lib/secrets/rc-hygiene.js';
39
39
  import { terminalWidth, truncateToWidth, stringWidth, padToWidth } from '../lib/session/width.js';
40
40
  import { readRepoBehindMarkers } from '../lib/auto-pull.js';
41
+ import { detectAgentsBinaryShadows } from '../lib/binary-shadow.js';
42
+ import { remediateStaleAgentsCliInstalls, resolveRunningPackageRoot, } from '../lib/self-update.js';
41
43
  import * as fs from 'fs';
44
+ import * as path from 'path';
45
+ import { fileURLToPath } from 'url';
46
+ const __doctorDirname = path.dirname(fileURLToPath(import.meta.url));
42
47
  const AGENT_NAMES = Object.fromEntries(ALL_AGENT_IDS.map((id) => [id, AGENTS[id].name]));
43
48
  // ─── overview mode (no target) ────────────────────────────────────────────────
44
49
  function collapseWhitespace(s) {
@@ -450,6 +455,7 @@ async function runDevicesDoctor(opts) {
450
455
  // Can the owner-delivery lane escalate a block from THIS box? Local only —
451
456
  // remote boxes self-report it in their own `agents doctor --json`.
452
457
  ownerSink: await probeOwnerSink(readMeta()),
458
+ binaryShadows: detectAgentsBinaryShadows(),
453
459
  }));
454
460
  accounts[localName] = r.inventory?.signIn ?? {};
455
461
  continue;
@@ -1160,6 +1166,40 @@ function renderHookRuntimeRepairText(repair) {
1160
1166
  console.log(` ${chalk.red('hold ')} ${chalk.gray(unresolved)}`);
1161
1167
  }
1162
1168
  }
1169
+ /**
1170
+ * RUSH-2415: delete npx-cache / unsafe-legacy / pre-1.22.30 agents-cli copies
1171
+ * when a fixed peer already exists. Bare `doctor --fix` is the remediation
1172
+ * surface the multi-install warning points at; a targeted
1173
+ * `doctor <agent>@<version> --fix` only heals that version home and must not
1174
+ * touch other CLI installs on the box.
1175
+ */
1176
+ function purgeStaleAgentsCliCopies(_opts) {
1177
+ let runningRoot;
1178
+ try {
1179
+ // dist/commands/doctor.js (or src/commands/doctor.ts under vitest) —
1180
+ // resolveRunningPackageRoot walks up until package.json names this package.
1181
+ runningRoot = resolveRunningPackageRoot(__doctorDirname);
1182
+ }
1183
+ catch {
1184
+ return null;
1185
+ }
1186
+ return remediateStaleAgentsCliInstalls({
1187
+ runningRoot,
1188
+ runningVersion: getCliVersion(),
1189
+ });
1190
+ }
1191
+ function renderStaleInstallPurgeText(purge) {
1192
+ if (purge.removed.length === 0 && purge.failed.length === 0)
1193
+ return;
1194
+ console.log(chalk.bold('\nStale agents-cli installs'));
1195
+ for (const r of purge.removed) {
1196
+ const why = r.reasons.join(', ');
1197
+ console.log(` ${chalk.green('purged')} ${chalk.gray(`${r.packageRoot} ${r.version} (${why})`)}`);
1198
+ }
1199
+ for (const f of purge.failed) {
1200
+ console.log(` ${chalk.red('hold ')} ${chalk.gray(`${f.packageRoot} ${f.version} — ${f.error}`)}`);
1201
+ }
1202
+ }
1163
1203
  async function runFix(parsed, opts) {
1164
1204
  // Heal targets the global install — project layer is irrelevant, so cwd is
1165
1205
  // left to heal's neutral default rather than process.cwd().
@@ -1180,23 +1220,41 @@ async function runFix(parsed, opts) {
1180
1220
  // repair have settled. This routine never calls sync/register and never
1181
1221
  // retries; unresolved wrappers remain an explicit non-zero doctor outcome.
1182
1222
  const hookRuntimeRepair = repairManagedHookRuntimeArtifacts({ filter: runtimeRepairFilter(parsed) });
1223
+ // Bare doctor --fix also purges latent pre-fix / legacy agents-cli copies
1224
+ // that only warn today (RUSH-2415). A scoped agent@version fix leaves them
1225
+ // alone — the multi-install surface is machine-wide, not per-agent.
1226
+ const staleInstallPurge = parsed === null ? purgeStaleAgentsCliCopies(opts) : null;
1183
1227
  const rewireFailed = rewired.some((entry) => entry.failure !== undefined);
1184
1228
  if (healChangedAnything(result) ||
1185
1229
  rewired.some((entry) => entry.rewired > 0 || entry.remaining > 0 || entry.failure !== undefined) ||
1186
- hookRuntimeRepair.attempts.length > 0) {
1230
+ hookRuntimeRepair.attempts.length > 0 ||
1231
+ (staleInstallPurge !== null && (staleInstallPurge.removed.length > 0 || staleInstallPurge.failed.length > 0))) {
1187
1232
  invalidateDoctorOverviewCache();
1188
1233
  }
1189
1234
  if (opts.json) {
1190
- console.log(JSON.stringify({ ...result, hookRewire: rewired, hookRuntimeRepair }, null, 2));
1191
- if (rewireFailed || hookRuntimeRepair.needsAttention.length > 0)
1235
+ console.log(JSON.stringify({
1236
+ ...result,
1237
+ hookRewire: rewired,
1238
+ hookRuntimeRepair,
1239
+ ...(staleInstallPurge ? { staleInstallPurge } : {}),
1240
+ }, null, 2));
1241
+ if (rewireFailed
1242
+ || hookRuntimeRepair.needsAttention.length > 0
1243
+ || (staleInstallPurge !== null && staleInstallPurge.failed.length > 0)) {
1192
1244
  process.exitCode = 1;
1245
+ }
1193
1246
  return;
1194
1247
  }
1195
1248
  renderHealText(result);
1196
1249
  renderHookRewireText(rewired);
1197
1250
  renderHookRuntimeRepairText(hookRuntimeRepair);
1198
- if (rewireFailed || hookRuntimeRepair.needsAttention.length > 0)
1251
+ if (staleInstallPurge)
1252
+ renderStaleInstallPurgeText(staleInstallPurge);
1253
+ if (rewireFailed
1254
+ || hookRuntimeRepair.needsAttention.length > 0
1255
+ || (staleInstallPurge !== null && staleInstallPurge.failed.length > 0)) {
1199
1256
  process.exitCode = 1;
1257
+ }
1200
1258
  }
1201
1259
  function checkLabel(row) {
1202
1260
  return `${AGENT_NAMES[row.agent] || row.agent}@${row.version}`;
@@ -1374,7 +1432,7 @@ export function registerDoctorCommand(program) {
1374
1432
  .description('Diagnose CLI availability, sync status, and resource divergence (optionally for a specific agent[@version]).')
1375
1433
  .option('--json', 'Output machine-readable JSON')
1376
1434
  .option('--diff', 'In target mode, include unified diffs for divergent files')
1377
- .option('--fix', 'Heal gaps: install missing resources, repair invalid plugin manifests, refresh stale plugins, and reconcile drift (all installed versions, or just the target)')
1435
+ .option('--fix', 'Heal gaps: install missing resources, repair invalid plugin manifests, refresh stale plugins, reconcile drift, and purge stale/legacy agents-cli installs (npx-cache, pre-1.22.30, unsafe helper installer) when a fixed peer exists')
1378
1436
  .option('--kind <kinds>', 'Restrict to comma-separated resource kinds (commands,skills,hooks,rules,mcp,permissions,subagents,plugins,promptcuts)')
1379
1437
  .option('--cwd <path>', 'Resolution cwd for project layer detection (default: process.cwd())')
1380
1438
  .option('--adopt <agent>', "Take over the agent's native launcher that shadows the shim (symlink it to the version-managed shim; reversible with --release)")
@@ -1591,6 +1649,7 @@ export function registerDoctorCommand(program) {
1591
1649
  .map((r) => `${r.agent}@${r.version}`);
1592
1650
  const findings = buildLocalFindings({
1593
1651
  device: localName,
1652
+ binaryShadows: detectAgentsBinaryShadows(),
1594
1653
  syncRows,
1595
1654
  orphanRows,
1596
1655
  repoBehind: repoBehindMarkers,
@@ -1,17 +1,16 @@
1
1
  /**
2
- * `agents events` — read the unified event stream.
2
+ * `agents events` — read the unified event stream (the one ops/timeline product).
3
3
  *
4
- * One stream over BOTH operational events (`~/.agents/.history/events/YYYY-MM-DD/`: every
5
- * `agents <module> <cmd>` invocation plus typed events like secrets access,
6
- * version installs) AND agent-semantic events (the per-session activity logs:
7
- * plans, PRs, worktrees, sub-agents, artifacts). Each is stamped with who ran
8
- * it and from where. This is the audit trail for "who accessed a secret /
9
- * created a team" AND the activity trail for "what did the agents just do".
4
+ * One stream over BOTH operational events (`~/.agents/.history/events/YYYY-MM-DD/`:
5
+ * every `agents <module> <cmd>` invocation plus typed events like secrets access,
6
+ * browser/computer, daemon lifecycle, version installs) AND agent-semantic events
7
+ * (per-session activity: plans, PRs, worktrees, sub-agents, artifacts). Run-dispatch
8
+ * outcomes land here as `run.dispatched` (readable via `--include runs`).
10
9
  *
11
- * Filter by `--module` (top-level group, e.g. teams; `activity` for agent
12
- * events), `--command` (path prefix), `--event` (typed event), `--agent`, and
13
- * `--since`. `--audit` restricts to operational events only. `--follow` tails
14
- * today's operational log live.
10
+ * `agents audit` and `agents logs` are thin aliases of this command.
11
+ *
12
+ * Filter with sessions-style `--include` / `--exclude` families (ops, activity,
13
+ * commands, runs, security) plus field filters (`--module`, `--event`, …).
15
14
  */
16
15
  import type { Command } from 'commander';
17
16
  /**
@@ -43,10 +42,23 @@ export interface EventsOptions {
43
42
  limit?: string;
44
43
  json?: boolean;
45
44
  follow?: boolean;
45
+ /** @deprecated Prefer --include ops / --exclude activity */
46
46
  audit?: boolean;
47
+ include?: string;
48
+ exclude?: string;
47
49
  }
48
50
  /** Add the one canonical event-reader option surface to a command or alias. */
49
51
  export declare function addEventsReadOptions(command: Command, includeAuditFlag?: boolean): Command;
50
- /** Canonical reader used by both `agents events` and `agents logs audit`. */
52
+ /** Canonical reader used by `agents events`, `agents audit`, and `agents logs`. */
51
53
  export declare function runEventsCommand(options: EventsOptions, forceAudit?: boolean): Promise<void>;
54
+ /** Shared by `events stats` and the `logs stats` alias. */
55
+ export declare function runEventsStats(opts: {
56
+ since?: string;
57
+ json?: boolean;
58
+ }): Promise<void>;
52
59
  export declare function registerEventsCommand(program: Command): void;
60
+ /** Shared by `events rotate` and the `logs rotate` alias. */
61
+ export declare function runEventsRotate(opts: {
62
+ days?: string;
63
+ maxMb?: string;
64
+ }): void;
@@ -1,22 +1,22 @@
1
1
  /**
2
- * `agents events` — read the unified event stream.
2
+ * `agents events` — read the unified event stream (the one ops/timeline product).
3
3
  *
4
- * One stream over BOTH operational events (`~/.agents/.history/events/YYYY-MM-DD/`: every
5
- * `agents <module> <cmd>` invocation plus typed events like secrets access,
6
- * version installs) AND agent-semantic events (the per-session activity logs:
7
- * plans, PRs, worktrees, sub-agents, artifacts). Each is stamped with who ran
8
- * it and from where. This is the audit trail for "who accessed a secret /
9
- * created a team" AND the activity trail for "what did the agents just do".
4
+ * One stream over BOTH operational events (`~/.agents/.history/events/YYYY-MM-DD/`:
5
+ * every `agents <module> <cmd>` invocation plus typed events like secrets access,
6
+ * browser/computer, daemon lifecycle, version installs) AND agent-semantic events
7
+ * (per-session activity: plans, PRs, worktrees, sub-agents, artifacts). Run-dispatch
8
+ * outcomes land here as `run.dispatched` (readable via `--include runs`).
10
9
  *
11
- * Filter by `--module` (top-level group, e.g. teams; `activity` for agent
12
- * events), `--command` (path prefix), `--event` (typed event), `--agent`, and
13
- * `--since`. `--audit` restricts to operational events only. `--follow` tails
14
- * today's operational log live.
10
+ * `agents audit` and `agents logs` are thin aliases of this command.
11
+ *
12
+ * Filter with sessions-style `--include` / `--exclude` families (ops, activity,
13
+ * commands, runs, security) plus field filters (`--module`, `--event`, …).
15
14
  */
16
15
  import chalk from 'chalk';
17
16
  import * as fs from 'fs';
18
- import { getLogsPath } from '../lib/events.js';
17
+ import { getLogsPath, stats, rotate } from '../lib/events.js';
19
18
  import { readUnifiedEvents } from '../lib/event-stream.js';
19
+ import { parseFamilyList, EVENT_FAMILIES } from '../lib/event-families.js';
20
20
  import { ingestBatch } from '../lib/events-ingest.js';
21
21
  import { setHelpSections } from '../lib/help.js';
22
22
  /**
@@ -86,6 +86,15 @@ function detailFor(r) {
86
86
  bits.push(`skill=${r.skill}`);
87
87
  if (typeof r.version === 'string')
88
88
  bits.push(`v=${r.version}`);
89
+ // run.dispatched (and similar) — mode / outcome / exit / repo are the audit line.
90
+ if (typeof r.mode === 'string')
91
+ bits.push(`mode=${r.mode}`);
92
+ if (typeof r.outcome === 'string')
93
+ bits.push(`outcome=${r.outcome}`);
94
+ if (typeof r.exitCode === 'number')
95
+ bits.push(`exit=${r.exitCode}`);
96
+ if (typeof r.repo === 'string')
97
+ bits.push(chalk.gray(r.repo));
89
98
  if (typeof r.profile === 'string')
90
99
  bits.push(`profile=${r.profile}`);
91
100
  if (typeof r.error === 'string')
@@ -187,9 +196,11 @@ function registerEmitSubcommand(events) {
187
196
  /** Add the one canonical event-reader option surface to a command or alias. */
188
197
  export function addEventsReadOptions(command, includeAuditFlag = true) {
189
198
  command
190
- .option('--module <name>', 'Only events from this group (e.g. teams, secrets, activity)')
199
+ .option('--include <families>', `Only these families (comma-sep): ${EVENT_FAMILIES.join(', ')}`)
200
+ .option('--exclude <families>', `Drop these families (comma-sep): ${EVENT_FAMILIES.join(', ')}`)
201
+ .option('--module <name>', 'Only events from this group (e.g. teams, secrets, activity, daemon, routine, watchdog, browser)')
191
202
  .option('--command <path>', 'Only this command path — prefix match (e.g. "teams create")')
192
- .option('--event <type>', 'Only this typed event (repeatable, e.g. secrets.get, secrets.unlocked, pr.opened)', collect, [])
203
+ .option('--event <type>', 'Only this typed event (repeatable, e.g. secrets.get, run.dispatched, pr.opened)', collect, [])
193
204
  .option('--agent <name>', 'Only events tagged with this agent')
194
205
  .option('--caller <kind>', 'Only this caller kind (claude-code, codex, gemini, cursor, terminal, script)')
195
206
  .option('--level <level>', 'Only this level: audit, warn, info, debug')
@@ -199,11 +210,12 @@ export function addEventsReadOptions(command, includeAuditFlag = true) {
199
210
  .option('--limit <n>', 'Max records to show; 0 for no cap (default 50)', '50')
200
211
  .option('--json', 'Output raw records as JSON')
201
212
  .option('-f, --follow', "Tail today's operational log live");
202
- if (includeAuditFlag)
203
- command.option('--audit', 'Operational events only (skip agent activity)');
213
+ if (includeAuditFlag) {
214
+ command.option('--audit', 'Deprecated: operational events only prefer --include ops or --exclude activity');
215
+ }
204
216
  return command;
205
217
  }
206
- /** Canonical reader used by both `agents events` and `agents logs audit`. */
218
+ /** Canonical reader used by `agents events`, `agents audit`, and `agents logs`. */
207
219
  export async function runEventsCommand(options, forceAudit = false) {
208
220
  if (options.follow) {
209
221
  await followLog();
@@ -211,15 +223,29 @@ export async function runEventsCommand(options, forceAudit = false) {
211
223
  }
212
224
  let limit;
213
225
  let startDate;
226
+ let includeFamilies;
227
+ let excludeFamilies;
214
228
  try {
215
229
  limit = resolveEventsLimit(options.limit);
216
230
  startDate = options.since ? parseSince(options.since) : undefined;
231
+ if (options.include && options.exclude) {
232
+ throw new Error('--include and --exclude are mutually exclusive');
233
+ }
234
+ if (options.include)
235
+ includeFamilies = parseFamilyList(options.include, '--include');
236
+ if (options.exclude)
237
+ excludeFamilies = parseFamilyList(options.exclude, '--exclude');
217
238
  }
218
239
  catch (err) {
219
240
  console.error(chalk.red(err.message));
220
241
  process.exitCode = 2;
221
242
  return;
222
243
  }
244
+ // --audit / forceAudit = ops-only when no family flags. Families own the
245
+ // source selection via applyFamilies — never override includeActivity after.
246
+ const includeActivity = (includeFamilies !== undefined || excludeFamilies !== undefined)
247
+ ? true
248
+ : !(forceAudit || options.audit);
223
249
  const fetched = readUnifiedEvents({
224
250
  startDate,
225
251
  eventTypes: options.event && options.event.length ? options.event : undefined,
@@ -231,7 +257,9 @@ export async function runEventsCommand(options, forceAudit = false) {
231
257
  command: options.command,
232
258
  module: options.module,
233
259
  limit: limit === undefined ? undefined : limit + 1,
234
- includeActivity: !(forceAudit || options.audit),
260
+ includeActivity,
261
+ includeFamilies,
262
+ excludeFamilies,
235
263
  });
236
264
  const { records, truncated } = capRecords(fetched, limit);
237
265
  const capNote = `Showing the newest ${limit} — more events matched. Pass --limit 0 for all.`;
@@ -251,29 +279,117 @@ export async function runEventsCommand(options, forceAudit = false) {
251
279
  if (truncated)
252
280
  console.log(chalk.yellow(capNote));
253
281
  }
282
+ function humanBytes(bytes) {
283
+ if (bytes < 1024)
284
+ return `${bytes} B`;
285
+ if (bytes < 1024 * 1024)
286
+ return `${(bytes / 1024).toFixed(1)} KB`;
287
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
288
+ }
289
+ function levelColor(level) {
290
+ if (level === 'audit')
291
+ return chalk.magenta(level);
292
+ if (level === 'warn')
293
+ return chalk.yellow(level);
294
+ if (level === 'debug')
295
+ return chalk.gray(level);
296
+ return chalk.blue(level);
297
+ }
298
+ /** Shared by `events stats` and the `logs stats` alias. */
299
+ export async function runEventsStats(opts) {
300
+ let days = 7;
301
+ if (opts.since) {
302
+ try {
303
+ const d = parseSince(opts.since);
304
+ days = Math.max(1, Math.ceil((Date.now() - d.getTime()) / 86_400_000));
305
+ }
306
+ catch (err) {
307
+ console.error(chalk.red(err.message));
308
+ process.exitCode = 2;
309
+ return;
310
+ }
311
+ }
312
+ const s = stats({ days });
313
+ if (opts.json) {
314
+ console.log(JSON.stringify(s, null, 2));
315
+ return;
316
+ }
317
+ console.log(chalk.bold(`Event statistics (last ${days} day${days === 1 ? '' : 's'})\n`));
318
+ console.log(` Total events: ${s.totalEvents}`);
319
+ console.log(` Log files: ${s.fileCount} (${humanBytes(s.totalBytes)})`);
320
+ console.log(` Log path: ${chalk.gray(getLogsPath())}`);
321
+ if (Object.keys(s.byLevel).length) {
322
+ console.log(chalk.bold('\n By level:'));
323
+ for (const [k, v] of Object.entries(s.byLevel).sort((a, b) => b[1] - a[1])) {
324
+ console.log(` ${levelColor(k).padEnd(20)} ${v}`);
325
+ }
326
+ }
327
+ if (Object.keys(s.byEvent).length) {
328
+ console.log(chalk.bold('\n By event (top 15):'));
329
+ for (const [k, v] of Object.entries(s.byEvent).sort((a, b) => b[1] - a[1]).slice(0, 15)) {
330
+ console.log(` ${chalk.cyan(k).padEnd(30)} ${v}`);
331
+ }
332
+ }
333
+ if (Object.keys(s.byModule).length) {
334
+ console.log(chalk.bold('\n By module:'));
335
+ for (const [k, v] of Object.entries(s.byModule).sort((a, b) => b[1] - a[1])) {
336
+ console.log(` ${k.padEnd(20)} ${v}`);
337
+ }
338
+ }
339
+ console.log();
340
+ }
254
341
  export function registerEventsCommand(program) {
255
342
  const events = addEventsReadOptions(program
256
343
  .command('events')
257
- .description('Read the unified event stream (operational + agent activity)'))
344
+ .description('Read the unified event stream (ops + activity + run dispatch)'))
258
345
  .addHelpText('after', `
259
346
  Examples:
260
347
  agents events Everything — ops + agent activity
261
- agents events --module activity Agent activity only (plans / PRs / worktrees)
262
- agents events --audit Operational events only (secrets / teams / ...)
263
- agents events --event pr.opened --since 7d
348
+ agents events --exclude commands Drop CLI command.start/end noise
349
+ agents events --include runs Dispatched-run outcomes (was audit list)
350
+ agents events --include activity Agent milestones only
351
+ agents events --include ops Operational events only
352
+ agents events --include security Audit-level (secrets, command.*, daemon, …)
264
353
  agents events --module secrets Every secret accessed or revealed
265
354
  agents events --module secrets --bundle share
266
- Every read of the share bundle (which agent, which session)
267
- agents events --bundle share --session <id>
268
- Trace one session's reads of a bundle
355
+ agents events --event pr.opened --since 7d
269
356
  agents events -f Live tail (operational)
270
- agents events --event pr.opened --since 30d --limit 0 --json
271
- Every match use --limit 0 whenever you
272
- aggregate, or you rank only the newest 50`)
357
+ agents events stats
358
+ agents events rotate --days 7
359
+
360
+ agents audit Alias of: events --include runs
361
+ agents logs Alias of: events`)
273
362
  .action((_options, command) => runEventsCommand(command.optsWithGlobals()));
274
363
  // `events` both reads (its own action, above) and writes (this subcommand) —
275
364
  // the same shape as `feed` / `feed post`.
276
365
  registerEmitSubcommand(events);
366
+ events
367
+ .command('stats')
368
+ .description('Show aggregate event statistics')
369
+ .option('--since <time>', 'Window size (e.g. 7d, 30d; default 7d)')
370
+ .option('--json', 'Output stats as JSON')
371
+ .action(async (opts) => runEventsStats(opts));
372
+ events
373
+ .command('rotate')
374
+ .description('Apply event retention and the storage ceiling immediately')
375
+ .option('--days <n>', 'Retention period in days (default 7)', '7')
376
+ .option('--max-mb <n>', 'Total event storage ceiling in MiB (default 50)', '50')
377
+ .action((opts) => runEventsRotate(opts));
378
+ }
379
+ /** Shared by `events rotate` and the `logs rotate` alias. */
380
+ export function runEventsRotate(opts) {
381
+ const days = Math.max(1, parseInt(opts.days ?? '7', 10) || 7);
382
+ const maxMb = Math.max(1, parseInt(opts.maxMb ?? '50', 10) || 50);
383
+ const result = rotate(days, maxMb * 1024 * 1024);
384
+ const removed = result.removedByAge + result.removedBySize;
385
+ if (removed > 0) {
386
+ console.log(`Removed ${removed} event file${removed === 1 ? '' : 's'} ` +
387
+ `(${result.removedByAge} by age, ${result.removedBySize} by size); ` +
388
+ `reclaimed ${humanBytes(result.bytesReclaimed)}.`);
389
+ }
390
+ else {
391
+ console.log(chalk.gray(`No event files removed (retention ${days} days, ceiling ${maxMb} MiB).`));
392
+ }
277
393
  }
278
394
  /** commander repeatable-option collector. */
279
395
  function collect(value, previous) {