@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
@@ -1,247 +0,0 @@
1
- /**
2
- * Skills resource handler.
3
- *
4
- * Skills are directory bundles with a SKILL.md containing YAML frontmatter.
5
- * Format is the same for all agents. Resolution order: project > user > system.
6
- */
7
- import * as fs from 'fs';
8
- import { AGENTS, agentConfigDirName, isAgentHardDeprecated } from '../agents.js';
9
- import * as path from 'path';
10
- import * as yaml from 'yaml';
11
- import { getSystemSkillsDir, getUserSkillsDir, getProjectAgentsDir, getEnabledExtraRepos, } from '../state.js';
12
- /** Default provider uses the real state module. */
13
- const defaultProvider = {
14
- getSystemSkillsDir,
15
- getUserSkillsDir,
16
- getProjectAgentsDir,
17
- getEnabledExtraRepos,
18
- };
19
- /**
20
- * Parse SKILL.md frontmatter to extract skill metadata.
21
- * Returns null if the file doesn't exist or has no valid frontmatter.
22
- */
23
- function parseSkillMetadata(skillDir) {
24
- const skillMdPath = path.join(skillDir, 'SKILL.md');
25
- if (!fs.existsSync(skillMdPath)) {
26
- return null;
27
- }
28
- try {
29
- const content = fs.readFileSync(skillMdPath, 'utf-8');
30
- const lines = content.split('\n');
31
- // Check for YAML frontmatter (required)
32
- if (lines[0] === '---') {
33
- const endIndex = lines.slice(1).findIndex((l) => l === '---');
34
- if (endIndex > 0) {
35
- const frontmatter = lines.slice(1, endIndex + 1).join('\n');
36
- const parsed = yaml.parse(frontmatter);
37
- return {
38
- name: parsed.name || '',
39
- description: parsed.description || '',
40
- author: parsed.author,
41
- version: parsed.version,
42
- license: parsed.license,
43
- keywords: parsed.keywords,
44
- };
45
- }
46
- }
47
- return null;
48
- }
49
- catch {
50
- return null;
51
- }
52
- }
53
- /**
54
- * Count .md files in the skill's rules/ subdirectory.
55
- */
56
- function countSkillRules(skillDir) {
57
- const rulesDir = path.join(skillDir, 'rules');
58
- if (!fs.existsSync(rulesDir)) {
59
- return 0;
60
- }
61
- try {
62
- const files = fs.readdirSync(rulesDir);
63
- return files.filter((f) => f.endsWith('.md')).length;
64
- }
65
- catch {
66
- return 0;
67
- }
68
- }
69
- /**
70
- * Count bundled resource files in a skill directory (everything except SKILL.md).
71
- */
72
- function countSkillFiles(skillDir) {
73
- if (!fs.existsSync(skillDir))
74
- return 0;
75
- let count = 0;
76
- const walk = (dir) => {
77
- let entries;
78
- try {
79
- entries = fs.readdirSync(dir, { withFileTypes: true });
80
- }
81
- catch {
82
- return;
83
- }
84
- for (const entry of entries) {
85
- if (entry.name.startsWith('.'))
86
- continue;
87
- const full = path.join(dir, entry.name);
88
- if (entry.isDirectory()) {
89
- walk(full);
90
- }
91
- else if (entry.isFile()) {
92
- if (dir === skillDir && entry.name === 'SKILL.md')
93
- continue;
94
- count++;
95
- }
96
- }
97
- };
98
- walk(skillDir);
99
- return count;
100
- }
101
- /**
102
- * List skill directories in a given base path.
103
- * Returns array of { name, fullPath } for directories containing SKILL.md.
104
- */
105
- function listSkillsInDir(baseDir) {
106
- if (!fs.existsSync(baseDir))
107
- return [];
108
- const results = [];
109
- try {
110
- const entries = fs.readdirSync(baseDir, { withFileTypes: true });
111
- for (const entry of entries) {
112
- if (!entry.isDirectory() || entry.name.startsWith('.'))
113
- continue;
114
- const fullPath = path.join(baseDir, entry.name);
115
- const skillMdPath = path.join(fullPath, 'SKILL.md');
116
- if (fs.existsSync(skillMdPath)) {
117
- results.push({ name: entry.name, fullPath });
118
- }
119
- }
120
- }
121
- catch {
122
- // Ignore errors
123
- }
124
- return results;
125
- }
126
- /**
127
- * Get layer directories for skill resolution.
128
- */
129
- function getLayerDirs(cwd, provider = defaultProvider) {
130
- const layers = [];
131
- // Project layer
132
- const projectDir = cwd ? provider.getProjectAgentsDir(cwd) : null;
133
- if (projectDir) {
134
- layers.push({ layer: 'project', dir: path.join(projectDir, 'skills') });
135
- }
136
- // User layer
137
- layers.push({ layer: 'user', dir: provider.getUserSkillsDir() });
138
- // Extra repos (treated as user layer since they're user-configured)
139
- for (const extra of provider.getEnabledExtraRepos()) {
140
- layers.push({ layer: 'user', dir: path.join(extra.dir, 'skills') });
141
- }
142
- // System layer
143
- layers.push({ layer: 'system', dir: provider.getSystemSkillsDir() });
144
- return layers;
145
- }
146
- /**
147
- * Create a SkillsHandler with the given layer directory provider.
148
- * Useful for testing with custom directory structures.
149
- */
150
- export function createSkillsHandler(provider = defaultProvider) {
151
- return {
152
- kind: 'skill',
153
- listAll(_agent, cwd) {
154
- const seen = new Map();
155
- const layers = getLayerDirs(cwd, provider);
156
- // Process in order: project > user > system
157
- // First occurrence wins (higher layer takes precedence)
158
- for (const { layer, dir } of layers) {
159
- const skills = listSkillsInDir(dir);
160
- for (const { name, fullPath } of skills) {
161
- if (seen.has(name))
162
- continue; // Higher layer already has this skill
163
- const metadata = parseSkillMetadata(fullPath);
164
- if (!metadata)
165
- continue; // Skip invalid skills
166
- seen.set(name, {
167
- name,
168
- item: {
169
- metadata,
170
- ruleCount: countSkillRules(fullPath),
171
- fileCount: countSkillFiles(fullPath),
172
- },
173
- layer,
174
- path: fullPath,
175
- });
176
- }
177
- }
178
- return Array.from(seen.values()).sort((a, b) => a.name.localeCompare(b.name));
179
- },
180
- resolve(_agent, name, cwd) {
181
- const layers = getLayerDirs(cwd, provider);
182
- for (const { layer, dir } of layers) {
183
- const skillPath = path.join(dir, name);
184
- const skillMdPath = path.join(skillPath, 'SKILL.md');
185
- if (fs.existsSync(skillMdPath)) {
186
- const metadata = parseSkillMetadata(skillPath);
187
- if (!metadata)
188
- continue;
189
- return {
190
- name,
191
- item: {
192
- metadata,
193
- ruleCount: countSkillRules(skillPath),
194
- fileCount: countSkillFiles(skillPath),
195
- },
196
- layer,
197
- path: skillPath,
198
- };
199
- }
200
- }
201
- return null;
202
- },
203
- sync(agent, versionHome, cwd) {
204
- if (isAgentHardDeprecated(agent)) {
205
- return;
206
- }
207
- // Agents that read directly from central ~/.agents/skills/ (e.g. Gemini,
208
- // Goose via the Summon extension) should not get a per-version copy.
209
- if (AGENTS[agent]?.nativeAgentsSkillsDir) {
210
- return;
211
- }
212
- const targetDir = path.join(versionHome, agentConfigDirName(agent), 'skills');
213
- // Ensure target directory exists
214
- if (!fs.existsSync(targetDir)) {
215
- fs.mkdirSync(targetDir, { recursive: true });
216
- }
217
- const resolved = this.listAll(agent, cwd);
218
- for (const skill of resolved) {
219
- const targetPath = path.join(targetDir, skill.name);
220
- // Remove existing if present
221
- if (fs.existsSync(targetPath) || fs.lstatSync(targetPath, { throwIfNoEntry: false })) {
222
- try {
223
- fs.rmSync(targetPath, { recursive: true, force: true });
224
- }
225
- catch {
226
- // Ignore removal errors
227
- }
228
- }
229
- // Copy skill directory
230
- try {
231
- fs.cpSync(skill.path, targetPath, { recursive: true });
232
- }
233
- catch {
234
- // Ignore copy errors
235
- }
236
- }
237
- },
238
- format(_agent) {
239
- return 'md';
240
- },
241
- targetDir(agent) {
242
- return `${agentConfigDirName(agent)}/skills`;
243
- },
244
- };
245
- }
246
- /** Default handler using real state module paths. */
247
- export const SkillsHandler = createSkillsHandler();
@@ -1,46 +0,0 @@
1
- /**
2
- * Subagents resource handler.
3
- *
4
- * Subagents are YAML files stored in subagents/ directories across layers.
5
- * Format is the same for all agents. Resolution order: project > user > system.
6
- */
7
- import type { AgentId, ResolvedItem, ResourceHandler } from './types.js';
8
- /** Parsed content of a subagent YAML file. */
9
- export interface SubagentItem {
10
- name: string;
11
- description: string;
12
- model?: string;
13
- /** Hex color for UI display. */
14
- color?: string;
15
- /** Additional agent-specific config. */
16
- config?: Record<string, unknown>;
17
- }
18
- export declare class SubagentsHandler implements ResourceHandler<SubagentItem> {
19
- readonly kind: "subagent";
20
- /**
21
- * List all subagents across layers, with higher layer winning on name conflict.
22
- * Returns a union of all subagents, deduplicated by name.
23
- */
24
- listAll(_agent: AgentId, cwd?: string): ResolvedItem<SubagentItem>[];
25
- /**
26
- * Resolve a single subagent by name.
27
- * Returns the winning layer's version, or null if not found.
28
- */
29
- resolve(_agent: AgentId, name: string, cwd?: string): ResolvedItem<SubagentItem> | null;
30
- /**
31
- * Sync resolved subagents to the agent's version home directory.
32
- * Copies YAML files to the target directory.
33
- */
34
- sync(agent: AgentId, versionHome: string, cwd?: string): void;
35
- /**
36
- * Get the file format this resource uses for a given agent.
37
- * Subagents always use YAML format.
38
- */
39
- format(_agent: AgentId): 'md' | 'toml' | 'json' | 'yaml';
40
- /**
41
- * Get the target directory name in the agent's version home.
42
- */
43
- targetDir(_agent: AgentId): string;
44
- }
45
- /** Singleton instance of the SubagentsHandler. */
46
- export declare const subagentsHandler: SubagentsHandler;
@@ -1,202 +0,0 @@
1
- /**
2
- * Subagents resource handler.
3
- *
4
- * Subagents are YAML files stored in subagents/ directories across layers.
5
- * Format is the same for all agents. Resolution order: project > user > system.
6
- */
7
- import * as fs from 'fs';
8
- import * as path from 'path';
9
- import * as yaml from 'yaml';
10
- import { getProjectAgentsDir, getUserSubagentsDir, getSystemSubagentsDir, getEnabledExtraRepos, } from '../state.js';
11
- import { isAgentHardDeprecated } from '../agents.js';
12
- /** Get layer directories for subagent resolution. */
13
- function getLayerDirs(cwd) {
14
- const projectDir = getProjectAgentsDir(cwd);
15
- const extraRepos = getEnabledExtraRepos();
16
- return {
17
- system: path.join(getSystemSubagentsDir()),
18
- user: getUserSubagentsDir(),
19
- project: projectDir ? path.join(projectDir, 'subagents') : null,
20
- extra: extraRepos.map((e) => path.join(e.dir, 'subagents')),
21
- };
22
- }
23
- /** Map source directory to layer name. */
24
- function dirToLayer(dir, dirs) {
25
- if (dirs.project && dir.startsWith(dirs.project))
26
- return 'project';
27
- if (dir.startsWith(dirs.user))
28
- return 'user';
29
- return 'system';
30
- }
31
- /** Parse a subagent YAML file and return parsed item. */
32
- function parseSubagentYaml(filePath) {
33
- if (!fs.existsSync(filePath)) {
34
- return null;
35
- }
36
- try {
37
- const content = fs.readFileSync(filePath, 'utf-8');
38
- const parsed = yaml.parse(content);
39
- if (!parsed || typeof parsed !== 'object') {
40
- return null;
41
- }
42
- return {
43
- name: parsed.name || '',
44
- description: parsed.description || '',
45
- model: parsed.model,
46
- color: parsed.color,
47
- config: parsed.config,
48
- };
49
- }
50
- catch {
51
- return null;
52
- }
53
- }
54
- /** Extract name from filename (removes .yaml/.yml extension). */
55
- function nameFromFile(filename) {
56
- return filename.replace(/\.ya?ml$/, '');
57
- }
58
- export class SubagentsHandler {
59
- kind = 'subagent';
60
- /**
61
- * List all subagents across layers, with higher layer winning on name conflict.
62
- * Returns a union of all subagents, deduplicated by name.
63
- */
64
- listAll(_agent, cwd) {
65
- const dirs = getLayerDirs(cwd);
66
- const seen = new Set();
67
- const results = [];
68
- // Order: project > user > system > extra (extra comes last after system)
69
- const layerDirs = [];
70
- if (dirs.project && fs.existsSync(dirs.project)) {
71
- layerDirs.push({ dir: dirs.project, layer: 'project' });
72
- }
73
- if (fs.existsSync(dirs.user)) {
74
- layerDirs.push({ dir: dirs.user, layer: 'user' });
75
- }
76
- if (fs.existsSync(dirs.system)) {
77
- layerDirs.push({ dir: dirs.system, layer: 'system' });
78
- }
79
- for (const extraDir of dirs.extra) {
80
- if (fs.existsSync(extraDir)) {
81
- layerDirs.push({ dir: extraDir, layer: 'system' });
82
- }
83
- }
84
- for (const { dir, layer } of layerDirs) {
85
- let entries;
86
- try {
87
- entries = fs.readdirSync(dir, { withFileTypes: true });
88
- }
89
- catch {
90
- continue;
91
- }
92
- for (const entry of entries) {
93
- if (!entry.isFile())
94
- continue;
95
- if (!entry.name.endsWith('.yaml') && !entry.name.endsWith('.yml'))
96
- continue;
97
- if (entry.name.startsWith('.'))
98
- continue;
99
- const name = nameFromFile(entry.name);
100
- if (seen.has(name))
101
- continue;
102
- const filePath = path.join(dir, entry.name);
103
- const item = parseSubagentYaml(filePath);
104
- if (!item)
105
- continue;
106
- seen.add(name);
107
- results.push({
108
- name,
109
- item,
110
- layer,
111
- path: filePath,
112
- });
113
- }
114
- }
115
- return results;
116
- }
117
- /**
118
- * Resolve a single subagent by name.
119
- * Returns the winning layer's version, or null if not found.
120
- */
121
- resolve(_agent, name, cwd) {
122
- const dirs = getLayerDirs(cwd);
123
- // Order: project > user > system > extra
124
- const searchDirs = [];
125
- if (dirs.project) {
126
- searchDirs.push({ dir: dirs.project, layer: 'project' });
127
- }
128
- searchDirs.push({ dir: dirs.user, layer: 'user' });
129
- searchDirs.push({ dir: dirs.system, layer: 'system' });
130
- for (const extraDir of dirs.extra) {
131
- searchDirs.push({ dir: extraDir, layer: 'system' });
132
- }
133
- for (const { dir, layer } of searchDirs) {
134
- if (!fs.existsSync(dir))
135
- continue;
136
- // Try .yaml first, then .yml
137
- for (const ext of ['.yaml', '.yml']) {
138
- const filePath = path.join(dir, name + ext);
139
- if (fs.existsSync(filePath)) {
140
- const item = parseSubagentYaml(filePath);
141
- if (item) {
142
- return {
143
- name,
144
- item,
145
- layer,
146
- path: filePath,
147
- };
148
- }
149
- }
150
- }
151
- }
152
- return null;
153
- }
154
- /**
155
- * Sync resolved subagents to the agent's version home directory.
156
- * Copies YAML files to the target directory.
157
- */
158
- sync(agent, versionHome, cwd) {
159
- if (isAgentHardDeprecated(agent)) {
160
- return;
161
- }
162
- const targetDir = path.join(versionHome, this.targetDir(agent));
163
- // Ensure target directory exists
164
- if (!fs.existsSync(targetDir)) {
165
- fs.mkdirSync(targetDir, { recursive: true });
166
- }
167
- // Clear existing subagents in target
168
- try {
169
- const existing = fs.readdirSync(targetDir);
170
- for (const file of existing) {
171
- if (file.endsWith('.yaml') || file.endsWith('.yml')) {
172
- fs.unlinkSync(path.join(targetDir, file));
173
- }
174
- }
175
- }
176
- catch {
177
- // Ignore errors during cleanup
178
- }
179
- // Copy all resolved subagents
180
- const resolved = this.listAll(agent, cwd);
181
- for (const { name, path: sourcePath } of resolved) {
182
- const ext = sourcePath.endsWith('.yml') ? '.yml' : '.yaml';
183
- const targetPath = path.join(targetDir, name + ext);
184
- fs.copyFileSync(sourcePath, targetPath);
185
- }
186
- }
187
- /**
188
- * Get the file format this resource uses for a given agent.
189
- * Subagents always use YAML format.
190
- */
191
- format(_agent) {
192
- return 'yaml';
193
- }
194
- /**
195
- * Get the target directory name in the agent's version home.
196
- */
197
- targetDir(_agent) {
198
- return 'subagents';
199
- }
200
- }
201
- /** Singleton instance of the SubagentsHandler. */
202
- export const subagentsHandler = new SubagentsHandler();
File without changes