@namzu/cli 30.0.0 → 33.0.0

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 (347) hide show
  1. package/CHANGELOG.md +261 -1
  2. package/dist/browser/commands.js +11 -7
  3. package/dist/browser/commands.js.map +1 -1
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +26 -2
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/acp.d.ts +20 -2
  8. package/dist/commands/acp.d.ts.map +1 -1
  9. package/dist/commands/acp.js +42 -5
  10. package/dist/commands/acp.js.map +1 -1
  11. package/dist/commands/archive.d.ts +4 -0
  12. package/dist/commands/archive.d.ts.map +1 -0
  13. package/dist/commands/archive.js +62 -0
  14. package/dist/commands/archive.js.map +1 -0
  15. package/dist/commands/drain.d.ts.map +1 -1
  16. package/dist/commands/drain.js +2 -1
  17. package/dist/commands/drain.js.map +1 -1
  18. package/dist/commands/exec-json.d.ts.map +1 -1
  19. package/dist/commands/exec-json.js +24 -1
  20. package/dist/commands/exec-json.js.map +1 -1
  21. package/dist/commands/exec.d.ts.map +1 -1
  22. package/dist/commands/exec.js +2 -1
  23. package/dist/commands/exec.js.map +1 -1
  24. package/dist/commands/login.d.ts +1 -1
  25. package/dist/commands/login.d.ts.map +1 -1
  26. package/dist/commands/login.js +33 -11
  27. package/dist/commands/login.js.map +1 -1
  28. package/dist/commands/mcp-oauth-login.d.ts +19 -0
  29. package/dist/commands/mcp-oauth-login.d.ts.map +1 -0
  30. package/dist/commands/mcp-oauth-login.js +213 -0
  31. package/dist/commands/mcp-oauth-login.js.map +1 -0
  32. package/dist/commands/mcp.d.ts +3 -0
  33. package/dist/commands/mcp.d.ts.map +1 -0
  34. package/dist/commands/mcp.js +288 -0
  35. package/dist/commands/mcp.js.map +1 -0
  36. package/dist/commands/prior-messages.d.ts.map +1 -1
  37. package/dist/commands/prior-messages.js +42 -2
  38. package/dist/commands/prior-messages.js.map +1 -1
  39. package/dist/commands/schedule.d.ts.map +1 -1
  40. package/dist/commands/schedule.js +7 -5
  41. package/dist/commands/schedule.js.map +1 -1
  42. package/dist/commands/skills.d.ts.map +1 -1
  43. package/dist/commands/skills.js +60 -5
  44. package/dist/commands/skills.js.map +1 -1
  45. package/dist/commands/types.d.ts +2 -0
  46. package/dist/commands/types.d.ts.map +1 -1
  47. package/dist/commands/worktree.d.ts +6 -0
  48. package/dist/commands/worktree.d.ts.map +1 -0
  49. package/dist/commands/worktree.js +85 -0
  50. package/dist/commands/worktree.js.map +1 -0
  51. package/dist/config/composer-triggers.d.ts +41 -0
  52. package/dist/config/composer-triggers.d.ts.map +1 -0
  53. package/dist/config/composer-triggers.js +80 -0
  54. package/dist/config/composer-triggers.js.map +1 -0
  55. package/dist/config/load.d.ts.map +1 -1
  56. package/dist/config/load.js +58 -0
  57. package/dist/config/load.js.map +1 -1
  58. package/dist/config/schema.d.ts +34 -0
  59. package/dist/config/schema.d.ts.map +1 -1
  60. package/dist/config/schema.js.map +1 -1
  61. package/dist/config/user-config.d.ts +2 -0
  62. package/dist/config/user-config.d.ts.map +1 -1
  63. package/dist/config/user-config.js +76 -6
  64. package/dist/config/user-config.js.map +1 -1
  65. package/dist/context/doctrine.d.ts +3 -3
  66. package/dist/context/doctrine.d.ts.map +1 -1
  67. package/dist/context/doctrine.js +3 -3
  68. package/dist/context/doctrine.js.map +1 -1
  69. package/dist/context/runtime-message.d.ts.map +1 -1
  70. package/dist/context/runtime-message.js +4 -0
  71. package/dist/context/runtime-message.js.map +1 -1
  72. package/dist/doctor/checks/credentials.d.ts.map +1 -1
  73. package/dist/doctor/checks/credentials.js +2 -0
  74. package/dist/doctor/checks/credentials.js.map +1 -1
  75. package/dist/integrations/mcp/oauth-store.d.ts +40 -0
  76. package/dist/integrations/mcp/oauth-store.d.ts.map +1 -0
  77. package/dist/integrations/mcp/oauth-store.js +549 -0
  78. package/dist/integrations/mcp/oauth-store.js.map +1 -0
  79. package/dist/integrations/mcp/servers.d.ts +72 -5
  80. package/dist/integrations/mcp/servers.d.ts.map +1 -1
  81. package/dist/integrations/mcp/servers.js +298 -24
  82. package/dist/integrations/mcp/servers.js.map +1 -1
  83. package/dist/integrations/mcp/user-config.d.ts +25 -0
  84. package/dist/integrations/mcp/user-config.d.ts.map +1 -0
  85. package/dist/integrations/mcp/user-config.js +92 -0
  86. package/dist/integrations/mcp/user-config.js.map +1 -0
  87. package/dist/integrations/plugins/runtime.d.ts +11 -9
  88. package/dist/integrations/plugins/runtime.d.ts.map +1 -1
  89. package/dist/integrations/plugins/runtime.js +17 -36
  90. package/dist/integrations/plugins/runtime.js.map +1 -1
  91. package/dist/integrations/providers/credential-store.d.ts +8 -0
  92. package/dist/integrations/providers/credential-store.d.ts.map +1 -1
  93. package/dist/integrations/providers/credential-store.js +111 -22
  94. package/dist/integrations/providers/credential-store.js.map +1 -1
  95. package/dist/integrations/providers/discover.d.ts +11 -5
  96. package/dist/integrations/providers/discover.d.ts.map +1 -1
  97. package/dist/integrations/providers/discover.js +26 -12
  98. package/dist/integrations/providers/discover.js.map +1 -1
  99. package/dist/integrations/providers/index.d.ts +1 -1
  100. package/dist/integrations/providers/index.d.ts.map +1 -1
  101. package/dist/integrations/providers/index.js +1 -1
  102. package/dist/integrations/providers/index.js.map +1 -1
  103. package/dist/integrations/resident/session-step.d.ts.map +1 -1
  104. package/dist/integrations/resident/session-step.js +2 -1
  105. package/dist/integrations/resident/session-step.js.map +1 -1
  106. package/dist/integrations/sessions/store.d.ts +23 -5
  107. package/dist/integrations/sessions/store.d.ts.map +1 -1
  108. package/dist/integrations/sessions/store.js +184 -26
  109. package/dist/integrations/sessions/store.js.map +1 -1
  110. package/dist/integrations/subagents/NamzuCliAgent.d.ts +8 -0
  111. package/dist/integrations/subagents/NamzuCliAgent.d.ts.map +1 -0
  112. package/dist/integrations/subagents/NamzuCliAgent.js +9 -0
  113. package/dist/integrations/subagents/NamzuCliAgent.js.map +1 -0
  114. package/dist/integrations/subagents/runtime.d.ts +9 -6
  115. package/dist/integrations/subagents/runtime.d.ts.map +1 -1
  116. package/dist/integrations/subagents/runtime.js +108 -19
  117. package/dist/integrations/subagents/runtime.js.map +1 -1
  118. package/dist/integrations/subagents/worktree-driver.d.ts +17 -0
  119. package/dist/integrations/subagents/worktree-driver.d.ts.map +1 -0
  120. package/dist/integrations/subagents/worktree-driver.js +72 -0
  121. package/dist/integrations/subagents/worktree-driver.js.map +1 -0
  122. package/dist/integrations/web/search.d.ts.map +1 -1
  123. package/dist/integrations/web/search.js +8 -6
  124. package/dist/integrations/web/search.js.map +1 -1
  125. package/dist/integrations/worktrees/managed.d.ts +49 -0
  126. package/dist/integrations/worktrees/managed.d.ts.map +1 -0
  127. package/dist/integrations/worktrees/managed.js +231 -0
  128. package/dist/integrations/worktrees/managed.js.map +1 -0
  129. package/dist/permissions/rules.d.ts +5 -1
  130. package/dist/permissions/rules.d.ts.map +1 -1
  131. package/dist/permissions/rules.js +85 -3
  132. package/dist/permissions/rules.js.map +1 -1
  133. package/dist/schedule/build.d.ts +19 -2
  134. package/dist/schedule/build.d.ts.map +1 -1
  135. package/dist/schedule/build.js +119 -21
  136. package/dist/schedule/build.js.map +1 -1
  137. package/dist/schedule/changes.d.ts.map +1 -1
  138. package/dist/schedule/changes.js +13 -0
  139. package/dist/schedule/changes.js.map +1 -1
  140. package/dist/schedule/commands/add.d.ts +1 -1
  141. package/dist/schedule/commands/add.d.ts.map +1 -1
  142. package/dist/schedule/commands/add.js +186 -40
  143. package/dist/schedule/commands/add.js.map +1 -1
  144. package/dist/schedule/commands/list.d.ts +2 -0
  145. package/dist/schedule/commands/list.d.ts.map +1 -1
  146. package/dist/schedule/commands/list.js +64 -19
  147. package/dist/schedule/commands/list.js.map +1 -1
  148. package/dist/schedule/daemon/daemon.d.ts +1 -1
  149. package/dist/schedule/daemon/daemon.d.ts.map +1 -1
  150. package/dist/schedule/daemon/daemon.js +17 -5
  151. package/dist/schedule/daemon/daemon.js.map +1 -1
  152. package/dist/schedule/daemon/notify.d.ts +21 -1
  153. package/dist/schedule/daemon/notify.d.ts.map +1 -1
  154. package/dist/schedule/daemon/notify.js +43 -0
  155. package/dist/schedule/daemon/notify.js.map +1 -1
  156. package/dist/schedule/fire/fire.d.ts +1 -1
  157. package/dist/schedule/fire/fire.d.ts.map +1 -1
  158. package/dist/schedule/fire/fire.js +205 -14
  159. package/dist/schedule/fire/fire.js.map +1 -1
  160. package/dist/schedule/fire/result.d.ts +1 -1
  161. package/dist/schedule/fire/result.d.ts.map +1 -1
  162. package/dist/schedule/fire/result.js +2 -1
  163. package/dist/schedule/fire/result.js.map +1 -1
  164. package/dist/schedule/fire/run-script.d.ts +46 -0
  165. package/dist/schedule/fire/run-script.d.ts.map +1 -0
  166. package/dist/schedule/fire/run-script.js +81 -0
  167. package/dist/schedule/fire/run-script.js.map +1 -0
  168. package/dist/schedule/fire/unattended-note.d.ts +8 -0
  169. package/dist/schedule/fire/unattended-note.d.ts.map +1 -1
  170. package/dist/schedule/fire/unattended-note.js +5 -0
  171. package/dist/schedule/fire/unattended-note.js.map +1 -1
  172. package/dist/schedule/fire/wake-gate.d.ts +39 -0
  173. package/dist/schedule/fire/wake-gate.d.ts.map +1 -0
  174. package/dist/schedule/fire/wake-gate.js +90 -0
  175. package/dist/schedule/fire/wake-gate.js.map +1 -0
  176. package/dist/schedule/floor.d.ts +1 -1
  177. package/dist/schedule/floor.d.ts.map +1 -1
  178. package/dist/schedule/floor.js +288 -16
  179. package/dist/schedule/floor.js.map +1 -1
  180. package/dist/schedule/policy.d.ts +40 -0
  181. package/dist/schedule/policy.d.ts.map +1 -1
  182. package/dist/schedule/policy.js +36 -0
  183. package/dist/schedule/policy.js.map +1 -1
  184. package/dist/schedule/script-check.d.ts +53 -0
  185. package/dist/schedule/script-check.d.ts.map +1 -0
  186. package/dist/schedule/script-check.js +145 -0
  187. package/dist/schedule/script-check.js.map +1 -0
  188. package/dist/schedule/script-shell.d.ts +3 -0
  189. package/dist/schedule/script-shell.d.ts.map +1 -0
  190. package/dist/schedule/script-shell.js +5 -0
  191. package/dist/schedule/script-shell.js.map +1 -0
  192. package/dist/schedule/service/manifest.js +1 -1
  193. package/dist/schedule/service/manifest.js.map +1 -1
  194. package/dist/schedule/store/atomic.d.ts +5 -2
  195. package/dist/schedule/store/atomic.d.ts.map +1 -1
  196. package/dist/schedule/store/atomic.js +7 -4
  197. package/dist/schedule/store/atomic.js.map +1 -1
  198. package/dist/schedule/store/claims.js +1 -1
  199. package/dist/schedule/store/claims.js.map +1 -1
  200. package/dist/schedule/store/history.d.ts +1 -1
  201. package/dist/schedule/store/history.d.ts.map +1 -1
  202. package/dist/schedule/store/history.js +4 -1
  203. package/dist/schedule/store/history.js.map +1 -1
  204. package/dist/schedule/store/jobs.d.ts +19 -3
  205. package/dist/schedule/store/jobs.d.ts.map +1 -1
  206. package/dist/schedule/store/jobs.js +83 -16
  207. package/dist/schedule/store/jobs.js.map +1 -1
  208. package/dist/schedule/store/state.js +1 -1
  209. package/dist/schedule/store/state.js.map +1 -1
  210. package/dist/schedule/types.d.ts +71 -6
  211. package/dist/schedule/types.d.ts.map +1 -1
  212. package/dist/schedule/types.js +25 -1
  213. package/dist/schedule/types.js.map +1 -1
  214. package/dist/schedule/visible-source.d.ts +18 -0
  215. package/dist/schedule/visible-source.d.ts.map +1 -0
  216. package/dist/schedule/visible-source.js +59 -0
  217. package/dist/schedule/visible-source.js.map +1 -0
  218. package/dist/skills/audit.d.ts +31 -0
  219. package/dist/skills/audit.d.ts.map +1 -0
  220. package/dist/skills/audit.js +75 -0
  221. package/dist/skills/audit.js.map +1 -0
  222. package/dist/test-support/toolset.d.ts +23 -0
  223. package/dist/test-support/toolset.d.ts.map +1 -0
  224. package/dist/test-support/toolset.js +27 -0
  225. package/dist/test-support/toolset.js.map +1 -0
  226. package/dist/tui/App.d.ts.map +1 -1
  227. package/dist/tui/App.js +568 -106
  228. package/dist/tui/App.js.map +1 -1
  229. package/dist/tui/ChoicePicker.d.ts +2 -0
  230. package/dist/tui/ChoicePicker.d.ts.map +1 -1
  231. package/dist/tui/ChoicePicker.js +10 -2
  232. package/dist/tui/ChoicePicker.js.map +1 -1
  233. package/dist/tui/Composer.d.ts +62 -3
  234. package/dist/tui/Composer.d.ts.map +1 -1
  235. package/dist/tui/Composer.js +162 -25
  236. package/dist/tui/Composer.js.map +1 -1
  237. package/dist/tui/ComposerFrame.d.ts +1 -1
  238. package/dist/tui/ComposerFrame.js +3 -3
  239. package/dist/tui/ComposerFrame.js.map +1 -1
  240. package/dist/tui/EffortSlider.d.ts +8 -9
  241. package/dist/tui/EffortSlider.d.ts.map +1 -1
  242. package/dist/tui/EffortSlider.js +15 -12
  243. package/dist/tui/EffortSlider.js.map +1 -1
  244. package/dist/tui/Picker.d.ts.map +1 -1
  245. package/dist/tui/Picker.js +18 -3
  246. package/dist/tui/Picker.js.map +1 -1
  247. package/dist/tui/ResumePicker.d.ts +2 -1
  248. package/dist/tui/ResumePicker.d.ts.map +1 -1
  249. package/dist/tui/ResumePicker.js +3 -3
  250. package/dist/tui/ResumePicker.js.map +1 -1
  251. package/dist/tui/StatusBar.d.ts +12 -12
  252. package/dist/tui/StatusBar.d.ts.map +1 -1
  253. package/dist/tui/StatusBar.js +15 -15
  254. package/dist/tui/StatusBar.js.map +1 -1
  255. package/dist/tui/agent.d.ts +46 -7
  256. package/dist/tui/agent.d.ts.map +1 -1
  257. package/dist/tui/agent.js +399 -182
  258. package/dist/tui/agent.js.map +1 -1
  259. package/dist/tui/browser-notices.d.ts.map +1 -1
  260. package/dist/tui/browser-notices.js +6 -1
  261. package/dist/tui/browser-notices.js.map +1 -1
  262. package/dist/tui/credential-entry.d.ts +4 -29
  263. package/dist/tui/credential-entry.d.ts.map +1 -1
  264. package/dist/tui/credential-entry.js +7 -29
  265. package/dist/tui/credential-entry.js.map +1 -1
  266. package/dist/tui/hypermode.d.ts +37 -0
  267. package/dist/tui/hypermode.d.ts.map +1 -0
  268. package/dist/tui/hypermode.js +58 -0
  269. package/dist/tui/hypermode.js.map +1 -0
  270. package/dist/tui/login-prompt.d.ts +3 -1
  271. package/dist/tui/login-prompt.d.ts.map +1 -1
  272. package/dist/tui/login-prompt.js +11 -0
  273. package/dist/tui/login-prompt.js.map +1 -1
  274. package/dist/tui/permission-review.d.ts +1 -1
  275. package/dist/tui/permission-review.js +1 -1
  276. package/dist/tui/provider-list.d.ts.map +1 -1
  277. package/dist/tui/provider-list.js +3 -1
  278. package/dist/tui/provider-list.js.map +1 -1
  279. package/dist/tui/schedule/host-commands.d.ts.map +1 -1
  280. package/dist/tui/schedule/host-commands.js +94 -33
  281. package/dist/tui/schedule/host-commands.js.map +1 -1
  282. package/dist/tui/schedule/integration.d.ts +6 -2
  283. package/dist/tui/schedule/integration.d.ts.map +1 -1
  284. package/dist/tui/schedule/integration.js +3 -1
  285. package/dist/tui/schedule/integration.js.map +1 -1
  286. package/dist/tui/schedule/resume.d.ts.map +1 -1
  287. package/dist/tui/schedule/resume.js +10 -1
  288. package/dist/tui/schedule/resume.js.map +1 -1
  289. package/dist/tui/schedule/tool-host.d.ts +4 -1
  290. package/dist/tui/schedule/tool-host.d.ts.map +1 -1
  291. package/dist/tui/schedule/tool-host.js +155 -40
  292. package/dist/tui/schedule/tool-host.js.map +1 -1
  293. package/dist/tui/slashCommands.d.ts +33 -6
  294. package/dist/tui/slashCommands.d.ts.map +1 -1
  295. package/dist/tui/slashCommands.js +96 -34
  296. package/dist/tui/slashCommands.js.map +1 -1
  297. package/dist/tui/theme.d.ts +10 -4
  298. package/dist/tui/theme.d.ts.map +1 -1
  299. package/dist/tui/theme.js +4 -3
  300. package/dist/tui/theme.js.map +1 -1
  301. package/dist/tui/triggers/analyze.d.ts +57 -0
  302. package/dist/tui/triggers/analyze.d.ts.map +1 -0
  303. package/dist/tui/triggers/analyze.js +221 -0
  304. package/dist/tui/triggers/analyze.js.map +1 -0
  305. package/dist/tui/triggers/context-text.d.ts +21 -0
  306. package/dist/tui/triggers/context-text.d.ts.map +1 -0
  307. package/dist/tui/triggers/context-text.js +44 -0
  308. package/dist/tui/triggers/context-text.js.map +1 -0
  309. package/dist/tui/triggers/copy.d.ts +38 -0
  310. package/dist/tui/triggers/copy.d.ts.map +1 -0
  311. package/dist/tui/triggers/copy.js +163 -0
  312. package/dist/tui/triggers/copy.js.map +1 -0
  313. package/dist/tui/triggers/detect.d.ts +83 -0
  314. package/dist/tui/triggers/detect.d.ts.map +1 -0
  315. package/dist/tui/triggers/detect.js +295 -0
  316. package/dist/tui/triggers/detect.js.map +1 -0
  317. package/dist/tui/triggers/fold.d.ts +34 -0
  318. package/dist/tui/triggers/fold.d.ts.map +1 -0
  319. package/dist/tui/triggers/fold.js +44 -0
  320. package/dist/tui/triggers/fold.js.map +1 -0
  321. package/dist/tui/triggers/pattern.d.ts +66 -0
  322. package/dist/tui/triggers/pattern.d.ts.map +1 -0
  323. package/dist/tui/triggers/pattern.js +243 -0
  324. package/dist/tui/triggers/pattern.js.map +1 -0
  325. package/dist/tui/triggers/provenance.d.ts +58 -0
  326. package/dist/tui/triggers/provenance.d.ts.map +1 -0
  327. package/dist/tui/triggers/provenance.js +98 -0
  328. package/dist/tui/triggers/provenance.js.map +1 -0
  329. package/dist/tui/triggers/registry.d.ts +113 -0
  330. package/dist/tui/triggers/registry.d.ts.map +1 -0
  331. package/dist/tui/triggers/registry.js +164 -0
  332. package/dist/tui/triggers/registry.js.map +1 -0
  333. package/dist/tui/triggers/setting.d.ts +18 -0
  334. package/dist/tui/triggers/setting.d.ts.map +1 -0
  335. package/dist/tui/triggers/setting.js +61 -0
  336. package/dist/tui/triggers/setting.js.map +1 -0
  337. package/dist/tui/triggers/verbs.d.ts +29 -0
  338. package/dist/tui/triggers/verbs.d.ts.map +1 -0
  339. package/dist/tui/triggers/verbs.js +140 -0
  340. package/dist/tui/triggers/verbs.js.map +1 -0
  341. package/dist/tui/turn-interruption.d.ts.map +1 -1
  342. package/dist/tui/turn-interruption.js +4 -0
  343. package/dist/tui/turn-interruption.js.map +1 -1
  344. package/dist/tui/types.d.ts +3 -1
  345. package/dist/tui/types.d.ts.map +1 -1
  346. package/package.json +13 -12
  347. package/skills/schedule-task/SKILL.md +115 -3
@@ -14,7 +14,7 @@
14
14
  * "search": { "url": "https://tools.example.internal/mcp" }
15
15
  * }
16
16
  *
17
- * Its tools arrive prefixed with the server's name (`mcp_tickets_create`), so
17
+ * Its tools arrive prefixed with the server's name (`mcp__tickets__create`), so
18
18
  * two servers offering `search` do not collide and the transcript says where a
19
19
  * call went.
20
20
  *
@@ -31,7 +31,7 @@
31
31
  * and a headless run has nobody to read anything, so it refuses. This module
32
32
  * reports; the callers decide.
33
33
  */
34
- import { type MCPTransportUnion, type ToolDefinition } from '@namzu/sdk';
34
+ import { type MCPToolDrift, type MCPTransportUnion, type ToolDefinition, type Toolset } from '@namzu/sdk';
35
35
  /**
36
36
  * How long a single server gets to connect, hand shake and list its tools.
37
37
  *
@@ -55,6 +55,15 @@ export interface McpServerSpec {
55
55
  /** Stdio: the executable to run. */
56
56
  readonly command?: string;
57
57
  readonly args?: readonly string[];
58
+ /**
59
+ * A value may reference the operator's own environment with a bare
60
+ * `${VAR_NAME}` — no `${VAR:-default}` fallback, and an unset
61
+ * `VAR_NAME` fails this server with a named reason rather than running
62
+ * with an empty string. See {@link expandEnvRefsInRecord}. Prefer
63
+ * `inheritEnv` below for a plain "grant this variable under its own
64
+ * name"; use `${VAR_NAME}` here to rename a variable into whatever key
65
+ * the server expects.
66
+ */
58
67
  readonly env?: Readonly<Record<string, string>>;
59
68
  /**
60
69
  * Variables from the operator's own environment this server may have.
@@ -72,6 +81,11 @@ export interface McpServerSpec {
72
81
  readonly cwd?: string;
73
82
  /** HTTP: the server's endpoint. */
74
83
  readonly url?: string;
84
+ /**
85
+ * Same `${VAR_NAME}` expansion as `env` above — the only secret-safe
86
+ * option for a header value, since `inheritEnv` reaches the stdio
87
+ * child's process environment only, never an HTTP header.
88
+ */
75
89
  readonly headers?: Readonly<Record<string, string>>;
76
90
  /**
77
91
  * How long THIS server gets to connect, hand shake and list its tools, in
@@ -100,6 +114,18 @@ export interface McpServerSpec {
100
114
  * `connectTimeoutMs` for the handshake that will actually answer.
101
115
  */
102
116
  readonly eraProbeTimeoutMs?: number;
117
+ /** Server-reported names admitted from tools, prompts and resources. */
118
+ readonly allow?: readonly string[];
119
+ /** Server-reported names refused even if `allow` includes them. */
120
+ readonly deny?: readonly string[];
121
+ /** Retries only tool calls the SDK marks safe to repeat. Defaults to none. */
122
+ readonly maxRetries?: number;
123
+ /** Require a person to approve every call this server contributes. */
124
+ readonly requireApproval?: boolean;
125
+ /** Trust this server's read-only hints for review exemptions. Defaults to false. */
126
+ readonly readOnlyHintTrusted?: boolean;
127
+ /** Include the server's own initialize instructions as untrusted turn context. Default false. */
128
+ readonly instructions?: boolean;
103
129
  }
104
130
  export type McpServersConfig = Readonly<Record<string, McpServerSpec>>;
105
131
  export interface ConnectedMcpServer {
@@ -109,11 +135,21 @@ export interface ConnectedMcpServer {
109
135
  * What this server actually contributes, by tool name.
110
136
  *
111
137
  * Carried from the listing rather than recovered later. The names arrive
112
- * prefixed with the server's own (`mcp_tickets_create`), so a caller COULD
138
+ * prefixed with the server's own (`mcp__tickets__create`), so a caller COULD
113
139
  * split them back apart — but that turns an encoding this file owns into a
114
140
  * format two places have to agree about, and the list is free right here.
115
141
  */
116
142
  readonly tools: readonly string[];
143
+ /** The server's current initialize instructions, if it supplied any. */
144
+ readonly instructions?: string;
145
+ /** Names changed since this connection's first listing; changed definitions remain held. */
146
+ readonly drift?: MCPToolDrift;
147
+ /** Current allow/deny refusals, by server-reported name. */
148
+ readonly refused?: readonly {
149
+ kind: 'tools' | 'prompts' | 'resources';
150
+ name: string;
151
+ reason: 'not_allowed' | 'denied';
152
+ }[];
117
153
  }
118
154
  export interface FailedMcpServer {
119
155
  readonly name: string;
@@ -121,8 +157,13 @@ export interface FailedMcpServer {
121
157
  readonly reason: string;
122
158
  }
123
159
  export interface McpConnection {
124
- /** Adapted tools from every server that connected, ready to register. */
160
+ /** Current definitions from every connected server, read from its live toolsets. */
125
161
  readonly tools: readonly ToolDefinition[];
162
+ /**
163
+ * Two live entries per connected server: its configured main tools and its
164
+ * always-deferred resource tools. Both carry the `mcp:<server>` source.
165
+ */
166
+ readonly toolsets: readonly Toolset[];
126
167
  /** One coherent live snapshot; use this when successes and failures are shown together. */
127
168
  current(): {
128
169
  readonly connected: readonly ConnectedMcpServer[];
@@ -142,6 +183,32 @@ export interface McpConnection {
142
183
  */
143
184
  close(): Promise<void>;
144
185
  }
186
+ /**
187
+ * Expand `${VAR}` references inside `env`/`headers` values against the
188
+ * operator's own environment.
189
+ *
190
+ * Deliberately narrower than the interpolation some other MCP clients'
191
+ * configs use (see docs/cli/mcp-servers.md): bare `${VAR}` only, no
192
+ * `${VAR:-default}` fallback, and only inside `env` and `headers` values —
193
+ * never `command`, `args`, `url` or `cwd`, which have no legitimate secret
194
+ * use case and would only widen the surface for an accidental literal `${`
195
+ * to break. A referenced variable that is unset is refused with a named
196
+ * reason, not silently substituted with an empty string: that is exactly
197
+ * the footgun a `:-default` fallback would reintroduce, and this module's
198
+ * whole design is "every failure is named" rather than a server running
199
+ * quietly with a secret it never got.
200
+ *
201
+ * `inheritEnv` stays the primary idiom for "grant this named variable to
202
+ * the child process under its own name" — this is for the config VALUE
203
+ * itself, letting an operator rename an env var into whatever key or
204
+ * header a server expects, and giving `headers` a secret-safe option it
205
+ * has never had (`inheritEnv` only reaches the stdio child's process env,
206
+ * not header values).
207
+ *
208
+ * Returns the expanded record, or a reason string naming the first unset
209
+ * variable a value referenced.
210
+ */
211
+ export declare function expandEnvRefsInRecord(record: Readonly<Record<string, string>>, env: NodeJS.ProcessEnv): Readonly<Record<string, string>> | string;
145
212
  /**
146
213
  * Turn one spec into a transport, or say why it is not one.
147
214
  *
@@ -149,7 +216,7 @@ export interface McpConnection {
149
216
  * operator who edited one into a file that already had the other, and picking
150
217
  * either would run something they did not mean to run.
151
218
  */
152
- export declare function transportFor(spec: McpServerSpec, defaultCwd: string): MCPTransportUnion | string;
219
+ export declare function transportFor(spec: McpServerSpec, defaultCwd: string, env?: NodeJS.ProcessEnv): MCPTransportUnion | string;
153
220
  /**
154
221
  * The connect deadline a spec asks for, or why it cannot have it.
155
222
  *
@@ -1 +1 @@
1
- {"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../../src/integrations/mcp/servers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAEN,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAEnB,MAAM,YAAY,CAAA;AAEnB;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,QAAS,CAAA;AAExC;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,OAAQ,CAAA;AAErC,gFAAgF;AAChF,MAAM,WAAW,aAAa;IAC7B,oCAAoC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/C;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,gEAAgE;IAChE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,mCAAmC;IACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACnD;;;;;;;;;OASG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CACnC;AAED,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAA;AAEtE,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CACjC;AAED,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAA;IACzC,2FAA2F;IAC3F,OAAO,IAAI;QACV,QAAQ,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAA;QACjD,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;KAC3C,CAAA;IACD,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACjD,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;IAC3C;;;;;;;OAOG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,GAAG,MAAM,CAwBhG;AAkBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAOvE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAOnF;AAED,wBAAsB,iBAAiB,CACtC,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,OAAO,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC/B,OAAO,CAAC,aAAa,CAAC,CAyHxB"}
1
+ {"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../../src/integrations/mcp/servers.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@
14
14
  * "search": { "url": "https://tools.example.internal/mcp" }
15
15
  * }
16
16
  *
17
- * Its tools arrive prefixed with the server's name (`mcp_tickets_create`), so
17
+ * Its tools arrive prefixed with the server's name (`mcp__tickets__create`), so
18
18
  * two servers offering `search` do not collide and the transcript says where a
19
19
  * call went.
20
20
  *
@@ -31,7 +31,9 @@
31
31
  * and a headless run has nobody to read anything, so it refuses. This module
32
32
  * reports; the callers decide.
33
33
  */
34
- import { MCPClient, mcpToolToToolDefinition, } from '@namzu/sdk';
34
+ import { UnauthorizedError, auth, extractWWWAuthenticateParams, withOAuth, } from '@modelcontextprotocol/client';
35
+ import { MCPClient, MCPHttpStatusError, mcpToolset, requireApproval, } from '@namzu/sdk';
36
+ import { McpOAuthLoginRequiredError, McpOAuthStoreError, createMcpOAuthProvider, hasMcpOAuthTokens, isSecureMcpOAuthUrl, mcpOAuthPath, } from './oauth-store.js';
35
37
  /**
36
38
  * How long a single server gets to connect, hand shake and list its tools.
37
39
  *
@@ -50,6 +52,55 @@ export const CONNECT_TIMEOUT_MS = 10_000;
50
52
  * command open past the work it was asked to do.
51
53
  */
52
54
  export const CLOSE_TIMEOUT_MS = 2_000;
55
+ /**
56
+ * A bare `${VAR}` reference inside an `env` or `headers` value — identifier
57
+ * characters only, no `:-default` fallback. See {@link expandEnvRefsInRecord}.
58
+ */
59
+ const ENV_REF_PATTERN = /\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g;
60
+ /**
61
+ * Expand `${VAR}` references inside `env`/`headers` values against the
62
+ * operator's own environment.
63
+ *
64
+ * Deliberately narrower than the interpolation some other MCP clients'
65
+ * configs use (see docs/cli/mcp-servers.md): bare `${VAR}` only, no
66
+ * `${VAR:-default}` fallback, and only inside `env` and `headers` values —
67
+ * never `command`, `args`, `url` or `cwd`, which have no legitimate secret
68
+ * use case and would only widen the surface for an accidental literal `${`
69
+ * to break. A referenced variable that is unset is refused with a named
70
+ * reason, not silently substituted with an empty string: that is exactly
71
+ * the footgun a `:-default` fallback would reintroduce, and this module's
72
+ * whole design is "every failure is named" rather than a server running
73
+ * quietly with a secret it never got.
74
+ *
75
+ * `inheritEnv` stays the primary idiom for "grant this named variable to
76
+ * the child process under its own name" — this is for the config VALUE
77
+ * itself, letting an operator rename an env var into whatever key or
78
+ * header a server expects, and giving `headers` a secret-safe option it
79
+ * has never had (`inheritEnv` only reaches the stdio child's process env,
80
+ * not header values).
81
+ *
82
+ * Returns the expanded record, or a reason string naming the first unset
83
+ * variable a value referenced.
84
+ */
85
+ export function expandEnvRefsInRecord(record, env) {
86
+ const result = {};
87
+ for (const [key, raw] of Object.entries(record)) {
88
+ let missing;
89
+ const expanded = raw.replace(ENV_REF_PATTERN, (whole, name) => {
90
+ const value = env[name];
91
+ if (value === undefined) {
92
+ missing = name;
93
+ return whole;
94
+ }
95
+ return value;
96
+ });
97
+ if (missing !== undefined) {
98
+ return `references \${${missing}}, which is not set in the operator's environment`;
99
+ }
100
+ result[key] = expanded;
101
+ }
102
+ return result;
103
+ }
53
104
  /**
54
105
  * Turn one spec into a transport, or say why it is not one.
55
106
  *
@@ -57,31 +108,179 @@ export const CLOSE_TIMEOUT_MS = 2_000;
57
108
  * operator who edited one into a file that already had the other, and picking
58
109
  * either would run something they did not mean to run.
59
110
  */
60
- export function transportFor(spec, defaultCwd) {
111
+ export function transportFor(spec, defaultCwd, env = process.env) {
61
112
  const hasCommand = typeof spec.command === 'string' && spec.command.trim().length > 0;
62
113
  const hasUrl = typeof spec.url === 'string' && spec.url.trim().length > 0;
63
114
  if (hasCommand && hasUrl) {
64
115
  return 'it declares both a command and a url — pick one';
65
116
  }
66
117
  if (hasCommand) {
118
+ const expandedEnv = spec.env ? expandEnvRefsInRecord(spec.env, env) : undefined;
119
+ if (typeof expandedEnv === 'string')
120
+ return expandedEnv;
67
121
  return {
68
122
  type: 'stdio',
69
123
  command: spec.command,
70
124
  ...(spec.args ? { args: [...spec.args] } : {}),
71
- ...(spec.env ? { env: { ...spec.env } } : {}),
125
+ ...(expandedEnv ? { env: expandedEnv } : {}),
72
126
  ...(spec.inheritEnv ? { inheritEnv: [...spec.inheritEnv] } : {}),
73
127
  cwd: spec.cwd ?? defaultCwd,
74
128
  };
75
129
  }
76
130
  if (hasUrl) {
131
+ const expandedHeaders = spec.headers ? expandEnvRefsInRecord(spec.headers, env) : undefined;
132
+ if (typeof expandedHeaders === 'string')
133
+ return expandedHeaders;
77
134
  return {
78
135
  type: 'streamable-http',
79
136
  url: spec.url,
80
- ...(spec.headers ? { headers: { ...spec.headers } } : {}),
137
+ ...(expandedHeaders ? { headers: expandedHeaders } : {}),
81
138
  };
82
139
  }
83
140
  return 'it declares neither a command nor a url';
84
141
  }
142
+ /** One refresh per credential file; unrelated MCP requests remain concurrent. */
143
+ const mcpOAuthRefreshes = new Map();
144
+ function mcpOAuthUnauthorized() {
145
+ return new MCPHttpStatusError('MCP OAuth', 401, 'authorization required; run `namzu mcp login <server>`', '');
146
+ }
147
+ /**
148
+ * A running agent may reuse a saved OAuth grant, including its refresh token,
149
+ * but only an explicit `mcp login` may begin browser authorization. The store
150
+ * binds the grant to this complete URL (path and query included), and the
151
+ * fetch guard keeps it there even if a transport changes its request target.
152
+ */
153
+ function withSavedMcpOAuth(transport) {
154
+ if (transport.type !== 'streamable-http')
155
+ return transport;
156
+ // A configured Authorization header is the operator's chosen credential.
157
+ // The official middleware would replace it with the saved bearer token.
158
+ if (Object.keys(transport.headers ?? {}).some((key) => key.toLowerCase() === 'authorization')) {
159
+ return transport;
160
+ }
161
+ let endpoint;
162
+ try {
163
+ endpoint = new URL(transport.url);
164
+ }
165
+ catch {
166
+ return transport;
167
+ }
168
+ // The OAuth store accepts HTTPS and loopback HTTP. Preserve ordinary MCP
169
+ // behavior for other URLs instead of turning their lack of OAuth into an
170
+ // unrelated startup error.
171
+ if (!isSecureMcpOAuthUrl(endpoint))
172
+ return transport;
173
+ if (!hasMcpOAuthTokens(transport.url))
174
+ return transport;
175
+ const provider = createMcpOAuthProvider({ endpoint: transport.url });
176
+ const rawFetch = fetch;
177
+ const oauthNetworkFetch = (input, init) => {
178
+ const target = new URL(String(input));
179
+ if (!isSecureMcpOAuthUrl(target)) {
180
+ throw new McpOAuthStoreError('MCP OAuth network requests require HTTPS or loopback HTTP.');
181
+ }
182
+ // OAuth discovery and token requests may carry a client secret or refresh
183
+ // token. A 307/308 must never replay their POST body to a redirect target.
184
+ return rawFetch(input, { ...init, redirect: 'manual' });
185
+ };
186
+ const credentialKey = mcpOAuthPath(transport.url);
187
+ const authenticatedFetch = withOAuth(provider, transport.url)(async (input, init) => {
188
+ if (input.toString() !== transport.url) {
189
+ throw new Error('MCP OAuth refused a request to a different endpoint');
190
+ }
191
+ // The bearer token is attached by `withOAuth` before this call. Never
192
+ // auto-follow a redirect with it, including to another path on the
193
+ // same origin, even if an SDK transport changes its own redirect mode.
194
+ const response = await rawFetch(input, { ...init, redirect: 'manual' });
195
+ if (response.status !== 401)
196
+ return response;
197
+ // Intercept the challenge before `withOAuth` can start an independent
198
+ // refresh for every simultaneous request. Its token attachment remains
199
+ // authoritative; the official `auth()` performs the refresh once.
200
+ const attemptedAuthorization = new Headers(init?.headers).get('authorization');
201
+ const { resourceMetadataUrl, scope } = extractWWWAuthenticateParams(response);
202
+ void response.body?.cancel().catch(() => undefined);
203
+ let refresh = mcpOAuthRefreshes.get(credentialKey);
204
+ if (!refresh) {
205
+ refresh = (async () => {
206
+ const current = await provider.tokens();
207
+ if (!current)
208
+ throw new McpOAuthLoginRequiredError();
209
+ // Another connection or process may have renewed this grant while
210
+ // the old request was in flight. Its new access token is enough.
211
+ if (attemptedAuthorization !== `Bearer ${current.access_token}`)
212
+ return;
213
+ const result = await auth(provider, {
214
+ serverUrl: transport.url,
215
+ resourceMetadataUrl,
216
+ scope,
217
+ fetchFn: oauthNetworkFetch,
218
+ });
219
+ if (result !== 'AUTHORIZED')
220
+ throw new McpOAuthLoginRequiredError();
221
+ })();
222
+ mcpOAuthRefreshes.set(credentialKey, refresh);
223
+ const ownedRefresh = refresh;
224
+ void ownedRefresh.then(() => {
225
+ if (mcpOAuthRefreshes.get(credentialKey) === ownedRefresh) {
226
+ mcpOAuthRefreshes.delete(credentialKey);
227
+ }
228
+ }, () => {
229
+ if (mcpOAuthRefreshes.get(credentialKey) === ownedRefresh) {
230
+ mcpOAuthRefreshes.delete(credentialKey);
231
+ }
232
+ });
233
+ }
234
+ try {
235
+ await refresh;
236
+ }
237
+ catch {
238
+ // A second process may have won a rotating-token refresh while
239
+ // this one failed. The store's issuer/endpoint binding still holds;
240
+ // one retry with its new token is safe and avoids a false failure.
241
+ const latest = await provider.tokens();
242
+ if (!latest || attemptedAuthorization === `Bearer ${latest.access_token}`) {
243
+ throw mcpOAuthUnauthorized();
244
+ }
245
+ }
246
+ const current = await provider.tokens();
247
+ if (!current)
248
+ throw mcpOAuthUnauthorized();
249
+ const headers = new Headers(init?.headers);
250
+ headers.set('Authorization', `Bearer ${current.access_token}`);
251
+ const retried = await rawFetch(input, { ...init, headers, redirect: 'manual' });
252
+ if (retried.status === 401) {
253
+ void retried.body?.cancel().catch(() => undefined);
254
+ throw mcpOAuthUnauthorized();
255
+ }
256
+ return retried;
257
+ });
258
+ const oauthFetch = async (input, init) => {
259
+ // `withOAuth` authenticates any URL handed to it. Our Streamable HTTP
260
+ // transport sends the configured URL exactly; reject any other target
261
+ // before the bearer token can reach it.
262
+ if (input !== transport.url) {
263
+ throw new Error('MCP OAuth refused a request to a different endpoint');
264
+ }
265
+ try {
266
+ if (!(await provider.tokens()))
267
+ throw new McpOAuthLoginRequiredError();
268
+ return await authenticatedFetch(input, init);
269
+ }
270
+ catch (error) {
271
+ if (error instanceof UnauthorizedError ||
272
+ error instanceof McpOAuthLoginRequiredError ||
273
+ error instanceof McpOAuthStoreError) {
274
+ // The official middleware throws after a 401 or failed refresh.
275
+ // The SDK's era probe recognizes its own HTTP status error and
276
+ // refuses 401 instead of offering a legacy initialize handshake.
277
+ throw mcpOAuthUnauthorized();
278
+ }
279
+ throw error;
280
+ }
281
+ };
282
+ return { ...transport, fetch: oauthFetch };
283
+ }
85
284
  async function withDeadline(work, ms, what) {
86
285
  let timer;
87
286
  try {
@@ -136,9 +335,38 @@ export function eraProbeTimeoutFor(spec) {
136
335
  }
137
336
  return ms;
138
337
  }
338
+ function toolsetOptionsFor(spec, name) {
339
+ for (const field of ['allow', 'deny']) {
340
+ const value = spec[field];
341
+ if (value !== undefined &&
342
+ (!Array.isArray(value) || !value.every((item) => typeof item === 'string' && item.length > 0))) {
343
+ return `${field} must be a list of nonempty server-reported names`;
344
+ }
345
+ }
346
+ if (spec.maxRetries !== undefined &&
347
+ (!Number.isSafeInteger(spec.maxRetries) || spec.maxRetries < 0)) {
348
+ return `maxRetries must be a nonnegative integer, got ${JSON.stringify(spec.maxRetries)}`;
349
+ }
350
+ if (spec.requireApproval !== undefined && typeof spec.requireApproval !== 'boolean') {
351
+ return 'requireApproval must be true or false';
352
+ }
353
+ if (spec.readOnlyHintTrusted !== undefined && typeof spec.readOnlyHintTrusted !== 'boolean') {
354
+ return 'readOnlyHintTrusted must be true or false';
355
+ }
356
+ if (spec.instructions !== undefined && typeof spec.instructions !== 'boolean') {
357
+ return 'instructions must be true or false';
358
+ }
359
+ return {
360
+ id: `mcp:${name}`,
361
+ allow: spec.allow,
362
+ deny: spec.deny,
363
+ maxRetries: spec.maxRetries,
364
+ readOnlyHintTrusted: spec.readOnlyHintTrusted,
365
+ };
366
+ }
139
367
  export async function connectMcpServers(config, options) {
140
368
  const entries = Object.entries(config ?? {});
141
- const tools = [];
369
+ const toolsets = [];
142
370
  const startupFailed = [];
143
371
  const clients = [];
144
372
  const liveServers = [];
@@ -147,6 +375,10 @@ export async function connectMcpServers(config, options) {
147
375
  // of nothing and the failure output arrive interleaved, for a saving that
148
376
  // matters only to someone running many servers, who has other problems.
149
377
  for (const [name, spec] of entries) {
378
+ if (typeof spec !== 'object' || spec === null) {
379
+ startupFailed.push({ name, reason: 'server spec must be a mapping' });
380
+ continue;
381
+ }
150
382
  const transport = transportFor(spec, options.cwd);
151
383
  if (typeof transport === 'string') {
152
384
  startupFailed.push({ name, reason: transport });
@@ -162,26 +394,50 @@ export async function connectMcpServers(config, options) {
162
394
  startupFailed.push({ name, reason: eraProbeTimeoutMs });
163
395
  continue;
164
396
  }
397
+ const toolsetOptions = toolsetOptionsFor(spec, name);
398
+ if (typeof toolsetOptions === 'string') {
399
+ startupFailed.push({ name, reason: toolsetOptions });
400
+ continue;
401
+ }
402
+ let connectedTransport;
403
+ try {
404
+ connectedTransport =
405
+ transport.type === 'streamable-http' ? withSavedMcpOAuth(transport) : transport;
406
+ }
407
+ catch (error) {
408
+ startupFailed.push({ name, reason: reasonOf(error) });
409
+ continue;
410
+ }
165
411
  const client = new MCPClient({
166
412
  serverName: name,
167
- transport,
413
+ transport: connectedTransport,
168
414
  ...(eraProbeTimeoutMs !== undefined ? { eraProbeTimeoutMs } : {}),
169
415
  });
416
+ const discovery = {
417
+ added: new Set(),
418
+ removed: new Set(),
419
+ changed: new Set(),
420
+ refused: new Map(),
421
+ };
170
422
  try {
171
423
  await withDeadline(client.connect(), deadline, `server "${name}"`);
172
- const listed = await withDeadline(client.listTools(), deadline, `server "${name}" listing its tools`);
173
- // Adapted once, then read twice. Adapting a second time to collect
174
- // the names would build a parallel set of definitions bound to the
175
- // same client — cheap today and exactly the kind of duplicate a
176
- // future adapter with a side effect turns into a bug.
177
- const adapted = listed.map((tool) => mcpToolToToolDefinition(tool, client, name));
178
- tools.push(...adapted);
179
- const summary = {
180
- name,
181
- toolCount: adapted.length,
182
- tools: adapted.map((tool) => tool.name),
183
- };
184
- liveServers.push({ client, summary });
424
+ const discovered = await withDeadline(mcpToolset(client, {
425
+ ...toolsetOptions,
426
+ onDrift: ({ drift }) => {
427
+ for (const item of drift.added)
428
+ discovery.added.add(item);
429
+ for (const item of drift.removed)
430
+ discovery.removed.add(item);
431
+ for (const item of drift.changed)
432
+ discovery.changed.add(item);
433
+ },
434
+ onRefused: ({ kind, refused }) => discovery.refused.set(kind, refused),
435
+ }), deadline, `server "${name}" discovering its tools`);
436
+ const mounted = spec.requireApproval
437
+ ? discovered.map((entry) => requireApproval(entry))
438
+ : [...discovered];
439
+ toolsets.push(...mounted);
440
+ liveServers.push({ client, name, toolsets: mounted, discovery });
185
441
  clients.push(client);
186
442
  }
187
443
  catch (err) {
@@ -207,14 +463,28 @@ export async function connectMcpServers(config, options) {
207
463
  const current = () => {
208
464
  const connected = [];
209
465
  const failed = [...startupFailed];
210
- for (const { client, summary } of liveServers) {
466
+ for (const { client, name, toolsets: serverToolsets, discovery } of liveServers) {
211
467
  const state = client.getState();
212
468
  if (state.status === 'connected') {
213
- connected.push(summary);
469
+ const names = serverToolsets.flatMap((entry) => entry.tools().map((tool) => tool.name));
470
+ connected.push({
471
+ name,
472
+ toolCount: names.length,
473
+ tools: names,
474
+ drift: {
475
+ added: [...discovery.added],
476
+ removed: [...discovery.removed],
477
+ changed: [...discovery.changed],
478
+ },
479
+ refused: [...discovery.refused.entries()].flatMap(([kind, items]) => items.map((item) => ({ kind, ...item }))),
480
+ ...(state.serverInstructions !== undefined
481
+ ? { instructions: state.serverInstructions }
482
+ : {}),
483
+ });
214
484
  continue;
215
485
  }
216
486
  failed.push({
217
- name: summary.name,
487
+ name,
218
488
  reason: state.error ??
219
489
  (state.status === 'disconnected'
220
490
  ? 'connection closed after startup'
@@ -224,7 +494,10 @@ export async function connectMcpServers(config, options) {
224
494
  return { connected, failed };
225
495
  };
226
496
  return {
227
- tools,
497
+ get tools() {
498
+ return toolsets.flatMap((entry) => entry.tools());
499
+ },
500
+ toolsets,
228
501
  current,
229
502
  get connected() {
230
503
  return current().connected;
@@ -233,6 +506,7 @@ export async function connectMcpServers(config, options) {
233
506
  return current().failed;
234
507
  },
235
508
  close: async () => {
509
+ await Promise.all(toolsets.map((entry) => entry.close?.()));
236
510
  await Promise.all(clients.map((c) => withDeadline(c.disconnect(), CLOSE_TIMEOUT_MS, 'closing a tool server').catch(() => {
237
511
  // Shutting down is best effort by definition: the process may
238
512
  // already be gone, and nothing useful follows from saying so.
@@ -1 +1 @@
1
- {"version":3,"file":"servers.js","sourceRoot":"","sources":["../../../src/integrations/mcp/servers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EACN,SAAS,EAGT,uBAAuB,GACvB,MAAM,YAAY,CAAA;AAEnB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAA;AAExC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAA;AAmGrC;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,IAAmB,EAAE,UAAkB;IACnE,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAA;IACrF,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAA;IACzE,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;QAC1B,OAAO,iDAAiD,CAAA;IACzD,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QAChB,OAAO;YACN,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,IAAI,CAAC,OAAiB;YAC/B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,UAAU;SAC3B,CAAA;IACF,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACZ,OAAO;YACN,IAAI,EAAE,iBAAiB;YACvB,GAAG,EAAE,IAAI,CAAC,GAAa;YACvB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD,CAAA;IACF,CAAC;IACD,OAAO,yCAAyC,CAAA;AACjD,CAAC;AAED,KAAK,UAAU,YAAY,CAAI,IAAgB,EAAE,EAAU,EAAE,IAAY;IACxE,IAAI,KAAiC,CAAA;IACrC,IAAI,CAAC;QACJ,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACzB,IAAI;YACJ,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAChC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YACzF,CAAC,CAAC;SACF,CAAC,CAAA;IACH,CAAC;YAAS,CAAC;QACV,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;AACF,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,GAAY,EAAU,EAAE,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAE7F;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAmB;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;IAChC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,kBAAkB,CAAA;IAC/C,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QAC/D,OAAO,mEAAmE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAA;IAC/F,CAAC;IACD,OAAO,EAAE,CAAA;AACV,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAmB;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAA;IACjC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACtC,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QAC/D,OAAO,oEAAoE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAA;IAChG,CAAC;IACD,OAAO,EAAE,CAAA;AACV,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,MAAoC,EACpC,OAAiC;IAEjC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;IAC5C,MAAM,KAAK,GAAqB,EAAE,CAAA;IAClC,MAAM,aAAa,GAAsB,EAAE,CAAA;IAC3C,MAAM,OAAO,GAAgB,EAAE,CAAA;IAC/B,MAAM,WAAW,GAGZ,EAAE,CAAA;IAEP,wEAAwE;IACxE,2EAA2E;IAC3E,0EAA0E;IAC1E,wEAAwE;IACxE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;QACjD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YACnC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;YAC/C,SAAQ;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;YAC9C,SAAQ;QACT,CAAC;QACD,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE,CAAC;YAC3C,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAA;YACvD,SAAQ;QACT,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;YAC5B,UAAU,EAAE,IAAI;YAChB,SAAS;YACT,GAAG,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjE,CAAC,CAAA;QACF,IAAI,CAAC;YACJ,MAAM,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,IAAI,GAAG,CAAC,CAAA;YAClE,MAAM,MAAM,GAAG,MAAM,YAAY,CAChC,MAAM,CAAC,SAAS,EAAE,EAClB,QAAQ,EACR,WAAW,IAAI,qBAAqB,CACpC,CAAA;YACD,mEAAmE;YACnE,mEAAmE;YACnE,gEAAgE;YAChE,sDAAsD;YACtD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;YACjF,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAA;YACtB,MAAM,OAAO,GAAG;gBACf,IAAI;gBACJ,SAAS,EAAE,OAAO,CAAC,MAAM;gBACzB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;aACV,CAAA;YAC9B,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;YACrC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACnD,sEAAsE;YACtE,mEAAmE;YACnE,EAAE;YACF,mEAAmE;YACnE,oEAAoE;YACpE,6DAA6D;YAC7D,iEAAiE;YACjE,mEAAmE;YACnE,2DAA2D;YAC3D,IAAI,CAAC;gBACJ,MAAM,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,gBAAgB,EAAE,YAAY,IAAI,GAAG,CAAC,CAAA;YAC/E,CAAC;YAAC,MAAM,CAAC;gBACR,qEAAqE;gBACrE,gEAAgE;YACjE,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,OAAO,GAAG,GAGd,EAAE;QACH,MAAM,SAAS,GAAyB,EAAE,CAAA;QAC1C,MAAM,MAAM,GAAsB,CAAC,GAAG,aAAa,CAAC,CAAA;QACpD,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;YAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACvB,SAAQ;YACT,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EACL,KAAK,CAAC,KAAK;oBACX,CAAC,KAAK,CAAC,MAAM,KAAK,cAAc;wBAC/B,CAAC,CAAC,iCAAiC;wBACnC,CAAC,CAAC,iBAAiB,KAAK,CAAC,MAAM,EAAE,CAAC;aACpC,CAAC,CAAA;QACH,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAA;IAC7B,CAAC,CAAA;IAED,OAAO;QACN,KAAK;QACL,OAAO;QACP,IAAI,SAAS;YACZ,OAAO,OAAO,EAAE,CAAC,SAAS,CAAA;QAC3B,CAAC;QACD,IAAI,MAAM;YACT,OAAO,OAAO,EAAE,CAAC,MAAM,CAAA;QACxB,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACjB,YAAY,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAClF,8DAA8D;gBAC9D,8DAA8D;gBAC9D,0DAA0D;gBAC1D,iDAAiD;YAClD,CAAC,CAAC,CACF,CACD,CAAA;QACF,CAAC;KACD,CAAA;AACF,CAAC"}
1
+ {"version":3,"file":"servers.js","sourceRoot":"","sources":["../../../src/integrations/mcp/servers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EACN,iBAAiB,EACjB,IAAI,EACJ,4BAA4B,EAC5B,SAAS,GACT,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACN,SAAS,EAET,kBAAkB,EAMlB,UAAU,EACV,eAAe,GACf,MAAM,YAAY,CAAA;AAEnB,OAAO,EACN,0BAA0B,EAC1B,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,GACZ,MAAM,kBAAkB,CAAA;AAEzB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAA;AAExC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAA;AA4IrC;;;GAGG;AACH,MAAM,eAAe,GAAG,iCAAiC,CAAA;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,qBAAqB,CACpC,MAAwC,EACxC,GAAsB;IAEtB,MAAM,MAAM,GAA2B,EAAE,CAAA;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,IAAI,OAA2B,CAAA;QAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;YACrE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;YACvB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO,GAAG,IAAI,CAAA;gBACd,OAAO,KAAK,CAAA;YACb,CAAC;YACD,OAAO,KAAK,CAAA;QACb,CAAC,CAAC,CAAA;QACF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,iBAAiB,OAAO,mDAAmD,CAAA;QACnF,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAA;IACvB,CAAC;IACD,OAAO,MAAM,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC3B,IAAmB,EACnB,UAAkB,EAClB,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAA;IACrF,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAA;IACzE,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;QAC1B,OAAO,iDAAiD,CAAA;IACzD,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QAChB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC/E,IAAI,OAAO,WAAW,KAAK,QAAQ;YAAE,OAAO,WAAW,CAAA;QACvD,OAAO;YACN,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,IAAI,CAAC,OAAiB;YAC/B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,UAAU;SAC3B,CAAA;IACF,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC3F,IAAI,OAAO,eAAe,KAAK,QAAQ;YAAE,OAAO,eAAe,CAAA;QAC/D,OAAO;YACN,IAAI,EAAE,iBAAiB;YACvB,GAAG,EAAE,IAAI,CAAC,GAAa;YACvB,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAA;IACF,CAAC;IACD,OAAO,yCAAyC,CAAA;AACjD,CAAC;AAED,iFAAiF;AACjF,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAyB,CAAA;AAE1D,SAAS,oBAAoB;IAC5B,OAAO,IAAI,kBAAkB,CAC5B,WAAW,EACX,GAAG,EACH,wDAAwD,EACxD,EAAE,CACF,CAAA;AACF,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CACzB,SAAsD;IAEtD,IAAI,SAAS,CAAC,IAAI,KAAK,iBAAiB;QAAE,OAAO,SAAS,CAAA;IAC1D,yEAAyE;IACzE,wEAAwE;IACxE,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,EAAE,CAAC;QAC/F,OAAO,SAAS,CAAA;IACjB,CAAC;IACD,IAAI,QAAa,CAAA;IACjB,IAAI,CAAC;QACJ,QAAQ,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAClC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAA;IACjB,CAAC;IACD,yEAAyE;IACzE,yEAAyE;IACzE,2BAA2B;IAC3B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAA;IACpD,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAA;IAEvD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,CAAA;IACpE,MAAM,QAAQ,GAAG,KAAK,CAAA;IACtB,MAAM,iBAAiB,GAAG,CAAC,KAAmB,EAAE,IAAkB,EAAqB,EAAE;QACxF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACrC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,kBAAkB,CAAC,4DAA4D,CAAC,CAAA;QAC3F,CAAC;QACD,0EAA0E;QAC1E,2EAA2E;QAC3E,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;IACxD,CAAC,CAAA;IACD,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACjD,MAAM,kBAAkB,GAAG,SAAS,CACnC,QAAQ,EACR,SAAS,CAAC,GAAG,CACb,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;QACvE,CAAC;QACD,sEAAsE;QACtE,mEAAmE;QACnE,uEAAuE;QACvE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;QACvE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,QAAQ,CAAA;QAC5C,sEAAsE;QACtE,uEAAuE;QACvE,kEAAkE;QAClE,MAAM,sBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QAC9E,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAA;QAC7E,KAAK,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QACnD,IAAI,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;gBACrB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAA;gBACvC,IAAI,CAAC,OAAO;oBAAE,MAAM,IAAI,0BAA0B,EAAE,CAAA;gBACpD,kEAAkE;gBAClE,iEAAiE;gBACjE,IAAI,sBAAsB,KAAK,UAAU,OAAO,CAAC,YAAY,EAAE;oBAAE,OAAM;gBACvE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE;oBACnC,SAAS,EAAE,SAAS,CAAC,GAAG;oBACxB,mBAAmB;oBACnB,KAAK;oBACL,OAAO,EAAE,iBAAiB;iBAC1B,CAAC,CAAA;gBACF,IAAI,MAAM,KAAK,YAAY;oBAAE,MAAM,IAAI,0BAA0B,EAAE,CAAA;YACpE,CAAC,CAAC,EAAE,CAAA;YACJ,iBAAiB,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;YAC7C,MAAM,YAAY,GAAG,OAAO,CAAA;YAC5B,KAAK,YAAY,CAAC,IAAI,CACrB,GAAG,EAAE;gBACJ,IAAI,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,YAAY,EAAE,CAAC;oBAC3D,iBAAiB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;gBACxC,CAAC;YACF,CAAC,EACD,GAAG,EAAE;gBACJ,IAAI,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,YAAY,EAAE,CAAC;oBAC3D,iBAAiB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;gBACxC,CAAC;YACF,CAAC,CACD,CAAA;QACF,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,OAAO,CAAA;QACd,CAAC;QAAC,MAAM,CAAC;YACR,+DAA+D;YAC/D,oEAAoE;YACpE,mEAAmE;YACnE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAA;YACtC,IAAI,CAAC,MAAM,IAAI,sBAAsB,KAAK,UAAU,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;gBAC3E,MAAM,oBAAoB,EAAE,CAAA;YAC7B,CAAC;QACF,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAA;QACvC,IAAI,CAAC,OAAO;YAAE,MAAM,oBAAoB,EAAE,CAAA;QAC1C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;QAC9D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC/E,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,KAAK,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;YAClD,MAAM,oBAAoB,EAAE,CAAA;QAC7B,CAAC;QACD,OAAO,OAAO,CAAA;IACf,CAAC,CAAC,CAAA;IACF,MAAM,UAAU,GAAiB,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtD,sEAAsE;QACtE,sEAAsE;QACtE,wCAAwC;QACxC,IAAI,KAAK,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;QACvE,CAAC;QACD,IAAI,CAAC;YACJ,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAAE,MAAM,IAAI,0BAA0B,EAAE,CAAA;YACtE,OAAO,MAAM,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IACC,KAAK,YAAY,iBAAiB;gBAClC,KAAK,YAAY,0BAA0B;gBAC3C,KAAK,YAAY,kBAAkB,EAClC,CAAC;gBACF,gEAAgE;gBAChE,+DAA+D;gBAC/D,iEAAiE;gBACjE,MAAM,oBAAoB,EAAE,CAAA;YAC7B,CAAC;YACD,MAAM,KAAK,CAAA;QACZ,CAAC;IACF,CAAC,CAAA;IACD,OAAO,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;AAC3C,CAAC;AAED,KAAK,UAAU,YAAY,CAAI,IAAgB,EAAE,EAAU,EAAE,IAAY;IACxE,IAAI,KAAiC,CAAA;IACrC,IAAI,CAAC;QACJ,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACzB,IAAI;YACJ,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAChC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YACzF,CAAC,CAAC;SACF,CAAC,CAAA;IACH,CAAC;YAAS,CAAC;QACV,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;AACF,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,GAAY,EAAU,EAAE,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAE7F;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAmB;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;IAChC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,kBAAkB,CAAA;IAC/C,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QAC/D,OAAO,mEAAmE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAA;IAC/F,CAAC;IACD,OAAO,EAAE,CAAA;AACV,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAmB;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAA;IACjC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACtC,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QAC/D,OAAO,oEAAoE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAA;IAChG,CAAC;IACD,OAAO,EAAE,CAAA;AACV,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAmB,EAAE,IAAY;IAC3D,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,CAAU,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;QACzB,IACC,KAAK,KAAK,SAAS;YACnB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAC7F,CAAC;YACF,OAAO,GAAG,KAAK,mDAAmD,CAAA;QACnE,CAAC;IACF,CAAC;IACD,IACC,IAAI,CAAC,UAAU,KAAK,SAAS;QAC7B,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAC9D,CAAC;QACF,OAAO,iDAAiD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAA;IAC1F,CAAC;IACD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACrF,OAAO,uCAAuC,CAAA;IAC/C,CAAC;IACD,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QAC7F,OAAO,2CAA2C,CAAA;IACnD,CAAC;IACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/E,OAAO,oCAAoC,CAAA;IAC5C,CAAC;IACD,OAAO;QACN,EAAE,EAAE,OAAO,IAAI,EAAE;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;KAC7C,CAAA;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,MAAoC,EACpC,OAAiC;IAEjC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAc,EAAE,CAAA;IAC9B,MAAM,aAAa,GAAsB,EAAE,CAAA;IAC3C,MAAM,OAAO,GAAgB,EAAE,CAAA;IAC/B,MAAM,WAAW,GAaZ,EAAE,CAAA;IAEP,wEAAwE;IACxE,2EAA2E;IAC3E,0EAA0E;IAC1E,wEAAwE;IACxE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC/C,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAA;YACrE,SAAQ;QACT,CAAC;QACD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;QACjD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YACnC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;YAC/C,SAAQ;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;YAC9C,SAAQ;QACT,CAAC;QACD,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE,CAAC;YAC3C,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAA;YACvD,SAAQ;QACT,CAAC;QACD,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACpD,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACxC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;YACpD,SAAQ;QACT,CAAC;QACD,IAAI,kBAAqC,CAAA;QACzC,IAAI,CAAC;YACJ,kBAAkB;gBACjB,SAAS,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACjF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACrD,SAAQ;QACT,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;YAC5B,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,kBAAkB;YAC7B,GAAG,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjE,CAAC,CAAA;QACF,MAAM,SAAS,GAAG;YACjB,KAAK,EAAE,IAAI,GAAG,EAAU;YACxB,OAAO,EAAE,IAAI,GAAG,EAAU;YAC1B,OAAO,EAAE,IAAI,GAAG,EAAU;YAC1B,OAAO,EAAE,IAAI,GAAG,EAGb;SACH,CAAA;QACD,IAAI,CAAC;YACJ,MAAM,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,IAAI,GAAG,CAAC,CAAA;YAClE,MAAM,UAAU,GAAG,MAAM,YAAY,CACpC,UAAU,CAAC,MAAM,EAAE;gBAClB,GAAG,cAAc;gBACjB,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;oBACtB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK;wBAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;oBACzD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO;wBAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;oBAC7D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO;wBAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBAC9D,CAAC;gBACD,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;aACtE,CAAC,EACF,QAAQ,EACR,WAAW,IAAI,yBAAyB,CACxC,CAAA;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe;gBACnC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAA;YAClB,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAA;YACzB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA;YAChE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACnD,sEAAsE;YACtE,mEAAmE;YACnE,EAAE;YACF,mEAAmE;YACnE,oEAAoE;YACpE,6DAA6D;YAC7D,iEAAiE;YACjE,mEAAmE;YACnE,2DAA2D;YAC3D,IAAI,CAAC;gBACJ,MAAM,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,gBAAgB,EAAE,YAAY,IAAI,GAAG,CAAC,CAAA;YAC/E,CAAC;YAAC,MAAM,CAAC;gBACR,qEAAqE;gBACrE,gEAAgE;YACjE,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,OAAO,GAAG,GAGd,EAAE;QACH,MAAM,SAAS,GAAyB,EAAE,CAAA;QAC1C,MAAM,MAAM,GAAsB,CAAC,GAAG,aAAa,CAAC,CAAA;QACpD,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,WAAW,EAAE,CAAC;YACjF,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;YAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;gBACvF,SAAS,CAAC,IAAI,CAAC;oBACd,IAAI;oBACJ,SAAS,EAAE,KAAK,CAAC,MAAM;oBACvB,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE;wBACN,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;wBAC3B,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC;wBAC/B,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC;qBAC/B;oBACD,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CACnE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CACxC;oBACD,GAAG,CAAC,KAAK,CAAC,kBAAkB,KAAK,SAAS;wBACzC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,kBAAkB,EAAE;wBAC5C,CAAC,CAAC,EAAE,CAAC;iBACN,CAAC,CAAA;gBACF,SAAQ;YACT,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,MAAM,EACL,KAAK,CAAC,KAAK;oBACX,CAAC,KAAK,CAAC,MAAM,KAAK,cAAc;wBAC/B,CAAC,CAAC,iCAAiC;wBACnC,CAAC,CAAC,iBAAiB,KAAK,CAAC,MAAM,EAAE,CAAC;aACpC,CAAC,CAAA;QACH,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAA;IAC7B,CAAC,CAAA;IAED,OAAO;QACN,IAAI,KAAK;YACR,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;QAClD,CAAC;QACD,QAAQ;QACR,OAAO;QACP,IAAI,SAAS;YACZ,OAAO,OAAO,EAAE,CAAC,SAAS,CAAA;QAC3B,CAAC;QACD,IAAI,MAAM;YACT,OAAO,OAAO,EAAE,CAAC,MAAM,CAAA;QACxB,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;YAC3D,MAAM,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACjB,YAAY,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAClF,8DAA8D;gBAC9D,8DAA8D;gBAC9D,0DAA0D;gBAC1D,iDAAiD;YAClD,CAAC,CAAC,CACF,CACD,CAAA;QACF,CAAC;KACD,CAAA;AACF,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { type UserConfigWriteOptions } from '../../config/user-config.js';
2
+ import type { McpServerSpec } from './servers.js';
3
+ export interface UserMcpServer {
4
+ readonly name: string;
5
+ readonly spec: unknown;
6
+ }
7
+ /** Read only the user's own entries, not project/profile/managed overrides. */
8
+ export declare function readUserMcpServers(opts?: UserConfigWriteOptions): readonly UserMcpServer[];
9
+ export declare function isUserMcpName(name: string): boolean;
10
+ /** Never replace an entry silently: the existing server may carry permissions. */
11
+ export declare function addUserMcpServer(name: string, spec: McpServerSpec, opts?: UserConfigWriteOptions): string;
12
+ export declare function removeUserMcpServer(name: string, opts?: UserConfigWriteOptions): boolean;
13
+ export interface UserMcpServerSummary {
14
+ readonly name: string;
15
+ readonly transport: 'stdio' | 'http' | 'invalid';
16
+ readonly command?: string;
17
+ readonly endpoint?: string;
18
+ readonly argumentCount?: number;
19
+ readonly envNames?: readonly string[];
20
+ readonly headerNames?: readonly string[];
21
+ readonly inheritEnv?: readonly string[];
22
+ }
23
+ /** Display metadata only. Headers, environment values, and argv can contain secrets. */
24
+ export declare function summarizeUserMcpServer(entry: UserMcpServer): UserMcpServerSummary;
25
+ //# sourceMappingURL=user-config.d.ts.map