@code-yeongyu/senpi 2026.9.9 → 2026.9.10

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 (1065) hide show
  1. package/CHANGELOG.md +82 -1
  2. package/README.md +2 -0
  3. package/dist/beta/omo-local-update-worker.js.map +1 -1
  4. package/dist/beta/omo-local-update.d.ts.map +1 -1
  5. package/dist/brand-dir-migration.js.map +1 -1
  6. package/dist/cli/args.d.ts.map +1 -1
  7. package/dist/cli/args.js +1 -0
  8. package/dist/cli/args.js.map +1 -1
  9. package/dist/cli/auth-check.js.map +1 -1
  10. package/dist/cli/experimental/command.d.ts.map +1 -1
  11. package/dist/cli/grok-neo-gate.js.map +1 -1
  12. package/dist/cli/startup-ui.js.map +1 -1
  13. package/dist/cli.js.map +1 -1
  14. package/dist/client/remote-session.d.ts.map +1 -1
  15. package/dist/client/remote-session.js.map +1 -1
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/config.js +43 -19
  18. package/dist/config.js.map +1 -1
  19. package/dist/core/agent-abort-provenance.d.ts.map +1 -1
  20. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  21. package/dist/core/agent-session-runtime.js.map +1 -1
  22. package/dist/core/agent-session.d.ts +46 -7
  23. package/dist/core/agent-session.d.ts.map +1 -1
  24. package/dist/core/agent-session.js +109 -6
  25. package/dist/core/agent-session.js.map +1 -1
  26. package/dist/core/agent-settled-delivery.d.ts.map +1 -1
  27. package/dist/core/auth-providers.js.map +1 -1
  28. package/dist/core/auth-storage.d.ts.map +1 -1
  29. package/dist/core/auth-storage.js.map +1 -1
  30. package/dist/core/brand.js.map +1 -1
  31. package/dist/core/compaction/branch-summarization.js.map +1 -1
  32. package/dist/core/compaction/compaction.js.map +1 -1
  33. package/dist/core/compaction/lifecycle.d.ts.map +1 -1
  34. package/dist/core/compaction/stream-watchdog.d.ts.map +1 -1
  35. package/dist/core/compaction/utils.js.map +1 -1
  36. package/dist/core/credential-accounts.js.map +1 -1
  37. package/dist/core/credential-pool/classify.js.map +1 -1
  38. package/dist/core/credential-pool/failover.d.ts.map +1 -1
  39. package/dist/core/credential-pool/rotation-stream.js.map +1 -1
  40. package/dist/core/credential-pool/state-store.d.ts +2 -2
  41. package/dist/core/credential-pool/state-store.d.ts.map +1 -1
  42. package/dist/core/credential-pool/state-store.js.map +1 -1
  43. package/dist/core/dynamic-prompt/verification.d.ts.map +1 -1
  44. package/dist/core/edited-assistant-message.d.ts +24 -0
  45. package/dist/core/edited-assistant-message.d.ts.map +1 -0
  46. package/dist/core/edited-assistant-message.js +57 -0
  47. package/dist/core/edited-assistant-message.js.map +1 -0
  48. package/dist/core/experimental.d.ts.map +1 -1
  49. package/dist/core/extensions/builtin/ask-user/extension.d.ts +3 -0
  50. package/dist/core/extensions/builtin/ask-user/extension.d.ts.map +1 -0
  51. package/dist/core/extensions/builtin/ask-user/extension.js +47 -0
  52. package/dist/core/extensions/builtin/ask-user/extension.js.map +1 -0
  53. package/dist/core/extensions/builtin/ask-user/family.d.ts +8 -0
  54. package/dist/core/extensions/builtin/ask-user/family.d.ts.map +1 -0
  55. package/dist/core/extensions/builtin/ask-user/family.js +6 -0
  56. package/dist/core/extensions/builtin/ask-user/family.js.map +1 -0
  57. package/dist/core/extensions/builtin/ask-user/format.d.ts +22 -0
  58. package/dist/core/extensions/builtin/ask-user/format.d.ts.map +1 -0
  59. package/dist/core/extensions/builtin/ask-user/format.js +109 -0
  60. package/dist/core/extensions/builtin/ask-user/format.js.map +1 -0
  61. package/dist/core/extensions/builtin/ask-user/index.d.ts +4 -0
  62. package/dist/core/extensions/builtin/ask-user/index.d.ts.map +1 -0
  63. package/dist/core/extensions/builtin/ask-user/index.js +4 -0
  64. package/dist/core/extensions/builtin/ask-user/index.js.map +1 -0
  65. package/dist/core/extensions/builtin/ask-user/params.d.ts +27 -0
  66. package/dist/core/extensions/builtin/ask-user/params.d.ts.map +1 -0
  67. package/dist/core/extensions/builtin/ask-user/params.js +78 -0
  68. package/dist/core/extensions/builtin/ask-user/params.js.map +1 -0
  69. package/dist/core/extensions/builtin/ask-user/pending.d.ts +58 -0
  70. package/dist/core/extensions/builtin/ask-user/pending.d.ts.map +1 -0
  71. package/dist/core/extensions/builtin/ask-user/pending.js +130 -0
  72. package/dist/core/extensions/builtin/ask-user/pending.js.map +1 -0
  73. package/dist/core/extensions/builtin/ask-user/registry.d.ts +21 -0
  74. package/dist/core/extensions/builtin/ask-user/registry.d.ts.map +1 -0
  75. package/dist/core/extensions/builtin/ask-user/registry.js +20 -0
  76. package/dist/core/extensions/builtin/ask-user/registry.js.map +1 -0
  77. package/dist/core/extensions/builtin/ask-user/render.d.ts +4 -0
  78. package/dist/core/extensions/builtin/ask-user/render.d.ts.map +1 -0
  79. package/dist/core/extensions/builtin/ask-user/render.js +25 -0
  80. package/dist/core/extensions/builtin/ask-user/render.js.map +1 -0
  81. package/dist/core/extensions/builtin/ask-user/resume.d.ts +4 -0
  82. package/dist/core/extensions/builtin/ask-user/resume.d.ts.map +1 -0
  83. package/dist/core/extensions/builtin/ask-user/resume.js +85 -0
  84. package/dist/core/extensions/builtin/ask-user/resume.js.map +1 -0
  85. package/dist/core/extensions/builtin/ask-user/schema.d.ts +40 -0
  86. package/dist/core/extensions/builtin/ask-user/schema.d.ts.map +1 -0
  87. package/dist/core/extensions/builtin/ask-user/schema.js +102 -0
  88. package/dist/core/extensions/builtin/ask-user/schema.js.map +1 -0
  89. package/dist/core/extensions/builtin/ask-user/tool.d.ts +8 -0
  90. package/dist/core/extensions/builtin/ask-user/tool.d.ts.map +1 -0
  91. package/dist/core/extensions/builtin/ask-user/tool.js +195 -0
  92. package/dist/core/extensions/builtin/ask-user/tool.js.map +1 -0
  93. package/dist/core/extensions/builtin/bash-timeout/timeout.js.map +1 -1
  94. package/dist/core/extensions/builtin/btw/panel.d.ts.map +1 -1
  95. package/dist/core/extensions/builtin/btw/side-query.js.map +1 -1
  96. package/dist/core/extensions/builtin/cache-keepalive/index.d.ts.map +1 -1
  97. package/dist/core/extensions/builtin/cache-keepalive/index.js.map +1 -1
  98. package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.js.map +1 -1
  99. package/dist/core/extensions/builtin/claude-sdk-oauth/account-management.js.map +1 -1
  100. package/dist/core/extensions/builtin/claude-sdk-oauth/accounts.d.ts.map +1 -1
  101. package/dist/core/extensions/builtin/claude-sdk-oauth/accounts.js.map +1 -1
  102. package/dist/core/extensions/builtin/claude-sdk-oauth/affinity.d.ts.map +1 -1
  103. package/dist/core/extensions/builtin/claude-sdk-oauth/affinity.js.map +1 -1
  104. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.d.ts +11 -0
  105. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.d.ts.map +1 -1
  106. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.js +12 -1
  107. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.js.map +1 -1
  108. package/dist/core/extensions/builtin/claude-sdk-oauth/bounded-queue.d.ts.map +1 -1
  109. package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.d.ts.map +1 -1
  110. package/dist/core/extensions/builtin/claude-sdk-oauth/errors.d.ts.map +1 -1
  111. package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.d.ts +14 -0
  112. package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.d.ts.map +1 -0
  113. package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.js +42 -0
  114. package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.js.map +1 -0
  115. package/dist/core/extensions/builtin/claude-sdk-oauth/executable.d.ts +18 -0
  116. package/dist/core/extensions/builtin/claude-sdk-oauth/executable.d.ts.map +1 -1
  117. package/dist/core/extensions/builtin/claude-sdk-oauth/executable.js +105 -36
  118. package/dist/core/extensions/builtin/claude-sdk-oauth/executable.js.map +1 -1
  119. package/dist/core/extensions/builtin/claude-sdk-oauth/failover.d.ts.map +1 -1
  120. package/dist/core/extensions/builtin/claude-sdk-oauth/index.js.map +1 -1
  121. package/dist/core/extensions/builtin/claude-sdk-oauth/refusal.d.ts.map +1 -1
  122. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.d.ts.map +1 -1
  123. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.d.ts.map +1 -1
  124. package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.d.ts.map +1 -1
  125. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reaper.d.ts.map +1 -1
  126. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.d.ts.map +1 -1
  127. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.js.map +1 -1
  128. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.d.ts.map +1 -1
  129. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts.map +1 -1
  130. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.d.ts.map +1 -1
  131. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js +4 -1
  132. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js.map +1 -1
  133. package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js.map +1 -1
  134. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.d.ts.map +1 -1
  135. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-types.d.ts.map +1 -1
  136. package/dist/core/extensions/builtin/claude-sdk-oauth/settings.js.map +1 -1
  137. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-protocol.d.ts +1 -1
  138. package/dist/core/extensions/builtin/claude-sdk-oauth/tool-watch.js.map +1 -1
  139. package/dist/core/extensions/builtin/claude-sdk-oauth/tools.d.ts.map +1 -1
  140. package/dist/core/extensions/builtin/compaction/context-reduction.js.map +1 -1
  141. package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -1
  142. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  143. package/dist/core/extensions/builtin/compaction/lane-policy.js.map +1 -1
  144. package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
  145. package/dist/core/extensions/builtin/compaction/model-usability-budget.d.ts.map +1 -1
  146. package/dist/core/extensions/builtin/compaction/openai-remote-convert.js.map +1 -1
  147. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
  148. package/dist/core/extensions/builtin/compaction/overflow-retry.d.ts.map +1 -1
  149. package/dist/core/extensions/builtin/compaction/resume-admission.d.ts +7 -0
  150. package/dist/core/extensions/builtin/compaction/resume-admission.d.ts.map +1 -0
  151. package/dist/core/extensions/builtin/compaction/resume-admission.js +7 -0
  152. package/dist/core/extensions/builtin/compaction/resume-admission.js.map +1 -0
  153. package/dist/core/extensions/builtin/compaction/resume-slice.d.ts +23 -0
  154. package/dist/core/extensions/builtin/compaction/resume-slice.d.ts.map +1 -0
  155. package/dist/core/extensions/builtin/compaction/resume-slice.js +99 -0
  156. package/dist/core/extensions/builtin/compaction/resume-slice.js.map +1 -0
  157. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  158. package/dist/core/extensions/builtin/compaction/summarization-retry.js.map +1 -1
  159. package/dist/core/extensions/builtin/config-reload/index.d.ts.map +1 -1
  160. package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
  161. package/dist/core/extensions/builtin/config-reload/log.js.map +1 -1
  162. package/dist/core/extensions/builtin/config-reload/protocol.d.ts.map +1 -1
  163. package/dist/core/extensions/builtin/config-reload/reload-deferral.d.ts.map +1 -1
  164. package/dist/core/extensions/builtin/config-reload/watch-engine.d.ts.map +1 -1
  165. package/dist/core/extensions/builtin/config-reload/watch-event-source.js.map +1 -1
  166. package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.js.map +1 -1
  167. package/dist/core/extensions/builtin/cursor-cli-oauth/accounts.d.ts.map +1 -1
  168. package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.d.ts.map +1 -1
  169. package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.js.map +1 -1
  170. package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.d.ts.map +1 -1
  171. package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.js.map +1 -1
  172. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.d.ts.map +1 -1
  173. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.js.map +1 -1
  174. package/dist/core/extensions/builtin/cursor-cli-oauth/failover.d.ts.map +1 -1
  175. package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.d.ts.map +1 -1
  176. package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.js.map +1 -1
  177. package/dist/core/extensions/builtin/cursor-cli-oauth/index.js.map +1 -1
  178. package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.js.map +1 -1
  179. package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.d.ts.map +1 -1
  180. package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.js.map +1 -1
  181. package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.d.ts.map +1 -1
  182. package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.js.map +1 -1
  183. package/dist/core/extensions/builtin/cursor-cli-oauth/stream.js.map +1 -1
  184. package/dist/core/extensions/builtin/cursor-cli-oauth/transport.d.ts.map +1 -1
  185. package/dist/core/extensions/builtin/goal/cache-warm-renderer.js.map +1 -1
  186. package/dist/core/extensions/builtin/goal/command-registration.js.map +1 -1
  187. package/dist/core/extensions/builtin/goal/direct-input-lifecycle.d.ts.map +1 -1
  188. package/dist/core/extensions/builtin/goal/elapsed-ticker.d.ts.map +1 -1
  189. package/dist/core/extensions/builtin/goal/errors.d.ts.map +1 -1
  190. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
  191. package/dist/core/extensions/builtin/goal/monitor-continuation.js +57 -4
  192. package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
  193. package/dist/core/extensions/builtin/goal/persistence.js.map +1 -1
  194. package/dist/core/extensions/builtin/goal/prompt.d.ts.map +1 -1
  195. package/dist/core/extensions/builtin/goal/prompt.js +9 -6
  196. package/dist/core/extensions/builtin/goal/prompt.js.map +1 -1
  197. package/dist/core/extensions/builtin/goal/store.js.map +1 -1
  198. package/dist/core/extensions/builtin/goal/tool-registration.js +1 -1
  199. package/dist/core/extensions/builtin/goal/tool-registration.js.map +1 -1
  200. package/dist/core/extensions/builtin/goal/turn-usage.d.ts.map +1 -1
  201. package/dist/core/extensions/builtin/goal/types.d.ts.map +1 -1
  202. package/dist/core/extensions/builtin/goal/ui.js.map +1 -1
  203. package/dist/core/extensions/builtin/goal/wait-progress.js.map +1 -1
  204. package/dist/core/extensions/builtin/goal/wait-ticker.d.ts.map +1 -1
  205. package/dist/core/extensions/builtin/gpt-account.d.ts.map +1 -1
  206. package/dist/core/extensions/builtin/gpt-account.js +1 -0
  207. package/dist/core/extensions/builtin/gpt-account.js.map +1 -1
  208. package/dist/core/extensions/builtin/gpt-apply-patch/apply.js.map +1 -1
  209. package/dist/core/extensions/builtin/gpt-apply-patch/errors.d.ts.map +1 -1
  210. package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts.map +1 -1
  211. package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.js.map +1 -1
  212. package/dist/core/extensions/builtin/gpt-apply-patch/preview.js.map +1 -1
  213. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.d.ts.map +1 -1
  214. package/dist/core/extensions/builtin/gpt-apply-patch/tool.js.map +1 -1
  215. package/dist/core/extensions/builtin/help/panel.d.ts.map +1 -1
  216. package/dist/core/extensions/builtin/history-search/index.js.map +1 -1
  217. package/dist/core/extensions/builtin/history-search/overlay.d.ts.map +1 -1
  218. package/dist/core/extensions/builtin/hooks/command-runner.js.map +1 -1
  219. package/dist/core/extensions/builtin/hooks/dispatcher.js.map +1 -1
  220. package/dist/core/extensions/builtin/hooks/plugin-loader.js.map +1 -1
  221. package/dist/core/extensions/builtin/hooks/tool-adapter.js.map +1 -1
  222. package/dist/core/extensions/builtin/hooks/trust-storage.d.ts.map +1 -1
  223. package/dist/core/extensions/builtin/hooks/trust.js.map +1 -1
  224. package/dist/core/extensions/builtin/hooks/types.d.ts.map +1 -1
  225. package/dist/core/extensions/builtin/imagegen/index.js.map +1 -1
  226. package/dist/core/extensions/builtin/imagegen/params.d.ts +45 -0
  227. package/dist/core/extensions/builtin/imagegen/params.d.ts.map +1 -0
  228. package/dist/core/extensions/builtin/imagegen/params.js +81 -0
  229. package/dist/core/extensions/builtin/imagegen/params.js.map +1 -0
  230. package/dist/core/extensions/builtin/imagegen/paths.d.ts +10 -4
  231. package/dist/core/extensions/builtin/imagegen/paths.d.ts.map +1 -1
  232. package/dist/core/extensions/builtin/imagegen/paths.js +43 -10
  233. package/dist/core/extensions/builtin/imagegen/paths.js.map +1 -1
  234. package/dist/core/extensions/builtin/imagegen/reference-images.d.ts +20 -0
  235. package/dist/core/extensions/builtin/imagegen/reference-images.d.ts.map +1 -0
  236. package/dist/core/extensions/builtin/imagegen/reference-images.js +70 -0
  237. package/dist/core/extensions/builtin/imagegen/reference-images.js.map +1 -0
  238. package/dist/core/extensions/builtin/imagegen/skill/SKILL.md +58 -33
  239. package/dist/core/extensions/builtin/imagegen/tool.d.ts +15 -19
  240. package/dist/core/extensions/builtin/imagegen/tool.d.ts.map +1 -1
  241. package/dist/core/extensions/builtin/imagegen/tool.js +74 -52
  242. package/dist/core/extensions/builtin/imagegen/tool.js.map +1 -1
  243. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  244. package/dist/core/extensions/builtin/index.js +2 -0
  245. package/dist/core/extensions/builtin/index.js.map +1 -1
  246. package/dist/core/extensions/builtin/look-at/model-selector.d.ts.map +1 -1
  247. package/dist/core/extensions/builtin/look-at/runner.js.map +1 -1
  248. package/dist/core/extensions/builtin/loop/command.js.map +1 -1
  249. package/dist/core/extensions/builtin/loop/cron-planner.js.map +1 -1
  250. package/dist/core/extensions/builtin/loop/index.d.ts.map +1 -1
  251. package/dist/core/extensions/builtin/loop/index.js.map +1 -1
  252. package/dist/core/extensions/builtin/loop/loopfile.d.ts.map +1 -1
  253. package/dist/core/extensions/builtin/loop/scheduler.js.map +1 -1
  254. package/dist/core/extensions/builtin/loop/status.d.ts.map +1 -1
  255. package/dist/core/extensions/builtin/loop/store.d.ts.map +1 -1
  256. package/dist/core/extensions/builtin/loop/types.d.ts.map +1 -1
  257. package/dist/core/extensions/builtin/loop-guard/detectors.d.ts.map +1 -1
  258. package/dist/core/extensions/builtin/loop-guard/escalation.d.ts.map +1 -1
  259. package/dist/core/extensions/builtin/loop-guard/escalation.js.map +1 -1
  260. package/dist/core/extensions/builtin/loop-guard/index.js.map +1 -1
  261. package/dist/core/extensions/builtin/loop-guard/notice.js.map +1 -1
  262. package/dist/core/extensions/builtin/loop-guard/renderer.js.map +1 -1
  263. package/dist/core/extensions/builtin/loop-guard/tracker.d.ts.map +1 -1
  264. package/dist/core/extensions/builtin/mcp/active-set.js.map +1 -1
  265. package/dist/core/extensions/builtin/mcp/auth/callback.d.ts.map +1 -1
  266. package/dist/core/extensions/builtin/mcp/auth/oauth-errors.d.ts.map +1 -1
  267. package/dist/core/extensions/builtin/mcp/auth/oauth-errors.js.map +1 -1
  268. package/dist/core/extensions/builtin/mcp/auth/oauth-provider.d.ts.map +1 -1
  269. package/dist/core/extensions/builtin/mcp/auth/oauth-refresh.d.ts.map +1 -1
  270. package/dist/core/extensions/builtin/mcp/auth/oauth-refresh.js.map +1 -1
  271. package/dist/core/extensions/builtin/mcp/auth/oauth.js.map +1 -1
  272. package/dist/core/extensions/builtin/mcp/auth/token-store.d.ts.map +1 -1
  273. package/dist/core/extensions/builtin/mcp/catalog.js.map +1 -1
  274. package/dist/core/extensions/builtin/mcp/config-schema.d.ts +28 -28
  275. package/dist/core/extensions/builtin/mcp/config.d.ts.map +1 -1
  276. package/dist/core/extensions/builtin/mcp/connection.d.ts.map +1 -1
  277. package/dist/core/extensions/builtin/mcp/elicitation.d.ts.map +1 -1
  278. package/dist/core/extensions/builtin/mcp/elicitation.js.map +1 -1
  279. package/dist/core/extensions/builtin/mcp/errors.d.ts.map +1 -1
  280. package/dist/core/extensions/builtin/mcp/errors.js.map +1 -1
  281. package/dist/core/extensions/builtin/mcp/expose/register.js.map +1 -1
  282. package/dist/core/extensions/builtin/mcp/expose/session.js.map +1 -1
  283. package/dist/core/extensions/builtin/mcp/guard/output-guard.d.ts.map +1 -1
  284. package/dist/core/extensions/builtin/mcp/guard/output-guard.js.map +1 -1
  285. package/dist/core/extensions/builtin/mcp/log.js.map +1 -1
  286. package/dist/core/extensions/builtin/mcp/reconnect.d.ts.map +1 -1
  287. package/dist/core/extensions/builtin/mcp/service-register.js.map +1 -1
  288. package/dist/core/extensions/builtin/mcp/service.d.ts.map +1 -1
  289. package/dist/core/extensions/builtin/mcp/service.js.map +1 -1
  290. package/dist/core/extensions/builtin/nested-agents-md/core/errors.d.ts.map +1 -1
  291. package/dist/core/extensions/builtin/nested-agents-md/core/injection-cache.d.ts.map +1 -1
  292. package/dist/core/extensions/builtin/nested-agents-md/core/types.d.ts.map +1 -1
  293. package/dist/core/extensions/builtin/oauth-login-interaction.d.ts +13 -6
  294. package/dist/core/extensions/builtin/oauth-login-interaction.d.ts.map +1 -1
  295. package/dist/core/extensions/builtin/oauth-login-interaction.js +43 -19
  296. package/dist/core/extensions/builtin/oauth-login-interaction.js.map +1 -1
  297. package/dist/core/extensions/builtin/openai-image-gen/inject.d.ts +5 -3
  298. package/dist/core/extensions/builtin/openai-image-gen/inject.d.ts.map +1 -1
  299. package/dist/core/extensions/builtin/openai-image-gen/inject.js +7 -4
  300. package/dist/core/extensions/builtin/openai-image-gen/inject.js.map +1 -1
  301. package/dist/core/extensions/builtin/permission-system/arity.d.ts.map +1 -1
  302. package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
  303. package/dist/core/extensions/builtin/permission-system/prompt.js.map +1 -1
  304. package/dist/core/extensions/builtin/permission-system/service.d.ts.map +1 -1
  305. package/dist/core/extensions/builtin/permission-system/service.js.map +1 -1
  306. package/dist/core/extensions/builtin/permission-system/types.d.ts.map +1 -1
  307. package/dist/core/extensions/builtin/permission-system/wildcard.d.ts.map +1 -1
  308. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js +1 -1
  309. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js.map +1 -1
  310. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js +1 -1
  311. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js.map +1 -1
  312. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js +1 -1
  313. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js.map +1 -1
  314. package/dist/core/extensions/builtin/prompt-preset/execution-tooling.d.ts.map +1 -1
  315. package/dist/core/extensions/builtin/prompt-preset/glm-5.d.ts +1 -1
  316. package/dist/core/extensions/builtin/prompt-preset/glm-5.d.ts.map +1 -1
  317. package/dist/core/extensions/builtin/prompt-preset/glm-5.js +1 -1
  318. package/dist/core/extensions/builtin/prompt-preset/glm-5.js.map +1 -1
  319. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts.map +1 -1
  320. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js +1 -1
  321. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -1
  322. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts +4 -4
  323. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts.map +1 -1
  324. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js +4 -4
  325. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js.map +1 -1
  326. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js +1 -1
  327. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js.map +1 -1
  328. package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
  329. package/dist/core/extensions/builtin/rule-activation/renderer.js.map +1 -1
  330. package/dist/core/extensions/builtin/rules/commands.js.map +1 -1
  331. package/dist/core/extensions/builtin/rules/config.js.map +1 -1
  332. package/dist/core/extensions/builtin/rules/rules/errors.d.ts.map +1 -1
  333. package/dist/core/extensions/builtin/rules/rules/project-root.js.map +1 -1
  334. package/dist/core/extensions/builtin/rules/ui/dynamic-border.d.ts.map +1 -1
  335. package/dist/core/extensions/builtin/rules/ui/rules-banner.d.ts.map +1 -1
  336. package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
  337. package/dist/core/extensions/builtin/terminal/manager.d.ts.map +1 -1
  338. package/dist/core/extensions/builtin/terminal/manager.js.map +1 -1
  339. package/dist/core/extensions/builtin/terminal/monitor-notify.d.ts.map +1 -1
  340. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
  341. package/dist/core/extensions/builtin/terminal/monitor-status-ticker.d.ts.map +1 -1
  342. package/dist/core/extensions/builtin/terminal/notify.d.ts.map +1 -1
  343. package/dist/core/extensions/builtin/terminal/restore.d.ts.map +1 -1
  344. package/dist/core/extensions/builtin/terminal/runtime-session.d.ts.map +1 -1
  345. package/dist/core/extensions/builtin/terminal/session-bundle.d.ts.map +1 -1
  346. package/dist/core/extensions/builtin/terminal/terminal-manifest.d.ts.map +1 -1
  347. package/dist/core/extensions/builtin/terminal/tools/render.d.ts.map +1 -1
  348. package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
  349. package/dist/core/extensions/builtin/todotools/normalize.js.map +1 -1
  350. package/dist/core/extensions/builtin/todotools/todo-operations.js.map +1 -1
  351. package/dist/core/extensions/builtin/todotools/todo-widget-component.d.ts.map +1 -1
  352. package/dist/core/extensions/builtin/todotools/todo-widget-component.js.map +1 -1
  353. package/dist/core/extensions/builtin/todotools/tools/todo.js.map +1 -1
  354. package/dist/core/extensions/builtin/tool-search/native-search.d.ts.map +1 -1
  355. package/dist/core/extensions/builtin/tool-search/service.d.ts.map +1 -1
  356. package/dist/core/extensions/builtin/tool-search/service.js.map +1 -1
  357. package/dist/core/extensions/builtin/ttsr/detectors/leak-context.d.ts.map +1 -1
  358. package/dist/core/extensions/builtin/ttsr/detectors/token-grammar.d.ts.map +1 -1
  359. package/dist/core/extensions/builtin/ttsr/manager.d.ts.map +1 -1
  360. package/dist/core/extensions/builtin/ttsr/message-update.js.map +1 -1
  361. package/dist/core/extensions/builtin/ttsr/repetitive-turns-lane.d.ts.map +1 -1
  362. package/dist/core/extensions/builtin/ttsr/stream-utils.d.ts.map +1 -1
  363. package/dist/core/extensions/builtin/ttsr/watch.d.ts.map +1 -1
  364. package/dist/core/extensions/builtin/webfetch/webfetch/errors.d.ts.map +1 -1
  365. package/dist/core/extensions/builtin/webfetch/webfetch/tool.d.ts +1 -1
  366. package/dist/core/extensions/builtin/websearch/websearch/native.js.map +1 -1
  367. package/dist/core/extensions/loader.d.ts +2 -1
  368. package/dist/core/extensions/loader.d.ts.map +1 -1
  369. package/dist/core/extensions/loader.js +17 -8
  370. package/dist/core/extensions/loader.js.map +1 -1
  371. package/dist/core/extensions/notice/box.d.ts.map +1 -1
  372. package/dist/core/extensions/notice/box.js +13 -5
  373. package/dist/core/extensions/notice/box.js.map +1 -1
  374. package/dist/core/extensions/runner.d.ts +11 -0
  375. package/dist/core/extensions/runner.d.ts.map +1 -1
  376. package/dist/core/extensions/runner.js +23 -0
  377. package/dist/core/extensions/runner.js.map +1 -1
  378. package/dist/core/extensions/types.d.ts +76 -1
  379. package/dist/core/extensions/types.d.ts.map +1 -1
  380. package/dist/core/extensions/types.js.map +1 -1
  381. package/dist/core/footer-data-provider.d.ts.map +1 -1
  382. package/dist/core/footer-data-provider.js.map +1 -1
  383. package/dist/core/http-dispatcher.d.ts.map +1 -1
  384. package/dist/core/http-dispatcher.js.map +1 -1
  385. package/dist/core/keybindings.d.ts +182 -177
  386. package/dist/core/keybindings.d.ts.map +1 -1
  387. package/dist/core/keybindings.js +5 -0
  388. package/dist/core/keybindings.js.map +1 -1
  389. package/dist/core/lockfile-policy.d.ts.map +1 -1
  390. package/dist/core/messages.js.map +1 -1
  391. package/dist/core/model-config-schema.d.ts +150 -150
  392. package/dist/core/model-config-schema.d.ts.map +1 -1
  393. package/dist/core/model-config.d.ts.map +1 -1
  394. package/dist/core/model-config.js.map +1 -1
  395. package/dist/core/model-registry.d.ts.map +1 -1
  396. package/dist/core/model-registry.js.map +1 -1
  397. package/dist/core/model-resolver.d.ts.map +1 -1
  398. package/dist/core/model-resolver.js +1 -0
  399. package/dist/core/model-resolver.js.map +1 -1
  400. package/dist/core/model-runtime.d.ts.map +1 -1
  401. package/dist/core/model-runtime.js.map +1 -1
  402. package/dist/core/models-store.d.ts.map +1 -1
  403. package/dist/core/models-store.js.map +1 -1
  404. package/dist/core/package-manager.d.ts.map +1 -1
  405. package/dist/core/provider-display-names.d.ts.map +1 -1
  406. package/dist/core/provider-display-names.js +1 -0
  407. package/dist/core/provider-display-names.js.map +1 -1
  408. package/dist/core/remote-catalog-provider.js.map +1 -1
  409. package/dist/core/resource-loader.d.ts +2 -0
  410. package/dist/core/resource-loader.d.ts.map +1 -1
  411. package/dist/core/resource-loader.js +11 -7
  412. package/dist/core/resource-loader.js.map +1 -1
  413. package/dist/core/retry-fallback/controller.d.ts.map +1 -1
  414. package/dist/core/retry-fallback/cooldown.d.ts.map +1 -1
  415. package/dist/core/retry-fallback/cooldown.js.map +1 -1
  416. package/dist/core/retry-fallback/expansion.js.map +1 -1
  417. package/dist/core/retry-fallback/log.js.map +1 -1
  418. package/dist/core/retry-fallback/probe-scheduler.d.ts.map +1 -1
  419. package/dist/core/runtime-credentials.d.ts.map +1 -1
  420. package/dist/core/sdk.d.ts.map +1 -1
  421. package/dist/core/sdk.js +24 -1
  422. package/dist/core/sdk.js.map +1 -1
  423. package/dist/core/session-activity.d.ts.map +1 -1
  424. package/dist/core/session-cwd.d.ts.map +1 -1
  425. package/dist/core/session-log.js.map +1 -1
  426. package/dist/core/session-manager.d.ts.map +1 -1
  427. package/dist/core/session-manager.js.map +1 -1
  428. package/dist/core/session-resident-store.d.ts.map +1 -1
  429. package/dist/core/session-sidecar-store.d.ts.map +1 -1
  430. package/dist/core/session-summary-lru.d.ts.map +1 -1
  431. package/dist/core/session-work-barrier.d.ts.map +1 -1
  432. package/dist/core/settings-manager.d.ts +6 -1
  433. package/dist/core/settings-manager.d.ts.map +1 -1
  434. package/dist/core/settings-manager.js +14 -0
  435. package/dist/core/settings-manager.js.map +1 -1
  436. package/dist/core/settings-shapes.d.ts +7 -0
  437. package/dist/core/settings-shapes.d.ts.map +1 -1
  438. package/dist/core/settings-shapes.js +3 -1
  439. package/dist/core/settings-shapes.js.map +1 -1
  440. package/dist/core/telemetry.js.map +1 -1
  441. package/dist/core/timings.js.map +1 -1
  442. package/dist/core/tools/bash.d.ts.map +1 -1
  443. package/dist/core/tools/bounded-realpath.js.map +1 -1
  444. package/dist/core/tools/edit.d.ts.map +1 -1
  445. package/dist/core/tools/find.d.ts.map +1 -1
  446. package/dist/core/tools/find.js.map +1 -1
  447. package/dist/core/tools/grep.d.ts.map +1 -1
  448. package/dist/core/tools/ls.d.ts.map +1 -1
  449. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  450. package/dist/core/tools/output-accumulator.js.map +1 -1
  451. package/dist/core/tools/powershell.d.ts.map +1 -1
  452. package/dist/core/tools/read-classifiers.d.ts +17 -0
  453. package/dist/core/tools/read-classifiers.d.ts.map +1 -0
  454. package/dist/core/tools/read-classifiers.js +26 -0
  455. package/dist/core/tools/read-classifiers.js.map +1 -0
  456. package/dist/core/tools/read.d.ts +5 -1
  457. package/dist/core/tools/read.d.ts.map +1 -1
  458. package/dist/core/tools/read.js +21 -1
  459. package/dist/core/tools/read.js.map +1 -1
  460. package/dist/core/tools/tail-window.d.ts.map +1 -1
  461. package/dist/core/tools/truncate.js.map +1 -1
  462. package/dist/core/tools/write-result.js.map +1 -1
  463. package/dist/core/tools/write.d.ts.map +1 -1
  464. package/dist/core/trust-manager.d.ts.map +1 -1
  465. package/dist/extensions/llama/client.d.ts.map +1 -1
  466. package/dist/extensions/llama/client.js.map +1 -1
  467. package/dist/extensions/llama/huggingface.d.ts.map +1 -1
  468. package/dist/extensions/llama/huggingface.js.map +1 -1
  469. package/dist/extensions/llama/provider.js.map +1 -1
  470. package/dist/from-source-config-guard.js.map +1 -1
  471. package/dist/index.d.ts +1 -0
  472. package/dist/index.d.ts.map +1 -1
  473. package/dist/index.js +1 -0
  474. package/dist/index.js.map +1 -1
  475. package/dist/main.d.ts.map +1 -1
  476. package/dist/main.js +4 -0
  477. package/dist/main.js.map +1 -1
  478. package/dist/modes/app-server/daemon/occupancy.d.ts.map +1 -1
  479. package/dist/modes/app-server/daemon/process.d.ts.map +1 -1
  480. package/dist/modes/app-server/daemon/process.js.map +1 -1
  481. package/dist/modes/app-server/daemon.js.map +1 -1
  482. package/dist/modes/app-server/protocol/collaboration-mode.d.ts.map +1 -1
  483. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.d.ts +7 -0
  484. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.d.ts.map +1 -0
  485. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.js +4 -0
  486. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.js.map +1 -0
  487. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.d.ts +8 -0
  488. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.d.ts.map +1 -0
  489. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.js +4 -0
  490. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.js.map +1 -0
  491. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.d.ts +12 -0
  492. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.d.ts.map +1 -0
  493. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.js +4 -0
  494. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.js.map +1 -0
  495. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.d.ts +13 -0
  496. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.d.ts.map +1 -0
  497. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.js +4 -0
  498. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.js.map +1 -0
  499. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.d.ts +10 -0
  500. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.d.ts.map +1 -0
  501. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.js +4 -0
  502. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.js.map +1 -0
  503. package/dist/modes/app-server/protocol/index.d.ts +2 -0
  504. package/dist/modes/app-server/protocol/index.d.ts.map +1 -1
  505. package/dist/modes/app-server/protocol/index.js.map +1 -1
  506. package/dist/modes/app-server/protocol/methods.d.ts +1 -0
  507. package/dist/modes/app-server/protocol/methods.d.ts.map +1 -1
  508. package/dist/modes/app-server/protocol/methods.js +1 -0
  509. package/dist/modes/app-server/protocol/methods.js.map +1 -1
  510. package/dist/modes/app-server/rpc/errors.d.ts.map +1 -1
  511. package/dist/modes/app-server/runtime.d.ts.map +1 -1
  512. package/dist/modes/app-server/runtime.js +22 -6
  513. package/dist/modes/app-server/runtime.js.map +1 -1
  514. package/dist/modes/app-server/search/fuzzy-files.js.map +1 -1
  515. package/dist/modes/app-server/search/fuzzy-search-service.d.ts.map +1 -1
  516. package/dist/modes/app-server/server/account.js.map +1 -1
  517. package/dist/modes/app-server/server/approval-bridge.d.ts.map +1 -1
  518. package/dist/modes/app-server/server/approval-types.d.ts.map +1 -1
  519. package/dist/modes/app-server/server/approval-ui-context.d.ts +2 -1
  520. package/dist/modes/app-server/server/approval-ui-context.d.ts.map +1 -1
  521. package/dist/modes/app-server/server/approval-ui-context.js +9 -1
  522. package/dist/modes/app-server/server/approval-ui-context.js.map +1 -1
  523. package/dist/modes/app-server/server/catalogs.js.map +1 -1
  524. package/dist/modes/app-server/server/config.js.map +1 -1
  525. package/dist/modes/app-server/server/connection.d.ts.map +1 -1
  526. package/dist/modes/app-server/server/models.js.map +1 -1
  527. package/dist/modes/app-server/server/notifications.d.ts.map +1 -1
  528. package/dist/modes/app-server/server/notifications.js.map +1 -1
  529. package/dist/modes/app-server/server/server-core.d.ts.map +1 -1
  530. package/dist/modes/app-server/server/server-core.js.map +1 -1
  531. package/dist/modes/app-server/server/skills.js.map +1 -1
  532. package/dist/modes/app-server/server/user-input-bridge.d.ts +16 -0
  533. package/dist/modes/app-server/server/user-input-bridge.d.ts.map +1 -0
  534. package/dist/modes/app-server/server/user-input-bridge.js +142 -0
  535. package/dist/modes/app-server/server/user-input-bridge.js.map +1 -0
  536. package/dist/modes/app-server/server/user-input-types.d.ts +43 -0
  537. package/dist/modes/app-server/server/user-input-types.d.ts.map +1 -0
  538. package/dist/modes/app-server/server/user-input-types.js +51 -0
  539. package/dist/modes/app-server/server/user-input-types.js.map +1 -0
  540. package/dist/modes/app-server/threads/archive-state.d.ts.map +1 -1
  541. package/dist/modes/app-server/threads/handlers.js.map +1 -1
  542. package/dist/modes/app-server/threads/mcp-wire-status.d.ts.map +1 -1
  543. package/dist/modes/app-server/threads/metadata-state.d.ts.map +1 -1
  544. package/dist/modes/app-server/threads/projection-file-changes.js.map +1 -1
  545. package/dist/modes/app-server/threads/projection-message-items.d.ts.map +1 -1
  546. package/dist/modes/app-server/threads/projection-turn-diff.d.ts.map +1 -1
  547. package/dist/modes/app-server/threads/projection-web-search.js.map +1 -1
  548. package/dist/modes/app-server/threads/projection.d.ts.map +1 -1
  549. package/dist/modes/app-server/threads/registry.d.ts.map +1 -1
  550. package/dist/modes/app-server/threads/registry.js.map +1 -1
  551. package/dist/modes/app-server/threads/search-cache.d.ts.map +1 -1
  552. package/dist/modes/app-server/threads/turn-log.d.ts.map +1 -1
  553. package/dist/modes/app-server/threads/turn-runtime.d.ts.map +1 -1
  554. package/dist/modes/app-server/threads/turn-runtime.js.map +1 -1
  555. package/dist/modes/app-server/threads/turns.js.map +1 -1
  556. package/dist/modes/app-server/threads/wire-thread.js.map +1 -1
  557. package/dist/modes/app-server/transports/unix-socket.d.ts.map +1 -1
  558. package/dist/modes/app-server/transports/unix-socket.js.map +1 -1
  559. package/dist/modes/app-server/transports/websocket.d.ts.map +1 -1
  560. package/dist/modes/app-server/turn-adapter.d.ts +3 -3
  561. package/dist/modes/app-server/turn-adapter.d.ts.map +1 -1
  562. package/dist/modes/app-server/turn-adapter.js +36 -5
  563. package/dist/modes/app-server/turn-adapter.js.map +1 -1
  564. package/dist/modes/interactive/compaction-queue-transfer.js.map +1 -1
  565. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  566. package/dist/modes/interactive/components/armin.js.map +1 -1
  567. package/dist/modes/interactive/components/ask-user-async-widget.d.ts +39 -0
  568. package/dist/modes/interactive/components/ask-user-async-widget.d.ts.map +1 -0
  569. package/dist/modes/interactive/components/ask-user-async-widget.js +82 -0
  570. package/dist/modes/interactive/components/ask-user-async-widget.js.map +1 -0
  571. package/dist/modes/interactive/components/ask-user-question-keys.d.ts +21 -0
  572. package/dist/modes/interactive/components/ask-user-question-keys.d.ts.map +1 -0
  573. package/dist/modes/interactive/components/ask-user-question-keys.js +115 -0
  574. package/dist/modes/interactive/components/ask-user-question-keys.js.map +1 -0
  575. package/dist/modes/interactive/components/ask-user-question-render.d.ts +17 -0
  576. package/dist/modes/interactive/components/ask-user-question-render.d.ts.map +1 -0
  577. package/dist/modes/interactive/components/ask-user-question-render.js +75 -0
  578. package/dist/modes/interactive/components/ask-user-question-render.js.map +1 -0
  579. package/dist/modes/interactive/components/ask-user-question-state.d.ts +52 -0
  580. package/dist/modes/interactive/components/ask-user-question-state.d.ts.map +1 -0
  581. package/dist/modes/interactive/components/ask-user-question-state.js +134 -0
  582. package/dist/modes/interactive/components/ask-user-question-state.js.map +1 -0
  583. package/dist/modes/interactive/components/ask-user-question.d.ts +50 -0
  584. package/dist/modes/interactive/components/ask-user-question.d.ts.map +1 -0
  585. package/dist/modes/interactive/components/ask-user-question.js +148 -0
  586. package/dist/modes/interactive/components/ask-user-question.js.map +1 -0
  587. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  588. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  589. package/dist/modes/interactive/components/assistant-render-descriptors.js.map +1 -1
  590. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  591. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  592. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  593. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  594. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  595. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  596. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  597. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  598. package/dist/modes/interactive/components/continuity-notice.d.ts.map +1 -1
  599. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  600. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  601. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  602. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  603. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  604. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  605. package/dist/modes/interactive/components/diff.js.map +1 -1
  606. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  607. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  608. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  609. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  610. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  611. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  612. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  613. package/dist/modes/interactive/components/favorite-models-selector.d.ts.map +1 -1
  614. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  615. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  616. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  617. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  618. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  619. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  620. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  621. package/dist/modes/interactive/components/progressive-transcript-container.d.ts.map +1 -1
  622. package/dist/modes/interactive/components/render-signature.js.map +1 -1
  623. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  624. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  625. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  626. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  627. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  628. package/dist/modes/interactive/components/shortcut-overlay.d.ts.map +1 -1
  629. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  630. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  631. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  632. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  633. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  634. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  635. package/dist/modes/interactive/components/tool-execution-images.d.ts.map +1 -1
  636. package/dist/modes/interactive/components/tool-execution-renderer.d.ts.map +1 -1
  637. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  638. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  639. package/dist/modes/interactive/components/tool-renderer-boundary.d.ts.map +1 -1
  640. package/dist/modes/interactive/components/tree-selector.d.ts +4 -0
  641. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  642. package/dist/modes/interactive/components/tree-selector.js +17 -0
  643. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  644. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  645. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  646. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  647. package/dist/modes/interactive/components/user-message.js.map +1 -1
  648. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  649. package/dist/modes/interactive/grok/chrome.d.ts.map +1 -1
  650. package/dist/modes/interactive/grok/footer.d.ts.map +1 -1
  651. package/dist/modes/interactive/grok/input-card.d.ts.map +1 -1
  652. package/dist/modes/interactive/grok/palette.d.ts.map +1 -1
  653. package/dist/modes/interactive/grok/tool-row.d.ts.map +1 -1
  654. package/dist/modes/interactive/grok/welcome-card.d.ts.map +1 -1
  655. package/dist/modes/interactive/interactive-host-runtime.d.ts +6 -0
  656. package/dist/modes/interactive/interactive-host-runtime.d.ts.map +1 -1
  657. package/dist/modes/interactive/interactive-host-runtime.js +32 -3
  658. package/dist/modes/interactive/interactive-host-runtime.js.map +1 -1
  659. package/dist/modes/interactive/interactive-mode.d.ts +35 -0
  660. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  661. package/dist/modes/interactive/interactive-mode.js +413 -100
  662. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  663. package/dist/modes/interactive/login-outcome.d.ts +20 -0
  664. package/dist/modes/interactive/login-outcome.d.ts.map +1 -0
  665. package/dist/modes/interactive/login-outcome.js +35 -0
  666. package/dist/modes/interactive/login-outcome.js.map +1 -0
  667. package/dist/modes/interactive/startup-tools.js.map +1 -1
  668. package/dist/modes/interactive/streaming-reveal-content.d.ts.map +1 -1
  669. package/dist/modes/interactive/streaming-reveal-content.js.map +1 -1
  670. package/dist/modes/interactive/streaming-reveal.d.ts.map +1 -1
  671. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  672. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  673. package/dist/modes/interactive/theme/theme.js.map +1 -1
  674. package/dist/modes/interactive/tips/catalog/input-tips.d.ts +7 -7
  675. package/dist/modes/interactive/tips/catalog/input-tips.d.ts.map +1 -1
  676. package/dist/modes/interactive/tips/catalog/input-tips.js +5 -0
  677. package/dist/modes/interactive/tips/catalog/input-tips.js.map +1 -1
  678. package/dist/modes/interactive/tips/catalog/model-tips.d.ts +1 -1
  679. package/dist/modes/interactive/tips/catalog/workspace-tips.d.ts +1 -1
  680. package/dist/modes/interactive/tips/scheduler.js.map +1 -1
  681. package/dist/modes/interactive/tips/working-tip.d.ts.map +1 -1
  682. package/dist/modes/interactive/tool-args-reveal.d.ts.map +1 -1
  683. package/dist/modes/interactive/tool-result-reveal.d.ts.map +1 -1
  684. package/dist/modes/print-mode.d.ts.map +1 -1
  685. package/dist/modes/print-mode.js +8 -0
  686. package/dist/modes/print-mode.js.map +1 -1
  687. package/dist/modes/provider-native-rendering.d.ts.map +1 -1
  688. package/dist/modes/provider-native-rendering.js +35 -0
  689. package/dist/modes/provider-native-rendering.js.map +1 -1
  690. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  691. package/dist/modes/rpc/connection-handler.js +72 -1
  692. package/dist/modes/rpc/connection-handler.js.map +1 -1
  693. package/dist/modes/rpc/connection-question-bridge.d.ts +18 -0
  694. package/dist/modes/rpc/connection-question-bridge.d.ts.map +1 -0
  695. package/dist/modes/rpc/connection-question-bridge.js +156 -0
  696. package/dist/modes/rpc/connection-question-bridge.js.map +1 -0
  697. package/dist/modes/rpc/custom-capability.d.ts +2 -0
  698. package/dist/modes/rpc/custom-capability.d.ts.map +1 -1
  699. package/dist/modes/rpc/custom-capability.js +2 -0
  700. package/dist/modes/rpc/custom-capability.js.map +1 -1
  701. package/dist/modes/rpc/event-output-buffer.js.map +1 -1
  702. package/dist/modes/rpc/host-ensure.js.map +1 -1
  703. package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
  704. package/dist/modes/rpc/host-lifecycle.js.map +1 -1
  705. package/dist/modes/rpc/host-watchdog.js.map +1 -1
  706. package/dist/modes/rpc/jsonl.js.map +1 -1
  707. package/dist/modes/rpc/multi-session-host.js.map +1 -1
  708. package/dist/modes/rpc/ownership-safe-lock.d.ts.map +1 -1
  709. package/dist/modes/rpc/ownership-safe-lock.js.map +1 -1
  710. package/dist/modes/rpc/rpc-client.d.ts +20 -1
  711. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  712. package/dist/modes/rpc/rpc-client.js +35 -3
  713. package/dist/modes/rpc/rpc-client.js.map +1 -1
  714. package/dist/modes/rpc/rpc-input-validation.js.map +1 -1
  715. package/dist/modes/rpc/rpc-types.d.ts +103 -3
  716. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  717. package/dist/modes/rpc/rpc-types.js +6 -0
  718. package/dist/modes/rpc/rpc-types.js.map +1 -1
  719. package/dist/modes/rpc/session-binding.js.map +1 -1
  720. package/dist/modes/rpc/session-command-router.d.ts +4 -4
  721. package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
  722. package/dist/modes/rpc/session-command-router.js +14 -8
  723. package/dist/modes/rpc/session-command-router.js.map +1 -1
  724. package/dist/modes/rpc/session-event-fanout.d.ts +2 -0
  725. package/dist/modes/rpc/session-event-fanout.d.ts.map +1 -1
  726. package/dist/modes/rpc/session-event-fanout.js +25 -1
  727. package/dist/modes/rpc/session-event-fanout.js.map +1 -1
  728. package/dist/modes/rpc/session-event-writer.d.ts +7 -1
  729. package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
  730. package/dist/modes/rpc/session-event-writer.js +17 -4
  731. package/dist/modes/rpc/session-event-writer.js.map +1 -1
  732. package/dist/modes/rpc/session-extension-ui-requests.d.ts.map +1 -1
  733. package/dist/modes/rpc/session-registry.d.ts.map +1 -1
  734. package/dist/modes/rpc/session-registry.js +11 -1
  735. package/dist/modes/rpc/session-registry.js.map +1 -1
  736. package/dist/modes/rpc/session-worker-client.d.ts.map +1 -1
  737. package/dist/modes/rpc/session-worker-client.js.map +1 -1
  738. package/dist/modes/rpc/session-worker-protocol.d.ts.map +1 -1
  739. package/dist/modes/rpc/session-worker-requests.d.ts.map +1 -1
  740. package/dist/modes/rpc/session-worker-requests.js +1 -1
  741. package/dist/modes/rpc/session-worker-requests.js.map +1 -1
  742. package/dist/modes/rpc/session-worker.js +10 -2
  743. package/dist/modes/rpc/session-worker.js.map +1 -1
  744. package/dist/modes/rpc/socket-event-fanout.d.ts +14 -1
  745. package/dist/modes/rpc/socket-event-fanout.d.ts.map +1 -1
  746. package/dist/modes/rpc/socket-event-fanout.js +48 -2
  747. package/dist/modes/rpc/socket-event-fanout.js.map +1 -1
  748. package/dist/modes/rpc/socket-ownership.js.map +1 -1
  749. package/dist/modes/rpc/worker-session-registry.d.ts.map +1 -1
  750. package/dist/modes/rpc/worker-session-registry.js +2 -1
  751. package/dist/modes/rpc/worker-session-registry.js.map +1 -1
  752. package/dist/package-manager-cli.js.map +1 -1
  753. package/dist/self-update-bootstrap.js.map +1 -1
  754. package/dist/utils/ansi.js.map +1 -1
  755. package/dist/utils/clipboard-image.js.map +1 -1
  756. package/dist/utils/clipboard-native.js.map +1 -1
  757. package/dist/utils/clipboard.js.map +1 -1
  758. package/dist/utils/exif-orientation.js.map +1 -1
  759. package/dist/utils/frontmatter.d.ts.map +1 -1
  760. package/dist/utils/image-resize.js.map +1 -1
  761. package/dist/utils/management-http.js.map +1 -1
  762. package/dist/utils/paths.js.map +1 -1
  763. package/dist/utils/photon.js.map +1 -1
  764. package/dist/utils/pi-user-agent.js.map +1 -1
  765. package/dist/utils/shell.d.ts.map +1 -1
  766. package/dist/utils/shell.js.map +1 -1
  767. package/dist/utils/syntax-highlight.js.map +1 -1
  768. package/dist/utils/version-check.js.map +1 -1
  769. package/docs/app-server.md +14 -0
  770. package/docs/extensions.md +28 -1
  771. package/docs/keybindings.md +1 -0
  772. package/docs/providers.md +1 -0
  773. package/docs/rpc.md +95 -3
  774. package/docs/settings.md +18 -0
  775. package/docs/skills.md +1 -1
  776. package/docs/tui.md +6 -0
  777. package/docs/usage.md +2 -1
  778. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +30 -0
  779. package/node_modules/@code-yeongyu/senpi-codemode/README.md +17 -2
  780. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  781. package/node_modules/@code-yeongyu/senpi-codemode/src/config/settings.ts +35 -15
  782. package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +13 -2
  783. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt-template.ts +76 -0
  784. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +6 -77
  785. package/node_modules/@code-yeongyu/senpi-codemode/src/timeouts/run-budget.ts +107 -0
  786. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-deadlines.ts +76 -0
  787. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-execution.ts +25 -14
  788. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-contract.ts +4 -0
  789. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-manager.ts +47 -40
  790. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-notification.ts +2 -0
  791. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-snapshot.ts +5 -0
  792. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool-options.ts +8 -3
  793. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +17 -187
  794. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/run-eval-cell.ts +189 -0
  795. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +66 -56
  796. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  797. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +1 -1
  798. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  799. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  800. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  801. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts.map +1 -1
  802. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
  803. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
  804. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
  805. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  806. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  807. package/node_modules/@earendil-works/pi-agent-core/dist/harness/events.d.ts.map +1 -1
  808. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js.map +1 -1
  809. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.js.map +1 -1
  810. package/node_modules/@earendil-works/pi-agent-core/dist/harness/reducer.d.ts.map +1 -1
  811. package/node_modules/@earendil-works/pi-agent-core/dist/harness/reducer.js.map +1 -1
  812. package/node_modules/@earendil-works/pi-agent-core/dist/harness/result.d.ts.map +1 -1
  813. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/context.js.map +1 -1
  814. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/errors.d.ts.map +1 -1
  815. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.d.ts.map +1 -1
  816. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.js.map +1 -1
  817. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.d.ts.map +1 -1
  818. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.js.map +1 -1
  819. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory.d.ts.map +1 -1
  820. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory.js.map +1 -1
  821. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
  822. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
  823. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/state.d.ts.map +1 -1
  824. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/state.js.map +1 -1
  825. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance.js.map +1 -1
  826. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/types.d.ts.map +1 -1
  827. package/node_modules/@earendil-works/pi-agent-core/dist/harness/telemetry.d.ts +36 -36
  828. package/node_modules/@earendil-works/pi-agent-core/dist/harness/telemetry.d.ts.map +1 -1
  829. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
  830. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js.map +1 -1
  831. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts.map +1 -1
  832. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js.map +1 -1
  833. package/node_modules/@earendil-works/pi-agent-core/dist/search/scanning.js.map +1 -1
  834. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +5 -0
  835. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  836. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  837. package/node_modules/@earendil-works/pi-agent-core/package.json +4 -4
  838. package/node_modules/@earendil-works/pi-ai/README.md +1 -0
  839. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts +3 -1
  840. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  841. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +6 -2
  842. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  843. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js.map +1 -1
  844. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js.map +1 -1
  845. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.lazy.js.map +1 -1
  846. package/node_modules/@earendil-works/pi-ai/dist/api/context-room.d.ts.map +1 -1
  847. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.d.ts.map +1 -1
  848. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.js.map +1 -1
  849. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/stream-retry.d.ts.map +1 -1
  850. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
  851. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.js.map +1 -1
  852. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js.map +1 -1
  853. package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js.map +1 -1
  854. package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js.map +1 -1
  855. package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js.map +1 -1
  856. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
  857. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
  858. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +5 -0
  859. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  860. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.d.ts +4 -0
  861. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.d.ts.map +1 -0
  862. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.js +15 -0
  863. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.js.map +1 -0
  864. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.d.ts +60 -0
  865. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.d.ts.map +1 -0
  866. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.js +93 -0
  867. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.js.map +1 -0
  868. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.d.ts +12 -0
  869. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.d.ts.map +1 -0
  870. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.js +96 -0
  871. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.js.map +1 -0
  872. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.d.ts +3 -6
  873. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.d.ts.map +1 -1
  874. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.js +26 -119
  875. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.js.map +1 -1
  876. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
  877. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
  878. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.d.ts.map +1 -1
  879. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js.map +1 -1
  880. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js.map +1 -1
  881. package/node_modules/@earendil-works/pi-ai/dist/api/warm-prompt-cache.js.map +1 -1
  882. package/node_modules/@earendil-works/pi-ai/dist/auth/credential-store.d.ts.map +1 -1
  883. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.d.ts.map +1 -1
  884. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js.map +1 -1
  885. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.js.map +1 -1
  886. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.d.ts +47 -0
  887. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.d.ts.map +1 -0
  888. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.js +126 -0
  889. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.js.map +1 -0
  890. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/failover.d.ts.map +1 -1
  891. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/select.d.ts.map +1 -1
  892. package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.d.ts +12 -0
  893. package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.d.ts.map +1 -0
  894. package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.js +44 -0
  895. package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.js.map +1 -0
  896. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts +2 -0
  897. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts.map +1 -1
  898. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js +26 -35
  899. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js.map +1 -1
  900. package/node_modules/@earendil-works/pi-ai/dist/compat.js.map +1 -1
  901. package/node_modules/@earendil-works/pi-ai/dist/cursor/model-capabilities.js.map +1 -1
  902. package/node_modules/@earendil-works/pi-ai/dist/cursor/selection-descriptor.js.map +1 -1
  903. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts.map +1 -1
  904. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +1 -0
  905. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js.map +1 -1
  906. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +99 -66
  907. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  908. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +34 -1
  909. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  910. package/node_modules/@earendil-works/pi-ai/dist/images.d.ts +1 -0
  911. package/node_modules/@earendil-works/pi-ai/dist/images.d.ts.map +1 -1
  912. package/node_modules/@earendil-works/pi-ai/dist/images.js +1 -0
  913. package/node_modules/@earendil-works/pi-ai/dist/images.js.map +1 -1
  914. package/node_modules/@earendil-works/pi-ai/dist/models-store.d.ts.map +1 -1
  915. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  916. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +2 -0
  917. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  918. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +2 -0
  919. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  920. package/node_modules/@earendil-works/pi-ai/dist/models.js +3 -28
  921. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  922. package/node_modules/@earendil-works/pi-ai/dist/node/provider-scope.d.ts.map +1 -1
  923. package/node_modules/@earendil-works/pi-ai/dist/providers/all.d.ts.map +1 -1
  924. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +2 -0
  925. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js.map +1 -1
  926. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  927. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  928. package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
  929. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  930. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  931. package/node_modules/@earendil-works/pi-ai/dist/providers/data/venice.json +1 -0
  932. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  933. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js.map +1 -1
  934. package/node_modules/@earendil-works/pi-ai/dist/providers/ollama.js.map +1 -1
  935. package/node_modules/@earendil-works/pi-ai/dist/providers/radius.js.map +1 -1
  936. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.d.ts +3 -0
  937. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.d.ts.map +1 -0
  938. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.js +15 -0
  939. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.js.map +1 -0
  940. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.d.ts +4 -0
  941. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.d.ts.map +1 -0
  942. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.js +6 -0
  943. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.js.map +1 -0
  944. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.js.map +1 -1
  945. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/recovery-wrapper-state.d.ts.map +1 -1
  946. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/parse.js.map +1 -1
  947. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-content-lifecycle.d.ts.map +1 -1
  948. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-event-stream.d.ts.map +1 -1
  949. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-native-projection.d.ts.map +1 -1
  950. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-native-projection.js.map +1 -1
  951. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-stream-terminal.d.ts.map +1 -1
  952. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-stream-wrapper.js.map +1 -1
  953. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-text-projection.d.ts.map +1 -1
  954. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-text-projection.js.map +1 -1
  955. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-thinking-projection.d.ts.map +1 -1
  956. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper-shared.d.ts.map +1 -1
  957. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper-shared.js.map +1 -1
  958. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.js.map +1 -1
  959. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +20 -3
  960. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  961. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  962. package/node_modules/@earendil-works/pi-ai/dist/utils/deferred-tools.js.map +1 -1
  963. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  964. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts +3 -1
  965. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts.map +1 -1
  966. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js.map +1 -1
  967. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js.map +1 -1
  968. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
  969. package/node_modules/@earendil-works/pi-ai/dist/utils/validation.js.map +1 -1
  970. package/node_modules/@earendil-works/pi-ai/package.json +3 -3
  971. package/node_modules/@earendil-works/pi-pty/dist/loader.d.ts.map +1 -1
  972. package/node_modules/@earendil-works/pi-pty/dist/loader.js.map +1 -1
  973. package/node_modules/@earendil-works/pi-pty/dist/pipe-fallback.d.ts.map +1 -1
  974. package/node_modules/@earendil-works/pi-pty/dist/pipe-fallback.js.map +1 -1
  975. package/node_modules/@earendil-works/pi-pty/dist/quarantine.js.map +1 -1
  976. package/node_modules/@earendil-works/pi-pty/dist/registry-types.d.ts.map +1 -1
  977. package/node_modules/@earendil-works/pi-pty/dist/registry.d.ts.map +1 -1
  978. package/node_modules/@earendil-works/pi-pty/dist/registry.js.map +1 -1
  979. package/node_modules/@earendil-works/pi-pty/dist/screen.d.ts.map +1 -1
  980. package/node_modules/@earendil-works/pi-pty/dist/screen.js.map +1 -1
  981. package/node_modules/@earendil-works/pi-pty/dist/session-bun.js.map +1 -1
  982. package/node_modules/@earendil-works/pi-pty/dist/session.d.ts.map +1 -1
  983. package/node_modules/@earendil-works/pi-pty/dist/session.js.map +1 -1
  984. package/node_modules/@earendil-works/pi-pty/package.json +2 -2
  985. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  986. package/node_modules/@earendil-works/pi-tui/dist/alt-screen-search.d.ts.map +1 -1
  987. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
  988. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
  989. package/node_modules/@earendil-works/pi-tui/dist/components/alt-screen-flash.d.ts.map +1 -1
  990. package/node_modules/@earendil-works/pi-tui/dist/components/box.d.ts.map +1 -1
  991. package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.d.ts.map +1 -1
  992. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
  993. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  994. package/node_modules/@earendil-works/pi-tui/dist/components/h-stack.d.ts.map +1 -1
  995. package/node_modules/@earendil-works/pi-tui/dist/components/h-stack.js.map +1 -1
  996. package/node_modules/@earendil-works/pi-tui/dist/components/image.d.ts.map +1 -1
  997. package/node_modules/@earendil-works/pi-tui/dist/components/image.js.map +1 -1
  998. package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts.map +1 -1
  999. package/node_modules/@earendil-works/pi-tui/dist/components/latex.d.ts.map +1 -1
  1000. package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts.map +1 -1
  1001. package/node_modules/@earendil-works/pi-tui/dist/components/loader.js.map +1 -1
  1002. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -1
  1003. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -1
  1004. package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.d.ts.map +1 -1
  1005. package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.js.map +1 -1
  1006. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.d.ts.map +1 -1
  1007. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js.map +1 -1
  1008. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts.map +1 -1
  1009. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js.map +1 -1
  1010. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.d.ts.map +1 -1
  1011. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.js.map +1 -1
  1012. package/node_modules/@earendil-works/pi-tui/dist/components/stack.d.ts.map +1 -1
  1013. package/node_modules/@earendil-works/pi-tui/dist/components/stack.js.map +1 -1
  1014. package/node_modules/@earendil-works/pi-tui/dist/components/text.d.ts.map +1 -1
  1015. package/node_modules/@earendil-works/pi-tui/dist/components/text.js.map +1 -1
  1016. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.d.ts.map +1 -1
  1017. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.js.map +1 -1
  1018. package/node_modules/@earendil-works/pi-tui/dist/components/v-stack.d.ts.map +1 -1
  1019. package/node_modules/@earendil-works/pi-tui/dist/components/v-stack.js.map +1 -1
  1020. package/node_modules/@earendil-works/pi-tui/dist/image-markers.d.ts.map +1 -1
  1021. package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
  1022. package/node_modules/@earendil-works/pi-tui/dist/keybindings.d.ts.map +1 -1
  1023. package/node_modules/@earendil-works/pi-tui/dist/keybindings.js.map +1 -1
  1024. package/node_modules/@earendil-works/pi-tui/dist/keys.d.ts.map +1 -1
  1025. package/node_modules/@earendil-works/pi-tui/dist/keys.js.map +1 -1
  1026. package/node_modules/@earendil-works/pi-tui/dist/kill-ring.d.ts.map +1 -1
  1027. package/node_modules/@earendil-works/pi-tui/dist/mux.js.map +1 -1
  1028. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +1 -1
  1029. package/node_modules/@earendil-works/pi-tui/dist/native-module-path.js.map +1 -1
  1030. package/node_modules/@earendil-works/pi-tui/dist/paste-markers.d.ts.map +1 -1
  1031. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  1032. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js.map +1 -1
  1033. package/node_modules/@earendil-works/pi-tui/dist/terminal-capabilities.js.map +1 -1
  1034. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
  1035. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  1036. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  1037. package/node_modules/@earendil-works/pi-tui/dist/tmux-image-probe.js.map +1 -1
  1038. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts.map +1 -1
  1039. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js.map +1 -1
  1040. package/node_modules/@earendil-works/pi-tui/dist/tui-main-screen.d.ts.map +1 -1
  1041. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  1042. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  1043. package/node_modules/@earendil-works/pi-tui/dist/undo-stack.d.ts.map +1 -1
  1044. package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
  1045. package/node_modules/@earendil-works/pi-tui/package.json +2 -2
  1046. package/node_modules/css-tree/cjs/data-patch.cjs +853 -5
  1047. package/node_modules/css-tree/cjs/data.cjs +13598 -3
  1048. package/node_modules/css-tree/cjs/version.cjs +1 -3
  1049. package/node_modules/css-tree/lib/data-patch.js +853 -4
  1050. package/node_modules/css-tree/lib/data.js +13598 -5
  1051. package/node_modules/css-tree/lib/version.js +1 -5
  1052. package/package.json +8 -8
  1053. package/vendor/pi-client/client.d.ts.map +1 -1
  1054. package/vendor/pi-client/client.js.map +1 -1
  1055. package/vendor/pi-client/connection.d.ts.map +1 -1
  1056. package/vendor/pi-client/connection.js.map +1 -1
  1057. package/vendor/pi-client/errors.d.ts.map +1 -1
  1058. package/vendor/pi-client/session-handle.d.ts.map +1 -1
  1059. package/vendor/pi-client/state.d.ts.map +1 -1
  1060. package/vendor/pi-protocol/cbor/decoder.js.map +1 -1
  1061. package/vendor/pi-protocol/cbor/options.d.ts.map +1 -1
  1062. package/vendor/pi-protocol/codec.d.ts.map +1 -1
  1063. package/vendor/pi-protocol/codec.js.map +1 -1
  1064. package/vendor/pi-protocol/framing.d.ts.map +1 -1
  1065. package/vendor/pi-protocol/schemas.d.ts +678 -678
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-provider.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/oauth-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACzG,OAAO,KAAK,EACX,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,EACnB,WAAW,EACX,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGrE,eAAO,MAAM,iBAAiB,QAAgB,CAAC;AAE/C,MAAM,WAAW,uBAAuB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,SAAa,GAAG,MAAM,GAAG,SAAS,CAGxF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,EAAE,GAAG,SAAa,GAAG,WAAW,GAAG,SAAS,CAU/G;AAED,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,GACf,aAAa,CAYf;AAKD,qBAAa,gBAAiB,YAAW,mBAAmB;;gBAK/C,OAAO,EAAE,uBAAuB;IAI5C,IAAI,oBAAoB,IAAI,GAAG,GAAG,SAAS,CAE1C;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,GAAG,GAAG,SAAS,CAE1C;IAED,IAAI,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAE1C;IAED,IAAI,cAAc,IAAI,mBAAmB,CAUxC;IAED,KAAK,IAAI,MAAM;IAMf,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO;IAMpD,iBAAiB,IAAI,2BAA2B,GAAG,SAAS;IAMtD,qBAAqB,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE,cAAc,IAAI,mBAAmB,GAAG,SAAS;IAIjD,MAAM,IAAI,WAAW,GAAG,SAAS;IAI3B,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,YAAY,IAAI,MAAM;IAUhB,uBAAuB,CAAC,gBAAgB,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnE,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAInF,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBzG,IAAI,UAAU,IAAI,MAAM,CAEvB;IACD,IAAI,SAAS,IAAI,MAAM,CAEtB;IACD,IAAI,KAAK,IAAI,aAAa,CAEzB;IACD,IAAI,MAAM,IAAI,MAAM,EAAE,GAAG,SAAS,CAEjC;CASD"}
1
+ {"version":3,"file":"oauth-provider.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/oauth-provider.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-refresh.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/oauth-refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,eAAe,EAEpB,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,2BAA2B,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACzG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAG/E,OAAO,EACN,KAAK,gBAAgB,EAIrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,qBAAqB;IACrC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CAC3D;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAKpF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,2BAA2B,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAS/G;AAID,qBAAa,iBAAiB;;gBAKjB,QAAQ,EAAE,gBAAgB,EAAE,OAAO,GAAE,qBAA0B;IAKrE,WAAW,IAAI,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAOrD,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC;CAkF/B"}
1
+ {"version":3,"file":"oauth-refresh.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/oauth-refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,eAAe,EAEpB,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,2BAA2B,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACzG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAG/E,OAAO,EACN,KAAK,gBAAgB,EAIrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,qBAAqB;IACrC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CAC3D;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAKpF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,2BAA2B,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAS/G;AAID,qBAAa,iBAAiB;;IAK7B,YAAY,QAAQ,EAAE,gBAAgB,EAAE,OAAO,GAAE,qBAA0B,EAG1E;IAEK,WAAW,IAAI,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAKpD;IAED,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,CAO9B;CA2ED"}
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-refresh.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/oauth-refresh.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tdiscoverOAuthServerInfo,\n\ttype OAuthServerInfo,\n\trefreshAuthorization,\n} from \"@modelcontextprotocol/sdk/client/auth.js\";\nimport type { AuthorizationServerMetadata, OAuthTokens } from \"@modelcontextprotocol/sdk/shared/auth.js\";\nimport type { FetchLike } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport { safeDelay } from \"../wrap.ts\";\nimport { isInvalidGrant, isTransientTokenError, OAuthFlowError } from \"./oauth-errors.ts\";\nimport {\n\ttype McpOAuthProvider,\n\tmergeTokensIntoStoredAuth,\n\tREFRESH_LEEWAY_MS,\n\tstoredAuthToTokens,\n} from \"./oauth-provider.ts\";\nimport type { McpStoredAuth } from \"./token-store.ts\";\n\nexport interface RefreshManagerOptions {\n\tfetchFn?: FetchLike;\n\tmaxRetries?: number;\n\tretryDelayMs?: number;\n\tdiscover?: (serverUrl: string) => Promise<OAuthServerInfo>;\n}\n\nexport function isTokenStale(record: McpStoredAuth | undefined, now: number): boolean {\n\tconst token = record?.accessToken;\n\tif (token === undefined || token.length === 0) return true;\n\tif (record?.expiresAt === undefined) return false;\n\treturn record.expiresAt - now <= REFRESH_LEEWAY_MS;\n}\n\nexport function assertS256Supported(metadata: AuthorizationServerMetadata | undefined, serverName: string): void {\n\tconst methods = metadata?.code_challenge_methods_supported;\n\tif (methods === undefined || !methods.includes(\"S256\")) {\n\t\tthrow new OAuthFlowError(\n\t\t\t\"s256_unsupported\",\n\t\t\t`MCP server ${serverName} authorization server does not advertise PKCE S256 (code_challenge_methods_supported); refusing to authorize without proof-key protection.`,\n\t\t\t{ serverName },\n\t\t);\n\t}\n}\n\n// Coalesces refresh across in-process callers (single promise) and across\n// processes (token-store lock). Preemptive at expiry - 5min.\nexport class McpRefreshManager {\n\treadonly #provider: McpOAuthProvider;\n\treadonly #options: RefreshManagerOptions;\n\t#inflight: Promise<OAuthTokens> | undefined;\n\n\tconstructor(provider: McpOAuthProvider, options: RefreshManagerOptions = {}) {\n\t\tthis.#provider = provider;\n\t\tthis.#options = options;\n\t}\n\n\tasync ensureFresh(): Promise<OAuthTokens | undefined> {\n\t\tconst record = this.#provider.store.read();\n\t\tif (record?.accessToken === undefined) return undefined;\n\t\tif (!isTokenStale(record, Date.now())) return storedAuthToTokens(record);\n\t\treturn this.refresh();\n\t}\n\n\trefresh(): Promise<OAuthTokens> {\n\t\tif (this.#inflight !== undefined) return this.#inflight;\n\t\tconst run = this.#refreshLocked().finally(() => {\n\t\t\tthis.#inflight = undefined;\n\t\t});\n\t\tthis.#inflight = run;\n\t\treturn run;\n\t}\n\n\t#refreshLocked(): Promise<OAuthTokens> {\n\t\treturn this.#provider.store.withLock(async () => {\n\t\t\tconst current = this.#provider.store.readUnlocked();\n\t\t\tif (current?.accessToken !== undefined && !isTokenStale(current, Date.now())) {\n\t\t\t\tconst tokens = storedAuthToTokens(current);\n\t\t\t\tif (tokens !== undefined) return tokens;\n\t\t\t}\n\t\t\tconst refreshToken = current?.refreshToken;\n\t\t\tif (current === undefined || refreshToken === undefined) {\n\t\t\t\tthrow new OAuthFlowError(\"needs_auth\", `MCP server ${this.#provider.serverName} has no refresh token`, {\n\t\t\t\t\tserverName: this.#provider.serverName,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this.#doRefresh(current, refreshToken);\n\t\t});\n\t}\n\n\tasync #doRefresh(current: McpStoredAuth, refreshToken: string): Promise<OAuthTokens> {\n\t\tconst info = await this.#discover();\n\t\tconst clientInformation = this.#provider.clientInformation();\n\t\tif (clientInformation === undefined) {\n\t\t\tthrow new OAuthFlowError(\"needs_auth\", `MCP server ${this.#provider.serverName} is not registered`, {\n\t\t\t\tserverName: this.#provider.serverName,\n\t\t\t});\n\t\t}\n\t\tconst resource = new URL(current.resource ?? this.#provider.serverUrl);\n\t\tconst maxRetries = this.#options.maxRetries ?? 2;\n\t\tfor (let attempt = 0; ; attempt++) {\n\t\t\ttry {\n\t\t\t\tconst tokens = await refreshAuthorization(info.authorizationServerUrl, {\n\t\t\t\t\tmetadata: info.authorizationServerMetadata,\n\t\t\t\t\tclientInformation,\n\t\t\t\t\trefreshToken,\n\t\t\t\t\tresource,\n\t\t\t\t\tfetchFn: this.#options.fetchFn,\n\t\t\t\t});\n\t\t\t\tthis.#provider.store.writeUnlocked(mergeTokensIntoStoredAuth(current, tokens, this.#provider.serverUrl));\n\t\t\t\treturn tokens;\n\t\t\t} catch (error) {\n\t\t\t\tif (isInvalidGrant(error)) {\n\t\t\t\t\t// Terminal: drop credentials so the next use forces a clean re-auth.\n\t\t\t\t\tthis.#provider.store.writeUnlocked(undefined);\n\t\t\t\t\tthrow new OAuthFlowError(\n\t\t\t\t\t\t\"invalid_grant\",\n\t\t\t\t\t\t`MCP server ${this.#provider.serverName} refresh rejected (invalid_grant); credentials cleared, re-authentication required.`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\t\tserverName: this.#provider.serverName,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (isTransientTokenError(error) && attempt < maxRetries) {\n\t\t\t\t\tawait safeDelay(this.#options.retryDelayMs ?? 50);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Transient but exhausted: surface without clearing credentials (needs_auth NOT set).\n\t\t\t\tthrow new OAuthFlowError(\n\t\t\t\t\t\"transient\",\n\t\t\t\t\t`MCP server ${this.#provider.serverName} token refresh failed transiently; will retry on next use.`,\n\t\t\t\t\t{\n\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\tretriable: true,\n\t\t\t\t\t\tserverName: this.#provider.serverName,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t#discover(): Promise<OAuthServerInfo> {\n\t\tif (this.#options.discover !== undefined) return this.#options.discover(this.#provider.serverUrl);\n\t\treturn discoverOAuthServerInfo(this.#provider.serverUrl, { fetchFn: this.#options.fetchFn });\n\t}\n}\n"]}
1
+ {"version":3,"file":"oauth-refresh.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/oauth-refresh.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tdiscoverOAuthServerInfo,\n\ttype OAuthServerInfo,\n\trefreshAuthorization,\n} from \"@modelcontextprotocol/sdk/client/auth.js\";\nimport type { AuthorizationServerMetadata, OAuthTokens } from \"@modelcontextprotocol/sdk/shared/auth.js\";\nimport type { FetchLike } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport { safeDelay } from \"../wrap.ts\";\nimport { isInvalidGrant, isTransientTokenError, OAuthFlowError } from \"./oauth-errors.ts\";\nimport {\n\ttype McpOAuthProvider,\n\tmergeTokensIntoStoredAuth,\n\tREFRESH_LEEWAY_MS,\n\tstoredAuthToTokens,\n} from \"./oauth-provider.ts\";\nimport type { McpStoredAuth } from \"./token-store.ts\";\n\nexport interface RefreshManagerOptions {\n\tfetchFn?: FetchLike;\n\tmaxRetries?: number;\n\tretryDelayMs?: number;\n\tdiscover?: (serverUrl: string) => Promise<OAuthServerInfo>;\n}\n\nexport function isTokenStale(record: McpStoredAuth | undefined, now: number): boolean {\n\tconst token = record?.accessToken;\n\tif (token === undefined || token.length === 0) return true;\n\tif (record?.expiresAt === undefined) return false;\n\treturn record.expiresAt - now <= REFRESH_LEEWAY_MS;\n}\n\nexport function assertS256Supported(metadata: AuthorizationServerMetadata | undefined, serverName: string): void {\n\tconst methods = metadata?.code_challenge_methods_supported;\n\tif (methods === undefined || !methods.includes(\"S256\")) {\n\t\tthrow new OAuthFlowError(\n\t\t\t\"s256_unsupported\",\n\t\t\t`MCP server ${serverName} authorization server does not advertise PKCE S256 (code_challenge_methods_supported); refusing to authorize without proof-key protection.`,\n\t\t\t{ serverName },\n\t\t);\n\t}\n}\n\n// Coalesces refresh across in-process callers (single promise) and across\n// processes (token-store lock). Preemptive at expiry - 5min.\nexport class McpRefreshManager {\n\treadonly #provider: McpOAuthProvider;\n\treadonly #options: RefreshManagerOptions;\n\t#inflight: Promise<OAuthTokens> | undefined;\n\n\tconstructor(provider: McpOAuthProvider, options: RefreshManagerOptions = {}) {\n\t\tthis.#provider = provider;\n\t\tthis.#options = options;\n\t}\n\n\tasync ensureFresh(): Promise<OAuthTokens | undefined> {\n\t\tconst record = this.#provider.store.read();\n\t\tif (record?.accessToken === undefined) return undefined;\n\t\tif (!isTokenStale(record, Date.now())) return storedAuthToTokens(record);\n\t\treturn this.refresh();\n\t}\n\n\trefresh(): Promise<OAuthTokens> {\n\t\tif (this.#inflight !== undefined) return this.#inflight;\n\t\tconst run = this.#refreshLocked().finally(() => {\n\t\t\tthis.#inflight = undefined;\n\t\t});\n\t\tthis.#inflight = run;\n\t\treturn run;\n\t}\n\n\t#refreshLocked(): Promise<OAuthTokens> {\n\t\treturn this.#provider.store.withLock(async () => {\n\t\t\tconst current = this.#provider.store.readUnlocked();\n\t\t\tif (current?.accessToken !== undefined && !isTokenStale(current, Date.now())) {\n\t\t\t\tconst tokens = storedAuthToTokens(current);\n\t\t\t\tif (tokens !== undefined) return tokens;\n\t\t\t}\n\t\t\tconst refreshToken = current?.refreshToken;\n\t\t\tif (current === undefined || refreshToken === undefined) {\n\t\t\t\tthrow new OAuthFlowError(\"needs_auth\", `MCP server ${this.#provider.serverName} has no refresh token`, {\n\t\t\t\t\tserverName: this.#provider.serverName,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this.#doRefresh(current, refreshToken);\n\t\t});\n\t}\n\n\tasync #doRefresh(current: McpStoredAuth, refreshToken: string): Promise<OAuthTokens> {\n\t\tconst info = await this.#discover();\n\t\tconst clientInformation = this.#provider.clientInformation();\n\t\tif (clientInformation === undefined) {\n\t\t\tthrow new OAuthFlowError(\"needs_auth\", `MCP server ${this.#provider.serverName} is not registered`, {\n\t\t\t\tserverName: this.#provider.serverName,\n\t\t\t});\n\t\t}\n\t\tconst resource = new URL(current.resource ?? this.#provider.serverUrl);\n\t\tconst maxRetries = this.#options.maxRetries ?? 2;\n\t\tfor (let attempt = 0; ; attempt++) {\n\t\t\ttry {\n\t\t\t\tconst tokens = await refreshAuthorization(info.authorizationServerUrl, {\n\t\t\t\t\tmetadata: info.authorizationServerMetadata,\n\t\t\t\t\tclientInformation,\n\t\t\t\t\trefreshToken,\n\t\t\t\t\tresource,\n\t\t\t\t\tfetchFn: this.#options.fetchFn,\n\t\t\t\t});\n\t\t\t\tthis.#provider.store.writeUnlocked(mergeTokensIntoStoredAuth(current, tokens, this.#provider.serverUrl));\n\t\t\t\treturn tokens;\n\t\t\t} catch (error) {\n\t\t\t\tif (isInvalidGrant(error)) {\n\t\t\t\t\t// Terminal: drop credentials so the next use forces a clean re-auth.\n\t\t\t\t\tthis.#provider.store.writeUnlocked(undefined);\n\t\t\t\t\tthrow new OAuthFlowError(\n\t\t\t\t\t\t\"invalid_grant\",\n\t\t\t\t\t\t`MCP server ${this.#provider.serverName} refresh rejected (invalid_grant); credentials cleared, re-authentication required.`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\t\tserverName: this.#provider.serverName,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (isTransientTokenError(error) && attempt < maxRetries) {\n\t\t\t\t\tawait safeDelay(this.#options.retryDelayMs ?? 50);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Transient but exhausted: surface without clearing credentials (needs_auth NOT set).\n\t\t\t\tthrow new OAuthFlowError(\n\t\t\t\t\t\"transient\",\n\t\t\t\t\t`MCP server ${this.#provider.serverName} token refresh failed transiently; will retry on next use.`,\n\t\t\t\t\t{\n\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\tretriable: true,\n\t\t\t\t\t\tserverName: this.#provider.serverName,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t#discover(): Promise<OAuthServerInfo> {\n\t\tif (this.#options.discover !== undefined) return this.#options.discover(this.#provider.serverUrl);\n\t\treturn discoverOAuthServerInfo(this.#provider.serverUrl, { fetchFn: this.#options.fetchFn });\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/oauth.ts"],"names":[],"mappings":"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","sourcesContent":["import type { OAuthClientProvider } from \"@modelcontextprotocol/sdk/client/auth.js\";\nimport {\n\tdiscoverOAuthServerInfo,\n\tfetchToken,\n\ttype OAuthDiscoveryState,\n\ttype OAuthServerInfo,\n\tauth as sdkAuth,\n} from \"@modelcontextprotocol/sdk/client/auth.js\";\nimport type { FetchLike } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport { isInvalidGrant, OAuthFlowError } from \"./oauth-errors.ts\";\nimport type { McpOAuthProvider } from \"./oauth-provider.ts\";\nimport { assertS256Supported } from \"./oauth-refresh.ts\";\n\nexport interface OAuthFlowOptions {\n\tfetchFn?: FetchLike;\n\tdiscover?: (serverUrl: string) => Promise<OAuthServerInfo>;\n}\n\nexport interface BeginAuthResult {\n\tstatus: \"redirect\" | \"authorized\";\n\tauthorizationUrl: URL | undefined;\n}\n\n// Pre-flight: discover the authorization server and REFUSE (typed) if it does\n// not advertise PKCE S256. Runs before any authorize redirect.\nexport async function assertAuthorizable(\n\tprovider: McpOAuthProvider,\n\toptions: OAuthFlowOptions = {},\n): Promise<OAuthServerInfo> {\n\tconst info = await discover(provider, options);\n\tassertS256Supported(info.authorizationServerMetadata, provider.serverName);\n\treturn info;\n}\n\nexport async function beginAuthorization(\n\tprovider: McpOAuthProvider,\n\toptions: OAuthFlowOptions = {},\n): Promise<BeginAuthResult> {\n\tawait assertAuthorizable(provider, options);\n\tconst result = await sdkAuth(provider, { serverUrl: provider.serverUrl, fetchFn: options.fetchFn });\n\treturn {\n\t\tstatus: result === \"AUTHORIZED\" ? \"authorized\" : \"redirect\",\n\t\tauthorizationUrl: provider.lastAuthorizationUrl,\n\t};\n}\n\n// Paste flow: validates single-use state itself, then exchanges the code.\nexport async function completeAuthorization(\n\tprovider: McpOAuthProvider,\n\tredirectInput: string,\n\toptions: OAuthFlowOptions = {},\n): Promise<void> {\n\tconst { code, state } = parseRedirect(redirectInput, provider.serverName);\n\tif (!provider.consumeState(state)) {\n\t\tthrow new OAuthFlowError(\n\t\t\t\"state_mismatch\",\n\t\t\t`MCP server ${provider.serverName} authorization state did not match (possible CSRF or a stale/replayed link); restart with /mcp auth-start.`,\n\t\t\t{ serverName: provider.serverName },\n\t\t);\n\t}\n\tawait finishAuthorization(provider, code, options);\n}\n\n// Exchange an already-validated authorization code (state was checked by the\n// loopback callback server). Uses the provider's stored PKCE verifier.\nexport async function finishAuthorization(\n\tprovider: McpOAuthProvider,\n\tcode: string,\n\toptions: OAuthFlowOptions = {},\n): Promise<void> {\n\tlet result: Awaited<ReturnType<typeof sdkAuth>>;\n\ttry {\n\t\tresult = await sdkAuth(provider, {\n\t\t\tserverUrl: provider.serverUrl,\n\t\t\tauthorizationCode: code,\n\t\t\tfetchFn: options.fetchFn,\n\t\t});\n\t} catch (error) {\n\t\tif (isInvalidGrant(error) || isRejectedAuthorizationCode(error)) {\n\t\t\tawait provider.invalidateCredentials(\"tokens\");\n\t\t\tawait provider.invalidateCredentials(\"verifier\");\n\t\t\tthrow new OAuthFlowError(\n\t\t\t\t\"expired_code\",\n\t\t\t\t`MCP server ${provider.serverName} authorization code was rejected or expired; restart with /mcp auth-start ${provider.serverName}.`,\n\t\t\t\t{ cause: error, serverName: provider.serverName },\n\t\t\t);\n\t\t}\n\t\tthrow error;\n\t}\n\tif (result !== \"AUTHORIZED\") {\n\t\tthrow new OAuthFlowError(\"needs_auth\", `MCP server ${provider.serverName} did not complete authorization.`, {\n\t\t\tserverName: provider.serverName,\n\t\t});\n\t}\n}\n\nexport async function clientCredentialsGrant(\n\tprovider: McpOAuthProvider,\n\toptions: OAuthFlowOptions = {},\n): Promise<void> {\n\tconst info = await discover(provider, options);\n\tconst clientInformation = provider.clientInformation();\n\tif (clientInformation === undefined) {\n\t\tthrow new OAuthFlowError(\n\t\t\t\"needs_auth\",\n\t\t\t`MCP server ${provider.serverName} client_credentials requires a clientId.`,\n\t\t\t{\n\t\t\t\tserverName: provider.serverName,\n\t\t\t},\n\t\t);\n\t}\n\tconst requestedScope = provider.scopes?.join(\" \");\n\t// Explicit delegate: spreading the class instance would drop its getters.\n\tconst credentialsProvider: OAuthClientProvider = {\n\t\tget redirectUrl() {\n\t\t\treturn undefined;\n\t\t},\n\t\tget clientMetadata() {\n\t\t\treturn { ...provider.clientMetadata, scope: requestedScope };\n\t\t},\n\t\tclientInformation: () => clientInformation,\n\t\ttokens: () => undefined,\n\t\tsaveTokens: () => undefined,\n\t\tredirectToAuthorization: () => undefined,\n\t\tsaveCodeVerifier: () => undefined,\n\t\tcodeVerifier: () => {\n\t\t\tthrow new OAuthFlowError(\"no_verifier\", \"client_credentials has no PKCE verifier\", {\n\t\t\t\tserverName: provider.serverName,\n\t\t\t});\n\t\t},\n\t\tprepareTokenRequest(scope?: string) {\n\t\t\tconst params = new URLSearchParams({ grant_type: \"client_credentials\" });\n\t\t\tconst requested = scope ?? requestedScope;\n\t\t\tif (requested !== undefined && requested.length > 0) params.set(\"scope\", requested);\n\t\t\treturn params;\n\t\t},\n\t};\n\tconst tokens = await fetchToken(credentialsProvider, info.authorizationServerUrl, {\n\t\tmetadata: info.authorizationServerMetadata,\n\t\tresource: new URL(provider.serverUrl),\n\t\tfetchFn: options.fetchFn,\n\t});\n\tawait provider.saveTokens(tokens);\n}\n\nexport async function logout(provider: McpOAuthProvider): Promise<void> {\n\tawait provider.store.clear();\n}\n\nasync function discover(provider: McpOAuthProvider, options: OAuthFlowOptions): Promise<OAuthServerInfo> {\n\tif (options.discover !== undefined) return options.discover(provider.serverUrl);\n\tconst cached = provider.discoveryState();\n\tif (cached !== undefined) return cached;\n\tconst info = await discoverOAuthServerInfo(provider.serverUrl, { fetchFn: options.fetchFn });\n\tawait provider.saveDiscoveryState(toDiscoveryState(info));\n\treturn info;\n}\n\nfunction toDiscoveryState(info: OAuthServerInfo): OAuthDiscoveryState {\n\treturn {\n\t\tauthorizationServerUrl: info.authorizationServerUrl,\n\t\tauthorizationServerMetadata: info.authorizationServerMetadata,\n\t\tresourceMetadata: info.resourceMetadata,\n\t};\n}\n\nfunction parseRedirect(input: string, serverName: string): { code: string; state: string | undefined } {\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(input.trim());\n\t} catch {\n\t\tthrow new OAuthFlowError(\n\t\t\t\"needs_auth\",\n\t\t\t`MCP server ${serverName} received a malformed redirect URL; paste the full http://127.0.0.1/... address from your browser.`,\n\t\t\t{ serverName },\n\t\t);\n\t}\n\tconst error = url.searchParams.get(\"error\");\n\tif (error !== null) {\n\t\tthrow new OAuthFlowError(\"needs_auth\", `MCP server ${serverName} authorization failed: ${error}`, { serverName });\n\t}\n\tconst code = url.searchParams.get(\"code\");\n\tif (code === null || code.length === 0) {\n\t\tthrow new OAuthFlowError(\n\t\t\t\"needs_auth\",\n\t\t\t`MCP server ${serverName} redirect URL has no authorization code; ensure you copied the entire address.`,\n\t\t\t{ serverName },\n\t\t);\n\t}\n\treturn { code, state: url.searchParams.get(\"state\") ?? undefined };\n}\n\nfunction isRejectedAuthorizationCode(error: unknown): boolean {\n\tconst message = error instanceof Error ? error.message.toLowerCase() : String(error).toLowerCase();\n\treturn (\n\t\tmessage.includes(\"authorization code invalid\") ||\n\t\t(message.includes(\"authorization code\") && message.includes(\"used\")) ||\n\t\tmessage.includes(\"pkce verification failed\")\n\t);\n}\n"]}
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/oauth.ts"],"names":[],"mappings":"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","sourcesContent":["import type { OAuthClientProvider } from \"@modelcontextprotocol/sdk/client/auth.js\";\nimport {\n\tdiscoverOAuthServerInfo,\n\tfetchToken,\n\ttype OAuthDiscoveryState,\n\ttype OAuthServerInfo,\n\tauth as sdkAuth,\n} from \"@modelcontextprotocol/sdk/client/auth.js\";\nimport type { FetchLike } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport { isInvalidGrant, OAuthFlowError } from \"./oauth-errors.ts\";\nimport type { McpOAuthProvider } from \"./oauth-provider.ts\";\nimport { assertS256Supported } from \"./oauth-refresh.ts\";\n\nexport interface OAuthFlowOptions {\n\tfetchFn?: FetchLike;\n\tdiscover?: (serverUrl: string) => Promise<OAuthServerInfo>;\n}\n\nexport interface BeginAuthResult {\n\tstatus: \"redirect\" | \"authorized\";\n\tauthorizationUrl: URL | undefined;\n}\n\n// Pre-flight: discover the authorization server and REFUSE (typed) if it does\n// not advertise PKCE S256. Runs before any authorize redirect.\nexport async function assertAuthorizable(\n\tprovider: McpOAuthProvider,\n\toptions: OAuthFlowOptions = {},\n): Promise<OAuthServerInfo> {\n\tconst info = await discover(provider, options);\n\tassertS256Supported(info.authorizationServerMetadata, provider.serverName);\n\treturn info;\n}\n\nexport async function beginAuthorization(\n\tprovider: McpOAuthProvider,\n\toptions: OAuthFlowOptions = {},\n): Promise<BeginAuthResult> {\n\tawait assertAuthorizable(provider, options);\n\tconst result = await sdkAuth(provider, { serverUrl: provider.serverUrl, fetchFn: options.fetchFn });\n\treturn {\n\t\tstatus: result === \"AUTHORIZED\" ? \"authorized\" : \"redirect\",\n\t\tauthorizationUrl: provider.lastAuthorizationUrl,\n\t};\n}\n\n// Paste flow: validates single-use state itself, then exchanges the code.\nexport async function completeAuthorization(\n\tprovider: McpOAuthProvider,\n\tredirectInput: string,\n\toptions: OAuthFlowOptions = {},\n): Promise<void> {\n\tconst { code, state } = parseRedirect(redirectInput, provider.serverName);\n\tif (!provider.consumeState(state)) {\n\t\tthrow new OAuthFlowError(\n\t\t\t\"state_mismatch\",\n\t\t\t`MCP server ${provider.serverName} authorization state did not match (possible CSRF or a stale/replayed link); restart with /mcp auth-start.`,\n\t\t\t{ serverName: provider.serverName },\n\t\t);\n\t}\n\tawait finishAuthorization(provider, code, options);\n}\n\n// Exchange an already-validated authorization code (state was checked by the\n// loopback callback server). Uses the provider's stored PKCE verifier.\nexport async function finishAuthorization(\n\tprovider: McpOAuthProvider,\n\tcode: string,\n\toptions: OAuthFlowOptions = {},\n): Promise<void> {\n\tlet result: Awaited<ReturnType<typeof sdkAuth>>;\n\ttry {\n\t\tresult = await sdkAuth(provider, {\n\t\t\tserverUrl: provider.serverUrl,\n\t\t\tauthorizationCode: code,\n\t\t\tfetchFn: options.fetchFn,\n\t\t});\n\t} catch (error) {\n\t\tif (isInvalidGrant(error) || isRejectedAuthorizationCode(error)) {\n\t\t\tawait provider.invalidateCredentials(\"tokens\");\n\t\t\tawait provider.invalidateCredentials(\"verifier\");\n\t\t\tthrow new OAuthFlowError(\n\t\t\t\t\"expired_code\",\n\t\t\t\t`MCP server ${provider.serverName} authorization code was rejected or expired; restart with /mcp auth-start ${provider.serverName}.`,\n\t\t\t\t{ cause: error, serverName: provider.serverName },\n\t\t\t);\n\t\t}\n\t\tthrow error;\n\t}\n\tif (result !== \"AUTHORIZED\") {\n\t\tthrow new OAuthFlowError(\"needs_auth\", `MCP server ${provider.serverName} did not complete authorization.`, {\n\t\t\tserverName: provider.serverName,\n\t\t});\n\t}\n}\n\nexport async function clientCredentialsGrant(\n\tprovider: McpOAuthProvider,\n\toptions: OAuthFlowOptions = {},\n): Promise<void> {\n\tconst info = await discover(provider, options);\n\tconst clientInformation = provider.clientInformation();\n\tif (clientInformation === undefined) {\n\t\tthrow new OAuthFlowError(\n\t\t\t\"needs_auth\",\n\t\t\t`MCP server ${provider.serverName} client_credentials requires a clientId.`,\n\t\t\t{\n\t\t\t\tserverName: provider.serverName,\n\t\t\t},\n\t\t);\n\t}\n\tconst requestedScope = provider.scopes?.join(\" \");\n\t// Explicit delegate: spreading the class instance would drop its getters.\n\tconst credentialsProvider: OAuthClientProvider = {\n\t\tget redirectUrl() {\n\t\t\treturn undefined;\n\t\t},\n\t\tget clientMetadata() {\n\t\t\treturn { ...provider.clientMetadata, scope: requestedScope };\n\t\t},\n\t\tclientInformation: () => clientInformation,\n\t\ttokens: () => undefined,\n\t\tsaveTokens: () => undefined,\n\t\tredirectToAuthorization: () => undefined,\n\t\tsaveCodeVerifier: () => undefined,\n\t\tcodeVerifier: () => {\n\t\t\tthrow new OAuthFlowError(\"no_verifier\", \"client_credentials has no PKCE verifier\", {\n\t\t\t\tserverName: provider.serverName,\n\t\t\t});\n\t\t},\n\t\tprepareTokenRequest(scope?: string) {\n\t\t\tconst params = new URLSearchParams({ grant_type: \"client_credentials\" });\n\t\t\tconst requested = scope ?? requestedScope;\n\t\t\tif (requested !== undefined && requested.length > 0) params.set(\"scope\", requested);\n\t\t\treturn params;\n\t\t},\n\t};\n\tconst tokens = await fetchToken(credentialsProvider, info.authorizationServerUrl, {\n\t\tmetadata: info.authorizationServerMetadata,\n\t\tresource: new URL(provider.serverUrl),\n\t\tfetchFn: options.fetchFn,\n\t});\n\tawait provider.saveTokens(tokens);\n}\n\nexport async function logout(provider: McpOAuthProvider): Promise<void> {\n\tawait provider.store.clear();\n}\n\nasync function discover(provider: McpOAuthProvider, options: OAuthFlowOptions): Promise<OAuthServerInfo> {\n\tif (options.discover !== undefined) return options.discover(provider.serverUrl);\n\tconst cached = provider.discoveryState();\n\tif (cached !== undefined) return cached;\n\tconst info = await discoverOAuthServerInfo(provider.serverUrl, { fetchFn: options.fetchFn });\n\tawait provider.saveDiscoveryState(toDiscoveryState(info));\n\treturn info;\n}\n\nfunction toDiscoveryState(info: OAuthServerInfo): OAuthDiscoveryState {\n\treturn {\n\t\tauthorizationServerUrl: info.authorizationServerUrl,\n\t\tauthorizationServerMetadata: info.authorizationServerMetadata,\n\t\tresourceMetadata: info.resourceMetadata,\n\t};\n}\n\nfunction parseRedirect(input: string, serverName: string): { code: string; state: string | undefined } {\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(input.trim());\n\t} catch {\n\t\tthrow new OAuthFlowError(\n\t\t\t\"needs_auth\",\n\t\t\t`MCP server ${serverName} received a malformed redirect URL; paste the full http://127.0.0.1/... address from your browser.`,\n\t\t\t{ serverName },\n\t\t);\n\t}\n\tconst error = url.searchParams.get(\"error\");\n\tif (error !== null) {\n\t\tthrow new OAuthFlowError(\"needs_auth\", `MCP server ${serverName} authorization failed: ${error}`, { serverName });\n\t}\n\tconst code = url.searchParams.get(\"code\");\n\tif (code === null || code.length === 0) {\n\t\tthrow new OAuthFlowError(\n\t\t\t\"needs_auth\",\n\t\t\t`MCP server ${serverName} redirect URL has no authorization code; ensure you copied the entire address.`,\n\t\t\t{ serverName },\n\t\t);\n\t}\n\treturn { code, state: url.searchParams.get(\"state\") ?? undefined };\n}\n\nfunction isRejectedAuthorizationCode(error: unknown): boolean {\n\tconst message = error instanceof Error ? error.message.toLowerCase() : String(error).toLowerCase();\n\treturn (\n\t\tmessage.includes(\"authorization code invalid\") ||\n\t\t(message.includes(\"authorization code\") && message.includes(\"used\")) ||\n\t\tmessage.includes(\"pkce verification failed\")\n\t);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/token-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AAM3F,MAAM,WAAW,aAAa;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,qBAAqB,CAAC;IAG7B,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAOD,qBAAa,gBAAiB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACd,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CAO5C;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,qBAAa,aAAa,CAAC,OAAO,SAAS,aAAa,GAAG,aAAa;;IACvE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAMf,OAAO,EAAE,iBAAiB;IAStC,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,GAAG,IAAI,MAAM,CAEhB;IACD,IAAI,UAAU,IAAI,MAAM,CAEvB;IACD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,IAAI,OAAO,GAAG,SAAS;IAIrB,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,KAAK,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAgBnG,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAOrC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IASvD,YAAY,IAAI,OAAO,GAAG,SAAS;IAInC,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI;IAS1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAmD5B"}
1
+ {"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/auth/token-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AAM3F,MAAM,WAAW,aAAa;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,qBAAqB,CAAC;IAG7B,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAOD,qBAAa,gBAAiB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,YAAY,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAM3C;CACD;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,qBAAa,aAAa,CAAC,OAAO,SAAS,aAAa,GAAG,aAAa;;IACvE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAM3B,YAAY,OAAO,EAAE,iBAAiB,EAOrC;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,GAAG,IAAI,MAAM,CAEhB;IACD,IAAI,UAAU,IAAI,MAAM,CAEvB;IACD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,IAAI,OAAO,GAAG,SAAS,CAE1B;IAEK,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,KAAK,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAcxG;IAEK,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1C;IAKK,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOtD;IAED,YAAY,IAAI,OAAO,GAAG,SAAS,CAElC;IAED,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAO/C;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ3B;CA2CD"}
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/catalog.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAuBzD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,MAAc,EACd,UAA4B,EAC5B,MAAuB,EACvB,UAAiC,EAAE;IAEnC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAa,CAAC,MAAM,EAAE,EAAE,CAC3D,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CACzG,CAAC;IACF,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU;QACV,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,MAAM,EAAE,IAAI,CAAC,WAAW;QACxB,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,IAAI;KACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CAC1C,MAAc,EACd,OAA+B,EAC/B,UAA4B,EAC5B,gBAAwB,EACxB,eAAoC,EACpC,UAAiC,EAAE;IAEnC,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU;QACV,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,eAAe;QACf,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,gBAAgB;QAChB,MAAM,EAAE,IAAI,CAAC,WAAW;QACxB,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,IAAI;KACf,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport type { McpCachedServerCatalog } from \"./catalog-cache.ts\";\nimport type { McpServerConfig, McpSettings } from \"./config-schema.ts\";\nimport type { ServerConnection } from \"./connection.ts\";\nimport { collectAllPages } from \"./expose/pagination.ts\";\nimport type { McpOutputArtifacts } from \"./guard/output-guard.ts\";\nimport type { McpEnsureFreshAuth } from \"./health.ts\";\n\ntype ListedTool = Awaited<ReturnType<Client[\"listTools\"]>>[\"tools\"][number];\n\nexport interface McpToolCatalogEntry {\n\tserver: string;\n\ttool: string;\n\tschema: ListedTool[\"inputSchema\"];\n\tdescription?: string;\n\tannotations?: ListedTool[\"annotations\"];\n\trequestTimeoutMs: number;\n\tconnection: ServerConnection;\n\tensureConnected?: () => Promise<void>;\n\tensureFresh?: McpEnsureFreshAuth;\n\tagentDir?: string;\n\tartifacts?: McpOutputArtifacts;\n\toutputGuard?: McpSettings[\"outputGuard\"];\n}\n\ntype McpToolCatalogOptions = Pick<McpToolCatalogEntry, \"agentDir\" | \"artifacts\" | \"ensureFresh\" | \"outputGuard\">;\n\nexport async function collectToolCatalog(\n\tserver: string,\n\tconnection: ServerConnection,\n\tconfig: McpServerConfig,\n\toptions: McpToolCatalogOptions = {},\n): Promise<McpToolCatalogEntry[]> {\n\tconst result = await collectAllPages<ListedTool>((cursor) =>\n\t\tconnection.client.listTools(cursor === undefined ? {} : { cursor }, { timeout: config.requestTimeoutMs }),\n\t);\n\treturn result.items.map((tool) => ({\n\t\tannotations: tool.annotations,\n\t\tagentDir: options.agentDir,\n\t\tartifacts: options.artifacts,\n\t\tconnection,\n\t\tdescription: tool.description,\n\t\tensureFresh: options.ensureFresh,\n\t\toutputGuard: options.outputGuard,\n\t\trequestTimeoutMs: config.requestTimeoutMs,\n\t\tschema: tool.inputSchema,\n\t\tserver,\n\t\ttool: tool.name,\n\t}));\n}\n\nexport function cachedToolsToCatalogEntries(\n\tserver: string,\n\tcatalog: McpCachedServerCatalog,\n\tconnection: ServerConnection,\n\trequestTimeoutMs: number,\n\tensureConnected: () => Promise<void>,\n\toptions: McpToolCatalogOptions = {},\n): McpToolCatalogEntry[] {\n\treturn catalog.tools.map((tool) => ({\n\t\tannotations: tool.annotations,\n\t\tagentDir: options.agentDir,\n\t\tartifacts: options.artifacts,\n\t\tconnection,\n\t\tdescription: tool.description,\n\t\tensureConnected,\n\t\tensureFresh: options.ensureFresh,\n\t\toutputGuard: options.outputGuard,\n\t\trequestTimeoutMs,\n\t\tschema: tool.inputSchema,\n\t\tserver,\n\t\ttool: tool.name,\n\t}));\n}\n"]}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/catalog.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAuBzD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,MAAc,EACd,UAA4B,EAC5B,MAAuB,EACvB,OAAO,GAA0B,EAAE;IAEnC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAa,CAAC,MAAM,EAAE,EAAE,CAC3D,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CACzG,CAAC;IACF,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU;QACV,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,MAAM,EAAE,IAAI,CAAC,WAAW;QACxB,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,IAAI;KACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CAC1C,MAAc,EACd,OAA+B,EAC/B,UAA4B,EAC5B,gBAAwB,EACxB,eAAoC,EACpC,OAAO,GAA0B,EAAE;IAEnC,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU;QACV,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,eAAe;QACf,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,gBAAgB;QAChB,MAAM,EAAE,IAAI,CAAC,WAAW;QACxB,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,IAAI;KACf,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport type { McpCachedServerCatalog } from \"./catalog-cache.ts\";\nimport type { McpServerConfig, McpSettings } from \"./config-schema.ts\";\nimport type { ServerConnection } from \"./connection.ts\";\nimport { collectAllPages } from \"./expose/pagination.ts\";\nimport type { McpOutputArtifacts } from \"./guard/output-guard.ts\";\nimport type { McpEnsureFreshAuth } from \"./health.ts\";\n\ntype ListedTool = Awaited<ReturnType<Client[\"listTools\"]>>[\"tools\"][number];\n\nexport interface McpToolCatalogEntry {\n\tserver: string;\n\ttool: string;\n\tschema: ListedTool[\"inputSchema\"];\n\tdescription?: string;\n\tannotations?: ListedTool[\"annotations\"];\n\trequestTimeoutMs: number;\n\tconnection: ServerConnection;\n\tensureConnected?: () => Promise<void>;\n\tensureFresh?: McpEnsureFreshAuth;\n\tagentDir?: string;\n\tartifacts?: McpOutputArtifacts;\n\toutputGuard?: McpSettings[\"outputGuard\"];\n}\n\ntype McpToolCatalogOptions = Pick<McpToolCatalogEntry, \"agentDir\" | \"artifacts\" | \"ensureFresh\" | \"outputGuard\">;\n\nexport async function collectToolCatalog(\n\tserver: string,\n\tconnection: ServerConnection,\n\tconfig: McpServerConfig,\n\toptions: McpToolCatalogOptions = {},\n): Promise<McpToolCatalogEntry[]> {\n\tconst result = await collectAllPages<ListedTool>((cursor) =>\n\t\tconnection.client.listTools(cursor === undefined ? {} : { cursor }, { timeout: config.requestTimeoutMs }),\n\t);\n\treturn result.items.map((tool) => ({\n\t\tannotations: tool.annotations,\n\t\tagentDir: options.agentDir,\n\t\tartifacts: options.artifacts,\n\t\tconnection,\n\t\tdescription: tool.description,\n\t\tensureFresh: options.ensureFresh,\n\t\toutputGuard: options.outputGuard,\n\t\trequestTimeoutMs: config.requestTimeoutMs,\n\t\tschema: tool.inputSchema,\n\t\tserver,\n\t\ttool: tool.name,\n\t}));\n}\n\nexport function cachedToolsToCatalogEntries(\n\tserver: string,\n\tcatalog: McpCachedServerCatalog,\n\tconnection: ServerConnection,\n\trequestTimeoutMs: number,\n\tensureConnected: () => Promise<void>,\n\toptions: McpToolCatalogOptions = {},\n): McpToolCatalogEntry[] {\n\treturn catalog.tools.map((tool) => ({\n\t\tannotations: tool.annotations,\n\t\tagentDir: options.agentDir,\n\t\tartifacts: options.artifacts,\n\t\tconnection,\n\t\tdescription: tool.description,\n\t\tensureConnected,\n\t\tensureFresh: options.ensureFresh,\n\t\toutputGuard: options.outputGuard,\n\t\trequestTimeoutMs,\n\t\tschema: tool.inputSchema,\n\t\tserver,\n\t\ttool: tool.name,\n\t}));\n}\n"]}
@@ -173,35 +173,34 @@ export declare const validateConfig: import("typebox/compile").Validator<{}, Typ
173
173
  toolPrefix?: string | undefined;
174
174
  searchThreshold?: number | undefined;
175
175
  outputGuard?: {
176
- maxTokens?: number | undefined;
177
176
  maxBytes?: number | undefined;
178
177
  maxLines?: number | undefined;
178
+ maxTokens?: number | undefined;
179
179
  } | undefined;
180
180
  importConfigs?: "claude"[] | undefined;
181
181
  oauthCallbackUrl?: string | undefined;
182
182
  stubSwap?: boolean | undefined;
183
- nativeToolSearch?: boolean | "auto" | undefined;
183
+ nativeToolSearch?: "auto" | boolean | undefined;
184
184
  } | undefined;
185
185
  mcpServers?: Record<string, {
186
- command?: string | undefined;
187
- headers?: Record<string, string> | undefined;
188
- auth?: false | "oauth" | "bearer" | undefined;
186
+ type?: "http" | "stdio" | undefined;
189
187
  url?: string | undefined;
190
- type?: "stdio" | "http" | undefined;
191
- enabled?: boolean | undefined;
192
- env?: Record<string, string> | undefined;
188
+ command?: string | undefined;
193
189
  args?: string[] | undefined;
190
+ env?: Record<string, string> | undefined;
191
+ cwd?: string | undefined;
192
+ headers?: Record<string, string> | undefined;
193
+ auth?: "bearer" | "oauth" | false | undefined;
194
+ bearerTokenEnv?: string | undefined;
194
195
  oauth?: {
195
196
  clientId?: string | undefined;
196
197
  callbackPort?: number | undefined;
197
198
  scopes?: string[] | undefined;
198
199
  clientMetadataUrl?: string | undefined;
199
- flow?: "code" | "client_credentials" | undefined;
200
+ flow?: "client_credentials" | "code" | undefined;
200
201
  } | undefined;
201
- cwd?: string | undefined;
202
- exposure?: "search" | "auto" | "direct" | "proxy" | undefined;
203
- bearerTokenEnv?: string | undefined;
204
- lifecycle?: "lazy" | "eager" | "keep-alive" | undefined;
202
+ enabled?: boolean | undefined;
203
+ lifecycle?: "eager" | "keep-alive" | "lazy" | undefined;
205
204
  idleTimeoutMin?: number | undefined;
206
205
  requestTimeoutMs?: number | undefined;
207
206
  connectTimeoutMs?: number | undefined;
@@ -209,42 +208,42 @@ export declare const validateConfig: import("typebox/compile").Validator<{}, Typ
209
208
  includeTools?: string[] | undefined;
210
209
  excludeTools?: string[] | undefined;
211
210
  directTools?: boolean | string[] | undefined;
212
- logLevel?: "error" | "warning" | "info" | "debug" | "alert" | "notice" | "critical" | "emergency" | undefined;
211
+ exposure?: "auto" | "direct" | "proxy" | "search" | undefined;
212
+ logLevel?: "alert" | "critical" | "debug" | "emergency" | "error" | "info" | "notice" | "warning" | undefined;
213
213
  }> | undefined;
214
214
  }, {
215
215
  settings?: {
216
216
  toolPrefix?: string | undefined;
217
217
  searchThreshold?: number | undefined;
218
218
  outputGuard?: {
219
- maxTokens?: number | undefined;
220
219
  maxBytes?: number | undefined;
221
220
  maxLines?: number | undefined;
221
+ maxTokens?: number | undefined;
222
222
  } | undefined;
223
223
  importConfigs?: "claude"[] | undefined;
224
224
  oauthCallbackUrl?: string | undefined;
225
225
  stubSwap?: boolean | undefined;
226
- nativeToolSearch?: boolean | "auto" | undefined;
226
+ nativeToolSearch?: "auto" | boolean | undefined;
227
227
  } | undefined;
228
228
  mcpServers?: Record<string, {
229
- command?: string | undefined;
230
- headers?: Record<string, string> | undefined;
231
- auth?: false | "oauth" | "bearer" | undefined;
229
+ type?: "http" | "stdio" | undefined;
232
230
  url?: string | undefined;
233
- type?: "stdio" | "http" | undefined;
234
- enabled?: boolean | undefined;
235
- env?: Record<string, string> | undefined;
231
+ command?: string | undefined;
236
232
  args?: string[] | undefined;
233
+ env?: Record<string, string> | undefined;
234
+ cwd?: string | undefined;
235
+ headers?: Record<string, string> | undefined;
236
+ auth?: "bearer" | "oauth" | false | undefined;
237
+ bearerTokenEnv?: string | undefined;
237
238
  oauth?: {
238
239
  clientId?: string | undefined;
239
240
  callbackPort?: number | undefined;
240
241
  scopes?: string[] | undefined;
241
242
  clientMetadataUrl?: string | undefined;
242
- flow?: "code" | "client_credentials" | undefined;
243
+ flow?: "client_credentials" | "code" | undefined;
243
244
  } | undefined;
244
- cwd?: string | undefined;
245
- exposure?: "search" | "auto" | "direct" | "proxy" | undefined;
246
- bearerTokenEnv?: string | undefined;
247
- lifecycle?: "lazy" | "eager" | "keep-alive" | undefined;
245
+ enabled?: boolean | undefined;
246
+ lifecycle?: "eager" | "keep-alive" | "lazy" | undefined;
248
247
  idleTimeoutMin?: number | undefined;
249
248
  requestTimeoutMs?: number | undefined;
250
249
  connectTimeoutMs?: number | undefined;
@@ -252,7 +251,8 @@ export declare const validateConfig: import("typebox/compile").Validator<{}, Typ
252
251
  includeTools?: string[] | undefined;
253
252
  excludeTools?: string[] | undefined;
254
253
  directTools?: boolean | string[] | undefined;
255
- logLevel?: "error" | "warning" | "info" | "debug" | "alert" | "notice" | "critical" | "emergency" | undefined;
254
+ exposure?: "auto" | "direct" | "proxy" | "search" | undefined;
255
+ logLevel?: "alert" | "critical" | "debug" | "emergency" | "error" | "info" | "notice" | "warning" | undefined;
256
256
  }> | undefined;
257
257
  }>;
258
258
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAGN,KAAK,oBAAoB,EAIzB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EAEtB,MAAM,oBAAoB,CAAC;AAG5B,qBAAa,wBAAyB,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI3B;AASD,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,iBAAiB,CAqD9E;AAED,wBAAgB,wBAAwB,CACvC,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,KAAK,IAAI,GACtD,IAAI,CAMN;AA6GD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACxC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,EACjD,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,GACrB,iBAAiB,CAYnB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACvC,MAAM,EAAE,iBAAiB,EACzB,YAAY,EAAE,SAAS,8BAA8B,EAAE,GACrD,IAAI,CAqBN;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,EACjD,UAAU,EAAE,MAAM,GAChB,iBAAiB,CAWnB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAGN,KAAK,oBAAoB,EAIzB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EAEtB,MAAM,oBAAoB,CAAC;AAG5B,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,YAAY,OAAO,EAAE,MAAM,EAG1B;CACD;AASD,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,iBAAiB,CAqD9E;AAED,wBAAgB,wBAAwB,CACvC,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,KAAK,IAAI,GACtD,IAAI,CAMN;AA6GD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACxC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,EACjD,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,GACrB,iBAAiB,CAYnB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACvC,MAAM,EAAE,iBAAiB,EACzB,YAAY,EAAE,SAAS,8BAA8B,EAAE,GACrD,IAAI,CAqBN;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,EACjD,UAAU,EAAE,MAAM,GAChB,iBAAiB,CAWnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/connection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGxE,OAAO,KAAK,EACX,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACrB,iCAAiC,EACjC,iCAAiC,EACjC,MAAM,uBAAuB,CAAC;AAe/B,YAAY,EACX,uBAAuB,EACvB,qBAAqB,EACrB,iCAAiC,EACjC,iCAAiC,GACjC,MAAM,uBAAuB,CAAC;AAE/B,qBAAa,gBAAgB;;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAgBhB,OAAO,EAAE,uBAAuB;IAU5C,IAAI,KAAK,IAAI,qBAAqB,CAEjC;IACD,IAAI,SAAS,IAAI,KAAK,GAAG,SAAS,CAEjC;IACD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,0BAA0B,IAAI,IAAI;IAelC,IAAI,MAAM,IAAI,MAAM,CAQnB;IAED,UAAU,IAAI,MAAM,GAAG,IAAI;IAG3B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBpB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAW9B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQlB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAGhC,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAGlC,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAGlC,2BAA2B,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAIhD,gBAAgB,IAAI,IAAI;IAQxB,aAAa,CAAC,QAAQ,EAAE,wBAAwB,CAAC,iCAAiC,CAAC,GAAG,MAAM,IAAI;IAKhG,cAAc,CAAC,QAAQ,EAAE,wBAAwB,CAAC,iCAAiC,CAAC,GAAG,MAAM,IAAI;CAiJjG"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/connection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGxE,OAAO,KAAK,EACX,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACrB,iCAAiC,EACjC,iCAAiC,EACjC,MAAM,uBAAuB,CAAC;AAe/B,YAAY,EACX,uBAAuB,EACvB,qBAAqB,EACrB,iCAAiC,EACjC,iCAAiC,GACjC,MAAM,uBAAuB,CAAC;AAE/B,qBAAa,gBAAgB;;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAgB5B,YAAY,OAAO,EAAE,uBAAuB,EAQ3C;IAED,IAAI,KAAK,IAAI,qBAAqB,CAEjC;IACD,IAAI,SAAS,IAAI,KAAK,GAAG,SAAS,CAEjC;IACD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,0BAA0B,IAAI,IAAI,CAajC;IAED,IAAI,MAAM,IAAI,MAAM,CAQnB;IAED,UAAU,IAAI,MAAM,GAAG,IAAI,CAE1B;IACD,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAgBzB;IAEK,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAS7B;IAED,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAM9B;IAED,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAMvB;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7B;IAED,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAE/B;IACD,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAEjC;IACD,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAEjC;IACD,2BAA2B,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAE/C;IAED,gBAAgB,IAAI,IAAI,CAMvB;IAED,aAAa,CAAC,QAAQ,EAAE,wBAAwB,CAAC,iCAAiC,CAAC,GAAG,MAAM,IAAI,CAG/F;IAED,cAAc,CAAC,QAAQ,EAAE,wBAAwB,CAAC,iCAAiC,CAAC,GAAG,MAAM,IAAI,CAGhG;CA8ID"}
@@ -1 +1 @@
1
- {"version":3,"file":"elicitation.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/elicitation.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAExE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAIzD,gFAAgF;AAChF,eAAO,MAAM,iCAAiC;;CAA+B,CAAC;AAE9E,eAAO,MAAM,0BAA0B,QAAgB,CAAC;AAExD,KAAK,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC;AAE9E,MAAM,MAAM,wBAAwB,GAAG,MAAM,aAAa,GAAG,SAAS,CAAC;AACvE,MAAM,WAAW,qBAAqB;IACrC,mBAAmB,IAAI,aAAa,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IAEpD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED,UAAU,cAAc;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;CACjB;AAID,oFAAoF;AACpF,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,SAAS,GAAG,IAAI,CAEhG;AAED,+DAA+D;AAC/D,wBAAgB,uBAAuB,CACtC,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,qBAAqB,GAAG,wBAAwB,GAAG,SAA4B,EACtF,SAAS,GAAE,MAAmC,GAC5C,IAAI,CASN;AAED,sEAAsE;AACtE,wBAAsB,kBAAkB,CACvC,EAAE,EAAE,aAAa,EACjB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EACrF,SAAS,GAAE,MAAmC,GAC5C,OAAO,CAAC,mBAAmB,CAAC,CAY9B"}
1
+ {"version":3,"file":"elicitation.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/elicitation.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAExE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAIzD,gFAAgF;AAChF,eAAO,MAAM,iCAAiC;aAAK,WAAW;CAAe,CAAC;AAE9E,eAAO,MAAM,0BAA0B,QAAgB,CAAC;AAExD,KAAK,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC;AAE9E,MAAM,MAAM,wBAAwB,GAAG,MAAM,aAAa,GAAG,SAAS,CAAC;AACvE,MAAM,WAAW,qBAAqB;IACrC,mBAAmB,IAAI,aAAa,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IAEpD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED,UAAU,cAAc;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;CACjB;AAID,oFAAoF;AACpF,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,SAAS,GAAG,IAAI,CAEhG;AAED,+DAA+D;AAC/D,wBAAgB,uBAAuB,CACtC,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,qBAAqB,GAAG,wBAAwB,GAAG,SAA4B,EACtF,SAAS,GAAE,MAAmC,GAC5C,IAAI,CASN;AAED,sEAAsE;AACtE,wBAAsB,kBAAkB,CACvC,EAAE,EAAE,aAAa,EACjB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EACrF,SAAS,GAAE,MAAmC,GAC5C,OAAO,CAAC,mBAAmB,CAAC,CAY9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"elicitation.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/elicitation.ts"],"names":[],"mappings":"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","sourcesContent":["// MCP elicitation, form mode only (todo 41).\n//\n// The client declares the capability as an EMPTY object — Spring-AI servers\n// reject richer shapes (FieldCoding lesson from the comparison corpus) — and\n// answers elicitation/create requests mid tool-call by walking the requested\n// flat-primitive schema through sequential ctx.ui primitives (input/select/\n// confirm; NEVER ctx.ui.custom, which is undefined in RPC mode). Without a UI\n// (print mode) the request is declined immediately — spec-correct, no hang.\n// The whole form is bounded by a timeout that resolves to cancel so a wedged\n// dialog can never wedge the tool-call pipeline. URL mode is deliberately not\n// implemented in v1.\n\nimport type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { ElicitRequestSchema } from \"@modelcontextprotocol/sdk/types.js\";\nimport type { ExtensionUIContext } from \"../../types.ts\";\nimport { createMcpLogger } from \"./log.ts\";\nimport { safeTimer } from \"./wrap.ts\";\n\n/** Declared empty on purpose: maximum server compatibility (form mode only). */\nexport const MCP_CLIENT_ELICITATION_CAPABILITY = { elicitation: {} } as const;\n\nexport const MCP_ELICITATION_TIMEOUT_MS = 5 * 60 * 1000;\n\ntype ElicitationUi = Pick<ExtensionUIContext, \"input\" | \"select\" | \"confirm\">;\n\nexport type McpElicitationUiProvider = () => ElicitationUi | undefined;\nexport interface McpElicitationUiOwner {\n\tgetMcpElicitationUi(): ElicitationUi | undefined;\n}\n\nexport interface ElicitationResponse {\n\taction: \"accept\" | \"decline\" | \"cancel\";\n\tcontent?: Record<string, string | number | boolean>;\n\t// SDK request handlers must return an index-signature-compatible result.\n\t[key: string]: unknown;\n}\n\ninterface ElicitProperty {\n\ttype?: string;\n\ttitle?: string;\n\tdescription?: string;\n\tenum?: unknown[];\n}\n\nlet legacyUiProvider: McpElicitationUiProvider | undefined;\n\n/** Legacy classic-session seam. Session-owned services pass themselves directly. */\nexport function setMcpElicitationUiProvider(provider: McpElicitationUiProvider | undefined): void {\n\tlegacyUiProvider = provider;\n}\n\n/** Wire the elicitation/create handler onto a fresh client. */\nexport function configureMcpElicitation(\n\tclient: Client,\n\towner: McpElicitationUiOwner | McpElicitationUiProvider | undefined = legacyUiProvider,\n\ttimeoutMs: number = MCP_ELICITATION_TIMEOUT_MS,\n): void {\n\tclient.setRequestHandler(ElicitRequestSchema, async (request) => {\n\t\tconst params = request.params;\n\t\t// URL mode is deliberately unsupported in v1 (form mode only).\n\t\tif (!(\"requestedSchema\" in params)) return { action: \"decline\" };\n\t\tconst ui = typeof owner === \"function\" ? owner() : owner?.getMcpElicitationUi();\n\t\tif (ui === undefined) return { action: \"decline\" };\n\t\treturn await runElicitationForm(ui, params.message, params.requestedSchema, timeoutMs);\n\t});\n}\n\n/** Exported for tests: drive the form directly with a scripted UI. */\nexport async function runElicitationForm(\n\tui: ElicitationUi,\n\tmessage: string,\n\trequestedSchema: { properties?: Record<string, ElicitProperty>; required?: string[] },\n\ttimeoutMs: number = MCP_ELICITATION_TIMEOUT_MS,\n): Promise<ElicitationResponse> {\n\tlet timer: NodeJS.Timeout | undefined;\n\tconst timeout = new Promise<ElicitationResponse>((resolve) => {\n\t\ttimer = safeTimer(\"mcp.elicitation.timeout\", timeoutMs, () => resolve({ action: \"cancel\" }), {\n\t\t\tlogger: createMcpLogger(\"elicitation\"),\n\t\t});\n\t});\n\ttry {\n\t\treturn await Promise.race([collectForm(ui, message, requestedSchema), timeout]);\n\t} finally {\n\t\tif (timer !== undefined) clearTimeout(timer);\n\t}\n}\n\nasync function collectForm(\n\tui: ElicitationUi,\n\tmessage: string,\n\trequestedSchema: { properties?: Record<string, ElicitProperty>; required?: string[] },\n): Promise<ElicitationResponse> {\n\tconst content: Record<string, string | number | boolean> = {};\n\tconst required = new Set(requestedSchema.required ?? []);\n\tfor (const [name, property] of Object.entries(requestedSchema.properties ?? {})) {\n\t\tconst title = `${message} — ${property.title ?? name}`;\n\t\tif (property.type === \"boolean\") {\n\t\t\tcontent[name] = await ui.confirm(title, property.description ?? name);\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(property.enum) && property.enum.length > 0) {\n\t\t\tconst picked = await ui.select(title, property.enum.map(String));\n\t\t\tif (picked === undefined) return { action: \"decline\" };\n\t\t\tcontent[name] = picked;\n\t\t\tcontinue;\n\t\t}\n\t\tconst answer = await ui.input(title, property.description);\n\t\tif (answer === undefined || answer.length === 0) {\n\t\t\tif (required.has(name)) return { action: \"decline\" };\n\t\t\tcontinue;\n\t\t}\n\t\tif (property.type === \"number\" || property.type === \"integer\") {\n\t\t\tconst parsed = Number(answer);\n\t\t\tif (!Number.isFinite(parsed)) return { action: \"decline\" };\n\t\t\tcontent[name] = parsed;\n\t\t\tcontinue;\n\t\t}\n\t\tcontent[name] = answer;\n\t}\n\treturn { action: \"accept\", content };\n}\n"]}
1
+ {"version":3,"file":"elicitation.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/elicitation.ts"],"names":[],"mappings":"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","sourcesContent":["// MCP elicitation, form mode only (todo 41).\n//\n// The client declares the capability as an EMPTY object — Spring-AI servers\n// reject richer shapes (FieldCoding lesson from the comparison corpus) — and\n// answers elicitation/create requests mid tool-call by walking the requested\n// flat-primitive schema through sequential ctx.ui primitives (input/select/\n// confirm; NEVER ctx.ui.custom, which is undefined in RPC mode). Without a UI\n// (print mode) the request is declined immediately — spec-correct, no hang.\n// The whole form is bounded by a timeout that resolves to cancel so a wedged\n// dialog can never wedge the tool-call pipeline. URL mode is deliberately not\n// implemented in v1.\n\nimport type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { ElicitRequestSchema } from \"@modelcontextprotocol/sdk/types.js\";\nimport type { ExtensionUIContext } from \"../../types.ts\";\nimport { createMcpLogger } from \"./log.ts\";\nimport { safeTimer } from \"./wrap.ts\";\n\n/** Declared empty on purpose: maximum server compatibility (form mode only). */\nexport const MCP_CLIENT_ELICITATION_CAPABILITY = { elicitation: {} } as const;\n\nexport const MCP_ELICITATION_TIMEOUT_MS = 5 * 60 * 1000;\n\ntype ElicitationUi = Pick<ExtensionUIContext, \"input\" | \"select\" | \"confirm\">;\n\nexport type McpElicitationUiProvider = () => ElicitationUi | undefined;\nexport interface McpElicitationUiOwner {\n\tgetMcpElicitationUi(): ElicitationUi | undefined;\n}\n\nexport interface ElicitationResponse {\n\taction: \"accept\" | \"decline\" | \"cancel\";\n\tcontent?: Record<string, string | number | boolean>;\n\t// SDK request handlers must return an index-signature-compatible result.\n\t[key: string]: unknown;\n}\n\ninterface ElicitProperty {\n\ttype?: string;\n\ttitle?: string;\n\tdescription?: string;\n\tenum?: unknown[];\n}\n\nlet legacyUiProvider: McpElicitationUiProvider | undefined;\n\n/** Legacy classic-session seam. Session-owned services pass themselves directly. */\nexport function setMcpElicitationUiProvider(provider: McpElicitationUiProvider | undefined): void {\n\tlegacyUiProvider = provider;\n}\n\n/** Wire the elicitation/create handler onto a fresh client. */\nexport function configureMcpElicitation(\n\tclient: Client,\n\towner: McpElicitationUiOwner | McpElicitationUiProvider | undefined = legacyUiProvider,\n\ttimeoutMs: number = MCP_ELICITATION_TIMEOUT_MS,\n): void {\n\tclient.setRequestHandler(ElicitRequestSchema, async (request) => {\n\t\tconst params = request.params;\n\t\t// URL mode is deliberately unsupported in v1 (form mode only).\n\t\tif (!(\"requestedSchema\" in params)) return { action: \"decline\" };\n\t\tconst ui = typeof owner === \"function\" ? owner() : owner?.getMcpElicitationUi();\n\t\tif (ui === undefined) return { action: \"decline\" };\n\t\treturn await runElicitationForm(ui, params.message, params.requestedSchema, timeoutMs);\n\t});\n}\n\n/** Exported for tests: drive the form directly with a scripted UI. */\nexport async function runElicitationForm(\n\tui: ElicitationUi,\n\tmessage: string,\n\trequestedSchema: { properties?: Record<string, ElicitProperty>; required?: string[] },\n\ttimeoutMs: number = MCP_ELICITATION_TIMEOUT_MS,\n): Promise<ElicitationResponse> {\n\tlet timer: NodeJS.Timeout | undefined;\n\tconst timeout = new Promise<ElicitationResponse>((resolve) => {\n\t\ttimer = safeTimer(\"mcp.elicitation.timeout\", timeoutMs, () => resolve({ action: \"cancel\" }), {\n\t\t\tlogger: createMcpLogger(\"elicitation\"),\n\t\t});\n\t});\n\ttry {\n\t\treturn await Promise.race([collectForm(ui, message, requestedSchema), timeout]);\n\t} finally {\n\t\tif (timer !== undefined) clearTimeout(timer);\n\t}\n}\n\nasync function collectForm(\n\tui: ElicitationUi,\n\tmessage: string,\n\trequestedSchema: { properties?: Record<string, ElicitProperty>; required?: string[] },\n): Promise<ElicitationResponse> {\n\tconst content: Record<string, string | number | boolean> = {};\n\tconst required = new Set(requestedSchema.required ?? []);\n\tfor (const [name, property] of Object.entries(requestedSchema.properties ?? {})) {\n\t\tconst title = `${message} — ${property.title ?? name}`;\n\t\tif (property.type === \"boolean\") {\n\t\t\tcontent[name] = await ui.confirm(title, property.description ?? name);\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(property.enum) && property.enum.length > 0) {\n\t\t\tconst picked = await ui.select(title, property.enum.map(String));\n\t\t\tif (picked === undefined) return { action: \"decline\" };\n\t\t\tcontent[name] = picked;\n\t\t\tcontinue;\n\t\t}\n\t\tconst answer = await ui.input(title, property.description);\n\t\tif (answer === undefined || answer.length === 0) {\n\t\t\tif (required.has(name)) return { action: \"decline\" };\n\t\t\tcontinue;\n\t\t}\n\t\tif (property.type === \"number\" || property.type === \"integer\") {\n\t\t\tconst parsed = Number(answer);\n\t\t\tif (!Number.isFinite(parsed)) return { action: \"decline\" };\n\t\t\tcontent[name] = parsed;\n\t\t\tcontinue;\n\t\t}\n\t\tcontent[name] = answer;\n\t}\n\treturn { action: \"accept\", content };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAEzG,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,8BAAsB,QAAS,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,SAAS,aAAa,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAgBtG;AAED,qBAAa,YAAa,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAG1D;AAED,qBAAa,aAAc,SAAQ,QAAQ;gBAC9B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAG1D;AAED,qBAAa,aAAc,SAAQ,QAAQ;gBAC9B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAG1D;AAED,qBAAa,SAAU,SAAQ,QAAQ;gBAC1B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAG1D;AAED,qBAAa,YAAa,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAG1D;AAED,qBAAa,mBAAoB,SAAQ,QAAQ;gBACpC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAG1D;AAMD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAU3D;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAWhE"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAEzG,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,8BAAsB,QAAS,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,SAAS,aAAa,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,EAerG;CACD;AAED,qBAAa,YAAa,SAAQ,QAAQ;IACzC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,EAEzD;CACD;AAED,qBAAa,aAAc,SAAQ,QAAQ;IAC1C,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,EAEzD;CACD;AAED,qBAAa,aAAc,SAAQ,QAAQ;IAC1C,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,EAEzD;CACD;AAED,qBAAa,SAAU,SAAQ,QAAQ;IACtC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,EAEzD;CACD;AAED,qBAAa,YAAa,SAAQ,QAAQ;IACzC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,EAEzD;CACD;AAED,qBAAa,mBAAoB,SAAQ,QAAQ;IAChD,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,EAEzD;CACD;AAMD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAU3D;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAWhE"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/errors.ts"],"names":[],"mappings":"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","sourcesContent":["export type McpErrorKind = \"connect\" | \"protocol\" | \"tool_exec\" | \"auth\" | \"timeout\" | \"session_expired\";\n\nexport interface McpErrorOptions {\n\treadonly cause?: unknown;\n\treadonly phase?: string;\n\treadonly retriable?: boolean;\n\treadonly serverName?: string;\n}\n\nexport abstract class McpError extends Error {\n\treadonly kind: McpErrorKind;\n\treadonly phase?: string;\n\treadonly retriable?: boolean;\n\treadonly serverName?: string;\n\n\tprotected constructor(kind: McpErrorKind, name: string, message: string, options: McpErrorOptions = {}) {\n\t\tsuper(message);\n\t\tthis.name = name;\n\t\tthis.kind = kind;\n\t\tthis.phase = options.phase;\n\t\tthis.retriable = options.retriable;\n\t\tthis.serverName = options.serverName;\n\t\tif (options.cause !== undefined) {\n\t\t\tObject.defineProperty(this, \"cause\", {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: options.cause,\n\t\t\t\twritable: false,\n\t\t\t});\n\t\t}\n\t\tObject.setPrototypeOf(this, new.target.prototype);\n\t}\n}\n\nexport class ConnectError extends McpError {\n\tconstructor(message: string, options: McpErrorOptions = {}) {\n\t\tsuper(\"connect\", \"ConnectError\", message, options);\n\t}\n}\n\nexport class ProtocolError extends McpError {\n\tconstructor(message: string, options: McpErrorOptions = {}) {\n\t\tsuper(\"protocol\", \"ProtocolError\", message, options);\n\t}\n}\n\nexport class ToolExecError extends McpError {\n\tconstructor(message: string, options: McpErrorOptions = {}) {\n\t\tsuper(\"tool_exec\", \"ToolExecError\", message, options);\n\t}\n}\n\nexport class AuthError extends McpError {\n\tconstructor(message: string, options: McpErrorOptions = {}) {\n\t\tsuper(\"auth\", \"AuthError\", message, options);\n\t}\n}\n\nexport class TimeoutError extends McpError {\n\tconstructor(message: string, options: McpErrorOptions = {}) {\n\t\tsuper(\"timeout\", \"TimeoutError\", message, options);\n\t}\n}\n\nexport class SessionExpiredError extends McpError {\n\tconstructor(message: string, options: McpErrorOptions = {}) {\n\t\tsuper(\"session_expired\", \"SessionExpiredError\", message, options);\n\t}\n}\n\nconst RETRIABLE_STATUS_CODES = new Set([404, 502, 503]);\nconst RETRIABLE_NUMERIC_CODES = new Set([-32001]);\nconst RETRIABLE_TEXT = [\"econnrefused\", \"connection refused\", \"transport closed\"];\n\nexport function isRetriableMcpError(error: unknown): boolean {\n\tif (error instanceof McpError && error.retriable === true) return true;\n\tif (isMcpSessionExpiredError(error)) return true;\n\n\tconst seen = new Set<unknown>();\n\tif (hasRetriableNumericSignal(error, seen)) return true;\n\n\tconst text = collectText(error, new Set()).join(\" \").toLowerCase();\n\tif (RETRIABLE_TEXT.some((needle) => text.includes(needle))) return true;\n\treturn /\\b(?:404|502|503)\\b/.test(text);\n}\n\nexport function isMcpSessionExpiredError(error: unknown): boolean {\n\tconst seen = new Set<unknown>();\n\tif (hasSessionExpiredNumericSignal(error, seen)) return true;\n\tconst text = collectText(error, new Set()).join(\" \").toLowerCase();\n\treturn (\n\t\t/\\b404\\b/.test(text) ||\n\t\t(text.includes(\"-32000\") && text.includes(\"session\")) ||\n\t\ttext.includes(\"session expired\") ||\n\t\ttext.includes(\"session not found\") ||\n\t\ttext.includes(\"mcp-session-id\")\n\t);\n}\n\nfunction hasRetriableNumericSignal(value: unknown, seen: Set<unknown>): boolean {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (seen.has(value)) return false;\n\tseen.add(value);\n\n\tconst code = numberFromUnknown(getProperty(value, \"code\"));\n\tif (code !== undefined && RETRIABLE_NUMERIC_CODES.has(code)) return true;\n\n\tconst status = numberFromUnknown(getProperty(value, \"status\"));\n\tif (status !== undefined && RETRIABLE_STATUS_CODES.has(status)) return true;\n\n\tconst statusCode = numberFromUnknown(getProperty(value, \"statusCode\"));\n\tif (statusCode !== undefined && RETRIABLE_STATUS_CODES.has(statusCode)) return true;\n\n\treturn (\n\t\thasRetriableNumericSignal(getProperty(value, \"response\"), seen) ||\n\t\thasRetriableNumericSignal(getProperty(value, \"cause\"), seen)\n\t);\n}\n\nfunction hasSessionExpiredNumericSignal(value: unknown, seen: Set<unknown>): boolean {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (seen.has(value)) return false;\n\tseen.add(value);\n\n\tconst code = numberFromUnknown(getProperty(value, \"code\"));\n\tif (code === -32001) return true;\n\tif (code === -32000) {\n\t\tconst message = getProperty(value, \"message\");\n\t\tif (typeof message === \"string\" && message.toLowerCase().includes(\"session\")) return true;\n\t}\n\n\tconst status = numberFromUnknown(getProperty(value, \"status\"));\n\tif (status === 404) return true;\n\n\tconst statusCode = numberFromUnknown(getProperty(value, \"statusCode\"));\n\tif (statusCode === 404) return true;\n\n\treturn (\n\t\thasSessionExpiredNumericSignal(getProperty(value, \"response\"), seen) ||\n\t\thasSessionExpiredNumericSignal(getProperty(value, \"cause\"), seen)\n\t);\n}\n\nfunction collectText(value: unknown, seen: Set<unknown>): string[] {\n\tif (typeof value === \"string\") return [value];\n\tif (typeof value === \"number\") return [String(value)];\n\tif (typeof value !== \"object\" || value === null) return [];\n\tif (seen.has(value)) return [];\n\tseen.add(value);\n\n\tconst parts: string[] = [];\n\tif (value instanceof Error) {\n\t\tparts.push(value.message, value.name);\n\t}\n\n\tfor (const key of [\"message\", \"code\", \"status\", \"statusCode\"] as const) {\n\t\tconst property = getProperty(value, key);\n\t\tif (typeof property === \"string\" || typeof property === \"number\") {\n\t\t\tparts.push(String(property));\n\t\t}\n\t}\n\n\tparts.push(...collectText(getProperty(value, \"response\"), seen));\n\tparts.push(...collectText(getProperty(value, \"cause\"), seen));\n\treturn parts;\n}\n\nfunction numberFromUnknown(value: unknown): number | undefined {\n\tif (typeof value === \"number\") return value;\n\tif (typeof value !== \"string\" || value.trim() === \"\") return undefined;\n\tconst parsed = Number(value);\n\treturn Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction getProperty(value: unknown, key: string): unknown {\n\tif (typeof value !== \"object\" || value === null) return undefined;\n\treturn (value as Record<string, unknown>)[key];\n}\n"]}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/errors.ts"],"names":[],"mappings":"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","sourcesContent":["export type McpErrorKind = \"connect\" | \"protocol\" | \"tool_exec\" | \"auth\" | \"timeout\" | \"session_expired\";\n\nexport interface McpErrorOptions {\n\treadonly cause?: unknown;\n\treadonly phase?: string;\n\treadonly retriable?: boolean;\n\treadonly serverName?: string;\n}\n\nexport abstract class McpError extends Error {\n\treadonly kind: McpErrorKind;\n\treadonly phase?: string;\n\treadonly retriable?: boolean;\n\treadonly serverName?: string;\n\n\tprotected constructor(kind: McpErrorKind, name: string, message: string, options: McpErrorOptions = {}) {\n\t\tsuper(message);\n\t\tthis.name = name;\n\t\tthis.kind = kind;\n\t\tthis.phase = options.phase;\n\t\tthis.retriable = options.retriable;\n\t\tthis.serverName = options.serverName;\n\t\tif (options.cause !== undefined) {\n\t\t\tObject.defineProperty(this, \"cause\", {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: options.cause,\n\t\t\t\twritable: false,\n\t\t\t});\n\t\t}\n\t\tObject.setPrototypeOf(this, new.target.prototype);\n\t}\n}\n\nexport class ConnectError extends McpError {\n\tconstructor(message: string, options: McpErrorOptions = {}) {\n\t\tsuper(\"connect\", \"ConnectError\", message, options);\n\t}\n}\n\nexport class ProtocolError extends McpError {\n\tconstructor(message: string, options: McpErrorOptions = {}) {\n\t\tsuper(\"protocol\", \"ProtocolError\", message, options);\n\t}\n}\n\nexport class ToolExecError extends McpError {\n\tconstructor(message: string, options: McpErrorOptions = {}) {\n\t\tsuper(\"tool_exec\", \"ToolExecError\", message, options);\n\t}\n}\n\nexport class AuthError extends McpError {\n\tconstructor(message: string, options: McpErrorOptions = {}) {\n\t\tsuper(\"auth\", \"AuthError\", message, options);\n\t}\n}\n\nexport class TimeoutError extends McpError {\n\tconstructor(message: string, options: McpErrorOptions = {}) {\n\t\tsuper(\"timeout\", \"TimeoutError\", message, options);\n\t}\n}\n\nexport class SessionExpiredError extends McpError {\n\tconstructor(message: string, options: McpErrorOptions = {}) {\n\t\tsuper(\"session_expired\", \"SessionExpiredError\", message, options);\n\t}\n}\n\nconst RETRIABLE_STATUS_CODES = new Set([404, 502, 503]);\nconst RETRIABLE_NUMERIC_CODES = new Set([-32001]);\nconst RETRIABLE_TEXT = [\"econnrefused\", \"connection refused\", \"transport closed\"];\n\nexport function isRetriableMcpError(error: unknown): boolean {\n\tif (error instanceof McpError && error.retriable === true) return true;\n\tif (isMcpSessionExpiredError(error)) return true;\n\n\tconst seen = new Set<unknown>();\n\tif (hasRetriableNumericSignal(error, seen)) return true;\n\n\tconst text = collectText(error, new Set()).join(\" \").toLowerCase();\n\tif (RETRIABLE_TEXT.some((needle) => text.includes(needle))) return true;\n\treturn /\\b(?:404|502|503)\\b/.test(text);\n}\n\nexport function isMcpSessionExpiredError(error: unknown): boolean {\n\tconst seen = new Set<unknown>();\n\tif (hasSessionExpiredNumericSignal(error, seen)) return true;\n\tconst text = collectText(error, new Set()).join(\" \").toLowerCase();\n\treturn (\n\t\t/\\b404\\b/.test(text) ||\n\t\t(text.includes(\"-32000\") && text.includes(\"session\")) ||\n\t\ttext.includes(\"session expired\") ||\n\t\ttext.includes(\"session not found\") ||\n\t\ttext.includes(\"mcp-session-id\")\n\t);\n}\n\nfunction hasRetriableNumericSignal(value: unknown, seen: Set<unknown>): boolean {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (seen.has(value)) return false;\n\tseen.add(value);\n\n\tconst code = numberFromUnknown(getProperty(value, \"code\"));\n\tif (code !== undefined && RETRIABLE_NUMERIC_CODES.has(code)) return true;\n\n\tconst status = numberFromUnknown(getProperty(value, \"status\"));\n\tif (status !== undefined && RETRIABLE_STATUS_CODES.has(status)) return true;\n\n\tconst statusCode = numberFromUnknown(getProperty(value, \"statusCode\"));\n\tif (statusCode !== undefined && RETRIABLE_STATUS_CODES.has(statusCode)) return true;\n\n\treturn (\n\t\thasRetriableNumericSignal(getProperty(value, \"response\"), seen) ||\n\t\thasRetriableNumericSignal(getProperty(value, \"cause\"), seen)\n\t);\n}\n\nfunction hasSessionExpiredNumericSignal(value: unknown, seen: Set<unknown>): boolean {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (seen.has(value)) return false;\n\tseen.add(value);\n\n\tconst code = numberFromUnknown(getProperty(value, \"code\"));\n\tif (code === -32001) return true;\n\tif (code === -32000) {\n\t\tconst message = getProperty(value, \"message\");\n\t\tif (typeof message === \"string\" && message.toLowerCase().includes(\"session\")) return true;\n\t}\n\n\tconst status = numberFromUnknown(getProperty(value, \"status\"));\n\tif (status === 404) return true;\n\n\tconst statusCode = numberFromUnknown(getProperty(value, \"statusCode\"));\n\tif (statusCode === 404) return true;\n\n\treturn (\n\t\thasSessionExpiredNumericSignal(getProperty(value, \"response\"), seen) ||\n\t\thasSessionExpiredNumericSignal(getProperty(value, \"cause\"), seen)\n\t);\n}\n\nfunction collectText(value: unknown, seen: Set<unknown>): string[] {\n\tif (typeof value === \"string\") return [value];\n\tif (typeof value === \"number\") return [String(value)];\n\tif (typeof value !== \"object\" || value === null) return [];\n\tif (seen.has(value)) return [];\n\tseen.add(value);\n\n\tconst parts: string[] = [];\n\tif (value instanceof Error) {\n\t\tparts.push(value.message, value.name);\n\t}\n\n\tfor (const key of [\"message\", \"code\", \"status\", \"statusCode\"] as const) {\n\t\tconst property = getProperty(value, key);\n\t\tif (typeof property === \"string\" || typeof property === \"number\") {\n\t\t\tparts.push(String(property));\n\t\t}\n\t}\n\n\tparts.push(...collectText(getProperty(value, \"response\"), seen));\n\tparts.push(...collectText(getProperty(value, \"cause\"), seen));\n\treturn parts;\n}\n\nfunction numberFromUnknown(value: unknown): number | undefined {\n\tif (typeof value === \"number\") return value;\n\tif (typeof value !== \"string\" || value.trim() === \"\") return undefined;\n\tconst parsed = Number(value);\n\treturn Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction getProperty(value: unknown, key: string): unknown {\n\tif (typeof value !== \"object\" || value === null) return undefined;\n\treturn (value as Record<string, unknown>)[key];\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/expose/register.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { ImageContent, TextContent } from \"@earendil-works/pi-ai\";\nimport { Text } from \"@earendil-works/pi-tui\";\nimport type { Progress } from \"@modelcontextprotocol/sdk/types.js\";\nimport type { TSchema } from \"typebox\";\nimport type { ExtensionAPI, ToolDefinition } from \"../../../types.ts\";\nimport { registerToolsPreservingActiveSet } from \"../active-set.ts\";\nimport type { McpToolCatalogEntry } from \"../catalog.ts\";\nimport { ToolExecError } from \"../errors.ts\";\nimport { applyMcpOutputGuard } from \"../guard/output-guard.ts\";\nimport { ensureMcpToolCallConnection, withMcpRetriableFailedSendRetry, withMcpSessionExpiryRetry } from \"../health.ts\";\nimport { runMcpConnectionLifecycleCall } from \"../idle.ts\";\nimport {\n\tbuildMcpToolNames,\n\tconvertJsonSchemaToTypeBox,\n\ttype McpContentBlock,\n\ttype McpMappedContentBlock,\n\ttype McpToolResultLike,\n\tmapMcpToolResult,\n} from \"./schema-compat.ts\";\n\nexport interface McpToolDetails {\n\tserver: string;\n\ttool: string;\n\tpreview?: string;\n\tprogress?: Progress;\n}\n\ntype McpAgentContent = TextContent | ImageContent;\nexport type McpToolDefinition = ToolDefinition<TSchema, McpToolDetails | undefined, unknown>;\ntype WarnFn = (message: string) => void;\n\nexport interface McpCatalogRegistrationOptions {\n\treadonly refreshActiveSetWhenEmpty?: boolean;\n}\n\nexport function registerMcpCatalogTools(\n\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n\tentries: readonly McpToolCatalogEntry[],\n\tactiveEntries: readonly McpToolCatalogEntry[],\n\twarn?: WarnFn,\n\toptions: McpCatalogRegistrationOptions = {},\n): void {\n\tif (entries.length === 0 && activeEntries.length === 0 && options.refreshActiveSetWhenEmpty !== true) return;\n\tconst tools = buildMcpToolDefinitions(entries, warn);\n\tconst currentActive = pi.getActiveTools().filter((name) => !name.startsWith(\"mcp_\"));\n\tconst mcpNames = buildActiveToolNames(entries, activeEntries, warn);\n\tregisterToolsPreservingActiveSet(pi, tools, [...currentActive, ...mcpNames]);\n}\n\nexport interface McpNamedCatalogEntry {\n\treadonly entry: McpToolCatalogEntry;\n\treadonly name: string;\n}\n\n/** Pair each catalog entry with its stable, collision-resolved mcp tool name.\n * Shared by the full-tool builder and the Tier-B search catalog so names never\n * drift between the two. */\nexport function mapMcpCatalogNames(entries: readonly McpToolCatalogEntry[], warn?: WarnFn): McpNamedCatalogEntry[] {\n\tconst sorted = [...entries].sort(compareCatalogEntries);\n\tconst names = buildMcpToolNames(\n\t\tsorted.map((entry) => ({ serverName: entry.server, toolName: entry.tool })),\n\t\twarn,\n\t);\n\treturn sorted.map((entry, index) => ({ entry, name: names[index] ?? \"\" }));\n}\n\nexport function buildMcpToolDefinitions(entries: readonly McpToolCatalogEntry[], warn?: WarnFn): McpToolDefinition[] {\n\treturn mapMcpCatalogNames(entries, warn).map(({ entry, name }) => createMcpToolDefinition(entry, name));\n}\n\nfunction createMcpToolDefinition(entry: McpToolCatalogEntry, name: string): McpToolDefinition {\n\tconst converted = convertJsonSchemaToTypeBox(entry.schema);\n\tconst label = `${entry.server}/${entry.tool}`;\n\treturn {\n\t\tname,\n\t\tlabel,\n\t\tdescription: entry.description ?? `MCP tool ${label}`,\n\t\tparameters: converted.schema,\n\t\texecutionMode: \"parallel\",\n\t\tasync execute(_toolCallId, params, signal, onUpdate): Promise<AgentToolResult<McpToolDetails | undefined>> {\n\t\t\tconst args: Record<string, unknown> = isRecord(params) ? params : {};\n\t\t\treturn await executeMcpCatalogEntry(entry, args, signal, onUpdate);\n\t\t},\n\t\trenderCall(args, theme) {\n\t\t\treturn new Text(theme.fg(\"toolTitle\", theme.bold(`${name} ${previewArgs(args)}`.trim())), 0, 0);\n\t\t},\n\t\trenderResult(result, options, theme) {\n\t\t\tconst title = options.isPartial\n\t\t\t\t? `${name}: running`\n\t\t\t\t: `${name}: ${result.details?.preview ?? \"(empty result)\"}`;\n\t\t\treturn new Text(theme.fg(\"toolOutput\", title), 0, 0);\n\t\t},\n\t};\n}\n\n/** Full guarded call path for one catalog entry (lifecycle + retry + output\n * guard). Shared by direct/search tool definitions and the Tier-C proxy. */\nexport async function executeMcpCatalogEntry(\n\tentry: McpToolCatalogEntry,\n\targs: Record<string, unknown>,\n\tsignal: AbortSignal | undefined,\n\tonUpdate: Parameters<McpToolDefinition[\"execute\"]>[3],\n): Promise<AgentToolResult<McpToolDetails | undefined>> {\n\tconst label = `${entry.server}/${entry.tool}`;\n\tconst result = await callMcpTool(entry, args, signal, onUpdate, label);\n\tconst mapped = mapMcpToolResult(normalizeCallToolResult(result));\n\tif (!mapped.ok) {\n\t\tthrow new ToolExecError(mapped.error.message, { phase: \"call\", serverName: entry.server });\n\t}\n\tconst guarded = await applyMcpOutputGuard(mapped.content, {\n\t\tagentDir: entry.agentDir,\n\t\tartifacts: entry.artifacts,\n\t\toutputGuard: entry.outputGuard,\n\t\tserver: entry.server,\n\t});\n\tconst content = toAgentContent(guarded);\n\treturn { content, details: { preview: previewContent(content), server: entry.server, tool: entry.tool } };\n}\n\nasync function callMcpTool(\n\tentry: McpToolCatalogEntry,\n\targs: Record<string, unknown>,\n\tsignal: AbortSignal | undefined,\n\tonUpdate: Parameters<McpToolDefinition[\"execute\"]>[3],\n\tlabel: string,\n): Promise<Awaited<ReturnType<McpToolCatalogEntry[\"connection\"][\"client\"][\"callTool\"]>>> {\n\ttry {\n\t\treturn await runMcpConnectionLifecycleCall(entry.connection, () =>\n\t\t\twithMcpSessionExpiryRetry(entry.connection, async () => {\n\t\t\t\tawait ensureMcpToolCallConnection(entry.connection, entry.ensureFresh);\n\t\t\t\tawait entry.ensureConnected?.();\n\t\t\t\treturn await withMcpRetriableFailedSendRetry(entry.connection, async () => {\n\t\t\t\t\treturn await entry.connection.client.callTool({ name: entry.tool, arguments: args }, undefined, {\n\t\t\t\t\t\tonprogress: (progress) => {\n\t\t\t\t\t\t\tonUpdate?.({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: formatProgress(label, progress) }],\n\t\t\t\t\t\t\t\tdetails: { progress, server: entry.server, tool: entry.tool },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\ttimeout: entry.requestTimeoutMs,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}),\n\t\t);\n\t} catch (error) {\n\t\tthrow new ToolExecError(`ToolExecError: ${errorLabel(error)}`, {\n\t\t\tcause: error,\n\t\t\tphase: \"call\",\n\t\t\tserverName: entry.server,\n\t\t});\n\t}\n}\n\nfunction normalizeCallToolResult(\n\tresult: Awaited<ReturnType<McpToolCatalogEntry[\"connection\"][\"client\"][\"callTool\"]>>,\n): McpToolResultLike {\n\tif (\"content\" in result || \"structuredContent\" in result || \"isError\" in result) {\n\t\tconst candidate = result as Record<string, unknown>;\n\t\tconst normalized: McpToolResultLike = {};\n\t\tif (isMcpContentBlockArray(candidate.content)) normalized.content = candidate.content;\n\t\tif (typeof candidate.isError === \"boolean\") normalized.isError = candidate.isError;\n\t\tif (\"structuredContent\" in candidate) normalized.structuredContent = candidate.structuredContent;\n\t\treturn normalized;\n\t}\n\treturn { structuredContent: result.toolResult };\n}\n\nfunction isMcpContentBlockArray(value: unknown): value is McpContentBlock[] {\n\treturn Array.isArray(value);\n}\n\nfunction toAgentContent(blocks: readonly McpMappedContentBlock[]): McpAgentContent[] {\n\treturn blocks.map((block) => {\n\t\tif (block.type === \"text\" || block.type === \"image\") return block;\n\t\treturn { type: \"text\", text: JSON.stringify(block) };\n\t});\n}\n\nfunction previewContent(content: readonly McpAgentContent[]): string {\n\treturn truncatePreview(\n\t\tcontent\n\t\t\t.map((block) => (block.type === \"text\" ? block.text : `[${block.mimeType} image]`))\n\t\t\t.join(\" \")\n\t\t\t.trim() || \"(empty result)\",\n\t);\n}\n\nfunction previewArgs(args: unknown): string {\n\tconst text = JSON.stringify(args);\n\treturn text === undefined ? \"\" : truncatePreview(text);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction errorLabel(error: unknown): string {\n\treturn error instanceof Error ? `${error.name}: ${error.message}` : String(error);\n}\n\nfunction formatProgress(label: string, progress: Progress): string {\n\tconst total = progress.total === undefined ? \"\" : `/${progress.total}`;\n\tconst message = progress.message === undefined ? \"\" : ` ${progress.message}`;\n\treturn `${label} progress ${progress.progress}${total}${message}`.trim();\n}\n\nfunction truncatePreview(value: string): string {\n\treturn value.length <= 120 ? value : `${value.slice(0, 117)}...`;\n}\n\nfunction compareCatalogEntries(left: McpToolCatalogEntry, right: McpToolCatalogEntry): number {\n\treturn left.server.localeCompare(right.server) || left.tool.localeCompare(right.tool);\n}\n\nfunction buildActiveToolNames(\n\tentries: readonly McpToolCatalogEntry[],\n\tactiveEntries: readonly McpToolCatalogEntry[],\n\twarn?: WarnFn,\n): string[] {\n\tconst activeKeys = new Set(activeEntries.map(catalogEntryKey));\n\tconst sorted = [...entries].sort(compareCatalogEntries);\n\tconst names = buildMcpToolNames(\n\t\tsorted.map((entry) => ({ serverName: entry.server, toolName: entry.tool })),\n\t\twarn,\n\t);\n\treturn sorted\n\t\t.map((entry, index) => (activeKeys.has(catalogEntryKey(entry)) ? (names[index] ?? \"\") : \"\"))\n\t\t.filter((name) => name.length > 0)\n\t\t.sort();\n}\n\nfunction catalogEntryKey(entry: McpToolCatalogEntry): string {\n\treturn `${entry.server}\\0${entry.tool}`;\n}\n"]}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/expose/register.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { ImageContent, TextContent } from \"@earendil-works/pi-ai\";\nimport { Text } from \"@earendil-works/pi-tui\";\nimport type { Progress } from \"@modelcontextprotocol/sdk/types.js\";\nimport type { TSchema } from \"typebox\";\nimport type { ExtensionAPI, ToolDefinition } from \"../../../types.ts\";\nimport { registerToolsPreservingActiveSet } from \"../active-set.ts\";\nimport type { McpToolCatalogEntry } from \"../catalog.ts\";\nimport { ToolExecError } from \"../errors.ts\";\nimport { applyMcpOutputGuard } from \"../guard/output-guard.ts\";\nimport { ensureMcpToolCallConnection, withMcpRetriableFailedSendRetry, withMcpSessionExpiryRetry } from \"../health.ts\";\nimport { runMcpConnectionLifecycleCall } from \"../idle.ts\";\nimport {\n\tbuildMcpToolNames,\n\tconvertJsonSchemaToTypeBox,\n\ttype McpContentBlock,\n\ttype McpMappedContentBlock,\n\ttype McpToolResultLike,\n\tmapMcpToolResult,\n} from \"./schema-compat.ts\";\n\nexport interface McpToolDetails {\n\tserver: string;\n\ttool: string;\n\tpreview?: string;\n\tprogress?: Progress;\n}\n\ntype McpAgentContent = TextContent | ImageContent;\nexport type McpToolDefinition = ToolDefinition<TSchema, McpToolDetails | undefined, unknown>;\ntype WarnFn = (message: string) => void;\n\nexport interface McpCatalogRegistrationOptions {\n\treadonly refreshActiveSetWhenEmpty?: boolean;\n}\n\nexport function registerMcpCatalogTools(\n\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n\tentries: readonly McpToolCatalogEntry[],\n\tactiveEntries: readonly McpToolCatalogEntry[],\n\twarn?: WarnFn,\n\toptions: McpCatalogRegistrationOptions = {},\n): void {\n\tif (entries.length === 0 && activeEntries.length === 0 && options.refreshActiveSetWhenEmpty !== true) return;\n\tconst tools = buildMcpToolDefinitions(entries, warn);\n\tconst currentActive = pi.getActiveTools().filter((name) => !name.startsWith(\"mcp_\"));\n\tconst mcpNames = buildActiveToolNames(entries, activeEntries, warn);\n\tregisterToolsPreservingActiveSet(pi, tools, [...currentActive, ...mcpNames]);\n}\n\nexport interface McpNamedCatalogEntry {\n\treadonly entry: McpToolCatalogEntry;\n\treadonly name: string;\n}\n\n/** Pair each catalog entry with its stable, collision-resolved mcp tool name.\n * Shared by the full-tool builder and the Tier-B search catalog so names never\n * drift between the two. */\nexport function mapMcpCatalogNames(entries: readonly McpToolCatalogEntry[], warn?: WarnFn): McpNamedCatalogEntry[] {\n\tconst sorted = [...entries].sort(compareCatalogEntries);\n\tconst names = buildMcpToolNames(\n\t\tsorted.map((entry) => ({ serverName: entry.server, toolName: entry.tool })),\n\t\twarn,\n\t);\n\treturn sorted.map((entry, index) => ({ entry, name: names[index] ?? \"\" }));\n}\n\nexport function buildMcpToolDefinitions(entries: readonly McpToolCatalogEntry[], warn?: WarnFn): McpToolDefinition[] {\n\treturn mapMcpCatalogNames(entries, warn).map(({ entry, name }) => createMcpToolDefinition(entry, name));\n}\n\nfunction createMcpToolDefinition(entry: McpToolCatalogEntry, name: string): McpToolDefinition {\n\tconst converted = convertJsonSchemaToTypeBox(entry.schema);\n\tconst label = `${entry.server}/${entry.tool}`;\n\treturn {\n\t\tname,\n\t\tlabel,\n\t\tdescription: entry.description ?? `MCP tool ${label}`,\n\t\tparameters: converted.schema,\n\t\texecutionMode: \"parallel\",\n\t\tasync execute(_toolCallId, params, signal, onUpdate): Promise<AgentToolResult<McpToolDetails | undefined>> {\n\t\t\tconst args: Record<string, unknown> = isRecord(params) ? params : {};\n\t\t\treturn await executeMcpCatalogEntry(entry, args, signal, onUpdate);\n\t\t},\n\t\trenderCall(args, theme) {\n\t\t\treturn new Text(theme.fg(\"toolTitle\", theme.bold(`${name} ${previewArgs(args)}`.trim())), 0, 0);\n\t\t},\n\t\trenderResult(result, options, theme) {\n\t\t\tconst title = options.isPartial\n\t\t\t\t? `${name}: running`\n\t\t\t\t: `${name}: ${result.details?.preview ?? \"(empty result)\"}`;\n\t\t\treturn new Text(theme.fg(\"toolOutput\", title), 0, 0);\n\t\t},\n\t};\n}\n\n/** Full guarded call path for one catalog entry (lifecycle + retry + output\n * guard). Shared by direct/search tool definitions and the Tier-C proxy. */\nexport async function executeMcpCatalogEntry(\n\tentry: McpToolCatalogEntry,\n\targs: Record<string, unknown>,\n\tsignal: AbortSignal | undefined,\n\tonUpdate: Parameters<McpToolDefinition[\"execute\"]>[3],\n): Promise<AgentToolResult<McpToolDetails | undefined>> {\n\tconst label = `${entry.server}/${entry.tool}`;\n\tconst result = await callMcpTool(entry, args, signal, onUpdate, label);\n\tconst mapped = mapMcpToolResult(normalizeCallToolResult(result));\n\tif (!mapped.ok) {\n\t\tthrow new ToolExecError(mapped.error.message, { phase: \"call\", serverName: entry.server });\n\t}\n\tconst guarded = await applyMcpOutputGuard(mapped.content, {\n\t\tagentDir: entry.agentDir,\n\t\tartifacts: entry.artifacts,\n\t\toutputGuard: entry.outputGuard,\n\t\tserver: entry.server,\n\t});\n\tconst content = toAgentContent(guarded);\n\treturn { content, details: { preview: previewContent(content), server: entry.server, tool: entry.tool } };\n}\n\nasync function callMcpTool(\n\tentry: McpToolCatalogEntry,\n\targs: Record<string, unknown>,\n\tsignal: AbortSignal | undefined,\n\tonUpdate: Parameters<McpToolDefinition[\"execute\"]>[3],\n\tlabel: string,\n): Promise<Awaited<ReturnType<McpToolCatalogEntry[\"connection\"][\"client\"][\"callTool\"]>>> {\n\ttry {\n\t\treturn await runMcpConnectionLifecycleCall(entry.connection, () =>\n\t\t\twithMcpSessionExpiryRetry(entry.connection, async () => {\n\t\t\t\tawait ensureMcpToolCallConnection(entry.connection, entry.ensureFresh);\n\t\t\t\tawait entry.ensureConnected?.();\n\t\t\t\treturn await withMcpRetriableFailedSendRetry(entry.connection, async () => {\n\t\t\t\t\treturn await entry.connection.client.callTool({ name: entry.tool, arguments: args }, undefined, {\n\t\t\t\t\t\tonprogress: (progress) => {\n\t\t\t\t\t\t\tonUpdate?.({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: formatProgress(label, progress) }],\n\t\t\t\t\t\t\t\tdetails: { progress, server: entry.server, tool: entry.tool },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\ttimeout: entry.requestTimeoutMs,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}),\n\t\t);\n\t} catch (error) {\n\t\tthrow new ToolExecError(`ToolExecError: ${errorLabel(error)}`, {\n\t\t\tcause: error,\n\t\t\tphase: \"call\",\n\t\t\tserverName: entry.server,\n\t\t});\n\t}\n}\n\nfunction normalizeCallToolResult(\n\tresult: Awaited<ReturnType<McpToolCatalogEntry[\"connection\"][\"client\"][\"callTool\"]>>,\n): McpToolResultLike {\n\tif (\"content\" in result || \"structuredContent\" in result || \"isError\" in result) {\n\t\tconst candidate = result as Record<string, unknown>;\n\t\tconst normalized: McpToolResultLike = {};\n\t\tif (isMcpContentBlockArray(candidate.content)) normalized.content = candidate.content;\n\t\tif (typeof candidate.isError === \"boolean\") normalized.isError = candidate.isError;\n\t\tif (\"structuredContent\" in candidate) normalized.structuredContent = candidate.structuredContent;\n\t\treturn normalized;\n\t}\n\treturn { structuredContent: result.toolResult };\n}\n\nfunction isMcpContentBlockArray(value: unknown): value is McpContentBlock[] {\n\treturn Array.isArray(value);\n}\n\nfunction toAgentContent(blocks: readonly McpMappedContentBlock[]): McpAgentContent[] {\n\treturn blocks.map((block) => {\n\t\tif (block.type === \"text\" || block.type === \"image\") return block;\n\t\treturn { type: \"text\", text: JSON.stringify(block) };\n\t});\n}\n\nfunction previewContent(content: readonly McpAgentContent[]): string {\n\treturn truncatePreview(\n\t\tcontent\n\t\t\t.map((block) => (block.type === \"text\" ? block.text : `[${block.mimeType} image]`))\n\t\t\t.join(\" \")\n\t\t\t.trim() || \"(empty result)\",\n\t);\n}\n\nfunction previewArgs(args: unknown): string {\n\tconst text = JSON.stringify(args);\n\treturn text === undefined ? \"\" : truncatePreview(text);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction errorLabel(error: unknown): string {\n\treturn error instanceof Error ? `${error.name}: ${error.message}` : String(error);\n}\n\nfunction formatProgress(label: string, progress: Progress): string {\n\tconst total = progress.total === undefined ? \"\" : `/${progress.total}`;\n\tconst message = progress.message === undefined ? \"\" : ` ${progress.message}`;\n\treturn `${label} progress ${progress.progress}${total}${message}`.trim();\n}\n\nfunction truncatePreview(value: string): string {\n\treturn value.length <= 120 ? value : `${value.slice(0, 117)}...`;\n}\n\nfunction compareCatalogEntries(left: McpToolCatalogEntry, right: McpToolCatalogEntry): number {\n\treturn left.server.localeCompare(right.server) || left.tool.localeCompare(right.tool);\n}\n\nfunction buildActiveToolNames(\n\tentries: readonly McpToolCatalogEntry[],\n\tactiveEntries: readonly McpToolCatalogEntry[],\n\twarn?: WarnFn,\n): string[] {\n\tconst activeKeys = new Set(activeEntries.map(catalogEntryKey));\n\tconst sorted = [...entries].sort(compareCatalogEntries);\n\tconst names = buildMcpToolNames(\n\t\tsorted.map((entry) => ({ serverName: entry.server, toolName: entry.tool })),\n\t\twarn,\n\t);\n\treturn sorted\n\t\t.map((entry, index) => (activeKeys.has(catalogEntryKey(entry)) ? (names[index] ?? \"\") : \"\"))\n\t\t.filter((name) => name.length > 0)\n\t\t.sort();\n}\n\nfunction catalogEntryKey(entry: McpToolCatalogEntry): string {\n\treturn `${entry.server}\\0${entry.tool}`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/expose/session.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionAPI } from \"../../../types.ts\";\nimport type { ToolSearchService } from \"../../tool-search/service.ts\";\nimport { cachedToolsToCatalogEntries, collectToolCatalog, type McpToolCatalogEntry } from \"../catalog.ts\";\nimport type { McpCachedServerCatalog } from \"../catalog-cache.ts\";\nimport type { ResolvedMcpConfig } from \"../config-schema.ts\";\nimport type { ServerConnection } from \"../connection.ts\";\nimport type { McpOutputArtifacts } from \"../guard/output-guard.ts\";\nimport { createMcpLogger, type McpLogger } from \"../log.ts\";\nimport type { McpPromptServer } from \"../prompts.ts\";\nimport { createMcpResourceTools, type McpResourceServer } from \"../resources.ts\";\nimport { computeMcpExposurePolicy } from \"./policy.ts\";\nimport type { McpCatalogRegistrationOptions } from \"./register.ts\";\nimport { type McpTierBRegistration, registerMcpTierBTools } from \"./tier-b.ts\";\n\nexport type McpSessionRegistration = McpTierBRegistration & {\n\tresourceServers: McpResourceServer[];\n\tpromptServers: McpPromptServer[];\n};\n\nexport interface McpDirectRegistrationEntry {\n\treadonly name: string;\n\treadonly connection: ServerConnection;\n\treadonly logger: McpLogger;\n\treadonly agentDir?: string;\n\treadonly artifacts?: McpOutputArtifacts;\n\treadonly cachedCatalog?: McpCachedServerCatalog;\n\treadonly ensureFresh?: () => Promise<void>;\n\treadonly ensureCachedToolConnected?: () => Promise<void>;\n}\n\nexport async function registerDirectMcpTools(\n\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n\tconfig: ResolvedMcpConfig,\n\tentries: Iterable<McpDirectRegistrationEntry>,\n\ttoolSearchService: ToolSearchService,\n\toptions: McpCatalogRegistrationOptions = {},\n): Promise<McpSessionRegistration | undefined> {\n\tconst registeredEntries: McpToolCatalogEntry[] = [];\n\tconst activeEntries: McpToolCatalogEntry[] = [];\n\tlet searchMode = false;\n\tconst proxyGateways: { server: string; entries: McpToolCatalogEntry[] }[] = [];\n\tconst resourceServers: McpResourceServer[] = [];\n\tconst promptServers: McpPromptServer[] = [];\n\tfor (const entry of entries) {\n\t\tconst server = config.servers[entry.name];\n\t\tif (server?.config === undefined) continue;\n\t\tconst catalog =\n\t\t\tentry.cachedCatalog === undefined\n\t\t\t\t? entry.connection.state === \"connected\"\n\t\t\t\t\t? await collectToolCatalog(entry.name, entry.connection, server.config, {\n\t\t\t\t\t\t\tagentDir: entry.agentDir,\n\t\t\t\t\t\t\tartifacts: entry.artifacts,\n\t\t\t\t\t\t\tensureFresh: entry.ensureFresh,\n\t\t\t\t\t\t\toutputGuard: config.settings.outputGuard,\n\t\t\t\t\t\t})\n\t\t\t\t\t: []\n\t\t\t\t: cachedToolsToCatalogEntries(\n\t\t\t\t\t\tentry.name,\n\t\t\t\t\t\tentry.cachedCatalog,\n\t\t\t\t\t\tentry.connection,\n\t\t\t\t\t\tserver.config.requestTimeoutMs,\n\t\t\t\t\t\tentry.ensureCachedToolConnected ?? (() => entry.connection.connect().then(() => undefined)),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tagentDir: entry.agentDir,\n\t\t\t\t\t\t\tartifacts: entry.artifacts,\n\t\t\t\t\t\t\tensureFresh: entry.ensureFresh,\n\t\t\t\t\t\t\toutputGuard: config.settings.outputGuard,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\tconst cachedPrompts = entry.cachedCatalog?.prompts ?? [];\n\t\tif (cachedPrompts.length > 0) {\n\t\t\tpromptServers.push({\n\t\t\t\tconnection: entry.connection,\n\t\t\t\tprompts: cachedPrompts,\n\t\t\t\trequestTimeoutMs: server.config.requestTimeoutMs,\n\t\t\t\tserver: entry.name,\n\t\t\t});\n\t\t}\n\t\tconst cachedResources = entry.cachedCatalog?.resources ?? [];\n\t\tif (cachedResources.length > 0) {\n\t\t\tresourceServers.push({\n\t\t\t\tagentDir: entry.agentDir,\n\t\t\t\tartifacts: entry.artifacts,\n\t\t\t\tconnection: entry.connection,\n\t\t\t\toutputGuard: config.settings.outputGuard,\n\t\t\t\trequestTimeoutMs: server.config.requestTimeoutMs,\n\t\t\t\tresources: cachedResources,\n\t\t\t\tserver: entry.name,\n\t\t\t});\n\t\t}\n\t\tconst policy = computeMcpExposurePolicy(catalog, server.config, config.settings);\n\t\tfor (const warning of policy.warnings) entry.logger.warn(warning);\n\t\tif (policy.mode === \"search\") searchMode = true;\n\t\tif (policy.mode === \"proxy\") proxyGateways.push({ entries: [...policy.filteredEntries], server: entry.name });\n\t\tregisteredEntries.push(...policy.registeredEntries);\n\t\tactiveEntries.push(...policy.activeEntries);\n\t}\n\t// Skip touching the active set only when there is genuinely nothing to do.\n\tif (\n\t\tregisteredEntries.length === 0 &&\n\t\tactiveEntries.length === 0 &&\n\t\t!searchMode &&\n\t\tproxyGateways.length === 0 &&\n\t\toptions.refreshActiveSetWhenEmpty !== true\n\t) {\n\t\treturn undefined;\n\t}\n\tconst utilityTools = resourceServers.length > 0 ? createMcpResourceTools(() => resourceServers) : [];\n\tconst registration = registerMcpTierBTools(\n\t\tpi,\n\t\t{ activeEntries, proxyGateways, registeredEntries, searchMode, settings: config.settings, utilityTools },\n\t\ttoolSearchService,\n\t\t(message) => createMcpLogger(\"service\").warn(message),\n\t);\n\treturn { ...registration, promptServers, resourceServers };\n}\n"]}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/expose/session.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionAPI } from \"../../../types.ts\";\nimport type { ToolSearchService } from \"../../tool-search/service.ts\";\nimport { cachedToolsToCatalogEntries, collectToolCatalog, type McpToolCatalogEntry } from \"../catalog.ts\";\nimport type { McpCachedServerCatalog } from \"../catalog-cache.ts\";\nimport type { ResolvedMcpConfig } from \"../config-schema.ts\";\nimport type { ServerConnection } from \"../connection.ts\";\nimport type { McpOutputArtifacts } from \"../guard/output-guard.ts\";\nimport { createMcpLogger, type McpLogger } from \"../log.ts\";\nimport type { McpPromptServer } from \"../prompts.ts\";\nimport { createMcpResourceTools, type McpResourceServer } from \"../resources.ts\";\nimport { computeMcpExposurePolicy } from \"./policy.ts\";\nimport type { McpCatalogRegistrationOptions } from \"./register.ts\";\nimport { type McpTierBRegistration, registerMcpTierBTools } from \"./tier-b.ts\";\n\nexport type McpSessionRegistration = McpTierBRegistration & {\n\tresourceServers: McpResourceServer[];\n\tpromptServers: McpPromptServer[];\n};\n\nexport interface McpDirectRegistrationEntry {\n\treadonly name: string;\n\treadonly connection: ServerConnection;\n\treadonly logger: McpLogger;\n\treadonly agentDir?: string;\n\treadonly artifacts?: McpOutputArtifacts;\n\treadonly cachedCatalog?: McpCachedServerCatalog;\n\treadonly ensureFresh?: () => Promise<void>;\n\treadonly ensureCachedToolConnected?: () => Promise<void>;\n}\n\nexport async function registerDirectMcpTools(\n\tpi: Pick<ExtensionAPI, \"getActiveTools\" | \"setActiveTools\" | \"registerTool\">,\n\tconfig: ResolvedMcpConfig,\n\tentries: Iterable<McpDirectRegistrationEntry>,\n\ttoolSearchService: ToolSearchService,\n\toptions: McpCatalogRegistrationOptions = {},\n): Promise<McpSessionRegistration | undefined> {\n\tconst registeredEntries: McpToolCatalogEntry[] = [];\n\tconst activeEntries: McpToolCatalogEntry[] = [];\n\tlet searchMode = false;\n\tconst proxyGateways: { server: string; entries: McpToolCatalogEntry[] }[] = [];\n\tconst resourceServers: McpResourceServer[] = [];\n\tconst promptServers: McpPromptServer[] = [];\n\tfor (const entry of entries) {\n\t\tconst server = config.servers[entry.name];\n\t\tif (server?.config === undefined) continue;\n\t\tconst catalog =\n\t\t\tentry.cachedCatalog === undefined\n\t\t\t\t? entry.connection.state === \"connected\"\n\t\t\t\t\t? await collectToolCatalog(entry.name, entry.connection, server.config, {\n\t\t\t\t\t\t\tagentDir: entry.agentDir,\n\t\t\t\t\t\t\tartifacts: entry.artifacts,\n\t\t\t\t\t\t\tensureFresh: entry.ensureFresh,\n\t\t\t\t\t\t\toutputGuard: config.settings.outputGuard,\n\t\t\t\t\t\t})\n\t\t\t\t\t: []\n\t\t\t\t: cachedToolsToCatalogEntries(\n\t\t\t\t\t\tentry.name,\n\t\t\t\t\t\tentry.cachedCatalog,\n\t\t\t\t\t\tentry.connection,\n\t\t\t\t\t\tserver.config.requestTimeoutMs,\n\t\t\t\t\t\tentry.ensureCachedToolConnected ?? (() => entry.connection.connect().then(() => undefined)),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tagentDir: entry.agentDir,\n\t\t\t\t\t\t\tartifacts: entry.artifacts,\n\t\t\t\t\t\t\tensureFresh: entry.ensureFresh,\n\t\t\t\t\t\t\toutputGuard: config.settings.outputGuard,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\tconst cachedPrompts = entry.cachedCatalog?.prompts ?? [];\n\t\tif (cachedPrompts.length > 0) {\n\t\t\tpromptServers.push({\n\t\t\t\tconnection: entry.connection,\n\t\t\t\tprompts: cachedPrompts,\n\t\t\t\trequestTimeoutMs: server.config.requestTimeoutMs,\n\t\t\t\tserver: entry.name,\n\t\t\t});\n\t\t}\n\t\tconst cachedResources = entry.cachedCatalog?.resources ?? [];\n\t\tif (cachedResources.length > 0) {\n\t\t\tresourceServers.push({\n\t\t\t\tagentDir: entry.agentDir,\n\t\t\t\tartifacts: entry.artifacts,\n\t\t\t\tconnection: entry.connection,\n\t\t\t\toutputGuard: config.settings.outputGuard,\n\t\t\t\trequestTimeoutMs: server.config.requestTimeoutMs,\n\t\t\t\tresources: cachedResources,\n\t\t\t\tserver: entry.name,\n\t\t\t});\n\t\t}\n\t\tconst policy = computeMcpExposurePolicy(catalog, server.config, config.settings);\n\t\tfor (const warning of policy.warnings) entry.logger.warn(warning);\n\t\tif (policy.mode === \"search\") searchMode = true;\n\t\tif (policy.mode === \"proxy\") proxyGateways.push({ entries: [...policy.filteredEntries], server: entry.name });\n\t\tregisteredEntries.push(...policy.registeredEntries);\n\t\tactiveEntries.push(...policy.activeEntries);\n\t}\n\t// Skip touching the active set only when there is genuinely nothing to do.\n\tif (\n\t\tregisteredEntries.length === 0 &&\n\t\tactiveEntries.length === 0 &&\n\t\t!searchMode &&\n\t\tproxyGateways.length === 0 &&\n\t\toptions.refreshActiveSetWhenEmpty !== true\n\t) {\n\t\treturn undefined;\n\t}\n\tconst utilityTools = resourceServers.length > 0 ? createMcpResourceTools(() => resourceServers) : [];\n\tconst registration = registerMcpTierBTools(\n\t\tpi,\n\t\t{ activeEntries, proxyGateways, registeredEntries, searchMode, settings: config.settings, utilityTools },\n\t\ttoolSearchService,\n\t\t(message) => createMcpLogger(\"service\").warn(message),\n\t);\n\treturn { ...registration, promptServers, resourceServers };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"output-guard.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/guard/output-guard.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,wDAAwD;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;CAClD;AAeD,4DAA4D;AAC5D,qBAAa,kBAAkB;;IAG9B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK9B;AAMD,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,OAAO,EAAE,qBAAqB,GAC5B,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAW3C;AA8ED,wBAAsB,yBAAyB,CAAC,SAAS,GAAE,kBAAoC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9G"}
1
+ {"version":3,"file":"output-guard.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/mcp/guard/output-guard.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,wDAAwD;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;CAClD;AAeD,4DAA4D;AAC5D,qBAAa,kBAAkB;;IAG9B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAExB;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAI7B;CACD;AAMD,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,OAAO,EAAE,qBAAqB,GAC5B,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAW3C;AA8ED,wBAAsB,yBAAyB,CAAC,SAAS,GAAE,kBAAoC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9G"}