@ashx-j/lunr 0.1.0 → 0.1.2

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 (869) hide show
  1. package/dist/builtin-extensions/ashxj-spinners.d.ts +1 -1
  2. package/dist/builtin-extensions/ashxj-spinners.d.ts.map +1 -1
  3. package/dist/builtin-extensions/ashxj-spinners.js.map +1 -1
  4. package/dist/builtin-extensions/ashxj-thinking.d.ts +5 -5
  5. package/dist/builtin-extensions/ashxj-thinking.d.ts.map +1 -1
  6. package/dist/builtin-extensions/ashxj-thinking.js +3 -3
  7. package/dist/builtin-extensions/ashxj-thinking.js.map +1 -1
  8. package/dist/builtin-extensions/ashxj-tui.d.ts +2 -2
  9. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  10. package/dist/builtin-extensions/ashxj-tui.js +2 -2
  11. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  12. package/dist/builtin-extensions/lunr-cron.d.ts +1 -1
  13. package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -1
  14. package/dist/builtin-extensions/lunr-cron.js.map +1 -1
  15. package/dist/builtin-extensions/lunr-local-providers/index.d.ts +1 -1
  16. package/dist/builtin-extensions/lunr-local-providers/index.d.ts.map +1 -1
  17. package/dist/builtin-extensions/lunr-local-providers/index.js.map +1 -1
  18. package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts +1 -1
  19. package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts.map +1 -1
  20. package/dist/builtin-extensions/lunr-local-providers/local-servers.js.map +1 -1
  21. package/dist/builtin-extensions/lunr-plan-tools.d.ts +1 -1
  22. package/dist/builtin-extensions/lunr-plan-tools.d.ts.map +1 -1
  23. package/dist/builtin-extensions/lunr-plan-tools.js +1 -1
  24. package/dist/builtin-extensions/lunr-plan-tools.js.map +1 -1
  25. package/dist/builtin-extensions/lunr-skill-creator/index.d.ts +1 -1
  26. package/dist/builtin-extensions/lunr-skill-creator/index.d.ts.map +1 -1
  27. package/dist/builtin-extensions/lunr-skill-creator/index.js.map +1 -1
  28. package/dist/builtin-extensions/lunr-todos.d.ts +1 -1
  29. package/dist/builtin-extensions/lunr-todos.d.ts.map +1 -1
  30. package/dist/builtin-extensions/lunr-todos.js +1 -1
  31. package/dist/builtin-extensions/lunr-todos.js.map +1 -1
  32. package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.d.ts.map +1 -1
  33. package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.js.map +1 -1
  34. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts +1 -1
  35. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
  36. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
  37. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts +2 -2
  38. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts.map +1 -1
  39. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js +1 -1
  40. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js.map +1 -1
  41. package/dist/builtin-extensions/pi-intercom/index.d.ts +1 -1
  42. package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
  43. package/dist/builtin-extensions/pi-intercom/index.js +2 -2
  44. package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
  45. package/dist/builtin-extensions/pi-intercom/ui/compose.d.ts +2 -2
  46. package/dist/builtin-extensions/pi-intercom/ui/compose.d.ts.map +1 -1
  47. package/dist/builtin-extensions/pi-intercom/ui/compose.js +1 -1
  48. package/dist/builtin-extensions/pi-intercom/ui/compose.js.map +1 -1
  49. package/dist/builtin-extensions/pi-intercom/ui/inline-message.d.ts +2 -2
  50. package/dist/builtin-extensions/pi-intercom/ui/inline-message.d.ts.map +1 -1
  51. package/dist/builtin-extensions/pi-intercom/ui/inline-message.js +1 -1
  52. package/dist/builtin-extensions/pi-intercom/ui/inline-message.js.map +1 -1
  53. package/dist/builtin-extensions/pi-intercom/ui/session-list.d.ts +2 -2
  54. package/dist/builtin-extensions/pi-intercom/ui/session-list.d.ts.map +1 -1
  55. package/dist/builtin-extensions/pi-intercom/ui/session-list.js +1 -1
  56. package/dist/builtin-extensions/pi-intercom/ui/session-list.js.map +1 -1
  57. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts +1 -1
  58. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts.map +1 -1
  59. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js.map +1 -1
  60. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts +1 -1
  61. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
  62. package/dist/builtin-extensions/pi-lsp-extension/src/index.js +1 -1
  63. package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
  64. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.d.ts +1 -1
  65. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.d.ts.map +1 -1
  66. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.js +1 -1
  67. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.js.map +1 -1
  68. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.d.ts +1 -1
  69. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.d.ts.map +1 -1
  70. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.js +1 -1
  71. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.js.map +1 -1
  72. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts +1 -1
  73. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts.map +1 -1
  74. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js.map +1 -1
  75. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.d.ts +1 -1
  76. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.d.ts.map +1 -1
  77. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.js.map +1 -1
  78. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.d.ts +1 -1
  79. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.d.ts.map +1 -1
  80. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.js +1 -1
  81. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.js.map +1 -1
  82. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.d.ts +1 -1
  83. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.d.ts.map +1 -1
  84. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.js +1 -1
  85. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.js.map +1 -1
  86. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.d.ts +1 -1
  87. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.d.ts.map +1 -1
  88. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.js +1 -1
  89. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.js.map +1 -1
  90. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.d.ts +1 -1
  91. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.d.ts.map +1 -1
  92. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.js +1 -1
  93. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.js.map +1 -1
  94. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.d.ts +1 -1
  95. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.d.ts.map +1 -1
  96. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.js +1 -1
  97. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.js.map +1 -1
  98. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.d.ts +1 -1
  99. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.d.ts.map +1 -1
  100. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.js +1 -1
  101. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.js.map +1 -1
  102. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.d.ts +1 -1
  103. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.d.ts.map +1 -1
  104. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.js +1 -1
  105. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.js.map +1 -1
  106. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts +1 -1
  107. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts.map +1 -1
  108. package/dist/builtin-extensions/pi-mcp-adapter/commands.js.map +1 -1
  109. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts +1 -1
  110. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts.map +1 -1
  111. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js.map +1 -1
  112. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.d.ts +1 -1
  113. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.d.ts.map +1 -1
  114. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.js.map +1 -1
  115. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts +1 -1
  116. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
  117. package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
  118. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts +1 -1
  119. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
  120. package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
  121. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.d.ts.map +1 -1
  122. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.js +1 -1
  123. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.js.map +1 -1
  124. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.d.ts.map +1 -1
  125. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.js +1 -1
  126. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.js.map +1 -1
  127. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.d.ts.map +1 -1
  128. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.js +1 -1
  129. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.js.map +1 -1
  130. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts +1 -1
  131. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts.map +1 -1
  132. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js.map +1 -1
  133. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.d.ts +2 -2
  134. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.d.ts.map +1 -1
  135. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.js +1 -1
  136. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.js.map +1 -1
  137. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts +1 -1
  138. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts.map +1 -1
  139. package/dist/builtin-extensions/pi-mcp-adapter/state.js.map +1 -1
  140. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.d.ts +2 -2
  141. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.d.ts.map +1 -1
  142. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.js +1 -1
  143. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.js.map +1 -1
  144. package/dist/builtin-extensions/pi-mcp-adapter/types.d.ts +1 -1
  145. package/dist/builtin-extensions/pi-mcp-adapter/types.d.ts.map +1 -1
  146. package/dist/builtin-extensions/pi-mcp-adapter/types.js.map +1 -1
  147. package/dist/builtin-extensions/pi-mcp-adapter/utils.d.ts +1 -1
  148. package/dist/builtin-extensions/pi-mcp-adapter/utils.d.ts.map +1 -1
  149. package/dist/builtin-extensions/pi-mcp-adapter/utils.js.map +1 -1
  150. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts +1 -1
  151. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts.map +1 -1
  152. package/dist/builtin-extensions/pi-ollama-cloud/index.js.map +1 -1
  153. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts +1 -1
  154. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts.map +1 -1
  155. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.d.ts +1 -1
  156. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.d.ts.map +1 -1
  157. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.js.map +1 -1
  158. package/dist/builtin-extensions/pi-ollama-cloud/models.js.map +1 -1
  159. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.d.ts +1 -1
  160. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.d.ts.map +1 -1
  161. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.js.map +1 -1
  162. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.d.ts +2 -2
  163. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.d.ts.map +1 -1
  164. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.js +1 -1
  165. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.js.map +1 -1
  166. package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts +1 -1
  167. package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts.map +1 -1
  168. package/dist/builtin-extensions/pi-prompt-template-model/index.js.map +1 -1
  169. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.d.ts +1 -1
  170. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.d.ts.map +1 -1
  171. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.js.map +1 -1
  172. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.d.ts +1 -1
  173. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.d.ts.map +1 -1
  174. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.js.map +1 -1
  175. package/dist/builtin-extensions/pi-prompt-template-model/notifications.d.ts +1 -1
  176. package/dist/builtin-extensions/pi-prompt-template-model/notifications.d.ts.map +1 -1
  177. package/dist/builtin-extensions/pi-prompt-template-model/notifications.js.map +1 -1
  178. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.d.ts +1 -1
  179. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.d.ts.map +1 -1
  180. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.js.map +1 -1
  181. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts +1 -1
  182. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
  183. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +1 -1
  184. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
  185. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.d.ts +2 -2
  186. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.d.ts.map +1 -1
  187. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.js +1 -1
  188. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.js.map +1 -1
  189. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.d.ts +2 -2
  190. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.d.ts.map +1 -1
  191. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.js +1 -1
  192. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.js.map +1 -1
  193. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts +3 -3
  194. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts.map +1 -1
  195. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js +1 -1
  196. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js.map +1 -1
  197. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.d.ts +2 -2
  198. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.d.ts.map +1 -1
  199. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.js +1 -1
  200. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.js.map +1 -1
  201. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts +1 -1
  202. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
  203. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +1 -1
  204. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
  205. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts +2 -2
  206. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts.map +1 -1
  207. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.js.map +1 -1
  208. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts +1 -1
  209. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts.map +1 -1
  210. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.js.map +1 -1
  211. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts +1 -1
  212. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts.map +1 -1
  213. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js.map +1 -1
  214. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +1 -1
  215. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  216. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +2 -2
  217. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  218. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.d.ts +2 -2
  219. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.d.ts.map +1 -1
  220. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.js.map +1 -1
  221. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.d.ts +1 -1
  222. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.d.ts.map +1 -1
  223. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.js.map +1 -1
  224. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts +1 -1
  225. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts.map +1 -1
  226. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -1
  227. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts +1 -1
  228. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts.map +1 -1
  229. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.js.map +1 -1
  230. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts +1 -1
  231. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
  232. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
  233. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts +1 -1
  234. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts.map +1 -1
  235. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js.map +1 -1
  236. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts +1 -1
  237. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts.map +1 -1
  238. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.js.map +1 -1
  239. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts +1 -1
  240. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts.map +1 -1
  241. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js.map +1 -1
  242. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +1 -1
  243. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
  244. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
  245. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts +1 -1
  246. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts.map +1 -1
  247. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js.map +1 -1
  248. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts +2 -2
  249. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts.map +1 -1
  250. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.js.map +1 -1
  251. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  252. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  253. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts +1 -1
  254. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts.map +1 -1
  255. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js.map +1 -1
  256. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts +1 -1
  257. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts.map +1 -1
  258. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js.map +1 -1
  259. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.d.ts +1 -1
  260. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.d.ts.map +1 -1
  261. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.js.map +1 -1
  262. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts +2 -2
  263. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts.map +1 -1
  264. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js +1 -1
  265. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js.map +1 -1
  266. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts +2 -2
  267. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  268. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  269. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  270. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  271. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +2 -2
  272. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  273. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  274. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts +1 -1
  275. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts.map +1 -1
  276. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.js.map +1 -1
  277. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.d.ts +1 -1
  278. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.d.ts.map +1 -1
  279. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.js +1 -1
  280. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.js.map +1 -1
  281. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.d.ts +1 -1
  282. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.d.ts.map +1 -1
  283. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.js.map +1 -1
  284. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts +1 -1
  285. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
  286. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
  287. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.d.ts +1 -1
  288. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.d.ts.map +1 -1
  289. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.js.map +1 -1
  290. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.d.ts.map +1 -1
  291. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js +1 -1
  292. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js.map +1 -1
  293. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +3 -3
  294. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  295. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  296. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts +1 -1
  297. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts.map +1 -1
  298. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js +1 -1
  299. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js.map +1 -1
  300. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts +1 -1
  301. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
  302. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
  303. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.d.ts +2 -2
  304. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.d.ts.map +1 -1
  305. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.js.map +1 -1
  306. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +1 -1
  307. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  308. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +2 -2
  309. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
  310. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.d.ts +1 -1
  311. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.d.ts.map +1 -1
  312. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.js.map +1 -1
  313. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts +2 -2
  314. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts.map +1 -1
  315. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js +1 -1
  316. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js.map +1 -1
  317. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.d.ts +1 -1
  318. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.d.ts.map +1 -1
  319. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.js +1 -1
  320. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.js.map +1 -1
  321. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +3 -3
  322. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  323. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +2 -2
  324. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  325. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.d.ts +1 -1
  326. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.d.ts.map +1 -1
  327. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.js.map +1 -1
  328. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.d.ts +1 -1
  329. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.d.ts.map +1 -1
  330. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.js.map +1 -1
  331. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts +1 -1
  332. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts.map +1 -1
  333. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js +1 -1
  334. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js.map +1 -1
  335. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.d.ts +1 -1
  336. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.d.ts.map +1 -1
  337. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.js +1 -1
  338. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.js.map +1 -1
  339. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts +3 -3
  340. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
  341. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +3 -3
  342. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
  343. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts +1 -1
  344. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts.map +1 -1
  345. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.js.map +1 -1
  346. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts +2 -2
  347. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts.map +1 -1
  348. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.js.map +1 -1
  349. package/dist/builtin-extensions/pi-tps.d.ts +1 -1
  350. package/dist/builtin-extensions/pi-tps.d.ts.map +1 -1
  351. package/dist/builtin-extensions/pi-tps.js.map +1 -1
  352. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts +1 -1
  353. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts.map +1 -1
  354. package/dist/builtin-extensions/pi-web-access/gemini-search.js.map +1 -1
  355. package/dist/builtin-extensions/pi-web-access/index.d.ts +1 -1
  356. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  357. package/dist/builtin-extensions/pi-web-access/index.js +2 -2
  358. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  359. package/dist/builtin-extensions/pi-web-access/openai-search.d.ts +1 -1
  360. package/dist/builtin-extensions/pi-web-access/openai-search.d.ts.map +1 -1
  361. package/dist/builtin-extensions/pi-web-access/openai-search.js +1 -1
  362. package/dist/builtin-extensions/pi-web-access/openai-search.js.map +1 -1
  363. package/dist/builtin-extensions/pi-web-access/storage.d.ts +1 -1
  364. package/dist/builtin-extensions/pi-web-access/storage.d.ts.map +1 -1
  365. package/dist/builtin-extensions/pi-web-access/storage.js.map +1 -1
  366. package/dist/builtin-extensions/pi-web-access/summary-review.d.ts +1 -1
  367. package/dist/builtin-extensions/pi-web-access/summary-review.d.ts.map +1 -1
  368. package/dist/builtin-extensions/pi-web-access/summary-review.js +1 -1
  369. package/dist/builtin-extensions/pi-web-access/summary-review.js.map +1 -1
  370. package/dist/bun/cli.d.ts.map +1 -1
  371. package/dist/bun/cli.js +1 -1
  372. package/dist/bun/cli.js.map +1 -1
  373. package/dist/bun/register-bedrock.d.ts.map +1 -1
  374. package/dist/bun/register-bedrock.js +2 -2
  375. package/dist/bun/register-bedrock.js.map +1 -1
  376. package/dist/catalog/models.json +1 -1
  377. package/dist/catalog/providers/opencode-go.json +1 -1
  378. package/dist/catalog/providers/openrouter.json +1 -1
  379. package/dist/catalog/providers/qwen-token-plan-cn.json +1 -1
  380. package/dist/catalog/providers/qwen-token-plan.json +1 -1
  381. package/dist/catalog/publication.json +3 -3
  382. package/dist/cli/args.d.ts +1 -1
  383. package/dist/cli/args.d.ts.map +1 -1
  384. package/dist/cli/args.js.map +1 -1
  385. package/dist/cli/config-selector.d.ts.map +1 -1
  386. package/dist/cli/config-selector.js +1 -1
  387. package/dist/cli/config-selector.js.map +1 -1
  388. package/dist/cli/file-processor.d.ts +1 -1
  389. package/dist/cli/file-processor.d.ts.map +1 -1
  390. package/dist/cli/file-processor.js.map +1 -1
  391. package/dist/cli/initial-message.d.ts +1 -1
  392. package/dist/cli/initial-message.d.ts.map +1 -1
  393. package/dist/cli/initial-message.js.map +1 -1
  394. package/dist/cli/list-models.d.ts.map +1 -1
  395. package/dist/cli/list-models.js +1 -1
  396. package/dist/cli/list-models.js.map +1 -1
  397. package/dist/cli/session-picker.d.ts.map +1 -1
  398. package/dist/cli/session-picker.js +1 -1
  399. package/dist/cli/session-picker.js.map +1 -1
  400. package/dist/cli/startup-ui.d.ts +1 -1
  401. package/dist/cli/startup-ui.d.ts.map +1 -1
  402. package/dist/cli/startup-ui.js +2 -2
  403. package/dist/cli/startup-ui.js.map +1 -1
  404. package/dist/config.d.ts.map +1 -1
  405. package/dist/config.js +1 -1
  406. package/dist/config.js.map +1 -1
  407. package/dist/core/agent-session-services.d.ts +2 -2
  408. package/dist/core/agent-session-services.d.ts.map +1 -1
  409. package/dist/core/agent-session-services.js.map +1 -1
  410. package/dist/core/agent-session.d.ts +2 -2
  411. package/dist/core/agent-session.d.ts.map +1 -1
  412. package/dist/core/agent-session.js +1 -1
  413. package/dist/core/agent-session.js.map +1 -1
  414. package/dist/core/auth-storage.d.ts +1 -1
  415. package/dist/core/auth-storage.d.ts.map +1 -1
  416. package/dist/core/auth-storage.js.map +1 -1
  417. package/dist/core/cache-stats.d.ts +1 -1
  418. package/dist/core/cache-stats.d.ts.map +1 -1
  419. package/dist/core/cache-stats.js.map +1 -1
  420. package/dist/core/catalog-merge.d.ts +1 -1
  421. package/dist/core/catalog-merge.d.ts.map +1 -1
  422. package/dist/core/catalog-merge.js +7 -1
  423. package/dist/core/catalog-merge.js.map +1 -1
  424. package/dist/core/compaction/branch-summarization.d.ts +2 -2
  425. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  426. package/dist/core/compaction/branch-summarization.js +1 -1
  427. package/dist/core/compaction/branch-summarization.js.map +1 -1
  428. package/dist/core/compaction/compaction.d.ts +2 -2
  429. package/dist/core/compaction/compaction.d.ts.map +1 -1
  430. package/dist/core/compaction/compaction.js +1 -1
  431. package/dist/core/compaction/compaction.js.map +1 -1
  432. package/dist/core/compaction/utils.d.ts +2 -2
  433. package/dist/core/compaction/utils.d.ts.map +1 -1
  434. package/dist/core/compaction/utils.js.map +1 -1
  435. package/dist/core/context-breakdown.d.ts +1 -1
  436. package/dist/core/context-breakdown.d.ts.map +1 -1
  437. package/dist/core/context-breakdown.js.map +1 -1
  438. package/dist/core/defaults.d.ts +1 -1
  439. package/dist/core/defaults.d.ts.map +1 -1
  440. package/dist/core/defaults.js.map +1 -1
  441. package/dist/core/export-html/index.d.ts +1 -1
  442. package/dist/core/export-html/index.d.ts.map +1 -1
  443. package/dist/core/export-html/index.js.map +1 -1
  444. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  445. package/dist/core/export-html/tool-renderer.js.map +1 -1
  446. package/dist/core/extensions/loader.d.ts.map +1 -1
  447. package/dist/core/extensions/loader.js +25 -25
  448. package/dist/core/extensions/loader.js.map +1 -1
  449. package/dist/core/extensions/runner.d.ts +3 -3
  450. package/dist/core/extensions/runner.d.ts.map +1 -1
  451. package/dist/core/extensions/runner.js.map +1 -1
  452. package/dist/core/extensions/types.d.ts +5 -5
  453. package/dist/core/extensions/types.d.ts.map +1 -1
  454. package/dist/core/extensions/types.js.map +1 -1
  455. package/dist/core/extensions/wrapper.d.ts +1 -1
  456. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  457. package/dist/core/extensions/wrapper.js.map +1 -1
  458. package/dist/core/grok-cli-auth.d.ts +32 -0
  459. package/dist/core/grok-cli-auth.d.ts.map +1 -0
  460. package/dist/core/grok-cli-auth.js +218 -0
  461. package/dist/core/grok-cli-auth.js.map +1 -0
  462. package/dist/core/keybindings.d.ts +2 -2
  463. package/dist/core/keybindings.d.ts.map +1 -1
  464. package/dist/core/keybindings.js +1 -1
  465. package/dist/core/keybindings.js.map +1 -1
  466. package/dist/core/live-catalog.d.ts +1 -1
  467. package/dist/core/live-catalog.d.ts.map +1 -1
  468. package/dist/core/live-catalog.js.map +1 -1
  469. package/dist/core/messages.d.ts +3 -3
  470. package/dist/core/messages.d.ts.map +1 -1
  471. package/dist/core/messages.js.map +1 -1
  472. package/dist/core/model-registry.d.ts +1 -1
  473. package/dist/core/model-registry.d.ts.map +1 -1
  474. package/dist/core/model-registry.js.map +1 -1
  475. package/dist/core/model-resolver.d.ts +2 -2
  476. package/dist/core/model-resolver.d.ts.map +1 -1
  477. package/dist/core/model-resolver.js +1 -1
  478. package/dist/core/model-resolver.js.map +1 -1
  479. package/dist/core/model-runtime.d.ts +10 -1
  480. package/dist/core/model-runtime.d.ts.map +1 -1
  481. package/dist/core/model-runtime.js +24 -5
  482. package/dist/core/model-runtime.js.map +1 -1
  483. package/dist/core/models-store.d.ts +1 -1
  484. package/dist/core/models-store.d.ts.map +1 -1
  485. package/dist/core/models-store.js.map +1 -1
  486. package/dist/core/official-catalog.d.ts +1 -1
  487. package/dist/core/official-catalog.d.ts.map +1 -1
  488. package/dist/core/official-catalog.js.map +1 -1
  489. package/dist/core/provider-attribution.d.ts +1 -1
  490. package/dist/core/provider-attribution.d.ts.map +1 -1
  491. package/dist/core/provider-attribution.js.map +1 -1
  492. package/dist/core/provider-composer.d.ts +1 -1
  493. package/dist/core/provider-composer.d.ts.map +1 -1
  494. package/dist/core/provider-composer.js +2 -2
  495. package/dist/core/provider-composer.js.map +1 -1
  496. package/dist/core/runtime-credentials.d.ts +1 -1
  497. package/dist/core/runtime-credentials.d.ts.map +1 -1
  498. package/dist/core/runtime-credentials.js.map +1 -1
  499. package/dist/core/sdk.d.ts +3 -3
  500. package/dist/core/sdk.d.ts.map +1 -1
  501. package/dist/core/sdk.js +3 -3
  502. package/dist/core/sdk.js.map +1 -1
  503. package/dist/core/session-manager.d.ts +2 -2
  504. package/dist/core/session-manager.d.ts.map +1 -1
  505. package/dist/core/session-manager.js +1 -1
  506. package/dist/core/session-manager.js.map +1 -1
  507. package/dist/core/settings-manager.d.ts +2 -2
  508. package/dist/core/settings-manager.d.ts.map +1 -1
  509. package/dist/core/settings-manager.js.map +1 -1
  510. package/dist/core/subscriptions.d.ts +1 -1
  511. package/dist/core/subscriptions.d.ts.map +1 -1
  512. package/dist/core/subscriptions.js.map +1 -1
  513. package/dist/core/tools/bash.d.ts +1 -1
  514. package/dist/core/tools/bash.d.ts.map +1 -1
  515. package/dist/core/tools/bash.js +1 -1
  516. package/dist/core/tools/bash.js.map +1 -1
  517. package/dist/core/tools/edit.d.ts +2 -2
  518. package/dist/core/tools/edit.d.ts.map +1 -1
  519. package/dist/core/tools/edit.js +1 -1
  520. package/dist/core/tools/edit.js.map +1 -1
  521. package/dist/core/tools/find.d.ts +1 -1
  522. package/dist/core/tools/find.d.ts.map +1 -1
  523. package/dist/core/tools/find.js +1 -1
  524. package/dist/core/tools/find.js.map +1 -1
  525. package/dist/core/tools/grep.d.ts +1 -1
  526. package/dist/core/tools/grep.d.ts.map +1 -1
  527. package/dist/core/tools/grep.js +1 -1
  528. package/dist/core/tools/grep.js.map +1 -1
  529. package/dist/core/tools/index.d.ts +1 -1
  530. package/dist/core/tools/index.d.ts.map +1 -1
  531. package/dist/core/tools/index.js.map +1 -1
  532. package/dist/core/tools/ls.d.ts +1 -1
  533. package/dist/core/tools/ls.d.ts.map +1 -1
  534. package/dist/core/tools/ls.js +1 -1
  535. package/dist/core/tools/ls.js.map +1 -1
  536. package/dist/core/tools/read.d.ts +1 -1
  537. package/dist/core/tools/read.d.ts.map +1 -1
  538. package/dist/core/tools/read.js +1 -1
  539. package/dist/core/tools/read.js.map +1 -1
  540. package/dist/core/tools/render-utils.d.ts +1 -1
  541. package/dist/core/tools/render-utils.d.ts.map +1 -1
  542. package/dist/core/tools/render-utils.js +1 -1
  543. package/dist/core/tools/render-utils.js.map +1 -1
  544. package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
  545. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  546. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  547. package/dist/core/tools/write.d.ts +1 -1
  548. package/dist/core/tools/write.d.ts.map +1 -1
  549. package/dist/core/tools/write.js +1 -1
  550. package/dist/core/tools/write.js.map +1 -1
  551. package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -1
  552. package/dist/core/usage-adapters/openai-codex.js.map +1 -1
  553. package/dist/core/usage-adapters/xai.d.ts.map +1 -1
  554. package/dist/core/usage-adapters/xai.js +4 -0
  555. package/dist/core/usage-adapters/xai.js.map +1 -1
  556. package/dist/core/usage-history.d.ts.map +1 -1
  557. package/dist/core/usage-history.js.map +1 -1
  558. package/dist/core/usage-service.d.ts +11 -1
  559. package/dist/core/usage-service.d.ts.map +1 -1
  560. package/dist/core/usage-service.js +45 -9
  561. package/dist/core/usage-service.js.map +1 -1
  562. package/dist/core/user-models.d.ts +1 -1
  563. package/dist/core/user-models.d.ts.map +1 -1
  564. package/dist/core/user-models.js.map +1 -1
  565. package/dist/gateway/agent-bridge.d.ts +3 -3
  566. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  567. package/dist/gateway/agent-bridge.js.map +1 -1
  568. package/dist/gateway/commands.d.ts.map +1 -1
  569. package/dist/gateway/commands.js.map +1 -1
  570. package/dist/gateway/cron.d.ts.map +1 -1
  571. package/dist/gateway/cron.js.map +1 -1
  572. package/dist/main.d.ts.map +1 -1
  573. package/dist/main.js +1 -1
  574. package/dist/main.js.map +1 -1
  575. package/dist/modes/interactive/components/armin.d.ts +1 -1
  576. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  577. package/dist/modes/interactive/components/armin.js.map +1 -1
  578. package/dist/modes/interactive/components/assistant-message.d.ts +2 -2
  579. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  580. package/dist/modes/interactive/components/assistant-message.js +1 -1
  581. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  582. package/dist/modes/interactive/components/bash-execution.d.ts +1 -1
  583. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  584. package/dist/modes/interactive/components/bash-execution.js +1 -1
  585. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  586. package/dist/modes/interactive/components/boot-screen.d.ts +1 -1
  587. package/dist/modes/interactive/components/boot-screen.d.ts.map +1 -1
  588. package/dist/modes/interactive/components/boot-screen.js +1 -1
  589. package/dist/modes/interactive/components/boot-screen.js.map +1 -1
  590. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  591. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  592. package/dist/modes/interactive/components/bordered-loader.js +1 -1
  593. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  594. package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
  595. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  596. package/dist/modes/interactive/components/branch-summary-message.js +1 -1
  597. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  598. package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
  599. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  600. package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
  601. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  602. package/dist/modes/interactive/components/config-selector.d.ts +1 -1
  603. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  604. package/dist/modes/interactive/components/config-selector.js +1 -1
  605. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  606. package/dist/modes/interactive/components/countdown-timer.d.ts +1 -1
  607. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  608. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  609. package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
  610. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  611. package/dist/modes/interactive/components/custom-editor.js +1 -1
  612. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  613. package/dist/modes/interactive/components/custom-entry.d.ts +1 -1
  614. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  615. package/dist/modes/interactive/components/custom-entry.js +1 -1
  616. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  617. package/dist/modes/interactive/components/custom-message.d.ts +1 -1
  618. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  619. package/dist/modes/interactive/components/custom-message.js +1 -1
  620. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  621. package/dist/modes/interactive/components/daxnuts.d.ts +1 -1
  622. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  623. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  624. package/dist/modes/interactive/components/dynamic-border.d.ts +1 -1
  625. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  626. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  627. package/dist/modes/interactive/components/earendil-announcement.d.ts +1 -1
  628. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  629. package/dist/modes/interactive/components/earendil-announcement.js +1 -1
  630. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  631. package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
  632. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  633. package/dist/modes/interactive/components/extension-editor.js +1 -1
  634. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  635. package/dist/modes/interactive/components/extension-input.d.ts +1 -1
  636. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  637. package/dist/modes/interactive/components/extension-input.js +1 -1
  638. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  639. package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
  640. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  641. package/dist/modes/interactive/components/extension-selector.js +1 -1
  642. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  643. package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
  644. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  645. package/dist/modes/interactive/components/first-time-setup.js +1 -1
  646. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  647. package/dist/modes/interactive/components/footer.d.ts +1 -1
  648. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  649. package/dist/modes/interactive/components/footer.js +1 -1
  650. package/dist/modes/interactive/components/footer.js.map +1 -1
  651. package/dist/modes/interactive/components/injected-prompt-message.d.ts +1 -1
  652. package/dist/modes/interactive/components/injected-prompt-message.d.ts.map +1 -1
  653. package/dist/modes/interactive/components/injected-prompt-message.js +1 -1
  654. package/dist/modes/interactive/components/injected-prompt-message.js.map +1 -1
  655. package/dist/modes/interactive/components/keybinding-hints.d.ts +1 -1
  656. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  657. package/dist/modes/interactive/components/keybinding-hints.js +1 -1
  658. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  659. package/dist/modes/interactive/components/login-dialog.d.ts +2 -2
  660. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  661. package/dist/modes/interactive/components/login-dialog.js +1 -1
  662. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  663. package/dist/modes/interactive/components/model-selector.d.ts +2 -2
  664. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  665. package/dist/modes/interactive/components/model-selector.js +2 -2
  666. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  667. package/dist/modes/interactive/components/oauth-selector.d.ts +2 -2
  668. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  669. package/dist/modes/interactive/components/oauth-selector.js +1 -1
  670. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  671. package/dist/modes/interactive/components/processes-selector.d.ts +1 -1
  672. package/dist/modes/interactive/components/processes-selector.d.ts.map +1 -1
  673. package/dist/modes/interactive/components/processes-selector.js +1 -1
  674. package/dist/modes/interactive/components/processes-selector.js.map +1 -1
  675. package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
  676. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  677. package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
  678. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  679. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  680. package/dist/modes/interactive/components/session-selector-search.js +1 -1
  681. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  682. package/dist/modes/interactive/components/session-selector.d.ts +1 -1
  683. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  684. package/dist/modes/interactive/components/session-selector.js +1 -1
  685. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  686. package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
  687. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  688. package/dist/modes/interactive/components/settings-selector.js +1 -1
  689. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  690. package/dist/modes/interactive/components/show-images-selector.d.ts +1 -1
  691. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  692. package/dist/modes/interactive/components/show-images-selector.js +1 -1
  693. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  694. package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
  695. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  696. package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
  697. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  698. package/dist/modes/interactive/components/status-indicator.d.ts +1 -1
  699. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  700. package/dist/modes/interactive/components/status-indicator.js +1 -1
  701. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  702. package/dist/modes/interactive/components/theme-selector.d.ts +1 -1
  703. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  704. package/dist/modes/interactive/components/theme-selector.js +1 -1
  705. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  706. package/dist/modes/interactive/components/thinking-selector.d.ts +2 -2
  707. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  708. package/dist/modes/interactive/components/thinking-selector.js +1 -1
  709. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  710. package/dist/modes/interactive/components/thinking-summary.d.ts +1 -1
  711. package/dist/modes/interactive/components/thinking-summary.d.ts.map +1 -1
  712. package/dist/modes/interactive/components/thinking-summary.js.map +1 -1
  713. package/dist/modes/interactive/components/thinking-tail.d.ts +1 -1
  714. package/dist/modes/interactive/components/thinking-tail.d.ts.map +1 -1
  715. package/dist/modes/interactive/components/thinking-tail.js +1 -1
  716. package/dist/modes/interactive/components/thinking-tail.js.map +1 -1
  717. package/dist/modes/interactive/components/tool-execution.d.ts +1 -1
  718. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  719. package/dist/modes/interactive/components/tool-execution.js +1 -1
  720. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  721. package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
  722. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  723. package/dist/modes/interactive/components/tree-selector.js +1 -1
  724. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  725. package/dist/modes/interactive/components/trust-selector.d.ts +1 -1
  726. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  727. package/dist/modes/interactive/components/trust-selector.js +1 -1
  728. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  729. package/dist/modes/interactive/components/usage-view.d.ts.map +1 -1
  730. package/dist/modes/interactive/components/usage-view.js +1 -1
  731. package/dist/modes/interactive/components/usage-view.js.map +1 -1
  732. package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
  733. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  734. package/dist/modes/interactive/components/user-message-selector.js +1 -1
  735. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  736. package/dist/modes/interactive/components/user-message.d.ts +1 -1
  737. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  738. package/dist/modes/interactive/components/user-message.js +1 -1
  739. package/dist/modes/interactive/components/user-message.js.map +1 -1
  740. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  741. package/dist/modes/interactive/components/visual-truncate.js +1 -1
  742. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  743. package/dist/modes/interactive/interactive-mode.d.ts +1 -1
  744. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  745. package/dist/modes/interactive/interactive-mode.js +29 -4
  746. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  747. package/dist/modes/interactive/smooth-streaming.d.ts +1 -1
  748. package/dist/modes/interactive/smooth-streaming.d.ts.map +1 -1
  749. package/dist/modes/interactive/smooth-streaming.js.map +1 -1
  750. package/dist/modes/interactive/theme/theme-controller.d.ts +1 -1
  751. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  752. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  753. package/dist/modes/interactive/theme/theme.d.ts +2 -2
  754. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  755. package/dist/modes/interactive/theme/theme.js +2 -2
  756. package/dist/modes/interactive/theme/theme.js.map +1 -1
  757. package/dist/modes/print-mode.d.ts +1 -1
  758. package/dist/modes/print-mode.d.ts.map +1 -1
  759. package/dist/modes/print-mode.js.map +1 -1
  760. package/dist/modes/rpc/rpc-client.d.ts +2 -2
  761. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  762. package/dist/modes/rpc/rpc-client.js.map +1 -1
  763. package/dist/modes/rpc/rpc-types.d.ts +2 -2
  764. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  765. package/dist/modes/rpc/rpc-types.js.map +1 -1
  766. package/examples/extensions/auto-commit-on-exit.ts +1 -1
  767. package/examples/extensions/bash-spawn-hook.ts +2 -2
  768. package/examples/extensions/bookmark.ts +1 -1
  769. package/examples/extensions/border-status-editor.ts +3 -3
  770. package/examples/extensions/built-in-tool-renderer.ts +3 -3
  771. package/examples/extensions/claude-rules.ts +1 -1
  772. package/examples/extensions/commands.ts +1 -1
  773. package/examples/extensions/confirm-destructive.ts +1 -1
  774. package/examples/extensions/custom-compaction.ts +3 -3
  775. package/examples/extensions/custom-footer.ts +3 -3
  776. package/examples/extensions/custom-header.ts +2 -2
  777. package/examples/extensions/custom-provider-anthropic/index.ts +2 -2
  778. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  779. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  780. package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
  781. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  782. package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
  783. package/examples/extensions/dirty-repo-guard.ts +1 -1
  784. package/examples/extensions/doom-overlay/doom-component.ts +2 -2
  785. package/examples/extensions/doom-overlay/doom-keys.ts +1 -1
  786. package/examples/extensions/doom-overlay/index.ts +1 -1
  787. package/examples/extensions/dynamic-resources/index.ts +1 -1
  788. package/examples/extensions/dynamic-tools.ts +1 -1
  789. package/examples/extensions/entry-renderer.ts +2 -2
  790. package/examples/extensions/event-bus.ts +1 -1
  791. package/examples/extensions/file-trigger.ts +1 -1
  792. package/examples/extensions/git-checkpoint.ts +1 -1
  793. package/examples/extensions/git-merge-and-resolve.ts +1 -1
  794. package/examples/extensions/github-issue-autocomplete.ts +2 -2
  795. package/examples/extensions/gondolin/index.ts +2 -2
  796. package/examples/extensions/gondolin/package-lock.json +2 -2
  797. package/examples/extensions/gondolin/package.json +1 -1
  798. package/examples/extensions/handoff.ts +4 -4
  799. package/examples/extensions/hello.ts +2 -2
  800. package/examples/extensions/hidden-thinking-label.ts +1 -1
  801. package/examples/extensions/inline-bash.ts +1 -1
  802. package/examples/extensions/input-transform-streaming.ts +1 -1
  803. package/examples/extensions/input-transform.ts +1 -1
  804. package/examples/extensions/interactive-shell.ts +1 -1
  805. package/examples/extensions/kimi-deferred-tools.ts +1 -1
  806. package/examples/extensions/mac-system-theme.ts +1 -1
  807. package/examples/extensions/message-renderer.ts +2 -2
  808. package/examples/extensions/minimal-mode.ts +3 -3
  809. package/examples/extensions/modal-editor.ts +2 -2
  810. package/examples/extensions/model-status.ts +1 -1
  811. package/examples/extensions/notify.ts +1 -1
  812. package/examples/extensions/overlay-qa-tests.ts +3 -3
  813. package/examples/extensions/overlay-test.ts +2 -2
  814. package/examples/extensions/permission-gate.ts +1 -1
  815. package/examples/extensions/pirate.ts +1 -1
  816. package/examples/extensions/plan-mode/index.ts +4 -4
  817. package/examples/extensions/preset.ts +4 -4
  818. package/examples/extensions/project-trust.ts +1 -1
  819. package/examples/extensions/prompt-customizer.ts +1 -1
  820. package/examples/extensions/protected-paths.ts +1 -1
  821. package/examples/extensions/provider-payload.ts +1 -1
  822. package/examples/extensions/qna.ts +3 -3
  823. package/examples/extensions/question.ts +2 -2
  824. package/examples/extensions/questionnaire.ts +2 -2
  825. package/examples/extensions/rainbow-editor.ts +1 -1
  826. package/examples/extensions/reload-runtime.ts +1 -1
  827. package/examples/extensions/rpc-demo.ts +1 -1
  828. package/examples/extensions/sandbox/index.ts +2 -2
  829. package/examples/extensions/send-user-message.ts +1 -1
  830. package/examples/extensions/session-name.ts +1 -1
  831. package/examples/extensions/shutdown-command.ts +1 -1
  832. package/examples/extensions/snake.ts +2 -2
  833. package/examples/extensions/space-invaders.ts +2 -2
  834. package/examples/extensions/ssh.ts +2 -2
  835. package/examples/extensions/status-line.ts +1 -1
  836. package/examples/extensions/structured-output.ts +2 -2
  837. package/examples/extensions/subagent/agents.ts +1 -1
  838. package/examples/extensions/subagent/index.ts +5 -5
  839. package/examples/extensions/summarize.ts +4 -4
  840. package/examples/extensions/system-prompt-header.ts +1 -1
  841. package/examples/extensions/tic-tac-toe.ts +3 -3
  842. package/examples/extensions/timed-confirm.ts +1 -1
  843. package/examples/extensions/titlebar-spinner.ts +1 -1
  844. package/examples/extensions/todo.ts +3 -3
  845. package/examples/extensions/tool-override.ts +2 -2
  846. package/examples/extensions/tools.ts +3 -3
  847. package/examples/extensions/trigger-compact.ts +1 -1
  848. package/examples/extensions/truncated-tool.ts +3 -3
  849. package/examples/extensions/widget-placement.ts +1 -1
  850. package/examples/extensions/with-deps/index.ts +1 -1
  851. package/examples/extensions/with-deps/package-lock.json +2 -2
  852. package/examples/extensions/with-deps/package.json +1 -1
  853. package/examples/extensions/working-indicator.ts +1 -1
  854. package/examples/extensions/working-message-test.ts +1 -1
  855. package/examples/rpc-extension-ui.ts +1 -1
  856. package/examples/sdk/01-minimal.ts +1 -1
  857. package/examples/sdk/02-custom-model.ts +2 -2
  858. package/examples/sdk/03-custom-prompt.ts +1 -1
  859. package/examples/sdk/04-skills.ts +1 -1
  860. package/examples/sdk/05-tools.ts +1 -1
  861. package/examples/sdk/06-extensions.ts +2 -2
  862. package/examples/sdk/07-context-files.ts +1 -1
  863. package/examples/sdk/08-prompt-templates.ts +1 -1
  864. package/examples/sdk/09-api-keys-and-oauth.ts +1 -1
  865. package/examples/sdk/10-settings.ts +1 -1
  866. package/examples/sdk/11-sessions.ts +1 -1
  867. package/examples/sdk/12-full-control.ts +2 -2
  868. package/examples/sdk/13-session-runtime.ts +1 -1
  869. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/commands.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { McpAuthResult, McpConfig, ServerEntry, McpPanelCallbacks, McpPanelResult, ImportKind } from \"./types.ts\";\nimport {\n ensureCompatibilityImports,\n getMcpDiscoverySummary,\n getServerProvenance,\n previewCompatibilityImports,\n previewSharedServerEntry,\n previewStarterProjectConfig,\n writeDirectToolsConfig,\n writeSharedServerEntry,\n writeStarterProjectConfig,\n} from \"./config.ts\";\nimport { lazyConnect, updateMetadataCache, updateStatusBar, getFailureAgeSeconds } from \"./init.ts\";\nimport { loadMetadataCache } from \"./metadata-cache.ts\";\nimport { buildToolMetadata } from \"./tool-metadata.ts\";\nimport { supportsOAuth, authenticate, removeAuth } from \"./mcp-auth-flow.ts\";\nimport { getAuthForUrl } from \"./mcp-auth.ts\";\nimport { loadOnboardingState, markSetupCompleted as persistSetupCompleted, markSharedConfigHintShown } from \"./onboarding-state.ts\";\nimport { openPath } from \"./utils.ts\";\n\nexport async function showStatus(state: McpExtensionState, ctx: ExtensionContext): Promise<void> {\n if (!ctx.hasUI) return;\n\n const lines: string[] = [\"MCP Server Status:\", \"\"];\n\n for (const name of Object.keys(state.config.mcpServers)) {\n const connection = state.manager.getConnection(name);\n const metadata = state.toolMetadata.get(name);\n const toolCount = metadata?.length ?? 0;\n const failedAgo = getFailureAgeSeconds(state, name);\n let status = \"not connected\";\n let statusIcon = \"○\";\n let failed = false;\n\n if (connection?.status === \"connected\") {\n status = \"connected\";\n statusIcon = \"✓\";\n } else if (connection?.status === \"needs-auth\") {\n status = \"needs auth\";\n statusIcon = \"⚠\";\n } else if (failedAgo !== null) {\n status = `failed ${failedAgo}s ago`;\n statusIcon = \"✗\";\n failed = true;\n } else if (metadata !== undefined) {\n status = \"cached\";\n }\n\n const toolSuffix = failed ? \"\" : ` (${toolCount} tools${status === \"cached\" ? \", cached\" : \"\"})`;\n lines.push(`${statusIcon} ${name}: ${status}${toolSuffix}`);\n }\n\n if (Object.keys(state.config.mcpServers).length === 0) {\n lines.push(\"No MCP servers configured\");\n lines.push(\"Run /mcp setup to adopt imports or scaffold a starter .mcp.json\");\n }\n\n ctx.ui.notify(lines.join(\"\\n\"), \"info\");\n}\n\nexport async function showTools(state: McpExtensionState, ctx: ExtensionContext): Promise<void> {\n if (!ctx.hasUI) return;\n\n const allTools = [...state.toolMetadata.values()].flat().map(m => m.name);\n\n if (allTools.length === 0) {\n ctx.ui.notify(\"No MCP tools available\", \"info\");\n return;\n }\n\n const lines = [\n \"MCP Tools:\",\n \"\",\n ...allTools.map(t => ` ${t}`),\n \"\",\n `Total: ${allTools.length} tools`,\n ];\n\n ctx.ui.notify(lines.join(\"\\n\"), \"info\");\n}\n\nexport async function reconnectServers(\n state: McpExtensionState,\n ctx: ExtensionContext,\n targetServer?: string\n): Promise<void> {\n if (targetServer && !state.config.mcpServers[targetServer]) {\n if (ctx.hasUI) {\n ctx.ui.notify(`Server \"${targetServer}\" not found in config`, \"error\");\n }\n return;\n }\n\n const entries = targetServer\n ? [[targetServer, state.config.mcpServers[targetServer]] as [string, ServerEntry]]\n : Object.entries(state.config.mcpServers);\n\n for (const [name, definition] of entries) {\n try {\n await state.manager.close(name);\n\n const connection = await state.manager.connect(name, definition);\n if (connection.status === \"needs-auth\") {\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: ${name} requires OAuth. Run /mcp-auth ${name} first.`, \"warning\");\n }\n continue;\n }\n const prefix = state.config.settings?.toolPrefix ?? \"server\";\n\n const { metadata, failedTools } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n state.toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n state.failureTracker.delete(name);\n\n if (ctx.hasUI) {\n ctx.ui.notify(\n `MCP: Reconnected to ${name} (${connection.tools.length} tools, ${connection.resources.length} resources)`,\n \"info\"\n );\n if (failedTools.length > 0) {\n ctx.ui.notify(`MCP: ${name} - ${failedTools.length} tools skipped`, \"warning\");\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n state.failureTracker.set(name, Date.now());\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: Failed to reconnect to ${name}: ${message}`, \"error\");\n }\n }\n }\n\n updateStatusBar(state);\n}\n\nexport async function authenticateServer(\n serverName: string,\n config: McpConfig,\n ctx: ExtensionContext\n): Promise<McpAuthResult> {\n if (!ctx.hasUI) return { ok: false, message: \"OAuth authentication requires an interactive session.\" };\n\n const definition = config.mcpServers[serverName];\n if (!definition) {\n const message = `Server \"${serverName}\" not found in config`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n if (!supportsOAuth(definition)) {\n const message = `Server \"${serverName}\" does not use OAuth authentication. Set \"auth\": \"oauth\" or omit auth for auto-detection.`;\n ctx.ui.notify(\n `Server \"${serverName}\" does not use OAuth authentication.\\n` +\n `Set \"auth\": \"oauth\" or omit auth for auto-detection.`,\n \"error\"\n );\n return { ok: false, message };\n }\n\n if (!definition.url) {\n const message = `Server \"${serverName}\" has no URL configured (OAuth requires HTTP transport)`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n try {\n ctx.ui.setStatus(\"mcp-auth\", `Authenticating ${serverName}...`);\n const status = await authenticate(serverName, definition.url, definition, {\n onAuthorizationUrl: (authorizationUrl) => {\n ctx.ui.notify(\n `Open this URL to authenticate ${serverName}:\\n\\n${authorizationUrl}\\n\\n` +\n \"After approving, return to Pi; the local callback will complete automatically.\",\n \"info\"\n );\n },\n });\n\n if (status === \"authenticated\") {\n const message = `OAuth authentication successful for \"${serverName}\"! Run /mcp reconnect ${serverName} to connect with the new token.`;\n ctx.ui.notify(\n `OAuth authentication successful for \"${serverName}\"!\\n` +\n `Run /mcp reconnect ${serverName} to connect with the new token.`,\n \"info\"\n );\n return { ok: true, message };\n }\n\n const message = `OAuth authentication failed for \"${serverName}\".`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n ctx.ui.notify(`Failed to authenticate \"${serverName}\": ${message}`, \"error\");\n return { ok: false, message };\n } finally {\n ctx.ui.setStatus(\"mcp-auth\", undefined);\n }\n}\n\nexport async function logoutServer(\n serverName: string,\n state: McpExtensionState,\n ctx: ExtensionContext\n): Promise<{ ok: boolean; message: string }> {\n const definition = state.config.mcpServers[serverName];\n if (!definition) {\n const message = `Server \"${serverName}\" not found in config`;\n if (ctx.hasUI) ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n await removeAuth(serverName);\n await state.manager.close(serverName);\n updateStatusBar(state);\n\n const message = `OAuth credentials cleared for \"${serverName}\". Run /mcp-auth ${serverName} to authenticate again.`;\n if (ctx.hasUI) ctx.ui.notify(message, \"info\");\n return { ok: true, message };\n}\n\nexport interface PanelFlowResult {\n configChanged: boolean;\n}\n\nfunction buildSharedConfigNoticeLines(configOverridePath: string | undefined, cwd: string): { lines: string[]; fingerprint: string | null } {\n const discovery = getMcpDiscoverySummary(configOverridePath, cwd);\n const onboardingState = loadOnboardingState();\n if (!discovery.hasSharedServers || onboardingState.sharedConfigHintShown) {\n return { lines: [], fingerprint: null };\n }\n\n const sharedSources = discovery.sources.filter((source) => source.kind === \"shared\" && source.serverCount > 0);\n const sourceList = sharedSources.map((source) => source.path).join(\", \");\n return {\n lines: [\n `Using standard MCP config from ${sourceList}.`,\n \"Pi only writes compatibility imports and adapter-specific overrides into Pi-owned files when needed.\",\n ],\n fingerprint: discovery.fingerprint,\n };\n}\n\nexport async function openMcpSetup(\n _state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n mode: \"empty\" | \"setup\" = \"setup\",\n): Promise<PanelFlowResult> {\n if (!ctx.hasUI) return { configChanged: false };\n\n const discovery = getMcpDiscoverySummary(configOverridePath, ctx.cwd);\n const onboardingState = loadOnboardingState();\n const { createMcpSetupPanel } = await import(\"./mcp-setup-panel.ts\");\n let configChanged = false;\n\n const callbacks = {\n previewImports: (imports: ImportKind[]) => previewCompatibilityImports(imports, configOverridePath),\n previewStarterProject: () => previewStarterProjectConfig(ctx.cwd),\n previewRepoPrompt: () => {\n const repoPrompt = getMcpDiscoverySummary(configOverridePath, ctx.cwd).repoPrompt;\n if (!repoPrompt.entry || !repoPrompt.targetPath || !repoPrompt.serverName) return null;\n return previewSharedServerEntry(repoPrompt.targetPath, repoPrompt.serverName, repoPrompt.entry);\n },\n adoptImports: async (imports: ImportKind[]) => {\n const result = ensureCompatibilityImports(imports, configOverridePath);\n if (result.added.length > 0) configChanged = true;\n return result;\n },\n scaffoldProjectConfig: async () => {\n const path = writeStarterProjectConfig(ctx.cwd);\n configChanged = true;\n return { path };\n },\n addRepoPrompt: async () => {\n const repoPrompt = getMcpDiscoverySummary(configOverridePath, ctx.cwd).repoPrompt;\n if (!repoPrompt.entry || !repoPrompt.targetPath || !repoPrompt.serverName) {\n throw new Error(\"RepoPrompt is not available to add from this setup screen.\");\n }\n const path = writeSharedServerEntry(repoPrompt.targetPath, repoPrompt.serverName, repoPrompt.entry);\n configChanged = true;\n return { path, serverName: repoPrompt.serverName };\n },\n openPath: async (targetPath: string) => {\n await openPath(pi, targetPath);\n },\n markSetupCompleted: () => {\n persistSetupCompleted(discovery.fingerprint);\n },\n };\n\n return new Promise<PanelFlowResult>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpSetupPanel(discovery, callbacks, { mode, onboardingState, keybindings }, tui, () => {\n done(undefined);\n resolve({ configChanged });\n });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 92 } },\n );\n });\n}\n\nfunction buildMcpPanelCallbacks(\n state: McpExtensionState,\n config: McpConfig,\n ctx: ExtensionContext,\n): McpPanelCallbacks {\n return {\n reconnect: (serverName: string) => lazyConnect(state, serverName),\n canAuthenticate: (serverName: string) => {\n const definition = config.mcpServers[serverName];\n return definition ? supportsOAuth(definition) : false;\n },\n authenticate: (serverName: string) => authenticateServer(serverName, config, ctx),\n getConnectionStatus: (serverName: string) => {\n const definition = config.mcpServers[serverName];\n const connection = state.manager.getConnection(serverName);\n if (connection?.status === \"needs-auth\") {\n return \"needs-auth\";\n }\n if (\n definition?.auth === \"oauth\"\n && definition.url\n && definition.oauth !== false\n && definition.oauth?.grantType !== \"client_credentials\"\n && !getAuthForUrl(serverName, definition.url)?.tokens\n ) {\n return \"needs-auth\";\n }\n if (connection?.status === \"connected\") return \"connected\";\n if (getFailureAgeSeconds(state, serverName) !== null) return \"failed\";\n return \"idle\";\n },\n refreshCacheAfterReconnect: (serverName: string) => {\n const freshCache = loadMetadataCache();\n return freshCache?.servers?.[serverName] ?? null;\n },\n };\n}\n\nexport async function openMcpPanel(\n state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n): Promise<PanelFlowResult> {\n if (Object.keys(state.config.mcpServers).length === 0) {\n return openMcpSetup(state, pi, ctx, configOverridePath, \"empty\");\n }\n\n const config = state.config;\n const cache = loadMetadataCache();\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined ?? configOverridePath;\n const provenanceMap = getServerProvenance(configPath, ctx.cwd);\n const { lines: noticeLines, fingerprint } = buildSharedConfigNoticeLines(configPath, ctx.cwd);\n\n const callbacks = buildMcpPanelCallbacks(state, config, ctx);\n\n const { createMcpPanel } = await import(\"./mcp-panel.ts\");\n let configChanged = false;\n\n await new Promise<void>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpPanel(config, cache, provenanceMap, callbacks, tui, (result: McpPanelResult) => {\n if (!result.cancelled && result.changes.size > 0) {\n writeDirectToolsConfig(result.changes, provenanceMap, config);\n configChanged = true;\n ctx.ui.notify(\"Direct tools updated. Pi will reload after this panel closes.\", \"info\");\n }\n done(undefined);\n resolve();\n }, { noticeLines, keybindings });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 82 } },\n );\n });\n\n if (noticeLines.length > 0 && fingerprint) {\n markSharedConfigHintShown(fingerprint);\n }\n\n return { configChanged };\n}\n\nexport async function openMcpAuthPanel(\n state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n): Promise<PanelFlowResult> {\n if (!ctx.hasUI) return { configChanged: false };\n\n const config = state.config;\n const oauthServers = Object.entries(config.mcpServers).filter(([, definition]) => supportsOAuth(definition));\n if (oauthServers.length === 0) {\n ctx.ui.notify(\"No OAuth-capable MCP servers are configured.\", \"warning\");\n return { configChanged: false };\n }\n\n const cache = loadMetadataCache();\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined ?? configOverridePath;\n const provenanceMap = getServerProvenance(configPath, ctx.cwd);\n const callbacks = buildMcpPanelCallbacks(state, config, ctx);\n const { createMcpPanel } = await import(\"./mcp-panel.ts\");\n\n await new Promise<void>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpPanel(config, cache, provenanceMap, callbacks, tui, () => {\n done(undefined);\n resolve();\n }, {\n authOnly: true,\n keybindings,\n noticeLines: [\"Select an OAuth MCP server and press Enter or ctrl+a to authenticate.\"],\n });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 82 } },\n );\n });\n\n return { configChanged: false };\n}\n"]}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/commands.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext } from \"@ashx-j/lunr\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { McpAuthResult, McpConfig, ServerEntry, McpPanelCallbacks, McpPanelResult, ImportKind } from \"./types.ts\";\nimport {\n ensureCompatibilityImports,\n getMcpDiscoverySummary,\n getServerProvenance,\n previewCompatibilityImports,\n previewSharedServerEntry,\n previewStarterProjectConfig,\n writeDirectToolsConfig,\n writeSharedServerEntry,\n writeStarterProjectConfig,\n} from \"./config.ts\";\nimport { lazyConnect, updateMetadataCache, updateStatusBar, getFailureAgeSeconds } from \"./init.ts\";\nimport { loadMetadataCache } from \"./metadata-cache.ts\";\nimport { buildToolMetadata } from \"./tool-metadata.ts\";\nimport { supportsOAuth, authenticate, removeAuth } from \"./mcp-auth-flow.ts\";\nimport { getAuthForUrl } from \"./mcp-auth.ts\";\nimport { loadOnboardingState, markSetupCompleted as persistSetupCompleted, markSharedConfigHintShown } from \"./onboarding-state.ts\";\nimport { openPath } from \"./utils.ts\";\n\nexport async function showStatus(state: McpExtensionState, ctx: ExtensionContext): Promise<void> {\n if (!ctx.hasUI) return;\n\n const lines: string[] = [\"MCP Server Status:\", \"\"];\n\n for (const name of Object.keys(state.config.mcpServers)) {\n const connection = state.manager.getConnection(name);\n const metadata = state.toolMetadata.get(name);\n const toolCount = metadata?.length ?? 0;\n const failedAgo = getFailureAgeSeconds(state, name);\n let status = \"not connected\";\n let statusIcon = \"○\";\n let failed = false;\n\n if (connection?.status === \"connected\") {\n status = \"connected\";\n statusIcon = \"✓\";\n } else if (connection?.status === \"needs-auth\") {\n status = \"needs auth\";\n statusIcon = \"⚠\";\n } else if (failedAgo !== null) {\n status = `failed ${failedAgo}s ago`;\n statusIcon = \"✗\";\n failed = true;\n } else if (metadata !== undefined) {\n status = \"cached\";\n }\n\n const toolSuffix = failed ? \"\" : ` (${toolCount} tools${status === \"cached\" ? \", cached\" : \"\"})`;\n lines.push(`${statusIcon} ${name}: ${status}${toolSuffix}`);\n }\n\n if (Object.keys(state.config.mcpServers).length === 0) {\n lines.push(\"No MCP servers configured\");\n lines.push(\"Run /mcp setup to adopt imports or scaffold a starter .mcp.json\");\n }\n\n ctx.ui.notify(lines.join(\"\\n\"), \"info\");\n}\n\nexport async function showTools(state: McpExtensionState, ctx: ExtensionContext): Promise<void> {\n if (!ctx.hasUI) return;\n\n const allTools = [...state.toolMetadata.values()].flat().map(m => m.name);\n\n if (allTools.length === 0) {\n ctx.ui.notify(\"No MCP tools available\", \"info\");\n return;\n }\n\n const lines = [\n \"MCP Tools:\",\n \"\",\n ...allTools.map(t => ` ${t}`),\n \"\",\n `Total: ${allTools.length} tools`,\n ];\n\n ctx.ui.notify(lines.join(\"\\n\"), \"info\");\n}\n\nexport async function reconnectServers(\n state: McpExtensionState,\n ctx: ExtensionContext,\n targetServer?: string\n): Promise<void> {\n if (targetServer && !state.config.mcpServers[targetServer]) {\n if (ctx.hasUI) {\n ctx.ui.notify(`Server \"${targetServer}\" not found in config`, \"error\");\n }\n return;\n }\n\n const entries = targetServer\n ? [[targetServer, state.config.mcpServers[targetServer]] as [string, ServerEntry]]\n : Object.entries(state.config.mcpServers);\n\n for (const [name, definition] of entries) {\n try {\n await state.manager.close(name);\n\n const connection = await state.manager.connect(name, definition);\n if (connection.status === \"needs-auth\") {\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: ${name} requires OAuth. Run /mcp-auth ${name} first.`, \"warning\");\n }\n continue;\n }\n const prefix = state.config.settings?.toolPrefix ?? \"server\";\n\n const { metadata, failedTools } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n state.toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n state.failureTracker.delete(name);\n\n if (ctx.hasUI) {\n ctx.ui.notify(\n `MCP: Reconnected to ${name} (${connection.tools.length} tools, ${connection.resources.length} resources)`,\n \"info\"\n );\n if (failedTools.length > 0) {\n ctx.ui.notify(`MCP: ${name} - ${failedTools.length} tools skipped`, \"warning\");\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n state.failureTracker.set(name, Date.now());\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: Failed to reconnect to ${name}: ${message}`, \"error\");\n }\n }\n }\n\n updateStatusBar(state);\n}\n\nexport async function authenticateServer(\n serverName: string,\n config: McpConfig,\n ctx: ExtensionContext\n): Promise<McpAuthResult> {\n if (!ctx.hasUI) return { ok: false, message: \"OAuth authentication requires an interactive session.\" };\n\n const definition = config.mcpServers[serverName];\n if (!definition) {\n const message = `Server \"${serverName}\" not found in config`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n if (!supportsOAuth(definition)) {\n const message = `Server \"${serverName}\" does not use OAuth authentication. Set \"auth\": \"oauth\" or omit auth for auto-detection.`;\n ctx.ui.notify(\n `Server \"${serverName}\" does not use OAuth authentication.\\n` +\n `Set \"auth\": \"oauth\" or omit auth for auto-detection.`,\n \"error\"\n );\n return { ok: false, message };\n }\n\n if (!definition.url) {\n const message = `Server \"${serverName}\" has no URL configured (OAuth requires HTTP transport)`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n try {\n ctx.ui.setStatus(\"mcp-auth\", `Authenticating ${serverName}...`);\n const status = await authenticate(serverName, definition.url, definition, {\n onAuthorizationUrl: (authorizationUrl) => {\n ctx.ui.notify(\n `Open this URL to authenticate ${serverName}:\\n\\n${authorizationUrl}\\n\\n` +\n \"After approving, return to Pi; the local callback will complete automatically.\",\n \"info\"\n );\n },\n });\n\n if (status === \"authenticated\") {\n const message = `OAuth authentication successful for \"${serverName}\"! Run /mcp reconnect ${serverName} to connect with the new token.`;\n ctx.ui.notify(\n `OAuth authentication successful for \"${serverName}\"!\\n` +\n `Run /mcp reconnect ${serverName} to connect with the new token.`,\n \"info\"\n );\n return { ok: true, message };\n }\n\n const message = `OAuth authentication failed for \"${serverName}\".`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n ctx.ui.notify(`Failed to authenticate \"${serverName}\": ${message}`, \"error\");\n return { ok: false, message };\n } finally {\n ctx.ui.setStatus(\"mcp-auth\", undefined);\n }\n}\n\nexport async function logoutServer(\n serverName: string,\n state: McpExtensionState,\n ctx: ExtensionContext\n): Promise<{ ok: boolean; message: string }> {\n const definition = state.config.mcpServers[serverName];\n if (!definition) {\n const message = `Server \"${serverName}\" not found in config`;\n if (ctx.hasUI) ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n await removeAuth(serverName);\n await state.manager.close(serverName);\n updateStatusBar(state);\n\n const message = `OAuth credentials cleared for \"${serverName}\". Run /mcp-auth ${serverName} to authenticate again.`;\n if (ctx.hasUI) ctx.ui.notify(message, \"info\");\n return { ok: true, message };\n}\n\nexport interface PanelFlowResult {\n configChanged: boolean;\n}\n\nfunction buildSharedConfigNoticeLines(configOverridePath: string | undefined, cwd: string): { lines: string[]; fingerprint: string | null } {\n const discovery = getMcpDiscoverySummary(configOverridePath, cwd);\n const onboardingState = loadOnboardingState();\n if (!discovery.hasSharedServers || onboardingState.sharedConfigHintShown) {\n return { lines: [], fingerprint: null };\n }\n\n const sharedSources = discovery.sources.filter((source) => source.kind === \"shared\" && source.serverCount > 0);\n const sourceList = sharedSources.map((source) => source.path).join(\", \");\n return {\n lines: [\n `Using standard MCP config from ${sourceList}.`,\n \"Pi only writes compatibility imports and adapter-specific overrides into Pi-owned files when needed.\",\n ],\n fingerprint: discovery.fingerprint,\n };\n}\n\nexport async function openMcpSetup(\n _state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n mode: \"empty\" | \"setup\" = \"setup\",\n): Promise<PanelFlowResult> {\n if (!ctx.hasUI) return { configChanged: false };\n\n const discovery = getMcpDiscoverySummary(configOverridePath, ctx.cwd);\n const onboardingState = loadOnboardingState();\n const { createMcpSetupPanel } = await import(\"./mcp-setup-panel.ts\");\n let configChanged = false;\n\n const callbacks = {\n previewImports: (imports: ImportKind[]) => previewCompatibilityImports(imports, configOverridePath),\n previewStarterProject: () => previewStarterProjectConfig(ctx.cwd),\n previewRepoPrompt: () => {\n const repoPrompt = getMcpDiscoverySummary(configOverridePath, ctx.cwd).repoPrompt;\n if (!repoPrompt.entry || !repoPrompt.targetPath || !repoPrompt.serverName) return null;\n return previewSharedServerEntry(repoPrompt.targetPath, repoPrompt.serverName, repoPrompt.entry);\n },\n adoptImports: async (imports: ImportKind[]) => {\n const result = ensureCompatibilityImports(imports, configOverridePath);\n if (result.added.length > 0) configChanged = true;\n return result;\n },\n scaffoldProjectConfig: async () => {\n const path = writeStarterProjectConfig(ctx.cwd);\n configChanged = true;\n return { path };\n },\n addRepoPrompt: async () => {\n const repoPrompt = getMcpDiscoverySummary(configOverridePath, ctx.cwd).repoPrompt;\n if (!repoPrompt.entry || !repoPrompt.targetPath || !repoPrompt.serverName) {\n throw new Error(\"RepoPrompt is not available to add from this setup screen.\");\n }\n const path = writeSharedServerEntry(repoPrompt.targetPath, repoPrompt.serverName, repoPrompt.entry);\n configChanged = true;\n return { path, serverName: repoPrompt.serverName };\n },\n openPath: async (targetPath: string) => {\n await openPath(pi, targetPath);\n },\n markSetupCompleted: () => {\n persistSetupCompleted(discovery.fingerprint);\n },\n };\n\n return new Promise<PanelFlowResult>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpSetupPanel(discovery, callbacks, { mode, onboardingState, keybindings }, tui, () => {\n done(undefined);\n resolve({ configChanged });\n });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 92 } },\n );\n });\n}\n\nfunction buildMcpPanelCallbacks(\n state: McpExtensionState,\n config: McpConfig,\n ctx: ExtensionContext,\n): McpPanelCallbacks {\n return {\n reconnect: (serverName: string) => lazyConnect(state, serverName),\n canAuthenticate: (serverName: string) => {\n const definition = config.mcpServers[serverName];\n return definition ? supportsOAuth(definition) : false;\n },\n authenticate: (serverName: string) => authenticateServer(serverName, config, ctx),\n getConnectionStatus: (serverName: string) => {\n const definition = config.mcpServers[serverName];\n const connection = state.manager.getConnection(serverName);\n if (connection?.status === \"needs-auth\") {\n return \"needs-auth\";\n }\n if (\n definition?.auth === \"oauth\"\n && definition.url\n && definition.oauth !== false\n && definition.oauth?.grantType !== \"client_credentials\"\n && !getAuthForUrl(serverName, definition.url)?.tokens\n ) {\n return \"needs-auth\";\n }\n if (connection?.status === \"connected\") return \"connected\";\n if (getFailureAgeSeconds(state, serverName) !== null) return \"failed\";\n return \"idle\";\n },\n refreshCacheAfterReconnect: (serverName: string) => {\n const freshCache = loadMetadataCache();\n return freshCache?.servers?.[serverName] ?? null;\n },\n };\n}\n\nexport async function openMcpPanel(\n state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n): Promise<PanelFlowResult> {\n if (Object.keys(state.config.mcpServers).length === 0) {\n return openMcpSetup(state, pi, ctx, configOverridePath, \"empty\");\n }\n\n const config = state.config;\n const cache = loadMetadataCache();\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined ?? configOverridePath;\n const provenanceMap = getServerProvenance(configPath, ctx.cwd);\n const { lines: noticeLines, fingerprint } = buildSharedConfigNoticeLines(configPath, ctx.cwd);\n\n const callbacks = buildMcpPanelCallbacks(state, config, ctx);\n\n const { createMcpPanel } = await import(\"./mcp-panel.ts\");\n let configChanged = false;\n\n await new Promise<void>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpPanel(config, cache, provenanceMap, callbacks, tui, (result: McpPanelResult) => {\n if (!result.cancelled && result.changes.size > 0) {\n writeDirectToolsConfig(result.changes, provenanceMap, config);\n configChanged = true;\n ctx.ui.notify(\"Direct tools updated. Pi will reload after this panel closes.\", \"info\");\n }\n done(undefined);\n resolve();\n }, { noticeLines, keybindings });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 82 } },\n );\n });\n\n if (noticeLines.length > 0 && fingerprint) {\n markSharedConfigHintShown(fingerprint);\n }\n\n return { configChanged };\n}\n\nexport async function openMcpAuthPanel(\n state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n): Promise<PanelFlowResult> {\n if (!ctx.hasUI) return { configChanged: false };\n\n const config = state.config;\n const oauthServers = Object.entries(config.mcpServers).filter(([, definition]) => supportsOAuth(definition));\n if (oauthServers.length === 0) {\n ctx.ui.notify(\"No OAuth-capable MCP servers are configured.\", \"warning\");\n return { configChanged: false };\n }\n\n const cache = loadMetadataCache();\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined ?? configOverridePath;\n const provenanceMap = getServerProvenance(configPath, ctx.cwd);\n const callbacks = buildMcpPanelCallbacks(state, config, ctx);\n const { createMcpPanel } = await import(\"./mcp-panel.ts\");\n\n await new Promise<void>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpPanel(config, cache, provenanceMap, callbacks, tui, () => {\n done(undefined);\n resolve();\n }, {\n authOnly: true,\n keybindings,\n noticeLines: [\"Select an OAuth MCP server and press Enter or ctrl+a to authenticate.\"],\n });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 82 } },\n );\n });\n\n return { configChanged: false };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { AgentToolResult, AgentToolUpdateCallback, ExtensionContext } from "@earendil-works/pi-coding-agent";
1
+ import type { AgentToolResult, AgentToolUpdateCallback, ExtensionContext } from "@ashx-j/lunr";
2
2
  import type { McpExtensionState } from "./state.ts";
3
3
  import type { DirectToolSpec, McpConfig } from "./types.ts";
4
4
  import type { MetadataCache } from "./metadata-cache.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"direct-tools.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/direct-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAElH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAc,MAAM,YAAY,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAyEzD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,aAAa,GAAG,IAAI,EAC3B,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,EACnC,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,cAAc,EAAE,CAoGlB;AAED,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,aAAa,GAAG,IAAI,GAC1B,MAAM,EAAE,CAkBV;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,aAAa,GAAG,IAAI,EAC3B,WAAW,EAAE,cAAc,EAAE,GAC5B,MAAM,CAsDR;AAED,KAAK,iBAAiB,GAAG,CACvB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,QAAQ,EAAE,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,EACtE,GAAG,EAAE,gBAAgB,KAClB,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAEvD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,iBAAiB,GAAG,IAAI,EACxC,cAAc,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,EACvD,IAAI,EAAE,cAAc,GACnB,iBAAiB,CAuKnB","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult, AgentToolUpdateCallback, ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { UrlElicitationRequiredError } from \"@modelcontextprotocol/sdk/types.js\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { DirectToolSpec, McpConfig, McpContent } from \"./types.ts\";\nimport type { MetadataCache } from \"./metadata-cache.ts\";\nimport { lazyConnect, getFailureAgeSeconds } from \"./init.ts\";\nimport { abortable, throwIfAborted } from \"./abort.ts\";\nimport { isServerCacheValid } from \"./metadata-cache.ts\";\nimport { formatSchema } from \"./tool-metadata.ts\";\nimport { resolveMcpResultContent, transformMcpContent } from \"./tool-registrar.ts\";\nimport { guardMcpOutput, guardedMcpDetails, resolveMcpOutputGuardOptions } from \"./mcp-output-guard.ts\";\nimport { maybeStartUiSession, type UiSessionRuntime } from \"./ui-session.ts\";\nimport { formatToolName, isToolExcluded } from \"./types.ts\";\nimport { resourceNameToToolName } from \"./resource-tools.ts\";\nimport { authenticate, supportsOAuth } from \"./mcp-auth-flow.ts\";\nimport { formatAuthRequiredMessage } from \"./utils.ts\";\n\nconst BUILTIN_NAMES = new Set([\"read\", \"bash\", \"edit\", \"write\", \"grep\", \"find\", \"ls\", \"mcp\"]);\n\ntype DirectAutoAuthResult =\n | { status: \"skipped\" }\n | { status: \"success\" }\n | { status: \"failed\"; message: string };\n\nfunction getDirectAuthRequiredMessage(\n state: McpExtensionState,\n serverName: string,\n defaultMessage = `MCP server \"${serverName}\" requires OAuth authentication. Run mcp({ action: \"auth-start\", server: \"${serverName}\" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`,\n): string {\n return formatAuthRequiredMessage(state.config, serverName, defaultMessage);\n}\n\nfunction getDirectAuthFailedMessage(state: McpExtensionState, serverName: string, message: string): string {\n const customGuidance = state.config.settings?.authRequiredMessage;\n if (customGuidance) {\n return `OAuth authentication failed for \"${serverName}\": ${message}. ${getDirectAuthRequiredMessage(state, serverName)}`;\n }\n return `OAuth authentication failed for \"${serverName}\": ${message}. Run mcp({ action: \"auth-start\", server: \"${serverName}\" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`;\n}\n\nasync function attemptDirectAutoAuth(\n state: McpExtensionState,\n serverName: string,\n): Promise<DirectAutoAuthResult> {\n if (state.config.settings?.autoAuth !== true) {\n return { status: \"skipped\" };\n }\n\n const definition = state.config.mcpServers[serverName];\n if (!definition || !supportsOAuth(definition) || !definition.url) {\n return { status: \"skipped\" };\n }\n\n const grantType = definition.oauth ? definition.oauth.grantType ?? \"authorization_code\" : \"authorization_code\";\n if (!state.ui && grantType !== \"client_credentials\") {\n return {\n status: \"failed\",\n message: getDirectAuthRequiredMessage(\n state,\n serverName,\n `MCP server \"${serverName}\" requires OAuth authentication. Run mcp({ action: \"auth-start\", server: \"${serverName}\" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`,\n ),\n };\n }\n\n try {\n await authenticate(serverName, definition.url, definition);\n return { status: \"success\" };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n status: \"failed\",\n message: getDirectAuthFailedMessage(state, serverName, message),\n };\n }\n}\n\nexport function resolveDirectTools(\n config: McpConfig,\n cache: MetadataCache | null,\n prefix: \"server\" | \"none\" | \"short\",\n envOverride?: string[],\n): DirectToolSpec[] {\n const specs: DirectToolSpec[] = [];\n if (!cache) return specs;\n\n const seenNames = new Set<string>();\n\n const envServers = new Set<string>();\n const envTools = new Map<string, Set<string>>();\n if (envOverride) {\n for (let item of envOverride) {\n item = item.replace(/\\/+$/, \"\");\n if (item.includes(\"/\")) {\n const [server, tool] = item.split(\"/\", 2);\n if (server && tool) {\n if (!envTools.has(server)) envTools.set(server, new Set());\n envTools.get(server)!.add(tool);\n } else if (server) {\n envServers.add(server);\n }\n } else if (item) {\n envServers.add(item);\n }\n }\n }\n\n const globalDirect = config.settings?.directTools;\n\n for (const [serverName, definition] of Object.entries(config.mcpServers)) {\n const serverCache = cache.servers[serverName];\n if (!serverCache || !isServerCacheValid(serverCache, definition)) continue;\n\n let toolFilter: true | string[] | false = false;\n\n if (envOverride) {\n if (envServers.has(serverName)) {\n toolFilter = true;\n } else if (envTools.has(serverName)) {\n toolFilter = [...envTools.get(serverName)!];\n }\n } else {\n if (definition.directTools !== undefined) {\n toolFilter = definition.directTools;\n } else if (globalDirect) {\n toolFilter = globalDirect;\n }\n }\n\n if (!toolFilter) continue;\n\n for (const tool of serverCache.tools ?? []) {\n if (toolFilter !== true && !toolFilter.includes(tool.name)) continue;\n if (isToolExcluded(tool.name, serverName, prefix, definition.excludeTools)) continue;\n const prefixedName = formatToolName(tool.name, serverName, prefix);\n if (BUILTIN_NAMES.has(prefixedName)) {\n console.warn(`MCP: skipping direct tool \"${prefixedName}\" (collides with builtin)`);\n continue;\n }\n if (seenNames.has(prefixedName)) {\n console.warn(`MCP: skipping duplicate direct tool \"${prefixedName}\" from \"${serverName}\"`);\n continue;\n }\n seenNames.add(prefixedName);\n specs.push({\n serverName,\n originalName: tool.name,\n prefixedName,\n description: tool.description ?? \"\",\n inputSchema: tool.inputSchema,\n uiResourceUri: tool.uiResourceUri,\n uiStreamMode: tool.uiStreamMode,\n });\n }\n\n if (definition.exposeResources !== false) {\n for (const resource of serverCache.resources ?? []) {\n const baseName = `get_${resourceNameToToolName(resource.name)}`;\n if (toolFilter !== true && !toolFilter.includes(baseName)) continue;\n if (isToolExcluded(baseName, serverName, prefix, definition.excludeTools)) continue;\n const prefixedName = formatToolName(baseName, serverName, prefix);\n if (BUILTIN_NAMES.has(prefixedName)) {\n console.warn(`MCP: skipping direct resource tool \"${prefixedName}\" (collides with builtin)`);\n continue;\n }\n if (seenNames.has(prefixedName)) {\n console.warn(`MCP: skipping duplicate direct resource tool \"${prefixedName}\" from \"${serverName}\"`);\n continue;\n }\n seenNames.add(prefixedName);\n specs.push({\n serverName,\n originalName: baseName,\n prefixedName,\n description: resource.description ?? `Read resource: ${resource.uri}`,\n resourceUri: resource.uri,\n });\n }\n }\n }\n\n return specs;\n}\n\nexport function getMissingConfiguredDirectToolServers(\n config: McpConfig,\n cache: MetadataCache | null,\n): string[] {\n const missing: string[] = [];\n const globalDirect = config.settings?.directTools;\n\n for (const [serverName, definition] of Object.entries(config.mcpServers)) {\n const hasDirectTools = definition.directTools !== undefined\n ? !!definition.directTools\n : !!globalDirect;\n\n if (!hasDirectTools) continue;\n\n const serverCache = cache?.servers?.[serverName];\n if (!serverCache || !isServerCacheValid(serverCache, definition)) {\n missing.push(serverName);\n }\n }\n\n return missing;\n}\n\nexport function buildProxyDescription(\n config: McpConfig,\n cache: MetadataCache | null,\n directSpecs: DirectToolSpec[],\n): string {\n const prefix = config.settings?.toolPrefix ?? \"server\";\n let desc = `MCP gateway - connect to MCP servers and call their tools. Non-MCP Pi tools should be called directly, not through mcp.\\n`;\n\n const directByServer = new Map<string, number>();\n for (const spec of directSpecs) {\n directByServer.set(spec.serverName, (directByServer.get(spec.serverName) ?? 0) + 1);\n }\n if (directByServer.size > 0) {\n const parts = [...directByServer.entries()].map(\n ([server, count]) => `${server} (${count})`,\n );\n desc += `\\nDirect tools available (call as normal tools): ${parts.join(\", \")}\\n`;\n }\n\n const serverSummaries: string[] = [];\n for (const serverName of Object.keys(config.mcpServers)) {\n const entry = cache?.servers?.[serverName];\n const definition = config.mcpServers[serverName];\n const toolCount = (entry?.tools ?? []).filter(\n (tool) => !isToolExcluded(tool.name, serverName, prefix, definition.excludeTools),\n ).length;\n const resourceCount = definition?.exposeResources !== false\n ? (entry?.resources ?? []).filter((resource) => {\n const baseName = `get_${resourceNameToToolName(resource.name)}`;\n return !isToolExcluded(baseName, serverName, prefix, definition.excludeTools);\n }).length\n : 0;\n const totalItems = toolCount + resourceCount;\n if (totalItems === 0) continue;\n const directCount = directByServer.get(serverName) ?? 0;\n const proxyCount = totalItems - directCount;\n if (proxyCount > 0) {\n serverSummaries.push(`${serverName} (${proxyCount} tools)`);\n }\n }\n\n if (serverSummaries.length > 0) {\n desc += `\\nServers: ${serverSummaries.join(\", \")}\\n`;\n }\n\n desc += `\\nUsage:\\n`;\n desc += ` mcp({ }) → Show server status\\n`;\n desc += ` mcp({ server: \"name\" }) → List tools from server\\n`;\n desc += ` mcp({ search: \"query\" }) → Search MCP tools by name/description\\n`;\n desc += ` mcp({ describe: \"tool_name\" }) → Show tool details and parameters\\n`;\n desc += ` mcp({ connect: \"server-name\" }) → Connect to a server and refresh metadata\\n`;\n desc += ` mcp({ tool: \"name\", args: '{\"key\": \"value\"}' }) → Call a tool (args is JSON string)\\n`;\n desc += ` mcp({ action: \"ui-messages\" }) → Retrieve accumulated messages from completed UI sessions\\n`;\n desc += ` mcp({ action: \"auth-start\", server: \"name\" }) → Start manual OAuth and get a browser URL\\n`;\n desc += ` mcp({ action: \"auth-complete\", server: \"name\", args: '{\"redirectUrl\":\"...\"}' }) → Complete manual OAuth\\n`;\n desc += `\\nMode: action > tool (call) > connect > describe > search > server (list) > nothing (status)`;\n\n return desc;\n}\n\ntype DirectToolExecute = (\n toolCallId: string,\n params: Record<string, unknown>,\n signal: AbortSignal | undefined,\n onUpdate: AgentToolUpdateCallback<Record<string, unknown>> | undefined,\n ctx: ExtensionContext,\n) => Promise<AgentToolResult<Record<string, unknown>>>;\n\nexport function createDirectToolExecutor(\n getState: () => McpExtensionState | null,\n getInitPromise: () => Promise<McpExtensionState> | null,\n spec: DirectToolSpec\n): DirectToolExecute {\n return async function execute(_toolCallId, params, signal) {\n throwIfAborted(signal);\n let state = getState();\n const initPromise = getInitPromise();\n\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: \"text\" as const, text: `MCP initialization failed: ${message}` }],\n details: { error: \"init_failed\", message },\n };\n }\n }\n if (!state) {\n return {\n content: [{ type: \"text\" as const, text: \"MCP not initialized\" }],\n details: { error: \"not_initialized\" },\n };\n }\n\n let connected = await lazyConnect(state, spec.serverName, signal);\n let autoAuthAttempted = false;\n\n if (!connected && state.manager.getConnection(spec.serverName)?.status === \"needs-auth\") {\n autoAuthAttempted = true;\n const autoAuth = await attemptDirectAutoAuth(state, spec.serverName);\n if (autoAuth.status === \"failed\") {\n return {\n content: [{ type: \"text\" as const, text: autoAuth.message }],\n details: { error: \"auth_required\", server: spec.serverName, message: autoAuth.message },\n };\n }\n if (autoAuth.status === \"success\") {\n await state.manager.close(spec.serverName);\n state.failureTracker.delete(spec.serverName);\n connected = await lazyConnect(state, spec.serverName, signal);\n }\n }\n\n if (!connected) {\n const authConnection = state.manager.getConnection(spec.serverName);\n if (authConnection?.status === \"needs-auth\") {\n const message = getDirectAuthRequiredMessage(state, spec.serverName);\n return {\n content: [{ type: \"text\" as const, text: message }],\n details: { error: \"auth_required\", server: spec.serverName, message, autoAuthAttempted },\n };\n }\n const failedAgo = getFailureAgeSeconds(state, spec.serverName);\n return {\n content: [{ type: \"text\" as const, text: `MCP server \"${spec.serverName}\" not available${failedAgo !== null ? ` (failed ${failedAgo}s ago)` : \"\"}` }],\n details: { error: \"server_unavailable\", server: spec.serverName },\n };\n }\n\n const connection = state.manager.getConnection(spec.serverName);\n if (!connection || connection.status !== \"connected\") {\n return {\n content: [{ type: \"text\" as const, text: `MCP server \"${spec.serverName}\" not connected` }],\n details: { error: \"not_connected\", server: spec.serverName },\n };\n }\n\n let uiSession: UiSessionRuntime | null = null;\n const requestOptions = state.manager.getRequestOptions?.(spec.serverName, signal) ?? (signal ? { signal } : undefined);\n\n const outputGuardOptions = resolveMcpOutputGuardOptions(state.config.settings);\n\n try {\n state.manager.touch(spec.serverName);\n state.manager.incrementInFlight(spec.serverName);\n\n if (spec.resourceUri) {\n const result = await connection.client.readResource({ uri: spec.resourceUri }, requestOptions);\n const content = (result.contents ?? []).map(c => ({\n type: \"text\" as const,\n text: \"text\" in c ? c.text : (\"blob\" in c ? `[Binary data: ${(c as { mimeType?: string }).mimeType ?? \"unknown\"}]` : JSON.stringify(c)),\n }));\n const guarded = await guardMcpOutput(content.length > 0 ? content : [{ type: \"text\" as const, text: \"(empty resource)\" }], outputGuardOptions);\n return {\n content: guarded.content,\n details: { server: spec.serverName, resourceUri: spec.resourceUri, ...guardedMcpDetails(guarded) },\n };\n }\n\n const hasUi = !!spec.uiResourceUri;\n uiSession = hasUi\n ? await maybeStartUiSession(state, {\n serverName: spec.serverName,\n toolName: spec.originalName,\n toolArgs: params ?? {},\n uiResourceUri: spec.uiResourceUri!,\n streamMode: spec.uiStreamMode,\n })\n : null;\n\n const resultPromise = connection.client.callTool({\n name: spec.originalName,\n arguments: params ?? {},\n _meta: uiSession?.requestMeta,\n }, undefined, requestOptions);\n\n const result = await abortable(resultPromise, signal);\n uiSession?.sendToolResult(result as unknown as import(\"@modelcontextprotocol/sdk/types.js\").CallToolResult);\n\n if (result.isError) {\n const mcpContent = (result.content ?? []) as McpContent[];\n const content = transformMcpContent(mcpContent);\n const outputContent = content.length > 0 ? content : [{ type: \"text\" as const, text: \"(empty result)\" }];\n const schemaText = spec.inputSchema ? `\\n\\nExpected parameters:\\n${formatSchema(spec.inputSchema)}` : \"\";\n const guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions, prefix: \"Error: \", suffix: schemaText, emptyTextFallback: \"Tool execution failed\" });\n return {\n content: guarded.content,\n details: { error: \"tool_error\", server: spec.serverName, ...guardedMcpDetails(guarded) },\n };\n }\n\n const content = resolveMcpResultContent(result as Record<string, unknown>);\n const outputContent = content.length > 0 ? content : [{ type: \"text\" as const, text: \"(empty result)\" }];\n if (hasUi) {\n const uiMessage = uiSession?.reused\n ? \"Updated the open UI.\"\n : \"📺 Interactive UI is now open in your browser. I'll respond to your prompts and intents as you interact with it.\";\n const guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions, suffix: `\\n\\n${uiMessage}` });\n return {\n content: guarded.content,\n details: { server: spec.serverName, tool: spec.originalName, uiOpen: true, ...guardedMcpDetails(guarded) },\n };\n }\n\n const guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions });\n return {\n content: guarded.content,\n details: { server: spec.serverName, tool: spec.originalName, ...guardedMcpDetails(guarded) },\n };\n } catch (error) {\n if (error instanceof UrlElicitationRequiredError) {\n const action = await state.manager.handleUrlElicitationRequired(spec.serverName, error);\n const message = action === \"accept\"\n ? \"The original MCP tool did not run. Complete the opened browser interaction, then retry the tool.\"\n : `The URL interaction was ${action === \"decline\" ? \"declined\" : \"cancelled\"}.`;\n uiSession?.sendToolCancelled(message);\n return {\n content: [{ type: \"text\" as const, text: message }],\n details: { error: \"url_elicitation_required\", server: spec.serverName, action },\n };\n }\n const message = error instanceof Error ? error.message : String(error);\n uiSession?.sendToolCancelled(message);\n const schemaText = spec.inputSchema ? `\\n\\nExpected parameters:\\n${formatSchema(spec.inputSchema)}` : \"\";\n const guarded = await guardMcpOutput([{ type: \"text\" as const, text: message }], { ...outputGuardOptions, prefix: \"Failed to call tool: \", suffix: schemaText });\n return {\n content: guarded.content,\n details: { error: \"call_failed\", server: spec.serverName, ...guardedMcpDetails(guarded) },\n };\n } finally {\n if (uiSession?.reused) {\n uiSession.close();\n }\n state.manager.decrementInFlight(spec.serverName);\n state.manager.touch(spec.serverName);\n }\n };\n}\n"]}
1
+ {"version":3,"file":"direct-tools.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/direct-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAElH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAc,MAAM,YAAY,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAyEzD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,aAAa,GAAG,IAAI,EAC3B,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,EACnC,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,cAAc,EAAE,CAoGlB;AAED,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,aAAa,GAAG,IAAI,GAC1B,MAAM,EAAE,CAkBV;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,aAAa,GAAG,IAAI,EAC3B,WAAW,EAAE,cAAc,EAAE,GAC5B,MAAM,CAsDR;AAED,KAAK,iBAAiB,GAAG,CACvB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,QAAQ,EAAE,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,EACtE,GAAG,EAAE,gBAAgB,KAClB,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAEvD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,iBAAiB,GAAG,IAAI,EACxC,cAAc,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,EACvD,IAAI,EAAE,cAAc,GACnB,iBAAiB,CAuKnB","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult, AgentToolUpdateCallback, ExtensionContext } from \"@ashx-j/lunr\";\nimport { UrlElicitationRequiredError } from \"@modelcontextprotocol/sdk/types.js\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { DirectToolSpec, McpConfig, McpContent } from \"./types.ts\";\nimport type { MetadataCache } from \"./metadata-cache.ts\";\nimport { lazyConnect, getFailureAgeSeconds } from \"./init.ts\";\nimport { abortable, throwIfAborted } from \"./abort.ts\";\nimport { isServerCacheValid } from \"./metadata-cache.ts\";\nimport { formatSchema } from \"./tool-metadata.ts\";\nimport { resolveMcpResultContent, transformMcpContent } from \"./tool-registrar.ts\";\nimport { guardMcpOutput, guardedMcpDetails, resolveMcpOutputGuardOptions } from \"./mcp-output-guard.ts\";\nimport { maybeStartUiSession, type UiSessionRuntime } from \"./ui-session.ts\";\nimport { formatToolName, isToolExcluded } from \"./types.ts\";\nimport { resourceNameToToolName } from \"./resource-tools.ts\";\nimport { authenticate, supportsOAuth } from \"./mcp-auth-flow.ts\";\nimport { formatAuthRequiredMessage } from \"./utils.ts\";\n\nconst BUILTIN_NAMES = new Set([\"read\", \"bash\", \"edit\", \"write\", \"grep\", \"find\", \"ls\", \"mcp\"]);\n\ntype DirectAutoAuthResult =\n | { status: \"skipped\" }\n | { status: \"success\" }\n | { status: \"failed\"; message: string };\n\nfunction getDirectAuthRequiredMessage(\n state: McpExtensionState,\n serverName: string,\n defaultMessage = `MCP server \"${serverName}\" requires OAuth authentication. Run mcp({ action: \"auth-start\", server: \"${serverName}\" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`,\n): string {\n return formatAuthRequiredMessage(state.config, serverName, defaultMessage);\n}\n\nfunction getDirectAuthFailedMessage(state: McpExtensionState, serverName: string, message: string): string {\n const customGuidance = state.config.settings?.authRequiredMessage;\n if (customGuidance) {\n return `OAuth authentication failed for \"${serverName}\": ${message}. ${getDirectAuthRequiredMessage(state, serverName)}`;\n }\n return `OAuth authentication failed for \"${serverName}\": ${message}. Run mcp({ action: \"auth-start\", server: \"${serverName}\" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`;\n}\n\nasync function attemptDirectAutoAuth(\n state: McpExtensionState,\n serverName: string,\n): Promise<DirectAutoAuthResult> {\n if (state.config.settings?.autoAuth !== true) {\n return { status: \"skipped\" };\n }\n\n const definition = state.config.mcpServers[serverName];\n if (!definition || !supportsOAuth(definition) || !definition.url) {\n return { status: \"skipped\" };\n }\n\n const grantType = definition.oauth ? definition.oauth.grantType ?? \"authorization_code\" : \"authorization_code\";\n if (!state.ui && grantType !== \"client_credentials\") {\n return {\n status: \"failed\",\n message: getDirectAuthRequiredMessage(\n state,\n serverName,\n `MCP server \"${serverName}\" requires OAuth authentication. Run mcp({ action: \"auth-start\", server: \"${serverName}\" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`,\n ),\n };\n }\n\n try {\n await authenticate(serverName, definition.url, definition);\n return { status: \"success\" };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n status: \"failed\",\n message: getDirectAuthFailedMessage(state, serverName, message),\n };\n }\n}\n\nexport function resolveDirectTools(\n config: McpConfig,\n cache: MetadataCache | null,\n prefix: \"server\" | \"none\" | \"short\",\n envOverride?: string[],\n): DirectToolSpec[] {\n const specs: DirectToolSpec[] = [];\n if (!cache) return specs;\n\n const seenNames = new Set<string>();\n\n const envServers = new Set<string>();\n const envTools = new Map<string, Set<string>>();\n if (envOverride) {\n for (let item of envOverride) {\n item = item.replace(/\\/+$/, \"\");\n if (item.includes(\"/\")) {\n const [server, tool] = item.split(\"/\", 2);\n if (server && tool) {\n if (!envTools.has(server)) envTools.set(server, new Set());\n envTools.get(server)!.add(tool);\n } else if (server) {\n envServers.add(server);\n }\n } else if (item) {\n envServers.add(item);\n }\n }\n }\n\n const globalDirect = config.settings?.directTools;\n\n for (const [serverName, definition] of Object.entries(config.mcpServers)) {\n const serverCache = cache.servers[serverName];\n if (!serverCache || !isServerCacheValid(serverCache, definition)) continue;\n\n let toolFilter: true | string[] | false = false;\n\n if (envOverride) {\n if (envServers.has(serverName)) {\n toolFilter = true;\n } else if (envTools.has(serverName)) {\n toolFilter = [...envTools.get(serverName)!];\n }\n } else {\n if (definition.directTools !== undefined) {\n toolFilter = definition.directTools;\n } else if (globalDirect) {\n toolFilter = globalDirect;\n }\n }\n\n if (!toolFilter) continue;\n\n for (const tool of serverCache.tools ?? []) {\n if (toolFilter !== true && !toolFilter.includes(tool.name)) continue;\n if (isToolExcluded(tool.name, serverName, prefix, definition.excludeTools)) continue;\n const prefixedName = formatToolName(tool.name, serverName, prefix);\n if (BUILTIN_NAMES.has(prefixedName)) {\n console.warn(`MCP: skipping direct tool \"${prefixedName}\" (collides with builtin)`);\n continue;\n }\n if (seenNames.has(prefixedName)) {\n console.warn(`MCP: skipping duplicate direct tool \"${prefixedName}\" from \"${serverName}\"`);\n continue;\n }\n seenNames.add(prefixedName);\n specs.push({\n serverName,\n originalName: tool.name,\n prefixedName,\n description: tool.description ?? \"\",\n inputSchema: tool.inputSchema,\n uiResourceUri: tool.uiResourceUri,\n uiStreamMode: tool.uiStreamMode,\n });\n }\n\n if (definition.exposeResources !== false) {\n for (const resource of serverCache.resources ?? []) {\n const baseName = `get_${resourceNameToToolName(resource.name)}`;\n if (toolFilter !== true && !toolFilter.includes(baseName)) continue;\n if (isToolExcluded(baseName, serverName, prefix, definition.excludeTools)) continue;\n const prefixedName = formatToolName(baseName, serverName, prefix);\n if (BUILTIN_NAMES.has(prefixedName)) {\n console.warn(`MCP: skipping direct resource tool \"${prefixedName}\" (collides with builtin)`);\n continue;\n }\n if (seenNames.has(prefixedName)) {\n console.warn(`MCP: skipping duplicate direct resource tool \"${prefixedName}\" from \"${serverName}\"`);\n continue;\n }\n seenNames.add(prefixedName);\n specs.push({\n serverName,\n originalName: baseName,\n prefixedName,\n description: resource.description ?? `Read resource: ${resource.uri}`,\n resourceUri: resource.uri,\n });\n }\n }\n }\n\n return specs;\n}\n\nexport function getMissingConfiguredDirectToolServers(\n config: McpConfig,\n cache: MetadataCache | null,\n): string[] {\n const missing: string[] = [];\n const globalDirect = config.settings?.directTools;\n\n for (const [serverName, definition] of Object.entries(config.mcpServers)) {\n const hasDirectTools = definition.directTools !== undefined\n ? !!definition.directTools\n : !!globalDirect;\n\n if (!hasDirectTools) continue;\n\n const serverCache = cache?.servers?.[serverName];\n if (!serverCache || !isServerCacheValid(serverCache, definition)) {\n missing.push(serverName);\n }\n }\n\n return missing;\n}\n\nexport function buildProxyDescription(\n config: McpConfig,\n cache: MetadataCache | null,\n directSpecs: DirectToolSpec[],\n): string {\n const prefix = config.settings?.toolPrefix ?? \"server\";\n let desc = `MCP gateway - connect to MCP servers and call their tools. Non-MCP Pi tools should be called directly, not through mcp.\\n`;\n\n const directByServer = new Map<string, number>();\n for (const spec of directSpecs) {\n directByServer.set(spec.serverName, (directByServer.get(spec.serverName) ?? 0) + 1);\n }\n if (directByServer.size > 0) {\n const parts = [...directByServer.entries()].map(\n ([server, count]) => `${server} (${count})`,\n );\n desc += `\\nDirect tools available (call as normal tools): ${parts.join(\", \")}\\n`;\n }\n\n const serverSummaries: string[] = [];\n for (const serverName of Object.keys(config.mcpServers)) {\n const entry = cache?.servers?.[serverName];\n const definition = config.mcpServers[serverName];\n const toolCount = (entry?.tools ?? []).filter(\n (tool) => !isToolExcluded(tool.name, serverName, prefix, definition.excludeTools),\n ).length;\n const resourceCount = definition?.exposeResources !== false\n ? (entry?.resources ?? []).filter((resource) => {\n const baseName = `get_${resourceNameToToolName(resource.name)}`;\n return !isToolExcluded(baseName, serverName, prefix, definition.excludeTools);\n }).length\n : 0;\n const totalItems = toolCount + resourceCount;\n if (totalItems === 0) continue;\n const directCount = directByServer.get(serverName) ?? 0;\n const proxyCount = totalItems - directCount;\n if (proxyCount > 0) {\n serverSummaries.push(`${serverName} (${proxyCount} tools)`);\n }\n }\n\n if (serverSummaries.length > 0) {\n desc += `\\nServers: ${serverSummaries.join(\", \")}\\n`;\n }\n\n desc += `\\nUsage:\\n`;\n desc += ` mcp({ }) → Show server status\\n`;\n desc += ` mcp({ server: \"name\" }) → List tools from server\\n`;\n desc += ` mcp({ search: \"query\" }) → Search MCP tools by name/description\\n`;\n desc += ` mcp({ describe: \"tool_name\" }) → Show tool details and parameters\\n`;\n desc += ` mcp({ connect: \"server-name\" }) → Connect to a server and refresh metadata\\n`;\n desc += ` mcp({ tool: \"name\", args: '{\"key\": \"value\"}' }) → Call a tool (args is JSON string)\\n`;\n desc += ` mcp({ action: \"ui-messages\" }) → Retrieve accumulated messages from completed UI sessions\\n`;\n desc += ` mcp({ action: \"auth-start\", server: \"name\" }) → Start manual OAuth and get a browser URL\\n`;\n desc += ` mcp({ action: \"auth-complete\", server: \"name\", args: '{\"redirectUrl\":\"...\"}' }) → Complete manual OAuth\\n`;\n desc += `\\nMode: action > tool (call) > connect > describe > search > server (list) > nothing (status)`;\n\n return desc;\n}\n\ntype DirectToolExecute = (\n toolCallId: string,\n params: Record<string, unknown>,\n signal: AbortSignal | undefined,\n onUpdate: AgentToolUpdateCallback<Record<string, unknown>> | undefined,\n ctx: ExtensionContext,\n) => Promise<AgentToolResult<Record<string, unknown>>>;\n\nexport function createDirectToolExecutor(\n getState: () => McpExtensionState | null,\n getInitPromise: () => Promise<McpExtensionState> | null,\n spec: DirectToolSpec\n): DirectToolExecute {\n return async function execute(_toolCallId, params, signal) {\n throwIfAborted(signal);\n let state = getState();\n const initPromise = getInitPromise();\n\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: \"text\" as const, text: `MCP initialization failed: ${message}` }],\n details: { error: \"init_failed\", message },\n };\n }\n }\n if (!state) {\n return {\n content: [{ type: \"text\" as const, text: \"MCP not initialized\" }],\n details: { error: \"not_initialized\" },\n };\n }\n\n let connected = await lazyConnect(state, spec.serverName, signal);\n let autoAuthAttempted = false;\n\n if (!connected && state.manager.getConnection(spec.serverName)?.status === \"needs-auth\") {\n autoAuthAttempted = true;\n const autoAuth = await attemptDirectAutoAuth(state, spec.serverName);\n if (autoAuth.status === \"failed\") {\n return {\n content: [{ type: \"text\" as const, text: autoAuth.message }],\n details: { error: \"auth_required\", server: spec.serverName, message: autoAuth.message },\n };\n }\n if (autoAuth.status === \"success\") {\n await state.manager.close(spec.serverName);\n state.failureTracker.delete(spec.serverName);\n connected = await lazyConnect(state, spec.serverName, signal);\n }\n }\n\n if (!connected) {\n const authConnection = state.manager.getConnection(spec.serverName);\n if (authConnection?.status === \"needs-auth\") {\n const message = getDirectAuthRequiredMessage(state, spec.serverName);\n return {\n content: [{ type: \"text\" as const, text: message }],\n details: { error: \"auth_required\", server: spec.serverName, message, autoAuthAttempted },\n };\n }\n const failedAgo = getFailureAgeSeconds(state, spec.serverName);\n return {\n content: [{ type: \"text\" as const, text: `MCP server \"${spec.serverName}\" not available${failedAgo !== null ? ` (failed ${failedAgo}s ago)` : \"\"}` }],\n details: { error: \"server_unavailable\", server: spec.serverName },\n };\n }\n\n const connection = state.manager.getConnection(spec.serverName);\n if (!connection || connection.status !== \"connected\") {\n return {\n content: [{ type: \"text\" as const, text: `MCP server \"${spec.serverName}\" not connected` }],\n details: { error: \"not_connected\", server: spec.serverName },\n };\n }\n\n let uiSession: UiSessionRuntime | null = null;\n const requestOptions = state.manager.getRequestOptions?.(spec.serverName, signal) ?? (signal ? { signal } : undefined);\n\n const outputGuardOptions = resolveMcpOutputGuardOptions(state.config.settings);\n\n try {\n state.manager.touch(spec.serverName);\n state.manager.incrementInFlight(spec.serverName);\n\n if (spec.resourceUri) {\n const result = await connection.client.readResource({ uri: spec.resourceUri }, requestOptions);\n const content = (result.contents ?? []).map(c => ({\n type: \"text\" as const,\n text: \"text\" in c ? c.text : (\"blob\" in c ? `[Binary data: ${(c as { mimeType?: string }).mimeType ?? \"unknown\"}]` : JSON.stringify(c)),\n }));\n const guarded = await guardMcpOutput(content.length > 0 ? content : [{ type: \"text\" as const, text: \"(empty resource)\" }], outputGuardOptions);\n return {\n content: guarded.content,\n details: { server: spec.serverName, resourceUri: spec.resourceUri, ...guardedMcpDetails(guarded) },\n };\n }\n\n const hasUi = !!spec.uiResourceUri;\n uiSession = hasUi\n ? await maybeStartUiSession(state, {\n serverName: spec.serverName,\n toolName: spec.originalName,\n toolArgs: params ?? {},\n uiResourceUri: spec.uiResourceUri!,\n streamMode: spec.uiStreamMode,\n })\n : null;\n\n const resultPromise = connection.client.callTool({\n name: spec.originalName,\n arguments: params ?? {},\n _meta: uiSession?.requestMeta,\n }, undefined, requestOptions);\n\n const result = await abortable(resultPromise, signal);\n uiSession?.sendToolResult(result as unknown as import(\"@modelcontextprotocol/sdk/types.js\").CallToolResult);\n\n if (result.isError) {\n const mcpContent = (result.content ?? []) as McpContent[];\n const content = transformMcpContent(mcpContent);\n const outputContent = content.length > 0 ? content : [{ type: \"text\" as const, text: \"(empty result)\" }];\n const schemaText = spec.inputSchema ? `\\n\\nExpected parameters:\\n${formatSchema(spec.inputSchema)}` : \"\";\n const guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions, prefix: \"Error: \", suffix: schemaText, emptyTextFallback: \"Tool execution failed\" });\n return {\n content: guarded.content,\n details: { error: \"tool_error\", server: spec.serverName, ...guardedMcpDetails(guarded) },\n };\n }\n\n const content = resolveMcpResultContent(result as Record<string, unknown>);\n const outputContent = content.length > 0 ? content : [{ type: \"text\" as const, text: \"(empty result)\" }];\n if (hasUi) {\n const uiMessage = uiSession?.reused\n ? \"Updated the open UI.\"\n : \"📺 Interactive UI is now open in your browser. I'll respond to your prompts and intents as you interact with it.\";\n const guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions, suffix: `\\n\\n${uiMessage}` });\n return {\n content: guarded.content,\n details: { server: spec.serverName, tool: spec.originalName, uiOpen: true, ...guardedMcpDetails(guarded) },\n };\n }\n\n const guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions });\n return {\n content: guarded.content,\n details: { server: spec.serverName, tool: spec.originalName, ...guardedMcpDetails(guarded) },\n };\n } catch (error) {\n if (error instanceof UrlElicitationRequiredError) {\n const action = await state.manager.handleUrlElicitationRequired(spec.serverName, error);\n const message = action === \"accept\"\n ? \"The original MCP tool did not run. Complete the opened browser interaction, then retry the tool.\"\n : `The URL interaction was ${action === \"decline\" ? \"declined\" : \"cancelled\"}.`;\n uiSession?.sendToolCancelled(message);\n return {\n content: [{ type: \"text\" as const, text: message }],\n details: { error: \"url_elicitation_required\", server: spec.serverName, action },\n };\n }\n const message = error instanceof Error ? error.message : String(error);\n uiSession?.sendToolCancelled(message);\n const schemaText = spec.inputSchema ? `\\n\\nExpected parameters:\\n${formatSchema(spec.inputSchema)}` : \"\";\n const guarded = await guardMcpOutput([{ type: \"text\" as const, text: message }], { ...outputGuardOptions, prefix: \"Failed to call tool: \", suffix: schemaText });\n return {\n content: guarded.content,\n details: { error: \"call_failed\", server: spec.serverName, ...guardedMcpDetails(guarded) },\n };\n } finally {\n if (uiSession?.reused) {\n uiSession.close();\n }\n state.manager.decrementInFlight(spec.serverName);\n state.manager.touch(spec.serverName);\n }\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"direct-tools.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/direct-tools.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult, AgentToolUpdateCallback, ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { UrlElicitationRequiredError } from \"@modelcontextprotocol/sdk/types.js\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { DirectToolSpec, McpConfig, McpContent } from \"./types.ts\";\nimport type { MetadataCache } from \"./metadata-cache.ts\";\nimport { lazyConnect, getFailureAgeSeconds } from \"./init.ts\";\nimport { abortable, throwIfAborted } from \"./abort.ts\";\nimport { isServerCacheValid } from \"./metadata-cache.ts\";\nimport { formatSchema } from \"./tool-metadata.ts\";\nimport { resolveMcpResultContent, transformMcpContent } from \"./tool-registrar.ts\";\nimport { guardMcpOutput, guardedMcpDetails, resolveMcpOutputGuardOptions } from \"./mcp-output-guard.ts\";\nimport { maybeStartUiSession, type UiSessionRuntime } from \"./ui-session.ts\";\nimport { formatToolName, isToolExcluded } from \"./types.ts\";\nimport { resourceNameToToolName } from \"./resource-tools.ts\";\nimport { authenticate, supportsOAuth } from \"./mcp-auth-flow.ts\";\nimport { formatAuthRequiredMessage } from \"./utils.ts\";\n\nconst BUILTIN_NAMES = new Set([\"read\", \"bash\", \"edit\", \"write\", \"grep\", \"find\", \"ls\", \"mcp\"]);\n\ntype DirectAutoAuthResult =\n | { status: \"skipped\" }\n | { status: \"success\" }\n | { status: \"failed\"; message: string };\n\nfunction getDirectAuthRequiredMessage(\n state: McpExtensionState,\n serverName: string,\n defaultMessage = `MCP server \"${serverName}\" requires OAuth authentication. Run mcp({ action: \"auth-start\", server: \"${serverName}\" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`,\n): string {\n return formatAuthRequiredMessage(state.config, serverName, defaultMessage);\n}\n\nfunction getDirectAuthFailedMessage(state: McpExtensionState, serverName: string, message: string): string {\n const customGuidance = state.config.settings?.authRequiredMessage;\n if (customGuidance) {\n return `OAuth authentication failed for \"${serverName}\": ${message}. ${getDirectAuthRequiredMessage(state, serverName)}`;\n }\n return `OAuth authentication failed for \"${serverName}\": ${message}. Run mcp({ action: \"auth-start\", server: \"${serverName}\" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`;\n}\n\nasync function attemptDirectAutoAuth(\n state: McpExtensionState,\n serverName: string,\n): Promise<DirectAutoAuthResult> {\n if (state.config.settings?.autoAuth !== true) {\n return { status: \"skipped\" };\n }\n\n const definition = state.config.mcpServers[serverName];\n if (!definition || !supportsOAuth(definition) || !definition.url) {\n return { status: \"skipped\" };\n }\n\n const grantType = definition.oauth ? definition.oauth.grantType ?? \"authorization_code\" : \"authorization_code\";\n if (!state.ui && grantType !== \"client_credentials\") {\n return {\n status: \"failed\",\n message: getDirectAuthRequiredMessage(\n state,\n serverName,\n `MCP server \"${serverName}\" requires OAuth authentication. Run mcp({ action: \"auth-start\", server: \"${serverName}\" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`,\n ),\n };\n }\n\n try {\n await authenticate(serverName, definition.url, definition);\n return { status: \"success\" };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n status: \"failed\",\n message: getDirectAuthFailedMessage(state, serverName, message),\n };\n }\n}\n\nexport function resolveDirectTools(\n config: McpConfig,\n cache: MetadataCache | null,\n prefix: \"server\" | \"none\" | \"short\",\n envOverride?: string[],\n): DirectToolSpec[] {\n const specs: DirectToolSpec[] = [];\n if (!cache) return specs;\n\n const seenNames = new Set<string>();\n\n const envServers = new Set<string>();\n const envTools = new Map<string, Set<string>>();\n if (envOverride) {\n for (let item of envOverride) {\n item = item.replace(/\\/+$/, \"\");\n if (item.includes(\"/\")) {\n const [server, tool] = item.split(\"/\", 2);\n if (server && tool) {\n if (!envTools.has(server)) envTools.set(server, new Set());\n envTools.get(server)!.add(tool);\n } else if (server) {\n envServers.add(server);\n }\n } else if (item) {\n envServers.add(item);\n }\n }\n }\n\n const globalDirect = config.settings?.directTools;\n\n for (const [serverName, definition] of Object.entries(config.mcpServers)) {\n const serverCache = cache.servers[serverName];\n if (!serverCache || !isServerCacheValid(serverCache, definition)) continue;\n\n let toolFilter: true | string[] | false = false;\n\n if (envOverride) {\n if (envServers.has(serverName)) {\n toolFilter = true;\n } else if (envTools.has(serverName)) {\n toolFilter = [...envTools.get(serverName)!];\n }\n } else {\n if (definition.directTools !== undefined) {\n toolFilter = definition.directTools;\n } else if (globalDirect) {\n toolFilter = globalDirect;\n }\n }\n\n if (!toolFilter) continue;\n\n for (const tool of serverCache.tools ?? []) {\n if (toolFilter !== true && !toolFilter.includes(tool.name)) continue;\n if (isToolExcluded(tool.name, serverName, prefix, definition.excludeTools)) continue;\n const prefixedName = formatToolName(tool.name, serverName, prefix);\n if (BUILTIN_NAMES.has(prefixedName)) {\n console.warn(`MCP: skipping direct tool \"${prefixedName}\" (collides with builtin)`);\n continue;\n }\n if (seenNames.has(prefixedName)) {\n console.warn(`MCP: skipping duplicate direct tool \"${prefixedName}\" from \"${serverName}\"`);\n continue;\n }\n seenNames.add(prefixedName);\n specs.push({\n serverName,\n originalName: tool.name,\n prefixedName,\n description: tool.description ?? \"\",\n inputSchema: tool.inputSchema,\n uiResourceUri: tool.uiResourceUri,\n uiStreamMode: tool.uiStreamMode,\n });\n }\n\n if (definition.exposeResources !== false) {\n for (const resource of serverCache.resources ?? []) {\n const baseName = `get_${resourceNameToToolName(resource.name)}`;\n if (toolFilter !== true && !toolFilter.includes(baseName)) continue;\n if (isToolExcluded(baseName, serverName, prefix, definition.excludeTools)) continue;\n const prefixedName = formatToolName(baseName, serverName, prefix);\n if (BUILTIN_NAMES.has(prefixedName)) {\n console.warn(`MCP: skipping direct resource tool \"${prefixedName}\" (collides with builtin)`);\n continue;\n }\n if (seenNames.has(prefixedName)) {\n console.warn(`MCP: skipping duplicate direct resource tool \"${prefixedName}\" from \"${serverName}\"`);\n continue;\n }\n seenNames.add(prefixedName);\n specs.push({\n serverName,\n originalName: baseName,\n prefixedName,\n description: resource.description ?? `Read resource: ${resource.uri}`,\n resourceUri: resource.uri,\n });\n }\n }\n }\n\n return specs;\n}\n\nexport function getMissingConfiguredDirectToolServers(\n config: McpConfig,\n cache: MetadataCache | null,\n): string[] {\n const missing: string[] = [];\n const globalDirect = config.settings?.directTools;\n\n for (const [serverName, definition] of Object.entries(config.mcpServers)) {\n const hasDirectTools = definition.directTools !== undefined\n ? !!definition.directTools\n : !!globalDirect;\n\n if (!hasDirectTools) continue;\n\n const serverCache = cache?.servers?.[serverName];\n if (!serverCache || !isServerCacheValid(serverCache, definition)) {\n missing.push(serverName);\n }\n }\n\n return missing;\n}\n\nexport function buildProxyDescription(\n config: McpConfig,\n cache: MetadataCache | null,\n directSpecs: DirectToolSpec[],\n): string {\n const prefix = config.settings?.toolPrefix ?? \"server\";\n let desc = `MCP gateway - connect to MCP servers and call their tools. Non-MCP Pi tools should be called directly, not through mcp.\\n`;\n\n const directByServer = new Map<string, number>();\n for (const spec of directSpecs) {\n directByServer.set(spec.serverName, (directByServer.get(spec.serverName) ?? 0) + 1);\n }\n if (directByServer.size > 0) {\n const parts = [...directByServer.entries()].map(\n ([server, count]) => `${server} (${count})`,\n );\n desc += `\\nDirect tools available (call as normal tools): ${parts.join(\", \")}\\n`;\n }\n\n const serverSummaries: string[] = [];\n for (const serverName of Object.keys(config.mcpServers)) {\n const entry = cache?.servers?.[serverName];\n const definition = config.mcpServers[serverName];\n const toolCount = (entry?.tools ?? []).filter(\n (tool) => !isToolExcluded(tool.name, serverName, prefix, definition.excludeTools),\n ).length;\n const resourceCount = definition?.exposeResources !== false\n ? (entry?.resources ?? []).filter((resource) => {\n const baseName = `get_${resourceNameToToolName(resource.name)}`;\n return !isToolExcluded(baseName, serverName, prefix, definition.excludeTools);\n }).length\n : 0;\n const totalItems = toolCount + resourceCount;\n if (totalItems === 0) continue;\n const directCount = directByServer.get(serverName) ?? 0;\n const proxyCount = totalItems - directCount;\n if (proxyCount > 0) {\n serverSummaries.push(`${serverName} (${proxyCount} tools)`);\n }\n }\n\n if (serverSummaries.length > 0) {\n desc += `\\nServers: ${serverSummaries.join(\", \")}\\n`;\n }\n\n desc += `\\nUsage:\\n`;\n desc += ` mcp({ }) → Show server status\\n`;\n desc += ` mcp({ server: \"name\" }) → List tools from server\\n`;\n desc += ` mcp({ search: \"query\" }) → Search MCP tools by name/description\\n`;\n desc += ` mcp({ describe: \"tool_name\" }) → Show tool details and parameters\\n`;\n desc += ` mcp({ connect: \"server-name\" }) → Connect to a server and refresh metadata\\n`;\n desc += ` mcp({ tool: \"name\", args: '{\"key\": \"value\"}' }) → Call a tool (args is JSON string)\\n`;\n desc += ` mcp({ action: \"ui-messages\" }) → Retrieve accumulated messages from completed UI sessions\\n`;\n desc += ` mcp({ action: \"auth-start\", server: \"name\" }) → Start manual OAuth and get a browser URL\\n`;\n desc += ` mcp({ action: \"auth-complete\", server: \"name\", args: '{\"redirectUrl\":\"...\"}' }) → Complete manual OAuth\\n`;\n desc += `\\nMode: action > tool (call) > connect > describe > search > server (list) > nothing (status)`;\n\n return desc;\n}\n\ntype DirectToolExecute = (\n toolCallId: string,\n params: Record<string, unknown>,\n signal: AbortSignal | undefined,\n onUpdate: AgentToolUpdateCallback<Record<string, unknown>> | undefined,\n ctx: ExtensionContext,\n) => Promise<AgentToolResult<Record<string, unknown>>>;\n\nexport function createDirectToolExecutor(\n getState: () => McpExtensionState | null,\n getInitPromise: () => Promise<McpExtensionState> | null,\n spec: DirectToolSpec\n): DirectToolExecute {\n return async function execute(_toolCallId, params, signal) {\n throwIfAborted(signal);\n let state = getState();\n const initPromise = getInitPromise();\n\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: \"text\" as const, text: `MCP initialization failed: ${message}` }],\n details: { error: \"init_failed\", message },\n };\n }\n }\n if (!state) {\n return {\n content: [{ type: \"text\" as const, text: \"MCP not initialized\" }],\n details: { error: \"not_initialized\" },\n };\n }\n\n let connected = await lazyConnect(state, spec.serverName, signal);\n let autoAuthAttempted = false;\n\n if (!connected && state.manager.getConnection(spec.serverName)?.status === \"needs-auth\") {\n autoAuthAttempted = true;\n const autoAuth = await attemptDirectAutoAuth(state, spec.serverName);\n if (autoAuth.status === \"failed\") {\n return {\n content: [{ type: \"text\" as const, text: autoAuth.message }],\n details: { error: \"auth_required\", server: spec.serverName, message: autoAuth.message },\n };\n }\n if (autoAuth.status === \"success\") {\n await state.manager.close(spec.serverName);\n state.failureTracker.delete(spec.serverName);\n connected = await lazyConnect(state, spec.serverName, signal);\n }\n }\n\n if (!connected) {\n const authConnection = state.manager.getConnection(spec.serverName);\n if (authConnection?.status === \"needs-auth\") {\n const message = getDirectAuthRequiredMessage(state, spec.serverName);\n return {\n content: [{ type: \"text\" as const, text: message }],\n details: { error: \"auth_required\", server: spec.serverName, message, autoAuthAttempted },\n };\n }\n const failedAgo = getFailureAgeSeconds(state, spec.serverName);\n return {\n content: [{ type: \"text\" as const, text: `MCP server \"${spec.serverName}\" not available${failedAgo !== null ? ` (failed ${failedAgo}s ago)` : \"\"}` }],\n details: { error: \"server_unavailable\", server: spec.serverName },\n };\n }\n\n const connection = state.manager.getConnection(spec.serverName);\n if (!connection || connection.status !== \"connected\") {\n return {\n content: [{ type: \"text\" as const, text: `MCP server \"${spec.serverName}\" not connected` }],\n details: { error: \"not_connected\", server: spec.serverName },\n };\n }\n\n let uiSession: UiSessionRuntime | null = null;\n const requestOptions = state.manager.getRequestOptions?.(spec.serverName, signal) ?? (signal ? { signal } : undefined);\n\n const outputGuardOptions = resolveMcpOutputGuardOptions(state.config.settings);\n\n try {\n state.manager.touch(spec.serverName);\n state.manager.incrementInFlight(spec.serverName);\n\n if (spec.resourceUri) {\n const result = await connection.client.readResource({ uri: spec.resourceUri }, requestOptions);\n const content = (result.contents ?? []).map(c => ({\n type: \"text\" as const,\n text: \"text\" in c ? c.text : (\"blob\" in c ? `[Binary data: ${(c as { mimeType?: string }).mimeType ?? \"unknown\"}]` : JSON.stringify(c)),\n }));\n const guarded = await guardMcpOutput(content.length > 0 ? content : [{ type: \"text\" as const, text: \"(empty resource)\" }], outputGuardOptions);\n return {\n content: guarded.content,\n details: { server: spec.serverName, resourceUri: spec.resourceUri, ...guardedMcpDetails(guarded) },\n };\n }\n\n const hasUi = !!spec.uiResourceUri;\n uiSession = hasUi\n ? await maybeStartUiSession(state, {\n serverName: spec.serverName,\n toolName: spec.originalName,\n toolArgs: params ?? {},\n uiResourceUri: spec.uiResourceUri!,\n streamMode: spec.uiStreamMode,\n })\n : null;\n\n const resultPromise = connection.client.callTool({\n name: spec.originalName,\n arguments: params ?? {},\n _meta: uiSession?.requestMeta,\n }, undefined, requestOptions);\n\n const result = await abortable(resultPromise, signal);\n uiSession?.sendToolResult(result as unknown as import(\"@modelcontextprotocol/sdk/types.js\").CallToolResult);\n\n if (result.isError) {\n const mcpContent = (result.content ?? []) as McpContent[];\n const content = transformMcpContent(mcpContent);\n const outputContent = content.length > 0 ? content : [{ type: \"text\" as const, text: \"(empty result)\" }];\n const schemaText = spec.inputSchema ? `\\n\\nExpected parameters:\\n${formatSchema(spec.inputSchema)}` : \"\";\n const guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions, prefix: \"Error: \", suffix: schemaText, emptyTextFallback: \"Tool execution failed\" });\n return {\n content: guarded.content,\n details: { error: \"tool_error\", server: spec.serverName, ...guardedMcpDetails(guarded) },\n };\n }\n\n const content = resolveMcpResultContent(result as Record<string, unknown>);\n const outputContent = content.length > 0 ? content : [{ type: \"text\" as const, text: \"(empty result)\" }];\n if (hasUi) {\n const uiMessage = uiSession?.reused\n ? \"Updated the open UI.\"\n : \"📺 Interactive UI is now open in your browser. I'll respond to your prompts and intents as you interact with it.\";\n const guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions, suffix: `\\n\\n${uiMessage}` });\n return {\n content: guarded.content,\n details: { server: spec.serverName, tool: spec.originalName, uiOpen: true, ...guardedMcpDetails(guarded) },\n };\n }\n\n const guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions });\n return {\n content: guarded.content,\n details: { server: spec.serverName, tool: spec.originalName, ...guardedMcpDetails(guarded) },\n };\n } catch (error) {\n if (error instanceof UrlElicitationRequiredError) {\n const action = await state.manager.handleUrlElicitationRequired(spec.serverName, error);\n const message = action === \"accept\"\n ? \"The original MCP tool did not run. Complete the opened browser interaction, then retry the tool.\"\n : `The URL interaction was ${action === \"decline\" ? \"declined\" : \"cancelled\"}.`;\n uiSession?.sendToolCancelled(message);\n return {\n content: [{ type: \"text\" as const, text: message }],\n details: { error: \"url_elicitation_required\", server: spec.serverName, action },\n };\n }\n const message = error instanceof Error ? error.message : String(error);\n uiSession?.sendToolCancelled(message);\n const schemaText = spec.inputSchema ? `\\n\\nExpected parameters:\\n${formatSchema(spec.inputSchema)}` : \"\";\n const guarded = await guardMcpOutput([{ type: \"text\" as const, text: message }], { ...outputGuardOptions, prefix: \"Failed to call tool: \", suffix: schemaText });\n return {\n content: guarded.content,\n details: { error: \"call_failed\", server: spec.serverName, ...guardedMcpDetails(guarded) },\n };\n } finally {\n if (uiSession?.reused) {\n uiSession.close();\n }\n state.manager.decrementInFlight(spec.serverName);\n state.manager.touch(spec.serverName);\n }\n };\n}\n"]}
1
+ {"version":3,"file":"direct-tools.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/direct-tools.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult, AgentToolUpdateCallback, ExtensionContext } from \"@ashx-j/lunr\";\nimport { UrlElicitationRequiredError } from \"@modelcontextprotocol/sdk/types.js\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { DirectToolSpec, McpConfig, McpContent } from \"./types.ts\";\nimport type { MetadataCache } from \"./metadata-cache.ts\";\nimport { lazyConnect, getFailureAgeSeconds } from \"./init.ts\";\nimport { abortable, throwIfAborted } from \"./abort.ts\";\nimport { isServerCacheValid } from \"./metadata-cache.ts\";\nimport { formatSchema } from \"./tool-metadata.ts\";\nimport { resolveMcpResultContent, transformMcpContent } from \"./tool-registrar.ts\";\nimport { guardMcpOutput, guardedMcpDetails, resolveMcpOutputGuardOptions } from \"./mcp-output-guard.ts\";\nimport { maybeStartUiSession, type UiSessionRuntime } from \"./ui-session.ts\";\nimport { formatToolName, isToolExcluded } from \"./types.ts\";\nimport { resourceNameToToolName } from \"./resource-tools.ts\";\nimport { authenticate, supportsOAuth } from \"./mcp-auth-flow.ts\";\nimport { formatAuthRequiredMessage } from \"./utils.ts\";\n\nconst BUILTIN_NAMES = new Set([\"read\", \"bash\", \"edit\", \"write\", \"grep\", \"find\", \"ls\", \"mcp\"]);\n\ntype DirectAutoAuthResult =\n | { status: \"skipped\" }\n | { status: \"success\" }\n | { status: \"failed\"; message: string };\n\nfunction getDirectAuthRequiredMessage(\n state: McpExtensionState,\n serverName: string,\n defaultMessage = `MCP server \"${serverName}\" requires OAuth authentication. Run mcp({ action: \"auth-start\", server: \"${serverName}\" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`,\n): string {\n return formatAuthRequiredMessage(state.config, serverName, defaultMessage);\n}\n\nfunction getDirectAuthFailedMessage(state: McpExtensionState, serverName: string, message: string): string {\n const customGuidance = state.config.settings?.authRequiredMessage;\n if (customGuidance) {\n return `OAuth authentication failed for \"${serverName}\": ${message}. ${getDirectAuthRequiredMessage(state, serverName)}`;\n }\n return `OAuth authentication failed for \"${serverName}\": ${message}. Run mcp({ action: \"auth-start\", server: \"${serverName}\" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`;\n}\n\nasync function attemptDirectAutoAuth(\n state: McpExtensionState,\n serverName: string,\n): Promise<DirectAutoAuthResult> {\n if (state.config.settings?.autoAuth !== true) {\n return { status: \"skipped\" };\n }\n\n const definition = state.config.mcpServers[serverName];\n if (!definition || !supportsOAuth(definition) || !definition.url) {\n return { status: \"skipped\" };\n }\n\n const grantType = definition.oauth ? definition.oauth.grantType ?? \"authorization_code\" : \"authorization_code\";\n if (!state.ui && grantType !== \"client_credentials\") {\n return {\n status: \"failed\",\n message: getDirectAuthRequiredMessage(\n state,\n serverName,\n `MCP server \"${serverName}\" requires OAuth authentication. Run mcp({ action: \"auth-start\", server: \"${serverName}\" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`,\n ),\n };\n }\n\n try {\n await authenticate(serverName, definition.url, definition);\n return { status: \"success\" };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n status: \"failed\",\n message: getDirectAuthFailedMessage(state, serverName, message),\n };\n }\n}\n\nexport function resolveDirectTools(\n config: McpConfig,\n cache: MetadataCache | null,\n prefix: \"server\" | \"none\" | \"short\",\n envOverride?: string[],\n): DirectToolSpec[] {\n const specs: DirectToolSpec[] = [];\n if (!cache) return specs;\n\n const seenNames = new Set<string>();\n\n const envServers = new Set<string>();\n const envTools = new Map<string, Set<string>>();\n if (envOverride) {\n for (let item of envOverride) {\n item = item.replace(/\\/+$/, \"\");\n if (item.includes(\"/\")) {\n const [server, tool] = item.split(\"/\", 2);\n if (server && tool) {\n if (!envTools.has(server)) envTools.set(server, new Set());\n envTools.get(server)!.add(tool);\n } else if (server) {\n envServers.add(server);\n }\n } else if (item) {\n envServers.add(item);\n }\n }\n }\n\n const globalDirect = config.settings?.directTools;\n\n for (const [serverName, definition] of Object.entries(config.mcpServers)) {\n const serverCache = cache.servers[serverName];\n if (!serverCache || !isServerCacheValid(serverCache, definition)) continue;\n\n let toolFilter: true | string[] | false = false;\n\n if (envOverride) {\n if (envServers.has(serverName)) {\n toolFilter = true;\n } else if (envTools.has(serverName)) {\n toolFilter = [...envTools.get(serverName)!];\n }\n } else {\n if (definition.directTools !== undefined) {\n toolFilter = definition.directTools;\n } else if (globalDirect) {\n toolFilter = globalDirect;\n }\n }\n\n if (!toolFilter) continue;\n\n for (const tool of serverCache.tools ?? []) {\n if (toolFilter !== true && !toolFilter.includes(tool.name)) continue;\n if (isToolExcluded(tool.name, serverName, prefix, definition.excludeTools)) continue;\n const prefixedName = formatToolName(tool.name, serverName, prefix);\n if (BUILTIN_NAMES.has(prefixedName)) {\n console.warn(`MCP: skipping direct tool \"${prefixedName}\" (collides with builtin)`);\n continue;\n }\n if (seenNames.has(prefixedName)) {\n console.warn(`MCP: skipping duplicate direct tool \"${prefixedName}\" from \"${serverName}\"`);\n continue;\n }\n seenNames.add(prefixedName);\n specs.push({\n serverName,\n originalName: tool.name,\n prefixedName,\n description: tool.description ?? \"\",\n inputSchema: tool.inputSchema,\n uiResourceUri: tool.uiResourceUri,\n uiStreamMode: tool.uiStreamMode,\n });\n }\n\n if (definition.exposeResources !== false) {\n for (const resource of serverCache.resources ?? []) {\n const baseName = `get_${resourceNameToToolName(resource.name)}`;\n if (toolFilter !== true && !toolFilter.includes(baseName)) continue;\n if (isToolExcluded(baseName, serverName, prefix, definition.excludeTools)) continue;\n const prefixedName = formatToolName(baseName, serverName, prefix);\n if (BUILTIN_NAMES.has(prefixedName)) {\n console.warn(`MCP: skipping direct resource tool \"${prefixedName}\" (collides with builtin)`);\n continue;\n }\n if (seenNames.has(prefixedName)) {\n console.warn(`MCP: skipping duplicate direct resource tool \"${prefixedName}\" from \"${serverName}\"`);\n continue;\n }\n seenNames.add(prefixedName);\n specs.push({\n serverName,\n originalName: baseName,\n prefixedName,\n description: resource.description ?? `Read resource: ${resource.uri}`,\n resourceUri: resource.uri,\n });\n }\n }\n }\n\n return specs;\n}\n\nexport function getMissingConfiguredDirectToolServers(\n config: McpConfig,\n cache: MetadataCache | null,\n): string[] {\n const missing: string[] = [];\n const globalDirect = config.settings?.directTools;\n\n for (const [serverName, definition] of Object.entries(config.mcpServers)) {\n const hasDirectTools = definition.directTools !== undefined\n ? !!definition.directTools\n : !!globalDirect;\n\n if (!hasDirectTools) continue;\n\n const serverCache = cache?.servers?.[serverName];\n if (!serverCache || !isServerCacheValid(serverCache, definition)) {\n missing.push(serverName);\n }\n }\n\n return missing;\n}\n\nexport function buildProxyDescription(\n config: McpConfig,\n cache: MetadataCache | null,\n directSpecs: DirectToolSpec[],\n): string {\n const prefix = config.settings?.toolPrefix ?? \"server\";\n let desc = `MCP gateway - connect to MCP servers and call their tools. Non-MCP Pi tools should be called directly, not through mcp.\\n`;\n\n const directByServer = new Map<string, number>();\n for (const spec of directSpecs) {\n directByServer.set(spec.serverName, (directByServer.get(spec.serverName) ?? 0) + 1);\n }\n if (directByServer.size > 0) {\n const parts = [...directByServer.entries()].map(\n ([server, count]) => `${server} (${count})`,\n );\n desc += `\\nDirect tools available (call as normal tools): ${parts.join(\", \")}\\n`;\n }\n\n const serverSummaries: string[] = [];\n for (const serverName of Object.keys(config.mcpServers)) {\n const entry = cache?.servers?.[serverName];\n const definition = config.mcpServers[serverName];\n const toolCount = (entry?.tools ?? []).filter(\n (tool) => !isToolExcluded(tool.name, serverName, prefix, definition.excludeTools),\n ).length;\n const resourceCount = definition?.exposeResources !== false\n ? (entry?.resources ?? []).filter((resource) => {\n const baseName = `get_${resourceNameToToolName(resource.name)}`;\n return !isToolExcluded(baseName, serverName, prefix, definition.excludeTools);\n }).length\n : 0;\n const totalItems = toolCount + resourceCount;\n if (totalItems === 0) continue;\n const directCount = directByServer.get(serverName) ?? 0;\n const proxyCount = totalItems - directCount;\n if (proxyCount > 0) {\n serverSummaries.push(`${serverName} (${proxyCount} tools)`);\n }\n }\n\n if (serverSummaries.length > 0) {\n desc += `\\nServers: ${serverSummaries.join(\", \")}\\n`;\n }\n\n desc += `\\nUsage:\\n`;\n desc += ` mcp({ }) → Show server status\\n`;\n desc += ` mcp({ server: \"name\" }) → List tools from server\\n`;\n desc += ` mcp({ search: \"query\" }) → Search MCP tools by name/description\\n`;\n desc += ` mcp({ describe: \"tool_name\" }) → Show tool details and parameters\\n`;\n desc += ` mcp({ connect: \"server-name\" }) → Connect to a server and refresh metadata\\n`;\n desc += ` mcp({ tool: \"name\", args: '{\"key\": \"value\"}' }) → Call a tool (args is JSON string)\\n`;\n desc += ` mcp({ action: \"ui-messages\" }) → Retrieve accumulated messages from completed UI sessions\\n`;\n desc += ` mcp({ action: \"auth-start\", server: \"name\" }) → Start manual OAuth and get a browser URL\\n`;\n desc += ` mcp({ action: \"auth-complete\", server: \"name\", args: '{\"redirectUrl\":\"...\"}' }) → Complete manual OAuth\\n`;\n desc += `\\nMode: action > tool (call) > connect > describe > search > server (list) > nothing (status)`;\n\n return desc;\n}\n\ntype DirectToolExecute = (\n toolCallId: string,\n params: Record<string, unknown>,\n signal: AbortSignal | undefined,\n onUpdate: AgentToolUpdateCallback<Record<string, unknown>> | undefined,\n ctx: ExtensionContext,\n) => Promise<AgentToolResult<Record<string, unknown>>>;\n\nexport function createDirectToolExecutor(\n getState: () => McpExtensionState | null,\n getInitPromise: () => Promise<McpExtensionState> | null,\n spec: DirectToolSpec\n): DirectToolExecute {\n return async function execute(_toolCallId, params, signal) {\n throwIfAborted(signal);\n let state = getState();\n const initPromise = getInitPromise();\n\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: \"text\" as const, text: `MCP initialization failed: ${message}` }],\n details: { error: \"init_failed\", message },\n };\n }\n }\n if (!state) {\n return {\n content: [{ type: \"text\" as const, text: \"MCP not initialized\" }],\n details: { error: \"not_initialized\" },\n };\n }\n\n let connected = await lazyConnect(state, spec.serverName, signal);\n let autoAuthAttempted = false;\n\n if (!connected && state.manager.getConnection(spec.serverName)?.status === \"needs-auth\") {\n autoAuthAttempted = true;\n const autoAuth = await attemptDirectAutoAuth(state, spec.serverName);\n if (autoAuth.status === \"failed\") {\n return {\n content: [{ type: \"text\" as const, text: autoAuth.message }],\n details: { error: \"auth_required\", server: spec.serverName, message: autoAuth.message },\n };\n }\n if (autoAuth.status === \"success\") {\n await state.manager.close(spec.serverName);\n state.failureTracker.delete(spec.serverName);\n connected = await lazyConnect(state, spec.serverName, signal);\n }\n }\n\n if (!connected) {\n const authConnection = state.manager.getConnection(spec.serverName);\n if (authConnection?.status === \"needs-auth\") {\n const message = getDirectAuthRequiredMessage(state, spec.serverName);\n return {\n content: [{ type: \"text\" as const, text: message }],\n details: { error: \"auth_required\", server: spec.serverName, message, autoAuthAttempted },\n };\n }\n const failedAgo = getFailureAgeSeconds(state, spec.serverName);\n return {\n content: [{ type: \"text\" as const, text: `MCP server \"${spec.serverName}\" not available${failedAgo !== null ? ` (failed ${failedAgo}s ago)` : \"\"}` }],\n details: { error: \"server_unavailable\", server: spec.serverName },\n };\n }\n\n const connection = state.manager.getConnection(spec.serverName);\n if (!connection || connection.status !== \"connected\") {\n return {\n content: [{ type: \"text\" as const, text: `MCP server \"${spec.serverName}\" not connected` }],\n details: { error: \"not_connected\", server: spec.serverName },\n };\n }\n\n let uiSession: UiSessionRuntime | null = null;\n const requestOptions = state.manager.getRequestOptions?.(spec.serverName, signal) ?? (signal ? { signal } : undefined);\n\n const outputGuardOptions = resolveMcpOutputGuardOptions(state.config.settings);\n\n try {\n state.manager.touch(spec.serverName);\n state.manager.incrementInFlight(spec.serverName);\n\n if (spec.resourceUri) {\n const result = await connection.client.readResource({ uri: spec.resourceUri }, requestOptions);\n const content = (result.contents ?? []).map(c => ({\n type: \"text\" as const,\n text: \"text\" in c ? c.text : (\"blob\" in c ? `[Binary data: ${(c as { mimeType?: string }).mimeType ?? \"unknown\"}]` : JSON.stringify(c)),\n }));\n const guarded = await guardMcpOutput(content.length > 0 ? content : [{ type: \"text\" as const, text: \"(empty resource)\" }], outputGuardOptions);\n return {\n content: guarded.content,\n details: { server: spec.serverName, resourceUri: spec.resourceUri, ...guardedMcpDetails(guarded) },\n };\n }\n\n const hasUi = !!spec.uiResourceUri;\n uiSession = hasUi\n ? await maybeStartUiSession(state, {\n serverName: spec.serverName,\n toolName: spec.originalName,\n toolArgs: params ?? {},\n uiResourceUri: spec.uiResourceUri!,\n streamMode: spec.uiStreamMode,\n })\n : null;\n\n const resultPromise = connection.client.callTool({\n name: spec.originalName,\n arguments: params ?? {},\n _meta: uiSession?.requestMeta,\n }, undefined, requestOptions);\n\n const result = await abortable(resultPromise, signal);\n uiSession?.sendToolResult(result as unknown as import(\"@modelcontextprotocol/sdk/types.js\").CallToolResult);\n\n if (result.isError) {\n const mcpContent = (result.content ?? []) as McpContent[];\n const content = transformMcpContent(mcpContent);\n const outputContent = content.length > 0 ? content : [{ type: \"text\" as const, text: \"(empty result)\" }];\n const schemaText = spec.inputSchema ? `\\n\\nExpected parameters:\\n${formatSchema(spec.inputSchema)}` : \"\";\n const guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions, prefix: \"Error: \", suffix: schemaText, emptyTextFallback: \"Tool execution failed\" });\n return {\n content: guarded.content,\n details: { error: \"tool_error\", server: spec.serverName, ...guardedMcpDetails(guarded) },\n };\n }\n\n const content = resolveMcpResultContent(result as Record<string, unknown>);\n const outputContent = content.length > 0 ? content : [{ type: \"text\" as const, text: \"(empty result)\" }];\n if (hasUi) {\n const uiMessage = uiSession?.reused\n ? \"Updated the open UI.\"\n : \"📺 Interactive UI is now open in your browser. I'll respond to your prompts and intents as you interact with it.\";\n const guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions, suffix: `\\n\\n${uiMessage}` });\n return {\n content: guarded.content,\n details: { server: spec.serverName, tool: spec.originalName, uiOpen: true, ...guardedMcpDetails(guarded) },\n };\n }\n\n const guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions });\n return {\n content: guarded.content,\n details: { server: spec.serverName, tool: spec.originalName, ...guardedMcpDetails(guarded) },\n };\n } catch (error) {\n if (error instanceof UrlElicitationRequiredError) {\n const action = await state.manager.handleUrlElicitationRequired(spec.serverName, error);\n const message = action === \"accept\"\n ? \"The original MCP tool did not run. Complete the opened browser interaction, then retry the tool.\"\n : `The URL interaction was ${action === \"decline\" ? \"declined\" : \"cancelled\"}.`;\n uiSession?.sendToolCancelled(message);\n return {\n content: [{ type: \"text\" as const, text: message }],\n details: { error: \"url_elicitation_required\", server: spec.serverName, action },\n };\n }\n const message = error instanceof Error ? error.message : String(error);\n uiSession?.sendToolCancelled(message);\n const schemaText = spec.inputSchema ? `\\n\\nExpected parameters:\\n${formatSchema(spec.inputSchema)}` : \"\";\n const guarded = await guardMcpOutput([{ type: \"text\" as const, text: message }], { ...outputGuardOptions, prefix: \"Failed to call tool: \", suffix: schemaText });\n return {\n content: guarded.content,\n details: { error: \"call_failed\", server: spec.serverName, ...guardedMcpDetails(guarded) },\n };\n } finally {\n if (uiSession?.reused) {\n uiSession.close();\n }\n state.manager.decrementInFlight(spec.serverName);\n state.manager.touch(spec.serverName);\n }\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { ExtensionUIContext } from "@earendil-works/pi-coding-agent";
1
+ import type { ExtensionUIContext } from "@ashx-j/lunr";
2
2
  import type { Client } from "@modelcontextprotocol/sdk/client/index.js";
3
3
  import { type ElicitRequest, type ElicitRequestFormParams, type ElicitRequestURLParams, type ElicitResult } from "@modelcontextprotocol/sdk/types.js";
4
4
  export type ElicitationValue = string | number | boolean | string[] | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"elicitation-handler.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/elicitation-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EAClB,MAAM,oCAAoC,CAAC;AAK5C,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AAGhF,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEtD,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,oBAAoB,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,yBAAyB,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;AAEtG,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,GAAG,IAAI,CAGnG;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,yBAAyB,EAClC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CAIvB;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,YAAY,CAAC,CAoCvB;AA4GD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GACvC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAuEtD;AAuCD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAoCvB","sourcesContent":["// @ts-nocheck\nimport type { ExtensionUIContext } from \"@earendil-works/pi-coding-agent\";\nimport type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport {\n ElicitRequestSchema,\n ErrorCode,\n McpError,\n type ElicitRequest,\n type ElicitRequestFormParams,\n type ElicitRequestURLParams,\n type ElicitResult,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { AjvJsonSchemaValidator } from \"@modelcontextprotocol/sdk/validation/ajv\";\nimport type { JsonSchemaType } from \"@modelcontextprotocol/sdk/validation/types.js\";\nimport open from \"open\";\n\nexport type ElicitationValue = string | number | boolean | string[] | undefined;\ntype FormProperty = ElicitRequestFormParams[\"requestedSchema\"][\"properties\"][string];\n\nexport type ElicitationUIContext = ExtensionUIContext;\n\nexport interface ElicitationHandlerOptions {\n serverName: string;\n ui: ElicitationUIContext;\n allowUrl: boolean;\n onUrlAccepted?: (elicitationId: string) => void;\n}\n\nexport type ServerElicitationConfig = Omit<ElicitationHandlerOptions, \"serverName\" | \"onUrlAccepted\">;\n\nexport function registerElicitationHandler(client: Client, options: ElicitationHandlerOptions): void {\n client.setRequestHandler(ElicitRequestSchema, (request) =>\n handleElicitationRequest(options, request));\n}\n\nexport async function handleElicitationRequest(\n options: ElicitationHandlerOptions,\n request: ElicitRequest,\n): Promise<ElicitResult> {\n return request.params.mode === \"url\"\n ? handleUrlElicitation(options, request.params)\n : handleFormElicitation(options, request.params);\n}\n\nexport async function handleFormElicitation(\n options: ElicitationHandlerOptions,\n params: ElicitRequestFormParams,\n): Promise<ElicitResult> {\n const decision = await options.ui.select(\n `MCP Input Request\\nServer: ${options.serverName}\\n\\n${params.message}`,\n [\"Continue\", \"Decline\"],\n );\n if (decision === undefined) return { action: \"cancel\" };\n if (decision === \"Decline\") return { action: \"decline\" };\n\n const values: Record<string, ElicitationValue> = {};\n const properties = Object.entries(params.requestedSchema.properties);\n for (const [name, schema] of properties) {\n const value = await collectValidField(options.ui, params, name, schema);\n if (!(\"value\" in value)) return { action: \"cancel\" };\n values[name] = value.value;\n }\n\n while (true) {\n const content = coerceAndValidateFormValues(params, values);\n const action = await options.ui.select(\n formatReview(options.serverName, properties, content),\n properties.length > 0 ? [\"Submit\", \"Edit\", \"Decline\"] : [\"Submit\", \"Decline\"],\n );\n if (action === undefined) return { action: \"cancel\" };\n if (action === \"Decline\") return { action: \"decline\" };\n if (action === \"Submit\") return { action: \"accept\", content };\n\n const labels = properties.map(([name, schema]) => `${schema.title ?? humanizeName(name)} (${name})`);\n const selected = await options.ui.select(\"Choose a field to edit\", labels);\n if (selected === undefined) return { action: \"cancel\" };\n const property = properties[labels.indexOf(selected)];\n if (!property) continue;\n const [name, schema] = property;\n const value = await collectValidField(options.ui, params, name, schema, values[name]);\n if (!(\"value\" in value)) return { action: \"cancel\" };\n values[name] = value.value;\n }\n}\n\nasync function collectValidField(\n ui: ElicitationUIContext,\n params: ElicitRequestFormParams,\n name: string,\n schema: FormProperty,\n current?: ElicitationValue,\n): Promise<{ cancelled: true } | { cancelled: false; value: ElicitationValue }> {\n const required = params.requestedSchema.required?.includes(name) === true;\n while (true) {\n const result = await collectField(ui, params, name, schema, current);\n if (!(\"value\" in result)) return result;\n try {\n coerceAndValidateFormValues({\n ...params,\n requestedSchema: {\n type: \"object\",\n properties: { [name]: schema },\n ...(required ? { required: [name] } : {}),\n },\n }, { [name]: result.value });\n return result;\n } catch (error) {\n ui.notify(error instanceof Error ? error.message : String(error), \"error\");\n current = result.value;\n }\n }\n}\n\nasync function collectField(\n ui: ElicitationUIContext,\n params: ElicitRequestFormParams,\n name: string,\n schema: FormProperty,\n current?: ElicitationValue,\n): Promise<{ cancelled: true } | { cancelled: false; value: ElicitationValue }> {\n const required = params.requestedSchema.required?.includes(name) === true;\n const title = [schema.title ?? humanizeName(name), required ? \"(required)\" : \"\", schema.description]\n .filter(Boolean)\n .join(\" \");\n\n if (schema.type === \"string\" && (\"enum\" in schema || \"oneOf\" in schema)) {\n const choices = \"oneOf\" in schema\n ? schema.oneOf.map(option => ({ value: option.const, display: formatChoice(option.const, option.title) }))\n : schema.enum.map((value, index) => ({\n value,\n display: formatChoice(value, \"enumNames\" in schema ? schema.enumNames?.[index] : undefined),\n }));\n const displays = uniqueLabels(choices.map(choice => choice.display));\n const actions = [...displays];\n const useDefault = schema.default === undefined ? undefined : uniqueAction(\"Use default\", actions);\n if (useDefault) actions.push(useDefault);\n const omit = required ? undefined : uniqueAction(\"Omit\", actions);\n if (omit) actions.push(omit);\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === useDefault) return { cancelled: false, value: schema.default };\n if (action === omit) return { cancelled: false, value: undefined };\n return { cancelled: false, value: choices[displays.indexOf(action)]?.value };\n }\n\n if (schema.type === \"boolean\") {\n const actions = [\"Yes\", \"No\"];\n if (schema.default !== undefined) actions.push(\"Use default\");\n if (!required) actions.push(\"Omit\");\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === \"Use default\") return { cancelled: false, value: schema.default };\n if (action === \"Omit\") return { cancelled: false, value: undefined };\n return { cancelled: false, value: action === \"Yes\" };\n }\n\n if (schema.type === \"array\") {\n const actions = [\"Choose values\"];\n if (schema.default !== undefined) actions.push(\"Use default\");\n if (!required) actions.push(\"Omit\");\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === \"Use default\") return { cancelled: false, value: schema.default };\n if (action === \"Omit\") return { cancelled: false, value: undefined };\n\n const choices = extractMultiSelectOptions(schema);\n const selected = new Set(Array.isArray(current) ? current : []);\n while (true) {\n const displays = uniqueLabels(choices.map(choice => selected.has(choice.value) ? `✓ ${choice.display}` : choice.display));\n const done = uniqueAction(\"Done\", displays);\n const picked = await ui.select(title, [...displays, done]);\n if (picked === undefined) return { cancelled: true };\n if (picked === done) return { cancelled: false, value: [...selected] };\n const choice = choices[displays.indexOf(picked)];\n if (!choice) continue;\n if (selected.has(choice.value)) selected.delete(choice.value);\n else selected.add(choice.value);\n }\n }\n\n const actions = [\"Enter value\"];\n if (schema.default !== undefined) actions.push(\"Use default\");\n if (!required) actions.push(\"Omit\");\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === \"Use default\") return { cancelled: false, value: schema.default };\n if (action === \"Omit\") return { cancelled: false, value: undefined };\n const entered = await ui.input(title, current === undefined ? undefined : String(current));\n return entered === undefined ? { cancelled: true } : { cancelled: false, value: entered };\n}\n\nexport function coerceAndValidateFormValues(\n params: ElicitRequestFormParams,\n values: Record<string, ElicitationValue>,\n): Record<string, string | number | boolean | string[]> {\n const output: Record<string, string | number | boolean | string[]> = {};\n const required = new Set(params.requestedSchema.required ?? []);\n for (const [name, schema] of Object.entries(params.requestedSchema.properties)) {\n const value = values[name];\n if (value === undefined) {\n if (required.has(name)) throw new Error(`Missing required elicitation field: ${name}`);\n continue;\n }\n if (schema.type === \"string\") {\n const stringValue = String(value);\n const limits = schema as typeof schema & { minLength?: number; maxLength?: number };\n if (limits.minLength !== undefined && stringValue.length < limits.minLength) {\n throw new Error(`Elicitation field ${name} is shorter than minimum length ${limits.minLength}`);\n }\n if (limits.maxLength !== undefined && stringValue.length > limits.maxLength) {\n throw new Error(`Elicitation field ${name} is longer than maximum length ${limits.maxLength}`);\n }\n if (\"enum\" in schema && !schema.enum.includes(stringValue)) {\n throw new Error(`Elicitation field ${name} is not an allowed value`);\n }\n if (\"oneOf\" in schema && !schema.oneOf.some(option => option.const === stringValue)) {\n throw new Error(`Elicitation field ${name} is not an allowed value`);\n }\n output[name] = stringValue;\n continue;\n }\n if (schema.type === \"number\" || schema.type === \"integer\") {\n if (typeof value === \"string\" && value.trim() === \"\") {\n throw new Error(`Elicitation field ${name} must be a number`);\n }\n const numberValue = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(numberValue)) throw new Error(`Elicitation field ${name} must be a number`);\n if (schema.type === \"integer\" && !Number.isInteger(numberValue)) {\n throw new Error(`Elicitation field ${name} must be an integer`);\n }\n if (schema.minimum !== undefined && numberValue < schema.minimum) {\n throw new Error(`Elicitation field ${name} is below minimum ${schema.minimum}`);\n }\n if (schema.maximum !== undefined && numberValue > schema.maximum) {\n throw new Error(`Elicitation field ${name} is above maximum ${schema.maximum}`);\n }\n output[name] = numberValue;\n continue;\n }\n if (schema.type === \"boolean\") {\n output[name] = typeof value === \"boolean\" ? value : value === \"true\";\n continue;\n }\n if (schema.type === \"array\") {\n if (!Array.isArray(value)) throw new Error(`Elicitation field ${name} must be a list`);\n const allowed = new Set(extractMultiSelectOptions(schema).map(option => option.value));\n const arrayValue = value.map(String);\n if (schema.minItems !== undefined && arrayValue.length < schema.minItems) {\n throw new Error(`Elicitation field ${name} has fewer than ${schema.minItems} selections`);\n }\n if (schema.maxItems !== undefined && arrayValue.length > schema.maxItems) {\n throw new Error(`Elicitation field ${name} has more than ${schema.maxItems} selections`);\n }\n if (arrayValue.some(item => !allowed.has(item))) {\n throw new Error(`Elicitation field ${name} contains an invalid selection`);\n }\n output[name] = arrayValue;\n }\n }\n const validation = new AjvJsonSchemaValidator()\n .getValidator(params.requestedSchema as JsonSchemaType)(output);\n if (!validation.valid) {\n throw new Error(`Invalid elicitation response: ${validation.errorMessage}`);\n }\n return output;\n}\n\nfunction formatChoice(value: string, title?: string): string {\n return title && title !== value ? `${title} (${value})` : value;\n}\n\nfunction uniqueLabels(labels: string[]): string[] {\n const used = new Set<string>();\n return labels.map(label => {\n let unique = label;\n while (used.has(unique)) unique += \"…\";\n used.add(unique);\n return unique;\n });\n}\n\nfunction uniqueAction(label: string, choices: string[]): string {\n let unique = label;\n while (choices.includes(unique)) unique += \"…\";\n return unique;\n}\n\nfunction extractMultiSelectOptions(schema: Extract<FormProperty, { type: \"array\" }>): Array<{ value: string; display: string }> {\n const items = schema.items as { enum?: string[]; anyOf?: Array<{ const: string; title: string }> };\n return items.anyOf\n ? items.anyOf.map(option => ({ value: option.const, display: formatChoice(option.const, option.title) }))\n : (items.enum ?? []).map(value => ({ value, display: value }));\n}\n\nfunction formatReview(\n serverName: string,\n properties: Array<[string, FormProperty]>,\n content: Record<string, string | number | boolean | string[]>,\n): string {\n const rows = properties.map(([name, schema]) =>\n `${schema.title ?? humanizeName(name)}: ${content[name] === undefined ? \"(omitted)\" : String(content[name])}`);\n return [`Review input for ${serverName}`, \"\", ...rows].join(\"\\n\");\n}\n\nexport async function handleUrlElicitation(\n options: ElicitationHandlerOptions,\n params: ElicitRequestURLParams,\n): Promise<ElicitResult> {\n if (!options.allowUrl) throw new McpError(ErrorCode.InvalidParams, \"URL elicitation is not supported\");\n\n let parsed: URL;\n try {\n parsed = new URL(params.url);\n } catch {\n throw new McpError(ErrorCode.InvalidParams, \"URL elicitation supplied an invalid URL\");\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new McpError(ErrorCode.InvalidParams, \"URL elicitation only supports HTTP and HTTPS URLs\");\n }\n\n const decision = await options.ui.select([\n \"MCP Browser Request\",\n `Server: ${options.serverName}`,\n \"\",\n params.message,\n \"\",\n `Host: ${parsed.host}`,\n `Full URL: ${params.url}`,\n \"\",\n \"Open this URL in your browser?\",\n ].join(\"\\n\"), [\"Open\", \"Decline\"]);\n if (decision === undefined) return { action: \"cancel\" };\n if (decision === \"Decline\") return { action: \"decline\" };\n\n try {\n await open(params.url);\n } catch (error) {\n options.ui.notify(`Could not open MCP elicitation URL: ${error instanceof Error ? error.message : String(error)}`, \"error\");\n return { action: \"cancel\" };\n }\n options.onUrlAccepted?.(params.elicitationId);\n options.ui.notify(\"Opened browser for MCP elicitation.\", \"info\");\n return { action: \"accept\" };\n}\n\nfunction humanizeName(name: string): string {\n return name.replace(/[_-]+/g, \" \").replace(/([a-z0-9])([A-Z])/g, \"$1 $2\").replace(/^./, char => char.toUpperCase());\n}\n"]}
1
+ {"version":3,"file":"elicitation-handler.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/elicitation-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EAClB,MAAM,oCAAoC,CAAC;AAK5C,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AAGhF,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEtD,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,oBAAoB,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,yBAAyB,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;AAEtG,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,GAAG,IAAI,CAGnG;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,yBAAyB,EAClC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CAIvB;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,YAAY,CAAC,CAoCvB;AA4GD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GACvC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAuEtD;AAuCD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAoCvB","sourcesContent":["// @ts-nocheck\nimport type { ExtensionUIContext } from \"@ashx-j/lunr\";\nimport type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport {\n ElicitRequestSchema,\n ErrorCode,\n McpError,\n type ElicitRequest,\n type ElicitRequestFormParams,\n type ElicitRequestURLParams,\n type ElicitResult,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { AjvJsonSchemaValidator } from \"@modelcontextprotocol/sdk/validation/ajv\";\nimport type { JsonSchemaType } from \"@modelcontextprotocol/sdk/validation/types.js\";\nimport open from \"open\";\n\nexport type ElicitationValue = string | number | boolean | string[] | undefined;\ntype FormProperty = ElicitRequestFormParams[\"requestedSchema\"][\"properties\"][string];\n\nexport type ElicitationUIContext = ExtensionUIContext;\n\nexport interface ElicitationHandlerOptions {\n serverName: string;\n ui: ElicitationUIContext;\n allowUrl: boolean;\n onUrlAccepted?: (elicitationId: string) => void;\n}\n\nexport type ServerElicitationConfig = Omit<ElicitationHandlerOptions, \"serverName\" | \"onUrlAccepted\">;\n\nexport function registerElicitationHandler(client: Client, options: ElicitationHandlerOptions): void {\n client.setRequestHandler(ElicitRequestSchema, (request) =>\n handleElicitationRequest(options, request));\n}\n\nexport async function handleElicitationRequest(\n options: ElicitationHandlerOptions,\n request: ElicitRequest,\n): Promise<ElicitResult> {\n return request.params.mode === \"url\"\n ? handleUrlElicitation(options, request.params)\n : handleFormElicitation(options, request.params);\n}\n\nexport async function handleFormElicitation(\n options: ElicitationHandlerOptions,\n params: ElicitRequestFormParams,\n): Promise<ElicitResult> {\n const decision = await options.ui.select(\n `MCP Input Request\\nServer: ${options.serverName}\\n\\n${params.message}`,\n [\"Continue\", \"Decline\"],\n );\n if (decision === undefined) return { action: \"cancel\" };\n if (decision === \"Decline\") return { action: \"decline\" };\n\n const values: Record<string, ElicitationValue> = {};\n const properties = Object.entries(params.requestedSchema.properties);\n for (const [name, schema] of properties) {\n const value = await collectValidField(options.ui, params, name, schema);\n if (!(\"value\" in value)) return { action: \"cancel\" };\n values[name] = value.value;\n }\n\n while (true) {\n const content = coerceAndValidateFormValues(params, values);\n const action = await options.ui.select(\n formatReview(options.serverName, properties, content),\n properties.length > 0 ? [\"Submit\", \"Edit\", \"Decline\"] : [\"Submit\", \"Decline\"],\n );\n if (action === undefined) return { action: \"cancel\" };\n if (action === \"Decline\") return { action: \"decline\" };\n if (action === \"Submit\") return { action: \"accept\", content };\n\n const labels = properties.map(([name, schema]) => `${schema.title ?? humanizeName(name)} (${name})`);\n const selected = await options.ui.select(\"Choose a field to edit\", labels);\n if (selected === undefined) return { action: \"cancel\" };\n const property = properties[labels.indexOf(selected)];\n if (!property) continue;\n const [name, schema] = property;\n const value = await collectValidField(options.ui, params, name, schema, values[name]);\n if (!(\"value\" in value)) return { action: \"cancel\" };\n values[name] = value.value;\n }\n}\n\nasync function collectValidField(\n ui: ElicitationUIContext,\n params: ElicitRequestFormParams,\n name: string,\n schema: FormProperty,\n current?: ElicitationValue,\n): Promise<{ cancelled: true } | { cancelled: false; value: ElicitationValue }> {\n const required = params.requestedSchema.required?.includes(name) === true;\n while (true) {\n const result = await collectField(ui, params, name, schema, current);\n if (!(\"value\" in result)) return result;\n try {\n coerceAndValidateFormValues({\n ...params,\n requestedSchema: {\n type: \"object\",\n properties: { [name]: schema },\n ...(required ? { required: [name] } : {}),\n },\n }, { [name]: result.value });\n return result;\n } catch (error) {\n ui.notify(error instanceof Error ? error.message : String(error), \"error\");\n current = result.value;\n }\n }\n}\n\nasync function collectField(\n ui: ElicitationUIContext,\n params: ElicitRequestFormParams,\n name: string,\n schema: FormProperty,\n current?: ElicitationValue,\n): Promise<{ cancelled: true } | { cancelled: false; value: ElicitationValue }> {\n const required = params.requestedSchema.required?.includes(name) === true;\n const title = [schema.title ?? humanizeName(name), required ? \"(required)\" : \"\", schema.description]\n .filter(Boolean)\n .join(\" \");\n\n if (schema.type === \"string\" && (\"enum\" in schema || \"oneOf\" in schema)) {\n const choices = \"oneOf\" in schema\n ? schema.oneOf.map(option => ({ value: option.const, display: formatChoice(option.const, option.title) }))\n : schema.enum.map((value, index) => ({\n value,\n display: formatChoice(value, \"enumNames\" in schema ? schema.enumNames?.[index] : undefined),\n }));\n const displays = uniqueLabels(choices.map(choice => choice.display));\n const actions = [...displays];\n const useDefault = schema.default === undefined ? undefined : uniqueAction(\"Use default\", actions);\n if (useDefault) actions.push(useDefault);\n const omit = required ? undefined : uniqueAction(\"Omit\", actions);\n if (omit) actions.push(omit);\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === useDefault) return { cancelled: false, value: schema.default };\n if (action === omit) return { cancelled: false, value: undefined };\n return { cancelled: false, value: choices[displays.indexOf(action)]?.value };\n }\n\n if (schema.type === \"boolean\") {\n const actions = [\"Yes\", \"No\"];\n if (schema.default !== undefined) actions.push(\"Use default\");\n if (!required) actions.push(\"Omit\");\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === \"Use default\") return { cancelled: false, value: schema.default };\n if (action === \"Omit\") return { cancelled: false, value: undefined };\n return { cancelled: false, value: action === \"Yes\" };\n }\n\n if (schema.type === \"array\") {\n const actions = [\"Choose values\"];\n if (schema.default !== undefined) actions.push(\"Use default\");\n if (!required) actions.push(\"Omit\");\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === \"Use default\") return { cancelled: false, value: schema.default };\n if (action === \"Omit\") return { cancelled: false, value: undefined };\n\n const choices = extractMultiSelectOptions(schema);\n const selected = new Set(Array.isArray(current) ? current : []);\n while (true) {\n const displays = uniqueLabels(choices.map(choice => selected.has(choice.value) ? `✓ ${choice.display}` : choice.display));\n const done = uniqueAction(\"Done\", displays);\n const picked = await ui.select(title, [...displays, done]);\n if (picked === undefined) return { cancelled: true };\n if (picked === done) return { cancelled: false, value: [...selected] };\n const choice = choices[displays.indexOf(picked)];\n if (!choice) continue;\n if (selected.has(choice.value)) selected.delete(choice.value);\n else selected.add(choice.value);\n }\n }\n\n const actions = [\"Enter value\"];\n if (schema.default !== undefined) actions.push(\"Use default\");\n if (!required) actions.push(\"Omit\");\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === \"Use default\") return { cancelled: false, value: schema.default };\n if (action === \"Omit\") return { cancelled: false, value: undefined };\n const entered = await ui.input(title, current === undefined ? undefined : String(current));\n return entered === undefined ? { cancelled: true } : { cancelled: false, value: entered };\n}\n\nexport function coerceAndValidateFormValues(\n params: ElicitRequestFormParams,\n values: Record<string, ElicitationValue>,\n): Record<string, string | number | boolean | string[]> {\n const output: Record<string, string | number | boolean | string[]> = {};\n const required = new Set(params.requestedSchema.required ?? []);\n for (const [name, schema] of Object.entries(params.requestedSchema.properties)) {\n const value = values[name];\n if (value === undefined) {\n if (required.has(name)) throw new Error(`Missing required elicitation field: ${name}`);\n continue;\n }\n if (schema.type === \"string\") {\n const stringValue = String(value);\n const limits = schema as typeof schema & { minLength?: number; maxLength?: number };\n if (limits.minLength !== undefined && stringValue.length < limits.minLength) {\n throw new Error(`Elicitation field ${name} is shorter than minimum length ${limits.minLength}`);\n }\n if (limits.maxLength !== undefined && stringValue.length > limits.maxLength) {\n throw new Error(`Elicitation field ${name} is longer than maximum length ${limits.maxLength}`);\n }\n if (\"enum\" in schema && !schema.enum.includes(stringValue)) {\n throw new Error(`Elicitation field ${name} is not an allowed value`);\n }\n if (\"oneOf\" in schema && !schema.oneOf.some(option => option.const === stringValue)) {\n throw new Error(`Elicitation field ${name} is not an allowed value`);\n }\n output[name] = stringValue;\n continue;\n }\n if (schema.type === \"number\" || schema.type === \"integer\") {\n if (typeof value === \"string\" && value.trim() === \"\") {\n throw new Error(`Elicitation field ${name} must be a number`);\n }\n const numberValue = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(numberValue)) throw new Error(`Elicitation field ${name} must be a number`);\n if (schema.type === \"integer\" && !Number.isInteger(numberValue)) {\n throw new Error(`Elicitation field ${name} must be an integer`);\n }\n if (schema.minimum !== undefined && numberValue < schema.minimum) {\n throw new Error(`Elicitation field ${name} is below minimum ${schema.minimum}`);\n }\n if (schema.maximum !== undefined && numberValue > schema.maximum) {\n throw new Error(`Elicitation field ${name} is above maximum ${schema.maximum}`);\n }\n output[name] = numberValue;\n continue;\n }\n if (schema.type === \"boolean\") {\n output[name] = typeof value === \"boolean\" ? value : value === \"true\";\n continue;\n }\n if (schema.type === \"array\") {\n if (!Array.isArray(value)) throw new Error(`Elicitation field ${name} must be a list`);\n const allowed = new Set(extractMultiSelectOptions(schema).map(option => option.value));\n const arrayValue = value.map(String);\n if (schema.minItems !== undefined && arrayValue.length < schema.minItems) {\n throw new Error(`Elicitation field ${name} has fewer than ${schema.minItems} selections`);\n }\n if (schema.maxItems !== undefined && arrayValue.length > schema.maxItems) {\n throw new Error(`Elicitation field ${name} has more than ${schema.maxItems} selections`);\n }\n if (arrayValue.some(item => !allowed.has(item))) {\n throw new Error(`Elicitation field ${name} contains an invalid selection`);\n }\n output[name] = arrayValue;\n }\n }\n const validation = new AjvJsonSchemaValidator()\n .getValidator(params.requestedSchema as JsonSchemaType)(output);\n if (!validation.valid) {\n throw new Error(`Invalid elicitation response: ${validation.errorMessage}`);\n }\n return output;\n}\n\nfunction formatChoice(value: string, title?: string): string {\n return title && title !== value ? `${title} (${value})` : value;\n}\n\nfunction uniqueLabels(labels: string[]): string[] {\n const used = new Set<string>();\n return labels.map(label => {\n let unique = label;\n while (used.has(unique)) unique += \"…\";\n used.add(unique);\n return unique;\n });\n}\n\nfunction uniqueAction(label: string, choices: string[]): string {\n let unique = label;\n while (choices.includes(unique)) unique += \"…\";\n return unique;\n}\n\nfunction extractMultiSelectOptions(schema: Extract<FormProperty, { type: \"array\" }>): Array<{ value: string; display: string }> {\n const items = schema.items as { enum?: string[]; anyOf?: Array<{ const: string; title: string }> };\n return items.anyOf\n ? items.anyOf.map(option => ({ value: option.const, display: formatChoice(option.const, option.title) }))\n : (items.enum ?? []).map(value => ({ value, display: value }));\n}\n\nfunction formatReview(\n serverName: string,\n properties: Array<[string, FormProperty]>,\n content: Record<string, string | number | boolean | string[]>,\n): string {\n const rows = properties.map(([name, schema]) =>\n `${schema.title ?? humanizeName(name)}: ${content[name] === undefined ? \"(omitted)\" : String(content[name])}`);\n return [`Review input for ${serverName}`, \"\", ...rows].join(\"\\n\");\n}\n\nexport async function handleUrlElicitation(\n options: ElicitationHandlerOptions,\n params: ElicitRequestURLParams,\n): Promise<ElicitResult> {\n if (!options.allowUrl) throw new McpError(ErrorCode.InvalidParams, \"URL elicitation is not supported\");\n\n let parsed: URL;\n try {\n parsed = new URL(params.url);\n } catch {\n throw new McpError(ErrorCode.InvalidParams, \"URL elicitation supplied an invalid URL\");\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new McpError(ErrorCode.InvalidParams, \"URL elicitation only supports HTTP and HTTPS URLs\");\n }\n\n const decision = await options.ui.select([\n \"MCP Browser Request\",\n `Server: ${options.serverName}`,\n \"\",\n params.message,\n \"\",\n `Host: ${parsed.host}`,\n `Full URL: ${params.url}`,\n \"\",\n \"Open this URL in your browser?\",\n ].join(\"\\n\"), [\"Open\", \"Decline\"]);\n if (decision === undefined) return { action: \"cancel\" };\n if (decision === \"Decline\") return { action: \"decline\" };\n\n try {\n await open(params.url);\n } catch (error) {\n options.ui.notify(`Could not open MCP elicitation URL: ${error instanceof Error ? error.message : String(error)}`, \"error\");\n return { action: \"cancel\" };\n }\n options.onUrlAccepted?.(params.elicitationId);\n options.ui.notify(\"Opened browser for MCP elicitation.\", \"info\");\n return { action: \"accept\" };\n}\n\nfunction humanizeName(name: string): string {\n return name.replace(/[_-]+/g, \" \").replace(/([a-z0-9])([A-Z])/g, \"$1 $2\").replace(/^./, char => char.toUpperCase());\n}\n"]}