@phnx-labs/agents-cli 1.22.39 → 1.22.41

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 (569) hide show
  1. package/CHANGELOG.md +316 -0
  2. package/README.md +116 -70
  3. package/dist/bin/agents +0 -0
  4. package/dist/bootstrap.js +45 -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 +259 -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.d.ts +15 -0
  13. package/dist/commands/browser.js +318 -131
  14. package/dist/commands/budget.d.ts +7 -6
  15. package/dist/commands/budget.js +8 -7
  16. package/dist/commands/cloud.js +17 -20
  17. package/dist/commands/commands.js +1 -1
  18. package/dist/commands/computer-actions.d.ts +1 -35
  19. package/dist/commands/computer-actions.js +13 -181
  20. package/dist/commands/computer.d.ts +28 -3
  21. package/dist/commands/computer.js +93 -65
  22. package/dist/commands/config.js +16 -3
  23. package/dist/commands/cost.d.ts +2 -1
  24. package/dist/commands/cost.js +7 -6
  25. package/dist/commands/daemon.js +151 -4
  26. package/dist/commands/detach.js +1 -1
  27. package/dist/commands/doctor.js +19 -11
  28. package/dist/commands/events.js +1 -1
  29. package/dist/commands/exec.d.ts +2 -50
  30. package/dist/commands/exec.js +160 -215
  31. package/dist/commands/factory.js +1 -1
  32. package/dist/commands/feed.d.ts +2 -2
  33. package/dist/commands/feed.js +12 -23
  34. package/dist/commands/fleet-capture.js +25 -27
  35. package/dist/commands/focus.d.ts +2 -3
  36. package/dist/commands/focus.js +34 -9
  37. package/dist/commands/go.js +15 -5
  38. package/dist/commands/harness.d.ts +3 -3
  39. package/dist/commands/harness.js +53 -5
  40. package/dist/commands/hooks.js +1 -1
  41. package/dist/commands/import.js +2 -2
  42. package/dist/commands/insights.d.ts +5 -5
  43. package/dist/commands/insights.js +15 -9
  44. package/dist/commands/inspect.d.ts +2 -3
  45. package/dist/commands/inspect.js +4 -16
  46. package/dist/commands/logs.d.ts +2 -2
  47. package/dist/commands/logs.js +9 -9
  48. package/dist/commands/mcp.js +2 -2
  49. package/dist/commands/memory.js +1 -1
  50. package/dist/commands/message.d.ts +1 -1
  51. package/dist/commands/message.js +7 -7
  52. package/dist/commands/mine.d.ts +11 -8
  53. package/dist/commands/mine.js +11 -10
  54. package/dist/commands/models.js +1 -1
  55. package/dist/commands/modes.js +1 -1
  56. package/dist/commands/monitors.js +23 -6
  57. package/dist/commands/output.d.ts +7 -6
  58. package/dist/commands/output.js +11 -10
  59. package/dist/commands/packages.js +4 -4
  60. package/dist/commands/perf.js +1 -1
  61. package/dist/commands/permissions.js +49 -32
  62. package/dist/commands/plugins.d.ts +1 -1
  63. package/dist/commands/plugins.js +3 -3
  64. package/dist/commands/profiles.d.ts +6 -9
  65. package/dist/commands/profiles.js +8 -321
  66. package/dist/commands/projects.d.ts +9 -0
  67. package/dist/commands/projects.js +140 -8
  68. package/dist/commands/prune.js +5 -13
  69. package/dist/commands/refresh-rules.js +1 -1
  70. package/dist/commands/repo.d.ts +5 -7
  71. package/dist/commands/repo.js +34 -18
  72. package/dist/commands/resource-view.js +4 -0
  73. package/dist/commands/resume.d.ts +11 -7
  74. package/dist/commands/resume.js +82 -98
  75. package/dist/commands/route.d.ts +12 -0
  76. package/dist/commands/route.js +261 -0
  77. package/dist/commands/routines.d.ts +2 -3
  78. package/dist/commands/routines.js +120 -145
  79. package/dist/commands/rules.js +1 -1
  80. package/dist/commands/run-account-picker.d.ts +1 -1
  81. package/dist/commands/run-account-picker.js +2 -2
  82. package/dist/commands/run-broadcast.d.ts +21 -0
  83. package/dist/commands/run-broadcast.js +89 -0
  84. package/dist/commands/run-cloud.js +1 -1
  85. package/dist/commands/secrets-vault.d.ts +10 -0
  86. package/dist/commands/{login.js → secrets-vault.js} +34 -14
  87. package/dist/commands/secrets.d.ts +4 -4
  88. package/dist/commands/secrets.js +158 -159
  89. package/dist/commands/sessions-backfill.js +1 -1
  90. package/dist/commands/sessions-browser.d.ts +1 -1
  91. package/dist/commands/sessions-browser.js +9 -5
  92. package/dist/commands/sessions-export.js +2 -2
  93. package/dist/commands/sessions-inject.js +4 -5
  94. package/dist/commands/sessions-migrate.js +16 -27
  95. package/dist/commands/sessions-picker.d.ts +14 -0
  96. package/dist/commands/sessions-picker.js +209 -13
  97. package/dist/commands/sessions-resume.d.ts +7 -3
  98. package/dist/commands/sessions-resume.js +81 -33
  99. package/dist/commands/sessions-share.d.ts +25 -0
  100. package/dist/commands/sessions-share.js +166 -0
  101. package/dist/commands/sessions-stats.js +2 -2
  102. package/dist/commands/sessions.d.ts +75 -68
  103. package/dist/commands/sessions.js +144 -180
  104. package/dist/commands/setup-browser.js +1 -1
  105. package/dist/commands/setup-computer.js +1 -1
  106. package/dist/commands/setup-fleet.js +3 -0
  107. package/dist/commands/setup-mine.d.ts +7 -3
  108. package/dist/commands/setup-mine.js +13 -8
  109. package/dist/commands/setup-preferences.js +2 -2
  110. package/dist/commands/setup-secrets.js +2 -2
  111. package/dist/commands/setup-watchdog.js +2 -2
  112. package/dist/commands/setup.js +7 -2
  113. package/dist/commands/share.d.ts +65 -0
  114. package/dist/commands/share.js +253 -20
  115. package/dist/commands/skills.js +3 -3
  116. package/dist/commands/snapshot.d.ts +2 -2
  117. package/dist/commands/snapshot.js +9 -9
  118. package/dist/commands/ssh.d.ts +1 -1
  119. package/dist/commands/ssh.js +186 -64
  120. package/dist/commands/subagents.js +1 -1
  121. package/dist/commands/sync.js +24 -9
  122. package/dist/commands/teams.d.ts +2 -2
  123. package/dist/commands/teams.js +9 -18
  124. package/dist/commands/tmux.js +5 -1
  125. package/dist/commands/trash.js +1 -1
  126. package/dist/commands/usage.d.ts +1 -1
  127. package/dist/commands/usage.js +2 -2
  128. package/dist/commands/utils.d.ts +4 -14
  129. package/dist/commands/utils.js +6 -27
  130. package/dist/commands/versions.js +2 -2
  131. package/dist/commands/view.d.ts +9 -77
  132. package/dist/commands/view.js +23 -8
  133. package/dist/commands/watchdog.js +1 -1
  134. package/dist/commands/webhook.js +25 -34
  135. package/dist/commands/workflows.js +1 -1
  136. package/dist/index.js +1 -1
  137. package/dist/lib/account-capabilities.d.ts +39 -0
  138. package/dist/lib/account-capabilities.js +59 -0
  139. package/dist/lib/account-catalog.js +1 -1
  140. package/dist/lib/account-registry.d.ts +66 -0
  141. package/dist/lib/account-registry.js +151 -5
  142. package/dist/lib/{rotate.d.ts → accounting/rotate.d.ts} +4 -4
  143. package/dist/lib/{rotate.js → accounting/rotate.js} +8 -8
  144. package/dist/lib/{usage.d.ts → accounting/usage.d.ts} +4 -4
  145. package/dist/lib/{usage.js → accounting/usage.js} +11 -11
  146. package/dist/lib/agent-spec/provider.js +1 -1
  147. package/dist/lib/agents.d.ts +72 -4
  148. package/dist/lib/agents.js +231 -199
  149. package/dist/lib/answer-router.d.ts +2 -2
  150. package/dist/lib/ask-classifier.d.ts +1 -1
  151. package/dist/lib/ask-classifier.js +1 -1
  152. package/dist/lib/audit/log.js +1 -1
  153. package/dist/lib/auth-health.d.ts +1 -1
  154. package/dist/lib/auth-health.js +2 -2
  155. package/dist/lib/brand.js +1 -1
  156. package/dist/lib/browser/caller-identity.d.ts +28 -0
  157. package/dist/lib/browser/caller-identity.js +156 -0
  158. package/dist/lib/browser/cdp.js +5 -1
  159. package/dist/lib/browser/chrome.js +12 -1
  160. package/dist/lib/browser/drivers/ssh.d.ts +1 -1
  161. package/dist/lib/browser/drivers/ssh.js +3 -2
  162. package/dist/lib/browser/hygiene.d.ts +10 -2
  163. package/dist/lib/browser/hygiene.js +7 -4
  164. package/dist/lib/browser/ipc.d.ts +22 -2
  165. package/dist/lib/browser/ipc.js +185 -21
  166. package/dist/lib/browser/profiles.d.ts +69 -5
  167. package/dist/lib/browser/profiles.js +135 -13
  168. package/dist/lib/browser/remote-control.d.ts +2 -2
  169. package/dist/lib/browser/remote-control.js +3 -3
  170. package/dist/lib/browser/runtime-state.d.ts +79 -0
  171. package/dist/lib/browser/runtime-state.js +119 -1
  172. package/dist/lib/browser/service.d.ts +137 -2
  173. package/dist/lib/browser/service.js +492 -54
  174. package/dist/lib/browser/sessions-list.d.ts +2 -1
  175. package/dist/lib/browser/sessions-list.js +4 -13
  176. package/dist/lib/browser/types.d.ts +19 -1
  177. package/dist/lib/budget/config.js +1 -1
  178. package/dist/lib/budget/ledger.js +1 -1
  179. package/dist/lib/byok-usage.js +1 -1
  180. package/dist/lib/capabilities.js +3 -15
  181. package/dist/lib/catchup.d.ts +1 -1
  182. package/dist/lib/catchup.js +1 -1
  183. package/dist/lib/cloud/dispatch.js +1 -1
  184. package/dist/lib/cloud/host.d.ts +3 -3
  185. package/dist/lib/cloud/host.js +5 -5
  186. package/dist/lib/cloud/rush.d.ts +9 -21
  187. package/dist/lib/cloud/rush.js +33 -120
  188. package/dist/lib/cloud/types.d.ts +2 -2
  189. package/dist/lib/commands.js +3 -13
  190. package/dist/lib/computer/actions.d.ts +36 -0
  191. package/dist/lib/computer/actions.js +162 -0
  192. package/dist/lib/computer/dispatch.d.ts +2 -2
  193. package/dist/lib/computer/dispatch.js +2 -2
  194. package/dist/lib/computer/sessions-list.d.ts +3 -3
  195. package/dist/lib/computer/sessions-list.js +2 -2
  196. package/dist/lib/config-keys.d.ts +2 -1
  197. package/dist/lib/config-keys.js +8 -4
  198. package/dist/lib/config-machine-keys.d.ts +4 -2
  199. package/dist/lib/config-machine-keys.js +5 -2
  200. package/dist/lib/crabbox/lease.js +9 -1
  201. package/dist/lib/crabbox/runtimes.d.ts +32 -7
  202. package/dist/lib/crabbox/runtimes.js +72 -30
  203. package/dist/lib/{daemon.d.ts → daemon/daemon.d.ts} +59 -1
  204. package/dist/lib/{daemon.js → daemon/daemon.js} +237 -49
  205. package/dist/lib/daemon-services.d.ts +1 -1
  206. package/dist/lib/daemon-services.js +5 -0
  207. package/dist/lib/daemon-ticks.d.ts +25 -0
  208. package/dist/lib/daemon-ticks.js +31 -1
  209. package/dist/lib/daemon-webhooks.d.ts +104 -0
  210. package/dist/lib/daemon-webhooks.js +215 -0
  211. package/dist/lib/device-config.d.ts +85 -75
  212. package/dist/lib/device-config.js +280 -142
  213. package/dist/lib/devices/config-migration.d.ts +29 -34
  214. package/dist/lib/devices/config-migration.js +209 -130
  215. package/dist/lib/devices/connect.d.ts +2 -2
  216. package/dist/lib/devices/connect.js +2 -2
  217. package/dist/lib/devices/discovery-policy.d.ts +30 -0
  218. package/dist/lib/devices/discovery-policy.js +101 -0
  219. package/dist/lib/devices/fleet-inventory.js +8 -3
  220. package/dist/lib/devices/harness-inventory.d.ts +1 -1
  221. package/dist/lib/devices/harness-inventory.js +12 -3
  222. package/dist/lib/devices/known-hosts.js +1 -1
  223. package/dist/lib/devices/pool.d.ts +10 -5
  224. package/dist/lib/devices/pool.js +5 -7
  225. package/dist/lib/devices/registry.d.ts +1 -1
  226. package/dist/lib/devices/registry.js +1 -1
  227. package/dist/lib/devices/resolve-profile.d.ts +2 -2
  228. package/dist/lib/devices/resolve-profile.js +2 -2
  229. package/dist/lib/devices/resolve-target.d.ts +1 -1
  230. package/dist/lib/devices/resolve-target.js +4 -4
  231. package/dist/lib/devices/self-host.d.ts +1 -1
  232. package/dist/lib/devices/self-host.js +3 -3
  233. package/dist/lib/devices/ssh-config.d.ts +1 -1
  234. package/dist/lib/devices/stats-cache.js +1 -1
  235. package/dist/lib/devices/sync.d.ts +3 -1
  236. package/dist/lib/devices/sync.js +3 -3
  237. package/dist/lib/doctor-diff.js +4 -4
  238. package/dist/lib/drift-sync.js +2 -2
  239. package/dist/lib/drift.js +2 -2
  240. package/dist/lib/event-families.d.ts +1 -1
  241. package/dist/lib/event-stream.d.ts +1 -1
  242. package/dist/lib/event-stream.js +2 -2
  243. package/dist/lib/events-ingest.js +2 -2
  244. package/dist/lib/exec.d.ts +4 -4
  245. package/dist/lib/exec.js +11 -11
  246. package/dist/lib/factory/snapshot.d.ts +1 -1
  247. package/dist/lib/factory/snapshot.js +1 -1
  248. package/dist/lib/{activity.d.ts → feed/activity.d.ts} +1 -1
  249. package/dist/lib/{activity.js → feed/activity.js} +7 -7
  250. package/dist/lib/{events.d.ts → feed/events.d.ts} +2 -2
  251. package/dist/lib/{events.js → feed/events.js} +5 -5
  252. package/dist/lib/{feed.js → feed/feed.js} +4 -4
  253. package/dist/lib/feed-outcome.d.ts +1 -1
  254. package/dist/lib/feed-policy.d.ts +1 -1
  255. package/dist/lib/feed-policy.js +1 -1
  256. package/dist/lib/feed-post.d.ts +1 -1
  257. package/dist/lib/feed-post.js +1 -1
  258. package/dist/lib/feed-ranking.d.ts +1 -1
  259. package/dist/lib/fleet/apply.d.ts +0 -6
  260. package/dist/lib/fleet/apply.js +18 -45
  261. package/dist/lib/fleet/auth-sync.d.ts +16 -35
  262. package/dist/lib/fleet/auth-sync.js +16 -75
  263. package/dist/lib/fleet/capture.js +8 -6
  264. package/dist/lib/fleet/manifest.js +23 -11
  265. package/dist/lib/fleet/types.d.ts +19 -7
  266. package/dist/lib/fleet-cache.d.ts +1 -1
  267. package/dist/lib/fleet-cache.js +1 -1
  268. package/dist/lib/format.d.ts +19 -0
  269. package/dist/lib/format.js +44 -1
  270. package/dist/lib/friction-heuristics.d.ts +1 -1
  271. package/dist/lib/git.d.ts +24 -1
  272. package/dist/lib/git.js +82 -38
  273. package/dist/lib/heal.js +3 -3
  274. package/dist/lib/hooks.d.ts +18 -0
  275. package/dist/lib/hooks.js +113 -1
  276. package/dist/lib/hosts/credentials.d.ts +30 -10
  277. package/dist/lib/hosts/credentials.js +38 -26
  278. package/dist/lib/hosts/dispatch.d.ts +3 -3
  279. package/dist/lib/hosts/dispatch.js +3 -3
  280. package/dist/lib/hosts/option.d.ts +3 -3
  281. package/dist/lib/hosts/option.js +7 -8
  282. package/dist/lib/hosts/passthrough.d.ts +17 -17
  283. package/dist/lib/hosts/passthrough.js +67 -50
  284. package/dist/lib/hosts/providers/devices.d.ts +1 -1
  285. package/dist/lib/hosts/providers/devices.js +1 -1
  286. package/dist/lib/hosts/reconcile.d.ts +1 -1
  287. package/dist/lib/hosts/reconcile.js +1 -1
  288. package/dist/lib/hosts/reconnect.d.ts +1 -1
  289. package/dist/lib/hosts/reconnect.js +2 -2
  290. package/dist/lib/hosts/registry.d.ts +5 -5
  291. package/dist/lib/hosts/registry.js +5 -5
  292. package/dist/lib/hosts/remote-cmd.d.ts +10 -10
  293. package/dist/lib/hosts/remote-cmd.js +25 -18
  294. package/dist/lib/hosts/remote-os.d.ts +4 -4
  295. package/dist/lib/hosts/remote-os.js +4 -4
  296. package/dist/lib/hosts/remote-session-id.d.ts +2 -2
  297. package/dist/lib/hosts/remote-session-id.js +2 -2
  298. package/dist/lib/hosts/routing-flag.d.ts +3 -3
  299. package/dist/lib/hosts/routing-flag.js +4 -5
  300. package/dist/lib/hosts/run-target.d.ts +4 -4
  301. package/dist/lib/hosts/run-target.js +4 -4
  302. package/dist/lib/hosts/session-index.d.ts +2 -2
  303. package/dist/lib/hosts/session-index.js +1 -1
  304. package/dist/lib/hosts/session-marker.d.ts +1 -1
  305. package/dist/lib/hosts/session-marker.js +1 -1
  306. package/dist/lib/hosts/types.d.ts +2 -2
  307. package/dist/lib/hosts/types.js +2 -2
  308. package/dist/lib/import.js +1 -1
  309. package/dist/lib/{migrate.d.ts → installations/migrate.d.ts} +13 -1
  310. package/dist/lib/{migrate.js → installations/migrate.js} +160 -40
  311. package/dist/lib/installations/resolve.js +1 -1
  312. package/dist/lib/installations/strategies.js +1 -1
  313. package/dist/lib/installations/update.js +2 -2
  314. package/dist/lib/{versions.d.ts → installations/versions.d.ts} +12 -3
  315. package/dist/lib/{versions.js → installations/versions.js} +51 -31
  316. package/dist/lib/isolation-boundary-report.js +1 -1
  317. package/dist/lib/linear-projects.d.ts +28 -0
  318. package/dist/lib/linear-projects.js +30 -0
  319. package/dist/lib/loop.js +1 -1
  320. package/dist/lib/mailbox-gc.js +1 -1
  321. package/dist/lib/mailbox.js +1 -1
  322. package/dist/lib/mcp-registry.d.ts +62 -0
  323. package/dist/lib/mcp-registry.js +177 -0
  324. package/dist/lib/mcp.d.ts +5 -0
  325. package/dist/lib/mcp.js +124 -307
  326. package/dist/lib/menubar/MenubarHelper.app/Contents/CodeResources +0 -0
  327. package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
  328. package/dist/lib/menubar/install-menubar.d.ts +7 -0
  329. package/dist/lib/menubar/install-menubar.js +24 -6
  330. package/dist/lib/menubar/snapshot.d.ts +7 -0
  331. package/dist/lib/menubar/snapshot.js +8 -6
  332. package/dist/lib/models.js +1 -1
  333. package/dist/lib/monitors/config.d.ts +12 -0
  334. package/dist/lib/monitors/config.js +3 -0
  335. package/dist/lib/monitors/dispatch.js +26 -5
  336. package/dist/lib/monitors/engine.js +10 -0
  337. package/dist/lib/monitors/sources/webhook.d.ts +1 -1
  338. package/dist/lib/monitors/state.d.ts +42 -0
  339. package/dist/lib/monitors/state.js +30 -0
  340. package/dist/lib/notify.d.ts +1 -1
  341. package/dist/lib/observe-aliases.d.ts +3 -3
  342. package/dist/lib/observe-aliases.js +3 -21
  343. package/dist/lib/output/git-output.js +2 -2
  344. package/dist/lib/overdue.d.ts +1 -1
  345. package/dist/lib/overdue.js +1 -1
  346. package/dist/lib/permissions-registry.d.ts +65 -0
  347. package/dist/lib/permissions-registry.js +599 -0
  348. package/dist/lib/permissions.d.ts +24 -13
  349. package/dist/lib/permissions.js +52 -271
  350. package/dist/lib/picker.d.ts +16 -0
  351. package/dist/lib/picker.js +33 -3
  352. package/dist/lib/placement.d.ts +1 -1
  353. package/dist/lib/placement.js +4 -4
  354. package/dist/lib/platform/paths.d.ts +8 -0
  355. package/dist/lib/platform/paths.js +11 -0
  356. package/dist/lib/platform/posixpath.js +3 -3
  357. package/dist/lib/{plugin-marketplace.d.ts → plugins/plugin-marketplace.d.ts} +1 -1
  358. package/dist/lib/{plugin-marketplace.js → plugins/plugin-marketplace.js} +2 -2
  359. package/dist/lib/{plugins.d.ts → plugins/plugins.d.ts} +1 -1
  360. package/dist/lib/{plugins.js → plugins/plugins.js} +7 -7
  361. package/dist/lib/{skills.d.ts → plugins/skills.d.ts} +1 -1
  362. package/dist/lib/{skills.js → plugins/skills.js} +7 -7
  363. package/dist/lib/pricing/cost.d.ts +1 -1
  364. package/dist/lib/pricing/cost.js +1 -1
  365. package/dist/lib/profiles-presets.d.ts +1 -1
  366. package/dist/lib/profiles-presets.js +1 -1
  367. package/dist/lib/profiles.js +2 -2
  368. package/dist/lib/project-import.js +4 -1
  369. package/dist/lib/project-key.js +7 -0
  370. package/dist/lib/project-launch.d.ts +1 -1
  371. package/dist/lib/project-launch.js +3 -3
  372. package/dist/lib/project-pull.d.ts +128 -0
  373. package/dist/lib/project-pull.js +384 -0
  374. package/dist/lib/project-root.d.ts +2 -2
  375. package/dist/lib/project-root.js +2 -2
  376. package/dist/lib/project-status.js +1 -1
  377. package/dist/lib/projects.d.ts +23 -0
  378. package/dist/lib/projects.js +29 -6
  379. package/dist/lib/refresh.d.ts +12 -1
  380. package/dist/lib/refresh.js +16 -9
  381. package/dist/lib/registry.d.ts +9 -2
  382. package/dist/lib/registry.js +11 -4
  383. package/dist/lib/resources.d.ts +2 -2
  384. package/dist/lib/resources.js +2 -2
  385. package/dist/lib/routers.d.ts +81 -0
  386. package/dist/lib/routers.js +153 -0
  387. package/dist/lib/routine-context.d.ts +1 -0
  388. package/dist/lib/routine-context.js +7 -2
  389. package/dist/lib/routine-notify-owner.d.ts +1 -1
  390. package/dist/lib/routine-notify.d.ts +1 -1
  391. package/dist/lib/routine-notify.js +1 -1
  392. package/dist/lib/routine-process-cleanup.d.ts +1 -1
  393. package/dist/lib/routine-readiness.d.ts +1 -1
  394. package/dist/lib/routine-readiness.js +11 -4
  395. package/dist/lib/routines-placement.d.ts +12 -2
  396. package/dist/lib/routines-placement.js +20 -3
  397. package/dist/lib/routines-project.d.ts +1 -1
  398. package/dist/lib/routines-project.js +1 -1
  399. package/dist/lib/rules/compile.d.ts +1 -0
  400. package/dist/lib/rules/compile.js +10 -2
  401. package/dist/lib/rules/rules.js +1 -1
  402. package/dist/lib/run-notify.js +1 -1
  403. package/dist/lib/runner.d.ts +80 -2
  404. package/dist/lib/runner.js +261 -67
  405. package/dist/lib/sandbox.d.ts +1 -1
  406. package/dist/lib/scheduler.d.ts +1 -1
  407. package/dist/lib/scheduler.js +1 -1
  408. package/dist/lib/{routines.d.ts → scheduling/routines.d.ts} +54 -9
  409. package/dist/lib/{routines.js → scheduling/routines.js} +173 -14
  410. package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
  411. package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
  412. package/dist/lib/secrets/agent.js +2 -2
  413. package/dist/lib/secrets/audit.js +1 -1
  414. package/dist/lib/secrets/bundles.d.ts +4 -4
  415. package/dist/lib/secrets/bundles.js +8 -8
  416. package/dist/lib/secrets/headless.d.ts +16 -0
  417. package/dist/lib/secrets/headless.js +21 -0
  418. package/dist/lib/secrets/index.js +1 -1
  419. package/dist/lib/secrets/list-filter.d.ts +1 -1
  420. package/dist/lib/secrets/list-filter.js +2 -2
  421. package/dist/lib/secrets/push.d.ts +1 -1
  422. package/dist/lib/secrets/push.js +10 -12
  423. package/dist/lib/secrets/remote.d.ts +21 -17
  424. package/dist/lib/secrets/remote.js +39 -23
  425. package/dist/lib/secrets/vault.js +2 -2
  426. package/dist/lib/self-heal/checks/shadowing.js +1 -1
  427. package/dist/lib/self-heal/checks/shims.js +1 -1
  428. package/dist/lib/self-update.d.ts +39 -4
  429. package/dist/lib/self-update.js +78 -25
  430. package/dist/lib/serve/control.d.ts +1 -1
  431. package/dist/lib/serve/control.js +4 -4
  432. package/dist/lib/serve/data.d.ts +1 -1
  433. package/dist/lib/serve/data.js +1 -1
  434. package/dist/lib/serve/stream.js +1 -1
  435. package/dist/lib/service-manifest.d.ts +29 -0
  436. package/dist/lib/service-manifest.js +80 -0
  437. package/dist/lib/session/active.d.ts +59 -7
  438. package/dist/lib/session/active.js +158 -17
  439. package/dist/lib/session/bash-command.js +1 -1
  440. package/dist/lib/session/claude-accounts.d.ts +1 -1
  441. package/dist/lib/session/claude-accounts.js +1 -1
  442. package/dist/lib/session/db.d.ts +10 -2
  443. package/dist/lib/session/db.js +25 -6
  444. package/dist/lib/session/discover.d.ts +77 -0
  445. package/dist/lib/session/discover.js +130 -25
  446. package/dist/lib/session/fork.js +1 -1
  447. package/dist/lib/session/inject.d.ts +1 -1
  448. package/dist/lib/session/insights.d.ts +1 -1
  449. package/dist/lib/session/insights.js +1 -1
  450. package/dist/lib/session/live-metadata.d.ts +15 -0
  451. package/dist/lib/session/live-metadata.js +76 -0
  452. package/dist/lib/session/migrate-targets.d.ts +1 -1
  453. package/dist/lib/session/recovery.d.ts +1 -1
  454. package/dist/lib/session/recovery.js +2 -2
  455. package/dist/lib/session/remote-active.d.ts +10 -1
  456. package/dist/lib/session/remote-active.js +8 -3
  457. package/dist/lib/session/remote-bundle.d.ts +1 -1
  458. package/dist/lib/session/remote-bundle.js +2 -2
  459. package/dist/lib/session/remote-list.d.ts +15 -4
  460. package/dist/lib/session/remote-list.js +40 -3
  461. package/dist/lib/session/remote.d.ts +5 -5
  462. package/dist/lib/session/remote.js +13 -17
  463. package/dist/lib/session/resume-command.d.ts +3 -2
  464. package/dist/lib/session/resume-command.js +4 -3
  465. package/dist/lib/session/resume-owner.d.ts +3 -3
  466. package/dist/lib/session/resume-owner.js +3 -3
  467. package/dist/lib/session/session-cache.d.ts +12 -0
  468. package/dist/lib/session/session-cache.js +2 -0
  469. package/dist/lib/session/share-html.d.ts +55 -0
  470. package/dist/lib/session/share-html.js +319 -0
  471. package/dist/lib/session/shell-programs.js +1 -1
  472. package/dist/lib/session/state.js +5 -5
  473. package/dist/lib/session/team-filter.d.ts +1 -1
  474. package/dist/lib/session/team-filter.js +1 -1
  475. package/dist/lib/session/types.d.ts +3 -3
  476. package/dist/lib/session/width.d.ts +2 -2
  477. package/dist/lib/session/width.js +2 -2
  478. package/dist/lib/settings-manifest.d.ts +2 -0
  479. package/dist/lib/settings-manifest.js +81 -3
  480. package/dist/lib/share/delete.d.ts +21 -0
  481. package/dist/lib/share/delete.js +42 -0
  482. package/dist/lib/share/publish.d.ts +120 -0
  483. package/dist/lib/share/publish.js +243 -18
  484. package/dist/lib/share/worker-template.js +172 -9
  485. package/dist/lib/shims.js +35 -7
  486. package/dist/lib/smart-launch.d.ts +4 -4
  487. package/dist/lib/smart-launch.js +6 -4
  488. package/dist/lib/snapshot.d.ts +4 -4
  489. package/dist/lib/snapshot.js +2 -2
  490. package/dist/lib/ssh-exec.d.ts +1 -1
  491. package/dist/lib/ssh-exec.js +2 -2
  492. package/dist/lib/ssh-tunnel.d.ts +10 -10
  493. package/dist/lib/ssh-tunnel.js +12 -12
  494. package/dist/lib/staleness/checkers/hooks.d.ts +1 -1
  495. package/dist/lib/staleness/checkers/hooks.js +1 -1
  496. package/dist/lib/staleness/detectors/permissions.js +0 -23
  497. package/dist/lib/staleness/detectors/plugins.js +1 -1
  498. package/dist/lib/staleness/fingerprint.js +1 -1
  499. package/dist/lib/staleness/layers.d.ts +1 -1
  500. package/dist/lib/staleness/layers.js +1 -1
  501. package/dist/lib/staleness/writers/mcp.js +3 -1
  502. package/dist/lib/staleness/writers/plugins.js +1 -1
  503. package/dist/lib/staleness/writers/types.d.ts +8 -0
  504. package/dist/lib/startup/command-registry.d.ts +6 -147
  505. package/dist/lib/startup/command-registry.js +40 -303
  506. package/dist/lib/startup/dev-build.d.ts +0 -21
  507. package/dist/lib/startup/dev-build.js +29 -8
  508. package/dist/lib/state.d.ts +19 -1
  509. package/dist/lib/state.js +120 -51
  510. package/dist/lib/subagents.js +1 -1
  511. package/dist/lib/sync-status.js +1 -1
  512. package/dist/lib/sync-umbrella.d.ts +6 -1
  513. package/dist/lib/sync-umbrella.js +9 -4
  514. package/dist/lib/teams/agents.js +2 -2
  515. package/dist/lib/teams/registry.js +1 -1
  516. package/dist/lib/terminal/backends/vscodium-agent.js +1 -1
  517. package/dist/lib/terminal/engine.js +1 -1
  518. package/dist/lib/terminal/index.d.ts +4 -0
  519. package/dist/lib/terminal/index.js +3 -0
  520. package/dist/lib/terminal/inject.d.ts +2 -2
  521. package/dist/lib/terminal/inject.js +2 -2
  522. package/dist/lib/terminal/transport.js +1 -1
  523. package/dist/lib/tmux/index.d.ts +1 -1
  524. package/dist/lib/tmux/index.js +1 -1
  525. package/dist/lib/tmux/session.d.ts +21 -5
  526. package/dist/lib/tmux/session.js +76 -22
  527. package/dist/lib/triggers/handlers.d.ts +38 -3
  528. package/dist/lib/triggers/handlers.js +58 -7
  529. package/dist/lib/triggers/webhook.d.ts +113 -5
  530. package/dist/lib/triggers/webhook.js +223 -44
  531. package/dist/lib/types.d.ts +19 -7
  532. package/dist/lib/usage-fleet.d.ts +1 -1
  533. package/dist/lib/usage-fleet.js +1 -1
  534. package/dist/lib/usage-refresh.d.ts +1 -1
  535. package/dist/lib/usage-refresh.js +3 -3
  536. package/dist/lib/version-duplicates.js +2 -2
  537. package/dist/lib/view-types.d.ts +56 -0
  538. package/dist/lib/view-types.js +1 -0
  539. package/dist/lib/watchdog/rotate.d.ts +2 -2
  540. package/dist/lib/watchdog/rotate.js +3 -3
  541. package/dist/lib/watchdog/runner.d.ts +2 -3
  542. package/dist/lib/watchdog/runner.js +3 -4
  543. package/dist/lib/workflows.js +1 -1
  544. package/dist/lib/wrap.d.ts +33 -0
  545. package/dist/lib/wrap.js +70 -0
  546. package/package.json +2 -1
  547. package/scripts/postinstall.js +2 -2
  548. package/dist/commands/bench.d.ts +0 -2
  549. package/dist/commands/bench.js +0 -101
  550. package/dist/commands/cp.d.ts +0 -84
  551. package/dist/commands/cp.js +0 -231
  552. package/dist/commands/login.d.ts +0 -2
  553. package/dist/lib/resources/commands.d.ts +0 -46
  554. package/dist/lib/resources/commands.js +0 -211
  555. package/dist/lib/resources/hooks.d.ts +0 -16
  556. package/dist/lib/resources/hooks.js +0 -153
  557. package/dist/lib/resources/mcp.d.ts +0 -34
  558. package/dist/lib/resources/mcp.js +0 -250
  559. package/dist/lib/resources/memory.d.ts +0 -15
  560. package/dist/lib/resources/memory.js +0 -46
  561. package/dist/lib/resources/permissions.d.ts +0 -13
  562. package/dist/lib/resources/permissions.js +0 -202
  563. package/dist/lib/resources/rules.d.ts +0 -46
  564. package/dist/lib/resources/rules.js +0 -179
  565. package/dist/lib/resources/skills.d.ts +0 -37
  566. package/dist/lib/resources/skills.js +0 -247
  567. package/dist/lib/resources/subagents.d.ts +0 -46
  568. package/dist/lib/resources/subagents.js +0 -202
  569. /package/dist/lib/{feed.d.ts → feed/feed.d.ts} +0 -0
@@ -5,11 +5,12 @@
5
5
  // provisioning door lives beside it at `agents artifacts setup`
6
6
  // (commands/artifacts-setup.ts), which calls `runShareProvision` below.
7
7
  import { existsSync } from 'node:fs';
8
+ import { formatBytes } from '../lib/format.js';
8
9
  import chalk from 'chalk';
9
10
  import { DEFAULT_BUCKET_NAME, DEFAULT_CF_BUNDLE, DEFAULT_SHARE_DOMAIN, DEFAULT_WORKER_NAME, generateWriteToken, readCloudflareCreds, readShareConfig, readWriteToken, readWriteTokenEnv, readWriteTokenFromBundle, storeWriteToken, writeShareConfig, } from '../lib/share/config.js';
10
11
  import { addCustomDomain, configureBucketLifecycle, createBucket, deployWorker, enableWorkersDev, findZoneId, hashWorkerScript, updateWorker, setWorkerSecret, } from '../lib/share/provision.js';
11
- import { publishFile, resolveShareUsername } from '../lib/share/publish.js';
12
- import { deleteShare } from '../lib/share/delete.js';
12
+ import { publishFile, resolveShareUsername, parseMetaEntries } from '../lib/share/publish.js';
13
+ import { deleteShare, resolveDeleteTarget } from '../lib/share/delete.js';
13
14
  import { renderWorkerScript } from '../lib/share/worker-template.js';
14
15
  import { analyticsEnabled } from '../lib/share/analytics.js';
15
16
  import { resolveGitHubUsername } from '../lib/git.js';
@@ -18,6 +19,10 @@ export function formatSharePublishResult(result, json = false) {
18
19
  if (json)
19
20
  return JSON.stringify(result, null, 2);
20
21
  const lines = [chalk.green(result.url)];
22
+ if (result.label) {
23
+ const hint = result.labelSource === 'derived' ? chalk.dim(' (derived — pass --label to set one)') : '';
24
+ lines.push(chalk.dim(` "${result.label}"`) + hint);
25
+ }
21
26
  if (result.coverUrl)
22
27
  lines.push(chalk.dim(` cover ${result.coverUrl}`));
23
28
  if (result.expiresAt)
@@ -47,6 +52,18 @@ async function defaultListingFetch(url) {
47
52
  const res = await fetch(url, { headers: { accept: 'application/json' } });
48
53
  return { status: res.status, contentType: res.headers.get('content-type') ?? '', body: await res.text() };
49
54
  }
55
+ /** Normalize the Worker's `meta` field (arbitrary `--meta key=value` entries,
56
+ * RUSH-2683) into a plain string record — `{}` for a missing/malformed field
57
+ * (a deployed Worker that predates it, or a non-object value), never throws. */
58
+ function parseMetaField(raw) {
59
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw))
60
+ return {};
61
+ const out = {};
62
+ for (const [k, v] of Object.entries(raw)) {
63
+ out[k] = String(v);
64
+ }
65
+ return out;
66
+ }
50
67
  /** Parse the Worker's listing JSON into a validated result, failing loud (with the
51
68
  * outdated-template hint) on any body that isn't the expected shape — an old Worker
52
69
  * serves the HTML gallery for a non-empty namespace, which must not be silently
@@ -72,6 +89,13 @@ export function parseShareListing(user, body) {
72
89
  contentType: item.contentType == null ? null : String(item.contentType),
73
90
  publishedAt: String(item.publishedAt ?? ''),
74
91
  expiresAt: item.expiresAt == null ? null : String(item.expiresAt),
92
+ label: item.label == null ? null : String(item.label),
93
+ agent: item.agent == null ? null : String(item.agent),
94
+ session: item.session == null ? null : String(item.session),
95
+ host: item.host == null ? null : String(item.host),
96
+ repo: item.repo == null ? null : String(item.repo),
97
+ revisionCount: typeof item.revisionCount === 'number' ? item.revisionCount : 0,
98
+ meta: parseMetaField(item.meta),
75
99
  };
76
100
  });
77
101
  return { user, count: objects.length, objects };
@@ -118,20 +142,38 @@ export async function runShareList(opts = {}) {
118
142
  // the HTML gallery — the deployed template is outdated.
119
143
  throw new Error(OUTDATED_TEMPLATE_HINT);
120
144
  }
121
- return parseShareListing(user, res.body);
145
+ const parsed = parseShareListing(user, res.body);
146
+ return applyShareListFilters(parsed, opts);
147
+ }
148
+ /** Client-side filtering over an already-fetched listing (RUSH-2683) — the
149
+ * Worker has no query surface for this, so it narrows the fetched set instead
150
+ * of a second round trip. `count` reflects the FILTERED set, matching what the
151
+ * caller actually sees. */
152
+ function applyShareListFilters(result, filters) {
153
+ let objects = result.objects;
154
+ if (filters.agent) {
155
+ const needle = filters.agent.toLowerCase();
156
+ objects = objects.filter((o) => (o.agent ?? '').toLowerCase() === needle);
157
+ }
158
+ if (filters.session) {
159
+ objects = objects.filter((o) => o.session === filters.session);
160
+ }
161
+ if (filters.label) {
162
+ const needle = filters.label.toLowerCase();
163
+ objects = objects.filter((o) => (o.label ?? '').toLowerCase().includes(needle));
164
+ }
165
+ return { user: result.user, count: objects.length, objects };
122
166
  }
123
167
  /** Human-readable bytes, e.g. `1.2 KB`, `640 B`. */
124
- function formatBytes(n) {
125
- if (n < 1024)
126
- return `${n} B`;
127
- const units = ['KB', 'MB', 'GB'];
128
- let value = n / 1024;
129
- let unit = 0;
130
- while (value >= 1024 && unit < units.length - 1) {
131
- value /= 1024;
132
- unit++;
133
- }
134
- return `${value < 10 ? value.toFixed(1) : Math.round(value)} ${units[unit]}`;
168
+ /** Render an arbitrary `--meta` map as `k=v k2=v2` for a human table row, or
169
+ * undefined when there's nothing to show (RUSH-2683). */
170
+ function formatMetaPairs(meta) {
171
+ if (!meta)
172
+ return undefined;
173
+ const entries = Object.entries(meta);
174
+ if (entries.length === 0)
175
+ return undefined;
176
+ return entries.map(([k, v]) => `${k}=${v}`).join(' ');
135
177
  }
136
178
  export function formatShareList(result, json = false) {
137
179
  if (json)
@@ -143,8 +185,97 @@ export function formatShareList(result, json = false) {
143
185
  chalk.dim(` ${result.count} published ${result.count === 1 ? 'page' : 'pages'}`);
144
186
  const rows = result.objects.map((o) => {
145
187
  const when = o.publishedAt ? o.publishedAt.slice(0, 10) : 'unknown';
146
- const meta = `${when} · ${formatBytes(o.size)}${o.expiresAt ? ` · expires ${o.expiresAt.slice(0, 10)}` : ''}`;
147
- return `${chalk.cyan(o.slug)} ${chalk.dim(meta)}\n ${chalk.green(o.url)}`;
188
+ const bits = [when, formatBytes(o.size)];
189
+ if (o.agent)
190
+ bits.push(o.agent);
191
+ if (o.revisionCount > 0)
192
+ bits.push(`${o.revisionCount} ${o.revisionCount === 1 ? 'revision' : 'revisions'}`);
193
+ if (o.expiresAt)
194
+ bits.push(`expires ${o.expiresAt.slice(0, 10)}`);
195
+ const metaPairs = formatMetaPairs(o.meta);
196
+ if (metaPairs)
197
+ bits.push(metaPairs);
198
+ const line = bits.join(' · ');
199
+ const title = o.label ? `${chalk.bold(o.label)}\n ` : '';
200
+ return `${title}${chalk.cyan(o.slug)} ${chalk.dim(line)}\n ${chalk.green(o.url)}`;
201
+ });
202
+ return [header, ...rows].join('\n');
203
+ }
204
+ /** Parse the Worker's `?revisions=json` payload, failing loud (with the same
205
+ * outdated-template hint as {@link parseShareListing}) on an unexpected shape. */
206
+ export function parseShareRevisions(key, body) {
207
+ let data;
208
+ try {
209
+ data = JSON.parse(body);
210
+ }
211
+ catch {
212
+ throw new Error(OUTDATED_TEMPLATE_HINT);
213
+ }
214
+ const revisionsRaw = data?.revisions;
215
+ if (!data || typeof data !== 'object' || !Array.isArray(revisionsRaw)) {
216
+ throw new Error(OUTDATED_TEMPLATE_HINT);
217
+ }
218
+ const revisions = revisionsRaw.map((o) => {
219
+ const item = o;
220
+ return {
221
+ key: String(item.key ?? ''),
222
+ url: String(item.url ?? ''),
223
+ size: typeof item.size === 'number' ? item.size : 0,
224
+ contentType: item.contentType == null ? null : String(item.contentType),
225
+ uploadedAt: String(item.uploadedAt ?? ''),
226
+ expiresAt: item.expiresAt == null ? null : String(item.expiresAt),
227
+ label: item.label == null ? null : String(item.label),
228
+ agent: item.agent == null ? null : String(item.agent),
229
+ session: item.session == null ? null : String(item.session),
230
+ host: item.host == null ? null : String(item.host),
231
+ repo: item.repo == null ? null : String(item.repo),
232
+ meta: parseMetaField(item.meta),
233
+ };
234
+ });
235
+ return { key, count: revisions.length, revisions };
236
+ }
237
+ /** Fetch and parse the retained prior versions of one published slug. `target`
238
+ * accepts the same three forms as `agents unshare` (a full URL, `<user>/<slug>`,
239
+ * or a bare slug resolved against the caller's own namespace) — reuses
240
+ * {@link resolveDeleteTarget} rather than re-deriving the key. */
241
+ export async function runShareRevisions(target, opts = {}) {
242
+ const cfg = opts.config ?? readShareConfig();
243
+ if (!cfg) {
244
+ throw new Error("Not set up yet. Run 'agents artifacts setup' (provision your own endpoint) or 'agents artifacts share join' (use an existing one).");
245
+ }
246
+ const templateStatus = shareTemplateStatus(cfg);
247
+ if (templateStatus === 'outdated') {
248
+ throw new Error(OUTDATED_TEMPLATE_HINT);
249
+ }
250
+ const { key } = await resolveDeleteTarget(target, { githubUser: opts.githubUser });
251
+ const revUrl = `${cfg.baseUrl.replace(/\/+$/, '')}/${key}?revisions=json`;
252
+ const fetchListing = opts.fetchListing ?? defaultListingFetch;
253
+ const res = await fetchListing(revUrl);
254
+ if (res.status !== 200) {
255
+ throw new Error(`Revisions lookup failed (${res.status}) for ${revUrl}. Check the endpoint is reachable, or that 'agents artifacts setup' completed.`);
256
+ }
257
+ if (!/application\/json/i.test(res.contentType)) {
258
+ throw new Error(OUTDATED_TEMPLATE_HINT);
259
+ }
260
+ return parseShareRevisions(key, res.body);
261
+ }
262
+ export function formatShareRevisions(result, json = false) {
263
+ if (json)
264
+ return JSON.stringify(result, null, 2);
265
+ if (result.count === 0) {
266
+ return chalk.dim(`No retained revisions for ${result.key} (only the current version exists).`);
267
+ }
268
+ const header = chalk.bold(result.key) + chalk.dim(` ${result.count} retained ${result.count === 1 ? 'revision' : 'revisions'}`);
269
+ const rows = result.revisions.map((r) => {
270
+ const bits = [r.uploadedAt ? r.uploadedAt.slice(0, 10) : 'unknown', formatBytes(r.size)];
271
+ if (r.agent)
272
+ bits.push(r.agent);
273
+ if (r.label)
274
+ bits.push(r.label);
275
+ const metaPairs = formatMetaPairs(r.meta);
276
+ if (metaPairs)
277
+ bits.push(metaPairs);
278
+ return `${chalk.cyan(r.uploadedAt || r.key)} ${chalk.dim(bits.join(' · '))}\n ${chalk.green(r.url)}`;
148
279
  });
149
280
  return [header, ...rows].join('\n');
150
281
  }
@@ -159,6 +290,9 @@ export function formatShareDeleteResult(result, json = false) {
159
290
  ? chalk.dim(` cover deleted ${result.cover.url}`)
160
291
  : chalk.dim(` cover (none) ${result.cover.url}`));
161
292
  }
293
+ if (result.revisions?.length) {
294
+ lines.push(chalk.dim(` ${result.revisions.length} retained ${result.revisions.length === 1 ? 'revision' : 'revisions'} deleted`));
295
+ }
162
296
  return lines.join('\n');
163
297
  }
164
298
  /** Shared handler for `agents artifacts share delete <targets...>` and the
@@ -175,6 +309,7 @@ export async function runShareDelete(targets, opts, deleteFn = deleteShare) {
175
309
  try {
176
310
  const result = await deleteFn(target, {
177
311
  keepCover: opts.keepCover === true,
312
+ keepRevisions: opts.keepRevisions === true,
178
313
  ifExists: opts.ifExists === true,
179
314
  githubUser: opts.githubUser,
180
315
  });
@@ -198,12 +333,13 @@ export async function runShareDelete(targets, opts, deleteFn = deleteShare) {
198
333
  function registerShareDeleteOptions(cmd) {
199
334
  return cmd
200
335
  .option('--keep-cover', 'leave the sibling <slug>.png OG cover in place (default: delete it too)')
336
+ .option('--keep-revisions', 'leave retained revisions (<slug>/rev-*) in place (default: delete them too)')
201
337
  .option('--if-exists', 'treat an already-missing target as a no-op success instead of an error')
202
338
  .option('--github-user <user>', 'GitHub username for resolving a bare-slug target (default: resolved from gh/git config)')
203
339
  .option('--json', 'emit machine-readable results');
204
340
  }
205
341
  const SHARE_DELETE_EXAMPLES = `
206
- # Delete by full URL — also takes down the sibling OG cover
342
+ # Delete by full URL — also takes down the sibling OG cover and any retained revisions
207
343
  agents artifacts share delete https://share.agents-cli.sh/octocat/my-plan-a1b2
208
344
 
209
345
  # Delete by <user>/<slug>, or a bare slug in your own namespace
@@ -216,6 +352,9 @@ const SHARE_DELETE_EXAMPLES = `
216
352
  # Keep the cover image up (rare — you usually want both gone)
217
353
  agents unshare my-plan-a1b2 --keep-cover
218
354
 
355
+ # Keep retained revisions up too (rare — they're world-readable by URL like the page itself)
356
+ agents unshare my-plan-a1b2 --keep-revisions
357
+
219
358
  # Don't error if it's already gone
220
359
  agents unshare my-plan-a1b2 --if-exists
221
360
  `;
@@ -224,6 +363,12 @@ const SHARE_DELETE_NOTES = `
224
363
  Worker's DELETE is idempotent and returns {"ok":true} even for a key that was
225
364
  never there, so that response alone is never proof of a takedown.
226
365
 
366
+ Also deletes any retained revisions of the target (RUSH-2683) — a share that was
367
+ republished at least once leaves its prior version(s) live at their own URL until
368
+ they're purged too, so leaving them up would defeat the point of taking the page
369
+ down. Pass --keep-revisions to leave them (they still expire via the bucket's
370
+ lifecycle rule on their own schedule either way).
371
+
227
372
  agents artifacts share delete === agents unshare (same command, different name).
228
373
  `;
229
374
  /**
@@ -245,6 +390,10 @@ export function registerShareCommands(artifactsCmd) {
245
390
  .option('--force', 'publish even when the file contains emails or credential-shaped strings')
246
391
  .option('--no-cover', 'skip the OG preview image (HTML pages get one by default)')
247
392
  .option('--no-analytics', 'skip injecting the Cloudflare Web Analytics beacon')
393
+ .option('--label <text>', 'human display title, shown in the gallery and `share list` (default: derived from the HTML <title>, frontmatter title, or filename)')
394
+ .option('--title <text>', 'alias of --label')
395
+ .option('--meta <key=value>', 'structured metadata (repeatable), e.g. --meta kind=plan --meta ticket=RUSH-2683. Recommended keys: kind (plan|report|visual|screenshot|recording|deck|doc), project, ticket, status (draft|final). Reserved (set automatically, not settable): agent, session, host, repo, date, label', (val, prev) => [...prev, val], [])
396
+ .option('--no-revision', "overwrite an existing slug in place — skip keeping the prior version as a <slug>/rev-<ts> backup (default: keep it, see 'agents artifacts share revisions')")
248
397
  .option('--json', 'emit machine-readable publish result for plan-render hooks and scripts')
249
398
  .action(async (file, opts) => {
250
399
  if (!file) {
@@ -257,6 +406,7 @@ export function registerShareCommands(artifactsCmd) {
257
406
  return;
258
407
  }
259
408
  try {
409
+ const meta = parseMetaEntries(opts.meta);
260
410
  const result = await publishFile(file, {
261
411
  slug: opts.slug,
262
412
  githubUser: opts.githubUser,
@@ -265,6 +415,9 @@ export function registerShareCommands(artifactsCmd) {
265
415
  force: opts.force,
266
416
  cover: opts.cover,
267
417
  analytics: opts.analytics,
418
+ label: opts.label ?? opts.title,
419
+ meta,
420
+ noRevision: opts.revision === false,
268
421
  });
269
422
  console.log(formatSharePublishResult(result, Boolean(opts.json)));
270
423
  }
@@ -286,6 +439,12 @@ export function registerShareCommands(artifactsCmd) {
286
439
 
287
440
  # Custom slug, expiring in 7 days
288
441
  agents artifacts share ./out/report.html --slug q3-report --expire 7d
442
+
443
+ # Human title + structured metadata, shown in the gallery and share list
444
+ agents artifacts share ./out/plan.html --label "Q3 fleet plan" --meta kind=plan --meta ticket=RUSH-2683
445
+
446
+ # Republish without keeping the previous version as a revision
447
+ agents artifacts share ./out/plan.html --slug q3-report --no-revision
289
448
  ${SHARE_DELETE_EXAMPLES}
290
449
  # One-time setup (or join an existing endpoint)
291
450
  agents artifacts setup
@@ -300,6 +459,13 @@ ${SHARE_DELETE_EXAMPLES}
300
459
  and agents artifacts share list; the direct URL is still world-readable
301
460
  (unlisted, not secret). A pre-publish scan refuses emails and credential-shaped
302
461
  strings unless --force is passed.
462
+
463
+ Every publish carries provenance auto-captured from the exec env/git/clock
464
+ (agent, session, host, repo, date) — never invented, only sent when present —
465
+ plus a label (explicit --label/--title, else derived from the HTML <title>,
466
+ frontmatter title, or filename; never blocks on a prompt) and any --meta
467
+ key=value pairs. Republishing an existing slug keeps the prior version as a
468
+ retained revision by default; see 'agents artifacts share revisions'.
303
469
  ${SHARE_DELETE_NOTES}
304
470
  `,
305
471
  });
@@ -391,10 +557,25 @@ ${SHARE_DELETE_NOTES}
391
557
  .command('list')
392
558
  .description("List the pages you've published to your share namespace (human table; --json for scripts).")
393
559
  .option('--github-user <user>', 'GitHub username whose namespace to list (default: resolved from gh/git config)')
394
- .option('--json', 'emit the machine-readable listing (slug, url, size, contentType, publishedAt, expiresAt)')
560
+ .option('--agent <name>', 'filter to shares published by this agent/harness (case-insensitive)')
561
+ .option('--session <id>', 'filter to shares published from this session id')
562
+ // Named --label-contains, not --label: `share <file>` (the parent) already owns
563
+ // `--label`/`--title`, and commander's argv scanner resolves an option name
564
+ // against the WHOLE ancestor chain, not per-command — a same-named child option
565
+ // is silently dropped (verified; see RUSH-2683 PR notes). Fixing that properly
566
+ // needs `enablePositionalOptions()` on the root program, a CLI-wide change out
567
+ // of scope here (a pre-existing instance of it already affects --json/
568
+ // --github-user on list/update/delete — tracked as a follow-up).
569
+ .option('--label-contains <substr>', 'filter to shares whose label contains this text (case-insensitive)')
570
+ .option('--json', 'emit the machine-readable listing (slug, url, size, contentType, publishedAt, expiresAt, label, agent, session, host, repo, revisionCount, meta)')
395
571
  .action(async (opts) => {
396
572
  try {
397
- const result = await runShareList({ githubUser: opts.githubUser });
573
+ const result = await runShareList({
574
+ githubUser: opts.githubUser,
575
+ agent: opts.agent,
576
+ session: opts.session,
577
+ label: opts.labelContains,
578
+ });
398
579
  console.log(formatShareList(result, Boolean(opts.json)));
399
580
  }
400
581
  catch (e) {
@@ -412,6 +593,10 @@ ${SHARE_DELETE_NOTES}
412
593
 
413
594
  # List another namespace
414
595
  agents artifacts share list --github-user octocat
596
+
597
+ # Narrow by who/what published it
598
+ agents artifacts share list --agent claude
599
+ agents artifacts share list --label-contains "fleet plan"
415
600
  `,
416
601
  notes: `
417
602
  Lists the ACTIVE pages in your namespace — expired links and the sibling .png OG
@@ -420,6 +605,54 @@ ${SHARE_DELETE_NOTES}
420
605
  Worker predates this feature the command says so and points you at 'agents
421
606
  artifacts share update' (RUSH-2449) rather than returning a wrong or empty result
422
607
  — see 'agents artifacts share status' for whether an update is due.
608
+
609
+ --agent/--session/--label-contains filter the fetched listing client-side; --json's
610
+ count reflects the filtered set.
611
+ `,
612
+ });
613
+ const shareRevisionsCmd = shareCmd
614
+ .command('revisions <target>')
615
+ .description('Show the retained prior versions of a published slug, newest first (human table; --revisions-json for scripts).')
616
+ // Named --for-user / --revisions-json, not --github-user / --json: `share
617
+ // <file>` (the parent) already owns both those long names, and commander's
618
+ // argv scanner resolves an option name against the WHOLE ancestor chain —
619
+ // a same-named child option is silently dropped even when it parses alone
620
+ // (verified with a real program.parseAsync(), see share.test.ts). Unlike
621
+ // `list`'s pre-existing --json/--github-user collision (RUSH-2687, left
622
+ // as a tracked follow-up because it predates this diff), `revisions` is
623
+ // brand-new here, so it gets non-colliding names from the start instead
624
+ // of shipping a silently-broken flag.
625
+ .option('--for-user <user>', 'GitHub username for resolving a bare-slug target (default: resolved from gh/git config)')
626
+ .option('--revisions-json', 'emit the machine-readable revision list')
627
+ .action(async (target, opts) => {
628
+ try {
629
+ const result = await runShareRevisions(target, { githubUser: opts.forUser });
630
+ console.log(formatShareRevisions(result, Boolean(opts.revisionsJson)));
631
+ }
632
+ catch (e) {
633
+ console.error(chalk.red(e.message));
634
+ process.exitCode = 1;
635
+ }
636
+ });
637
+ setHelpSections(shareRevisionsCmd, {
638
+ examples: `
639
+ # Prior versions kept under this slug (bare slug — your own namespace)
640
+ agents artifacts share revisions q3-report
641
+
642
+ # By <user>/<slug> or full URL, same target forms as 'agents unshare'
643
+ agents artifacts share revisions octocat/q3-report
644
+ agents artifacts share revisions https://share.agents-cli.sh/octocat/q3-report
645
+
646
+ # Machine-readable, and a bare slug resolved against another namespace
647
+ agents artifacts share revisions q3-report --revisions-json
648
+ agents artifacts share revisions q3-report --for-user octocat
649
+ `,
650
+ notes: `
651
+ A revision is created automatically on every republish of an existing slug
652
+ (pass --no-revision at publish time to skip it) — this is history, never
653
+ shown on the public gallery or in 'agents artifacts share list' beyond its
654
+ count. Each revision's own URL is still directly reachable and honors its own
655
+ recorded expiry.
423
656
  `,
424
657
  });
425
658
  shareCmd
@@ -521,7 +754,7 @@ export async function runShareProvision(opts) {
521
754
  storeWriteToken(token);
522
755
  console.log(chalk.green(`\nShare endpoint ready → ${chalk.bold(baseUrl)}`));
523
756
  console.log(chalk.dim('Publish with: ') + chalk.cyan('agents artifacts share <file>'));
524
- console.log(chalk.dim(`Fleet: push the token with 'agents secrets export share --host <box>' and pull config with 'agents repo pull'.`));
757
+ console.log(chalk.dim(`Fleet: push the token with 'agents secrets export share --device <box>' and pull config with 'agents repo pull'.`));
525
758
  }
526
759
  catch (e) {
527
760
  spin.fail('Provisioning failed');
@@ -7,8 +7,8 @@ import { select, checkbox } from '@inquirer/prompts';
7
7
  import { AGENTS, resolveAgentName, formatAgentError, agentLabel, } from '../lib/agents.js';
8
8
  import { capableAgents } from '../lib/capabilities.js';
9
9
  import { cloneRepo } from '../lib/git.js';
10
- import { discoverSkillsFromRepo, installSkillCentrally, listInstalledSkills, listInstalledSkillsWithScope, getSkillInfo, getSkillRules, getSkillsDir, countSkillFiles, tryParseSkillMetadata, diffVersionSkills, iterSkillsCapableVersions, removeSkillFromVersion, } from '../lib/skills.js';
11
- import { getGlobalDefault, syncResourcesToVersion, promptAgentVersionSelection, getVersionHomePath, } from '../lib/versions.js';
10
+ import { discoverSkillsFromRepo, installSkillCentrally, listInstalledSkills, listInstalledSkillsWithScope, getSkillInfo, getSkillRules, getSkillsDir, countSkillFiles, tryParseSkillMetadata, diffVersionSkills, iterSkillsCapableVersions, removeSkillFromVersion, } from '../lib/plugins/skills.js';
11
+ import { getGlobalDefault, syncResourcesToVersion, promptAgentVersionSelection, getVersionHomePath, } from '../lib/installations/versions.js';
12
12
  import { recordVersionResources } from '../lib/state.js';
13
13
  import { isPromptCancelled, isInteractiveTerminal, parseCommaSeparatedList, printWithPager, requireInteractiveSelection, resolveAgentTargetsAutoInstalling, promptRemovalTargets, resolveListFilterOrExit, } from './utils.js';
14
14
  import { showResourceList, buildTargetsSection, } from './resource-view.js';
@@ -180,7 +180,7 @@ Examples:
180
180
  const skillMdPath = path.join(localPath, 'SKILL.md');
181
181
  if (fs.existsSync(skillMdPath)) {
182
182
  const skillName = path.basename(localPath);
183
- const { validateSkillMetadata, countSkillRules } = await import('../lib/skills.js');
183
+ const { validateSkillMetadata, countSkillRules } = await import('../lib/plugins/skills.js');
184
184
  const parseResult = tryParseSkillMetadata(localPath);
185
185
  const validation = validateSkillMetadata(parseResult.metadata, skillName);
186
186
  // Warn if YAML is invalid
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `agents snapshot` — one-process consumer snapshot for pollers.
2
+ * `agents devices snapshot` — one-process consumer snapshot for pollers.
3
3
  *
4
4
  * Replaces the N× `view --json` + `sessions --active --json` (+ optional feed)
5
5
  * fork storm with a single command. Does NOT replace `agents status`, which
@@ -8,4 +8,4 @@
8
8
  * JSON shape: {@link FleetSnapshot} in `lib/snapshot.ts` (version: 1).
9
9
  */
10
10
  import type { Command } from 'commander';
11
- export declare function registerSnapshotCommand(program: Command): void;
11
+ export declare function registerSnapshotCommand(devicesCmd: Command): void;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `agents snapshot` — one-process consumer snapshot for pollers.
2
+ * `agents devices snapshot` — one-process consumer snapshot for pollers.
3
3
  *
4
4
  * Replaces the N× `view --json` + `sessions --active --json` (+ optional feed)
5
5
  * fork storm with a single command. Does NOT replace `agents status`, which
@@ -59,11 +59,11 @@ function renderHuman(snap) {
59
59
  : 'system ok';
60
60
  console.log(` ${'Sync'.padEnd(12)} ${sys} · ${need} version${need === 1 ? '' : 's'} need sync`);
61
61
  }
62
- console.log(chalk.gray('\n Machine-readable: agents snapshot --json\n' +
62
+ console.log(chalk.gray('\n Machine-readable: agents devices snapshot --json\n' +
63
63
  ' Sync-only (unchanged): agents status --json'));
64
64
  }
65
- export function registerSnapshotCommand(program) {
66
- const cmd = addHostOption(program
65
+ export function registerSnapshotCommand(devicesCmd) {
66
+ const cmd = addHostOption(devicesCmd
67
67
  .command('snapshot')
68
68
  .description('One-process poll snapshot: install inventory + active sessions (optional feed/sync). Not the sync-status command — use `agents status` for drift.'))
69
69
  .option('--json', 'Emit the machine-readable FleetSnapshot contract (version 1)')
@@ -74,19 +74,19 @@ export function registerSnapshotCommand(program) {
74
74
  setHelpSections(cmd, {
75
75
  examples: `
76
76
  # One-shot inventory + local active sessions (JSON)
77
- agents snapshot --json
77
+ agents devices snapshot --json
78
78
 
79
79
  # Same, plus open feed blocks for needs-you polls
80
- agents snapshot --json --with-feed
80
+ agents devices snapshot --json --with-feed
81
81
 
82
82
  # Fleet-wide active sessions (matches sessions --active scope)
83
- agents snapshot --json --all-hosts
83
+ agents devices snapshot --json --all-hosts
84
84
 
85
85
  # Inventory for one harness only (an AGI EXT-style usage poll)
86
- agents snapshot --json --agent claude
86
+ agents devices snapshot --json --agent claude
87
87
 
88
88
  # Run the whole snapshot on another device
89
- agents snapshot --json --host yosemite-s0
89
+ agents devices snapshot --json --device yosemite-s0
90
90
  `,
91
91
  });
92
92
  cmd.action(async (opts, command) => {
@@ -7,7 +7,7 @@
7
7
  * (offline → fail fast instead of a 2-minute hang), platform-aware exec
8
8
  * (PowerShell on Windows), and password-from-bundle auth via an askpass shim.
9
9
  * Rendering the registry to an ssh_config include also lets plain ssh / scp /
10
- * rsync / `agents sessions --host` resolve the same logical names.
10
+ * rsync / `agents sessions --device` resolve the same logical names.
11
11
  */
12
12
  import type { Command } from 'commander';
13
13
  import { type FanOutDeviceTarget } from '../lib/devices/fleet.js';