@phnx-labs/agents-cli 1.22.34 → 1.22.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (493) hide show
  1. package/CHANGELOG.md +672 -2
  2. package/README.md +82 -35
  3. package/dist/bin/agents +0 -0
  4. package/dist/bootstrap.d.ts +15 -0
  5. package/dist/bootstrap.js +1211 -0
  6. package/dist/commands/accounts.d.ts +4 -11
  7. package/dist/commands/accounts.js +159 -27
  8. package/dist/commands/attach.js +17 -4
  9. package/dist/commands/audit.d.ts +8 -8
  10. package/dist/commands/audit.js +57 -47
  11. package/dist/commands/browser.js +15 -11
  12. package/dist/commands/cloud.js +1 -1
  13. package/dist/commands/commands.js +0 -11
  14. package/dist/commands/computer-actions.js +33 -0
  15. package/dist/commands/computer-sessions-picker.d.ts +21 -0
  16. package/dist/commands/computer-sessions-picker.js +141 -0
  17. package/dist/commands/computer.d.ts +16 -0
  18. package/dist/commands/computer.js +37 -0
  19. package/dist/commands/config.d.ts +17 -0
  20. package/dist/commands/config.js +401 -0
  21. package/dist/commands/cp.d.ts +84 -0
  22. package/dist/commands/cp.js +231 -0
  23. package/dist/commands/daemon.js +243 -14
  24. package/dist/commands/detach-core.d.ts +1 -1
  25. package/dist/commands/detach-core.js +12 -2
  26. package/dist/commands/detach.js +1 -1
  27. package/dist/commands/doctor.js +64 -5
  28. package/dist/commands/events.d.ts +24 -12
  29. package/dist/commands/events.js +144 -28
  30. package/dist/commands/exec.js +85 -41
  31. package/dist/commands/feed.d.ts +1 -1
  32. package/dist/commands/feed.js +16 -8
  33. package/dist/commands/focus.d.ts +33 -1
  34. package/dist/commands/focus.js +177 -17
  35. package/dist/commands/funnel.d.ts +1 -1
  36. package/dist/commands/go.js +9 -8
  37. package/dist/commands/harness-wizard.d.ts +1 -0
  38. package/dist/commands/harness-wizard.js +18 -20
  39. package/dist/commands/harness.d.ts +2 -0
  40. package/dist/commands/harness.js +59 -26
  41. package/dist/commands/hooks.js +0 -11
  42. package/dist/commands/inspect.d.ts +94 -1
  43. package/dist/commands/inspect.js +866 -40
  44. package/dist/commands/lease.d.ts +4 -4
  45. package/dist/commands/lease.js +6 -6
  46. package/dist/commands/login.js +0 -13
  47. package/dist/commands/logs.d.ts +2 -2
  48. package/dist/commands/logs.js +2 -2
  49. package/dist/commands/mcp.js +7 -2
  50. package/dist/commands/memory.js +7 -2
  51. package/dist/commands/message.d.ts +1 -1
  52. package/dist/commands/message.js +37 -6
  53. package/dist/commands/models.js +4 -0
  54. package/dist/commands/monitors.d.ts +0 -1
  55. package/dist/commands/monitors.js +199 -16
  56. package/dist/commands/open.d.ts +18 -0
  57. package/dist/commands/open.js +57 -0
  58. package/dist/commands/packages.js +2 -107
  59. package/dist/commands/plugins.js +6 -3
  60. package/dist/commands/profiles.d.ts +1 -0
  61. package/dist/commands/profiles.js +16 -160
  62. package/dist/commands/projects.d.ts +28 -0
  63. package/dist/commands/projects.js +125 -5
  64. package/dist/commands/reconnect.js +9 -3
  65. package/dist/commands/repo.js +42 -1
  66. package/dist/commands/resource-view.d.ts +17 -0
  67. package/dist/commands/resource-view.js +36 -14
  68. package/dist/commands/resume.js +9 -2
  69. package/dist/commands/routines.d.ts +0 -2
  70. package/dist/commands/routines.js +473 -289
  71. package/dist/commands/secrets.js +52 -9
  72. package/dist/commands/sessions-export.d.ts +47 -0
  73. package/dist/commands/sessions-export.js +116 -6
  74. package/dist/commands/sessions-import.d.ts +17 -0
  75. package/dist/commands/sessions-import.js +114 -6
  76. package/dist/commands/sessions-migrate.d.ts +27 -0
  77. package/dist/commands/sessions-migrate.js +50 -9
  78. package/dist/commands/sessions-picker.js +23 -4
  79. package/dist/commands/sessions-resume.d.ts +5 -3
  80. package/dist/commands/sessions-resume.js +30 -8
  81. package/dist/commands/sessions-watch.d.ts +2 -0
  82. package/dist/commands/sessions-watch.js +53 -0
  83. package/dist/commands/sessions.d.ts +66 -3
  84. package/dist/commands/sessions.js +298 -47
  85. package/dist/commands/set.d.ts +1 -1
  86. package/dist/commands/set.js +2 -2
  87. package/dist/commands/setup-browser.js +2 -2
  88. package/dist/commands/setup-mine.js +0 -1
  89. package/dist/commands/setup-preferences.js +1 -1
  90. package/dist/commands/setup-share.js +34 -4
  91. package/dist/commands/setup.d.ts +5 -0
  92. package/dist/commands/setup.js +26 -0
  93. package/dist/commands/share.d.ts +85 -0
  94. package/dist/commands/share.js +379 -8
  95. package/dist/commands/skills.js +0 -11
  96. package/dist/commands/snapshot.js +1 -1
  97. package/dist/commands/ssh.d.ts +18 -0
  98. package/dist/commands/ssh.js +549 -210
  99. package/dist/commands/sync.d.ts +5 -0
  100. package/dist/commands/sync.js +212 -32
  101. package/dist/commands/teams.d.ts +13 -0
  102. package/dist/commands/teams.js +187 -30
  103. package/dist/commands/tickets.d.ts +2 -0
  104. package/dist/commands/tickets.js +43 -0
  105. package/dist/commands/update.js +2 -4
  106. package/dist/commands/usage.js +5 -3
  107. package/dist/commands/versions.js +11 -5
  108. package/dist/commands/view.js +15 -7
  109. package/dist/commands/webhook.d.ts +2 -2
  110. package/dist/commands/webhook.js +7 -7
  111. package/dist/index.d.ts +18 -2
  112. package/dist/index.js +53 -1264
  113. package/dist/lib/account-catalog.d.ts +18 -0
  114. package/dist/lib/account-catalog.js +38 -0
  115. package/dist/lib/account-provider-registry.d.ts +18 -0
  116. package/dist/lib/account-provider-registry.js +59 -0
  117. package/dist/lib/account-registry.d.ts +40 -0
  118. package/dist/lib/account-registry.js +239 -0
  119. package/dist/lib/account-schema.d.ts +44 -0
  120. package/dist/lib/account-schema.js +91 -0
  121. package/dist/lib/account-state-service.d.ts +21 -0
  122. package/dist/lib/account-state-service.js +60 -0
  123. package/dist/lib/activity.d.ts +1 -1
  124. package/dist/lib/activity.js +8 -1
  125. package/dist/lib/add-dir.d.ts +80 -0
  126. package/dist/lib/add-dir.js +241 -0
  127. package/dist/lib/agent-cli-commands.d.ts +11 -0
  128. package/dist/lib/agent-cli-commands.js +30 -0
  129. package/dist/lib/agents.js +44 -36
  130. package/dist/lib/answer-router.js +1 -1
  131. package/dist/lib/audit/log.d.ts +10 -27
  132. package/dist/lib/audit/log.js +20 -33
  133. package/dist/lib/auth-health.d.ts +9 -2
  134. package/dist/lib/auth-health.js +42 -9
  135. package/dist/lib/auto-pull-worker.js +7 -3
  136. package/dist/lib/auto-pull.d.ts +44 -3
  137. package/dist/lib/auto-pull.js +88 -5
  138. package/dist/lib/binary-shadow.d.ts +28 -0
  139. package/dist/lib/binary-shadow.js +121 -0
  140. package/dist/lib/brand.js +9 -3
  141. package/dist/lib/browser/ipc.d.ts +30 -0
  142. package/dist/lib/browser/ipc.js +81 -4
  143. package/dist/lib/browser/profiles.d.ts +3 -2
  144. package/dist/lib/browser/profiles.js +65 -22
  145. package/dist/lib/browser/service.d.ts +4 -0
  146. package/dist/lib/browser/service.js +30 -3
  147. package/dist/lib/browser/sessions-list.d.ts +22 -2
  148. package/dist/lib/browser/sessions-list.js +54 -6
  149. package/dist/lib/browser/stream.d.ts +2 -0
  150. package/dist/lib/browser/stream.js +1 -0
  151. package/dist/lib/browser/types.d.ts +19 -0
  152. package/dist/lib/byok-usage.d.ts +9 -2
  153. package/dist/lib/byok-usage.js +133 -31
  154. package/dist/lib/cli-entry.d.ts +11 -0
  155. package/dist/lib/cli-entry.js +46 -0
  156. package/dist/lib/cloud/host.d.ts +1 -1
  157. package/dist/lib/cloud/host.js +2 -2
  158. package/dist/lib/cloud/registry.js +1 -1
  159. package/dist/lib/cloud/types.d.ts +1 -1
  160. package/dist/lib/codex-policy.d.ts +9 -1
  161. package/dist/lib/codex-policy.js +17 -2
  162. package/dist/lib/commands.d.ts +2 -0
  163. package/dist/lib/commands.js +2 -0
  164. package/dist/lib/computer/sessions-list.d.ts +150 -0
  165. package/dist/lib/computer/sessions-list.js +363 -0
  166. package/dist/lib/config-keys.d.ts +86 -0
  167. package/dist/lib/config-keys.js +193 -0
  168. package/dist/lib/config-machine-keys.d.ts +12 -0
  169. package/dist/lib/config-machine-keys.js +17 -0
  170. package/dist/lib/config-transfer.js +3 -4
  171. package/dist/lib/crabbox/cli.d.ts +2 -2
  172. package/dist/lib/crabbox/cli.js +3 -3
  173. package/dist/lib/daemon-health.d.ts +22 -0
  174. package/dist/lib/daemon-health.js +33 -3
  175. package/dist/lib/daemon-services.d.ts +50 -0
  176. package/dist/lib/daemon-services.js +147 -0
  177. package/dist/lib/daemon-ticks.d.ts +35 -66
  178. package/dist/lib/daemon-ticks.js +77 -159
  179. package/dist/lib/daemon.d.ts +72 -4
  180. package/dist/lib/daemon.js +792 -202
  181. package/dist/lib/deeplink/register.d.ts +49 -0
  182. package/dist/lib/deeplink/register.js +253 -0
  183. package/dist/lib/deeplink/url.d.ts +34 -0
  184. package/dist/lib/deeplink/url.js +78 -0
  185. package/dist/lib/device-config.d.ts +124 -29
  186. package/dist/lib/device-config.js +346 -141
  187. package/dist/lib/devices/config-migration.d.ts +42 -0
  188. package/dist/lib/devices/config-migration.js +203 -0
  189. package/dist/lib/devices/connect.js +14 -7
  190. package/dist/lib/devices/doctor-findings.d.ts +4 -1
  191. package/dist/lib/devices/doctor-findings.js +20 -1
  192. package/dist/lib/devices/harness-inventory.d.ts +11 -2
  193. package/dist/lib/devices/harness-inventory.js +0 -0
  194. package/dist/lib/devices/health.d.ts +1 -1
  195. package/dist/lib/devices/health.js +1 -1
  196. package/dist/lib/devices/pending.d.ts +22 -1
  197. package/dist/lib/devices/pending.js +67 -2
  198. package/dist/lib/devices/registry.d.ts +0 -25
  199. package/dist/lib/devices/registry.js +2 -83
  200. package/dist/lib/devices/resolve-profile.d.ts +20 -0
  201. package/dist/lib/devices/resolve-profile.js +44 -0
  202. package/dist/lib/devices/rollout-verify.d.ts +101 -0
  203. package/dist/lib/devices/rollout-verify.js +193 -0
  204. package/dist/lib/devices/ssh-config.js +10 -6
  205. package/dist/lib/event-families.d.ts +28 -0
  206. package/dist/lib/event-families.js +159 -0
  207. package/dist/lib/event-stream.d.ts +9 -1
  208. package/dist/lib/event-stream.js +26 -9
  209. package/dist/lib/events.d.ts +9 -1
  210. package/dist/lib/events.js +21 -6
  211. package/dist/lib/exec.d.ts +30 -0
  212. package/dist/lib/exec.js +220 -122
  213. package/dist/lib/feed-broadcast.d.ts +25 -0
  214. package/dist/lib/feed-broadcast.js +33 -0
  215. package/dist/lib/feed.d.ts +1 -1
  216. package/dist/lib/feed.js +12 -2
  217. package/dist/lib/fleet/capture.js +15 -0
  218. package/dist/lib/fleet/manifest.js +9 -0
  219. package/dist/lib/fleet/types.d.ts +9 -0
  220. package/dist/lib/fleet-status.js +10 -8
  221. package/dist/lib/git.d.ts +20 -6
  222. package/dist/lib/git.js +121 -17
  223. package/dist/lib/hosts/dispatch.d.ts +8 -3
  224. package/dist/lib/hosts/dispatch.js +29 -3
  225. package/dist/lib/hosts/logs.d.ts +2 -2
  226. package/dist/lib/hosts/logs.js +2 -2
  227. package/dist/lib/hosts/option.js +1 -1
  228. package/dist/lib/hosts/passthrough.d.ts +2 -3
  229. package/dist/lib/hosts/passthrough.js +10 -24
  230. package/dist/lib/hosts/progress.js +2 -2
  231. package/dist/lib/hosts/providers/devices.d.ts +3 -3
  232. package/dist/lib/hosts/providers/devices.js +18 -12
  233. package/dist/lib/hosts/ready.d.ts +5 -1
  234. package/dist/lib/hosts/ready.js +9 -3
  235. package/dist/lib/hosts/reconcile.d.ts +2 -2
  236. package/dist/lib/hosts/reconcile.js +2 -2
  237. package/dist/lib/hosts/registry.js +14 -9
  238. package/dist/lib/hosts/remote-cmd.js +1 -1
  239. package/dist/lib/hosts/remote-os.d.ts +9 -6
  240. package/dist/lib/hosts/remote-os.js +13 -6
  241. package/dist/lib/hosts/routing-flag.d.ts +23 -0
  242. package/dist/lib/hosts/routing-flag.js +41 -0
  243. package/dist/lib/hosts/run-target.js +1 -1
  244. package/dist/lib/hosts/session-index.js +1 -1
  245. package/dist/lib/hosts/tasks.d.ts +6 -6
  246. package/dist/lib/hosts/tasks.js +4 -4
  247. package/dist/lib/hosts/types.js +1 -2
  248. package/dist/lib/installations/resolve.js +2 -8
  249. package/dist/lib/isolation-boundary-report.js +0 -1
  250. package/dist/lib/linear-cache.d.ts +7 -0
  251. package/dist/lib/linear-cache.js +31 -4
  252. package/dist/lib/linear-project-counts.d.ts +1 -1
  253. package/dist/lib/linear-project-counts.js +2 -3
  254. package/dist/lib/linear-projects.js +1 -1
  255. package/dist/lib/loop.d.ts +2 -2
  256. package/dist/lib/loop.js +1 -1
  257. package/dist/lib/mailbox-target.d.ts +1 -1
  258. package/dist/lib/mailbox-target.js +1 -1
  259. package/dist/lib/manifest.js +7 -4
  260. package/dist/lib/menubar/MenubarHelper.app/Contents/CodeResources +0 -0
  261. package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
  262. package/dist/lib/menubar/snapshot.d.ts +3 -2
  263. package/dist/lib/menubar/snapshot.js +6 -2
  264. package/dist/lib/migrate-fold.d.ts +33 -0
  265. package/dist/lib/migrate-fold.js +130 -0
  266. package/dist/lib/migrate.d.ts +34 -34
  267. package/dist/lib/migrate.js +106 -128
  268. package/dist/lib/model-tier-overrides.d.ts +1 -1
  269. package/dist/lib/model-tier-overrides.js +15 -2
  270. package/dist/lib/monitors/config.d.ts +17 -3
  271. package/dist/lib/monitors/config.js +52 -18
  272. package/dist/lib/monitors/engine.d.ts +32 -1
  273. package/dist/lib/monitors/engine.js +94 -11
  274. package/dist/lib/monitors/fingerprint.d.ts +46 -0
  275. package/dist/lib/monitors/fingerprint.js +100 -0
  276. package/dist/lib/monitors/remote.d.ts +47 -0
  277. package/dist/lib/monitors/remote.js +81 -0
  278. package/dist/lib/monitors/state.d.ts +39 -0
  279. package/dist/lib/monitors/state.js +56 -0
  280. package/dist/lib/onepassword.d.ts +17 -0
  281. package/dist/lib/onepassword.js +52 -22
  282. package/dist/lib/open-url.js +1 -1
  283. package/dist/lib/picker.d.ts +14 -2
  284. package/dist/lib/picker.js +35 -13
  285. package/dist/lib/placement.d.ts +1 -1
  286. package/dist/lib/placement.js +1 -1
  287. package/dist/lib/pr-land-detach.d.ts +32 -0
  288. package/dist/lib/pr-land-detach.js +79 -0
  289. package/dist/lib/profiles-presets.js +13 -0
  290. package/dist/lib/profiles.d.ts +2 -0
  291. package/dist/lib/profiles.js +44 -1
  292. package/dist/lib/project-focus.d.ts +1 -1
  293. package/dist/lib/project-focus.js +1 -1
  294. package/dist/lib/project-key.d.ts +17 -0
  295. package/dist/lib/project-key.js +26 -0
  296. package/dist/lib/project-probe.d.ts +4 -1
  297. package/dist/lib/project-probe.js +5 -4
  298. package/dist/lib/project-resources.js +2 -18
  299. package/dist/lib/project-root.d.ts +16 -0
  300. package/dist/lib/project-root.js +20 -2
  301. package/dist/lib/projects.d.ts +20 -1
  302. package/dist/lib/projects.js +78 -1
  303. package/dist/lib/refresh-coordinator.d.ts +24 -0
  304. package/dist/lib/refresh-coordinator.js +52 -0
  305. package/dist/lib/registry.d.ts +2 -2
  306. package/dist/lib/registry.js +1 -1
  307. package/dist/lib/resource-aliases.d.ts +13 -0
  308. package/dist/lib/resource-aliases.js +26 -0
  309. package/dist/lib/resources/types.d.ts +1 -1
  310. package/dist/lib/resources.d.ts +16 -0
  311. package/dist/lib/resources.js +66 -10
  312. package/dist/lib/rotate.d.ts +3 -4
  313. package/dist/lib/rotate.js +4 -5
  314. package/dist/lib/routine-activation.d.ts +22 -2
  315. package/dist/lib/routine-activation.js +63 -16
  316. package/dist/lib/routine-context.d.ts +9 -2
  317. package/dist/lib/routine-context.js +21 -6
  318. package/dist/lib/routines-project.d.ts +58 -48
  319. package/dist/lib/routines-project.js +190 -159
  320. package/dist/lib/routines.d.ts +41 -6
  321. package/dist/lib/routines.js +92 -34
  322. package/dist/lib/run-defaults.d.ts +5 -0
  323. package/dist/lib/run-defaults.js +11 -1
  324. package/dist/lib/runner.d.ts +10 -8
  325. package/dist/lib/runner.js +122 -39
  326. package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
  327. package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
  328. package/dist/lib/secrets/agent.d.ts +10 -3
  329. package/dist/lib/secrets/agent.js +43 -8
  330. package/dist/lib/secrets/bundles.d.ts +1 -0
  331. package/dist/lib/secrets/bundles.js +92 -80
  332. package/dist/lib/secrets/index.js +32 -9
  333. package/dist/lib/secrets/install-helper.d.ts +4 -4
  334. package/dist/lib/secrets/install-helper.js +4 -4
  335. package/dist/lib/secrets/push.d.ts +40 -6
  336. package/dist/lib/secrets/push.js +58 -11
  337. package/dist/lib/secrets/read-backoff.d.ts +1 -1
  338. package/dist/lib/secrets/read-backoff.js +1 -1
  339. package/dist/lib/secrets/remote.d.ts +24 -0
  340. package/dist/lib/secrets/remote.js +54 -4
  341. package/dist/lib/self-update.d.ts +108 -0
  342. package/dist/lib/self-update.js +276 -1
  343. package/dist/lib/session/active.d.ts +89 -5
  344. package/dist/lib/session/active.js +165 -10
  345. package/dist/lib/session/actor-sidecar.d.ts +1 -1
  346. package/dist/lib/session/actor-sidecar.js +2 -1
  347. package/dist/lib/session/db.d.ts +176 -2
  348. package/dist/lib/session/db.js +484 -17
  349. package/dist/lib/session/discover.js +27 -4
  350. package/dist/lib/session/hook-sessions.js +2 -2
  351. package/dist/lib/session/host-link.d.ts +2 -2
  352. package/dist/lib/session/host-link.js +2 -2
  353. package/dist/lib/session/pid-registry.d.ts +21 -0
  354. package/dist/lib/session/pid-registry.js +57 -0
  355. package/dist/lib/session/remote-active.js +15 -1
  356. package/dist/lib/session/remote.js +2 -2
  357. package/dist/lib/session/session-cache.d.ts +14 -7
  358. package/dist/lib/session/session-cache.js +51 -9
  359. package/dist/lib/session/state.d.ts +2 -2
  360. package/dist/lib/session/state.js +1 -1
  361. package/dist/lib/session/sync/config.d.ts +10 -10
  362. package/dist/lib/session/sync/config.js +10 -10
  363. package/dist/lib/session/sync/r2.d.ts +34 -0
  364. package/dist/lib/session/sync/r2.js +123 -0
  365. package/dist/lib/session/throughput.d.ts +1 -1
  366. package/dist/lib/session/throughput.js +1 -1
  367. package/dist/lib/session/types.d.ts +23 -1
  368. package/dist/lib/session/types.js +15 -0
  369. package/dist/lib/session/viewing-in.d.ts +1 -1
  370. package/dist/lib/session/viewing-in.js +1 -1
  371. package/dist/lib/session/watch.d.ts +101 -0
  372. package/dist/lib/session/watch.js +242 -0
  373. package/dist/lib/share/config.d.ts +4 -0
  374. package/dist/lib/share/config.js +1 -0
  375. package/dist/lib/share/delete.d.ts +93 -0
  376. package/dist/lib/share/delete.js +127 -0
  377. package/dist/lib/share/provision.d.ts +38 -0
  378. package/dist/lib/share/provision.js +50 -0
  379. package/dist/lib/share/publish.d.ts +40 -1
  380. package/dist/lib/share/publish.js +116 -3
  381. package/dist/lib/share/worker-template.js +71 -6
  382. package/dist/lib/shims.d.ts +17 -3
  383. package/dist/lib/shims.js +136 -27
  384. package/dist/lib/signin-badge.js +3 -2
  385. package/dist/lib/skills.js +2 -0
  386. package/dist/lib/smart-launch.d.ts +8 -8
  387. package/dist/lib/smart-launch.js +80 -59
  388. package/dist/lib/ssh-exec.d.ts +1 -1
  389. package/dist/lib/ssh-exec.js +1 -1
  390. package/dist/lib/staleness/prune.d.ts +88 -0
  391. package/dist/lib/staleness/prune.js +69 -0
  392. package/dist/lib/staleness/registry.d.ts +1 -1
  393. package/dist/lib/staleness/writers/commands.js +34 -2
  394. package/dist/lib/staleness/writers/hooks.js +16 -0
  395. package/dist/lib/staleness/writers/kinds.d.ts +6 -0
  396. package/dist/lib/staleness/writers/skills.js +19 -0
  397. package/dist/lib/staleness/writers/subagents.d.ts +2 -3
  398. package/dist/lib/staleness/writers/subagents.js +0 -4
  399. package/dist/lib/staleness/writers/types.d.ts +32 -0
  400. package/dist/lib/startup/command-registry.d.ts +6 -12
  401. package/dist/lib/startup/command-registry.js +14 -31
  402. package/dist/lib/startup/dev-build.d.ts +10 -0
  403. package/dist/lib/startup/dev-build.js +13 -1
  404. package/dist/lib/startup/spellcheck.d.ts +18 -0
  405. package/dist/lib/startup/spellcheck.js +45 -0
  406. package/dist/lib/state.d.ts +36 -9
  407. package/dist/lib/state.js +96 -46
  408. package/dist/lib/subagents-registry.d.ts +0 -7
  409. package/dist/lib/subagents-registry.js +38 -65
  410. package/dist/lib/subagents.d.ts +0 -33
  411. package/dist/lib/subagents.js +0 -75
  412. package/dist/lib/sync-umbrella.js +1 -1
  413. package/dist/lib/teams/agents.d.ts +41 -1
  414. package/dist/lib/teams/agents.js +187 -9
  415. package/dist/lib/teams/api.d.ts +11 -1
  416. package/dist/lib/teams/api.js +11 -2
  417. package/dist/lib/teams/delivery.d.ts +41 -0
  418. package/dist/lib/teams/delivery.js +60 -0
  419. package/dist/lib/teams/registry.d.ts +14 -0
  420. package/dist/lib/teams/registry.js +51 -1
  421. package/dist/lib/teams/remoteWorktree.d.ts +19 -0
  422. package/dist/lib/teams/remoteWorktree.js +29 -0
  423. package/dist/lib/teams/scheduler.d.ts +1 -1
  424. package/dist/lib/teams/scheduler.js +1 -1
  425. package/dist/lib/teams/worktree.d.ts +24 -0
  426. package/dist/lib/teams/worktree.js +42 -0
  427. package/dist/lib/terminal/backends/vscodium-agent.d.ts +10 -1
  428. package/dist/lib/terminal/backends/vscodium-agent.js +16 -5
  429. package/dist/lib/terminal/engine.d.ts +4 -0
  430. package/dist/lib/terminal/engine.js +8 -2
  431. package/dist/lib/terminal/types.d.ts +21 -2
  432. package/dist/lib/testdata/refresh-coordinator-worker.d.ts +1 -0
  433. package/dist/lib/testdata/refresh-coordinator-worker.js +23 -0
  434. package/dist/lib/tickets/list.d.ts +53 -0
  435. package/dist/lib/tickets/list.js +153 -0
  436. package/dist/lib/tmux/orphan-reap.d.ts +320 -0
  437. package/dist/lib/tmux/orphan-reap.js +644 -0
  438. package/dist/lib/tmux/session.d.ts +68 -3
  439. package/dist/lib/tmux/session.js +95 -5
  440. package/dist/lib/triggers/handlers.d.ts +20 -0
  441. package/dist/lib/triggers/handlers.js +6 -1
  442. package/dist/lib/types.d.ts +46 -34
  443. package/dist/lib/usage-fleet.d.ts +32 -0
  444. package/dist/lib/usage-fleet.js +125 -0
  445. package/dist/lib/usage-refresh.d.ts +3 -3
  446. package/dist/lib/usage-refresh.js +19 -16
  447. package/dist/lib/usage.d.ts +51 -47
  448. package/dist/lib/usage.js +145 -153
  449. package/dist/lib/version-duplicates.js +2 -2
  450. package/dist/lib/versions.d.ts +56 -13
  451. package/dist/lib/versions.js +195 -45
  452. package/dist/lib/watchdog/log.d.ts +1 -1
  453. package/dist/lib/watchdog/log.js +3 -3
  454. package/dist/lib/watchdog/rotate.d.ts +6 -6
  455. package/dist/lib/watchdog/rotate.js +6 -6
  456. package/dist/lib/workflows.d.ts +1 -1
  457. package/dist/lib/yaml-io.d.ts +47 -0
  458. package/dist/lib/yaml-io.js +55 -0
  459. package/package.json +2 -1
  460. package/scripts/install-helper.js +2 -2
  461. package/scripts/postinstall.js +23 -20
  462. package/dist/commands/defaults.d.ts +0 -7
  463. package/dist/commands/defaults.js +0 -107
  464. package/dist/commands/export.d.ts +0 -11
  465. package/dist/commands/export.js +0 -215
  466. package/dist/commands/helper.d.ts +0 -12
  467. package/dist/commands/helper.js +0 -87
  468. package/dist/commands/hosts.d.ts +0 -11
  469. package/dist/commands/hosts.js +0 -330
  470. package/dist/commands/lock.d.ts +0 -12
  471. package/dist/commands/lock.js +0 -70
  472. package/dist/commands/pull.d.ts +0 -17
  473. package/dist/commands/pull.js +0 -39
  474. package/dist/commands/push.d.ts +0 -14
  475. package/dist/commands/push.js +0 -30
  476. package/dist/commands/wallet.d.ts +0 -20
  477. package/dist/commands/wallet.js +0 -216
  478. package/dist/commands/worktree.d.ts +0 -19
  479. package/dist/commands/worktree.js +0 -272
  480. package/dist/lib/account-labels.d.ts +0 -24
  481. package/dist/lib/account-labels.js +0 -72
  482. package/dist/lib/auto-dispatch-linear.d.ts +0 -18
  483. package/dist/lib/auto-dispatch-linear.js +0 -107
  484. package/dist/lib/auto-dispatch-provider.d.ts +0 -10
  485. package/dist/lib/auto-dispatch-provider.js +0 -30
  486. package/dist/lib/auto-dispatch.d.ts +0 -93
  487. package/dist/lib/auto-dispatch.js +0 -128
  488. package/dist/lib/export.d.ts +0 -72
  489. package/dist/lib/export.js +0 -269
  490. package/dist/lib/lock.d.ts +0 -93
  491. package/dist/lib/lock.js +0 -207
  492. package/dist/lib/wallet/index.d.ts +0 -78
  493. package/dist/lib/wallet/index.js +0 -253
@@ -0,0 +1,57 @@
1
+ import chalk from 'chalk';
2
+ import { parseAgentsUrl } from '../lib/deeplink/url.js';
3
+ import { registerAgentsUrlScheme, unregisterAgentsUrlScheme, agentsUrlSchemeStatus, } from '../lib/deeplink/register.js';
4
+ export function registerOpenCommand(program) {
5
+ const open = program
6
+ .command('open [url]')
7
+ .description('Resume a session from an agents:// deep link, or register/unregister/status the OS URL-scheme handler.')
8
+ .action(async (url) => {
9
+ if (!url) {
10
+ open.help();
11
+ return;
12
+ }
13
+ await handleUrl(url);
14
+ });
15
+ open
16
+ .command('register')
17
+ .description('Register the agents:// URL scheme with the OS so artifact links resume sessions (idempotent).')
18
+ .action(() => {
19
+ const status = registerAgentsUrlScheme();
20
+ if (status.registered) {
21
+ console.log(chalk.green('agents:// scheme registered.') + chalk.gray(` ${status.detail}`));
22
+ }
23
+ else {
24
+ console.log(chalk.yellow('Could not register the agents:// scheme.') + chalk.gray(` ${status.detail}`));
25
+ process.exitCode = 1;
26
+ }
27
+ });
28
+ open
29
+ .command('unregister')
30
+ .description('Remove the agents:// URL scheme handler.')
31
+ .action(() => {
32
+ const status = unregisterAgentsUrlScheme();
33
+ console.log(chalk.gray(status.detail));
34
+ });
35
+ open
36
+ .command('status')
37
+ .description('Report whether the agents:// URL scheme handler is registered.')
38
+ .action(() => {
39
+ const status = agentsUrlSchemeStatus();
40
+ const label = status.registered ? chalk.green('registered') : chalk.yellow('not registered');
41
+ console.log(`agents:// handler: ${label} ${chalk.gray(`(${status.platform})`)}`);
42
+ console.log(chalk.gray(` ${status.detail}`));
43
+ if (!status.registered)
44
+ process.exitCode = 1;
45
+ });
46
+ }
47
+ async function handleUrl(url) {
48
+ const parsed = parseAgentsUrl(url);
49
+ if ('error' in parsed) {
50
+ console.error(chalk.red(`Not a valid agents:// link: ${parsed.error}`));
51
+ process.exitCode = 2;
52
+ return;
53
+ }
54
+ // Lazy-import the resume dispatcher so `register`/`status` stay cold-start cheap.
55
+ const { dispatchSessionLifecycleInPlace } = await import('./sessions-resume.js');
56
+ await dispatchSessionLifecycleInPlace(parsed.id, parsed.host ? [parsed.host] : []);
57
+ }
@@ -6,15 +6,13 @@
6
6
  * hooks from configured registries or GitHub sources.
7
7
  */
8
8
  import * as fs from 'fs';
9
- import * as path from 'path';
10
9
  import chalk from 'chalk';
11
10
  import ora from 'ora';
12
- import { getAgentsDir, getEnabledExtraRepos } from '../lib/state.js';
13
11
  import { AGENTS, getAllCliStates, agentLabel, } from '../lib/agents.js';
14
12
  import { capableAgents } from '../lib/capabilities.js';
15
13
  import { DEFAULT_REGISTRIES } from '../lib/types.js';
16
- import { getRegistries, setRegistry, removeRegistry, search as searchRegistries, resolvePackage, validatedNpmSpec, validatedPyPISpec, buildSkillIndex, verifySkillIntegrity, parseOwnerRepoFromRemote, } from '../lib/registry.js';
17
- import { cloneRepo, commitAndPush, getCurrentBranch, getRemoteUrl, isGitRepo } from '../lib/git.js';
14
+ import { getRegistries, setRegistry, removeRegistry, search as searchRegistries, resolvePackage, validatedNpmSpec, validatedPyPISpec, verifySkillIntegrity, } from '../lib/registry.js';
15
+ import { cloneRepo } from '../lib/git.js';
18
16
  import { discoverCommands, resolveCommandSource, installCommand, installCommandCentrally, } from '../lib/commands.js';
19
17
  import { discoverSkillsFromRepo, installSkill, installSkillCentrally, } from '../lib/skills.js';
20
18
  import { discoverHooksFromRepo, installHooks, installHooksCentrally, } from '../lib/hooks.js';
@@ -328,109 +326,6 @@ When to use:
328
326
  }
329
327
  });
330
328
  // ==========================================================================
331
- // PUBLISH COMMAND (self-hosted, git-index skill registry)
332
- // ==========================================================================
333
- program
334
- .command('publish')
335
- .description('Generate a skills-index.json for a git repo and push it, making its skills discoverable via agents search/install')
336
- .option('--repo <alias>', 'Publish an extra repo added via `agents repo add` (default: your ~/.agents repo)')
337
- .option('--name <name>', 'Registry name to suggest in the output (default: the repo name)')
338
- .option('--branch <branch>', 'Branch to push the index to and reference in the raw URL (default: the repo\'s current branch)')
339
- .option('--dry-run', 'Write the index and print the URL without committing or pushing')
340
- .addHelpText('after', `
341
- Publish walks a repo's skills/ directory, records a sha256 of every SKILL.md,
342
- and writes skills-index.json at the repo root — a flat index that 'agents search'
343
- and 'agents install' can consume directly from raw.githubusercontent.com. No
344
- hosted infrastructure: the index is just a file committed to your GitHub repo.
345
-
346
- Examples:
347
- # Publish your ~/.agents repo's skills
348
- agents publish
349
-
350
- # Publish an extra repo added via 'agents repo add'
351
- agents publish --repo team-skills
352
-
353
- # Preview the index without pushing
354
- agents publish --dry-run
355
-
356
- After publishing, share the printed 'agents registry add skill ...' command so
357
- others can search and install your skills. Installs verify each SKILL.md against
358
- the sha256 in the index and abort on mismatch.
359
- `)
360
- .action(async (options) => {
361
- // Resolve the target repo: an extra repo by alias, else the primary ~/.agents repo.
362
- let repoDir;
363
- if (options.repo) {
364
- const extra = getEnabledExtraRepos().find((r) => r.alias === options.repo);
365
- if (!extra) {
366
- console.log(chalk.red(`No enabled extra repo aliased '${options.repo}'.`));
367
- console.log(chalk.gray('Add one with: agents repo add <source> --as <alias>'));
368
- process.exit(1);
369
- }
370
- repoDir = extra.dir;
371
- }
372
- else {
373
- repoDir = getAgentsDir();
374
- }
375
- if (!isGitRepo(repoDir)) {
376
- console.log(chalk.red(`${repoDir} is not a git repository.`));
377
- console.log(chalk.gray('publish commits + pushes the index, so the repo needs a GitHub remote.'));
378
- process.exit(1);
379
- }
380
- const remoteUrl = await getRemoteUrl(repoDir);
381
- const repoSlug = remoteUrl ? parseOwnerRepoFromRemote(remoteUrl) : null;
382
- if (!repoSlug) {
383
- console.log(chalk.red(`Could not resolve an 'owner/repo' from the git remote of ${repoDir}.`));
384
- console.log(chalk.gray(` Remote: ${remoteUrl || '(none)'} — publish needs a GitHub origin.`));
385
- process.exit(1);
386
- }
387
- const spinner = ora('Building skills index...').start();
388
- const index = buildSkillIndex(repoDir, repoSlug, { generatedAt: new Date().toISOString() });
389
- spinner.stop();
390
- if (index.skills.length === 0) {
391
- console.log(chalk.yellow(`No skills found under ${repoDir}/skills.`));
392
- console.log(chalk.gray('Add a skill (a directory with a SKILL.md) and re-run publish.'));
393
- process.exit(1);
394
- }
395
- const indexPath = path.join(repoDir, 'skills-index.json');
396
- fs.writeFileSync(indexPath, JSON.stringify(index, null, 2) + '\n', 'utf-8');
397
- console.log(chalk.bold(`\nIndexed ${index.skills.length} skill(s) into skills-index.json:`));
398
- for (const s of index.skills) {
399
- console.log(` ${chalk.cyan(s.name)} ${chalk.gray(`sha256:${s.sha256?.slice(0, 12)}…`)}`);
400
- }
401
- // The branch the URL references must be the branch the index actually
402
- // lands on. In a real push that's whatever commitAndPush reports back
403
- // (the requested --branch, else the checked-out branch); in a dry run we
404
- // resolve it the same way without pushing.
405
- let urlBranch;
406
- if (options.dryRun) {
407
- urlBranch = options.branch || (await getCurrentBranch(repoDir));
408
- console.log(chalk.gray(`\nDry run — wrote ${indexPath} but did not commit or push.`));
409
- }
410
- else {
411
- const pushSpinner = ora('Committing and pushing skills-index.json...').start();
412
- const result = await commitAndPush(repoDir, 'chore: update skills-index.json (agents publish)', options.branch);
413
- if (!result.success) {
414
- pushSpinner.fail(`Push failed: ${result.error}`);
415
- console.log(chalk.gray('The index was written locally — commit and push it manually to publish.'));
416
- process.exit(1);
417
- }
418
- // commitAndPush always reports the pushed branch on success; the `??`
419
- // only satisfies the optional return type, it is not a behavior path.
420
- urlBranch = result.branch ?? (await getCurrentBranch(repoDir));
421
- pushSpinner.succeed(`Pushed skills-index.json to ${urlBranch}`);
422
- }
423
- const rawUrl = `https://raw.githubusercontent.com/${repoSlug}/${urlBranch}/skills-index.json`;
424
- const registryName = options.name || repoSlug.split('/')[1] || 'my-skills';
425
- console.log(chalk.bold('\nPublished. Share these with anyone who wants your skills:\n'));
426
- console.log(chalk.gray(' Index URL:'));
427
- console.log(` ${rawUrl}`);
428
- console.log(chalk.gray('\n Register + search + install:'));
429
- console.log(` ${chalk.green(`agents registry add skill ${registryName} ${rawUrl}`)}`);
430
- console.log(` ${chalk.green(`agents search ${index.skills[0].name} --type skill`)}`);
431
- console.log(` ${chalk.green(`agents install skill:${index.skills[0].name} --agents claude,codex,cursor`)}`);
432
- });
433
- // ==========================================================================
434
329
  // INSTALL COMMAND (unified package installation)
435
330
  // ==========================================================================
436
331
  program
@@ -282,10 +282,11 @@ Examples:
282
282
  }
283
283
  console.log();
284
284
  });
285
- // agents plugins sync <name> [agent]
285
+ // Deprecated: superseded by `agents sync --plugin <name>`. Kept as a warned,
286
+ // functional alias so old muscle-memory and scripts don't break.
286
287
  pluginsCmd
287
- .command('sync <name> [agent]')
288
- .description('Apply a plugin to an agent. Syncs every installed version (pass agent@version to target one).')
288
+ .command('sync <name> [agent]', { hidden: true })
289
+ .description('Deprecated use `agents sync --plugin <name>` instead.')
289
290
  .option('--allow-exec-surfaces', 'Enable the plugin even when it ships hooks/, .mcp.json, bin/, scripts/, settings.json, or permissions/')
290
291
  .addHelpText('after', `
291
292
  Examples:
@@ -302,6 +303,8 @@ Examples:
302
303
  agents plugins sync hivemind claude --allow-exec-surfaces
303
304
  `)
304
305
  .action(async (name, agentArg, options) => {
306
+ console.warn(chalk.yellow('`agents plugins sync` is deprecated — use `agents sync --plugin` instead:'));
307
+ console.warn(chalk.gray(` agents sync --plugin ${name}`));
305
308
  const plugin = getPlugin(name);
306
309
  if (!plugin) {
307
310
  console.log(chalk.red(`Plugin '${name}' not found`));
@@ -25,6 +25,7 @@ export interface AddProfileOptions {
25
25
  model?: string;
26
26
  baseUrl?: string;
27
27
  authProvider?: string;
28
+ account?: string;
28
29
  version?: string;
29
30
  keyStdin?: boolean;
30
31
  force?: boolean;
@@ -16,9 +16,8 @@ import { parseBundleValue, secretsKeychainItem } from '../lib/secrets/index.js';
16
16
  import { readBundle } from '../lib/secrets/bundles.js';
17
17
  import { isInteractiveTerminal } from './utils.js';
18
18
  import { getAgentsInvocation } from '../lib/daemon.js';
19
- import { getActiveResourceProfileName, getResourceProfilePreset, listResourceProfileNames, setActiveResourceProfile, upsertResourceProfilePreset, validateResourceProfileName, } from '../lib/resource-profiles.js';
20
- import { AGENTS, ALL_AGENT_IDS } from '../lib/agents.js';
21
- import { listInstalledVersions, syncResourcesToVersion } from '../lib/versions.js';
19
+ import { ALL_AGENT_IDS } from '../lib/agents.js';
20
+ import { findAccount } from '../lib/account-registry.js';
22
21
  /**
23
22
  * Pure helper: builds a Profile from collected wizard inputs. Extracted so the
24
23
  * shape of preset->profile mapping for the `create` wizard is unit-testable
@@ -159,6 +158,9 @@ export async function applyFromSecrets(profile, spec, explicitAuthProvider, opts
159
158
  */
160
159
  export async function addProfile(name, opts, label = 'Profile') {
161
160
  validateProfileName(name);
161
+ const account = opts.account ? findAccount(opts.account) : null;
162
+ if (opts.account && !account)
163
+ throw new Error(`Unknown account '${opts.account}'.`);
162
164
  if (profileExists(name) && !opts.force) {
163
165
  throw new Error(`${label} '${name}' already exists. Use --force to overwrite.`);
164
166
  }
@@ -190,6 +192,10 @@ export async function addProfile(name, opts, label = 'Profile') {
190
192
  provider: opts.authProvider,
191
193
  authEnvVar,
192
194
  });
195
+ if (account) {
196
+ profile.account = account.id;
197
+ profile.provider = account.provider;
198
+ }
193
199
  if (opts.fromSecrets)
194
200
  await applyFromSecrets(profile, opts.fromSecrets, opts.authProvider);
195
201
  writeProfile(profile);
@@ -204,10 +210,14 @@ export async function addProfile(name, opts, label = 'Profile') {
204
210
  throw new Error(`No preset '${presetName}'.\nAvailable presets: ${listPresets().map((p) => p.name).join(', ')}\n` +
205
211
  'Or build a custom harness: --host <agent> --model <id>.');
206
212
  }
207
- if (!opts.fromSecrets && !preset.authOptional) {
213
+ if (!account && !opts.fromSecrets && !preset.authOptional) {
208
214
  await ensureProviderToken(preset.provider, preset.signupUrl, opts.keyStdin);
209
215
  }
210
216
  const profile = profileFromPreset(name, preset, opts.version);
217
+ if (account) {
218
+ profile.account = account.id;
219
+ profile.provider = account.provider;
220
+ }
211
221
  if (opts.fromSecrets)
212
222
  await applyFromSecrets(profile, opts.fromSecrets, opts.authProvider);
213
223
  writeProfile(profile);
@@ -221,141 +231,8 @@ function renderProfileRow(p) {
221
231
  const provider = p.provider || (p.auth?.keychainItem?.split('.')[1]) || '-';
222
232
  return `${chalk.cyan(p.name.padEnd(16))} ${host.padEnd(14)} ${provider.padEnd(12)} ${chalk.gray(model)}`;
223
233
  }
224
- function splitList(value) {
225
- if (value === undefined)
226
- return undefined;
227
- return value.split(',').map((part) => part.trim()).filter(Boolean);
228
- }
229
- function buildResourceProfileFromOptions(existing, opts) {
230
- const next = { ...(existing ?? {}) };
231
- if (opts.description !== undefined)
232
- next.description = opts.description || undefined;
233
- const keys = ['commands', 'skills', 'hooks', 'subagents', 'plugins', 'workflows', 'permissions', 'mcp'];
234
- for (const key of keys) {
235
- const parsed = splitList(opts[key]);
236
- if (parsed !== undefined)
237
- next[key] = parsed;
238
- }
239
- const secrets = splitList(opts.secrets);
240
- if (secrets !== undefined)
241
- next.secrets = secrets;
242
- if (opts.rules !== undefined)
243
- next.rules = opts.rules || undefined;
244
- return next;
245
- }
246
- function printResourceProfile(name, preset, activeName) {
247
- const activeMark = activeName === name ? '*' : ' ';
248
- const description = preset.description ? ` ${chalk.gray(preset.description)}` : '';
249
- console.log(`${activeMark} ${chalk.cyan(name)}${description}`);
250
- }
251
- function syncInstalledVersionsForActiveProfile(cwd) {
252
- let synced = 0;
253
- for (const agent of Object.keys(AGENTS)) {
254
- for (const version of listInstalledVersions(agent)) {
255
- syncResourcesToVersion(agent, version, undefined, { cwd, force: true });
256
- synced++;
257
- }
258
- }
259
- return synced;
260
- }
261
- function registerResourceProfileCommands(program) {
262
- const cmd = program
263
- .command('profile')
264
- .description('Activate top-level resource profiles across commands, skills, hooks, rules, MCP, permissions, and secrets.');
265
- cmd
266
- .command('list')
267
- .alias('ls')
268
- .description('List top-level resource profiles')
269
- .action(() => {
270
- const names = listResourceProfileNames();
271
- if (names.length === 0) {
272
- console.log(chalk.gray('No resource profiles configured.'));
273
- console.log(chalk.gray('Try: agents profile set work --skills user:code-review --secrets work'));
274
- return;
275
- }
276
- const active = getActiveResourceProfileName();
277
- for (const name of names) {
278
- printResourceProfile(name, getResourceProfilePreset(name), active);
279
- }
280
- });
281
- cmd
282
- .command('status')
283
- .description('Show the active top-level resource profile')
284
- .action(() => {
285
- const active = getActiveResourceProfileName();
286
- if (!active) {
287
- console.log(chalk.gray('No resource profile active.'));
288
- return;
289
- }
290
- const preset = getResourceProfilePreset(active);
291
- console.log(chalk.bold(active));
292
- if (!preset) {
293
- console.log(chalk.red('Configured active profile is missing from profiles.presets.'));
294
- return;
295
- }
296
- if (preset.description)
297
- console.log(chalk.gray(preset.description));
298
- for (const [key, value] of Object.entries(preset)) {
299
- if (key === 'description')
300
- continue;
301
- console.log(`${key}: ${Array.isArray(value) ? value.join(', ') : value}`);
302
- }
303
- });
304
- cmd
305
- .command('set <name>')
306
- .alias('define')
307
- .description('Create or update a top-level resource profile')
308
- .option('--description <text>', 'Free-form description')
309
- .option('--commands <patterns>', 'Comma-separated command selectors, e.g. system:commit,user:*')
310
- .option('--skills <patterns>', 'Comma-separated skill selectors')
311
- .option('--hooks <patterns>', 'Comma-separated hook selectors')
312
- .option('--subagents <patterns>', 'Comma-separated subagent selectors')
313
- .option('--plugins <patterns>', 'Comma-separated plugin selectors')
314
- .option('--workflows <patterns>', 'Comma-separated workflow selectors')
315
- .option('--permissions <patterns>', 'Comma-separated permission group selectors')
316
- .option('--mcp <patterns>', 'Comma-separated MCP server selectors')
317
- .option('--rules <preset>', 'Rules preset to compose while active')
318
- .option('--secrets <names>', 'Comma-separated secrets bundles, or "*"')
319
- .action((name, opts) => {
320
- try {
321
- validateResourceProfileName(name);
322
- const preset = buildResourceProfileFromOptions(getResourceProfilePreset(name), opts);
323
- upsertResourceProfilePreset(name, preset);
324
- console.log(chalk.green(`Profile '${name}' saved.`));
325
- }
326
- catch (err) {
327
- console.error(chalk.red(err.message));
328
- process.exit(1);
329
- }
330
- });
331
- cmd
332
- .command('use <name>')
333
- .description('Activate a top-level resource profile and reconcile installed versions')
334
- .action((name) => {
335
- try {
336
- setActiveResourceProfile(name);
337
- const synced = syncInstalledVersionsForActiveProfile(process.cwd());
338
- console.log(chalk.green(`Profile '${name}' active.`));
339
- console.log(chalk.gray(`Reconciled ${synced} installed version${synced === 1 ? '' : 's'}.`));
340
- }
341
- catch (err) {
342
- console.error(chalk.red(err.message));
343
- process.exit(1);
344
- }
345
- });
346
- cmd
347
- .command('clear')
348
- .description('Clear the active top-level resource profile and reconcile installed versions')
349
- .action(() => {
350
- setActiveResourceProfile(null);
351
- const synced = syncInstalledVersionsForActiveProfile(process.cwd());
352
- console.log(chalk.green('Resource profile cleared.'));
353
- console.log(chalk.gray(`Reconciled ${synced} installed version${synced === 1 ? '' : 's'}.`));
354
- });
355
- }
356
234
  /** Register the `agents profiles` command tree. */
357
235
  export function registerProfilesCommands(program) {
358
- registerResourceProfileCommands(program);
359
236
  const cmd = program
360
237
  .command('profiles')
361
238
  .description('Named bundles of (host CLI, endpoint, model, auth) — run Kimi/DeepSeek/Qwen/etc through Claude Code without a proxy.')
@@ -427,28 +304,6 @@ Examples:
427
304
  # Fully remove the OpenRouter key from Keychain
428
305
  agents profiles logout openrouter
429
306
  `);
430
- cmd
431
- .command('use <name>')
432
- .description('Alias for `agents profile use <name>`')
433
- .action((name) => {
434
- try {
435
- setActiveResourceProfile(name);
436
- const synced = syncInstalledVersionsForActiveProfile(process.cwd());
437
- console.log(chalk.green(`Profile '${name}' active.`));
438
- console.log(chalk.gray(`Reconciled ${synced} installed version${synced === 1 ? '' : 's'}.`));
439
- }
440
- catch (err) {
441
- console.error(chalk.red(err.message));
442
- process.exit(1);
443
- }
444
- });
445
- cmd
446
- .command('status')
447
- .description('Alias for `agents profile status`')
448
- .action(() => {
449
- const active = getActiveResourceProfileName();
450
- console.log(active ? active : chalk.gray('No resource profile active.'));
451
- });
452
307
  cmd
453
308
  .command('list')
454
309
  .alias('ls')
@@ -609,6 +464,7 @@ Examples:
609
464
  .description('Add a profile. If <name> matches a built-in preset, the preset is applied. Prompts for API key (once per provider).')
610
465
  .option('--preset <preset>', 'Use a named preset (defaults to <name> if a preset by that name exists)')
611
466
  .option('--version <version>', 'Pin the host CLI version (e.g., 2.1.113)')
467
+ .option('--account <name>', 'Attach an existing durable credential account')
612
468
  .option('--key-stdin', 'Read API key from stdin instead of prompting (for scripts/CI)')
613
469
  .option('--force', 'Overwrite an existing profile with the same name')
614
470
  .addHelpText('after', '\nTo build a custom harness from a host CLI + model in one shot, use `agents harness add`.\n')
@@ -617,7 +473,7 @@ Examples:
617
473
  // device routing (see lib/hosts/passthrough.ts). The host+model one-shot
618
474
  // lives on `agents harness add`, which owns its own `--host`.
619
475
  try {
620
- await addProfile(name, { preset: opts.preset, version: opts.version, keyStdin: opts.keyStdin, force: opts.force }, 'Profile');
476
+ await addProfile(name, { preset: opts.preset, version: opts.version, account: opts.account, keyStdin: opts.keyStdin, force: opts.force }, 'Profile');
621
477
  }
622
478
  catch (err) {
623
479
  console.error(chalk.red(err.message));
@@ -8,9 +8,18 @@
8
8
  * lifecycle state, plan completion, open PRs, and tickets in flight.
9
9
  */
10
10
  import type { Command } from 'commander';
11
+ import { type ProjectRepo } from '../lib/projects.js';
11
12
  import { type LinearMilestone } from '../lib/linear-project-counts.js';
12
13
  /** Recursion guard: a peer answering a probe fan-out never re-fans-out itself. */
13
14
  export declare const PROJECTS_NO_FANOUT_ENV = "AGENTS_PROJECTS_LOCAL";
15
+ /**
16
+ * Render `agents projects for-cwd`'s output for a resolved (or absent)
17
+ * project name — `--json` always prints `{"name": ...}` even on no match, so
18
+ * a scripted caller can distinguish "ran and found nothing" from a crash;
19
+ * the plain-text form prints nothing on no match. Returns '' when nothing
20
+ * should be printed.
21
+ */
22
+ export declare function formatForCwdOutput(name: string | undefined, json: boolean): string;
14
23
  /**
15
24
  * One compact trailing note for peers that didn't answer the `--fleet`
16
25
  * fan-out — unreachable, running an agents-cli too old to carry `projects
@@ -28,6 +37,25 @@ export declare function formatFleetSkippedNote(skipped: string[]): string;
28
37
  * expected answer here (`undefined`), not something to report.
29
38
  */
30
39
  export declare function originSlug(cwd: string): string | undefined;
40
+ /**
41
+ * Turn a `--dir` / `--add-dir` value into a `repos[]` row.
42
+ *
43
+ * The slug comes from the DIRECTORY'S OWN origin remote, never from its path:
44
+ * a checkout at `~/src/github.com/muqsitnawaz/agents-cli` whose origin is
45
+ * `phnx-labs/agents-cli` must record the remote it actually pushes to. Pass
46
+ * `slugOverride` for a directory with no origin (a vendored tree, a fresh
47
+ * `git init`).
48
+ *
49
+ * The stored `path` is left for `writeProjectDef` to normalize home-relative,
50
+ * so the same definition re-roots on every machine.
51
+ */
52
+ export declare function projectRepoFromDir(dir: string, slugOverride?: string): {
53
+ ok: true;
54
+ repo: ProjectRepo;
55
+ } | {
56
+ ok: false;
57
+ error: string;
58
+ };
31
59
  /** One `projects list` row, pre-render. */
32
60
  export interface ProjectListRow {
33
61
  name: string;