@phnx-labs/agents-cli 1.22.39 → 1.22.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (554) hide show
  1. package/CHANGELOG.md +294 -0
  2. package/README.md +111 -70
  3. package/dist/bin/agents +0 -0
  4. package/dist/bootstrap.js +45 -26
  5. package/dist/browser.js +2 -2
  6. package/dist/cli/command-registry.d.ts +135 -0
  7. package/dist/cli/command-registry.js +260 -0
  8. package/dist/commands/accounts.d.ts +20 -0
  9. package/dist/commands/accounts.js +186 -25
  10. package/dist/commands/apply.d.ts +3 -3
  11. package/dist/commands/apply.js +20 -63
  12. package/dist/commands/browser.js +206 -94
  13. package/dist/commands/budget.d.ts +7 -6
  14. package/dist/commands/budget.js +8 -7
  15. package/dist/commands/cloud.js +17 -20
  16. package/dist/commands/commands.js +1 -1
  17. package/dist/commands/computer-actions.d.ts +1 -35
  18. package/dist/commands/computer-actions.js +13 -181
  19. package/dist/commands/computer.d.ts +28 -3
  20. package/dist/commands/computer.js +93 -65
  21. package/dist/commands/config.js +16 -3
  22. package/dist/commands/cost.d.ts +2 -1
  23. package/dist/commands/cost.js +7 -6
  24. package/dist/commands/daemon.js +151 -4
  25. package/dist/commands/detach.js +1 -1
  26. package/dist/commands/doctor.js +19 -11
  27. package/dist/commands/events.js +1 -1
  28. package/dist/commands/exec.d.ts +2 -50
  29. package/dist/commands/exec.js +160 -215
  30. package/dist/commands/factory.js +1 -1
  31. package/dist/commands/feed.d.ts +2 -2
  32. package/dist/commands/feed.js +9 -12
  33. package/dist/commands/fleet-capture.js +25 -27
  34. package/dist/commands/focus.d.ts +2 -3
  35. package/dist/commands/focus.js +34 -9
  36. package/dist/commands/go.js +15 -5
  37. package/dist/commands/harness.d.ts +3 -3
  38. package/dist/commands/harness.js +53 -5
  39. package/dist/commands/hooks.js +1 -1
  40. package/dist/commands/import.js +2 -2
  41. package/dist/commands/insights.d.ts +5 -5
  42. package/dist/commands/insights.js +15 -9
  43. package/dist/commands/inspect.d.ts +2 -3
  44. package/dist/commands/inspect.js +4 -16
  45. package/dist/commands/logs.d.ts +2 -2
  46. package/dist/commands/logs.js +9 -9
  47. package/dist/commands/mcp.js +2 -2
  48. package/dist/commands/memory.js +1 -1
  49. package/dist/commands/message.d.ts +1 -1
  50. package/dist/commands/message.js +7 -7
  51. package/dist/commands/mine.d.ts +11 -8
  52. package/dist/commands/mine.js +11 -10
  53. package/dist/commands/models.js +1 -1
  54. package/dist/commands/modes.js +1 -1
  55. package/dist/commands/monitors.js +23 -6
  56. package/dist/commands/output.d.ts +7 -6
  57. package/dist/commands/output.js +11 -10
  58. package/dist/commands/packages.js +4 -4
  59. package/dist/commands/perf.js +1 -1
  60. package/dist/commands/permissions.js +49 -32
  61. package/dist/commands/plugins.d.ts +1 -1
  62. package/dist/commands/plugins.js +3 -3
  63. package/dist/commands/profiles.d.ts +6 -9
  64. package/dist/commands/profiles.js +8 -321
  65. package/dist/commands/projects.d.ts +9 -0
  66. package/dist/commands/projects.js +140 -8
  67. package/dist/commands/prune.js +5 -13
  68. package/dist/commands/refresh-rules.js +1 -1
  69. package/dist/commands/repo.d.ts +5 -7
  70. package/dist/commands/repo.js +34 -18
  71. package/dist/commands/resource-view.js +4 -0
  72. package/dist/commands/resume.d.ts +11 -7
  73. package/dist/commands/resume.js +82 -98
  74. package/dist/commands/route.d.ts +12 -0
  75. package/dist/commands/route.js +261 -0
  76. package/dist/commands/routines.d.ts +2 -3
  77. package/dist/commands/routines.js +120 -145
  78. package/dist/commands/rules.js +1 -1
  79. package/dist/commands/run-account-picker.d.ts +1 -1
  80. package/dist/commands/run-account-picker.js +2 -2
  81. package/dist/commands/run-broadcast.d.ts +21 -0
  82. package/dist/commands/run-broadcast.js +89 -0
  83. package/dist/commands/run-cloud.js +1 -1
  84. package/dist/commands/secrets-vault.d.ts +10 -0
  85. package/dist/commands/{login.js → secrets-vault.js} +34 -14
  86. package/dist/commands/secrets.d.ts +4 -4
  87. package/dist/commands/secrets.js +72 -63
  88. package/dist/commands/sessions-backfill.js +1 -1
  89. package/dist/commands/sessions-browser.d.ts +1 -1
  90. package/dist/commands/sessions-browser.js +9 -5
  91. package/dist/commands/sessions-export.js +2 -2
  92. package/dist/commands/sessions-inject.js +4 -5
  93. package/dist/commands/sessions-migrate.js +16 -27
  94. package/dist/commands/sessions-picker.d.ts +13 -0
  95. package/dist/commands/sessions-picker.js +182 -8
  96. package/dist/commands/sessions-resume.d.ts +7 -3
  97. package/dist/commands/sessions-resume.js +81 -33
  98. package/dist/commands/sessions-stats.js +2 -2
  99. package/dist/commands/sessions.d.ts +75 -68
  100. package/dist/commands/sessions.js +142 -180
  101. package/dist/commands/setup-computer.js +1 -1
  102. package/dist/commands/setup-fleet.js +3 -0
  103. package/dist/commands/setup-mine.d.ts +7 -3
  104. package/dist/commands/setup-mine.js +13 -8
  105. package/dist/commands/setup-secrets.js +2 -2
  106. package/dist/commands/setup-watchdog.js +2 -2
  107. package/dist/commands/setup.js +7 -2
  108. package/dist/commands/share.d.ts +65 -0
  109. package/dist/commands/share.js +253 -20
  110. package/dist/commands/skills.js +3 -3
  111. package/dist/commands/snapshot.d.ts +2 -2
  112. package/dist/commands/snapshot.js +9 -9
  113. package/dist/commands/ssh.d.ts +1 -1
  114. package/dist/commands/ssh.js +186 -64
  115. package/dist/commands/subagents.js +1 -1
  116. package/dist/commands/sync.js +24 -9
  117. package/dist/commands/teams.d.ts +2 -2
  118. package/dist/commands/teams.js +9 -18
  119. package/dist/commands/tmux.js +5 -1
  120. package/dist/commands/trash.js +1 -1
  121. package/dist/commands/usage.d.ts +1 -1
  122. package/dist/commands/usage.js +2 -2
  123. package/dist/commands/utils.d.ts +4 -14
  124. package/dist/commands/utils.js +6 -27
  125. package/dist/commands/versions.js +2 -2
  126. package/dist/commands/view.d.ts +9 -77
  127. package/dist/commands/view.js +23 -8
  128. package/dist/commands/watchdog.js +1 -1
  129. package/dist/commands/webhook.js +11 -25
  130. package/dist/commands/workflows.js +1 -1
  131. package/dist/index.js +1 -1
  132. package/dist/lib/account-capabilities.d.ts +39 -0
  133. package/dist/lib/account-capabilities.js +59 -0
  134. package/dist/lib/account-catalog.js +1 -1
  135. package/dist/lib/account-registry.d.ts +66 -0
  136. package/dist/lib/account-registry.js +151 -5
  137. package/dist/lib/{rotate.d.ts → accounting/rotate.d.ts} +4 -4
  138. package/dist/lib/{rotate.js → accounting/rotate.js} +8 -8
  139. package/dist/lib/{usage.d.ts → accounting/usage.d.ts} +4 -4
  140. package/dist/lib/{usage.js → accounting/usage.js} +11 -11
  141. package/dist/lib/agent-spec/provider.js +1 -1
  142. package/dist/lib/agents.d.ts +72 -4
  143. package/dist/lib/agents.js +231 -199
  144. package/dist/lib/answer-router.d.ts +2 -2
  145. package/dist/lib/ask-classifier.d.ts +1 -1
  146. package/dist/lib/ask-classifier.js +1 -1
  147. package/dist/lib/audit/log.js +1 -1
  148. package/dist/lib/auth-health.d.ts +1 -1
  149. package/dist/lib/auth-health.js +2 -2
  150. package/dist/lib/brand.js +1 -1
  151. package/dist/lib/browser/caller-identity.d.ts +28 -0
  152. package/dist/lib/browser/caller-identity.js +156 -0
  153. package/dist/lib/browser/cdp.js +1 -1
  154. package/dist/lib/browser/drivers/ssh.d.ts +1 -1
  155. package/dist/lib/browser/drivers/ssh.js +2 -2
  156. package/dist/lib/browser/hygiene.d.ts +10 -2
  157. package/dist/lib/browser/hygiene.js +7 -4
  158. package/dist/lib/browser/ipc.d.ts +22 -2
  159. package/dist/lib/browser/ipc.js +185 -21
  160. package/dist/lib/browser/profiles.d.ts +67 -3
  161. package/dist/lib/browser/profiles.js +129 -7
  162. package/dist/lib/browser/remote-control.d.ts +2 -2
  163. package/dist/lib/browser/remote-control.js +3 -3
  164. package/dist/lib/browser/runtime-state.d.ts +79 -0
  165. package/dist/lib/browser/runtime-state.js +119 -1
  166. package/dist/lib/browser/service.d.ts +113 -1
  167. package/dist/lib/browser/service.js +454 -40
  168. package/dist/lib/browser/sessions-list.d.ts +2 -1
  169. package/dist/lib/browser/sessions-list.js +4 -13
  170. package/dist/lib/browser/types.d.ts +18 -0
  171. package/dist/lib/budget/config.js +1 -1
  172. package/dist/lib/budget/ledger.js +1 -1
  173. package/dist/lib/byok-usage.js +1 -1
  174. package/dist/lib/capabilities.js +3 -15
  175. package/dist/lib/catchup.d.ts +1 -1
  176. package/dist/lib/catchup.js +1 -1
  177. package/dist/lib/cloud/dispatch.js +1 -1
  178. package/dist/lib/cloud/host.d.ts +3 -3
  179. package/dist/lib/cloud/host.js +5 -5
  180. package/dist/lib/cloud/rush.d.ts +9 -21
  181. package/dist/lib/cloud/rush.js +33 -120
  182. package/dist/lib/cloud/types.d.ts +2 -2
  183. package/dist/lib/commands.js +3 -13
  184. package/dist/lib/computer/actions.d.ts +36 -0
  185. package/dist/lib/computer/actions.js +162 -0
  186. package/dist/lib/computer/dispatch.d.ts +2 -2
  187. package/dist/lib/computer/dispatch.js +2 -2
  188. package/dist/lib/computer/sessions-list.d.ts +3 -3
  189. package/dist/lib/computer/sessions-list.js +2 -2
  190. package/dist/lib/config-keys.d.ts +2 -1
  191. package/dist/lib/config-keys.js +8 -4
  192. package/dist/lib/config-machine-keys.d.ts +4 -2
  193. package/dist/lib/config-machine-keys.js +5 -2
  194. package/dist/lib/crabbox/lease.js +9 -1
  195. package/dist/lib/crabbox/runtimes.d.ts +32 -7
  196. package/dist/lib/crabbox/runtimes.js +72 -30
  197. package/dist/lib/{daemon.d.ts → daemon/daemon.d.ts} +59 -1
  198. package/dist/lib/{daemon.js → daemon/daemon.js} +237 -49
  199. package/dist/lib/daemon-services.d.ts +1 -1
  200. package/dist/lib/daemon-services.js +5 -0
  201. package/dist/lib/daemon-ticks.d.ts +25 -0
  202. package/dist/lib/daemon-ticks.js +31 -1
  203. package/dist/lib/daemon-webhooks.d.ts +102 -0
  204. package/dist/lib/daemon-webhooks.js +210 -0
  205. package/dist/lib/device-config.d.ts +85 -75
  206. package/dist/lib/device-config.js +279 -141
  207. package/dist/lib/devices/config-migration.d.ts +29 -34
  208. package/dist/lib/devices/config-migration.js +209 -130
  209. package/dist/lib/devices/connect.d.ts +2 -2
  210. package/dist/lib/devices/connect.js +2 -2
  211. package/dist/lib/devices/discovery-policy.d.ts +30 -0
  212. package/dist/lib/devices/discovery-policy.js +101 -0
  213. package/dist/lib/devices/fleet-inventory.js +8 -3
  214. package/dist/lib/devices/harness-inventory.d.ts +1 -1
  215. package/dist/lib/devices/harness-inventory.js +12 -3
  216. package/dist/lib/devices/known-hosts.js +1 -1
  217. package/dist/lib/devices/pool.d.ts +10 -5
  218. package/dist/lib/devices/pool.js +5 -7
  219. package/dist/lib/devices/registry.d.ts +1 -1
  220. package/dist/lib/devices/registry.js +1 -1
  221. package/dist/lib/devices/resolve-profile.d.ts +2 -2
  222. package/dist/lib/devices/resolve-profile.js +2 -2
  223. package/dist/lib/devices/resolve-target.d.ts +1 -1
  224. package/dist/lib/devices/resolve-target.js +4 -4
  225. package/dist/lib/devices/self-host.d.ts +1 -1
  226. package/dist/lib/devices/self-host.js +3 -3
  227. package/dist/lib/devices/ssh-config.d.ts +1 -1
  228. package/dist/lib/devices/stats-cache.js +1 -1
  229. package/dist/lib/devices/sync.d.ts +3 -1
  230. package/dist/lib/devices/sync.js +3 -3
  231. package/dist/lib/doctor-diff.js +4 -4
  232. package/dist/lib/drift-sync.js +2 -2
  233. package/dist/lib/drift.js +2 -2
  234. package/dist/lib/event-families.d.ts +1 -1
  235. package/dist/lib/event-stream.d.ts +1 -1
  236. package/dist/lib/event-stream.js +2 -2
  237. package/dist/lib/events-ingest.js +2 -2
  238. package/dist/lib/exec.d.ts +4 -4
  239. package/dist/lib/exec.js +11 -11
  240. package/dist/lib/factory/snapshot.d.ts +1 -1
  241. package/dist/lib/factory/snapshot.js +1 -1
  242. package/dist/lib/{activity.d.ts → feed/activity.d.ts} +1 -1
  243. package/dist/lib/{activity.js → feed/activity.js} +7 -7
  244. package/dist/lib/{events.d.ts → feed/events.d.ts} +2 -2
  245. package/dist/lib/{events.js → feed/events.js} +5 -5
  246. package/dist/lib/{feed.js → feed/feed.js} +4 -4
  247. package/dist/lib/feed-outcome.d.ts +1 -1
  248. package/dist/lib/feed-policy.d.ts +1 -1
  249. package/dist/lib/feed-policy.js +1 -1
  250. package/dist/lib/feed-post.d.ts +1 -1
  251. package/dist/lib/feed-post.js +1 -1
  252. package/dist/lib/feed-ranking.d.ts +1 -1
  253. package/dist/lib/fleet/apply.d.ts +0 -6
  254. package/dist/lib/fleet/apply.js +18 -45
  255. package/dist/lib/fleet/auth-sync.d.ts +16 -35
  256. package/dist/lib/fleet/auth-sync.js +16 -75
  257. package/dist/lib/fleet/capture.js +8 -6
  258. package/dist/lib/fleet/manifest.js +23 -11
  259. package/dist/lib/fleet/types.d.ts +19 -7
  260. package/dist/lib/fleet-cache.d.ts +1 -1
  261. package/dist/lib/fleet-cache.js +1 -1
  262. package/dist/lib/format.d.ts +19 -0
  263. package/dist/lib/format.js +44 -1
  264. package/dist/lib/friction-heuristics.d.ts +1 -1
  265. package/dist/lib/git.d.ts +24 -1
  266. package/dist/lib/git.js +82 -38
  267. package/dist/lib/heal.js +3 -3
  268. package/dist/lib/hooks.d.ts +18 -0
  269. package/dist/lib/hooks.js +113 -1
  270. package/dist/lib/hosts/credentials.d.ts +30 -10
  271. package/dist/lib/hosts/credentials.js +38 -26
  272. package/dist/lib/hosts/dispatch.d.ts +3 -3
  273. package/dist/lib/hosts/dispatch.js +3 -3
  274. package/dist/lib/hosts/option.d.ts +3 -3
  275. package/dist/lib/hosts/option.js +7 -8
  276. package/dist/lib/hosts/passthrough.d.ts +17 -17
  277. package/dist/lib/hosts/passthrough.js +67 -50
  278. package/dist/lib/hosts/providers/devices.d.ts +1 -1
  279. package/dist/lib/hosts/providers/devices.js +1 -1
  280. package/dist/lib/hosts/reconcile.d.ts +1 -1
  281. package/dist/lib/hosts/reconcile.js +1 -1
  282. package/dist/lib/hosts/reconnect.d.ts +1 -1
  283. package/dist/lib/hosts/reconnect.js +2 -2
  284. package/dist/lib/hosts/registry.d.ts +5 -5
  285. package/dist/lib/hosts/registry.js +5 -5
  286. package/dist/lib/hosts/remote-cmd.d.ts +10 -10
  287. package/dist/lib/hosts/remote-cmd.js +25 -18
  288. package/dist/lib/hosts/remote-os.d.ts +4 -4
  289. package/dist/lib/hosts/remote-os.js +4 -4
  290. package/dist/lib/hosts/remote-session-id.d.ts +2 -2
  291. package/dist/lib/hosts/remote-session-id.js +2 -2
  292. package/dist/lib/hosts/routing-flag.d.ts +3 -3
  293. package/dist/lib/hosts/routing-flag.js +4 -5
  294. package/dist/lib/hosts/run-target.d.ts +4 -4
  295. package/dist/lib/hosts/run-target.js +4 -4
  296. package/dist/lib/hosts/session-index.d.ts +2 -2
  297. package/dist/lib/hosts/session-index.js +1 -1
  298. package/dist/lib/hosts/session-marker.d.ts +1 -1
  299. package/dist/lib/hosts/session-marker.js +1 -1
  300. package/dist/lib/hosts/types.d.ts +2 -2
  301. package/dist/lib/hosts/types.js +2 -2
  302. package/dist/lib/import.js +1 -1
  303. package/dist/lib/{migrate.d.ts → installations/migrate.d.ts} +13 -1
  304. package/dist/lib/{migrate.js → installations/migrate.js} +160 -40
  305. package/dist/lib/installations/resolve.js +1 -1
  306. package/dist/lib/installations/strategies.js +1 -1
  307. package/dist/lib/installations/update.js +2 -2
  308. package/dist/lib/{versions.d.ts → installations/versions.d.ts} +12 -3
  309. package/dist/lib/{versions.js → installations/versions.js} +51 -31
  310. package/dist/lib/isolation-boundary-report.js +1 -1
  311. package/dist/lib/linear-projects.d.ts +28 -0
  312. package/dist/lib/linear-projects.js +30 -0
  313. package/dist/lib/loop.js +1 -1
  314. package/dist/lib/mailbox-gc.js +1 -1
  315. package/dist/lib/mailbox.js +1 -1
  316. package/dist/lib/mcp-registry.d.ts +62 -0
  317. package/dist/lib/mcp-registry.js +177 -0
  318. package/dist/lib/mcp.d.ts +5 -0
  319. package/dist/lib/mcp.js +124 -307
  320. package/dist/lib/menubar/MenubarHelper.app/Contents/CodeResources +0 -0
  321. package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
  322. package/dist/lib/menubar/install-menubar.d.ts +7 -0
  323. package/dist/lib/menubar/install-menubar.js +24 -6
  324. package/dist/lib/menubar/snapshot.d.ts +7 -0
  325. package/dist/lib/menubar/snapshot.js +8 -6
  326. package/dist/lib/models.js +1 -1
  327. package/dist/lib/monitors/config.d.ts +12 -0
  328. package/dist/lib/monitors/config.js +3 -0
  329. package/dist/lib/monitors/dispatch.js +26 -5
  330. package/dist/lib/monitors/engine.js +10 -0
  331. package/dist/lib/monitors/sources/webhook.d.ts +1 -1
  332. package/dist/lib/monitors/state.d.ts +42 -0
  333. package/dist/lib/monitors/state.js +30 -0
  334. package/dist/lib/notify.d.ts +1 -1
  335. package/dist/lib/observe-aliases.d.ts +2 -2
  336. package/dist/lib/observe-aliases.js +2 -11
  337. package/dist/lib/output/git-output.js +2 -2
  338. package/dist/lib/overdue.d.ts +1 -1
  339. package/dist/lib/overdue.js +1 -1
  340. package/dist/lib/permissions-registry.d.ts +65 -0
  341. package/dist/lib/permissions-registry.js +599 -0
  342. package/dist/lib/permissions.d.ts +24 -13
  343. package/dist/lib/permissions.js +52 -271
  344. package/dist/lib/picker.d.ts +16 -0
  345. package/dist/lib/picker.js +33 -3
  346. package/dist/lib/placement.d.ts +1 -1
  347. package/dist/lib/placement.js +4 -4
  348. package/dist/lib/platform/paths.d.ts +8 -0
  349. package/dist/lib/platform/paths.js +11 -0
  350. package/dist/lib/platform/posixpath.js +3 -3
  351. package/dist/lib/{plugin-marketplace.d.ts → plugins/plugin-marketplace.d.ts} +1 -1
  352. package/dist/lib/{plugin-marketplace.js → plugins/plugin-marketplace.js} +2 -2
  353. package/dist/lib/{plugins.d.ts → plugins/plugins.d.ts} +1 -1
  354. package/dist/lib/{plugins.js → plugins/plugins.js} +7 -7
  355. package/dist/lib/{skills.d.ts → plugins/skills.d.ts} +1 -1
  356. package/dist/lib/{skills.js → plugins/skills.js} +7 -7
  357. package/dist/lib/pricing/cost.d.ts +1 -1
  358. package/dist/lib/pricing/cost.js +1 -1
  359. package/dist/lib/profiles-presets.d.ts +1 -1
  360. package/dist/lib/profiles-presets.js +1 -1
  361. package/dist/lib/profiles.js +2 -2
  362. package/dist/lib/project-import.js +4 -1
  363. package/dist/lib/project-launch.d.ts +1 -1
  364. package/dist/lib/project-launch.js +3 -3
  365. package/dist/lib/project-pull.d.ts +128 -0
  366. package/dist/lib/project-pull.js +384 -0
  367. package/dist/lib/project-root.d.ts +2 -2
  368. package/dist/lib/project-root.js +2 -2
  369. package/dist/lib/project-status.js +1 -1
  370. package/dist/lib/projects.d.ts +23 -0
  371. package/dist/lib/projects.js +29 -6
  372. package/dist/lib/refresh.d.ts +12 -1
  373. package/dist/lib/refresh.js +16 -9
  374. package/dist/lib/registry.d.ts +9 -2
  375. package/dist/lib/registry.js +11 -4
  376. package/dist/lib/resources.d.ts +2 -2
  377. package/dist/lib/resources.js +2 -2
  378. package/dist/lib/routers.d.ts +81 -0
  379. package/dist/lib/routers.js +153 -0
  380. package/dist/lib/routine-context.d.ts +1 -0
  381. package/dist/lib/routine-context.js +7 -2
  382. package/dist/lib/routine-notify-owner.d.ts +1 -1
  383. package/dist/lib/routine-notify.d.ts +1 -1
  384. package/dist/lib/routine-notify.js +1 -1
  385. package/dist/lib/routine-process-cleanup.d.ts +1 -1
  386. package/dist/lib/routine-readiness.d.ts +1 -1
  387. package/dist/lib/routine-readiness.js +11 -4
  388. package/dist/lib/routines-placement.d.ts +12 -2
  389. package/dist/lib/routines-placement.js +20 -3
  390. package/dist/lib/routines-project.d.ts +1 -1
  391. package/dist/lib/routines-project.js +1 -1
  392. package/dist/lib/rules/compile.d.ts +1 -0
  393. package/dist/lib/rules/compile.js +10 -2
  394. package/dist/lib/rules/rules.js +1 -1
  395. package/dist/lib/run-notify.js +1 -1
  396. package/dist/lib/runner.d.ts +80 -2
  397. package/dist/lib/runner.js +241 -62
  398. package/dist/lib/sandbox.d.ts +1 -1
  399. package/dist/lib/scheduler.d.ts +1 -1
  400. package/dist/lib/scheduler.js +1 -1
  401. package/dist/lib/{routines.d.ts → scheduling/routines.d.ts} +54 -9
  402. package/dist/lib/{routines.js → scheduling/routines.js} +173 -14
  403. package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
  404. package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
  405. package/dist/lib/secrets/agent.js +2 -2
  406. package/dist/lib/secrets/audit.js +1 -1
  407. package/dist/lib/secrets/bundles.d.ts +3 -3
  408. package/dist/lib/secrets/bundles.js +7 -7
  409. package/dist/lib/secrets/index.js +1 -1
  410. package/dist/lib/secrets/list-filter.d.ts +1 -1
  411. package/dist/lib/secrets/list-filter.js +2 -2
  412. package/dist/lib/secrets/push.d.ts +1 -1
  413. package/dist/lib/secrets/push.js +10 -12
  414. package/dist/lib/secrets/remote.d.ts +12 -10
  415. package/dist/lib/secrets/remote.js +21 -14
  416. package/dist/lib/secrets/vault.js +2 -2
  417. package/dist/lib/self-heal/checks/shadowing.js +1 -1
  418. package/dist/lib/self-heal/checks/shims.js +1 -1
  419. package/dist/lib/self-update.d.ts +39 -4
  420. package/dist/lib/self-update.js +78 -25
  421. package/dist/lib/serve/control.d.ts +1 -1
  422. package/dist/lib/serve/control.js +4 -4
  423. package/dist/lib/serve/data.d.ts +1 -1
  424. package/dist/lib/serve/data.js +1 -1
  425. package/dist/lib/serve/stream.js +1 -1
  426. package/dist/lib/service-manifest.d.ts +29 -0
  427. package/dist/lib/service-manifest.js +80 -0
  428. package/dist/lib/session/active.d.ts +59 -7
  429. package/dist/lib/session/active.js +158 -17
  430. package/dist/lib/session/bash-command.js +1 -1
  431. package/dist/lib/session/claude-accounts.d.ts +1 -1
  432. package/dist/lib/session/claude-accounts.js +1 -1
  433. package/dist/lib/session/db.d.ts +10 -2
  434. package/dist/lib/session/db.js +25 -6
  435. package/dist/lib/session/discover.d.ts +77 -0
  436. package/dist/lib/session/discover.js +130 -25
  437. package/dist/lib/session/fork.js +1 -1
  438. package/dist/lib/session/inject.d.ts +1 -1
  439. package/dist/lib/session/insights.d.ts +1 -1
  440. package/dist/lib/session/insights.js +1 -1
  441. package/dist/lib/session/live-metadata.d.ts +15 -0
  442. package/dist/lib/session/live-metadata.js +76 -0
  443. package/dist/lib/session/migrate-targets.d.ts +1 -1
  444. package/dist/lib/session/recovery.d.ts +1 -1
  445. package/dist/lib/session/recovery.js +2 -2
  446. package/dist/lib/session/remote-active.d.ts +10 -1
  447. package/dist/lib/session/remote-active.js +8 -3
  448. package/dist/lib/session/remote-bundle.d.ts +1 -1
  449. package/dist/lib/session/remote-bundle.js +2 -2
  450. package/dist/lib/session/remote-list.d.ts +15 -4
  451. package/dist/lib/session/remote-list.js +40 -3
  452. package/dist/lib/session/remote.d.ts +5 -5
  453. package/dist/lib/session/remote.js +13 -17
  454. package/dist/lib/session/resume-command.d.ts +3 -2
  455. package/dist/lib/session/resume-command.js +4 -3
  456. package/dist/lib/session/resume-owner.d.ts +3 -3
  457. package/dist/lib/session/resume-owner.js +3 -3
  458. package/dist/lib/session/session-cache.d.ts +12 -0
  459. package/dist/lib/session/session-cache.js +2 -0
  460. package/dist/lib/session/shell-programs.js +1 -1
  461. package/dist/lib/session/state.js +5 -5
  462. package/dist/lib/session/team-filter.d.ts +1 -1
  463. package/dist/lib/session/team-filter.js +1 -1
  464. package/dist/lib/session/types.d.ts +3 -3
  465. package/dist/lib/session/width.d.ts +2 -2
  466. package/dist/lib/session/width.js +2 -2
  467. package/dist/lib/share/delete.d.ts +21 -0
  468. package/dist/lib/share/delete.js +42 -0
  469. package/dist/lib/share/publish.d.ts +82 -0
  470. package/dist/lib/share/publish.js +170 -18
  471. package/dist/lib/share/worker-template.js +172 -9
  472. package/dist/lib/shims.js +35 -7
  473. package/dist/lib/smart-launch.d.ts +4 -4
  474. package/dist/lib/smart-launch.js +6 -4
  475. package/dist/lib/snapshot.d.ts +4 -4
  476. package/dist/lib/snapshot.js +2 -2
  477. package/dist/lib/ssh-exec.d.ts +1 -1
  478. package/dist/lib/ssh-exec.js +2 -2
  479. package/dist/lib/ssh-tunnel.d.ts +10 -10
  480. package/dist/lib/ssh-tunnel.js +12 -12
  481. package/dist/lib/staleness/checkers/hooks.d.ts +1 -1
  482. package/dist/lib/staleness/checkers/hooks.js +1 -1
  483. package/dist/lib/staleness/detectors/permissions.js +0 -23
  484. package/dist/lib/staleness/detectors/plugins.js +1 -1
  485. package/dist/lib/staleness/fingerprint.js +1 -1
  486. package/dist/lib/staleness/layers.d.ts +1 -1
  487. package/dist/lib/staleness/layers.js +1 -1
  488. package/dist/lib/staleness/writers/mcp.js +3 -1
  489. package/dist/lib/staleness/writers/plugins.js +1 -1
  490. package/dist/lib/staleness/writers/types.d.ts +8 -0
  491. package/dist/lib/startup/command-registry.d.ts +5 -147
  492. package/dist/lib/startup/command-registry.js +38 -303
  493. package/dist/lib/startup/dev-build.d.ts +0 -21
  494. package/dist/lib/startup/dev-build.js +29 -8
  495. package/dist/lib/state.d.ts +19 -1
  496. package/dist/lib/state.js +120 -51
  497. package/dist/lib/subagents.js +1 -1
  498. package/dist/lib/sync-status.js +1 -1
  499. package/dist/lib/sync-umbrella.d.ts +6 -1
  500. package/dist/lib/sync-umbrella.js +9 -4
  501. package/dist/lib/teams/agents.js +2 -2
  502. package/dist/lib/teams/registry.js +1 -1
  503. package/dist/lib/terminal/backends/vscodium-agent.js +1 -1
  504. package/dist/lib/terminal/engine.js +1 -1
  505. package/dist/lib/terminal/index.d.ts +4 -0
  506. package/dist/lib/terminal/index.js +3 -0
  507. package/dist/lib/terminal/inject.d.ts +2 -2
  508. package/dist/lib/terminal/inject.js +2 -2
  509. package/dist/lib/terminal/transport.js +1 -1
  510. package/dist/lib/tmux/index.d.ts +1 -1
  511. package/dist/lib/tmux/index.js +1 -1
  512. package/dist/lib/tmux/session.d.ts +21 -5
  513. package/dist/lib/tmux/session.js +76 -22
  514. package/dist/lib/triggers/handlers.d.ts +1 -1
  515. package/dist/lib/triggers/handlers.js +2 -2
  516. package/dist/lib/triggers/webhook.d.ts +36 -2
  517. package/dist/lib/triggers/webhook.js +97 -42
  518. package/dist/lib/types.d.ts +18 -6
  519. package/dist/lib/usage-fleet.d.ts +1 -1
  520. package/dist/lib/usage-fleet.js +1 -1
  521. package/dist/lib/usage-refresh.d.ts +1 -1
  522. package/dist/lib/usage-refresh.js +3 -3
  523. package/dist/lib/version-duplicates.js +2 -2
  524. package/dist/lib/view-types.d.ts +56 -0
  525. package/dist/lib/view-types.js +1 -0
  526. package/dist/lib/watchdog/rotate.d.ts +2 -2
  527. package/dist/lib/watchdog/rotate.js +3 -3
  528. package/dist/lib/watchdog/runner.d.ts +2 -3
  529. package/dist/lib/watchdog/runner.js +3 -4
  530. package/dist/lib/workflows.js +1 -1
  531. package/package.json +2 -1
  532. package/scripts/postinstall.js +2 -2
  533. package/dist/commands/bench.d.ts +0 -2
  534. package/dist/commands/bench.js +0 -101
  535. package/dist/commands/cp.d.ts +0 -84
  536. package/dist/commands/cp.js +0 -231
  537. package/dist/commands/login.d.ts +0 -2
  538. package/dist/lib/resources/commands.d.ts +0 -46
  539. package/dist/lib/resources/commands.js +0 -211
  540. package/dist/lib/resources/hooks.d.ts +0 -16
  541. package/dist/lib/resources/hooks.js +0 -153
  542. package/dist/lib/resources/mcp.d.ts +0 -34
  543. package/dist/lib/resources/mcp.js +0 -250
  544. package/dist/lib/resources/memory.d.ts +0 -15
  545. package/dist/lib/resources/memory.js +0 -46
  546. package/dist/lib/resources/permissions.d.ts +0 -13
  547. package/dist/lib/resources/permissions.js +0 -202
  548. package/dist/lib/resources/rules.d.ts +0 -46
  549. package/dist/lib/resources/rules.js +0 -179
  550. package/dist/lib/resources/skills.d.ts +0 -37
  551. package/dist/lib/resources/skills.js +0 -247
  552. package/dist/lib/resources/subagents.d.ts +0 -46
  553. package/dist/lib/resources/subagents.js +0 -202
  554. /package/dist/lib/{feed.d.ts → feed/feed.d.ts} +0 -0
@@ -1,211 +0,0 @@
1
- /**
2
- * Commands resource handler.
3
- *
4
- * Commands are slash-command definitions stored as .md files (Claude/Codex/Cursor/OpenCode)
5
- * or .toml files (Gemini). This handler resolves commands across layers (project > user > system),
6
- * handles format conversion during sync, and provides consistent list/resolve/sync behavior.
7
- */
8
- import * as fs from 'fs';
9
- import * as path from 'path';
10
- import { getProjectAgentsDir, getUserAgentsDir, getSystemAgentsDir, getEnabledExtraRepos, } from '../state.js';
11
- import { AGENTS, agentConfigDirName, isAgentHardDeprecated } from '../agents.js';
12
- import { markdownToToml } from '../convert.js';
13
- /**
14
- * Get the commands directory for a given layer root.
15
- */
16
- function getCommandsDirForRoot(root) {
17
- return path.join(root, 'commands');
18
- }
19
- /**
20
- * Parse a command file and extract metadata.
21
- */
22
- function parseCommandFile(filePath) {
23
- if (!fs.existsSync(filePath))
24
- return null;
25
- try {
26
- const content = fs.readFileSync(filePath, 'utf-8');
27
- const format = filePath.endsWith('.toml') ? 'toml' : 'md';
28
- const name = path.basename(filePath).replace(/\.(md|toml)$/, '');
29
- let description = '';
30
- if (format === 'md') {
31
- // Parse YAML frontmatter for description
32
- const lines = content.split('\n');
33
- if (lines[0] === '---') {
34
- const endIndex = lines.slice(1).findIndex((l) => l === '---');
35
- if (endIndex > 0) {
36
- const frontmatter = lines.slice(1, endIndex + 1).join('\n');
37
- const descMatch = frontmatter.match(/description:\s*(.+)/i);
38
- if (descMatch)
39
- description = descMatch[1].trim();
40
- }
41
- }
42
- }
43
- else {
44
- // Parse TOML for description
45
- const descMatch = content.match(/description\s*=\s*"([^"]+)"/);
46
- if (descMatch)
47
- description = descMatch[1];
48
- }
49
- return { name, description, content, format };
50
- }
51
- catch {
52
- return null;
53
- }
54
- }
55
- /**
56
- * List command files in a directory.
57
- */
58
- function listCommandsInDir(dir) {
59
- if (!fs.existsSync(dir))
60
- return [];
61
- try {
62
- const entries = fs.readdirSync(dir, { withFileTypes: true });
63
- const commands = [];
64
- for (const entry of entries) {
65
- if (entry.isFile()) {
66
- if (entry.name.endsWith('.md')) {
67
- commands.push({
68
- name: entry.name.replace('.md', ''),
69
- path: path.join(dir, entry.name),
70
- format: 'md',
71
- });
72
- }
73
- else if (entry.name.endsWith('.toml')) {
74
- commands.push({
75
- name: entry.name.replace('.toml', ''),
76
- path: path.join(dir, entry.name),
77
- format: 'toml',
78
- });
79
- }
80
- }
81
- }
82
- return commands;
83
- }
84
- catch {
85
- return [];
86
- }
87
- }
88
- /**
89
- * Commands resource handler implementing ResourceHandler<CommandItem>.
90
- */
91
- export class CommandsHandler {
92
- kind = 'command';
93
- /**
94
- * List all commands across layers, with higher layer winning on name conflict.
95
- * Returns a union of all commands, deduplicated by name.
96
- */
97
- listAll(agent, cwd) {
98
- const seen = new Set();
99
- const results = [];
100
- const projectDir = getProjectAgentsDir(cwd);
101
- const extraRepos = getEnabledExtraRepos();
102
- // Build layer roots in precedence order: project > user > system > extras
103
- const roots = [];
104
- if (projectDir) {
105
- roots.push({ dir: getCommandsDirForRoot(projectDir), layer: 'project' });
106
- }
107
- roots.push({ dir: getCommandsDirForRoot(getUserAgentsDir()), layer: 'user' });
108
- roots.push({ dir: getCommandsDirForRoot(getSystemAgentsDir()), layer: 'system' });
109
- for (const extra of extraRepos) {
110
- roots.push({ dir: getCommandsDirForRoot(extra.dir), layer: 'system' });
111
- }
112
- for (const { dir, layer } of roots) {
113
- const commands = listCommandsInDir(dir);
114
- for (const cmd of commands) {
115
- if (seen.has(cmd.name))
116
- continue;
117
- seen.add(cmd.name);
118
- const item = parseCommandFile(cmd.path);
119
- if (item) {
120
- results.push({
121
- name: cmd.name,
122
- item,
123
- layer,
124
- path: cmd.path,
125
- });
126
- }
127
- }
128
- }
129
- return results;
130
- }
131
- /**
132
- * Resolve a single command by name.
133
- * Returns the winning layer's version, or null if not found.
134
- */
135
- resolve(agent, name, cwd) {
136
- const projectDir = getProjectAgentsDir(cwd);
137
- const extraRepos = getEnabledExtraRepos();
138
- // Build candidate paths in precedence order
139
- const candidates = [];
140
- if (projectDir) {
141
- candidates.push({ dir: getCommandsDirForRoot(projectDir), layer: 'project' });
142
- }
143
- candidates.push({ dir: getCommandsDirForRoot(getUserAgentsDir()), layer: 'user' });
144
- candidates.push({ dir: getCommandsDirForRoot(getSystemAgentsDir()), layer: 'system' });
145
- for (const extra of extraRepos) {
146
- candidates.push({ dir: getCommandsDirForRoot(extra.dir), layer: 'system' });
147
- }
148
- for (const { dir, layer } of candidates) {
149
- // Try .md first, then .toml
150
- for (const ext of ['.md', '.toml']) {
151
- const filePath = path.join(dir, `${name}${ext}`);
152
- const item = parseCommandFile(filePath);
153
- if (item) {
154
- return { name, item, layer, path: filePath };
155
- }
156
- }
157
- }
158
- return null;
159
- }
160
- /**
161
- * Sync resolved commands to the agent's version home directory.
162
- * Copies/transforms commands as needed for the agent's expected format.
163
- */
164
- sync(agent, versionHome, cwd) {
165
- if (isAgentHardDeprecated(agent)) {
166
- return;
167
- }
168
- const agentConfig = AGENTS[agent];
169
- const targetFormat = this.format(agent);
170
- const targetDir = path.join(versionHome, agentConfigDirName(agent), this.targetDir(agent));
171
- // Ensure target directory exists
172
- fs.mkdirSync(targetDir, { recursive: true });
173
- // Get all resolved commands
174
- const commands = this.listAll(agent, cwd);
175
- for (const resolved of commands) {
176
- const ext = targetFormat === 'toml' ? '.toml' : '.md';
177
- const targetPath = path.join(targetDir, `${resolved.name}${ext}`);
178
- // Convert format if needed
179
- if (targetFormat === 'toml' && resolved.item.format === 'md') {
180
- // Convert markdown to TOML
181
- const tomlContent = markdownToToml(resolved.name, resolved.item.content);
182
- fs.writeFileSync(targetPath, tomlContent, 'utf-8');
183
- }
184
- else if (targetFormat === 'md' && resolved.item.format === 'toml') {
185
- // For now, copy TOML as-is if target expects md (edge case)
186
- // In practice, source commands are always .md
187
- fs.copyFileSync(resolved.path, targetPath);
188
- }
189
- else {
190
- // Same format, copy directly
191
- fs.copyFileSync(resolved.path, targetPath);
192
- }
193
- }
194
- }
195
- /**
196
- * Get the file format this resource uses for a given agent.
197
- */
198
- format(agent) {
199
- const agentConfig = AGENTS[agent];
200
- return agentConfig.format === 'toml' ? 'toml' : 'md';
201
- }
202
- /**
203
- * Get the target directory name in the agent's version home.
204
- */
205
- targetDir(agent) {
206
- const agentConfig = AGENTS[agent];
207
- return agentConfig.commandsSubdir || 'commands';
208
- }
209
- }
210
- /** Singleton instance of the commands handler. */
211
- export const commandsHandler = new CommandsHandler();
@@ -1,16 +0,0 @@
1
- /**
2
- * HooksHandler - ResourceHandler implementation for hooks.
3
- *
4
- * Hook declarations live in:
5
- * - System: ~/.agents/.system/hooks.yaml (npm-shipped defaults)
6
- * - User: `hooks:` section of ~/.agents/agents.yaml
7
- * - Project: <project>/.agents/hooks.yaml
8
- *
9
- * Resolution: project > user > system (higher layer wins on name conflict).
10
- * Non-conflicting hooks from all layers are unioned together.
11
- */
12
- import type { ResourceHandler } from './types.js';
13
- import type { ManifestHook } from '../types.js';
14
- export type HookItem = ManifestHook;
15
- export declare const HooksHandler: ResourceHandler<HookItem>;
16
- export default HooksHandler;
@@ -1,153 +0,0 @@
1
- /**
2
- * HooksHandler - ResourceHandler implementation for hooks.
3
- *
4
- * Hook declarations live in:
5
- * - System: ~/.agents/.system/hooks.yaml (npm-shipped defaults)
6
- * - User: `hooks:` section of ~/.agents/agents.yaml
7
- * - Project: <project>/.agents/hooks.yaml
8
- *
9
- * Resolution: project > user > system (higher layer wins on name conflict).
10
- * Non-conflicting hooks from all layers are unioned together.
11
- */
12
- import * as fs from 'fs';
13
- import * as path from 'path';
14
- import * as yaml from 'yaml';
15
- import { getSystemAgentsDir, getUserAgentsDir, getProjectAgentsDir, } from '../state.js';
16
- /**
17
- * Get the hook manifest path for a layer dir. The user layer reads from
18
- * agents.yaml (hooks: section) since that's where user hooks now live.
19
- * Other layers continue to use a standalone hooks.yaml.
20
- */
21
- function getHooksYamlPath(layerDir) {
22
- if (layerDir === getUserAgentsDir()) {
23
- return path.join(layerDir, 'agents.yaml');
24
- }
25
- return path.join(layerDir, 'hooks.yaml');
26
- }
27
- /**
28
- * Parse hooks for a layer directory.
29
- * - User layer: read `hooks:` section from agents.yaml.
30
- * - System / project layer: read top-level map from hooks.yaml.
31
- * Returns empty object if file doesn't exist or is invalid.
32
- */
33
- function parseHooksYaml(dir) {
34
- const manifestPath = getHooksYamlPath(dir);
35
- if (!fs.existsSync(manifestPath)) {
36
- return {};
37
- }
38
- try {
39
- const content = fs.readFileSync(manifestPath, 'utf-8');
40
- const parsed = yaml.parse(content);
41
- if (!parsed)
42
- return {};
43
- if (dir === getUserAgentsDir()) {
44
- const hooks = parsed.hooks;
45
- return (hooks && typeof hooks === 'object') ? hooks : {};
46
- }
47
- return parsed;
48
- }
49
- catch {
50
- return {};
51
- }
52
- }
53
- /**
54
- * Get layer directories for hook resolution.
55
- */
56
- function getLayerDirs(cwd) {
57
- return {
58
- system: getSystemAgentsDir(),
59
- user: getUserAgentsDir(),
60
- project: cwd ? getProjectAgentsDir(cwd) : null,
61
- extra: [],
62
- };
63
- }
64
- export const HooksHandler = {
65
- kind: 'hook',
66
- /**
67
- * List all hooks across layers, with higher layer winning on name conflict.
68
- * Returns a union of all hooks, deduplicated by name.
69
- */
70
- listAll(agent, cwd) {
71
- const layers = getLayerDirs(cwd);
72
- const result = new Map();
73
- // Process in precedence order: system first (lowest), then user, then project (highest)
74
- const layerOrder = [
75
- { layer: 'system', dir: layers.system },
76
- { layer: 'user', dir: layers.user },
77
- { layer: 'project', dir: layers.project },
78
- ];
79
- for (const { layer, dir } of layerOrder) {
80
- if (!dir)
81
- continue;
82
- const hooks = parseHooksYaml(dir);
83
- for (const [name, hook] of Object.entries(hooks)) {
84
- // Skip disabled hooks
85
- if (hook.enabled === false) {
86
- result.delete(name);
87
- continue;
88
- }
89
- result.set(name, {
90
- name,
91
- item: hook,
92
- layer,
93
- path: getHooksYamlPath(dir),
94
- });
95
- }
96
- }
97
- return Array.from(result.values()).sort((a, b) => a.name.localeCompare(b.name));
98
- },
99
- /**
100
- * Resolve a single hook by name.
101
- * Returns the winning layer's version, or null if not found.
102
- */
103
- resolve(agent, name, cwd) {
104
- const layers = getLayerDirs(cwd);
105
- // Check in reverse precedence order: project first (highest), then user, then system
106
- const layerOrder = [
107
- { layer: 'project', dir: layers.project },
108
- { layer: 'user', dir: layers.user },
109
- { layer: 'system', dir: layers.system },
110
- ];
111
- for (const { layer, dir } of layerOrder) {
112
- if (!dir)
113
- continue;
114
- const hooks = parseHooksYaml(dir);
115
- const hook = hooks[name];
116
- if (hook) {
117
- // If this layer disables the hook, return null (disabled trumps lower layers)
118
- if (hook.enabled === false) {
119
- return null;
120
- }
121
- return {
122
- name,
123
- item: hook,
124
- layer,
125
- path: getHooksYamlPath(dir),
126
- };
127
- }
128
- }
129
- return null;
130
- },
131
- /**
132
- * Sync resolved hooks to the agent's version home directory.
133
- * Note: Actual hook registration is handled by registerHooksToSettings in hooks.ts.
134
- * This method is a no-op placeholder for the interface contract.
135
- */
136
- sync(_agent, _versionHome, _cwd) {
137
- // Hook syncing is done via registerHooksToSettings in the main hooks.ts module.
138
- // This handler only provides resolution; registration is a separate concern.
139
- },
140
- /**
141
- * Hooks use YAML format across all agents.
142
- */
143
- format(_agent) {
144
- return 'yaml';
145
- },
146
- /**
147
- * Hooks are stored in the hooks directory.
148
- */
149
- targetDir(_agent) {
150
- return 'hooks';
151
- },
152
- };
153
- export default HooksHandler;
@@ -1,34 +0,0 @@
1
- /**
2
- * MCP resource handler - lists, resolves, and syncs MCP server configs across layers.
3
- *
4
- * MCP servers are stored as YAML files in mcp/ directories:
5
- * ~/.agents/.system/mcp/ (system)
6
- * ~/.agents/mcp/ (user)
7
- * .agents/mcp/ (project)
8
- *
9
- * Resolution: project > user > system (higher layer wins on name conflict).
10
- * Sync writes into agent-specific config files (settings.json, config.toml, etc).
11
- */
12
- import type { AgentId, ResourceHandler } from './types.js';
13
- /**
14
- * MCP server item as stored in mcp/*.yaml files.
15
- */
16
- export interface McpItem {
17
- name: string;
18
- transport: 'stdio' | 'http' | 'sse';
19
- command?: string;
20
- args?: string[];
21
- env?: Record<string, string>;
22
- url?: string;
23
- headers?: Record<string, string>;
24
- }
25
- /**
26
- * Get the config file path for MCP for a given agent.
27
- * Different agents use different config formats and locations.
28
- */
29
- export declare function getMcpConfigPath(agent: AgentId, versionHome: string): string | null;
30
- /**
31
- * MCP resource handler implementing ResourceHandler<McpItem>.
32
- */
33
- export declare const McpHandler: ResourceHandler<McpItem>;
34
- export default McpHandler;
@@ -1,250 +0,0 @@
1
- /**
2
- * MCP resource handler - lists, resolves, and syncs MCP server configs across layers.
3
- *
4
- * MCP servers are stored as YAML files in mcp/ directories:
5
- * ~/.agents/.system/mcp/ (system)
6
- * ~/.agents/mcp/ (user)
7
- * .agents/mcp/ (project)
8
- *
9
- * Resolution: project > user > system (higher layer wins on name conflict).
10
- * Sync writes into agent-specific config files (settings.json, config.toml, etc).
11
- */
12
- import * as fs from 'fs';
13
- import * as path from 'path';
14
- import * as yaml from 'yaml';
15
- import { capableAgents } from '../capabilities.js';
16
- import { getProjectMcpConfigPath } from '../agents.js';
17
- import { writeMcpConfig } from '../mcp.js';
18
- import { getSystemMcpDir, getUserMcpDir, getProjectAgentsDir, getEnabledExtraRepos, } from '../state.js';
19
- /**
20
- * Parse an MCP YAML file into an McpItem.
21
- */
22
- function parseMcpYaml(filePath) {
23
- if (!fs.existsSync(filePath)) {
24
- return null;
25
- }
26
- try {
27
- const content = fs.readFileSync(filePath, 'utf-8');
28
- const parsed = yaml.parse(content);
29
- if (!parsed || typeof parsed !== 'object') {
30
- return null;
31
- }
32
- // Validate required fields
33
- if (!parsed.name || !parsed.transport) {
34
- return null;
35
- }
36
- // Validate transport-specific fields
37
- if (parsed.transport === 'stdio' && !parsed.command) {
38
- return null;
39
- }
40
- if ((parsed.transport === 'http' || parsed.transport === 'sse') && !parsed.url) {
41
- return null;
42
- }
43
- return {
44
- name: parsed.name,
45
- transport: parsed.transport,
46
- command: parsed.command,
47
- args: parsed.args,
48
- env: parsed.env,
49
- url: parsed.url,
50
- headers: parsed.headers,
51
- };
52
- }
53
- catch {
54
- return null;
55
- }
56
- }
57
- /**
58
- * Get layer directories for MCP resolution.
59
- */
60
- function getLayerDirs(cwd) {
61
- const dirs = [];
62
- // Project layer (highest priority)
63
- const projectDir = getProjectAgentsDir(cwd || process.cwd());
64
- if (projectDir) {
65
- dirs.push({ layer: 'project', dir: path.join(projectDir, 'mcp') });
66
- }
67
- // User layer
68
- dirs.push({ layer: 'user', dir: getUserMcpDir() });
69
- // Extra repos (between user and system)
70
- for (const { dir } of getEnabledExtraRepos()) {
71
- dirs.push({ layer: 'user', dir: path.join(dir, 'mcp') });
72
- }
73
- // System layer (lowest priority)
74
- dirs.push({ layer: 'system', dir: getSystemMcpDir() });
75
- return dirs;
76
- }
77
- /**
78
- * Scan a directory for MCP YAML files.
79
- */
80
- function scanMcpDir(dir) {
81
- const results = [];
82
- if (!fs.existsSync(dir)) {
83
- return results;
84
- }
85
- try {
86
- const entries = fs.readdirSync(dir, { withFileTypes: true });
87
- for (const entry of entries) {
88
- if (!entry.isFile())
89
- continue;
90
- if (!entry.name.endsWith('.yaml') && !entry.name.endsWith('.yml'))
91
- continue;
92
- const filePath = path.join(dir, entry.name);
93
- const item = parseMcpYaml(filePath);
94
- if (item) {
95
- results.push({ name: item.name, path: filePath, item });
96
- }
97
- }
98
- }
99
- catch {
100
- // Directory read failed
101
- }
102
- return results;
103
- }
104
- /**
105
- * Get the config file path for MCP for a given agent.
106
- * Different agents use different config formats and locations.
107
- */
108
- export function getMcpConfigPath(agent, versionHome) {
109
- switch (agent) {
110
- case 'claude':
111
- return path.join(versionHome, '.claude', 'settings.json');
112
- case 'codex':
113
- return path.join(versionHome, '.codex', 'config.toml');
114
- case 'opencode':
115
- return path.join(versionHome, '.config', 'opencode', 'opencode.jsonc');
116
- case 'cursor':
117
- return path.join(versionHome, '.cursor', 'mcp.json');
118
- case 'openclaw':
119
- return path.join(versionHome, '.openclaw', 'openclaw.json');
120
- case 'antigravity':
121
- // agy nests under ~/.gemini/antigravity-cli/ (shared parent with Gemini, distinct subdir).
122
- return path.join(versionHome, '.gemini', 'antigravity-cli', 'mcp_config.json');
123
- case 'grok':
124
- return path.join(versionHome, '.grok', 'mcp.json');
125
- case 'hermes':
126
- return path.join(versionHome, '.hermes', 'config.yaml');
127
- case 'pi':
128
- // omp reads user-scope MCP from ~/.omp/agent/.mcp.json (Claude schema).
129
- return path.join(versionHome, '.omp', 'agent', '.mcp.json');
130
- case 'muse':
131
- return path.join(versionHome, '.config', 'muse', 'settings.json');
132
- case 'warp':
133
- // Oz reads user-scope MCP from ~/.warp/.mcp.json (Claude schema).
134
- return path.join(versionHome, '.warp', '.mcp.json');
135
- default:
136
- return null;
137
- }
138
- }
139
- /**
140
- * Dispatch MCP items to the agent-specific config writer.
141
- */
142
- function syncToAgentConfig(agent, configPath, items, mode = 'overwrite') {
143
- writeMcpConfig(agent, configPath, items, mode);
144
- }
145
- /**
146
- * MCP resource handler implementing ResourceHandler<McpItem>.
147
- */
148
- export const McpHandler = {
149
- kind: 'mcp',
150
- listAll(agent, cwd) {
151
- if (!capableAgents('mcp').includes(agent)) {
152
- return [];
153
- }
154
- const results = new Map();
155
- const layerDirs = getLayerDirs(cwd);
156
- // Process in reverse order (system first) so higher layers override
157
- for (let i = layerDirs.length - 1; i >= 0; i--) {
158
- const { layer, dir } = layerDirs[i];
159
- const items = scanMcpDir(dir);
160
- for (const { name, path: itemPath, item } of items) {
161
- results.set(name, {
162
- name,
163
- item,
164
- layer,
165
- path: itemPath,
166
- });
167
- }
168
- }
169
- return Array.from(results.values());
170
- },
171
- resolve(agent, name, cwd) {
172
- if (!capableAgents('mcp').includes(agent)) {
173
- return null;
174
- }
175
- const layerDirs = getLayerDirs(cwd);
176
- // Check in priority order (project first)
177
- for (const { layer, dir } of layerDirs) {
178
- if (!fs.existsSync(dir))
179
- continue;
180
- try {
181
- const entries = fs.readdirSync(dir, { withFileTypes: true });
182
- for (const entry of entries) {
183
- if (!entry.isFile())
184
- continue;
185
- if (!entry.name.endsWith('.yaml') && !entry.name.endsWith('.yml'))
186
- continue;
187
- const filePath = path.join(dir, entry.name);
188
- const item = parseMcpYaml(filePath);
189
- if (item && item.name === name) {
190
- return {
191
- name,
192
- item,
193
- layer,
194
- path: filePath,
195
- };
196
- }
197
- }
198
- }
199
- catch {
200
- continue;
201
- }
202
- }
203
- return null;
204
- },
205
- sync(agent, versionHome, cwd) {
206
- if (!capableAgents('mcp').includes(agent)) {
207
- return;
208
- }
209
- const items = this.listAll(agent, cwd);
210
- if (items.length === 0) {
211
- return;
212
- }
213
- // Sync resolved MCPs to the version home (user-level agent config).
214
- const configPath = getMcpConfigPath(agent, versionHome);
215
- if (configPath) {
216
- const mcpItems = items.map((r) => r.item);
217
- syncToAgentConfig(agent, configPath, mcpItems, 'overwrite');
218
- }
219
- // Sync project-layer MCPs to the agent's project-level config path so each
220
- // agent CLI can discover them alongside its user-level config. Merge so we
221
- // do not clobber entries added manually or by the agent's own CLI.
222
- const projectAgentsDir = cwd ? getProjectAgentsDir(cwd) : null;
223
- if (projectAgentsDir) {
224
- const projectItems = items.filter((r) => r.layer === 'project').map((r) => r.item);
225
- if (projectItems.length > 0) {
226
- const projectConfigPath = getProjectMcpConfigPath(agent, path.dirname(projectAgentsDir));
227
- syncToAgentConfig(agent, projectConfigPath, projectItems, 'merge');
228
- }
229
- }
230
- },
231
- format(agent) {
232
- switch (agent) {
233
- case 'codex':
234
- case 'grok':
235
- return 'toml';
236
- case 'hermes':
237
- return 'yaml';
238
- default:
239
- return 'json';
240
- }
241
- },
242
- targetDir(_agent) {
243
- // MCP doesn't have a target directory - it modifies config files
244
- return 'mcp';
245
- },
246
- configPath(agent, versionHome) {
247
- return getMcpConfigPath(agent, versionHome);
248
- },
249
- };
250
- export default McpHandler;
@@ -1,15 +0,0 @@
1
- /**
2
- * Memory resource handler — knowledge/facts store (not rules/instructions).
3
- *
4
- * Canonical source: layered `memory/` dirs under project/user/system agents
5
- * roots. Sync copies into each capable agent's version home (see memory.ts).
6
- */
7
- import type { ResourceHandler } from './types.js';
8
- export interface MemoryItem {
9
- name: string;
10
- content: string;
11
- summary: string;
12
- }
13
- export declare const MemoryHandler: ResourceHandler<MemoryItem>;
14
- /** Convenience: list fact names for a cwd. */
15
- export declare function listMemoryNames(cwd?: string): string[];