@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":"sampling-handler.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/sampling-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,GAAG,EAAuC,KAAK,KAAK,EAAoB,MAAM,8BAA8B,CAAC;AAErI,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAIzB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9C,SAAS,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;CAC1C;AAED,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAAC;AAE9E,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAI7F;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAkD9B","sourcesContent":["// @ts-nocheck\nimport { complete, type Api, type AssistantMessage, type Message, type Model, type TextContent } from \"@earendil-works/pi-ai/compat\";\nimport { truncateAtWord } from \"./utils.ts\";\nimport type { ExtensionUIContext, ModelRegistry } from \"@earendil-works/pi-coding-agent\";\nimport type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport {\n CreateMessageRequestSchema,\n type CreateMessageRequest,\n type CreateMessageResult,\n type ModelPreferences,\n type SamplingMessage,\n type SamplingMessageContentBlock,\n} from \"@modelcontextprotocol/sdk/types.js\";\n\nexport interface SamplingHandlerOptions {\n serverName: string;\n autoApprove: boolean;\n ui?: ExtensionUIContext;\n modelRegistry: ModelRegistry;\n getCurrentModel: () => Model<Api> | undefined;\n getSignal: () => AbortSignal | undefined;\n}\n\nexport type ServerSamplingConfig = Omit<SamplingHandlerOptions, \"serverName\">;\n\nexport function registerSamplingHandler(client: Client, options: SamplingHandlerOptions): void {\n client.setRequestHandler(CreateMessageRequestSchema, (request) => {\n return handleSamplingRequest(options, request as CreateMessageRequest);\n });\n}\n\nexport async function handleSamplingRequest(\n options: SamplingHandlerOptions,\n request: CreateMessageRequest,\n): Promise<CreateMessageResult> {\n const params = request.params;\n\n if (\"task\" in params && params.task) {\n throw new Error(\"MCP sampling tasks are not supported\");\n }\n if (params.includeContext && params.includeContext !== \"none\") {\n throw new Error(\"MCP sampling context inclusion is not supported\");\n }\n if (params.tools?.length) {\n throw new Error(\"MCP sampling tool use is not supported\");\n }\n if (params.toolChoice) {\n throw new Error(\"MCP sampling tool choice is not supported\");\n }\n if (params.stopSequences?.length) {\n throw new Error(\"MCP sampling stop sequences are not supported\");\n }\n\n const messages = params.messages.map(convertSamplingMessage);\n const { model, apiKey, headers } = await resolveSamplingModel(options, params.modelPreferences);\n await confirmSampling(\n options,\n \"Approve MCP sampling request\",\n formatRequestApproval(options.serverName, `${model.provider}/${model.id}`, params.systemPrompt, messages),\n );\n\n const result = await complete(\n model,\n {\n systemPrompt: params.systemPrompt,\n messages,\n },\n {\n apiKey,\n headers,\n maxTokens: params.maxTokens,\n temperature: params.temperature,\n metadata: params.metadata as Record<string, unknown> | undefined,\n signal: options.getSignal(),\n },\n );\n\n const converted = convertAssistantResult(result);\n await confirmSampling(\n options,\n \"Return MCP sampling response\",\n formatResponseApproval(options.serverName, converted),\n );\n return converted;\n}\n\nfunction formatRequestApproval(\n serverName: string,\n modelName: string,\n systemPrompt: string | undefined,\n messages: Message[],\n): string {\n const lines = [`${serverName} wants to sample ${messages.length} message${messages.length === 1 ? \"\" : \"s\"} with ${modelName}.`];\n if (systemPrompt) {\n lines.push(`System: ${truncateAtWord(systemPrompt, 400)}`);\n }\n for (const [index, message] of messages.entries()) {\n lines.push(`${index + 1}. ${message.role}: ${truncateAtWord(messageText(message), 400)}`);\n }\n return lines.join(\"\\n\\n\");\n}\n\nfunction formatResponseApproval(serverName: string, response: CreateMessageResult): string {\n const text = response.content.type === \"text\" ? response.content.text : `[${response.content.type} content]`;\n return `${serverName} will receive this response from ${response.model}:\\n\\n${truncateAtWord(text, 1000)}`;\n}\n\nfunction messageText(message: Message): string {\n if (typeof message.content === \"string\") return message.content;\n return message.content.map((block) => {\n if (block.type === \"text\") return block.text;\n if (block.type === \"image\") return `[image: ${block.mimeType}]`;\n if (block.type === \"thinking\") return \"[thinking]\";\n if (block.type === \"toolCall\") return `[tool call: ${block.name}]`;\n return \"[content]\";\n }).join(\"\\n\");\n}\n\nasync function resolveSamplingModel(\n options: SamplingHandlerOptions,\n modelPreferences: ModelPreferences | undefined,\n): Promise<{\n model: Model<Api>;\n apiKey?: string;\n headers?: Record<string, string>;\n}> {\n const candidates: Model<Api>[] = [];\n const availableModels = options.modelRegistry.getAvailable();\n\n for (const hint of modelPreferences?.hints ?? []) {\n const normalizedHint = hint.name?.trim().toLowerCase();\n if (!normalizedHint) continue;\n for (const model of availableModels) {\n const searchableNames = [`${model.provider}/${model.id}`, model.id, model.name];\n if (searchableNames.some((name) => name.toLowerCase().includes(normalizedHint))) {\n addSamplingCandidate(candidates, model);\n }\n }\n }\n\n const currentModel = options.getCurrentModel();\n if (currentModel) addSamplingCandidate(candidates, currentModel);\n\n for (const model of availableModels) {\n addSamplingCandidate(candidates, model);\n }\n\n const errors: string[] = [];\n for (const model of candidates) {\n const auth = await options.modelRegistry.getApiKeyAndHeaders(model);\n if (auth.ok === false) {\n errors.push(`${model.provider}/${model.id}: ${auth.error}`);\n continue;\n }\n return { model, apiKey: auth.apiKey, headers: auth.headers };\n }\n\n if (errors.length > 0) {\n throw new Error(`No configured auth for MCP sampling model. ${errors.join(\"; \")}`);\n }\n throw new Error(\"No Pi model is available for MCP sampling\");\n}\n\nfunction addSamplingCandidate(candidates: Model<Api>[], model: Model<Api>): void {\n if (!candidates.some((candidate) => candidate.provider === model.provider && candidate.id === model.id)) {\n candidates.push(model);\n }\n}\n\nasync function confirmSampling(options: SamplingHandlerOptions, title: string, message: string): Promise<void> {\n if (options.autoApprove) return;\n if (!options.ui) {\n throw new Error(\"MCP sampling requires interactive approval. Set settings.samplingAutoApprove to true to allow it without UI.\");\n }\n const approved = await options.ui.confirm(title, message);\n if (!approved) {\n throw new Error(\"MCP sampling request was declined\");\n }\n}\n\nfunction convertSamplingMessage(message: SamplingMessage): Message {\n const blocks = Array.isArray(message.content) ? message.content : [message.content];\n if (message.role === \"user\") {\n return {\n role: \"user\",\n content: blocks.map(convertUserContent),\n timestamp: Date.now(),\n };\n }\n\n return {\n role: \"assistant\",\n content: blocks.map(convertAssistantContent),\n api: \"mcp-sampling\",\n provider: \"mcp\",\n model: \"sampling-request\",\n usage: zeroUsage(),\n stopReason: \"stop\",\n timestamp: Date.now(),\n };\n}\n\nfunction convertUserContent(block: SamplingMessageContentBlock): TextContent {\n if (block.type === \"text\") {\n return { type: \"text\", text: block.text };\n }\n throw new Error(`MCP sampling ${block.type} content is not supported`);\n}\n\nfunction convertAssistantContent(block: SamplingMessageContentBlock): TextContent {\n if (block.type === \"text\") {\n return { type: \"text\", text: block.text };\n }\n throw new Error(`MCP sampling assistant ${block.type} content is not supported`);\n}\n\nfunction convertAssistantResult(message: AssistantMessage): CreateMessageResult {\n if (message.stopReason === \"error\") {\n throw new Error(message.errorMessage ?? \"MCP sampling model call failed\");\n }\n if (message.stopReason === \"aborted\") {\n throw new Error(message.errorMessage ?? \"MCP sampling model call was aborted\");\n }\n\n const text = message.content\n .map((block) => {\n if (block.type === \"text\") return block.text;\n if (block.type === \"thinking\") return undefined;\n throw new Error(`MCP sampling result ${block.type} content is not supported`);\n })\n .filter((value): value is string => value !== undefined)\n .join(\"\\n\\n\")\n .trim();\n\n if (!text) {\n throw new Error(\"MCP sampling result did not contain text content\");\n }\n\n return {\n role: \"assistant\",\n content: { type: \"text\", text },\n model: `${message.provider}/${message.model}`,\n stopReason: mapStopReason(message.stopReason),\n };\n}\n\nfunction mapStopReason(reason: AssistantMessage[\"stopReason\"]): CreateMessageResult[\"stopReason\"] {\n if (reason === \"stop\") return \"endTurn\";\n if (reason === \"length\") return \"maxTokens\";\n if (reason === \"toolUse\") return \"toolUse\";\n return reason;\n}\n\nfunction zeroUsage(): AssistantMessage[\"usage\"] {\n return {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n total: 0,\n },\n };\n}\n"]}
1
+ {"version":3,"file":"sampling-handler.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/sampling-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,GAAG,EAAuC,KAAK,KAAK,EAAoB,MAAM,8BAA8B,CAAC;AAErI,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAIzB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9C,SAAS,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;CAC1C;AAED,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAAC;AAE9E,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAI7F;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAkD9B","sourcesContent":["// @ts-nocheck\nimport { complete, type Api, type AssistantMessage, type Message, type Model, type TextContent } from \"@ashx-j/lunr-ai/compat\";\nimport { truncateAtWord } from \"./utils.ts\";\nimport type { ExtensionUIContext, ModelRegistry } from \"@ashx-j/lunr\";\nimport type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport {\n CreateMessageRequestSchema,\n type CreateMessageRequest,\n type CreateMessageResult,\n type ModelPreferences,\n type SamplingMessage,\n type SamplingMessageContentBlock,\n} from \"@modelcontextprotocol/sdk/types.js\";\n\nexport interface SamplingHandlerOptions {\n serverName: string;\n autoApprove: boolean;\n ui?: ExtensionUIContext;\n modelRegistry: ModelRegistry;\n getCurrentModel: () => Model<Api> | undefined;\n getSignal: () => AbortSignal | undefined;\n}\n\nexport type ServerSamplingConfig = Omit<SamplingHandlerOptions, \"serverName\">;\n\nexport function registerSamplingHandler(client: Client, options: SamplingHandlerOptions): void {\n client.setRequestHandler(CreateMessageRequestSchema, (request) => {\n return handleSamplingRequest(options, request as CreateMessageRequest);\n });\n}\n\nexport async function handleSamplingRequest(\n options: SamplingHandlerOptions,\n request: CreateMessageRequest,\n): Promise<CreateMessageResult> {\n const params = request.params;\n\n if (\"task\" in params && params.task) {\n throw new Error(\"MCP sampling tasks are not supported\");\n }\n if (params.includeContext && params.includeContext !== \"none\") {\n throw new Error(\"MCP sampling context inclusion is not supported\");\n }\n if (params.tools?.length) {\n throw new Error(\"MCP sampling tool use is not supported\");\n }\n if (params.toolChoice) {\n throw new Error(\"MCP sampling tool choice is not supported\");\n }\n if (params.stopSequences?.length) {\n throw new Error(\"MCP sampling stop sequences are not supported\");\n }\n\n const messages = params.messages.map(convertSamplingMessage);\n const { model, apiKey, headers } = await resolveSamplingModel(options, params.modelPreferences);\n await confirmSampling(\n options,\n \"Approve MCP sampling request\",\n formatRequestApproval(options.serverName, `${model.provider}/${model.id}`, params.systemPrompt, messages),\n );\n\n const result = await complete(\n model,\n {\n systemPrompt: params.systemPrompt,\n messages,\n },\n {\n apiKey,\n headers,\n maxTokens: params.maxTokens,\n temperature: params.temperature,\n metadata: params.metadata as Record<string, unknown> | undefined,\n signal: options.getSignal(),\n },\n );\n\n const converted = convertAssistantResult(result);\n await confirmSampling(\n options,\n \"Return MCP sampling response\",\n formatResponseApproval(options.serverName, converted),\n );\n return converted;\n}\n\nfunction formatRequestApproval(\n serverName: string,\n modelName: string,\n systemPrompt: string | undefined,\n messages: Message[],\n): string {\n const lines = [`${serverName} wants to sample ${messages.length} message${messages.length === 1 ? \"\" : \"s\"} with ${modelName}.`];\n if (systemPrompt) {\n lines.push(`System: ${truncateAtWord(systemPrompt, 400)}`);\n }\n for (const [index, message] of messages.entries()) {\n lines.push(`${index + 1}. ${message.role}: ${truncateAtWord(messageText(message), 400)}`);\n }\n return lines.join(\"\\n\\n\");\n}\n\nfunction formatResponseApproval(serverName: string, response: CreateMessageResult): string {\n const text = response.content.type === \"text\" ? response.content.text : `[${response.content.type} content]`;\n return `${serverName} will receive this response from ${response.model}:\\n\\n${truncateAtWord(text, 1000)}`;\n}\n\nfunction messageText(message: Message): string {\n if (typeof message.content === \"string\") return message.content;\n return message.content.map((block) => {\n if (block.type === \"text\") return block.text;\n if (block.type === \"image\") return `[image: ${block.mimeType}]`;\n if (block.type === \"thinking\") return \"[thinking]\";\n if (block.type === \"toolCall\") return `[tool call: ${block.name}]`;\n return \"[content]\";\n }).join(\"\\n\");\n}\n\nasync function resolveSamplingModel(\n options: SamplingHandlerOptions,\n modelPreferences: ModelPreferences | undefined,\n): Promise<{\n model: Model<Api>;\n apiKey?: string;\n headers?: Record<string, string>;\n}> {\n const candidates: Model<Api>[] = [];\n const availableModels = options.modelRegistry.getAvailable();\n\n for (const hint of modelPreferences?.hints ?? []) {\n const normalizedHint = hint.name?.trim().toLowerCase();\n if (!normalizedHint) continue;\n for (const model of availableModels) {\n const searchableNames = [`${model.provider}/${model.id}`, model.id, model.name];\n if (searchableNames.some((name) => name.toLowerCase().includes(normalizedHint))) {\n addSamplingCandidate(candidates, model);\n }\n }\n }\n\n const currentModel = options.getCurrentModel();\n if (currentModel) addSamplingCandidate(candidates, currentModel);\n\n for (const model of availableModels) {\n addSamplingCandidate(candidates, model);\n }\n\n const errors: string[] = [];\n for (const model of candidates) {\n const auth = await options.modelRegistry.getApiKeyAndHeaders(model);\n if (auth.ok === false) {\n errors.push(`${model.provider}/${model.id}: ${auth.error}`);\n continue;\n }\n return { model, apiKey: auth.apiKey, headers: auth.headers };\n }\n\n if (errors.length > 0) {\n throw new Error(`No configured auth for MCP sampling model. ${errors.join(\"; \")}`);\n }\n throw new Error(\"No Pi model is available for MCP sampling\");\n}\n\nfunction addSamplingCandidate(candidates: Model<Api>[], model: Model<Api>): void {\n if (!candidates.some((candidate) => candidate.provider === model.provider && candidate.id === model.id)) {\n candidates.push(model);\n }\n}\n\nasync function confirmSampling(options: SamplingHandlerOptions, title: string, message: string): Promise<void> {\n if (options.autoApprove) return;\n if (!options.ui) {\n throw new Error(\"MCP sampling requires interactive approval. Set settings.samplingAutoApprove to true to allow it without UI.\");\n }\n const approved = await options.ui.confirm(title, message);\n if (!approved) {\n throw new Error(\"MCP sampling request was declined\");\n }\n}\n\nfunction convertSamplingMessage(message: SamplingMessage): Message {\n const blocks = Array.isArray(message.content) ? message.content : [message.content];\n if (message.role === \"user\") {\n return {\n role: \"user\",\n content: blocks.map(convertUserContent),\n timestamp: Date.now(),\n };\n }\n\n return {\n role: \"assistant\",\n content: blocks.map(convertAssistantContent),\n api: \"mcp-sampling\",\n provider: \"mcp\",\n model: \"sampling-request\",\n usage: zeroUsage(),\n stopReason: \"stop\",\n timestamp: Date.now(),\n };\n}\n\nfunction convertUserContent(block: SamplingMessageContentBlock): TextContent {\n if (block.type === \"text\") {\n return { type: \"text\", text: block.text };\n }\n throw new Error(`MCP sampling ${block.type} content is not supported`);\n}\n\nfunction convertAssistantContent(block: SamplingMessageContentBlock): TextContent {\n if (block.type === \"text\") {\n return { type: \"text\", text: block.text };\n }\n throw new Error(`MCP sampling assistant ${block.type} content is not supported`);\n}\n\nfunction convertAssistantResult(message: AssistantMessage): CreateMessageResult {\n if (message.stopReason === \"error\") {\n throw new Error(message.errorMessage ?? \"MCP sampling model call failed\");\n }\n if (message.stopReason === \"aborted\") {\n throw new Error(message.errorMessage ?? \"MCP sampling model call was aborted\");\n }\n\n const text = message.content\n .map((block) => {\n if (block.type === \"text\") return block.text;\n if (block.type === \"thinking\") return undefined;\n throw new Error(`MCP sampling result ${block.type} content is not supported`);\n })\n .filter((value): value is string => value !== undefined)\n .join(\"\\n\\n\")\n .trim();\n\n if (!text) {\n throw new Error(\"MCP sampling result did not contain text content\");\n }\n\n return {\n role: \"assistant\",\n content: { type: \"text\", text },\n model: `${message.provider}/${message.model}`,\n stopReason: mapStopReason(message.stopReason),\n };\n}\n\nfunction mapStopReason(reason: AssistantMessage[\"stopReason\"]): CreateMessageResult[\"stopReason\"] {\n if (reason === \"stop\") return \"endTurn\";\n if (reason === \"length\") return \"maxTokens\";\n if (reason === \"toolUse\") return \"toolUse\";\n return reason;\n}\n\nfunction zeroUsage(): AssistantMessage[\"usage\"] {\n return {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n total: 0,\n },\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  // @ts-nocheck
2
- import { complete } from "@earendil-works/pi-ai/compat";
2
+ import { complete } from "@ashx-j/lunr-ai/compat";
3
3
  import { truncateAtWord } from "./utils.js";
4
4
  import { CreateMessageRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
5
  export function registerSamplingHandler(client, options) {
@@ -1 +1 @@
1
- {"version":3,"file":"sampling-handler.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/sampling-handler.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { complete, type Api, type AssistantMessage, type Message, type Model, type TextContent } from \"@earendil-works/pi-ai/compat\";\nimport { truncateAtWord } from \"./utils.ts\";\nimport type { ExtensionUIContext, ModelRegistry } from \"@earendil-works/pi-coding-agent\";\nimport type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport {\n CreateMessageRequestSchema,\n type CreateMessageRequest,\n type CreateMessageResult,\n type ModelPreferences,\n type SamplingMessage,\n type SamplingMessageContentBlock,\n} from \"@modelcontextprotocol/sdk/types.js\";\n\nexport interface SamplingHandlerOptions {\n serverName: string;\n autoApprove: boolean;\n ui?: ExtensionUIContext;\n modelRegistry: ModelRegistry;\n getCurrentModel: () => Model<Api> | undefined;\n getSignal: () => AbortSignal | undefined;\n}\n\nexport type ServerSamplingConfig = Omit<SamplingHandlerOptions, \"serverName\">;\n\nexport function registerSamplingHandler(client: Client, options: SamplingHandlerOptions): void {\n client.setRequestHandler(CreateMessageRequestSchema, (request) => {\n return handleSamplingRequest(options, request as CreateMessageRequest);\n });\n}\n\nexport async function handleSamplingRequest(\n options: SamplingHandlerOptions,\n request: CreateMessageRequest,\n): Promise<CreateMessageResult> {\n const params = request.params;\n\n if (\"task\" in params && params.task) {\n throw new Error(\"MCP sampling tasks are not supported\");\n }\n if (params.includeContext && params.includeContext !== \"none\") {\n throw new Error(\"MCP sampling context inclusion is not supported\");\n }\n if (params.tools?.length) {\n throw new Error(\"MCP sampling tool use is not supported\");\n }\n if (params.toolChoice) {\n throw new Error(\"MCP sampling tool choice is not supported\");\n }\n if (params.stopSequences?.length) {\n throw new Error(\"MCP sampling stop sequences are not supported\");\n }\n\n const messages = params.messages.map(convertSamplingMessage);\n const { model, apiKey, headers } = await resolveSamplingModel(options, params.modelPreferences);\n await confirmSampling(\n options,\n \"Approve MCP sampling request\",\n formatRequestApproval(options.serverName, `${model.provider}/${model.id}`, params.systemPrompt, messages),\n );\n\n const result = await complete(\n model,\n {\n systemPrompt: params.systemPrompt,\n messages,\n },\n {\n apiKey,\n headers,\n maxTokens: params.maxTokens,\n temperature: params.temperature,\n metadata: params.metadata as Record<string, unknown> | undefined,\n signal: options.getSignal(),\n },\n );\n\n const converted = convertAssistantResult(result);\n await confirmSampling(\n options,\n \"Return MCP sampling response\",\n formatResponseApproval(options.serverName, converted),\n );\n return converted;\n}\n\nfunction formatRequestApproval(\n serverName: string,\n modelName: string,\n systemPrompt: string | undefined,\n messages: Message[],\n): string {\n const lines = [`${serverName} wants to sample ${messages.length} message${messages.length === 1 ? \"\" : \"s\"} with ${modelName}.`];\n if (systemPrompt) {\n lines.push(`System: ${truncateAtWord(systemPrompt, 400)}`);\n }\n for (const [index, message] of messages.entries()) {\n lines.push(`${index + 1}. ${message.role}: ${truncateAtWord(messageText(message), 400)}`);\n }\n return lines.join(\"\\n\\n\");\n}\n\nfunction formatResponseApproval(serverName: string, response: CreateMessageResult): string {\n const text = response.content.type === \"text\" ? response.content.text : `[${response.content.type} content]`;\n return `${serverName} will receive this response from ${response.model}:\\n\\n${truncateAtWord(text, 1000)}`;\n}\n\nfunction messageText(message: Message): string {\n if (typeof message.content === \"string\") return message.content;\n return message.content.map((block) => {\n if (block.type === \"text\") return block.text;\n if (block.type === \"image\") return `[image: ${block.mimeType}]`;\n if (block.type === \"thinking\") return \"[thinking]\";\n if (block.type === \"toolCall\") return `[tool call: ${block.name}]`;\n return \"[content]\";\n }).join(\"\\n\");\n}\n\nasync function resolveSamplingModel(\n options: SamplingHandlerOptions,\n modelPreferences: ModelPreferences | undefined,\n): Promise<{\n model: Model<Api>;\n apiKey?: string;\n headers?: Record<string, string>;\n}> {\n const candidates: Model<Api>[] = [];\n const availableModels = options.modelRegistry.getAvailable();\n\n for (const hint of modelPreferences?.hints ?? []) {\n const normalizedHint = hint.name?.trim().toLowerCase();\n if (!normalizedHint) continue;\n for (const model of availableModels) {\n const searchableNames = [`${model.provider}/${model.id}`, model.id, model.name];\n if (searchableNames.some((name) => name.toLowerCase().includes(normalizedHint))) {\n addSamplingCandidate(candidates, model);\n }\n }\n }\n\n const currentModel = options.getCurrentModel();\n if (currentModel) addSamplingCandidate(candidates, currentModel);\n\n for (const model of availableModels) {\n addSamplingCandidate(candidates, model);\n }\n\n const errors: string[] = [];\n for (const model of candidates) {\n const auth = await options.modelRegistry.getApiKeyAndHeaders(model);\n if (auth.ok === false) {\n errors.push(`${model.provider}/${model.id}: ${auth.error}`);\n continue;\n }\n return { model, apiKey: auth.apiKey, headers: auth.headers };\n }\n\n if (errors.length > 0) {\n throw new Error(`No configured auth for MCP sampling model. ${errors.join(\"; \")}`);\n }\n throw new Error(\"No Pi model is available for MCP sampling\");\n}\n\nfunction addSamplingCandidate(candidates: Model<Api>[], model: Model<Api>): void {\n if (!candidates.some((candidate) => candidate.provider === model.provider && candidate.id === model.id)) {\n candidates.push(model);\n }\n}\n\nasync function confirmSampling(options: SamplingHandlerOptions, title: string, message: string): Promise<void> {\n if (options.autoApprove) return;\n if (!options.ui) {\n throw new Error(\"MCP sampling requires interactive approval. Set settings.samplingAutoApprove to true to allow it without UI.\");\n }\n const approved = await options.ui.confirm(title, message);\n if (!approved) {\n throw new Error(\"MCP sampling request was declined\");\n }\n}\n\nfunction convertSamplingMessage(message: SamplingMessage): Message {\n const blocks = Array.isArray(message.content) ? message.content : [message.content];\n if (message.role === \"user\") {\n return {\n role: \"user\",\n content: blocks.map(convertUserContent),\n timestamp: Date.now(),\n };\n }\n\n return {\n role: \"assistant\",\n content: blocks.map(convertAssistantContent),\n api: \"mcp-sampling\",\n provider: \"mcp\",\n model: \"sampling-request\",\n usage: zeroUsage(),\n stopReason: \"stop\",\n timestamp: Date.now(),\n };\n}\n\nfunction convertUserContent(block: SamplingMessageContentBlock): TextContent {\n if (block.type === \"text\") {\n return { type: \"text\", text: block.text };\n }\n throw new Error(`MCP sampling ${block.type} content is not supported`);\n}\n\nfunction convertAssistantContent(block: SamplingMessageContentBlock): TextContent {\n if (block.type === \"text\") {\n return { type: \"text\", text: block.text };\n }\n throw new Error(`MCP sampling assistant ${block.type} content is not supported`);\n}\n\nfunction convertAssistantResult(message: AssistantMessage): CreateMessageResult {\n if (message.stopReason === \"error\") {\n throw new Error(message.errorMessage ?? \"MCP sampling model call failed\");\n }\n if (message.stopReason === \"aborted\") {\n throw new Error(message.errorMessage ?? \"MCP sampling model call was aborted\");\n }\n\n const text = message.content\n .map((block) => {\n if (block.type === \"text\") return block.text;\n if (block.type === \"thinking\") return undefined;\n throw new Error(`MCP sampling result ${block.type} content is not supported`);\n })\n .filter((value): value is string => value !== undefined)\n .join(\"\\n\\n\")\n .trim();\n\n if (!text) {\n throw new Error(\"MCP sampling result did not contain text content\");\n }\n\n return {\n role: \"assistant\",\n content: { type: \"text\", text },\n model: `${message.provider}/${message.model}`,\n stopReason: mapStopReason(message.stopReason),\n };\n}\n\nfunction mapStopReason(reason: AssistantMessage[\"stopReason\"]): CreateMessageResult[\"stopReason\"] {\n if (reason === \"stop\") return \"endTurn\";\n if (reason === \"length\") return \"maxTokens\";\n if (reason === \"toolUse\") return \"toolUse\";\n return reason;\n}\n\nfunction zeroUsage(): AssistantMessage[\"usage\"] {\n return {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n total: 0,\n },\n };\n}\n"]}
1
+ {"version":3,"file":"sampling-handler.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/sampling-handler.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { complete, type Api, type AssistantMessage, type Message, type Model, type TextContent } from \"@ashx-j/lunr-ai/compat\";\nimport { truncateAtWord } from \"./utils.ts\";\nimport type { ExtensionUIContext, ModelRegistry } from \"@ashx-j/lunr\";\nimport type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport {\n CreateMessageRequestSchema,\n type CreateMessageRequest,\n type CreateMessageResult,\n type ModelPreferences,\n type SamplingMessage,\n type SamplingMessageContentBlock,\n} from \"@modelcontextprotocol/sdk/types.js\";\n\nexport interface SamplingHandlerOptions {\n serverName: string;\n autoApprove: boolean;\n ui?: ExtensionUIContext;\n modelRegistry: ModelRegistry;\n getCurrentModel: () => Model<Api> | undefined;\n getSignal: () => AbortSignal | undefined;\n}\n\nexport type ServerSamplingConfig = Omit<SamplingHandlerOptions, \"serverName\">;\n\nexport function registerSamplingHandler(client: Client, options: SamplingHandlerOptions): void {\n client.setRequestHandler(CreateMessageRequestSchema, (request) => {\n return handleSamplingRequest(options, request as CreateMessageRequest);\n });\n}\n\nexport async function handleSamplingRequest(\n options: SamplingHandlerOptions,\n request: CreateMessageRequest,\n): Promise<CreateMessageResult> {\n const params = request.params;\n\n if (\"task\" in params && params.task) {\n throw new Error(\"MCP sampling tasks are not supported\");\n }\n if (params.includeContext && params.includeContext !== \"none\") {\n throw new Error(\"MCP sampling context inclusion is not supported\");\n }\n if (params.tools?.length) {\n throw new Error(\"MCP sampling tool use is not supported\");\n }\n if (params.toolChoice) {\n throw new Error(\"MCP sampling tool choice is not supported\");\n }\n if (params.stopSequences?.length) {\n throw new Error(\"MCP sampling stop sequences are not supported\");\n }\n\n const messages = params.messages.map(convertSamplingMessage);\n const { model, apiKey, headers } = await resolveSamplingModel(options, params.modelPreferences);\n await confirmSampling(\n options,\n \"Approve MCP sampling request\",\n formatRequestApproval(options.serverName, `${model.provider}/${model.id}`, params.systemPrompt, messages),\n );\n\n const result = await complete(\n model,\n {\n systemPrompt: params.systemPrompt,\n messages,\n },\n {\n apiKey,\n headers,\n maxTokens: params.maxTokens,\n temperature: params.temperature,\n metadata: params.metadata as Record<string, unknown> | undefined,\n signal: options.getSignal(),\n },\n );\n\n const converted = convertAssistantResult(result);\n await confirmSampling(\n options,\n \"Return MCP sampling response\",\n formatResponseApproval(options.serverName, converted),\n );\n return converted;\n}\n\nfunction formatRequestApproval(\n serverName: string,\n modelName: string,\n systemPrompt: string | undefined,\n messages: Message[],\n): string {\n const lines = [`${serverName} wants to sample ${messages.length} message${messages.length === 1 ? \"\" : \"s\"} with ${modelName}.`];\n if (systemPrompt) {\n lines.push(`System: ${truncateAtWord(systemPrompt, 400)}`);\n }\n for (const [index, message] of messages.entries()) {\n lines.push(`${index + 1}. ${message.role}: ${truncateAtWord(messageText(message), 400)}`);\n }\n return lines.join(\"\\n\\n\");\n}\n\nfunction formatResponseApproval(serverName: string, response: CreateMessageResult): string {\n const text = response.content.type === \"text\" ? response.content.text : `[${response.content.type} content]`;\n return `${serverName} will receive this response from ${response.model}:\\n\\n${truncateAtWord(text, 1000)}`;\n}\n\nfunction messageText(message: Message): string {\n if (typeof message.content === \"string\") return message.content;\n return message.content.map((block) => {\n if (block.type === \"text\") return block.text;\n if (block.type === \"image\") return `[image: ${block.mimeType}]`;\n if (block.type === \"thinking\") return \"[thinking]\";\n if (block.type === \"toolCall\") return `[tool call: ${block.name}]`;\n return \"[content]\";\n }).join(\"\\n\");\n}\n\nasync function resolveSamplingModel(\n options: SamplingHandlerOptions,\n modelPreferences: ModelPreferences | undefined,\n): Promise<{\n model: Model<Api>;\n apiKey?: string;\n headers?: Record<string, string>;\n}> {\n const candidates: Model<Api>[] = [];\n const availableModels = options.modelRegistry.getAvailable();\n\n for (const hint of modelPreferences?.hints ?? []) {\n const normalizedHint = hint.name?.trim().toLowerCase();\n if (!normalizedHint) continue;\n for (const model of availableModels) {\n const searchableNames = [`${model.provider}/${model.id}`, model.id, model.name];\n if (searchableNames.some((name) => name.toLowerCase().includes(normalizedHint))) {\n addSamplingCandidate(candidates, model);\n }\n }\n }\n\n const currentModel = options.getCurrentModel();\n if (currentModel) addSamplingCandidate(candidates, currentModel);\n\n for (const model of availableModels) {\n addSamplingCandidate(candidates, model);\n }\n\n const errors: string[] = [];\n for (const model of candidates) {\n const auth = await options.modelRegistry.getApiKeyAndHeaders(model);\n if (auth.ok === false) {\n errors.push(`${model.provider}/${model.id}: ${auth.error}`);\n continue;\n }\n return { model, apiKey: auth.apiKey, headers: auth.headers };\n }\n\n if (errors.length > 0) {\n throw new Error(`No configured auth for MCP sampling model. ${errors.join(\"; \")}`);\n }\n throw new Error(\"No Pi model is available for MCP sampling\");\n}\n\nfunction addSamplingCandidate(candidates: Model<Api>[], model: Model<Api>): void {\n if (!candidates.some((candidate) => candidate.provider === model.provider && candidate.id === model.id)) {\n candidates.push(model);\n }\n}\n\nasync function confirmSampling(options: SamplingHandlerOptions, title: string, message: string): Promise<void> {\n if (options.autoApprove) return;\n if (!options.ui) {\n throw new Error(\"MCP sampling requires interactive approval. Set settings.samplingAutoApprove to true to allow it without UI.\");\n }\n const approved = await options.ui.confirm(title, message);\n if (!approved) {\n throw new Error(\"MCP sampling request was declined\");\n }\n}\n\nfunction convertSamplingMessage(message: SamplingMessage): Message {\n const blocks = Array.isArray(message.content) ? message.content : [message.content];\n if (message.role === \"user\") {\n return {\n role: \"user\",\n content: blocks.map(convertUserContent),\n timestamp: Date.now(),\n };\n }\n\n return {\n role: \"assistant\",\n content: blocks.map(convertAssistantContent),\n api: \"mcp-sampling\",\n provider: \"mcp\",\n model: \"sampling-request\",\n usage: zeroUsage(),\n stopReason: \"stop\",\n timestamp: Date.now(),\n };\n}\n\nfunction convertUserContent(block: SamplingMessageContentBlock): TextContent {\n if (block.type === \"text\") {\n return { type: \"text\", text: block.text };\n }\n throw new Error(`MCP sampling ${block.type} content is not supported`);\n}\n\nfunction convertAssistantContent(block: SamplingMessageContentBlock): TextContent {\n if (block.type === \"text\") {\n return { type: \"text\", text: block.text };\n }\n throw new Error(`MCP sampling assistant ${block.type} content is not supported`);\n}\n\nfunction convertAssistantResult(message: AssistantMessage): CreateMessageResult {\n if (message.stopReason === \"error\") {\n throw new Error(message.errorMessage ?? \"MCP sampling model call failed\");\n }\n if (message.stopReason === \"aborted\") {\n throw new Error(message.errorMessage ?? \"MCP sampling model call was aborted\");\n }\n\n const text = message.content\n .map((block) => {\n if (block.type === \"text\") return block.text;\n if (block.type === \"thinking\") return undefined;\n throw new Error(`MCP sampling result ${block.type} content is not supported`);\n })\n .filter((value): value is string => value !== undefined)\n .join(\"\\n\\n\")\n .trim();\n\n if (!text) {\n throw new Error(\"MCP sampling result did not contain text content\");\n }\n\n return {\n role: \"assistant\",\n content: { type: \"text\", text },\n model: `${message.provider}/${message.model}`,\n stopReason: mapStopReason(message.stopReason),\n };\n}\n\nfunction mapStopReason(reason: AssistantMessage[\"stopReason\"]): CreateMessageResult[\"stopReason\"] {\n if (reason === \"stop\") return \"endTurn\";\n if (reason === \"length\") return \"maxTokens\";\n if (reason === \"toolUse\") return \"toolUse\";\n return reason;\n}\n\nfunction zeroUsage(): AssistantMessage[\"usage\"] {\n return {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n total: 0,\n },\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
1
+ import type { ExtensionContext } from "@ashx-j/lunr";
2
2
  import type { ConsentManager } from "./consent-manager.ts";
3
3
  import type { McpLifecycleManager } from "./lifecycle.ts";
4
4
  import type { McpServerManager } from "./server-manager.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,OAAO,EAAE;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,EACD,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,KAChC,IAAI,CAAC;AAEV,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,MAAM,EAAE,SAAS,CAAC;IAClB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC1C,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,EAAE,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,CAAC,EAAE,aAAa,CAAC;CAC7B","sourcesContent":["// @ts-nocheck\nimport type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport type { ConsentManager } from \"./consent-manager.ts\";\nimport type { McpLifecycleManager } from \"./lifecycle.ts\";\nimport type { McpServerManager } from \"./server-manager.ts\";\nimport type { ToolMetadata, McpConfig, UiSessionMessages, UiStreamSummary } from \"./types.ts\";\nimport type { UiResourceHandler } from \"./ui-resource-handler.ts\";\nimport type { UiServerHandle } from \"./ui-server.ts\";\n\nexport interface CompletedUiSession {\n serverName: string;\n toolName: string;\n completedAt: Date;\n reason: string;\n messages: UiSessionMessages;\n stream?: UiStreamSummary;\n}\n\nexport type SendMessageFn = (\n message: {\n customType: string;\n content: Array<{ type: \"text\"; text: string }>;\n display?: string;\n details?: unknown;\n },\n options?: { triggerTurn?: boolean }\n) => void;\n\nexport interface McpExtensionState {\n manager: McpServerManager;\n lifecycle: McpLifecycleManager;\n toolMetadata: Map<string, ToolMetadata[]>;\n config: McpConfig;\n failureTracker: Map<string, number>;\n uiResourceHandler: UiResourceHandler;\n consentManager: ConsentManager;\n uiServer: UiServerHandle | null;\n completedUiSessions: CompletedUiSession[];\n openBrowser: (url: string) => Promise<void>;\n ui?: ExtensionContext[\"ui\"];\n sendMessage?: SendMessageFn;\n}\n"]}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,OAAO,EAAE;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,EACD,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,KAChC,IAAI,CAAC;AAEV,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,MAAM,EAAE,SAAS,CAAC;IAClB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC1C,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,EAAE,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,CAAC,EAAE,aAAa,CAAC;CAC7B","sourcesContent":["// @ts-nocheck\nimport type { ExtensionContext } from \"@ashx-j/lunr\";\nimport type { ConsentManager } from \"./consent-manager.ts\";\nimport type { McpLifecycleManager } from \"./lifecycle.ts\";\nimport type { McpServerManager } from \"./server-manager.ts\";\nimport type { ToolMetadata, McpConfig, UiSessionMessages, UiStreamSummary } from \"./types.ts\";\nimport type { UiResourceHandler } from \"./ui-resource-handler.ts\";\nimport type { UiServerHandle } from \"./ui-server.ts\";\n\nexport interface CompletedUiSession {\n serverName: string;\n toolName: string;\n completedAt: Date;\n reason: string;\n messages: UiSessionMessages;\n stream?: UiStreamSummary;\n}\n\nexport type SendMessageFn = (\n message: {\n customType: string;\n content: Array<{ type: \"text\"; text: string }>;\n display?: string;\n details?: unknown;\n },\n options?: { triggerTurn?: boolean }\n) => void;\n\nexport interface McpExtensionState {\n manager: McpServerManager;\n lifecycle: McpLifecycleManager;\n toolMetadata: Map<string, ToolMetadata[]>;\n config: McpConfig;\n failureTracker: Map<string, number>;\n uiResourceHandler: UiResourceHandler;\n consentManager: ConsentManager;\n uiServer: UiServerHandle | null;\n completedUiSessions: CompletedUiSession[];\n openBrowser: (url: string) => Promise<void>;\n ui?: ExtensionContext[\"ui\"];\n sendMessage?: SendMessageFn;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/state.ts"],"names":[],"mappings":"","sourcesContent":["// @ts-nocheck\nimport type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport type { ConsentManager } from \"./consent-manager.ts\";\nimport type { McpLifecycleManager } from \"./lifecycle.ts\";\nimport type { McpServerManager } from \"./server-manager.ts\";\nimport type { ToolMetadata, McpConfig, UiSessionMessages, UiStreamSummary } from \"./types.ts\";\nimport type { UiResourceHandler } from \"./ui-resource-handler.ts\";\nimport type { UiServerHandle } from \"./ui-server.ts\";\n\nexport interface CompletedUiSession {\n serverName: string;\n toolName: string;\n completedAt: Date;\n reason: string;\n messages: UiSessionMessages;\n stream?: UiStreamSummary;\n}\n\nexport type SendMessageFn = (\n message: {\n customType: string;\n content: Array<{ type: \"text\"; text: string }>;\n display?: string;\n details?: unknown;\n },\n options?: { triggerTurn?: boolean }\n) => void;\n\nexport interface McpExtensionState {\n manager: McpServerManager;\n lifecycle: McpLifecycleManager;\n toolMetadata: Map<string, ToolMetadata[]>;\n config: McpConfig;\n failureTracker: Map<string, number>;\n uiResourceHandler: UiResourceHandler;\n consentManager: ConsentManager;\n uiServer: UiServerHandle | null;\n completedUiSessions: CompletedUiSession[];\n openBrowser: (url: string) => Promise<void>;\n ui?: ExtensionContext[\"ui\"];\n sendMessage?: SendMessageFn;\n}\n"]}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/state.ts"],"names":[],"mappings":"","sourcesContent":["// @ts-nocheck\nimport type { ExtensionContext } from \"@ashx-j/lunr\";\nimport type { ConsentManager } from \"./consent-manager.ts\";\nimport type { McpLifecycleManager } from \"./lifecycle.ts\";\nimport type { McpServerManager } from \"./server-manager.ts\";\nimport type { ToolMetadata, McpConfig, UiSessionMessages, UiStreamSummary } from \"./types.ts\";\nimport type { UiResourceHandler } from \"./ui-resource-handler.ts\";\nimport type { UiServerHandle } from \"./ui-server.ts\";\n\nexport interface CompletedUiSession {\n serverName: string;\n toolName: string;\n completedAt: Date;\n reason: string;\n messages: UiSessionMessages;\n stream?: UiStreamSummary;\n}\n\nexport type SendMessageFn = (\n message: {\n customType: string;\n content: Array<{ type: \"text\"; text: string }>;\n display?: string;\n details?: unknown;\n },\n options?: { triggerTurn?: boolean }\n) => void;\n\nexport interface McpExtensionState {\n manager: McpServerManager;\n lifecycle: McpLifecycleManager;\n toolMetadata: Map<string, ToolMetadata[]>;\n config: McpConfig;\n failureTracker: Map<string, number>;\n uiResourceHandler: UiResourceHandler;\n consentManager: ConsentManager;\n uiServer: UiServerHandle | null;\n completedUiSessions: CompletedUiSession[];\n openBrowser: (url: string) => Promise<void>;\n ui?: ExtensionContext[\"ui\"];\n sendMessage?: SendMessageFn;\n}\n"]}
@@ -1,5 +1,5 @@
1
- import type { AgentToolResult, ToolRenderResultOptions } from "@earendil-works/pi-coding-agent";
2
- import { Text } from "@earendil-works/pi-tui";
1
+ import type { AgentToolResult, ToolRenderResultOptions } from "@ashx-j/lunr";
2
+ import { Text } from "@ashx-j/lunr-tui";
3
3
  type McpToolResultDetails = Record<string, unknown> & {
4
4
  error?: unknown;
5
5
  };
@@ -1 +1 @@
1
- {"version":3,"file":"tool-result-renderer.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/tool-result-renderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAChG,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,KAAK,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAG1E,UAAU,WAAW;IACnB,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,oBAAoB;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AA6BD,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,qBAAqB,EAC3B,aAAa,SAA+B,GAC3C,MAAM,EAAE,CAyBV;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,aAAa,SAA+B,GAC3C,MAAM,EAAE,CAGV;AASD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,QAErF;AAED,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,MAAM,+DAIlE;AASD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,EAAE,SAAS,CAAC,EAC9D,QAAQ,EAAE,OAAO,EACjB,iBAAiB,SAAI,GACpB,oBAAoB,CAYtB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,CAAC,oBAAoB,CAAC,EAC7C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,oBAAoB,QAgB/B","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult, ToolRenderResultOptions } from \"@earendil-works/pi-coding-agent\";\nimport { Text } from \"@earendil-works/pi-tui\";\n\ntype McpToolResultDetails = Record<string, unknown> & { error?: unknown };\ntype McpToolContentBlock = AgentToolResult<McpToolResultDetails>[\"content\"][number];\n\ninterface RenderTheme {\n fg: (name: string, text: string) => string;\n bold?: (text: string) => string;\n}\n\nexport interface McpProxyToolCallInput {\n tool?: string;\n args?: string;\n connect?: string;\n describe?: string;\n search?: string;\n regex?: boolean;\n includeSchemas?: boolean;\n server?: string;\n action?: string;\n}\n\ninterface McpToolRenderContext {\n isError: boolean;\n}\n\nexport interface McpToolResultDisplay {\n lines: string[];\n truncated: boolean;\n}\n\nconst DEFAULT_MAX_CALL_INPUT_CHARS = 1500;\n\nfunction truncateText(value: string, maxChars: number): string {\n if (value.length <= maxChars) return value;\n return `${value.slice(0, Math.max(0, maxChars - 1))}…`;\n}\n\nfunction formatJsonish(value: unknown, maxChars: number): string {\n if (typeof value === \"string\") {\n try {\n return truncateText(JSON.stringify(JSON.parse(value), null, 2), maxChars);\n } catch {\n return truncateText(value, maxChars);\n }\n }\n\n try {\n return truncateText(JSON.stringify(value, null, 2), maxChars);\n } catch {\n return truncateText(String(value), maxChars);\n }\n}\n\nfunction hasUsefulObjectContent(value: unknown): boolean {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) && Object.keys(value).length > 0;\n}\n\nexport function formatMcpProxyToolCallLines(\n args: McpProxyToolCallInput,\n maxInputChars = DEFAULT_MAX_CALL_INPUT_CHARS,\n): string[] {\n if (args.action === \"ui-messages\") return [`mcp ${args.action}`];\n\n if (args.tool) {\n const target = args.server ? `${args.tool} @ ${args.server}` : args.tool;\n const lines = [`mcp call ${target}`];\n if (args.args) lines.push(formatJsonish(args.args, maxInputChars));\n return lines;\n }\n\n if (args.connect) return [`mcp connect ${args.connect}`];\n if (args.describe) return [`mcp describe ${args.describe}`];\n\n if (args.search) {\n let line = `mcp search ${args.search}`;\n if (args.server) line += ` @ ${args.server}`;\n if (args.regex === true) line += \" (regex)\";\n if (args.includeSchemas === false) line += \" (schemas hidden)\";\n return [line];\n }\n\n if (args.server) return [`mcp list ${args.server}`];\n if (args.action) return [`mcp ${args.action}`];\n\n return [\"mcp status\"];\n}\n\nexport function formatMcpDirectToolCallLines(\n displayName: string,\n args: Record<string, unknown>,\n maxInputChars = DEFAULT_MAX_CALL_INPUT_CHARS,\n): string[] {\n if (!hasUsefulObjectContent(args)) return [displayName];\n return [displayName, formatJsonish(args, maxInputChars)];\n}\n\nfunction renderToolCallLines(lines: string[], theme: RenderTheme) {\n const [title = \"mcp\", ...rest] = lines;\n const styledTitle = theme.fg(\"toolTitle\", theme.bold ? theme.bold(title) : title);\n const styledRest = rest.map(line => theme.fg(\"muted\", line));\n return new Text([styledTitle, ...styledRest].join(\"\\n\"), 0, 0);\n}\n\nexport function renderMcpProxyToolCall(args: McpProxyToolCallInput, theme: RenderTheme) {\n return renderToolCallLines(formatMcpProxyToolCallLines(args), theme);\n}\n\nexport function createMcpDirectToolCallRenderer(displayName: string) {\n return (args: Record<string, unknown>, theme: RenderTheme) => {\n return renderToolCallLines(formatMcpDirectToolCallLines(displayName, args), theme);\n };\n}\n\nfunction blockToLines(block: McpToolContentBlock): string[] {\n if (block.type === \"text\") {\n return block.text.split(\"\\n\");\n }\n return [`[image: ${block.mimeType}]`];\n}\n\nexport function formatMcpToolResultLines(\n result: Pick<AgentToolResult<McpToolResultDetails>, \"content\">,\n expanded: boolean,\n maxCollapsedLines = 3,\n): McpToolResultDisplay {\n const allLines = result.content.flatMap(blockToLines);\n const lines = allLines.length > 0 ? allLines : [\"(empty result)\"];\n\n if (expanded || lines.length <= maxCollapsedLines) {\n return { lines, truncated: false };\n }\n\n return {\n lines: [...lines.slice(0, maxCollapsedLines), \"…\"],\n truncated: true,\n };\n}\n\nexport function renderMcpToolResult(\n result: AgentToolResult<McpToolResultDetails>,\n options: ToolRenderResultOptions,\n theme: RenderTheme,\n context?: McpToolRenderContext,\n) {\n if (options.isPartial) {\n return new Text(theme.fg(\"warning\", \"Running MCP tool...\"), 0, 0);\n }\n\n const hasErrorDetails = Boolean(result.details.error);\n const display = formatMcpToolResultLines(result, options.expanded || context?.isError === true || hasErrorDetails);\n const output = display.lines\n .map((line) => line === \"…\" ? theme.fg(\"muted\", line) : theme.fg(\"toolOutput\", line))\n .join(\"\\n\");\n const hint = display.truncated && !options.expanded\n ? `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`\n : \"\";\n\n return new Text(`${output}${hint}`, 0, 0);\n}\n"]}
1
+ {"version":3,"file":"tool-result-renderer.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/tool-result-renderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAChG,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,KAAK,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAG1E,UAAU,WAAW;IACnB,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,oBAAoB;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AA6BD,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,qBAAqB,EAC3B,aAAa,SAA+B,GAC3C,MAAM,EAAE,CAyBV;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,aAAa,SAA+B,GAC3C,MAAM,EAAE,CAGV;AASD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,QAErF;AAED,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,MAAM,+DAIlE;AASD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,EAAE,SAAS,CAAC,EAC9D,QAAQ,EAAE,OAAO,EACjB,iBAAiB,SAAI,GACpB,oBAAoB,CAYtB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,CAAC,oBAAoB,CAAC,EAC7C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,oBAAoB,QAgB/B","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult, ToolRenderResultOptions } from \"@ashx-j/lunr\";\nimport { Text } from \"@ashx-j/lunr-tui\";\n\ntype McpToolResultDetails = Record<string, unknown> & { error?: unknown };\ntype McpToolContentBlock = AgentToolResult<McpToolResultDetails>[\"content\"][number];\n\ninterface RenderTheme {\n fg: (name: string, text: string) => string;\n bold?: (text: string) => string;\n}\n\nexport interface McpProxyToolCallInput {\n tool?: string;\n args?: string;\n connect?: string;\n describe?: string;\n search?: string;\n regex?: boolean;\n includeSchemas?: boolean;\n server?: string;\n action?: string;\n}\n\ninterface McpToolRenderContext {\n isError: boolean;\n}\n\nexport interface McpToolResultDisplay {\n lines: string[];\n truncated: boolean;\n}\n\nconst DEFAULT_MAX_CALL_INPUT_CHARS = 1500;\n\nfunction truncateText(value: string, maxChars: number): string {\n if (value.length <= maxChars) return value;\n return `${value.slice(0, Math.max(0, maxChars - 1))}…`;\n}\n\nfunction formatJsonish(value: unknown, maxChars: number): string {\n if (typeof value === \"string\") {\n try {\n return truncateText(JSON.stringify(JSON.parse(value), null, 2), maxChars);\n } catch {\n return truncateText(value, maxChars);\n }\n }\n\n try {\n return truncateText(JSON.stringify(value, null, 2), maxChars);\n } catch {\n return truncateText(String(value), maxChars);\n }\n}\n\nfunction hasUsefulObjectContent(value: unknown): boolean {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) && Object.keys(value).length > 0;\n}\n\nexport function formatMcpProxyToolCallLines(\n args: McpProxyToolCallInput,\n maxInputChars = DEFAULT_MAX_CALL_INPUT_CHARS,\n): string[] {\n if (args.action === \"ui-messages\") return [`mcp ${args.action}`];\n\n if (args.tool) {\n const target = args.server ? `${args.tool} @ ${args.server}` : args.tool;\n const lines = [`mcp call ${target}`];\n if (args.args) lines.push(formatJsonish(args.args, maxInputChars));\n return lines;\n }\n\n if (args.connect) return [`mcp connect ${args.connect}`];\n if (args.describe) return [`mcp describe ${args.describe}`];\n\n if (args.search) {\n let line = `mcp search ${args.search}`;\n if (args.server) line += ` @ ${args.server}`;\n if (args.regex === true) line += \" (regex)\";\n if (args.includeSchemas === false) line += \" (schemas hidden)\";\n return [line];\n }\n\n if (args.server) return [`mcp list ${args.server}`];\n if (args.action) return [`mcp ${args.action}`];\n\n return [\"mcp status\"];\n}\n\nexport function formatMcpDirectToolCallLines(\n displayName: string,\n args: Record<string, unknown>,\n maxInputChars = DEFAULT_MAX_CALL_INPUT_CHARS,\n): string[] {\n if (!hasUsefulObjectContent(args)) return [displayName];\n return [displayName, formatJsonish(args, maxInputChars)];\n}\n\nfunction renderToolCallLines(lines: string[], theme: RenderTheme) {\n const [title = \"mcp\", ...rest] = lines;\n const styledTitle = theme.fg(\"toolTitle\", theme.bold ? theme.bold(title) : title);\n const styledRest = rest.map(line => theme.fg(\"muted\", line));\n return new Text([styledTitle, ...styledRest].join(\"\\n\"), 0, 0);\n}\n\nexport function renderMcpProxyToolCall(args: McpProxyToolCallInput, theme: RenderTheme) {\n return renderToolCallLines(formatMcpProxyToolCallLines(args), theme);\n}\n\nexport function createMcpDirectToolCallRenderer(displayName: string) {\n return (args: Record<string, unknown>, theme: RenderTheme) => {\n return renderToolCallLines(formatMcpDirectToolCallLines(displayName, args), theme);\n };\n}\n\nfunction blockToLines(block: McpToolContentBlock): string[] {\n if (block.type === \"text\") {\n return block.text.split(\"\\n\");\n }\n return [`[image: ${block.mimeType}]`];\n}\n\nexport function formatMcpToolResultLines(\n result: Pick<AgentToolResult<McpToolResultDetails>, \"content\">,\n expanded: boolean,\n maxCollapsedLines = 3,\n): McpToolResultDisplay {\n const allLines = result.content.flatMap(blockToLines);\n const lines = allLines.length > 0 ? allLines : [\"(empty result)\"];\n\n if (expanded || lines.length <= maxCollapsedLines) {\n return { lines, truncated: false };\n }\n\n return {\n lines: [...lines.slice(0, maxCollapsedLines), \"…\"],\n truncated: true,\n };\n}\n\nexport function renderMcpToolResult(\n result: AgentToolResult<McpToolResultDetails>,\n options: ToolRenderResultOptions,\n theme: RenderTheme,\n context?: McpToolRenderContext,\n) {\n if (options.isPartial) {\n return new Text(theme.fg(\"warning\", \"Running MCP tool...\"), 0, 0);\n }\n\n const hasErrorDetails = Boolean(result.details.error);\n const display = formatMcpToolResultLines(result, options.expanded || context?.isError === true || hasErrorDetails);\n const output = display.lines\n .map((line) => line === \"…\" ? theme.fg(\"muted\", line) : theme.fg(\"toolOutput\", line))\n .join(\"\\n\");\n const hint = display.truncated && !options.expanded\n ? `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`\n : \"\";\n\n return new Text(`${output}${hint}`, 0, 0);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Text } from "@earendil-works/pi-tui";
1
+ import { Text } from "@ashx-j/lunr-tui";
2
2
  const DEFAULT_MAX_CALL_INPUT_CHARS = 1500;
3
3
  function truncateText(value, maxChars) {
4
4
  if (value.length <= maxChars)
@@ -1 +1 @@
1
- {"version":3,"file":"tool-result-renderer.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/tool-result-renderer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AA+B9C,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAE1C,SAAS,YAAY,CAAC,KAAa,EAAE,QAAgB,EAAU;IAC7D,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,KAAG,CAAC;AAAA,CACxD;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,QAAgB,EAAU;IAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;AAAA,CACF;AAED,SAAS,sBAAsB,CAAC,KAAc,EAAW;IACvD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAAA,CAC9G;AAED,MAAM,UAAU,2BAA2B,CACzC,IAA2B,EAC3B,aAAa,GAAG,4BAA4B,EAClC;IACV,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa;QAAE,OAAO,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAEjE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACzE,MAAM,KAAK,GAAG,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,eAAe,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,gBAAgB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE5D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,IAAI,GAAG,cAAc,IAAI,CAAC,MAAM,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7C,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,IAAI,IAAI,UAAU,CAAC;QAC5C,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK;YAAE,IAAI,IAAI,mBAAmB,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAE/C,OAAO,CAAC,YAAY,CAAC,CAAC;AAAA,CACvB;AAED,MAAM,UAAU,4BAA4B,CAC1C,WAAmB,EACnB,IAA6B,EAC7B,aAAa,GAAG,4BAA4B,EAClC;IACV,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACxD,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;AAAA,CAC1D;AAED,SAAS,mBAAmB,CAAC,KAAe,EAAE,KAAkB,EAAE;IAChE,MAAM,CAAC,KAAK,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;IACvC,MAAM,WAAW,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7D,OAAO,IAAI,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAAA,CAChE;AAED,MAAM,UAAU,sBAAsB,CAAC,IAA2B,EAAE,KAAkB,EAAE;IACtF,OAAO,mBAAmB,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AAAA,CACtE;AAED,MAAM,UAAU,+BAA+B,CAAC,WAAmB,EAAE;IACnE,OAAO,CAAC,IAA6B,EAAE,KAAkB,EAAE,EAAE,CAAC;QAC5D,OAAO,mBAAmB,CAAC,4BAA4B,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IAAA,CACpF,CAAC;AAAA,CACH;AAED,SAAS,YAAY,CAAC,KAA0B,EAAY;IAC1D,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,CAAC,WAAW,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;AAAA,CACvC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAA8D,EAC9D,QAAiB,EACjB,iBAAiB,GAAG,CAAC,EACC;IACtB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAElE,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,iBAAiB,EAAE,CAAC;QAClD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACrC,CAAC;IAED,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,KAAG,CAAC;QAClD,SAAS,EAAE,IAAI;KAChB,CAAC;AAAA,CACH;AAED,MAAM,UAAU,mBAAmB,CACjC,MAA6C,EAC7C,OAAgC,EAChC,KAAkB,EAClB,OAA8B,EAC9B;IACA,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,qBAAqB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,EAAE,OAAO,KAAK,IAAI,IAAI,eAAe,CAAC,CAAC;IACnH,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK;SACzB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,KAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;SACpF,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ;QACjD,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,EAAE;QAChD,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,IAAI,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAAA,CAC3C","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult, ToolRenderResultOptions } from \"@earendil-works/pi-coding-agent\";\nimport { Text } from \"@earendil-works/pi-tui\";\n\ntype McpToolResultDetails = Record<string, unknown> & { error?: unknown };\ntype McpToolContentBlock = AgentToolResult<McpToolResultDetails>[\"content\"][number];\n\ninterface RenderTheme {\n fg: (name: string, text: string) => string;\n bold?: (text: string) => string;\n}\n\nexport interface McpProxyToolCallInput {\n tool?: string;\n args?: string;\n connect?: string;\n describe?: string;\n search?: string;\n regex?: boolean;\n includeSchemas?: boolean;\n server?: string;\n action?: string;\n}\n\ninterface McpToolRenderContext {\n isError: boolean;\n}\n\nexport interface McpToolResultDisplay {\n lines: string[];\n truncated: boolean;\n}\n\nconst DEFAULT_MAX_CALL_INPUT_CHARS = 1500;\n\nfunction truncateText(value: string, maxChars: number): string {\n if (value.length <= maxChars) return value;\n return `${value.slice(0, Math.max(0, maxChars - 1))}…`;\n}\n\nfunction formatJsonish(value: unknown, maxChars: number): string {\n if (typeof value === \"string\") {\n try {\n return truncateText(JSON.stringify(JSON.parse(value), null, 2), maxChars);\n } catch {\n return truncateText(value, maxChars);\n }\n }\n\n try {\n return truncateText(JSON.stringify(value, null, 2), maxChars);\n } catch {\n return truncateText(String(value), maxChars);\n }\n}\n\nfunction hasUsefulObjectContent(value: unknown): boolean {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) && Object.keys(value).length > 0;\n}\n\nexport function formatMcpProxyToolCallLines(\n args: McpProxyToolCallInput,\n maxInputChars = DEFAULT_MAX_CALL_INPUT_CHARS,\n): string[] {\n if (args.action === \"ui-messages\") return [`mcp ${args.action}`];\n\n if (args.tool) {\n const target = args.server ? `${args.tool} @ ${args.server}` : args.tool;\n const lines = [`mcp call ${target}`];\n if (args.args) lines.push(formatJsonish(args.args, maxInputChars));\n return lines;\n }\n\n if (args.connect) return [`mcp connect ${args.connect}`];\n if (args.describe) return [`mcp describe ${args.describe}`];\n\n if (args.search) {\n let line = `mcp search ${args.search}`;\n if (args.server) line += ` @ ${args.server}`;\n if (args.regex === true) line += \" (regex)\";\n if (args.includeSchemas === false) line += \" (schemas hidden)\";\n return [line];\n }\n\n if (args.server) return [`mcp list ${args.server}`];\n if (args.action) return [`mcp ${args.action}`];\n\n return [\"mcp status\"];\n}\n\nexport function formatMcpDirectToolCallLines(\n displayName: string,\n args: Record<string, unknown>,\n maxInputChars = DEFAULT_MAX_CALL_INPUT_CHARS,\n): string[] {\n if (!hasUsefulObjectContent(args)) return [displayName];\n return [displayName, formatJsonish(args, maxInputChars)];\n}\n\nfunction renderToolCallLines(lines: string[], theme: RenderTheme) {\n const [title = \"mcp\", ...rest] = lines;\n const styledTitle = theme.fg(\"toolTitle\", theme.bold ? theme.bold(title) : title);\n const styledRest = rest.map(line => theme.fg(\"muted\", line));\n return new Text([styledTitle, ...styledRest].join(\"\\n\"), 0, 0);\n}\n\nexport function renderMcpProxyToolCall(args: McpProxyToolCallInput, theme: RenderTheme) {\n return renderToolCallLines(formatMcpProxyToolCallLines(args), theme);\n}\n\nexport function createMcpDirectToolCallRenderer(displayName: string) {\n return (args: Record<string, unknown>, theme: RenderTheme) => {\n return renderToolCallLines(formatMcpDirectToolCallLines(displayName, args), theme);\n };\n}\n\nfunction blockToLines(block: McpToolContentBlock): string[] {\n if (block.type === \"text\") {\n return block.text.split(\"\\n\");\n }\n return [`[image: ${block.mimeType}]`];\n}\n\nexport function formatMcpToolResultLines(\n result: Pick<AgentToolResult<McpToolResultDetails>, \"content\">,\n expanded: boolean,\n maxCollapsedLines = 3,\n): McpToolResultDisplay {\n const allLines = result.content.flatMap(blockToLines);\n const lines = allLines.length > 0 ? allLines : [\"(empty result)\"];\n\n if (expanded || lines.length <= maxCollapsedLines) {\n return { lines, truncated: false };\n }\n\n return {\n lines: [...lines.slice(0, maxCollapsedLines), \"…\"],\n truncated: true,\n };\n}\n\nexport function renderMcpToolResult(\n result: AgentToolResult<McpToolResultDetails>,\n options: ToolRenderResultOptions,\n theme: RenderTheme,\n context?: McpToolRenderContext,\n) {\n if (options.isPartial) {\n return new Text(theme.fg(\"warning\", \"Running MCP tool...\"), 0, 0);\n }\n\n const hasErrorDetails = Boolean(result.details.error);\n const display = formatMcpToolResultLines(result, options.expanded || context?.isError === true || hasErrorDetails);\n const output = display.lines\n .map((line) => line === \"…\" ? theme.fg(\"muted\", line) : theme.fg(\"toolOutput\", line))\n .join(\"\\n\");\n const hint = display.truncated && !options.expanded\n ? `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`\n : \"\";\n\n return new Text(`${output}${hint}`, 0, 0);\n}\n"]}
1
+ {"version":3,"file":"tool-result-renderer.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/tool-result-renderer.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult, ToolRenderResultOptions } from \"@ashx-j/lunr\";\nimport { Text } from \"@ashx-j/lunr-tui\";\n\ntype McpToolResultDetails = Record<string, unknown> & { error?: unknown };\ntype McpToolContentBlock = AgentToolResult<McpToolResultDetails>[\"content\"][number];\n\ninterface RenderTheme {\n fg: (name: string, text: string) => string;\n bold?: (text: string) => string;\n}\n\nexport interface McpProxyToolCallInput {\n tool?: string;\n args?: string;\n connect?: string;\n describe?: string;\n search?: string;\n regex?: boolean;\n includeSchemas?: boolean;\n server?: string;\n action?: string;\n}\n\ninterface McpToolRenderContext {\n isError: boolean;\n}\n\nexport interface McpToolResultDisplay {\n lines: string[];\n truncated: boolean;\n}\n\nconst DEFAULT_MAX_CALL_INPUT_CHARS = 1500;\n\nfunction truncateText(value: string, maxChars: number): string {\n if (value.length <= maxChars) return value;\n return `${value.slice(0, Math.max(0, maxChars - 1))}…`;\n}\n\nfunction formatJsonish(value: unknown, maxChars: number): string {\n if (typeof value === \"string\") {\n try {\n return truncateText(JSON.stringify(JSON.parse(value), null, 2), maxChars);\n } catch {\n return truncateText(value, maxChars);\n }\n }\n\n try {\n return truncateText(JSON.stringify(value, null, 2), maxChars);\n } catch {\n return truncateText(String(value), maxChars);\n }\n}\n\nfunction hasUsefulObjectContent(value: unknown): boolean {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) && Object.keys(value).length > 0;\n}\n\nexport function formatMcpProxyToolCallLines(\n args: McpProxyToolCallInput,\n maxInputChars = DEFAULT_MAX_CALL_INPUT_CHARS,\n): string[] {\n if (args.action === \"ui-messages\") return [`mcp ${args.action}`];\n\n if (args.tool) {\n const target = args.server ? `${args.tool} @ ${args.server}` : args.tool;\n const lines = [`mcp call ${target}`];\n if (args.args) lines.push(formatJsonish(args.args, maxInputChars));\n return lines;\n }\n\n if (args.connect) return [`mcp connect ${args.connect}`];\n if (args.describe) return [`mcp describe ${args.describe}`];\n\n if (args.search) {\n let line = `mcp search ${args.search}`;\n if (args.server) line += ` @ ${args.server}`;\n if (args.regex === true) line += \" (regex)\";\n if (args.includeSchemas === false) line += \" (schemas hidden)\";\n return [line];\n }\n\n if (args.server) return [`mcp list ${args.server}`];\n if (args.action) return [`mcp ${args.action}`];\n\n return [\"mcp status\"];\n}\n\nexport function formatMcpDirectToolCallLines(\n displayName: string,\n args: Record<string, unknown>,\n maxInputChars = DEFAULT_MAX_CALL_INPUT_CHARS,\n): string[] {\n if (!hasUsefulObjectContent(args)) return [displayName];\n return [displayName, formatJsonish(args, maxInputChars)];\n}\n\nfunction renderToolCallLines(lines: string[], theme: RenderTheme) {\n const [title = \"mcp\", ...rest] = lines;\n const styledTitle = theme.fg(\"toolTitle\", theme.bold ? theme.bold(title) : title);\n const styledRest = rest.map(line => theme.fg(\"muted\", line));\n return new Text([styledTitle, ...styledRest].join(\"\\n\"), 0, 0);\n}\n\nexport function renderMcpProxyToolCall(args: McpProxyToolCallInput, theme: RenderTheme) {\n return renderToolCallLines(formatMcpProxyToolCallLines(args), theme);\n}\n\nexport function createMcpDirectToolCallRenderer(displayName: string) {\n return (args: Record<string, unknown>, theme: RenderTheme) => {\n return renderToolCallLines(formatMcpDirectToolCallLines(displayName, args), theme);\n };\n}\n\nfunction blockToLines(block: McpToolContentBlock): string[] {\n if (block.type === \"text\") {\n return block.text.split(\"\\n\");\n }\n return [`[image: ${block.mimeType}]`];\n}\n\nexport function formatMcpToolResultLines(\n result: Pick<AgentToolResult<McpToolResultDetails>, \"content\">,\n expanded: boolean,\n maxCollapsedLines = 3,\n): McpToolResultDisplay {\n const allLines = result.content.flatMap(blockToLines);\n const lines = allLines.length > 0 ? allLines : [\"(empty result)\"];\n\n if (expanded || lines.length <= maxCollapsedLines) {\n return { lines, truncated: false };\n }\n\n return {\n lines: [...lines.slice(0, maxCollapsedLines), \"…\"],\n truncated: true,\n };\n}\n\nexport function renderMcpToolResult(\n result: AgentToolResult<McpToolResultDetails>,\n options: ToolRenderResultOptions,\n theme: RenderTheme,\n context?: McpToolRenderContext,\n) {\n if (options.isPartial) {\n return new Text(theme.fg(\"warning\", \"Running MCP tool...\"), 0, 0);\n }\n\n const hasErrorDetails = Boolean(result.details.error);\n const display = formatMcpToolResultLines(result, options.expanded || context?.isError === true || hasErrorDetails);\n const output = display.lines\n .map((line) => line === \"…\" ? theme.fg(\"muted\", line) : theme.fg(\"toolOutput\", line))\n .join(\"\\n\");\n const hint = display.truncated && !options.expanded\n ? `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`\n : \"\";\n\n return new Text(`${output}${hint}`, 0, 0);\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
2
2
  import type { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
3
3
  import type { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
4
- import type { TextContent, ImageContent } from "@earendil-works/pi-ai";
4
+ import type { TextContent, ImageContent } from "@ashx-j/lunr-ai";
5
5
  import type { UiStreamMode } from "./ui-stream-types.ts";
6
6
  export type Transport = StdioClientTransport | SSEClientTransport | StreamableHTTPClientTransport;
7
7
  export type ImportKind = "cursor" | "claude-code" | "claude-desktop" | "codex" | "windsurf" | "vscode";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACxG,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,MAAM,MAAM,SAAS,GACjB,oBAAoB,GACpB,kBAAkB,GAClB,6BAA6B,CAAC;AAGlC,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,aAAa,GACb,gBAAgB,GAChB,OAAO,GACP,UAAU,GACV,QAAQ,CAAC;AAGb,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAGD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB,CAAC,OAAO;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxD,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,EAAE,CAAC;IACZ,UAAU,CAAC,EAAE,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,qBAAqB,CAAC,EAAE,aAAa,EAAE,CAAC;IACxC,mBAAmB,CAAC,EAAE;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,YAAY,GAAG,KAAK,CAAC;AAI5D,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,kBAAkB,EAClB,8BAA8B,EAC9B,kCAAkC,EAClC,+BAA+B,EAC/B,yBAAyB,EACzB,iCAAiC,EACjC,4BAA4B,EAC5B,qCAAqC,EACrC,yCAAyC,EACzC,sBAAsB,EACtB,8BAA8B,EAC9B,KAAK,YAAY,EACjB,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,KAAK,+BAA+B,EACpC,KAAK,mCAAmC,EACxC,KAAK,eAAe,GACrB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAe/E;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CA6BhF;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,aAAa,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,eAAe,CAAC;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;AAGtD,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,SAAS,CAAC,EAAE,oBAAoB,GAAG,oBAAoB,CAAC;IACxD,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,KAAK,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAC5B,SAAS,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC;IAEjC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAGD,MAAM,WAAW,sBAAsB;IACrC,wGAAwG;IACxG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oIAAoI;IACpI,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAGD,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,sBAAsB,CAAC;IAC/C;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAGD,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAGD,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7D,mBAAmB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC5F,0BAA0B,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,qBAAqB,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC3G;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC;IAC9C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAChC,MAAM,CAQR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAClC,MAAM,CAGR;AAMD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,EACnC,YAAY,CAAC,EAAE,OAAO,GACrB,OAAO,CAkBT","sourcesContent":["// @ts-nocheck\n// types.ts - Core type definitions\nimport type { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport type { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport type { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { TextContent, ImageContent } from \"@earendil-works/pi-ai\";\nimport type { UiStreamMode } from \"./ui-stream-types.ts\";\n\n// Transport type (stdio + HTTP)\nexport type Transport = \n | StdioClientTransport \n | SSEClientTransport \n | StreamableHTTPClientTransport;\n\n// Import sources for config\nexport type ImportKind = \n | \"cursor\" \n | \"claude-code\" \n | \"claude-desktop\" \n | \"codex\" \n | \"windsurf\" \n | \"vscode\";\n\n// Tool definition from MCP server\nexport interface McpTool {\n name: string;\n title?: string;\n description?: string;\n inputSchema?: unknown; // JSON Schema\n _meta?: Record<string, unknown>;\n}\n\n// Resource definition from MCP server\nexport interface McpResource {\n uri: string;\n name: string;\n description?: string;\n mimeType?: string;\n _meta?: Record<string, unknown>;\n}\n\nexport interface UiResourceMeta {\n csp?: UiResourceCsp;\n permissions?: UiResourcePermissions;\n domain?: string;\n prefersBorder?: boolean;\n}\n\nexport interface UiResourceContent {\n uri: string;\n html: string;\n mimeType?: string;\n meta: UiResourceMeta;\n}\n\nexport interface UiProxyRequestBody<TParams> {\n token: string;\n params: TParams;\n}\n\nexport interface UiProxyResult<T = Record<string, unknown>> {\n ok: boolean;\n result?: T;\n error?: string;\n}\n\nexport interface UiResourceCsp {\n connectDomains?: string[];\n scriptDomains?: string[];\n styleDomains?: string[];\n fontDomains?: string[];\n imgDomains?: string[];\n mediaDomains?: string[];\n frameDomains?: string[];\n workerDomains?: string[];\n baseUriDomains?: string[];\n}\n\nexport interface UiResourcePermissions {\n camera?: {};\n microphone?: {};\n geolocation?: {};\n clipboardWrite?: {};\n}\n\nexport interface UiToolInfo {\n id?: string | number;\n tool: {\n name: string;\n description?: string;\n inputSchema?: unknown;\n };\n}\n\nexport interface UiHostContext {\n toolInfo?: UiToolInfo;\n theme?: \"light\" | \"dark\";\n styles?: Record<string, unknown>;\n displayMode?: UiDisplayMode;\n availableDisplayModes?: UiDisplayMode[];\n containerDimensions?: {\n width?: number;\n maxWidth?: number;\n height?: number;\n maxHeight?: number;\n };\n [key: string]: unknown;\n}\n\nexport type UiDisplayMode = \"inline\" | \"fullscreen\" | \"pip\";\n\n// Re-export stream types from the shared lightweight module.\n// This allows the example package to import stream schemas without pulling the full types.ts dependency graph.\nexport {\n UI_STREAM_HOST_CONTEXT_KEY,\n UI_STREAM_REQUEST_META_KEY,\n UI_STREAM_RESULT_PATCH_METHOD,\n SERVER_STREAM_RESULT_PATCH_METHOD,\n UI_STREAM_STRUCTURED_CONTENT_KEY,\n uiStreamModeSchema,\n visualizationStreamPhaseSchema,\n visualizationStreamFrameTypeSchema,\n visualizationStreamStatusSchema,\n uiStreamHostContextSchema,\n visualizationStreamEnvelopeSchema,\n uiStreamCallToolResultSchema,\n uiStreamResultPatchNotificationSchema,\n serverStreamResultPatchNotificationSchema,\n getUiStreamHostContext,\n getVisualizationStreamEnvelope,\n type UiStreamMode,\n type VisualizationStreamPhase,\n type VisualizationStreamFrameType,\n type VisualizationStreamStatus,\n type UiStreamHostContext,\n type VisualizationStreamEnvelope,\n type UiStreamCallToolResult,\n type UiStreamResultPatchNotification,\n type ServerStreamResultPatchNotification,\n type UiStreamSummary,\n} from \"./ui-stream-types.ts\";\n\nexport interface UiMessageParams {\n role?: string;\n content?: unknown[];\n type?: \"prompt\" | \"notify\" | \"intent\" | \"message\";\n message?: string;\n prompt?: string;\n intent?: string;\n params?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\n/**\n * Extract prompt text from either legacy MCP UI message shapes or native AppBridge user messages.\n */\nexport function extractUiPromptText(params: UiMessageParams): string | undefined {\n if (params.type === \"prompt\" || params.prompt) {\n const prompt = params.prompt ?? String(params.message ?? \"\");\n return prompt || undefined;\n }\n\n if (params.role === \"user\" && Array.isArray(params.content)) {\n const text = params.content\n .map((block) => (block && typeof block === \"object\" && \"text\" in block ? String((block as { text?: unknown }).text ?? \"\") : \"\"))\n .filter(Boolean)\n .join(\"\\n\\n\");\n return text || undefined;\n }\n\n return undefined;\n}\n\n/**\n * Structured UI handoff recovered from a canonical prompt envelope.\n */\nexport interface UiPromptHandoff {\n intent: string;\n params: Record<string, unknown>;\n raw: string;\n}\n\n/**\n * Parse a canonical named UI handoff encoded as `intent\\n{json}`.\n */\nexport function parseUiPromptHandoff(prompt: string): UiPromptHandoff | undefined {\n const newlineIndex = prompt.indexOf(\"\\n\");\n if (newlineIndex <= 0) {\n return undefined;\n }\n\n const intent = prompt.slice(0, newlineIndex).trim();\n const payloadText = prompt.slice(newlineIndex + 1).trim();\n if (!intent || !payloadText) {\n return undefined;\n }\n\n if (!/^[A-Za-z][A-Za-z0-9_-]*$/.test(intent)) {\n return undefined;\n }\n\n try {\n const parsed = JSON.parse(payloadText);\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return undefined;\n }\n return {\n intent,\n params: parsed as Record<string, unknown>,\n raw: prompt,\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Accumulated messages from a UI session.\n * Collected during the session and available when it ends.\n */\nexport interface UiSessionMessages {\n prompts: string[];\n notifications: string[];\n intents: Array<{ intent: string; params?: Record<string, unknown> }>;\n}\n\nexport interface UiModelContextParams {\n content?: unknown[];\n structuredContent?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface UiOpenLinkResult {\n isError?: boolean;\n [key: string]: unknown;\n}\n\nexport interface UiDisplayModeRequest {\n mode?: UiDisplayMode;\n}\n\nexport interface UiDisplayModeResult {\n mode: UiDisplayMode;\n [key: string]: unknown;\n}\n\n// Content types from MCP\nexport interface McpContent {\n type: \"text\" | \"image\" | \"audio\" | \"resource\" | \"resource_link\";\n text?: string;\n data?: string;\n mimeType?: string;\n resource?: {\n uri: string;\n text?: string;\n blob?: string;\n };\n uri?: string;\n name?: string;\n description?: string;\n}\n\n// Pi content block type\nexport type ContentBlock = TextContent | ImageContent;\n\n// OAuth configuration (SDK handles auto-discovery and dynamic registration)\nexport interface OAuthConfig {\n /** OAuth grant type (defaults to authorization_code) */\n grantType?: \"authorization_code\" | \"client_credentials\";\n /** Pre-registered client ID (optional, dynamic registration used if not provided) */\n clientId?: string;\n /** Client secret for confidential clients */\n clientSecret?: string;\n /** Requested OAuth scopes */\n scope?: string;\n /** Exact authorization-code redirect URI for pre-registered clients */\n redirectUri?: string;\n /** Client display name for dynamic registration */\n clientName?: string;\n /** Client homepage URI for dynamic registration */\n clientUri?: string;\n}\n\n// Server configuration\nexport interface ServerEntry {\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n cwd?: string;\n // HTTP fields\n url?: string;\n headers?: Record<string, string>;\n /** \n * Authentication type:\n * - 'oauth' - Use OAuth 2.1 (auto-discovers endpoints, supports dynamic client registration)\n * - 'bearer' - Use static Bearer token\n * - false - Disable authentication\n * If not specified and url is present, OAuth will be auto-detected unless custom headers are configured\n */\n auth?: \"oauth\" | \"bearer\" | false;\n bearerToken?: string;\n bearerTokenEnv?: string;\n /** \n * OAuth configuration (optional).\n * If not provided, the SDK will attempt dynamic client registration.\n * Set to false to explicitly disable OAuth for this server.\n */\n oauth?: OAuthConfig | false;\n lifecycle?: \"keep-alive\" | \"lazy\" | \"eager\";\n idleTimeout?: number; // minutes, overrides global setting\n requestTimeoutMs?: number; // milliseconds, overrides global request timeout when > 0\n // Resource handling\n exposeResources?: boolean;\n // Direct tool registration\n directTools?: boolean | string[];\n // Exclude specific MCP tools/resources by original or prefixed name\n excludeTools?: string[];\n // Debug\n debug?: boolean; // Show server stderr (default: false)\n}\n\n// Output guard tuning (settings.outputGuard object form)\nexport interface McpOutputGuardSettings {\n /** Maximum inline MCP text output bytes before truncation/spill-to-disk. Defaults to 51200 (50 KiB). */\n maxBytes?: number;\n /** Maximum inline MCP text output lines before truncation/spill-to-disk. Defaults to 2000. */\n maxLines?: number;\n /** Maximum details.mcpResult JSON bytes kept raw; larger results are summarized and spilled to disk. Defaults to 16384 (16 KiB). */\n detailsMaxBytes?: number;\n}\n\n// Settings\nexport interface McpSettings {\n toolPrefix?: \"server\" | \"none\" | \"short\";\n idleTimeout?: number; // minutes, default 10, 0 to disable\n requestTimeoutMs?: number; // milliseconds, overrides the SDK request timeout when > 0\n directTools?: boolean;\n disableProxyTool?: boolean;\n autoAuth?: boolean;\n sampling?: boolean;\n samplingAutoApprove?: boolean;\n elicitation?: boolean;\n /**\n * Guard oversized MCP tool/resource output before it is returned to the model.\n * Defaults to true (50 KiB / 2,000 lines inline text, 16 KiB details.mcpResult).\n * Set to false to restore raw MCP output behavior, or pass an object to tune\n * the limits. Env kill switch: MCP_OUTPUT_GUARD=0.\n */\n outputGuard?: boolean | McpOutputGuardSettings;\n /**\n * Message returned in tool results when a server needs (re-)authentication.\n * \"${server}\" is substituted with the server name. Defaults to a TUI\n * instruction when unset.\n */\n authRequiredMessage?: string;\n}\n\n// Root config\nexport interface McpConfig {\n mcpServers: Record<string, ServerEntry>;\n imports?: ImportKind[];\n settings?: McpSettings;\n}\n\n// Alias for clarity\nexport type ServerDefinition = ServerEntry;\n\nexport interface ToolMetadata {\n name: string; // Prefixed tool name (e.g., \"xcodebuild_list_sims\")\n originalName: string; // Original MCP tool name (e.g., \"list_sims\")\n description: string;\n resourceUri?: string; // For resource tools: the URI to read\n uiResourceUri?: string; // For app-enabled tools: the UI resource URI\n inputSchema?: unknown; // JSON Schema for parameters (stored for describe/errors)\n uiStreamMode?: UiStreamMode;\n}\n\nexport interface DirectToolSpec {\n serverName: string;\n originalName: string;\n prefixedName: string;\n description: string;\n inputSchema?: unknown;\n resourceUri?: string;\n uiResourceUri?: string;\n uiStreamMode?: UiStreamMode;\n}\n\nexport interface ServerProvenance {\n path: string;\n kind: \"user\" | \"project\" | \"import\";\n importKind?: string;\n}\n\nexport interface McpAuthResult {\n ok: boolean;\n message?: string;\n}\n\nexport interface McpPanelCallbacks {\n reconnect: (serverName: string) => Promise<boolean>;\n canAuthenticate: (serverName: string) => boolean;\n authenticate: (serverName: string) => Promise<McpAuthResult>;\n getConnectionStatus: (serverName: string) => \"connected\" | \"idle\" | \"failed\" | \"needs-auth\";\n refreshCacheAfterReconnect: (serverName: string) => import(\"./metadata-cache.ts\").ServerCacheEntry | null;\n}\n\nexport interface McpPanelResult {\n changes: Map<string, true | string[] | false>;\n cancelled: boolean;\n}\n\n/**\n * Get server prefix based on tool prefix mode.\n */\nexport function getServerPrefix(\n serverName: string,\n mode: \"server\" | \"none\" | \"short\"\n): string {\n if (mode === \"none\") return \"\";\n if (mode === \"short\") {\n let short = serverName.replace(/-?mcp$/i, \"\").replace(/-/g, \"_\");\n if (!short) short = \"mcp\";\n return short;\n }\n return serverName.replace(/-/g, \"_\");\n}\n\n/**\n * Format a tool name with server prefix.\n */\nexport function formatToolName(\n toolName: string,\n serverName: string,\n prefix: \"server\" | \"none\" | \"short\"\n): string {\n const p = getServerPrefix(serverName, prefix);\n return p ? `${p}_${toolName}` : toolName;\n}\n\nfunction normalizeToolName(value: string): string {\n return value.replace(/-/g, \"_\");\n}\n\nexport function isToolExcluded(\n toolName: string,\n serverName: string,\n prefix: \"server\" | \"none\" | \"short\",\n excludeTools?: unknown\n): boolean {\n if (!Array.isArray(excludeTools) || excludeTools.length === 0) return false;\n\n const candidates = new Set<string>([\n normalizeToolName(toolName),\n normalizeToolName(formatToolName(toolName, serverName, prefix)),\n normalizeToolName(formatToolName(toolName, serverName, \"server\")),\n normalizeToolName(formatToolName(toolName, serverName, \"short\")),\n ]);\n\n for (const excluded of excludeTools) {\n if (typeof excluded !== \"string\") continue;\n if (candidates.has(normalizeToolName(excluded))) {\n return true;\n }\n }\n\n return false;\n}\n"]}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/types.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n// types.ts - Core type definitions\nimport type { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport type { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport type { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { TextContent, ImageContent } from \"@ashx-j/lunr-ai\";\nimport type { UiStreamMode } from \"./ui-stream-types.ts\";\n\n// Transport type (stdio + HTTP)\nexport type Transport = \n | StdioClientTransport \n | SSEClientTransport \n | StreamableHTTPClientTransport;\n\n// Import sources for config\nexport type ImportKind = \n | \"cursor\" \n | \"claude-code\" \n | \"claude-desktop\" \n | \"codex\" \n | \"windsurf\" \n | \"vscode\";\n\n// Tool definition from MCP server\nexport interface McpTool {\n name: string;\n title?: string;\n description?: string;\n inputSchema?: unknown; // JSON Schema\n _meta?: Record<string, unknown>;\n}\n\n// Resource definition from MCP server\nexport interface McpResource {\n uri: string;\n name: string;\n description?: string;\n mimeType?: string;\n _meta?: Record<string, unknown>;\n}\n\nexport interface UiResourceMeta {\n csp?: UiResourceCsp;\n permissions?: UiResourcePermissions;\n domain?: string;\n prefersBorder?: boolean;\n}\n\nexport interface UiResourceContent {\n uri: string;\n html: string;\n mimeType?: string;\n meta: UiResourceMeta;\n}\n\nexport interface UiProxyRequestBody<TParams> {\n token: string;\n params: TParams;\n}\n\nexport interface UiProxyResult<T = Record<string, unknown>> {\n ok: boolean;\n result?: T;\n error?: string;\n}\n\nexport interface UiResourceCsp {\n connectDomains?: string[];\n scriptDomains?: string[];\n styleDomains?: string[];\n fontDomains?: string[];\n imgDomains?: string[];\n mediaDomains?: string[];\n frameDomains?: string[];\n workerDomains?: string[];\n baseUriDomains?: string[];\n}\n\nexport interface UiResourcePermissions {\n camera?: {};\n microphone?: {};\n geolocation?: {};\n clipboardWrite?: {};\n}\n\nexport interface UiToolInfo {\n id?: string | number;\n tool: {\n name: string;\n description?: string;\n inputSchema?: unknown;\n };\n}\n\nexport interface UiHostContext {\n toolInfo?: UiToolInfo;\n theme?: \"light\" | \"dark\";\n styles?: Record<string, unknown>;\n displayMode?: UiDisplayMode;\n availableDisplayModes?: UiDisplayMode[];\n containerDimensions?: {\n width?: number;\n maxWidth?: number;\n height?: number;\n maxHeight?: number;\n };\n [key: string]: unknown;\n}\n\nexport type UiDisplayMode = \"inline\" | \"fullscreen\" | \"pip\";\n\n// Re-export stream types from the shared lightweight module.\n// This allows the example package to import stream schemas without pulling the full types.ts dependency graph.\nexport {\n UI_STREAM_HOST_CONTEXT_KEY,\n UI_STREAM_REQUEST_META_KEY,\n UI_STREAM_RESULT_PATCH_METHOD,\n SERVER_STREAM_RESULT_PATCH_METHOD,\n UI_STREAM_STRUCTURED_CONTENT_KEY,\n uiStreamModeSchema,\n visualizationStreamPhaseSchema,\n visualizationStreamFrameTypeSchema,\n visualizationStreamStatusSchema,\n uiStreamHostContextSchema,\n visualizationStreamEnvelopeSchema,\n uiStreamCallToolResultSchema,\n uiStreamResultPatchNotificationSchema,\n serverStreamResultPatchNotificationSchema,\n getUiStreamHostContext,\n getVisualizationStreamEnvelope,\n type UiStreamMode,\n type VisualizationStreamPhase,\n type VisualizationStreamFrameType,\n type VisualizationStreamStatus,\n type UiStreamHostContext,\n type VisualizationStreamEnvelope,\n type UiStreamCallToolResult,\n type UiStreamResultPatchNotification,\n type ServerStreamResultPatchNotification,\n type UiStreamSummary,\n} from \"./ui-stream-types.ts\";\n\nexport interface UiMessageParams {\n role?: string;\n content?: unknown[];\n type?: \"prompt\" | \"notify\" | \"intent\" | \"message\";\n message?: string;\n prompt?: string;\n intent?: string;\n params?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\n/**\n * Extract prompt text from either legacy MCP UI message shapes or native AppBridge user messages.\n */\nexport function extractUiPromptText(params: UiMessageParams): string | undefined {\n if (params.type === \"prompt\" || params.prompt) {\n const prompt = params.prompt ?? String(params.message ?? \"\");\n return prompt || undefined;\n }\n\n if (params.role === \"user\" && Array.isArray(params.content)) {\n const text = params.content\n .map((block) => (block && typeof block === \"object\" && \"text\" in block ? String((block as { text?: unknown }).text ?? \"\") : \"\"))\n .filter(Boolean)\n .join(\"\\n\\n\");\n return text || undefined;\n }\n\n return undefined;\n}\n\n/**\n * Structured UI handoff recovered from a canonical prompt envelope.\n */\nexport interface UiPromptHandoff {\n intent: string;\n params: Record<string, unknown>;\n raw: string;\n}\n\n/**\n * Parse a canonical named UI handoff encoded as `intent\\n{json}`.\n */\nexport function parseUiPromptHandoff(prompt: string): UiPromptHandoff | undefined {\n const newlineIndex = prompt.indexOf(\"\\n\");\n if (newlineIndex <= 0) {\n return undefined;\n }\n\n const intent = prompt.slice(0, newlineIndex).trim();\n const payloadText = prompt.slice(newlineIndex + 1).trim();\n if (!intent || !payloadText) {\n return undefined;\n }\n\n if (!/^[A-Za-z][A-Za-z0-9_-]*$/.test(intent)) {\n return undefined;\n }\n\n try {\n const parsed = JSON.parse(payloadText);\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return undefined;\n }\n return {\n intent,\n params: parsed as Record<string, unknown>,\n raw: prompt,\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Accumulated messages from a UI session.\n * Collected during the session and available when it ends.\n */\nexport interface UiSessionMessages {\n prompts: string[];\n notifications: string[];\n intents: Array<{ intent: string; params?: Record<string, unknown> }>;\n}\n\nexport interface UiModelContextParams {\n content?: unknown[];\n structuredContent?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface UiOpenLinkResult {\n isError?: boolean;\n [key: string]: unknown;\n}\n\nexport interface UiDisplayModeRequest {\n mode?: UiDisplayMode;\n}\n\nexport interface UiDisplayModeResult {\n mode: UiDisplayMode;\n [key: string]: unknown;\n}\n\n// Content types from MCP\nexport interface McpContent {\n type: \"text\" | \"image\" | \"audio\" | \"resource\" | \"resource_link\";\n text?: string;\n data?: string;\n mimeType?: string;\n resource?: {\n uri: string;\n text?: string;\n blob?: string;\n };\n uri?: string;\n name?: string;\n description?: string;\n}\n\n// Pi content block type\nexport type ContentBlock = TextContent | ImageContent;\n\n// OAuth configuration (SDK handles auto-discovery and dynamic registration)\nexport interface OAuthConfig {\n /** OAuth grant type (defaults to authorization_code) */\n grantType?: \"authorization_code\" | \"client_credentials\";\n /** Pre-registered client ID (optional, dynamic registration used if not provided) */\n clientId?: string;\n /** Client secret for confidential clients */\n clientSecret?: string;\n /** Requested OAuth scopes */\n scope?: string;\n /** Exact authorization-code redirect URI for pre-registered clients */\n redirectUri?: string;\n /** Client display name for dynamic registration */\n clientName?: string;\n /** Client homepage URI for dynamic registration */\n clientUri?: string;\n}\n\n// Server configuration\nexport interface ServerEntry {\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n cwd?: string;\n // HTTP fields\n url?: string;\n headers?: Record<string, string>;\n /** \n * Authentication type:\n * - 'oauth' - Use OAuth 2.1 (auto-discovers endpoints, supports dynamic client registration)\n * - 'bearer' - Use static Bearer token\n * - false - Disable authentication\n * If not specified and url is present, OAuth will be auto-detected unless custom headers are configured\n */\n auth?: \"oauth\" | \"bearer\" | false;\n bearerToken?: string;\n bearerTokenEnv?: string;\n /** \n * OAuth configuration (optional).\n * If not provided, the SDK will attempt dynamic client registration.\n * Set to false to explicitly disable OAuth for this server.\n */\n oauth?: OAuthConfig | false;\n lifecycle?: \"keep-alive\" | \"lazy\" | \"eager\";\n idleTimeout?: number; // minutes, overrides global setting\n requestTimeoutMs?: number; // milliseconds, overrides global request timeout when > 0\n // Resource handling\n exposeResources?: boolean;\n // Direct tool registration\n directTools?: boolean | string[];\n // Exclude specific MCP tools/resources by original or prefixed name\n excludeTools?: string[];\n // Debug\n debug?: boolean; // Show server stderr (default: false)\n}\n\n// Output guard tuning (settings.outputGuard object form)\nexport interface McpOutputGuardSettings {\n /** Maximum inline MCP text output bytes before truncation/spill-to-disk. Defaults to 51200 (50 KiB). */\n maxBytes?: number;\n /** Maximum inline MCP text output lines before truncation/spill-to-disk. Defaults to 2000. */\n maxLines?: number;\n /** Maximum details.mcpResult JSON bytes kept raw; larger results are summarized and spilled to disk. Defaults to 16384 (16 KiB). */\n detailsMaxBytes?: number;\n}\n\n// Settings\nexport interface McpSettings {\n toolPrefix?: \"server\" | \"none\" | \"short\";\n idleTimeout?: number; // minutes, default 10, 0 to disable\n requestTimeoutMs?: number; // milliseconds, overrides the SDK request timeout when > 0\n directTools?: boolean;\n disableProxyTool?: boolean;\n autoAuth?: boolean;\n sampling?: boolean;\n samplingAutoApprove?: boolean;\n elicitation?: boolean;\n /**\n * Guard oversized MCP tool/resource output before it is returned to the model.\n * Defaults to true (50 KiB / 2,000 lines inline text, 16 KiB details.mcpResult).\n * Set to false to restore raw MCP output behavior, or pass an object to tune\n * the limits. Env kill switch: MCP_OUTPUT_GUARD=0.\n */\n outputGuard?: boolean | McpOutputGuardSettings;\n /**\n * Message returned in tool results when a server needs (re-)authentication.\n * \"${server}\" is substituted with the server name. Defaults to a TUI\n * instruction when unset.\n */\n authRequiredMessage?: string;\n}\n\n// Root config\nexport interface McpConfig {\n mcpServers: Record<string, ServerEntry>;\n imports?: ImportKind[];\n settings?: McpSettings;\n}\n\n// Alias for clarity\nexport type ServerDefinition = ServerEntry;\n\nexport interface ToolMetadata {\n name: string; // Prefixed tool name (e.g., \"xcodebuild_list_sims\")\n originalName: string; // Original MCP tool name (e.g., \"list_sims\")\n description: string;\n resourceUri?: string; // For resource tools: the URI to read\n uiResourceUri?: string; // For app-enabled tools: the UI resource URI\n inputSchema?: unknown; // JSON Schema for parameters (stored for describe/errors)\n uiStreamMode?: UiStreamMode;\n}\n\nexport interface DirectToolSpec {\n serverName: string;\n originalName: string;\n prefixedName: string;\n description: string;\n inputSchema?: unknown;\n resourceUri?: string;\n uiResourceUri?: string;\n uiStreamMode?: UiStreamMode;\n}\n\nexport interface ServerProvenance {\n path: string;\n kind: \"user\" | \"project\" | \"import\";\n importKind?: string;\n}\n\nexport interface McpAuthResult {\n ok: boolean;\n message?: string;\n}\n\nexport interface McpPanelCallbacks {\n reconnect: (serverName: string) => Promise<boolean>;\n canAuthenticate: (serverName: string) => boolean;\n authenticate: (serverName: string) => Promise<McpAuthResult>;\n getConnectionStatus: (serverName: string) => \"connected\" | \"idle\" | \"failed\" | \"needs-auth\";\n refreshCacheAfterReconnect: (serverName: string) => import(\"./metadata-cache.ts\").ServerCacheEntry | null;\n}\n\nexport interface McpPanelResult {\n changes: Map<string, true | string[] | false>;\n cancelled: boolean;\n}\n\n/**\n * Get server prefix based on tool prefix mode.\n */\nexport function getServerPrefix(\n serverName: string,\n mode: \"server\" | \"none\" | \"short\"\n): string {\n if (mode === \"none\") return \"\";\n if (mode === \"short\") {\n let short = serverName.replace(/-?mcp$/i, \"\").replace(/-/g, \"_\");\n if (!short) short = \"mcp\";\n return short;\n }\n return serverName.replace(/-/g, \"_\");\n}\n\n/**\n * Format a tool name with server prefix.\n */\nexport function formatToolName(\n toolName: string,\n serverName: string,\n prefix: \"server\" | \"none\" | \"short\"\n): string {\n const p = getServerPrefix(serverName, prefix);\n return p ? `${p}_${toolName}` : toolName;\n}\n\nfunction normalizeToolName(value: string): string {\n return value.replace(/-/g, \"_\");\n}\n\nexport function isToolExcluded(\n toolName: string,\n serverName: string,\n prefix: \"server\" | \"none\" | \"short\",\n excludeTools?: unknown\n): boolean {\n if (!Array.isArray(excludeTools) || excludeTools.length === 0) return false;\n\n const candidates = new Set<string>([\n normalizeToolName(toolName),\n normalizeToolName(formatToolName(toolName, serverName, prefix)),\n normalizeToolName(formatToolName(toolName, serverName, \"server\")),\n normalizeToolName(formatToolName(toolName, serverName, \"short\")),\n ]);\n\n for (const excluded of excludeTools) {\n if (typeof excluded !== \"string\") continue;\n if (candidates.has(normalizeToolName(excluded))) {\n return true;\n }\n }\n\n return false;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/types.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n// types.ts - Core type definitions\nimport type { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport type { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport type { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { TextContent, ImageContent } from \"@earendil-works/pi-ai\";\nimport type { UiStreamMode } from \"./ui-stream-types.ts\";\n\n// Transport type (stdio + HTTP)\nexport type Transport = \n | StdioClientTransport \n | SSEClientTransport \n | StreamableHTTPClientTransport;\n\n// Import sources for config\nexport type ImportKind = \n | \"cursor\" \n | \"claude-code\" \n | \"claude-desktop\" \n | \"codex\" \n | \"windsurf\" \n | \"vscode\";\n\n// Tool definition from MCP server\nexport interface McpTool {\n name: string;\n title?: string;\n description?: string;\n inputSchema?: unknown; // JSON Schema\n _meta?: Record<string, unknown>;\n}\n\n// Resource definition from MCP server\nexport interface McpResource {\n uri: string;\n name: string;\n description?: string;\n mimeType?: string;\n _meta?: Record<string, unknown>;\n}\n\nexport interface UiResourceMeta {\n csp?: UiResourceCsp;\n permissions?: UiResourcePermissions;\n domain?: string;\n prefersBorder?: boolean;\n}\n\nexport interface UiResourceContent {\n uri: string;\n html: string;\n mimeType?: string;\n meta: UiResourceMeta;\n}\n\nexport interface UiProxyRequestBody<TParams> {\n token: string;\n params: TParams;\n}\n\nexport interface UiProxyResult<T = Record<string, unknown>> {\n ok: boolean;\n result?: T;\n error?: string;\n}\n\nexport interface UiResourceCsp {\n connectDomains?: string[];\n scriptDomains?: string[];\n styleDomains?: string[];\n fontDomains?: string[];\n imgDomains?: string[];\n mediaDomains?: string[];\n frameDomains?: string[];\n workerDomains?: string[];\n baseUriDomains?: string[];\n}\n\nexport interface UiResourcePermissions {\n camera?: {};\n microphone?: {};\n geolocation?: {};\n clipboardWrite?: {};\n}\n\nexport interface UiToolInfo {\n id?: string | number;\n tool: {\n name: string;\n description?: string;\n inputSchema?: unknown;\n };\n}\n\nexport interface UiHostContext {\n toolInfo?: UiToolInfo;\n theme?: \"light\" | \"dark\";\n styles?: Record<string, unknown>;\n displayMode?: UiDisplayMode;\n availableDisplayModes?: UiDisplayMode[];\n containerDimensions?: {\n width?: number;\n maxWidth?: number;\n height?: number;\n maxHeight?: number;\n };\n [key: string]: unknown;\n}\n\nexport type UiDisplayMode = \"inline\" | \"fullscreen\" | \"pip\";\n\n// Re-export stream types from the shared lightweight module.\n// This allows the example package to import stream schemas without pulling the full types.ts dependency graph.\nexport {\n UI_STREAM_HOST_CONTEXT_KEY,\n UI_STREAM_REQUEST_META_KEY,\n UI_STREAM_RESULT_PATCH_METHOD,\n SERVER_STREAM_RESULT_PATCH_METHOD,\n UI_STREAM_STRUCTURED_CONTENT_KEY,\n uiStreamModeSchema,\n visualizationStreamPhaseSchema,\n visualizationStreamFrameTypeSchema,\n visualizationStreamStatusSchema,\n uiStreamHostContextSchema,\n visualizationStreamEnvelopeSchema,\n uiStreamCallToolResultSchema,\n uiStreamResultPatchNotificationSchema,\n serverStreamResultPatchNotificationSchema,\n getUiStreamHostContext,\n getVisualizationStreamEnvelope,\n type UiStreamMode,\n type VisualizationStreamPhase,\n type VisualizationStreamFrameType,\n type VisualizationStreamStatus,\n type UiStreamHostContext,\n type VisualizationStreamEnvelope,\n type UiStreamCallToolResult,\n type UiStreamResultPatchNotification,\n type ServerStreamResultPatchNotification,\n type UiStreamSummary,\n} from \"./ui-stream-types.ts\";\n\nexport interface UiMessageParams {\n role?: string;\n content?: unknown[];\n type?: \"prompt\" | \"notify\" | \"intent\" | \"message\";\n message?: string;\n prompt?: string;\n intent?: string;\n params?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\n/**\n * Extract prompt text from either legacy MCP UI message shapes or native AppBridge user messages.\n */\nexport function extractUiPromptText(params: UiMessageParams): string | undefined {\n if (params.type === \"prompt\" || params.prompt) {\n const prompt = params.prompt ?? String(params.message ?? \"\");\n return prompt || undefined;\n }\n\n if (params.role === \"user\" && Array.isArray(params.content)) {\n const text = params.content\n .map((block) => (block && typeof block === \"object\" && \"text\" in block ? String((block as { text?: unknown }).text ?? \"\") : \"\"))\n .filter(Boolean)\n .join(\"\\n\\n\");\n return text || undefined;\n }\n\n return undefined;\n}\n\n/**\n * Structured UI handoff recovered from a canonical prompt envelope.\n */\nexport interface UiPromptHandoff {\n intent: string;\n params: Record<string, unknown>;\n raw: string;\n}\n\n/**\n * Parse a canonical named UI handoff encoded as `intent\\n{json}`.\n */\nexport function parseUiPromptHandoff(prompt: string): UiPromptHandoff | undefined {\n const newlineIndex = prompt.indexOf(\"\\n\");\n if (newlineIndex <= 0) {\n return undefined;\n }\n\n const intent = prompt.slice(0, newlineIndex).trim();\n const payloadText = prompt.slice(newlineIndex + 1).trim();\n if (!intent || !payloadText) {\n return undefined;\n }\n\n if (!/^[A-Za-z][A-Za-z0-9_-]*$/.test(intent)) {\n return undefined;\n }\n\n try {\n const parsed = JSON.parse(payloadText);\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return undefined;\n }\n return {\n intent,\n params: parsed as Record<string, unknown>,\n raw: prompt,\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Accumulated messages from a UI session.\n * Collected during the session and available when it ends.\n */\nexport interface UiSessionMessages {\n prompts: string[];\n notifications: string[];\n intents: Array<{ intent: string; params?: Record<string, unknown> }>;\n}\n\nexport interface UiModelContextParams {\n content?: unknown[];\n structuredContent?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface UiOpenLinkResult {\n isError?: boolean;\n [key: string]: unknown;\n}\n\nexport interface UiDisplayModeRequest {\n mode?: UiDisplayMode;\n}\n\nexport interface UiDisplayModeResult {\n mode: UiDisplayMode;\n [key: string]: unknown;\n}\n\n// Content types from MCP\nexport interface McpContent {\n type: \"text\" | \"image\" | \"audio\" | \"resource\" | \"resource_link\";\n text?: string;\n data?: string;\n mimeType?: string;\n resource?: {\n uri: string;\n text?: string;\n blob?: string;\n };\n uri?: string;\n name?: string;\n description?: string;\n}\n\n// Pi content block type\nexport type ContentBlock = TextContent | ImageContent;\n\n// OAuth configuration (SDK handles auto-discovery and dynamic registration)\nexport interface OAuthConfig {\n /** OAuth grant type (defaults to authorization_code) */\n grantType?: \"authorization_code\" | \"client_credentials\";\n /** Pre-registered client ID (optional, dynamic registration used if not provided) */\n clientId?: string;\n /** Client secret for confidential clients */\n clientSecret?: string;\n /** Requested OAuth scopes */\n scope?: string;\n /** Exact authorization-code redirect URI for pre-registered clients */\n redirectUri?: string;\n /** Client display name for dynamic registration */\n clientName?: string;\n /** Client homepage URI for dynamic registration */\n clientUri?: string;\n}\n\n// Server configuration\nexport interface ServerEntry {\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n cwd?: string;\n // HTTP fields\n url?: string;\n headers?: Record<string, string>;\n /** \n * Authentication type:\n * - 'oauth' - Use OAuth 2.1 (auto-discovers endpoints, supports dynamic client registration)\n * - 'bearer' - Use static Bearer token\n * - false - Disable authentication\n * If not specified and url is present, OAuth will be auto-detected unless custom headers are configured\n */\n auth?: \"oauth\" | \"bearer\" | false;\n bearerToken?: string;\n bearerTokenEnv?: string;\n /** \n * OAuth configuration (optional).\n * If not provided, the SDK will attempt dynamic client registration.\n * Set to false to explicitly disable OAuth for this server.\n */\n oauth?: OAuthConfig | false;\n lifecycle?: \"keep-alive\" | \"lazy\" | \"eager\";\n idleTimeout?: number; // minutes, overrides global setting\n requestTimeoutMs?: number; // milliseconds, overrides global request timeout when > 0\n // Resource handling\n exposeResources?: boolean;\n // Direct tool registration\n directTools?: boolean | string[];\n // Exclude specific MCP tools/resources by original or prefixed name\n excludeTools?: string[];\n // Debug\n debug?: boolean; // Show server stderr (default: false)\n}\n\n// Output guard tuning (settings.outputGuard object form)\nexport interface McpOutputGuardSettings {\n /** Maximum inline MCP text output bytes before truncation/spill-to-disk. Defaults to 51200 (50 KiB). */\n maxBytes?: number;\n /** Maximum inline MCP text output lines before truncation/spill-to-disk. Defaults to 2000. */\n maxLines?: number;\n /** Maximum details.mcpResult JSON bytes kept raw; larger results are summarized and spilled to disk. Defaults to 16384 (16 KiB). */\n detailsMaxBytes?: number;\n}\n\n// Settings\nexport interface McpSettings {\n toolPrefix?: \"server\" | \"none\" | \"short\";\n idleTimeout?: number; // minutes, default 10, 0 to disable\n requestTimeoutMs?: number; // milliseconds, overrides the SDK request timeout when > 0\n directTools?: boolean;\n disableProxyTool?: boolean;\n autoAuth?: boolean;\n sampling?: boolean;\n samplingAutoApprove?: boolean;\n elicitation?: boolean;\n /**\n * Guard oversized MCP tool/resource output before it is returned to the model.\n * Defaults to true (50 KiB / 2,000 lines inline text, 16 KiB details.mcpResult).\n * Set to false to restore raw MCP output behavior, or pass an object to tune\n * the limits. Env kill switch: MCP_OUTPUT_GUARD=0.\n */\n outputGuard?: boolean | McpOutputGuardSettings;\n /**\n * Message returned in tool results when a server needs (re-)authentication.\n * \"${server}\" is substituted with the server name. Defaults to a TUI\n * instruction when unset.\n */\n authRequiredMessage?: string;\n}\n\n// Root config\nexport interface McpConfig {\n mcpServers: Record<string, ServerEntry>;\n imports?: ImportKind[];\n settings?: McpSettings;\n}\n\n// Alias for clarity\nexport type ServerDefinition = ServerEntry;\n\nexport interface ToolMetadata {\n name: string; // Prefixed tool name (e.g., \"xcodebuild_list_sims\")\n originalName: string; // Original MCP tool name (e.g., \"list_sims\")\n description: string;\n resourceUri?: string; // For resource tools: the URI to read\n uiResourceUri?: string; // For app-enabled tools: the UI resource URI\n inputSchema?: unknown; // JSON Schema for parameters (stored for describe/errors)\n uiStreamMode?: UiStreamMode;\n}\n\nexport interface DirectToolSpec {\n serverName: string;\n originalName: string;\n prefixedName: string;\n description: string;\n inputSchema?: unknown;\n resourceUri?: string;\n uiResourceUri?: string;\n uiStreamMode?: UiStreamMode;\n}\n\nexport interface ServerProvenance {\n path: string;\n kind: \"user\" | \"project\" | \"import\";\n importKind?: string;\n}\n\nexport interface McpAuthResult {\n ok: boolean;\n message?: string;\n}\n\nexport interface McpPanelCallbacks {\n reconnect: (serverName: string) => Promise<boolean>;\n canAuthenticate: (serverName: string) => boolean;\n authenticate: (serverName: string) => Promise<McpAuthResult>;\n getConnectionStatus: (serverName: string) => \"connected\" | \"idle\" | \"failed\" | \"needs-auth\";\n refreshCacheAfterReconnect: (serverName: string) => import(\"./metadata-cache.ts\").ServerCacheEntry | null;\n}\n\nexport interface McpPanelResult {\n changes: Map<string, true | string[] | false>;\n cancelled: boolean;\n}\n\n/**\n * Get server prefix based on tool prefix mode.\n */\nexport function getServerPrefix(\n serverName: string,\n mode: \"server\" | \"none\" | \"short\"\n): string {\n if (mode === \"none\") return \"\";\n if (mode === \"short\") {\n let short = serverName.replace(/-?mcp$/i, \"\").replace(/-/g, \"_\");\n if (!short) short = \"mcp\";\n return short;\n }\n return serverName.replace(/-/g, \"_\");\n}\n\n/**\n * Format a tool name with server prefix.\n */\nexport function formatToolName(\n toolName: string,\n serverName: string,\n prefix: \"server\" | \"none\" | \"short\"\n): string {\n const p = getServerPrefix(serverName, prefix);\n return p ? `${p}_${toolName}` : toolName;\n}\n\nfunction normalizeToolName(value: string): string {\n return value.replace(/-/g, \"_\");\n}\n\nexport function isToolExcluded(\n toolName: string,\n serverName: string,\n prefix: \"server\" | \"none\" | \"short\",\n excludeTools?: unknown\n): boolean {\n if (!Array.isArray(excludeTools) || excludeTools.length === 0) return false;\n\n const candidates = new Set<string>([\n normalizeToolName(toolName),\n normalizeToolName(formatToolName(toolName, serverName, prefix)),\n normalizeToolName(formatToolName(toolName, serverName, \"server\")),\n normalizeToolName(formatToolName(toolName, serverName, \"short\")),\n ]);\n\n for (const excluded of excludeTools) {\n if (typeof excluded !== \"string\") continue;\n if (candidates.has(normalizeToolName(excluded))) {\n return true;\n }\n }\n\n return false;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/types.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n// types.ts - Core type definitions\nimport type { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport type { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport type { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { TextContent, ImageContent } from \"@ashx-j/lunr-ai\";\nimport type { UiStreamMode } from \"./ui-stream-types.ts\";\n\n// Transport type (stdio + HTTP)\nexport type Transport = \n | StdioClientTransport \n | SSEClientTransport \n | StreamableHTTPClientTransport;\n\n// Import sources for config\nexport type ImportKind = \n | \"cursor\" \n | \"claude-code\" \n | \"claude-desktop\" \n | \"codex\" \n | \"windsurf\" \n | \"vscode\";\n\n// Tool definition from MCP server\nexport interface McpTool {\n name: string;\n title?: string;\n description?: string;\n inputSchema?: unknown; // JSON Schema\n _meta?: Record<string, unknown>;\n}\n\n// Resource definition from MCP server\nexport interface McpResource {\n uri: string;\n name: string;\n description?: string;\n mimeType?: string;\n _meta?: Record<string, unknown>;\n}\n\nexport interface UiResourceMeta {\n csp?: UiResourceCsp;\n permissions?: UiResourcePermissions;\n domain?: string;\n prefersBorder?: boolean;\n}\n\nexport interface UiResourceContent {\n uri: string;\n html: string;\n mimeType?: string;\n meta: UiResourceMeta;\n}\n\nexport interface UiProxyRequestBody<TParams> {\n token: string;\n params: TParams;\n}\n\nexport interface UiProxyResult<T = Record<string, unknown>> {\n ok: boolean;\n result?: T;\n error?: string;\n}\n\nexport interface UiResourceCsp {\n connectDomains?: string[];\n scriptDomains?: string[];\n styleDomains?: string[];\n fontDomains?: string[];\n imgDomains?: string[];\n mediaDomains?: string[];\n frameDomains?: string[];\n workerDomains?: string[];\n baseUriDomains?: string[];\n}\n\nexport interface UiResourcePermissions {\n camera?: {};\n microphone?: {};\n geolocation?: {};\n clipboardWrite?: {};\n}\n\nexport interface UiToolInfo {\n id?: string | number;\n tool: {\n name: string;\n description?: string;\n inputSchema?: unknown;\n };\n}\n\nexport interface UiHostContext {\n toolInfo?: UiToolInfo;\n theme?: \"light\" | \"dark\";\n styles?: Record<string, unknown>;\n displayMode?: UiDisplayMode;\n availableDisplayModes?: UiDisplayMode[];\n containerDimensions?: {\n width?: number;\n maxWidth?: number;\n height?: number;\n maxHeight?: number;\n };\n [key: string]: unknown;\n}\n\nexport type UiDisplayMode = \"inline\" | \"fullscreen\" | \"pip\";\n\n// Re-export stream types from the shared lightweight module.\n// This allows the example package to import stream schemas without pulling the full types.ts dependency graph.\nexport {\n UI_STREAM_HOST_CONTEXT_KEY,\n UI_STREAM_REQUEST_META_KEY,\n UI_STREAM_RESULT_PATCH_METHOD,\n SERVER_STREAM_RESULT_PATCH_METHOD,\n UI_STREAM_STRUCTURED_CONTENT_KEY,\n uiStreamModeSchema,\n visualizationStreamPhaseSchema,\n visualizationStreamFrameTypeSchema,\n visualizationStreamStatusSchema,\n uiStreamHostContextSchema,\n visualizationStreamEnvelopeSchema,\n uiStreamCallToolResultSchema,\n uiStreamResultPatchNotificationSchema,\n serverStreamResultPatchNotificationSchema,\n getUiStreamHostContext,\n getVisualizationStreamEnvelope,\n type UiStreamMode,\n type VisualizationStreamPhase,\n type VisualizationStreamFrameType,\n type VisualizationStreamStatus,\n type UiStreamHostContext,\n type VisualizationStreamEnvelope,\n type UiStreamCallToolResult,\n type UiStreamResultPatchNotification,\n type ServerStreamResultPatchNotification,\n type UiStreamSummary,\n} from \"./ui-stream-types.ts\";\n\nexport interface UiMessageParams {\n role?: string;\n content?: unknown[];\n type?: \"prompt\" | \"notify\" | \"intent\" | \"message\";\n message?: string;\n prompt?: string;\n intent?: string;\n params?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\n/**\n * Extract prompt text from either legacy MCP UI message shapes or native AppBridge user messages.\n */\nexport function extractUiPromptText(params: UiMessageParams): string | undefined {\n if (params.type === \"prompt\" || params.prompt) {\n const prompt = params.prompt ?? String(params.message ?? \"\");\n return prompt || undefined;\n }\n\n if (params.role === \"user\" && Array.isArray(params.content)) {\n const text = params.content\n .map((block) => (block && typeof block === \"object\" && \"text\" in block ? String((block as { text?: unknown }).text ?? \"\") : \"\"))\n .filter(Boolean)\n .join(\"\\n\\n\");\n return text || undefined;\n }\n\n return undefined;\n}\n\n/**\n * Structured UI handoff recovered from a canonical prompt envelope.\n */\nexport interface UiPromptHandoff {\n intent: string;\n params: Record<string, unknown>;\n raw: string;\n}\n\n/**\n * Parse a canonical named UI handoff encoded as `intent\\n{json}`.\n */\nexport function parseUiPromptHandoff(prompt: string): UiPromptHandoff | undefined {\n const newlineIndex = prompt.indexOf(\"\\n\");\n if (newlineIndex <= 0) {\n return undefined;\n }\n\n const intent = prompt.slice(0, newlineIndex).trim();\n const payloadText = prompt.slice(newlineIndex + 1).trim();\n if (!intent || !payloadText) {\n return undefined;\n }\n\n if (!/^[A-Za-z][A-Za-z0-9_-]*$/.test(intent)) {\n return undefined;\n }\n\n try {\n const parsed = JSON.parse(payloadText);\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return undefined;\n }\n return {\n intent,\n params: parsed as Record<string, unknown>,\n raw: prompt,\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Accumulated messages from a UI session.\n * Collected during the session and available when it ends.\n */\nexport interface UiSessionMessages {\n prompts: string[];\n notifications: string[];\n intents: Array<{ intent: string; params?: Record<string, unknown> }>;\n}\n\nexport interface UiModelContextParams {\n content?: unknown[];\n structuredContent?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface UiOpenLinkResult {\n isError?: boolean;\n [key: string]: unknown;\n}\n\nexport interface UiDisplayModeRequest {\n mode?: UiDisplayMode;\n}\n\nexport interface UiDisplayModeResult {\n mode: UiDisplayMode;\n [key: string]: unknown;\n}\n\n// Content types from MCP\nexport interface McpContent {\n type: \"text\" | \"image\" | \"audio\" | \"resource\" | \"resource_link\";\n text?: string;\n data?: string;\n mimeType?: string;\n resource?: {\n uri: string;\n text?: string;\n blob?: string;\n };\n uri?: string;\n name?: string;\n description?: string;\n}\n\n// Pi content block type\nexport type ContentBlock = TextContent | ImageContent;\n\n// OAuth configuration (SDK handles auto-discovery and dynamic registration)\nexport interface OAuthConfig {\n /** OAuth grant type (defaults to authorization_code) */\n grantType?: \"authorization_code\" | \"client_credentials\";\n /** Pre-registered client ID (optional, dynamic registration used if not provided) */\n clientId?: string;\n /** Client secret for confidential clients */\n clientSecret?: string;\n /** Requested OAuth scopes */\n scope?: string;\n /** Exact authorization-code redirect URI for pre-registered clients */\n redirectUri?: string;\n /** Client display name for dynamic registration */\n clientName?: string;\n /** Client homepage URI for dynamic registration */\n clientUri?: string;\n}\n\n// Server configuration\nexport interface ServerEntry {\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n cwd?: string;\n // HTTP fields\n url?: string;\n headers?: Record<string, string>;\n /** \n * Authentication type:\n * - 'oauth' - Use OAuth 2.1 (auto-discovers endpoints, supports dynamic client registration)\n * - 'bearer' - Use static Bearer token\n * - false - Disable authentication\n * If not specified and url is present, OAuth will be auto-detected unless custom headers are configured\n */\n auth?: \"oauth\" | \"bearer\" | false;\n bearerToken?: string;\n bearerTokenEnv?: string;\n /** \n * OAuth configuration (optional).\n * If not provided, the SDK will attempt dynamic client registration.\n * Set to false to explicitly disable OAuth for this server.\n */\n oauth?: OAuthConfig | false;\n lifecycle?: \"keep-alive\" | \"lazy\" | \"eager\";\n idleTimeout?: number; // minutes, overrides global setting\n requestTimeoutMs?: number; // milliseconds, overrides global request timeout when > 0\n // Resource handling\n exposeResources?: boolean;\n // Direct tool registration\n directTools?: boolean | string[];\n // Exclude specific MCP tools/resources by original or prefixed name\n excludeTools?: string[];\n // Debug\n debug?: boolean; // Show server stderr (default: false)\n}\n\n// Output guard tuning (settings.outputGuard object form)\nexport interface McpOutputGuardSettings {\n /** Maximum inline MCP text output bytes before truncation/spill-to-disk. Defaults to 51200 (50 KiB). */\n maxBytes?: number;\n /** Maximum inline MCP text output lines before truncation/spill-to-disk. Defaults to 2000. */\n maxLines?: number;\n /** Maximum details.mcpResult JSON bytes kept raw; larger results are summarized and spilled to disk. Defaults to 16384 (16 KiB). */\n detailsMaxBytes?: number;\n}\n\n// Settings\nexport interface McpSettings {\n toolPrefix?: \"server\" | \"none\" | \"short\";\n idleTimeout?: number; // minutes, default 10, 0 to disable\n requestTimeoutMs?: number; // milliseconds, overrides the SDK request timeout when > 0\n directTools?: boolean;\n disableProxyTool?: boolean;\n autoAuth?: boolean;\n sampling?: boolean;\n samplingAutoApprove?: boolean;\n elicitation?: boolean;\n /**\n * Guard oversized MCP tool/resource output before it is returned to the model.\n * Defaults to true (50 KiB / 2,000 lines inline text, 16 KiB details.mcpResult).\n * Set to false to restore raw MCP output behavior, or pass an object to tune\n * the limits. Env kill switch: MCP_OUTPUT_GUARD=0.\n */\n outputGuard?: boolean | McpOutputGuardSettings;\n /**\n * Message returned in tool results when a server needs (re-)authentication.\n * \"${server}\" is substituted with the server name. Defaults to a TUI\n * instruction when unset.\n */\n authRequiredMessage?: string;\n}\n\n// Root config\nexport interface McpConfig {\n mcpServers: Record<string, ServerEntry>;\n imports?: ImportKind[];\n settings?: McpSettings;\n}\n\n// Alias for clarity\nexport type ServerDefinition = ServerEntry;\n\nexport interface ToolMetadata {\n name: string; // Prefixed tool name (e.g., \"xcodebuild_list_sims\")\n originalName: string; // Original MCP tool name (e.g., \"list_sims\")\n description: string;\n resourceUri?: string; // For resource tools: the URI to read\n uiResourceUri?: string; // For app-enabled tools: the UI resource URI\n inputSchema?: unknown; // JSON Schema for parameters (stored for describe/errors)\n uiStreamMode?: UiStreamMode;\n}\n\nexport interface DirectToolSpec {\n serverName: string;\n originalName: string;\n prefixedName: string;\n description: string;\n inputSchema?: unknown;\n resourceUri?: string;\n uiResourceUri?: string;\n uiStreamMode?: UiStreamMode;\n}\n\nexport interface ServerProvenance {\n path: string;\n kind: \"user\" | \"project\" | \"import\";\n importKind?: string;\n}\n\nexport interface McpAuthResult {\n ok: boolean;\n message?: string;\n}\n\nexport interface McpPanelCallbacks {\n reconnect: (serverName: string) => Promise<boolean>;\n canAuthenticate: (serverName: string) => boolean;\n authenticate: (serverName: string) => Promise<McpAuthResult>;\n getConnectionStatus: (serverName: string) => \"connected\" | \"idle\" | \"failed\" | \"needs-auth\";\n refreshCacheAfterReconnect: (serverName: string) => import(\"./metadata-cache.ts\").ServerCacheEntry | null;\n}\n\nexport interface McpPanelResult {\n changes: Map<string, true | string[] | false>;\n cancelled: boolean;\n}\n\n/**\n * Get server prefix based on tool prefix mode.\n */\nexport function getServerPrefix(\n serverName: string,\n mode: \"server\" | \"none\" | \"short\"\n): string {\n if (mode === \"none\") return \"\";\n if (mode === \"short\") {\n let short = serverName.replace(/-?mcp$/i, \"\").replace(/-/g, \"_\");\n if (!short) short = \"mcp\";\n return short;\n }\n return serverName.replace(/-/g, \"_\");\n}\n\n/**\n * Format a tool name with server prefix.\n */\nexport function formatToolName(\n toolName: string,\n serverName: string,\n prefix: \"server\" | \"none\" | \"short\"\n): string {\n const p = getServerPrefix(serverName, prefix);\n return p ? `${p}_${toolName}` : toolName;\n}\n\nfunction normalizeToolName(value: string): string {\n return value.replace(/-/g, \"_\");\n}\n\nexport function isToolExcluded(\n toolName: string,\n serverName: string,\n prefix: \"server\" | \"none\" | \"short\",\n excludeTools?: unknown\n): boolean {\n if (!Array.isArray(excludeTools) || excludeTools.length === 0) return false;\n\n const candidates = new Set<string>([\n normalizeToolName(toolName),\n normalizeToolName(formatToolName(toolName, serverName, prefix)),\n normalizeToolName(formatToolName(toolName, serverName, \"server\")),\n normalizeToolName(formatToolName(toolName, serverName, \"short\")),\n ]);\n\n for (const excluded of excludeTools) {\n if (typeof excluded !== \"string\") continue;\n if (candidates.has(normalizeToolName(excluded))) {\n return true;\n }\n }\n\n return false;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
1
+ import type { ExtensionAPI } from "@ashx-j/lunr";
2
2
  import type { McpConfig, ServerEntry } from "./types.ts";
3
3
  export declare function openUrl(pi: ExtensionAPI, url: string, browser?: string): Promise<void>;
4
4
  export declare function openPath(pi: ExtensionAPI, targetPath: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAGpE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAgBzD,wBAAsB,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK5F;AAED,wBAAsB,QAAQ,CAAC,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlF;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,CAAC,EACtC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC,CAcd;AAED,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAM1D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAQnH;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAS/E;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,gBAAgB,CAAC,GAAG,MAAM,GAAG,SAAS,CAKtH;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAWnE;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMvF;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EACnC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,OAAO,GAAG,cAAc,GAAG,SAAS,CAQ3H","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI } from \"@earendil-works/pi-coding-agent\";\nimport { homedir, platform } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { McpConfig, ServerEntry } from \"./types.ts\";\n\nasync function execOpen(pi: ExtensionAPI, target: string, browser?: string) {\n const os = platform();\n\n if (os === \"darwin\") {\n return browser ? pi.exec(\"open\", [\"-a\", browser, target]) : pi.exec(\"open\", [target]);\n }\n if (os === \"win32\") {\n return browser\n ? pi.exec(\"cmd\", [\"/c\", \"start\", \"\", browser, target])\n : pi.exec(\"cmd\", [\"/c\", \"start\", \"\", target]);\n }\n return browser ? pi.exec(browser, [target]) : pi.exec(\"xdg-open\", [target]);\n}\n\nexport async function openUrl(pi: ExtensionAPI, url: string, browser?: string): Promise<void> {\n const result = await execOpen(pi, url, browser);\n if (result.code !== 0) {\n throw new Error(result.stderr || `Failed to open browser (exit code ${result.code})`);\n }\n}\n\nexport async function openPath(pi: ExtensionAPI, targetPath: string): Promise<void> {\n const result = await execOpen(pi, targetPath);\n if (result.code !== 0) {\n throw new Error(result.stderr || `Failed to open path (exit code ${result.code})`);\n }\n}\n\nexport async function parallelLimit<T, R>(\n items: T[],\n limit: number,\n fn: (item: T) => Promise<R>\n): Promise<R[]> {\n const results: R[] = [];\n let index = 0;\n\n async function worker() {\n while (index < items.length) {\n const i = index++;\n results[i] = await fn(items[i]);\n }\n }\n\n const workers = Array(Math.min(limit, items.length)).fill(null).map(() => worker());\n await Promise.all(workers);\n return results;\n}\n\nexport function getConfigPathFromArgv(): string | undefined {\n const idx = process.argv.indexOf(\"--mcp-config\");\n if (idx >= 0 && idx + 1 < process.argv.length) {\n return process.argv[idx + 1];\n }\n return undefined;\n}\n\nexport function interpolateEnvVars(value: string): string {\n return value\n .replace(/\\$\\{(\\w+)\\}/g, (_, name) => process.env[name] ?? \"\")\n .replace(/\\$env:(\\w+)/g, (_, name) => process.env[name] ?? \"\");\n}\n\nexport function interpolateEnvRecord(values: Record<string, string> | undefined): Record<string, string> | undefined {\n if (!values) return undefined;\n\n const resolved: Record<string, string> = {};\n for (const [key, value] of Object.entries(values)) {\n resolved[key] = interpolateEnvVars(value);\n }\n return resolved;\n}\n\nexport function resolveConfigPath(value: string | undefined): string | undefined {\n if (value === undefined) return undefined;\n\n const resolved = interpolateEnvVars(value);\n if (resolved === \"~\") return homedir();\n if (resolved.startsWith(\"~/\") || resolved.startsWith(\"~\\\\\")) {\n return join(homedir(), resolved.slice(2));\n }\n return resolved;\n}\n\nexport function resolveBearerToken(definition: Pick<ServerEntry, \"bearerToken\" | \"bearerTokenEnv\">): string | undefined {\n if (definition.bearerToken !== undefined) {\n return interpolateEnvVars(definition.bearerToken);\n }\n return definition.bearerTokenEnv ? process.env[definition.bearerTokenEnv] : undefined;\n}\n\nexport function truncateAtWord(text: string, target: number): string {\n if (!text || text.length <= target) return text;\n\n const truncated = text.slice(0, target);\n const lastSpace = truncated.lastIndexOf(\" \");\n\n if (lastSpace > target * 0.6) {\n return truncated.slice(0, lastSpace) + \"...\";\n }\n\n return truncated + \"...\";\n}\n\nexport function normalizeDirectToolInputSchema(schema: unknown): Record<string, unknown> {\n const inputSchema = schema && typeof schema === \"object\" && !Array.isArray(schema)\n ? schema as Record<string, unknown>\n : { type: \"object\", properties: {} };\n const { $schema, additionalProperties, ...normalized } = inputSchema;\n return normalized;\n}\n\nexport function formatAuthRequiredMessage(\n config: Pick<McpConfig, \"settings\">,\n serverName: string,\n defaultMessage: string,\n): string {\n const template = config.settings?.authRequiredMessage;\n return template ? template.replaceAll(\"${server}\", serverName) : defaultMessage;\n}\n\n/**\n * Extract the adapter-owned UI stream mode from tool metadata.\n */\nexport function extractToolUiStreamMode(toolMeta: Record<string, unknown> | undefined): \"eager\" | \"stream-first\" | undefined {\n const uiMeta = toolMeta?.ui;\n if (!uiMeta || typeof uiMeta !== \"object\") return undefined;\n const streamMode = (uiMeta as Record<string, unknown>)[\"pi-mcp-adapter.streamMode\"];\n if (streamMode === \"eager\" || streamMode === \"stream-first\") {\n return streamMode;\n }\n return undefined;\n}\n"]}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAGpE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAgBzD,wBAAsB,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK5F;AAED,wBAAsB,QAAQ,CAAC,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlF;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,CAAC,EACtC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC,CAcd;AAED,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAM1D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAQnH;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAS/E;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,gBAAgB,CAAC,GAAG,MAAM,GAAG,SAAS,CAKtH;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAWnE;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMvF;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EACnC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,OAAO,GAAG,cAAc,GAAG,SAAS,CAQ3H","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI } from \"@ashx-j/lunr\";\nimport { homedir, platform } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { McpConfig, ServerEntry } from \"./types.ts\";\n\nasync function execOpen(pi: ExtensionAPI, target: string, browser?: string) {\n const os = platform();\n\n if (os === \"darwin\") {\n return browser ? pi.exec(\"open\", [\"-a\", browser, target]) : pi.exec(\"open\", [target]);\n }\n if (os === \"win32\") {\n return browser\n ? pi.exec(\"cmd\", [\"/c\", \"start\", \"\", browser, target])\n : pi.exec(\"cmd\", [\"/c\", \"start\", \"\", target]);\n }\n return browser ? pi.exec(browser, [target]) : pi.exec(\"xdg-open\", [target]);\n}\n\nexport async function openUrl(pi: ExtensionAPI, url: string, browser?: string): Promise<void> {\n const result = await execOpen(pi, url, browser);\n if (result.code !== 0) {\n throw new Error(result.stderr || `Failed to open browser (exit code ${result.code})`);\n }\n}\n\nexport async function openPath(pi: ExtensionAPI, targetPath: string): Promise<void> {\n const result = await execOpen(pi, targetPath);\n if (result.code !== 0) {\n throw new Error(result.stderr || `Failed to open path (exit code ${result.code})`);\n }\n}\n\nexport async function parallelLimit<T, R>(\n items: T[],\n limit: number,\n fn: (item: T) => Promise<R>\n): Promise<R[]> {\n const results: R[] = [];\n let index = 0;\n\n async function worker() {\n while (index < items.length) {\n const i = index++;\n results[i] = await fn(items[i]);\n }\n }\n\n const workers = Array(Math.min(limit, items.length)).fill(null).map(() => worker());\n await Promise.all(workers);\n return results;\n}\n\nexport function getConfigPathFromArgv(): string | undefined {\n const idx = process.argv.indexOf(\"--mcp-config\");\n if (idx >= 0 && idx + 1 < process.argv.length) {\n return process.argv[idx + 1];\n }\n return undefined;\n}\n\nexport function interpolateEnvVars(value: string): string {\n return value\n .replace(/\\$\\{(\\w+)\\}/g, (_, name) => process.env[name] ?? \"\")\n .replace(/\\$env:(\\w+)/g, (_, name) => process.env[name] ?? \"\");\n}\n\nexport function interpolateEnvRecord(values: Record<string, string> | undefined): Record<string, string> | undefined {\n if (!values) return undefined;\n\n const resolved: Record<string, string> = {};\n for (const [key, value] of Object.entries(values)) {\n resolved[key] = interpolateEnvVars(value);\n }\n return resolved;\n}\n\nexport function resolveConfigPath(value: string | undefined): string | undefined {\n if (value === undefined) return undefined;\n\n const resolved = interpolateEnvVars(value);\n if (resolved === \"~\") return homedir();\n if (resolved.startsWith(\"~/\") || resolved.startsWith(\"~\\\\\")) {\n return join(homedir(), resolved.slice(2));\n }\n return resolved;\n}\n\nexport function resolveBearerToken(definition: Pick<ServerEntry, \"bearerToken\" | \"bearerTokenEnv\">): string | undefined {\n if (definition.bearerToken !== undefined) {\n return interpolateEnvVars(definition.bearerToken);\n }\n return definition.bearerTokenEnv ? process.env[definition.bearerTokenEnv] : undefined;\n}\n\nexport function truncateAtWord(text: string, target: number): string {\n if (!text || text.length <= target) return text;\n\n const truncated = text.slice(0, target);\n const lastSpace = truncated.lastIndexOf(\" \");\n\n if (lastSpace > target * 0.6) {\n return truncated.slice(0, lastSpace) + \"...\";\n }\n\n return truncated + \"...\";\n}\n\nexport function normalizeDirectToolInputSchema(schema: unknown): Record<string, unknown> {\n const inputSchema = schema && typeof schema === \"object\" && !Array.isArray(schema)\n ? schema as Record<string, unknown>\n : { type: \"object\", properties: {} };\n const { $schema, additionalProperties, ...normalized } = inputSchema;\n return normalized;\n}\n\nexport function formatAuthRequiredMessage(\n config: Pick<McpConfig, \"settings\">,\n serverName: string,\n defaultMessage: string,\n): string {\n const template = config.settings?.authRequiredMessage;\n return template ? template.replaceAll(\"${server}\", serverName) : defaultMessage;\n}\n\n/**\n * Extract the adapter-owned UI stream mode from tool metadata.\n */\nexport function extractToolUiStreamMode(toolMeta: Record<string, unknown> | undefined): \"eager\" | \"stream-first\" | undefined {\n const uiMeta = toolMeta?.ui;\n if (!uiMeta || typeof uiMeta !== \"object\") return undefined;\n const streamMode = (uiMeta as Record<string, unknown>)[\"pi-mcp-adapter.streamMode\"];\n if (streamMode === \"eager\" || streamMode === \"stream-first\") {\n return streamMode;\n }\n return undefined;\n}\n"]}