@phnx-labs/agents-cli 1.22.38 → 1.22.40

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 (554) hide show
  1. package/CHANGELOG.md +302 -0
  2. package/README.md +111 -70
  3. package/dist/bin/agents +0 -0
  4. package/dist/bootstrap.js +46 -27
  5. package/dist/browser.js +2 -2
  6. package/dist/cli/command-registry.d.ts +135 -0
  7. package/dist/cli/command-registry.js +260 -0
  8. package/dist/commands/accounts.d.ts +20 -0
  9. package/dist/commands/accounts.js +186 -25
  10. package/dist/commands/apply.d.ts +3 -3
  11. package/dist/commands/apply.js +20 -63
  12. package/dist/commands/browser.js +206 -94
  13. package/dist/commands/budget.d.ts +7 -6
  14. package/dist/commands/budget.js +8 -7
  15. package/dist/commands/cloud.js +17 -20
  16. package/dist/commands/commands.js +1 -1
  17. package/dist/commands/computer-actions.d.ts +1 -35
  18. package/dist/commands/computer-actions.js +13 -181
  19. package/dist/commands/computer.d.ts +28 -3
  20. package/dist/commands/computer.js +93 -65
  21. package/dist/commands/config.js +47 -4
  22. package/dist/commands/cost.d.ts +2 -1
  23. package/dist/commands/cost.js +7 -6
  24. package/dist/commands/daemon.js +151 -4
  25. package/dist/commands/detach.js +1 -1
  26. package/dist/commands/doctor.js +19 -11
  27. package/dist/commands/events.js +1 -1
  28. package/dist/commands/exec.d.ts +2 -50
  29. package/dist/commands/exec.js +161 -216
  30. package/dist/commands/factory.js +1 -1
  31. package/dist/commands/feed.d.ts +2 -2
  32. package/dist/commands/feed.js +9 -12
  33. package/dist/commands/fleet-capture.js +25 -27
  34. package/dist/commands/focus.d.ts +2 -3
  35. package/dist/commands/focus.js +34 -9
  36. package/dist/commands/go.js +15 -5
  37. package/dist/commands/harness.d.ts +3 -3
  38. package/dist/commands/harness.js +53 -5
  39. package/dist/commands/hooks.js +1 -1
  40. package/dist/commands/import.js +2 -2
  41. package/dist/commands/insights.d.ts +5 -5
  42. package/dist/commands/insights.js +15 -9
  43. package/dist/commands/inspect.d.ts +2 -3
  44. package/dist/commands/inspect.js +4 -16
  45. package/dist/commands/logs.d.ts +2 -2
  46. package/dist/commands/logs.js +9 -9
  47. package/dist/commands/mcp.js +2 -2
  48. package/dist/commands/memory.js +1 -1
  49. package/dist/commands/message.d.ts +1 -1
  50. package/dist/commands/message.js +7 -7
  51. package/dist/commands/mine.d.ts +11 -8
  52. package/dist/commands/mine.js +11 -10
  53. package/dist/commands/models.js +1 -1
  54. package/dist/commands/modes.js +1 -1
  55. package/dist/commands/monitors.js +23 -6
  56. package/dist/commands/output.d.ts +7 -6
  57. package/dist/commands/output.js +11 -10
  58. package/dist/commands/packages.js +4 -4
  59. package/dist/commands/perf.js +1 -1
  60. package/dist/commands/permissions.js +49 -32
  61. package/dist/commands/plugins.d.ts +1 -1
  62. package/dist/commands/plugins.js +3 -3
  63. package/dist/commands/profiles.d.ts +6 -9
  64. package/dist/commands/profiles.js +8 -321
  65. package/dist/commands/projects.d.ts +9 -0
  66. package/dist/commands/projects.js +140 -8
  67. package/dist/commands/prune.js +5 -13
  68. package/dist/commands/refresh-rules.js +1 -1
  69. package/dist/commands/repo.d.ts +5 -7
  70. package/dist/commands/repo.js +34 -18
  71. package/dist/commands/resource-view.js +4 -0
  72. package/dist/commands/resume.d.ts +11 -7
  73. package/dist/commands/resume.js +82 -98
  74. package/dist/commands/route.d.ts +12 -0
  75. package/dist/commands/route.js +261 -0
  76. package/dist/commands/routines.d.ts +2 -3
  77. package/dist/commands/routines.js +120 -145
  78. package/dist/commands/rules.js +1 -1
  79. package/dist/commands/run-account-picker.d.ts +1 -1
  80. package/dist/commands/run-account-picker.js +2 -2
  81. package/dist/commands/run-broadcast.d.ts +21 -0
  82. package/dist/commands/run-broadcast.js +89 -0
  83. package/dist/commands/run-cloud.js +1 -1
  84. package/dist/commands/secrets-vault.d.ts +10 -0
  85. package/dist/commands/{login.js → secrets-vault.js} +34 -14
  86. package/dist/commands/secrets.d.ts +4 -4
  87. package/dist/commands/secrets.js +72 -63
  88. package/dist/commands/sessions-backfill.js +1 -1
  89. package/dist/commands/sessions-browser.d.ts +1 -1
  90. package/dist/commands/sessions-browser.js +9 -5
  91. package/dist/commands/sessions-export.js +2 -2
  92. package/dist/commands/sessions-inject.js +4 -5
  93. package/dist/commands/sessions-migrate.js +16 -27
  94. package/dist/commands/sessions-picker.d.ts +13 -0
  95. package/dist/commands/sessions-picker.js +182 -8
  96. package/dist/commands/sessions-resume.d.ts +7 -3
  97. package/dist/commands/sessions-resume.js +81 -33
  98. package/dist/commands/sessions-stats.js +2 -2
  99. package/dist/commands/sessions.d.ts +75 -68
  100. package/dist/commands/sessions.js +142 -180
  101. package/dist/commands/setup-computer.js +1 -1
  102. package/dist/commands/setup-fleet.js +3 -0
  103. package/dist/commands/setup-mine.d.ts +7 -3
  104. package/dist/commands/setup-mine.js +13 -8
  105. package/dist/commands/setup-secrets.js +2 -2
  106. package/dist/commands/setup-watchdog.js +2 -2
  107. package/dist/commands/setup.js +7 -2
  108. package/dist/commands/share.d.ts +65 -0
  109. package/dist/commands/share.js +253 -20
  110. package/dist/commands/skills.js +3 -3
  111. package/dist/commands/snapshot.d.ts +2 -2
  112. package/dist/commands/snapshot.js +9 -9
  113. package/dist/commands/ssh.d.ts +1 -1
  114. package/dist/commands/ssh.js +318 -48
  115. package/dist/commands/subagents.js +1 -1
  116. package/dist/commands/sync.js +24 -9
  117. package/dist/commands/teams.d.ts +2 -2
  118. package/dist/commands/teams.js +9 -18
  119. package/dist/commands/tmux.js +5 -1
  120. package/dist/commands/trash.js +1 -1
  121. package/dist/commands/usage.d.ts +1 -1
  122. package/dist/commands/usage.js +2 -2
  123. package/dist/commands/utils.d.ts +4 -14
  124. package/dist/commands/utils.js +6 -27
  125. package/dist/commands/versions.js +2 -2
  126. package/dist/commands/view.d.ts +9 -77
  127. package/dist/commands/view.js +23 -8
  128. package/dist/commands/watchdog.js +1 -1
  129. package/dist/commands/webhook.js +11 -25
  130. package/dist/commands/workflows.js +1 -1
  131. package/dist/index.js +1 -1
  132. package/dist/lib/account-capabilities.d.ts +39 -0
  133. package/dist/lib/account-capabilities.js +59 -0
  134. package/dist/lib/account-catalog.js +1 -1
  135. package/dist/lib/account-registry.d.ts +66 -0
  136. package/dist/lib/account-registry.js +151 -5
  137. package/dist/lib/{rotate.d.ts → accounting/rotate.d.ts} +4 -4
  138. package/dist/lib/{rotate.js → accounting/rotate.js} +8 -8
  139. package/dist/lib/{usage.d.ts → accounting/usage.d.ts} +4 -4
  140. package/dist/lib/{usage.js → accounting/usage.js} +11 -11
  141. package/dist/lib/agent-spec/provider.js +1 -1
  142. package/dist/lib/agents.d.ts +72 -4
  143. package/dist/lib/agents.js +231 -199
  144. package/dist/lib/answer-router.d.ts +2 -2
  145. package/dist/lib/ask-classifier.d.ts +1 -1
  146. package/dist/lib/ask-classifier.js +1 -1
  147. package/dist/lib/audit/log.js +1 -1
  148. package/dist/lib/auth-health.d.ts +1 -1
  149. package/dist/lib/auth-health.js +2 -2
  150. package/dist/lib/brand.js +1 -1
  151. package/dist/lib/browser/caller-identity.d.ts +28 -0
  152. package/dist/lib/browser/caller-identity.js +156 -0
  153. package/dist/lib/browser/cdp.js +1 -1
  154. package/dist/lib/browser/drivers/ssh.d.ts +1 -1
  155. package/dist/lib/browser/drivers/ssh.js +2 -2
  156. package/dist/lib/browser/hygiene.d.ts +10 -2
  157. package/dist/lib/browser/hygiene.js +7 -4
  158. package/dist/lib/browser/ipc.d.ts +22 -2
  159. package/dist/lib/browser/ipc.js +185 -21
  160. package/dist/lib/browser/profiles.d.ts +67 -3
  161. package/dist/lib/browser/profiles.js +129 -7
  162. package/dist/lib/browser/remote-control.d.ts +2 -2
  163. package/dist/lib/browser/remote-control.js +3 -3
  164. package/dist/lib/browser/runtime-state.d.ts +79 -0
  165. package/dist/lib/browser/runtime-state.js +119 -1
  166. package/dist/lib/browser/service.d.ts +113 -1
  167. package/dist/lib/browser/service.js +454 -40
  168. package/dist/lib/browser/sessions-list.d.ts +2 -1
  169. package/dist/lib/browser/sessions-list.js +4 -13
  170. package/dist/lib/browser/types.d.ts +18 -0
  171. package/dist/lib/budget/config.js +1 -1
  172. package/dist/lib/budget/ledger.js +1 -1
  173. package/dist/lib/byok-usage.js +1 -1
  174. package/dist/lib/capabilities.js +3 -15
  175. package/dist/lib/catchup.d.ts +1 -1
  176. package/dist/lib/catchup.js +1 -1
  177. package/dist/lib/cloud/dispatch.js +1 -1
  178. package/dist/lib/cloud/host.d.ts +3 -3
  179. package/dist/lib/cloud/host.js +5 -5
  180. package/dist/lib/cloud/rush.d.ts +9 -21
  181. package/dist/lib/cloud/rush.js +33 -120
  182. package/dist/lib/cloud/types.d.ts +2 -2
  183. package/dist/lib/commands.js +3 -13
  184. package/dist/lib/computer/actions.d.ts +36 -0
  185. package/dist/lib/computer/actions.js +162 -0
  186. package/dist/lib/computer/dispatch.d.ts +2 -2
  187. package/dist/lib/computer/dispatch.js +2 -2
  188. package/dist/lib/computer/sessions-list.d.ts +3 -3
  189. package/dist/lib/computer/sessions-list.js +2 -2
  190. package/dist/lib/config-keys.d.ts +12 -3
  191. package/dist/lib/config-keys.js +29 -6
  192. package/dist/lib/config-machine-keys.d.ts +4 -2
  193. package/dist/lib/config-machine-keys.js +6 -2
  194. package/dist/lib/crabbox/lease.js +9 -1
  195. package/dist/lib/crabbox/runtimes.d.ts +32 -7
  196. package/dist/lib/crabbox/runtimes.js +72 -30
  197. package/dist/lib/{daemon.d.ts → daemon/daemon.d.ts} +59 -1
  198. package/dist/lib/{daemon.js → daemon/daemon.js} +237 -49
  199. package/dist/lib/daemon-services.d.ts +1 -1
  200. package/dist/lib/daemon-services.js +5 -0
  201. package/dist/lib/daemon-ticks.d.ts +25 -0
  202. package/dist/lib/daemon-ticks.js +31 -1
  203. package/dist/lib/daemon-webhooks.d.ts +102 -0
  204. package/dist/lib/daemon-webhooks.js +210 -0
  205. package/dist/lib/device-config.d.ts +116 -72
  206. package/dist/lib/device-config.js +366 -132
  207. package/dist/lib/devices/config-migration.d.ts +29 -34
  208. package/dist/lib/devices/config-migration.js +209 -130
  209. package/dist/lib/devices/connect.d.ts +2 -2
  210. package/dist/lib/devices/connect.js +2 -2
  211. package/dist/lib/devices/discovery-policy.d.ts +30 -0
  212. package/dist/lib/devices/discovery-policy.js +101 -0
  213. package/dist/lib/devices/fleet-inventory.js +8 -3
  214. package/dist/lib/devices/harness-inventory.d.ts +1 -1
  215. package/dist/lib/devices/harness-inventory.js +12 -3
  216. package/dist/lib/devices/known-hosts.js +1 -1
  217. package/dist/lib/devices/pool.d.ts +61 -0
  218. package/dist/lib/devices/pool.js +83 -0
  219. package/dist/lib/devices/registry.d.ts +1 -1
  220. package/dist/lib/devices/registry.js +1 -1
  221. package/dist/lib/devices/resolve-profile.d.ts +2 -2
  222. package/dist/lib/devices/resolve-profile.js +2 -2
  223. package/dist/lib/devices/resolve-target.d.ts +1 -1
  224. package/dist/lib/devices/resolve-target.js +4 -4
  225. package/dist/lib/devices/self-host.d.ts +1 -1
  226. package/dist/lib/devices/self-host.js +3 -3
  227. package/dist/lib/devices/ssh-config.d.ts +1 -1
  228. package/dist/lib/devices/stats-cache.js +1 -1
  229. package/dist/lib/devices/sync.d.ts +3 -1
  230. package/dist/lib/devices/sync.js +3 -3
  231. package/dist/lib/doctor-diff.js +4 -4
  232. package/dist/lib/drift-sync.js +2 -2
  233. package/dist/lib/drift.js +2 -2
  234. package/dist/lib/event-families.d.ts +1 -1
  235. package/dist/lib/event-stream.d.ts +1 -1
  236. package/dist/lib/event-stream.js +2 -2
  237. package/dist/lib/events-ingest.js +2 -2
  238. package/dist/lib/exec.d.ts +8 -5
  239. package/dist/lib/exec.js +19 -13
  240. package/dist/lib/factory/snapshot.d.ts +1 -1
  241. package/dist/lib/factory/snapshot.js +1 -1
  242. package/dist/lib/{activity.d.ts → feed/activity.d.ts} +1 -1
  243. package/dist/lib/{activity.js → feed/activity.js} +7 -7
  244. package/dist/lib/{events.d.ts → feed/events.d.ts} +2 -2
  245. package/dist/lib/{events.js → feed/events.js} +5 -5
  246. package/dist/lib/{feed.js → feed/feed.js} +4 -4
  247. package/dist/lib/feed-outcome.d.ts +1 -1
  248. package/dist/lib/feed-policy.d.ts +1 -1
  249. package/dist/lib/feed-policy.js +1 -1
  250. package/dist/lib/feed-post.d.ts +1 -1
  251. package/dist/lib/feed-post.js +1 -1
  252. package/dist/lib/feed-ranking.d.ts +1 -1
  253. package/dist/lib/fleet/apply.d.ts +0 -6
  254. package/dist/lib/fleet/apply.js +18 -45
  255. package/dist/lib/fleet/auth-sync.d.ts +16 -35
  256. package/dist/lib/fleet/auth-sync.js +16 -75
  257. package/dist/lib/fleet/capture.js +8 -6
  258. package/dist/lib/fleet/manifest.js +23 -11
  259. package/dist/lib/fleet/types.d.ts +19 -7
  260. package/dist/lib/fleet-cache.d.ts +1 -1
  261. package/dist/lib/fleet-cache.js +1 -1
  262. package/dist/lib/format.d.ts +19 -0
  263. package/dist/lib/format.js +44 -1
  264. package/dist/lib/friction-heuristics.d.ts +1 -1
  265. package/dist/lib/git.d.ts +24 -1
  266. package/dist/lib/git.js +82 -38
  267. package/dist/lib/heal.js +3 -3
  268. package/dist/lib/hooks.d.ts +18 -0
  269. package/dist/lib/hooks.js +113 -1
  270. package/dist/lib/hosts/credentials.d.ts +30 -10
  271. package/dist/lib/hosts/credentials.js +38 -26
  272. package/dist/lib/hosts/dispatch.d.ts +3 -3
  273. package/dist/lib/hosts/dispatch.js +3 -3
  274. package/dist/lib/hosts/option.d.ts +3 -3
  275. package/dist/lib/hosts/option.js +7 -8
  276. package/dist/lib/hosts/passthrough.d.ts +17 -17
  277. package/dist/lib/hosts/passthrough.js +67 -50
  278. package/dist/lib/hosts/providers/devices.d.ts +1 -1
  279. package/dist/lib/hosts/providers/devices.js +1 -1
  280. package/dist/lib/hosts/reconcile.d.ts +1 -1
  281. package/dist/lib/hosts/reconcile.js +1 -1
  282. package/dist/lib/hosts/reconnect.d.ts +1 -1
  283. package/dist/lib/hosts/reconnect.js +2 -2
  284. package/dist/lib/hosts/registry.d.ts +5 -5
  285. package/dist/lib/hosts/registry.js +5 -5
  286. package/dist/lib/hosts/remote-cmd.d.ts +10 -10
  287. package/dist/lib/hosts/remote-cmd.js +25 -18
  288. package/dist/lib/hosts/remote-os.d.ts +4 -4
  289. package/dist/lib/hosts/remote-os.js +4 -4
  290. package/dist/lib/hosts/remote-session-id.d.ts +2 -2
  291. package/dist/lib/hosts/remote-session-id.js +2 -2
  292. package/dist/lib/hosts/routing-flag.d.ts +3 -3
  293. package/dist/lib/hosts/routing-flag.js +4 -5
  294. package/dist/lib/hosts/run-target.d.ts +4 -4
  295. package/dist/lib/hosts/run-target.js +4 -4
  296. package/dist/lib/hosts/session-index.d.ts +2 -2
  297. package/dist/lib/hosts/session-index.js +1 -1
  298. package/dist/lib/hosts/session-marker.d.ts +1 -1
  299. package/dist/lib/hosts/session-marker.js +1 -1
  300. package/dist/lib/hosts/types.d.ts +2 -2
  301. package/dist/lib/hosts/types.js +2 -2
  302. package/dist/lib/import.js +1 -1
  303. package/dist/lib/{migrate.d.ts → installations/migrate.d.ts} +49 -1
  304. package/dist/lib/{migrate.js → installations/migrate.js} +265 -38
  305. package/dist/lib/installations/resolve.js +1 -1
  306. package/dist/lib/installations/strategies.js +1 -1
  307. package/dist/lib/installations/update.js +2 -2
  308. package/dist/lib/{versions.d.ts → installations/versions.d.ts} +12 -3
  309. package/dist/lib/{versions.js → installations/versions.js} +51 -31
  310. package/dist/lib/isolation-boundary-report.js +1 -1
  311. package/dist/lib/linear-projects.d.ts +28 -0
  312. package/dist/lib/linear-projects.js +30 -0
  313. package/dist/lib/loop.js +1 -1
  314. package/dist/lib/mailbox-gc.js +1 -1
  315. package/dist/lib/mailbox.js +1 -1
  316. package/dist/lib/mcp-registry.d.ts +62 -0
  317. package/dist/lib/mcp-registry.js +177 -0
  318. package/dist/lib/mcp.d.ts +5 -0
  319. package/dist/lib/mcp.js +124 -307
  320. package/dist/lib/menubar/MenubarHelper.app/Contents/CodeResources +0 -0
  321. package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
  322. package/dist/lib/menubar/install-menubar.d.ts +7 -0
  323. package/dist/lib/menubar/install-menubar.js +24 -6
  324. package/dist/lib/menubar/snapshot.d.ts +7 -0
  325. package/dist/lib/menubar/snapshot.js +8 -6
  326. package/dist/lib/models.js +1 -1
  327. package/dist/lib/monitors/config.d.ts +12 -0
  328. package/dist/lib/monitors/config.js +3 -0
  329. package/dist/lib/monitors/dispatch.js +26 -5
  330. package/dist/lib/monitors/engine.js +10 -0
  331. package/dist/lib/monitors/sources/webhook.d.ts +1 -1
  332. package/dist/lib/monitors/state.d.ts +42 -0
  333. package/dist/lib/monitors/state.js +30 -0
  334. package/dist/lib/notify.d.ts +1 -1
  335. package/dist/lib/observe-aliases.d.ts +2 -2
  336. package/dist/lib/observe-aliases.js +2 -11
  337. package/dist/lib/output/git-output.js +2 -2
  338. package/dist/lib/overdue.d.ts +1 -1
  339. package/dist/lib/overdue.js +1 -1
  340. package/dist/lib/permissions-registry.d.ts +65 -0
  341. package/dist/lib/permissions-registry.js +599 -0
  342. package/dist/lib/permissions.d.ts +24 -13
  343. package/dist/lib/permissions.js +52 -271
  344. package/dist/lib/picker.d.ts +16 -0
  345. package/dist/lib/picker.js +33 -3
  346. package/dist/lib/placement.d.ts +1 -1
  347. package/dist/lib/placement.js +4 -4
  348. package/dist/lib/platform/paths.d.ts +8 -0
  349. package/dist/lib/platform/paths.js +11 -0
  350. package/dist/lib/platform/posixpath.js +3 -3
  351. package/dist/lib/{plugin-marketplace.d.ts → plugins/plugin-marketplace.d.ts} +1 -1
  352. package/dist/lib/{plugin-marketplace.js → plugins/plugin-marketplace.js} +2 -2
  353. package/dist/lib/{plugins.d.ts → plugins/plugins.d.ts} +1 -1
  354. package/dist/lib/{plugins.js → plugins/plugins.js} +7 -7
  355. package/dist/lib/{skills.d.ts → plugins/skills.d.ts} +1 -1
  356. package/dist/lib/{skills.js → plugins/skills.js} +7 -7
  357. package/dist/lib/pricing/cost.d.ts +1 -1
  358. package/dist/lib/pricing/cost.js +1 -1
  359. package/dist/lib/profiles-presets.d.ts +1 -1
  360. package/dist/lib/profiles-presets.js +1 -1
  361. package/dist/lib/profiles.js +2 -2
  362. package/dist/lib/project-import.js +4 -1
  363. package/dist/lib/project-launch.d.ts +1 -1
  364. package/dist/lib/project-launch.js +3 -3
  365. package/dist/lib/project-pull.d.ts +128 -0
  366. package/dist/lib/project-pull.js +384 -0
  367. package/dist/lib/project-root.d.ts +2 -2
  368. package/dist/lib/project-root.js +2 -2
  369. package/dist/lib/project-status.js +1 -1
  370. package/dist/lib/projects.d.ts +23 -0
  371. package/dist/lib/projects.js +29 -6
  372. package/dist/lib/refresh.d.ts +12 -1
  373. package/dist/lib/refresh.js +16 -9
  374. package/dist/lib/registry.d.ts +9 -2
  375. package/dist/lib/registry.js +11 -4
  376. package/dist/lib/resources.d.ts +2 -2
  377. package/dist/lib/resources.js +2 -2
  378. package/dist/lib/routers.d.ts +81 -0
  379. package/dist/lib/routers.js +153 -0
  380. package/dist/lib/routine-context.d.ts +1 -0
  381. package/dist/lib/routine-context.js +7 -2
  382. package/dist/lib/routine-notify-owner.d.ts +1 -1
  383. package/dist/lib/routine-notify.d.ts +1 -1
  384. package/dist/lib/routine-notify.js +1 -1
  385. package/dist/lib/routine-process-cleanup.d.ts +1 -1
  386. package/dist/lib/routine-readiness.d.ts +1 -1
  387. package/dist/lib/routine-readiness.js +11 -4
  388. package/dist/lib/routines-placement.d.ts +12 -2
  389. package/dist/lib/routines-placement.js +20 -3
  390. package/dist/lib/routines-project.d.ts +1 -1
  391. package/dist/lib/routines-project.js +1 -1
  392. package/dist/lib/rules/compile.d.ts +1 -0
  393. package/dist/lib/rules/compile.js +10 -2
  394. package/dist/lib/rules/rules.js +1 -1
  395. package/dist/lib/run-notify.js +1 -1
  396. package/dist/lib/runner.d.ts +80 -2
  397. package/dist/lib/runner.js +241 -62
  398. package/dist/lib/sandbox.d.ts +1 -1
  399. package/dist/lib/scheduler.d.ts +1 -1
  400. package/dist/lib/scheduler.js +1 -1
  401. package/dist/lib/{routines.d.ts → scheduling/routines.d.ts} +54 -9
  402. package/dist/lib/{routines.js → scheduling/routines.js} +173 -14
  403. package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
  404. package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
  405. package/dist/lib/secrets/agent.js +2 -2
  406. package/dist/lib/secrets/audit.js +1 -1
  407. package/dist/lib/secrets/bundles.d.ts +3 -3
  408. package/dist/lib/secrets/bundles.js +7 -7
  409. package/dist/lib/secrets/index.js +1 -1
  410. package/dist/lib/secrets/list-filter.d.ts +1 -1
  411. package/dist/lib/secrets/list-filter.js +2 -2
  412. package/dist/lib/secrets/push.d.ts +1 -1
  413. package/dist/lib/secrets/push.js +10 -12
  414. package/dist/lib/secrets/remote.d.ts +12 -10
  415. package/dist/lib/secrets/remote.js +21 -14
  416. package/dist/lib/secrets/vault.js +2 -2
  417. package/dist/lib/self-heal/checks/shadowing.js +1 -1
  418. package/dist/lib/self-heal/checks/shims.js +1 -1
  419. package/dist/lib/self-update.d.ts +39 -4
  420. package/dist/lib/self-update.js +78 -25
  421. package/dist/lib/serve/control.d.ts +1 -1
  422. package/dist/lib/serve/control.js +4 -4
  423. package/dist/lib/serve/data.d.ts +1 -1
  424. package/dist/lib/serve/data.js +1 -1
  425. package/dist/lib/serve/stream.js +1 -1
  426. package/dist/lib/service-manifest.d.ts +29 -0
  427. package/dist/lib/service-manifest.js +80 -0
  428. package/dist/lib/session/active.d.ts +59 -7
  429. package/dist/lib/session/active.js +158 -17
  430. package/dist/lib/session/bash-command.js +1 -1
  431. package/dist/lib/session/claude-accounts.d.ts +1 -1
  432. package/dist/lib/session/claude-accounts.js +1 -1
  433. package/dist/lib/session/db.d.ts +10 -2
  434. package/dist/lib/session/db.js +25 -6
  435. package/dist/lib/session/discover.d.ts +77 -0
  436. package/dist/lib/session/discover.js +130 -25
  437. package/dist/lib/session/fork.js +1 -1
  438. package/dist/lib/session/inject.d.ts +1 -1
  439. package/dist/lib/session/insights.d.ts +1 -1
  440. package/dist/lib/session/insights.js +1 -1
  441. package/dist/lib/session/live-metadata.d.ts +15 -0
  442. package/dist/lib/session/live-metadata.js +76 -0
  443. package/dist/lib/session/migrate-targets.d.ts +1 -1
  444. package/dist/lib/session/recovery.d.ts +1 -1
  445. package/dist/lib/session/recovery.js +2 -2
  446. package/dist/lib/session/remote-active.d.ts +10 -1
  447. package/dist/lib/session/remote-active.js +8 -3
  448. package/dist/lib/session/remote-bundle.d.ts +1 -1
  449. package/dist/lib/session/remote-bundle.js +2 -2
  450. package/dist/lib/session/remote-list.d.ts +15 -4
  451. package/dist/lib/session/remote-list.js +40 -3
  452. package/dist/lib/session/remote.d.ts +5 -5
  453. package/dist/lib/session/remote.js +13 -17
  454. package/dist/lib/session/resume-command.d.ts +3 -2
  455. package/dist/lib/session/resume-command.js +4 -3
  456. package/dist/lib/session/resume-owner.d.ts +3 -3
  457. package/dist/lib/session/resume-owner.js +3 -3
  458. package/dist/lib/session/session-cache.d.ts +12 -0
  459. package/dist/lib/session/session-cache.js +2 -0
  460. package/dist/lib/session/shell-programs.js +1 -1
  461. package/dist/lib/session/state.js +5 -5
  462. package/dist/lib/session/team-filter.d.ts +1 -1
  463. package/dist/lib/session/team-filter.js +1 -1
  464. package/dist/lib/session/types.d.ts +3 -3
  465. package/dist/lib/session/width.d.ts +2 -2
  466. package/dist/lib/session/width.js +2 -2
  467. package/dist/lib/share/delete.d.ts +21 -0
  468. package/dist/lib/share/delete.js +42 -0
  469. package/dist/lib/share/publish.d.ts +82 -0
  470. package/dist/lib/share/publish.js +170 -18
  471. package/dist/lib/share/worker-template.js +172 -9
  472. package/dist/lib/shims.js +35 -7
  473. package/dist/lib/smart-launch.d.ts +36 -6
  474. package/dist/lib/smart-launch.js +65 -8
  475. package/dist/lib/snapshot.d.ts +4 -4
  476. package/dist/lib/snapshot.js +2 -2
  477. package/dist/lib/ssh-exec.d.ts +1 -1
  478. package/dist/lib/ssh-exec.js +2 -2
  479. package/dist/lib/ssh-tunnel.d.ts +10 -10
  480. package/dist/lib/ssh-tunnel.js +12 -12
  481. package/dist/lib/staleness/checkers/hooks.d.ts +1 -1
  482. package/dist/lib/staleness/checkers/hooks.js +1 -1
  483. package/dist/lib/staleness/detectors/permissions.js +0 -23
  484. package/dist/lib/staleness/detectors/plugins.js +1 -1
  485. package/dist/lib/staleness/fingerprint.js +1 -1
  486. package/dist/lib/staleness/layers.d.ts +1 -1
  487. package/dist/lib/staleness/layers.js +1 -1
  488. package/dist/lib/staleness/writers/mcp.js +3 -1
  489. package/dist/lib/staleness/writers/plugins.js +1 -1
  490. package/dist/lib/staleness/writers/types.d.ts +8 -0
  491. package/dist/lib/startup/command-registry.d.ts +5 -147
  492. package/dist/lib/startup/command-registry.js +38 -303
  493. package/dist/lib/startup/dev-build.d.ts +0 -21
  494. package/dist/lib/startup/dev-build.js +29 -8
  495. package/dist/lib/state.d.ts +19 -1
  496. package/dist/lib/state.js +120 -51
  497. package/dist/lib/subagents.js +1 -1
  498. package/dist/lib/sync-status.js +1 -1
  499. package/dist/lib/sync-umbrella.d.ts +6 -1
  500. package/dist/lib/sync-umbrella.js +9 -4
  501. package/dist/lib/teams/agents.js +2 -2
  502. package/dist/lib/teams/registry.js +1 -1
  503. package/dist/lib/terminal/backends/vscodium-agent.js +1 -1
  504. package/dist/lib/terminal/engine.js +1 -1
  505. package/dist/lib/terminal/index.d.ts +4 -0
  506. package/dist/lib/terminal/index.js +3 -0
  507. package/dist/lib/terminal/inject.d.ts +2 -2
  508. package/dist/lib/terminal/inject.js +2 -2
  509. package/dist/lib/terminal/transport.js +1 -1
  510. package/dist/lib/tmux/index.d.ts +1 -1
  511. package/dist/lib/tmux/index.js +1 -1
  512. package/dist/lib/tmux/session.d.ts +21 -5
  513. package/dist/lib/tmux/session.js +76 -22
  514. package/dist/lib/triggers/handlers.d.ts +1 -1
  515. package/dist/lib/triggers/handlers.js +2 -2
  516. package/dist/lib/triggers/webhook.d.ts +36 -2
  517. package/dist/lib/triggers/webhook.js +97 -42
  518. package/dist/lib/types.d.ts +18 -6
  519. package/dist/lib/usage-fleet.d.ts +1 -1
  520. package/dist/lib/usage-fleet.js +1 -1
  521. package/dist/lib/usage-refresh.d.ts +1 -1
  522. package/dist/lib/usage-refresh.js +3 -3
  523. package/dist/lib/version-duplicates.js +2 -2
  524. package/dist/lib/view-types.d.ts +56 -0
  525. package/dist/lib/view-types.js +1 -0
  526. package/dist/lib/watchdog/rotate.d.ts +2 -2
  527. package/dist/lib/watchdog/rotate.js +3 -3
  528. package/dist/lib/watchdog/runner.d.ts +2 -3
  529. package/dist/lib/watchdog/runner.js +3 -4
  530. package/dist/lib/workflows.js +1 -1
  531. package/package.json +2 -1
  532. package/scripts/postinstall.js +2 -2
  533. package/dist/commands/bench.d.ts +0 -2
  534. package/dist/commands/bench.js +0 -101
  535. package/dist/commands/cp.d.ts +0 -84
  536. package/dist/commands/cp.js +0 -231
  537. package/dist/commands/login.d.ts +0 -2
  538. package/dist/lib/resources/commands.d.ts +0 -46
  539. package/dist/lib/resources/commands.js +0 -211
  540. package/dist/lib/resources/hooks.d.ts +0 -16
  541. package/dist/lib/resources/hooks.js +0 -153
  542. package/dist/lib/resources/mcp.d.ts +0 -34
  543. package/dist/lib/resources/mcp.js +0 -250
  544. package/dist/lib/resources/memory.d.ts +0 -15
  545. package/dist/lib/resources/memory.js +0 -46
  546. package/dist/lib/resources/permissions.d.ts +0 -13
  547. package/dist/lib/resources/permissions.js +0 -202
  548. package/dist/lib/resources/rules.d.ts +0 -46
  549. package/dist/lib/resources/rules.js +0 -179
  550. package/dist/lib/resources/skills.d.ts +0 -37
  551. package/dist/lib/resources/skills.js +0 -247
  552. package/dist/lib/resources/subagents.d.ts +0 -46
  553. package/dist/lib/resources/subagents.js +0 -202
  554. /package/dist/lib/{feed.d.ts → feed/feed.d.ts} +0 -0
@@ -1,23 +1,24 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
- import { buildRoutineListJson } from '../../commands/routines.js';
4
- import { backfillActiveRowsFromIndex, isRunningLiveSession, serializeActiveSessionsForJson, serializeSessionsJson } from '../../commands/sessions.js';
3
+ import { buildRoutineListJson } from '../scheduling/routines.js';
4
+ import { backfillActiveRowsFromIndex, isRunningLiveSession, serializeActiveSessionsForJson, serializeSessionsJson } from '../session/active.js';
5
5
  import { getConfigValue, loadAutoLaunchPreferences } from '../device-config.js';
6
6
  import { loadDevices } from '../devices/registry.js';
7
7
  import { machineId } from '../machine-id.js';
8
8
  import { querySessions } from '../session/db.js';
9
9
  import { readActiveSessionsCache } from '../session/session-cache.js';
10
10
  import { getRuntimeStateDir } from '../state.js';
11
+ import { getCliVersion } from '../version.js';
11
12
  /**
12
13
  * The full registered-device roster for the menu bar, from the local registry
13
14
  * file only (no ssh, no stats probe) — as cheap as `buildRoutineListJson()`, so
14
15
  * it rides the same 3-minute snapshot poll instead of a second timer.
15
16
  */
16
17
  async function buildMenubarDevices() {
17
- const [reg, prefs] = await Promise.all([
18
- loadDevices(),
19
- loadAutoLaunchPreferences(),
20
- ]);
18
+ const reg = await loadDevices();
19
+ // Pass the roster so a fleet-wide default (fleet.defaults.config) reaches
20
+ // devices that have no doc of their own.
21
+ const prefs = loadAutoLaunchPreferences(Object.keys(reg));
21
22
  const interactiveHost = getConfigValue('interactive.host').value;
22
23
  const self = machineId();
23
24
  return Object.keys(reg)
@@ -63,6 +64,7 @@ export async function computeMenubarSnapshot() {
63
64
  return {
64
65
  version: 1,
65
66
  capturedAt: new Date().toISOString(),
67
+ cliVersion: getCliVersion(),
66
68
  routines,
67
69
  recentSessions: JSON.parse(serializeSessionsJson(recent)),
68
70
  activeSessions: serializeActiveSessionsForJson(activeSessions),
@@ -11,7 +11,7 @@ import * as fs from 'fs';
11
11
  import * as path from 'path';
12
12
  import { execFileSync } from 'child_process';
13
13
  import chalk from 'chalk';
14
- import { getVersionDir, getVersionHomePath, getBinaryPath } from './versions.js';
14
+ import { getVersionDir, getVersionHomePath, getBinaryPath } from './installations/versions.js';
15
15
  import { getModelsCachePath } from './state.js';
16
16
  import { agentConfigDirName } from './agents.js';
17
17
  import { resolveRunDefaults } from './run-defaults.js';
@@ -105,6 +105,18 @@ export interface MonitorConfig {
105
105
  devices?: string[];
106
106
  /** Execute the ACTION on this machine over SSH (placement), distinct from the owner that fires it. */
107
107
  runOn?: string;
108
+ /**
109
+ * Working directory for a `run` action, in the routines-portable form
110
+ * (`~/…`, or relative to the execution target's home). Optional: a monitor
111
+ * watches a source rather than owning a project, so `dispatchAction` defaults
112
+ * it to the target's home (`~`) when unset.
113
+ *
114
+ * Without this, every `run` action was blocked at readiness with
115
+ * `execution_context_missing` — `resolveJobExecutionContext` refuses an
116
+ * agent job carrying neither `project` nor `cwd` (`lib/routine-context.ts`),
117
+ * and a monitor had no field with which to supply one (RUSH-2681).
118
+ */
119
+ cwd?: string;
108
120
  /** Firehose guard: auto-pause the monitor if it fires more than `max` times per `per`. */
109
121
  rateLimit?: {
110
122
  max: number;
@@ -261,6 +261,9 @@ export function validateMonitor(config) {
261
261
  if (config.runOn !== undefined && (typeof config.runOn !== 'string' || config.runOn.trim() === '')) {
262
262
  errors.push('runOn must be a non-empty machine name (a registered host, device, capability tag, or user@host)');
263
263
  }
264
+ if (config.cwd !== undefined && (typeof config.cwd !== 'string' || config.cwd.trim() === '')) {
265
+ errors.push('cwd must be a non-empty path (home-relative or ~/…)');
266
+ }
264
267
  // ─── HYGIENE ─────────────────────────────────────────────────────────────────
265
268
  if (config.rateLimit !== undefined) {
266
269
  const rl = config.rateLimit;
@@ -11,7 +11,7 @@
11
11
  * `webhook-out` POSTs the event.
12
12
  */
13
13
  import { executeJobDetached } from '../runner.js';
14
- import { readJob } from '../routines.js';
14
+ import { readJob } from '../scheduling/routines.js';
15
15
  import { sendToOwner } from '../notify.js';
16
16
  /** Replace `{event}` in a prompt with the fired event summary. */
17
17
  export function injectEvent(prompt, event) {
@@ -29,19 +29,37 @@ export async function dispatchAction(monitor, event, meta) {
29
29
  if (action.type === 'run') {
30
30
  const job = {
31
31
  name: monitor.name,
32
+ // This job is not a routine — no definition, no yaml, never listed by
33
+ // `agents routines` — so it can never be a member of this device's routine
34
+ // activation manifest and MUST NOT be gated on it. Before this marker the
35
+ // gate refused every monitor `run` action with `wrong_owner` and an empty
36
+ // allowlist ("Job '<name>' can only run on: "), so no monitor action ever
37
+ // executed (RUSH-2681). The monitor's own `device:` pin already resolved
38
+ // exactly-once ownership before this dispatch.
39
+ dispatchedBy: 'monitor',
32
40
  agent: action.agent,
33
41
  mode: action.mode ?? 'auto',
34
42
  effort: action.effort ?? 'auto',
35
43
  timeout: action.timeout ?? '10m',
36
44
  enabled: true,
37
45
  prompt: injectEvent(action.prompt ?? '', event),
46
+ // A monitor watches a source; it owns no project, and until `cwd` existed
47
+ // it had no field able to supply one — so `resolveJobExecutionContext`
48
+ // blocked every `run` action with `execution_context_missing`
49
+ // (lib/routine-context.ts) once the eligibility gate above stopped
50
+ // swallowing them first. `~` is the execution TARGET's home, so it stays
51
+ // portable across a `runOn:` SSH hop.
52
+ cwd: monitor.cwd ?? '~',
38
53
  ...(monitor.variables ? { variables: monitor.variables } : {}),
39
54
  ...(monitor.version ? { version: monitor.version } : {}),
40
55
  ...(monitor.runOn ? { host: monitor.runOn } : {}),
41
56
  };
42
57
  try {
43
- const meta = await executeJobDetached(job);
44
- return { kind: 'run', ok: true, runId: meta.runId };
58
+ const runMeta = await executeJobDetached(job);
59
+ if (runMeta.status === 'skipped' || runMeta.status === 'blocked' || runMeta.status === 'failed') {
60
+ return { kind: 'run', ok: false, runId: runMeta.runId, error: runMeta.errorMessage ?? runMeta.status };
61
+ }
62
+ return { kind: 'run', ok: true, runId: runMeta.runId };
45
63
  }
46
64
  catch (err) {
47
65
  return { kind: 'run', ok: false, error: err.message };
@@ -55,8 +73,11 @@ export async function dispatchAction(monitor, event, meta) {
55
73
  // Inject the event into the routine's prompt so the fired routine sees it.
56
74
  const fired = { ...routine, prompt: injectEvent(routine.prompt ?? '', event) };
57
75
  try {
58
- const meta = await executeJobDetached(fired);
59
- return { kind: 'routine', ok: true, runId: meta.runId };
76
+ const runMeta = await executeJobDetached(fired);
77
+ if (runMeta.status === 'skipped' || runMeta.status === 'blocked' || runMeta.status === 'failed') {
78
+ return { kind: 'routine', ok: false, runId: runMeta.runId, error: runMeta.errorMessage ?? runMeta.status };
79
+ }
80
+ return { kind: 'routine', ok: true, runId: runMeta.runId };
60
81
  }
61
82
  catch (err) {
62
83
  return { kind: 'routine', ok: false, error: err.message };
@@ -16,6 +16,7 @@ import { evaluateSource } from './sources/index.js';
16
16
  import { hasChanged, readState, writeState, recordFireTime, writeFireRecord, recordCheck, markDroughtNotified, } from './state.js';
17
17
  import { dispatchAction } from './dispatch.js';
18
18
  import { sendToOwner } from '../notify.js';
19
+ import { readRunMeta } from '../scheduling/routines.js';
19
20
  /** How often the engine wakes to check which monitors are due. */
20
21
  const TICK_MS = 5_000;
21
22
  /** Default evaluation cadence for sources that carry no explicit interval. */
@@ -273,11 +274,20 @@ export class MonitorEngine {
273
274
  catch (err) {
274
275
  result = { kind: monitor.action.type, ok: false, error: err.message };
275
276
  }
277
+ // Best-effort snapshot of the run's status AT THIS INSTANT — the same
278
+ // synchronous view `dispatchAction` just returned from. For the async-race
279
+ // case (RUSH-2690) this reads 'running': the dispatched process is still
280
+ // in flight, `ok` was frozen on that transient state, and the real outcome
281
+ // is not known yet. Recorded so a future reconciliation pass can find
282
+ // exactly the fires whose `ok` needs revisiting; `resolveFireOutcome`
283
+ // (state.ts) never trusts this field — it re-reads the run fresh instead.
284
+ const runStatusAtFire = result.runId ? readRunMeta(monitor.name, result.runId)?.status : undefined;
276
285
  writeFireRecord(event, {
277
286
  ...(result.runId ? { runId: result.runId } : {}),
278
287
  action: result.kind,
279
288
  ok: result.ok,
280
289
  ...(result.error ? { error: result.error } : {}),
290
+ ...(runStatusAtFire ? { runStatusAtFire } : {}),
281
291
  });
282
292
  writeState(monitor.name, decision.value, decision.dedupeKey, { lastFiredAt: event.firedAt, fireTimes });
283
293
  this.logFn(result.ok ? 'INFO' : 'ERROR', `monitor '${monitor.name}' fired → ${result.kind}` +
@@ -8,7 +8,7 @@
8
8
  * synthesized JobConfig-shaped trigger.
9
9
  */
10
10
  import { type IncomingWebhook } from '../../triggers/webhook.js';
11
- import type { JobTrigger } from '../../routines.js';
11
+ import type { JobTrigger } from '../../scheduling/routines.js';
12
12
  import type { MonitorSource, MonitorConfig } from '../config.js';
13
13
  import type { Observation } from './types.js';
14
14
  /** Push-only: nothing to snapshot on a poll tick. */
@@ -10,6 +10,7 @@
10
10
  * ~/.agents/.history/monitors/<name>/state.json # last-seen hash/value + fire bookkeeping
11
11
  * ~/.agents/.history/monitors/<name>/fires/<id>/… # fire history
12
12
  */
13
+ import { type RunMeta } from '../scheduling/routines.js';
13
14
  import type { MonitorEvent } from './config.js';
14
15
  /** Persisted last-seen state for one monitor. */
15
16
  export interface MonitorState {
@@ -103,6 +104,47 @@ export interface FireRecord extends MonitorEvent {
103
104
  action?: string;
104
105
  ok?: boolean;
105
106
  error?: string;
107
+ /**
108
+ * The dispatched run's status AT FIRE TIME, best-effort (RUSH-2690).
109
+ * `dispatchAction` (lib/monitors/dispatch.ts) only sees a synchronous
110
+ * snapshot: `executeJobDetached` writes `status: 'running'` before spawning
111
+ * and returns immediately — the real outcome (`completed`/`failed`/`timeout`)
112
+ * lands later, asynchronously, in `executeJobDetachedClaimed`'s own
113
+ * `settle()` on child exit/error (lib/runner.ts). So a fire recorded
114
+ * `runStatusAtFire: 'running'` had its `ok` frozen before the run actually
115
+ * finished — that is the signal a future reconciliation pass (a daemon tick
116
+ * that revisits `running`-at-fire records and patches `ok` for real) would
117
+ * scan for. Never used to gate `ok` itself; `resolveFireOutcome` re-reads the
118
+ * run fresh on every call instead of trusting this snapshot.
119
+ */
120
+ runStatusAtFire?: RunMeta['status'];
106
121
  }
107
122
  /** List a monitor's fire history, chronologically ascending. */
108
123
  export declare function listFires(name: string): FireRecord[];
124
+ /** The reconciled outcome of one fire, resolved against the run's live status. */
125
+ export interface ReconciledFireOutcome {
126
+ /** True fire outcome, correcting the frozen `ok` against the run's CURRENT status. */
127
+ ok: boolean;
128
+ /** The run's live terminal status, when a runId is present and resolvable. */
129
+ runStatus?: RunMeta['status'];
130
+ }
131
+ /**
132
+ * Reconcile a fire's frozen `ok` against its dispatched run's REAL, current
133
+ * status — the render-time fix for RUSH-2690.
134
+ *
135
+ * `writeFireRecord` (this module) persists `ok` once, at fire time, from
136
+ * `dispatchAction`'s synchronous return. For a `run`/`routine` action that
137
+ * return is a snapshot: `executeJobDetached` writes `status: 'running'` before
138
+ * spawning and hands that back immediately, so `dispatchAction`'s negative
139
+ * check (`skipped`/`blocked`/`failed`) never sees the async outcome that lands
140
+ * later via `settle()` — a run that goes on to fail, time out, or otherwise
141
+ * never produce output still reads `ok: true` in `agents monitors runs`
142
+ * forever, while `agents monitors logs` (which reads the run record fresh)
143
+ * shows the real status. Re-reading the run here, at DISPLAY time, closes that
144
+ * gap without touching the write path or the frozen historical record on disk.
145
+ *
146
+ * A fire with no `runId` (a `notify`/`webhook-out` action, or a `run`/`routine`
147
+ * dispatch that never got a runId at all) has nothing to reconcile against —
148
+ * its frozen `ok` is the only signal and is returned as-is.
149
+ */
150
+ export declare function resolveFireOutcome(jobName: string, fire: FireRecord): ReconciledFireOutcome;
@@ -15,6 +15,7 @@ import * as path from 'path';
15
15
  import { createHash } from 'crypto';
16
16
  import { getMonitorsHistoryDir, ensureAgentsDir } from '../state.js';
17
17
  import { safeJoin } from '../paths.js';
18
+ import { readRunMeta } from '../scheduling/routines.js';
18
19
  const MAX_STORED_VALUE = 4096;
19
20
  /** Per-monitor history root, with the (untrusted) name contained to one segment. */
20
21
  export function getMonitorHistoryDir(name) {
@@ -198,3 +199,32 @@ export function listFires(name) {
198
199
  }
199
200
  return fires;
200
201
  }
202
+ /** Run statuses that read as a healthy fire: still in flight, or settled clean. */
203
+ const OK_RUN_STATUSES = new Set(['running', 'completed']);
204
+ /**
205
+ * Reconcile a fire's frozen `ok` against its dispatched run's REAL, current
206
+ * status — the render-time fix for RUSH-2690.
207
+ *
208
+ * `writeFireRecord` (this module) persists `ok` once, at fire time, from
209
+ * `dispatchAction`'s synchronous return. For a `run`/`routine` action that
210
+ * return is a snapshot: `executeJobDetached` writes `status: 'running'` before
211
+ * spawning and hands that back immediately, so `dispatchAction`'s negative
212
+ * check (`skipped`/`blocked`/`failed`) never sees the async outcome that lands
213
+ * later via `settle()` — a run that goes on to fail, time out, or otherwise
214
+ * never produce output still reads `ok: true` in `agents monitors runs`
215
+ * forever, while `agents monitors logs` (which reads the run record fresh)
216
+ * shows the real status. Re-reading the run here, at DISPLAY time, closes that
217
+ * gap without touching the write path or the frozen historical record on disk.
218
+ *
219
+ * A fire with no `runId` (a `notify`/`webhook-out` action, or a `run`/`routine`
220
+ * dispatch that never got a runId at all) has nothing to reconcile against —
221
+ * its frozen `ok` is the only signal and is returned as-is.
222
+ */
223
+ export function resolveFireOutcome(jobName, fire) {
224
+ if (!fire.runId)
225
+ return { ok: fire.ok !== false };
226
+ const run = readRunMeta(jobName, fire.runId);
227
+ if (!run)
228
+ return { ok: fire.ok !== false };
229
+ return { ok: OK_RUN_STATUSES.has(run.status), runStatus: run.status };
230
+ }
@@ -13,7 +13,7 @@
13
13
  * monitor daemon and the feed-dispatch loop call in here, and `process.exit()`
14
14
  * would take them down on a typo'd channel name, bypassing their try/catch.
15
15
  */
16
- import type { OpenBlock } from './feed.js';
16
+ import type { OpenBlock } from './feed/feed.js';
17
17
  import type { Meta } from './types.js';
18
18
  import type { SendResult } from './channels/registry.js';
19
19
  export interface OwnerNotifyOptions {
@@ -6,12 +6,12 @@
6
6
  *
7
7
  * inbox → feed (needs-you default)
8
8
  * timeline → feed --filter updates (agent progress stream)
9
- * roster → sessions --active (live agent roster)
10
9
  *
10
+ * `roster` was removed — use `agents sessions --active`.
11
11
  * `audit` is NOT an alias here — `agents audit` is already the tamper-evident
12
12
  * run-dispatch log. Ops trail = `agents events` (optionally `--audit`).
13
13
  */
14
- export type ObserveAlias = 'inbox' | 'timeline' | 'roster';
14
+ export type ObserveAlias = 'inbox' | 'timeline';
15
15
  export declare const OBSERVE_ALIASES: readonly ObserveAlias[];
16
16
  export interface ObserveExpandResult {
17
17
  /** argv for the real command (no program name): e.g. ['feed', '--filter', 'updates'] */
@@ -6,12 +6,12 @@
6
6
  *
7
7
  * inbox → feed (needs-you default)
8
8
  * timeline → feed --filter updates (agent progress stream)
9
- * roster → sessions --active (live agent roster)
10
9
  *
10
+ * `roster` was removed — use `agents sessions --active`.
11
11
  * `audit` is NOT an alias here — `agents audit` is already the tamper-evident
12
12
  * run-dispatch log. Ops trail = `agents events` (optionally `--audit`).
13
13
  */
14
- export const OBSERVE_ALIASES = ['inbox', 'timeline', 'roster'];
14
+ export const OBSERVE_ALIASES = ['inbox', 'timeline'];
15
15
  /** True when `rest` already carries a `--filter` / `--filter=…` flag. */
16
16
  export function hasFilterFlag(rest) {
17
17
  return rest.some((a) => a === '--filter' || a.startsWith('--filter='));
@@ -41,15 +41,6 @@ export function expandObserveAlias(alias, rest = []) {
41
41
  note: 'agents timeline → agents feed --filter updates',
42
42
  };
43
43
  }
44
- case 'roster': {
45
- const argv = hasActiveFlag(tail)
46
- ? ['sessions', ...tail]
47
- : ['sessions', '--active', ...tail];
48
- return {
49
- argv,
50
- note: 'agents roster → agents sessions --active',
51
- };
52
- }
53
44
  default:
54
45
  return null;
55
46
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Git / GitHub "output" collector — the shipped-work half of `agents output`.
2
+ * Git / GitHub "output" collector — the shipped-work half of `agents insights output`.
3
3
  *
4
- * `agents cost` answers "what did we burn?"; this answers "what did we ship?".
4
+ * `agents insights cost` answers "what did we burn?"; this answers "what did we ship?".
5
5
  * It counts commits (across every author identity, so multi-account totals stay
6
6
  * correct regardless of which `gh` login is active) and PRs opened / merged in a
7
7
  * time window. Pure `git`/`gh` over child_process — no server, no telemetry,
@@ -11,7 +11,7 @@
11
11
  * Surfaced two ways: a desktop notification on daemon startup, and a
12
12
  * `agents routines catchup` command that runs them on demand.
13
13
  */
14
- import { type JobConfig } from './routines.js';
14
+ import { type JobConfig } from './scheduling/routines.js';
15
15
  export interface OverdueJob {
16
16
  name: string;
17
17
  /** Most recent expected fire time per the cron expression. */
@@ -13,7 +13,7 @@
13
13
  */
14
14
  import * as fs from 'fs';
15
15
  import { Cron } from 'croner';
16
- import { listJobs, getLatestRun, resolveJobFilePath, isPastEndAt, isOneShotRoutine, jobRunsOnThisDevice } from './routines.js';
16
+ import { listJobs, getLatestRun, resolveJobFilePath, isPastEndAt, isOneShotRoutine, jobRunsOnThisDevice } from './scheduling/routines.js';
17
17
  import { notifyDesktop } from './menubar/notify-desktop.js';
18
18
  // Tolerance between "expected fire" and "recorded run start" — accounts for
19
19
  // the small gap between the cron tick and when the runner writes meta.json.
@@ -0,0 +1,65 @@
1
+ import type { AgentId, PermissionSet } from './types.js';
2
+ /** Canonical tool (lowercased) -> Grok's lowercase tool vocabulary. */
3
+ export declare const GROK_TOOL_BY_CANONICAL: Record<string, string | undefined>;
4
+ /** Canonical tool -> Kiro CLI v3 capability id. */
5
+ export declare const KIRO_CAPABILITY_BY_TOOL: Record<string, string | undefined>;
6
+ /** Canonical tool -> OpenClaw tool id (tool-level granularity only). */
7
+ export declare const CANONICAL_TO_OPENCLAW_TOOL: Record<string, string>;
8
+ /** Canonical tool -> Antigravity's action namespace. */
9
+ export declare const ANTIGRAVITY_ACTION_BY_TOOL: Record<string, string | undefined>;
10
+ /**
11
+ * Strip JSON comments for JSONC parsing, only OUTSIDE string literals.
12
+ *
13
+ * A naive `//`-to-end-of-line regex destroys
14
+ * `"$schema": "https://opencode.ai/config.json"` — which every
15
+ * opencode-generated config carries — so the file then fails to parse and its
16
+ * permissions read back as absent, the very defect this registry exists to fix.
17
+ * Exported so `permissions.ts` shares this one implementation instead of
18
+ * keeping its own copy.
19
+ */
20
+ export declare function stripJsonComments(content: string): string;
21
+ /** The complete permissions contract for one agent. */
22
+ export interface PermissionTarget {
23
+ /** Permissions file under a HOME root (a version home, or the real HOME). */
24
+ home(home: string): string;
25
+ /** Permissions file for a project checkout, when the harness reads one. */
26
+ project?: (cwd: string) => string;
27
+ /**
28
+ * Read `configPath` and project it to canonical form. Returns null when the
29
+ * file is absent, unreadable, or records no permissions — never throws.
30
+ */
31
+ toCanonical(configPath: string): PermissionSet | null;
32
+ /** One line naming what this harness's shape loses on the way back. */
33
+ lossyBecause: string;
34
+ /**
35
+ * Extra path suffixes this harness's config may use, for DETECTION only.
36
+ *
37
+ * `home()`/`project()` may probe the filesystem to pick between accepted
38
+ * spellings, which is correct when resolving a real root but meaningless for
39
+ * detection — `detectPermissionAgentFromPath` passes `''`, so the probe would
40
+ * resolve against `process.cwd()` and make the same input detect differently
41
+ * depending on where the CLI was run.
42
+ *
43
+ * Detection still calls `home('')`/`project('')`, since most targets are pure
44
+ * `path.join` and need no entry. A target whose resolver probes MUST list
45
+ * EVERY spelling it can return — that is what makes the probe's answer
46
+ * irrelevant rather than unreachable. `existingOr` (opencode) is the only
47
+ * probing resolver today; `permissions-registry.test.ts` pins the invariant
48
+ * for the whole table rather than leaving it as prose.
49
+ */
50
+ altSuffixes?: string[];
51
+ }
52
+ /**
53
+ * Single source of truth for where each allowlist-capable agent stores
54
+ * permissions and how to read them back. Keys MUST equal
55
+ * `capableAgents('allowlist')` — pinned by `permissions-registry.test.ts`.
56
+ */
57
+ export declare const PERMISSION_TARGETS: Partial<Record<AgentId, PermissionTarget>>;
58
+ /** The registry entry for `agent`, or undefined when it stores no permissions. */
59
+ export declare function permissionTarget(agent: AgentId): PermissionTarget | undefined;
60
+ /**
61
+ * Read `agent`'s permissions from `home` (a version home or the real HOME) and
62
+ * project them to canonical form. `scope: 'project'` reads the repo-local file
63
+ * for the harnesses that have one, and returns null for those that do not.
64
+ */
65
+ export declare function readCanonicalPermissions(agent: AgentId, scope?: 'user' | 'project', cwd?: string, home?: string): PermissionSet | null;