@ashx-j/lunr 0.2.25 → 0.2.27

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 (729) hide show
  1. package/CHANGELOG.md +31 -1
  2. package/LICENSE +22 -0
  3. package/dist/builtin-extensions/ashxj-thinking.d.ts +1 -1
  4. package/dist/builtin-extensions/ashxj-thinking.d.ts.map +1 -1
  5. package/dist/builtin-extensions/ashxj-thinking.js +1 -1
  6. package/dist/builtin-extensions/ashxj-thinking.js.map +1 -1
  7. package/dist/builtin-extensions/ashxj-tui.d.ts +11 -1
  8. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  9. package/dist/builtin-extensions/ashxj-tui.js +6 -10
  10. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  11. package/dist/builtin-extensions/index.d.ts.map +1 -1
  12. package/dist/builtin-extensions/index.js +1 -0
  13. package/dist/builtin-extensions/index.js.map +1 -1
  14. package/dist/builtin-extensions/lunr-computer-use.d.ts +3 -0
  15. package/dist/builtin-extensions/lunr-computer-use.d.ts.map +1 -0
  16. package/dist/builtin-extensions/lunr-computer-use.js +179 -0
  17. package/dist/builtin-extensions/lunr-computer-use.js.map +1 -0
  18. package/dist/builtin-extensions/lunr-cron.d.ts +4 -5
  19. package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -1
  20. package/dist/builtin-extensions/lunr-cron.js +94 -108
  21. package/dist/builtin-extensions/lunr-cron.js.map +1 -1
  22. package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts.map +1 -1
  23. package/dist/builtin-extensions/lunr-local-providers/local-servers.js +3 -1
  24. package/dist/builtin-extensions/lunr-local-providers/local-servers.js.map +1 -1
  25. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.d.ts.map +1 -1
  26. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js +2 -2
  27. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js.map +1 -1
  28. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
  29. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js +1 -1
  30. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
  31. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts.map +1 -1
  32. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js +1 -1
  33. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js.map +1 -1
  34. package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
  35. package/dist/builtin-extensions/pi-intercom/index.js +2 -2
  36. package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
  37. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts +1 -1
  38. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts.map +1 -1
  39. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js +1 -1
  40. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js.map +1 -1
  41. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
  42. package/dist/builtin-extensions/pi-lsp-extension/src/index.js +1 -15
  43. package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
  44. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts +6 -0
  45. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts.map +1 -1
  46. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js +187 -132
  47. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js.map +1 -1
  48. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts +8 -0
  49. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts.map +1 -1
  50. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js +142 -112
  51. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js.map +1 -1
  52. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts +12 -1
  53. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts.map +1 -1
  54. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js +14 -7
  55. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js.map +1 -1
  56. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts +11 -3
  57. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts.map +1 -1
  58. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js +67 -41
  59. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js.map +1 -1
  60. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts +4 -2
  61. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts.map +1 -1
  62. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js +3 -0
  63. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js.map +1 -1
  64. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts +2 -1
  65. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts.map +1 -1
  66. package/dist/builtin-extensions/pi-mcp-adapter/commands.js +6 -6
  67. package/dist/builtin-extensions/pi-mcp-adapter/commands.js.map +1 -1
  68. package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts +1 -1
  69. package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts.map +1 -1
  70. package/dist/builtin-extensions/pi-mcp-adapter/config.js +11 -5
  71. package/dist/builtin-extensions/pi-mcp-adapter/config.js.map +1 -1
  72. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.d.ts.map +1 -1
  73. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js +2 -2
  74. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js.map +1 -1
  75. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.d.ts.map +1 -1
  76. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js +1 -1
  77. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js.map +1 -1
  78. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
  79. package/dist/builtin-extensions/pi-mcp-adapter/index.js +48 -40
  80. package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
  81. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
  82. package/dist/builtin-extensions/pi-mcp-adapter/init.js +3 -1
  83. package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
  84. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts +12 -40
  85. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts.map +1 -1
  86. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js +166 -235
  87. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js.map +1 -1
  88. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts +5 -0
  89. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts.map +1 -1
  90. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js +43 -13
  91. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js.map +1 -1
  92. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts +14 -3
  93. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts.map +1 -1
  94. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js +73 -21
  95. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js.map +1 -1
  96. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts.map +1 -1
  97. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js +4 -4
  98. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js.map +1 -1
  99. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.d.ts.map +1 -1
  100. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js +2 -2
  101. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js.map +1 -1
  102. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts +2 -0
  103. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts.map +1 -1
  104. package/dist/builtin-extensions/pi-mcp-adapter/state.js.map +1 -1
  105. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts +1 -1
  106. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts.map +1 -1
  107. package/dist/builtin-extensions/pi-ollama-cloud/index.js +1 -1
  108. package/dist/builtin-extensions/pi-ollama-cloud/index.js.map +1 -1
  109. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts +11 -5
  110. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts.map +1 -1
  111. package/dist/builtin-extensions/pi-ollama-cloud/models.js +12 -32
  112. package/dist/builtin-extensions/pi-ollama-cloud/models.js.map +1 -1
  113. package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts.map +1 -1
  114. package/dist/builtin-extensions/pi-prompt-template-model/index.js +5 -3
  115. package/dist/builtin-extensions/pi-prompt-template-model/index.js.map +1 -1
  116. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts +2 -1
  117. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
  118. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +21 -12
  119. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
  120. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
  121. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +7 -24
  122. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
  123. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  124. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +39 -77
  125. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  126. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
  127. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +1 -1
  128. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -1
  129. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +4 -4
  130. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
  131. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +8 -5
  132. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
  133. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +1 -1
  134. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
  135. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js +15 -31
  136. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
  137. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.d.ts.map +1 -1
  138. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js +7 -2
  139. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js.map +1 -1
  140. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts +1 -0
  141. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  142. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +21 -4
  143. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  144. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  145. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +11 -4
  146. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  147. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  148. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +121 -25
  149. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  150. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  151. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +25 -5
  152. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  153. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.d.ts +1 -0
  154. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.d.ts.map +1 -1
  155. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.js +5 -0
  156. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.js.map +1 -1
  157. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts +1 -1
  158. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts.map +1 -1
  159. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js +2 -0
  160. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js.map +1 -1
  161. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +1 -1
  162. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
  163. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +1 -1
  164. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
  165. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +7 -8
  166. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
  167. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js +60 -32
  168. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
  169. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts +1 -1
  170. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts.map +1 -1
  171. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js +15 -5
  172. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js.map +1 -1
  173. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
  174. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +4 -3
  175. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
  176. package/dist/builtin-extensions/pi-subagents/src/tui/communication.d.ts.map +1 -1
  177. package/dist/builtin-extensions/pi-subagents/src/tui/communication.js +1 -1
  178. package/dist/builtin-extensions/pi-subagents/src/tui/communication.js.map +1 -1
  179. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +2 -1
  180. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  181. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +22 -11
  182. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  183. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
  184. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +3 -3
  185. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
  186. package/dist/builtin-extensions/pi-tps.d.ts.map +1 -1
  187. package/dist/builtin-extensions/pi-tps.js +20 -17
  188. package/dist/builtin-extensions/pi-tps.js.map +1 -1
  189. package/dist/builtin-extensions/pi-web-access/activity.d.ts +1 -0
  190. package/dist/builtin-extensions/pi-web-access/activity.d.ts.map +1 -1
  191. package/dist/builtin-extensions/pi-web-access/activity.js +27 -5
  192. package/dist/builtin-extensions/pi-web-access/activity.js.map +1 -1
  193. package/dist/builtin-extensions/pi-web-access/bounded-body.d.ts +3 -0
  194. package/dist/builtin-extensions/pi-web-access/bounded-body.d.ts.map +1 -0
  195. package/dist/builtin-extensions/pi-web-access/bounded-body.js +43 -0
  196. package/dist/builtin-extensions/pi-web-access/bounded-body.js.map +1 -0
  197. package/dist/builtin-extensions/pi-web-access/content-page.d.ts +24 -0
  198. package/dist/builtin-extensions/pi-web-access/content-page.d.ts.map +1 -0
  199. package/dist/builtin-extensions/pi-web-access/content-page.js +57 -0
  200. package/dist/builtin-extensions/pi-web-access/content-page.js.map +1 -0
  201. package/dist/builtin-extensions/pi-web-access/extract.d.ts.map +1 -1
  202. package/dist/builtin-extensions/pi-web-access/extract.js +7 -2
  203. package/dist/builtin-extensions/pi-web-access/extract.js.map +1 -1
  204. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts +0 -1
  205. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts.map +1 -1
  206. package/dist/builtin-extensions/pi-web-access/github-extract.js +147 -36
  207. package/dist/builtin-extensions/pi-web-access/github-extract.js.map +1 -1
  208. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  209. package/dist/builtin-extensions/pi-web-access/index.js +48 -73
  210. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  211. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts +12 -4
  212. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts.map +1 -1
  213. package/dist/builtin-extensions/pi-web-access/session-cleanup.js +35 -12
  214. package/dist/builtin-extensions/pi-web-access/session-cleanup.js.map +1 -1
  215. package/dist/builtin-extensions/pi-web-access/storage.d.ts +9 -6
  216. package/dist/builtin-extensions/pi-web-access/storage.d.ts.map +1 -1
  217. package/dist/builtin-extensions/pi-web-access/storage.js +36 -24
  218. package/dist/builtin-extensions/pi-web-access/storage.js.map +1 -1
  219. package/dist/builtin-extensions/simple-pi-memory.d.ts +1 -1
  220. package/dist/builtin-extensions/simple-pi-memory.d.ts.map +1 -1
  221. package/dist/builtin-extensions/simple-pi-memory.js +1 -1
  222. package/dist/builtin-extensions/simple-pi-memory.js.map +1 -1
  223. package/dist/cli/install-cli.d.ts.map +1 -1
  224. package/dist/cli/install-cli.js +38 -30
  225. package/dist/cli/install-cli.js.map +1 -1
  226. package/dist/core/agent-session-runtime.d.ts +13 -0
  227. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  228. package/dist/core/agent-session-runtime.js +75 -11
  229. package/dist/core/agent-session-runtime.js.map +1 -1
  230. package/dist/core/agent-session-services.d.ts +1 -0
  231. package/dist/core/agent-session-services.d.ts.map +1 -1
  232. package/dist/core/agent-session-services.js +1 -0
  233. package/dist/core/agent-session-services.js.map +1 -1
  234. package/dist/core/agent-session.d.ts +40 -6
  235. package/dist/core/agent-session.d.ts.map +1 -1
  236. package/dist/core/agent-session.js +309 -76
  237. package/dist/core/agent-session.js.map +1 -1
  238. package/dist/core/browser/runtime.d.ts +2 -0
  239. package/dist/core/browser/runtime.d.ts.map +1 -1
  240. package/dist/core/browser/runtime.js +80 -45
  241. package/dist/core/browser/runtime.js.map +1 -1
  242. package/dist/core/browser/setup.d.ts.map +1 -1
  243. package/dist/core/browser/setup.js +12 -1
  244. package/dist/core/browser/setup.js.map +1 -1
  245. package/dist/core/computer-use/adapter.d.ts +28 -0
  246. package/dist/core/computer-use/adapter.d.ts.map +1 -0
  247. package/dist/core/computer-use/adapter.js +138 -0
  248. package/dist/core/computer-use/adapter.js.map +1 -0
  249. package/dist/core/computer-use/image.d.ts +27 -0
  250. package/dist/core/computer-use/image.d.ts.map +1 -0
  251. package/dist/core/computer-use/image.js +84 -0
  252. package/dist/core/computer-use/image.js.map +1 -0
  253. package/dist/core/computer-use/lease.d.ts +18 -0
  254. package/dist/core/computer-use/lease.d.ts.map +1 -0
  255. package/dist/core/computer-use/lease.js +129 -0
  256. package/dist/core/computer-use/lease.js.map +1 -0
  257. package/dist/core/computer-use/macos-runtime.d.ts +14 -0
  258. package/dist/core/computer-use/macos-runtime.d.ts.map +1 -0
  259. package/dist/core/computer-use/macos-runtime.js +148 -0
  260. package/dist/core/computer-use/macos-runtime.js.map +1 -0
  261. package/dist/core/computer-use/policy.d.ts +19 -0
  262. package/dist/core/computer-use/policy.d.ts.map +1 -0
  263. package/dist/core/computer-use/policy.js +67 -0
  264. package/dist/core/computer-use/policy.js.map +1 -0
  265. package/dist/core/computer-use/release.generated.d.ts +31 -0
  266. package/dist/core/computer-use/release.generated.d.ts.map +1 -0
  267. package/dist/core/computer-use/release.generated.js +36 -0
  268. package/dist/core/computer-use/release.generated.js.map +1 -0
  269. package/dist/core/computer-use/runtime.d.ts +13 -0
  270. package/dist/core/computer-use/runtime.d.ts.map +1 -0
  271. package/dist/core/computer-use/runtime.js +158 -0
  272. package/dist/core/computer-use/runtime.js.map +1 -0
  273. package/dist/core/computer-use/schemas.d.ts +100 -0
  274. package/dist/core/computer-use/schemas.d.ts.map +1 -0
  275. package/dist/core/computer-use/schemas.js +96 -0
  276. package/dist/core/computer-use/schemas.js.map +1 -0
  277. package/dist/core/computer-use/windows-desktop.d.ts +3 -0
  278. package/dist/core/computer-use/windows-desktop.d.ts.map +1 -0
  279. package/dist/core/computer-use/windows-desktop.js +48 -0
  280. package/dist/core/computer-use/windows-desktop.js.map +1 -0
  281. package/dist/core/computer-use/workflow.d.ts +38 -0
  282. package/dist/core/computer-use/workflow.d.ts.map +1 -0
  283. package/dist/core/computer-use/workflow.js +900 -0
  284. package/dist/core/computer-use/workflow.js.map +1 -0
  285. package/dist/core/cron/jobs.d.ts +26 -8
  286. package/dist/core/cron/jobs.d.ts.map +1 -1
  287. package/dist/core/cron/jobs.js +357 -232
  288. package/dist/core/cron/jobs.js.map +1 -1
  289. package/dist/core/cron/origin-context.d.ts +1 -0
  290. package/dist/core/cron/origin-context.d.ts.map +1 -1
  291. package/dist/core/cron/origin-context.js.map +1 -1
  292. package/dist/core/cron/scheduler.d.ts +22 -17
  293. package/dist/core/cron/scheduler.d.ts.map +1 -1
  294. package/dist/core/cron/scheduler.js +153 -73
  295. package/dist/core/cron/scheduler.js.map +1 -1
  296. package/dist/core/extensions/index.d.ts +1 -1
  297. package/dist/core/extensions/index.d.ts.map +1 -1
  298. package/dist/core/extensions/index.js.map +1 -1
  299. package/dist/core/extensions/loader.d.ts.map +1 -1
  300. package/dist/core/extensions/loader.js +4 -0
  301. package/dist/core/extensions/loader.js.map +1 -1
  302. package/dist/core/extensions/runner.d.ts +1 -0
  303. package/dist/core/extensions/runner.d.ts.map +1 -1
  304. package/dist/core/extensions/runner.js +8 -0
  305. package/dist/core/extensions/runner.js.map +1 -1
  306. package/dist/core/extensions/types.d.ts +8 -0
  307. package/dist/core/extensions/types.d.ts.map +1 -1
  308. package/dist/core/extensions/types.js.map +1 -1
  309. package/dist/core/footer-data-provider.d.ts +4 -0
  310. package/dist/core/footer-data-provider.d.ts.map +1 -1
  311. package/dist/core/footer-data-provider.js +22 -1
  312. package/dist/core/footer-data-provider.js.map +1 -1
  313. package/dist/core/large-subagent-launch.d.ts +1 -1
  314. package/dist/core/large-subagent-launch.d.ts.map +1 -1
  315. package/dist/core/large-subagent-launch.js +7 -7
  316. package/dist/core/large-subagent-launch.js.map +1 -1
  317. package/dist/core/model-registry.d.ts +2 -0
  318. package/dist/core/model-registry.d.ts.map +1 -1
  319. package/dist/core/model-registry.js +5 -0
  320. package/dist/core/model-registry.js.map +1 -1
  321. package/dist/core/model-runtime.d.ts +4 -1
  322. package/dist/core/model-runtime.d.ts.map +1 -1
  323. package/dist/core/model-runtime.js +40 -4
  324. package/dist/core/model-runtime.js.map +1 -1
  325. package/dist/core/package-manager.d.ts.map +1 -1
  326. package/dist/core/package-manager.js.map +1 -1
  327. package/dist/core/permissions.d.ts +4 -4
  328. package/dist/core/permissions.d.ts.map +1 -1
  329. package/dist/core/permissions.js +25 -38
  330. package/dist/core/permissions.js.map +1 -1
  331. package/dist/core/plan-mode.d.ts +5 -13
  332. package/dist/core/plan-mode.d.ts.map +1 -1
  333. package/dist/core/plan-mode.js +135 -116
  334. package/dist/core/plan-mode.js.map +1 -1
  335. package/dist/core/project-trust.d.ts.map +1 -1
  336. package/dist/core/project-trust.js +1 -1
  337. package/dist/core/project-trust.js.map +1 -1
  338. package/dist/core/prompt-resource-bridge.d.ts +12 -0
  339. package/dist/core/prompt-resource-bridge.d.ts.map +1 -0
  340. package/dist/core/prompt-resource-bridge.js +9 -0
  341. package/dist/core/prompt-resource-bridge.js.map +1 -0
  342. package/dist/core/protected-targets.d.ts +6 -0
  343. package/dist/core/protected-targets.d.ts.map +1 -0
  344. package/dist/core/protected-targets.js +45 -0
  345. package/dist/core/protected-targets.js.map +1 -0
  346. package/dist/core/resource-loader.d.ts.map +1 -1
  347. package/dist/core/resource-loader.js +7 -0
  348. package/dist/core/resource-loader.js.map +1 -1
  349. package/dist/core/rollback.d.ts +19 -3
  350. package/dist/core/rollback.d.ts.map +1 -1
  351. package/dist/core/rollback.js +172 -56
  352. package/dist/core/rollback.js.map +1 -1
  353. package/dist/core/runtime-credentials.d.ts +3 -0
  354. package/dist/core/runtime-credentials.d.ts.map +1 -1
  355. package/dist/core/runtime-credentials.js +14 -1
  356. package/dist/core/runtime-credentials.js.map +1 -1
  357. package/dist/core/sdk.d.ts +3 -0
  358. package/dist/core/sdk.d.ts.map +1 -1
  359. package/dist/core/sdk.js +1 -0
  360. package/dist/core/sdk.js.map +1 -1
  361. package/dist/core/session-manager.d.ts +6 -0
  362. package/dist/core/session-manager.d.ts.map +1 -1
  363. package/dist/core/session-manager.js +95 -32
  364. package/dist/core/session-manager.js.map +1 -1
  365. package/dist/core/session-ownership.d.ts.map +1 -1
  366. package/dist/core/session-ownership.js +8 -3
  367. package/dist/core/session-ownership.js.map +1 -1
  368. package/dist/core/session-retention.d.ts.map +1 -1
  369. package/dist/core/session-retention.js +18 -7
  370. package/dist/core/session-retention.js.map +1 -1
  371. package/dist/core/session-startup-settings.d.ts +10 -0
  372. package/dist/core/session-startup-settings.d.ts.map +1 -0
  373. package/dist/core/session-startup-settings.js +70 -0
  374. package/dist/core/session-startup-settings.js.map +1 -0
  375. package/dist/core/settings-manager.d.ts +6 -0
  376. package/dist/core/settings-manager.d.ts.map +1 -1
  377. package/dist/core/settings-manager.js +19 -0
  378. package/dist/core/settings-manager.js.map +1 -1
  379. package/dist/core/subagent-event-transport.d.ts +3 -0
  380. package/dist/core/subagent-event-transport.d.ts.map +1 -0
  381. package/dist/core/subagent-event-transport.js +61 -0
  382. package/dist/core/subagent-event-transport.js.map +1 -0
  383. package/dist/core/subscriptions.d.ts +16 -7
  384. package/dist/core/subscriptions.d.ts.map +1 -1
  385. package/dist/core/subscriptions.js +96 -55
  386. package/dist/core/subscriptions.js.map +1 -1
  387. package/dist/core/trust-manager.d.ts +2 -1
  388. package/dist/core/trust-manager.d.ts.map +1 -1
  389. package/dist/core/trust-manager.js +6 -1
  390. package/dist/core/trust-manager.js.map +1 -1
  391. package/dist/core/update-check.d.ts.map +1 -1
  392. package/dist/core/update-check.js.map +1 -1
  393. package/dist/core/usage-adapters/kimi-coding.d.ts +2 -2
  394. package/dist/core/usage-adapters/kimi-coding.d.ts.map +1 -1
  395. package/dist/core/usage-adapters/kimi-coding.js +2 -2
  396. package/dist/core/usage-adapters/kimi-coding.js.map +1 -1
  397. package/dist/core/usage-adapters/openai-codex.d.ts +3 -2
  398. package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -1
  399. package/dist/core/usage-adapters/openai-codex.js +3 -3
  400. package/dist/core/usage-adapters/openai-codex.js.map +1 -1
  401. package/dist/core/usage-adapters/xai.d.ts +2 -2
  402. package/dist/core/usage-adapters/xai.d.ts.map +1 -1
  403. package/dist/core/usage-adapters/xai.js +3 -3
  404. package/dist/core/usage-adapters/xai.js.map +1 -1
  405. package/dist/core/usage-adapters/zai.d.ts +2 -2
  406. package/dist/core/usage-adapters/zai.d.ts.map +1 -1
  407. package/dist/core/usage-adapters/zai.js +2 -2
  408. package/dist/core/usage-adapters/zai.js.map +1 -1
  409. package/dist/core/usage-service.d.ts +9 -2
  410. package/dist/core/usage-service.d.ts.map +1 -1
  411. package/dist/core/usage-service.js +95 -50
  412. package/dist/core/usage-service.js.map +1 -1
  413. package/dist/gateway/adapters/discord.d.ts.map +1 -1
  414. package/dist/gateway/adapters/discord.js +2 -2
  415. package/dist/gateway/adapters/discord.js.map +1 -1
  416. package/dist/gateway/agent-bridge.d.ts +9 -1
  417. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  418. package/dist/gateway/agent-bridge.js +91 -37
  419. package/dist/gateway/agent-bridge.js.map +1 -1
  420. package/dist/gateway/approval.d.ts.map +1 -1
  421. package/dist/gateway/approval.js +3 -3
  422. package/dist/gateway/approval.js.map +1 -1
  423. package/dist/gateway/authz.d.ts +4 -4
  424. package/dist/gateway/authz.d.ts.map +1 -1
  425. package/dist/gateway/authz.js +8 -12
  426. package/dist/gateway/authz.js.map +1 -1
  427. package/dist/gateway/buttons.d.ts +8 -1
  428. package/dist/gateway/buttons.d.ts.map +1 -1
  429. package/dist/gateway/buttons.js +76 -18
  430. package/dist/gateway/buttons.js.map +1 -1
  431. package/dist/gateway/commands.d.ts +1 -0
  432. package/dist/gateway/commands.d.ts.map +1 -1
  433. package/dist/gateway/commands.js +12 -10
  434. package/dist/gateway/commands.js.map +1 -1
  435. package/dist/gateway/cron.d.ts +12 -11
  436. package/dist/gateway/cron.d.ts.map +1 -1
  437. package/dist/gateway/cron.js +85 -62
  438. package/dist/gateway/cron.js.map +1 -1
  439. package/dist/gateway/index.d.ts.map +1 -1
  440. package/dist/gateway/index.js +5 -4
  441. package/dist/gateway/index.js.map +1 -1
  442. package/dist/gateway/mobile-commands.d.ts +1 -0
  443. package/dist/gateway/mobile-commands.d.ts.map +1 -1
  444. package/dist/gateway/mobile-commands.js +64 -22
  445. package/dist/gateway/mobile-commands.js.map +1 -1
  446. package/dist/gateway/presenter.d.ts +12 -2
  447. package/dist/gateway/presenter.d.ts.map +1 -1
  448. package/dist/gateway/presenter.js +74 -39
  449. package/dist/gateway/presenter.js.map +1 -1
  450. package/dist/gateway/router.d.ts +2 -2
  451. package/dist/gateway/router.d.ts.map +1 -1
  452. package/dist/gateway/router.js +22 -9
  453. package/dist/gateway/router.js.map +1 -1
  454. package/dist/gateway/service.d.ts +2 -0
  455. package/dist/gateway/service.d.ts.map +1 -1
  456. package/dist/gateway/service.js +153 -0
  457. package/dist/gateway/service.js.map +1 -1
  458. package/dist/gateway/setup.d.ts.map +1 -1
  459. package/dist/gateway/setup.js +6 -4
  460. package/dist/gateway/setup.js.map +1 -1
  461. package/dist/main.d.ts.map +1 -1
  462. package/dist/main.js +86 -33
  463. package/dist/main.js.map +1 -1
  464. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  465. package/dist/modes/interactive/components/assistant-message.js +6 -4
  466. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  467. package/dist/modes/interactive/components/copyable-text.d.ts.map +1 -1
  468. package/dist/modes/interactive/components/copyable-text.js +3 -2
  469. package/dist/modes/interactive/components/copyable-text.js.map +1 -1
  470. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  471. package/dist/modes/interactive/components/extension-editor.js +1 -1
  472. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  473. package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
  474. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  475. package/dist/modes/interactive/components/settings-selector.js +20 -0
  476. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  477. package/dist/modes/interactive/interactive-mode.d.ts +2 -2
  478. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  479. package/dist/modes/interactive/interactive-mode.js +104 -109
  480. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  481. package/dist/modes/interactive/smooth-streaming.d.ts.map +1 -1
  482. package/dist/modes/interactive/smooth-streaming.js.map +1 -1
  483. package/dist/modes/print-mode.d.ts.map +1 -1
  484. package/dist/modes/print-mode.js +9 -1
  485. package/dist/modes/print-mode.js.map +1 -1
  486. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  487. package/dist/modes/rpc/rpc-mode.js +2 -1
  488. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  489. package/dist/node-runtime/adapter-247RTYLS.js +16 -0
  490. package/dist/node-runtime/agent-session-services-KDMSPQDY.js +53 -0
  491. package/dist/node-runtime/{brave-UWDA3I22.js → brave-2AFFAXNN.js} +1 -1
  492. package/dist/node-runtime/{builtin-extensions-ZLAX7TUH.js → builtin-extensions-OX6KELNX.js} +9 -7
  493. package/dist/node-runtime/{chunk-QH6YL7VK.js → chunk-252ZVPPF.js} +3 -3
  494. package/dist/node-runtime/{chunk-PCEW76PM.js → chunk-2OIPYKLZ.js} +6 -6
  495. package/dist/node-runtime/{chunk-XBWPBZBN.js → chunk-2SWW7KMW.js} +1 -1
  496. package/dist/node-runtime/{chunk-UQUCFAJ3.js → chunk-2VIW3IMF.js} +40 -7
  497. package/dist/node-runtime/{chunk-UOEDI7RP.js → chunk-4KNKQGHM.js} +2 -2
  498. package/dist/node-runtime/{chunk-FQMM2EZ2.js → chunk-64XTQNLA.js} +29 -7
  499. package/dist/node-runtime/{chunk-NRKGMJYU.js → chunk-6O3IW3IA.js} +2 -2
  500. package/dist/node-runtime/{chunk-5ZQXRPMC.js → chunk-6ZZHGUSA.js} +2 -2
  501. package/dist/node-runtime/chunk-A2WO6WIN.js +1197 -0
  502. package/dist/node-runtime/{chunk-ZXSGTGJ6.js → chunk-APVM5NEU.js} +169 -148
  503. package/dist/node-runtime/{chunk-RC7DMV45.js → chunk-AYHH7YSD.js} +205 -144
  504. package/dist/node-runtime/{chunk-LWYIVUGV.js → chunk-B2IBAXNX.js} +48 -31
  505. package/dist/node-runtime/{chunk-M3LZLQW2.js → chunk-BDRGN3L2.js} +1 -0
  506. package/dist/node-runtime/{chunk-GJ2RDBRL.js → chunk-BYC6RKCN.js} +4 -2
  507. package/dist/node-runtime/{chunk-KWIYUUZK.js → chunk-C3P6Q3B2.js} +469 -283
  508. package/dist/node-runtime/{chunk-YCUZEGJG.js → chunk-DQSCFU7R.js} +17 -8
  509. package/dist/node-runtime/chunk-EBLAZVSA.js +4170 -0
  510. package/dist/node-runtime/{chunk-2KIPT4HJ.js → chunk-EPR2F3GU.js} +68 -20
  511. package/dist/node-runtime/{chunk-CSFI6YXL.js → chunk-ES6PBSIE.js} +1 -1
  512. package/dist/node-runtime/{chunk-IF24A3FH.js → chunk-EVM653DD.js} +4 -4
  513. package/dist/node-runtime/{chunk-HTFRRDSF.js → chunk-F2SMQ6ES.js} +3 -2
  514. package/dist/node-runtime/chunk-F2V2F4ZG.js +114 -0
  515. package/dist/node-runtime/chunk-FE3WZI7F.js +290 -0
  516. package/dist/node-runtime/{chunk-GYIXXQAO.js → chunk-FIRA54AC.js} +2 -5
  517. package/dist/node-runtime/{chunk-6VYZ5UFP.js → chunk-FLGEEH27.js} +1 -1
  518. package/dist/node-runtime/{chunk-5EFIU3OM.js → chunk-FTKEZL27.js} +1 -1
  519. package/dist/node-runtime/chunk-FY4A63RK.js +73 -0
  520. package/dist/node-runtime/chunk-FYIFPFXE.js +98 -0
  521. package/dist/node-runtime/{chunk-HMBGROQK.js → chunk-GLDXBBL6.js} +3 -3
  522. package/dist/node-runtime/{chunk-KWA4OC2J.js → chunk-H6YBCWKG.js} +1 -1
  523. package/dist/node-runtime/{chunk-2MI5OPMN.js → chunk-HNNHHJAB.js} +68 -50
  524. package/dist/node-runtime/{chunk-6XL67VVY.js → chunk-HUD2RFJW.js} +17 -2
  525. package/dist/node-runtime/{chunk-I54LGHWM.js → chunk-I2H5QMWW.js} +3 -3
  526. package/dist/node-runtime/chunk-IAZSK7KK.js +108 -0
  527. package/dist/node-runtime/{chunk-2HHLJWGD.js → chunk-IHHTWSXN.js} +9 -9
  528. package/dist/node-runtime/{chunk-DAPBPCBP.js → chunk-IPP5BIV5.js} +25 -3
  529. package/dist/node-runtime/{chunk-QFWG2RVL.js → chunk-IXG6F4NT.js} +11 -0
  530. package/dist/node-runtime/{chunk-RDDAZOMU.js → chunk-JL4HYQXK.js} +1 -1
  531. package/dist/node-runtime/{chunk-CDVHZOOK.js → chunk-JQYNHAKX.js} +1 -1
  532. package/dist/node-runtime/{chunk-WF7PGWRZ.js → chunk-JWEVT363.js} +37 -28
  533. package/dist/node-runtime/{chunk-2HMIRK7W.js → chunk-LHV3V67B.js} +5 -5
  534. package/dist/node-runtime/{chunk-UAEOTO52.js → chunk-MNQXDFPV.js} +6 -2
  535. package/dist/node-runtime/{chunk-IJIFHRTB.js → chunk-MQPKUHRN.js} +165 -85
  536. package/dist/node-runtime/{chunk-MPKSOJBT.js → chunk-NHATCSOI.js} +4 -7
  537. package/dist/node-runtime/{chunk-RMQZU2YU.js → chunk-NNNR3QIY.js} +1 -1
  538. package/dist/node-runtime/{chunk-RWTKOC3B.js → chunk-QBTJG3UM.js} +1 -1
  539. package/dist/node-runtime/{chunk-E4D3IGP2.js → chunk-QNVMKNNN.js} +20 -17
  540. package/dist/node-runtime/{chunk-GS42T6MX.js → chunk-QW3AAHWN.js} +1 -1
  541. package/dist/node-runtime/{chunk-7S3T6YEA.js → chunk-R4WSB2MQ.js} +5 -5
  542. package/dist/node-runtime/{chunk-B4HP6ZWM.js → chunk-RHCGYWO7.js} +1 -1
  543. package/dist/node-runtime/{chunk-3XPLBUEM.js → chunk-RLGY2QIL.js} +49 -59
  544. package/dist/node-runtime/{chunk-KKUTQQV7.js → chunk-RYRGL7P4.js} +1 -1
  545. package/dist/node-runtime/{chunk-AD6VXAO7.js → chunk-TCT6PCUR.js} +47 -115
  546. package/dist/node-runtime/chunk-U5F4IC7R.js +53 -0
  547. package/dist/node-runtime/{chunk-OCVIXVTZ.js → chunk-UBWW2PID.js} +13 -2
  548. package/dist/node-runtime/{chunk-HFVZUPFJ.js → chunk-UNUZICC4.js} +3 -3
  549. package/dist/node-runtime/{chunk-LQP3RB67.js → chunk-UYRKUKFE.js} +1 -1
  550. package/dist/node-runtime/{chunk-DSIKTUPW.js → chunk-VSUEAI7O.js} +2993 -3820
  551. package/dist/node-runtime/{chunk-NAY6UUQZ.js → chunk-WDIVLMOH.js} +1 -1
  552. package/dist/node-runtime/{chunk-E24EO34J.js → chunk-WPXUR3HE.js} +1 -1
  553. package/dist/node-runtime/{chunk-SLVOAQOY.js → chunk-WXYNALHD.js} +113 -1
  554. package/dist/node-runtime/{chunk-KJ6DWS3K.js → chunk-XEOCUEUJ.js} +121 -60
  555. package/dist/node-runtime/chunk-YD3IZAZ7.js +47 -0
  556. package/dist/node-runtime/chunk-YSB6URMT.js +41 -0
  557. package/dist/node-runtime/{chunk-VQFSUJJG.js → chunk-ZDJUR45D.js} +430 -129
  558. package/dist/node-runtime/{chunk-YDO2F2IA.js → chunk-ZEVFBFNF.js} +95 -142
  559. package/dist/node-runtime/chunk-ZIQUS5QO.js +180 -0
  560. package/dist/node-runtime/cli-runtime.js +4 -4
  561. package/dist/node-runtime/{command-6WDOYKS6.js → command-3HMSY6W2.js} +5 -5
  562. package/dist/node-runtime/{commands-NZLSOHPE.js → commands-D6A6H4TS.js} +11 -16
  563. package/dist/node-runtime/commands-OCSSEEWJ.js +37 -0
  564. package/dist/node-runtime/{config-QDD5PUE2.js → config-CU7M7BTK.js} +1 -1
  565. package/dist/node-runtime/{config-D4QUPAHX.js → config-DS7XLMEM.js} +2 -2
  566. package/dist/node-runtime/{direct-tool-executor-77GW4F5P.js → direct-tool-executor-2QJXVQD2.js} +8 -10
  567. package/dist/node-runtime/{exa-LL64QZR2.js → exa-6VBZNPGE.js} +1 -1
  568. package/dist/node-runtime/{export-html-VM4J2MNR.js → export-html-BRWF5AHI.js} +4 -4
  569. package/dist/node-runtime/{extension-input-E7BJZ35H.js → extension-input-VBBMX7YV.js} +5 -5
  570. package/dist/node-runtime/{extension-selector-WU42XDTU.js → extension-selector-T5AOG5XB.js} +5 -5
  571. package/dist/node-runtime/{extract-EQJE7FZZ.js → extract-BFX2N35A.js} +3 -3
  572. package/dist/node-runtime/{gateway-INAYBF4Q.js → gateway-6623C2U3.js} +61 -53
  573. package/dist/node-runtime/{gemini-search-35OCRFLN.js → gemini-search-C66QHDT6.js} +2 -2
  574. package/dist/node-runtime/{gemini-url-context-UQY3PHHW.js → gemini-url-context-T7DEK73R.js} +3 -3
  575. package/dist/node-runtime/{github-extract-F64RZOEA.js → github-extract-HOGE3D6F.js} +107 -38
  576. package/dist/node-runtime/{goal-NJEE5CTU.js → goal-AIHEDUYA.js} +5 -5
  577. package/dist/node-runtime/index.js +54 -48
  578. package/dist/node-runtime/{init-HS6NQXSK.js → init-JBQJIPYI.js} +3 -4
  579. package/dist/node-runtime/{install-cli-KL4UDDAD.js → install-cli-INGHIVBY.js} +30 -25
  580. package/dist/node-runtime/interactive-mode-FM5DNUSW.js +74 -0
  581. package/dist/node-runtime/{interactive-view-NGFAMHPW.js → interactive-view-K33PM4OS.js} +8 -8
  582. package/dist/node-runtime/{lsp-manager-3ASUSO4T.js → lsp-manager-S554V5HR.js} +240 -155
  583. package/dist/node-runtime/{lunr-browser-IR7TL3J7.js → lunr-browser-H4FDOR3C.js} +7 -7
  584. package/dist/node-runtime/lunr-computer-use-VDP2QNRQ.js +158 -0
  585. package/dist/node-runtime/{lunr-cron-LWIZJM2N.js → lunr-cron-LKVA5CZZ.js} +94 -79
  586. package/dist/node-runtime/main.js +42 -39
  587. package/dist/node-runtime/{mobile-commands-J7OJEKFO.js → mobile-commands-XT3NQXLD.js} +13 -12
  588. package/dist/node-runtime/{model-runtime-OO5HFLWE.js → model-runtime-MZ2JMDV4.js} +4 -4
  589. package/dist/node-runtime/{openai-search-B3MSNCQA.js → openai-search-K72LJDYN.js} +1 -1
  590. package/dist/node-runtime/{package-manager-cli-VYZM5WHN.js → package-manager-cli-CYM262SI.js} +20 -19
  591. package/dist/node-runtime/{parallel-AI2MNSCU.js → parallel-X724NCNU.js} +1 -1
  592. package/dist/node-runtime/{perplexity-QVJW3I35.js → perplexity-RDHQHVMK.js} +2 -2
  593. package/dist/node-runtime/{pi-intercom-QM53RLTS.js → pi-intercom-NHHEPBMI.js} +2 -2
  594. package/dist/node-runtime/{pi-mcp-adapter-5UKBZP44.js → pi-mcp-adapter-PP3GQJQ2.js} +98 -94
  595. package/dist/node-runtime/{pi-ollama-cloud-2F3Y2QNM.js → pi-ollama-cloud-4MNWIMFN.js} +11 -24
  596. package/dist/node-runtime/{pi-prompt-template-model-QWTCGLJU.js → pi-prompt-template-model-FTGELLS5.js} +32 -36
  597. package/dist/node-runtime/{pi-subagents-DNY7EAIG.js → pi-subagents-LT3CTO4E.js} +114 -116
  598. package/dist/node-runtime/{pi-web-access-WTGMNZ32.js → pi-web-access-Z3LP246C.js} +144 -108
  599. package/dist/node-runtime/{print-mode-XSFM26EL.js → print-mode-2XHN5SUA.js} +4 -3
  600. package/dist/node-runtime/{process-registry-4FAKZQOL.js → process-registry-Q4QWIU33.js} +3 -3
  601. package/dist/node-runtime/{proxy-modes-LGEUYD7R.js → proxy-modes-VEGC6QG5.js} +9 -13
  602. package/dist/node-runtime/rpc-entry.js +42 -39
  603. package/dist/node-runtime/{rpc-mode-O3XV4SID.js → rpc-mode-32DHJPEJ.js} +4 -4
  604. package/dist/node-runtime/{runtime-4VA6JKNF.js → runtime-EDUUGAQD.js} +56 -46
  605. package/dist/node-runtime/runtime-UGXM4NPQ.js +21 -0
  606. package/dist/node-runtime/{runtime-bridges-VRDDR73P.js → runtime-bridges-DNKMNJCF.js} +8 -7
  607. package/dist/node-runtime/{service-MDQIPQ26.js → service-IHLGFLBT.js} +6 -4
  608. package/dist/node-runtime/{session-handoff-GWARVEWT.js → session-handoff-LNSPDTKY.js} +4 -4
  609. package/dist/node-runtime/{session-manager-JB5J6XBN.js → session-manager-YIFIAVGC.js} +3 -3
  610. package/dist/node-runtime/{session-selector-GIM4DHQ2.js → session-selector-I73U3EIO.js} +7 -7
  611. package/dist/node-runtime/{settings-manager-J4SPQPDJ.js → settings-manager-P2TKGYTR.js} +6 -5
  612. package/dist/node-runtime/{setup-JBKOLJ6F.js → setup-H7CCELIL.js} +15 -1
  613. package/dist/node-runtime/{setup-CQ2NLVK5.js → setup-OLQ4GXWS.js} +22 -21
  614. package/dist/node-runtime/{src-IVPNZ2BX.js → src-6RV4PXKJ.js} +64 -36
  615. package/dist/node-runtime/{subagent-executor-KZZQGAKV.js → subagent-executor-Q5F7DBVM.js} +141 -62
  616. package/dist/node-runtime/{tavily-WEZFVFP7.js → tavily-KZBFYQB6.js} +1 -1
  617. package/dist/node-runtime/{theme-UOO5RVFN.js → theme-YLVZKKZD.js} +2 -2
  618. package/dist/node-runtime/{trust-manager-MMISNCYO.js → trust-manager-ZCU76D23.js} +2 -2
  619. package/dist/node-runtime/{update-cli-GTFJC7XK.js → update-cli-F3XXJANQ.js} +7 -6
  620. package/dist/node-runtime/{usage-service-LFB2SWYV.js → usage-service-CPAGBED5.js} +1 -1
  621. package/dist/node-runtime/{video-extract-OOZHR7SU.js → video-extract-UPKYIBW3.js} +3 -3
  622. package/dist/node-runtime/workflow-ICDI4N3J.js +767 -0
  623. package/dist/node-runtime/{youtube-extract-FNPAUNHU.js → youtube-extract-77NT7FWH.js} +4 -4
  624. package/dist/utils/clipboard-image.d.ts.map +1 -1
  625. package/dist/utils/clipboard-image.js.map +1 -1
  626. package/dist/utils/exif-orientation.d.ts.map +1 -1
  627. package/dist/utils/exif-orientation.js +25 -10
  628. package/dist/utils/exif-orientation.js.map +1 -1
  629. package/dist/utils/image-resize-core.d.ts +2 -0
  630. package/dist/utils/image-resize-core.d.ts.map +1 -1
  631. package/dist/utils/image-resize-core.js +12 -0
  632. package/dist/utils/image-resize-core.js.map +1 -1
  633. package/dist/utils/paths.d.ts +4 -0
  634. package/dist/utils/paths.d.ts.map +1 -1
  635. package/dist/utils/paths.js +33 -2
  636. package/dist/utils/paths.js.map +1 -1
  637. package/dist/utils/sanitize-terminal-text.d.ts +7 -0
  638. package/dist/utils/sanitize-terminal-text.d.ts.map +1 -0
  639. package/dist/utils/sanitize-terminal-text.js +67 -0
  640. package/dist/utils/sanitize-terminal-text.js.map +1 -0
  641. package/docs/browser.md +1 -1
  642. package/docs/computer-use.md +362 -0
  643. package/docs/custom-provider.md +3 -3
  644. package/docs/extensions.md +8 -4
  645. package/docs/features.md +22 -12
  646. package/docs/keybindings.md +1 -1
  647. package/docs/models.md +5 -5
  648. package/docs/packages.md +1 -1
  649. package/docs/providers.md +2 -2
  650. package/docs/rpc.md +7 -7
  651. package/docs/security.md +10 -5
  652. package/docs/sessions.md +2 -2
  653. package/docs/skills.md +1 -1
  654. package/docs/terminal-setup.md +7 -7
  655. package/docs/themes.md +1 -1
  656. package/docs/usage.md +1 -1
  657. package/examples/extensions/auto-commit-on-exit.ts +1 -1
  658. package/examples/extensions/bash-spawn-hook.ts +1 -1
  659. package/examples/extensions/built-in-tool-renderer.ts +1 -1
  660. package/examples/extensions/claude-rules.ts +1 -1
  661. package/examples/extensions/commands.ts +1 -1
  662. package/examples/extensions/custom-compaction.ts +1 -1
  663. package/examples/extensions/custom-provider-anthropic/index.ts +3 -3
  664. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  665. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  666. package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
  667. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  668. package/examples/extensions/doom-overlay/index.ts +1 -1
  669. package/examples/extensions/git-merge-and-resolve.ts +2 -2
  670. package/examples/extensions/gondolin/index.ts +1 -1
  671. package/examples/extensions/gondolin/package-lock.json +2 -2
  672. package/examples/extensions/gondolin/package.json +1 -1
  673. package/examples/extensions/hidden-thinking-label.ts +1 -1
  674. package/examples/extensions/inline-bash.ts +2 -2
  675. package/examples/extensions/input-transform-streaming.ts +2 -2
  676. package/examples/extensions/input-transform.ts +2 -2
  677. package/examples/extensions/interactive-shell.ts +1 -1
  678. package/examples/extensions/kimi-deferred-tools.ts +1 -1
  679. package/examples/extensions/mac-system-theme.ts +1 -1
  680. package/examples/extensions/minimal-mode.ts +1 -1
  681. package/examples/extensions/modal-editor.ts +1 -1
  682. package/examples/extensions/model-status.ts +1 -1
  683. package/examples/extensions/notify.ts +3 -3
  684. package/examples/extensions/overlay-qa-tests.ts +1 -1
  685. package/examples/extensions/overlay-test.ts +1 -1
  686. package/examples/extensions/pirate.ts +1 -1
  687. package/examples/extensions/preset.ts +3 -3
  688. package/examples/extensions/project-trust.ts +4 -4
  689. package/examples/extensions/prompt-customizer.ts +1 -1
  690. package/examples/extensions/rainbow-editor.ts +1 -1
  691. package/examples/extensions/rpc-demo.ts +1 -1
  692. package/examples/extensions/sandbox/index.ts +7 -7
  693. package/examples/extensions/sandbox/package-lock.json +2 -2
  694. package/examples/extensions/sandbox/package.json +1 -1
  695. package/examples/extensions/shutdown-command.ts +5 -5
  696. package/examples/extensions/ssh.ts +2 -2
  697. package/examples/extensions/subagent/README.md +3 -3
  698. package/examples/extensions/subagent/index.ts +2 -2
  699. package/examples/extensions/titlebar-spinner.ts +1 -1
  700. package/examples/extensions/tool-override.ts +1 -1
  701. package/examples/extensions/tools.ts +1 -1
  702. package/examples/extensions/with-deps/package-lock.json +2 -2
  703. package/examples/extensions/with-deps/package.json +1 -1
  704. package/examples/extensions/working-indicator.ts +1 -1
  705. package/examples/extensions/working-message-test.ts +1 -1
  706. package/examples/sdk/01-minimal.ts +1 -1
  707. package/examples/sdk/03-custom-prompt.ts +1 -1
  708. package/examples/sdk/04-skills.ts +1 -1
  709. package/examples/sdk/06-extensions.ts +2 -2
  710. package/examples/sdk/08-prompt-templates.ts +1 -1
  711. package/install-lock/package-lock.json +3841 -0
  712. package/install-lock/package.json +18 -0
  713. package/native/computer-use/LICENSE.md +21 -0
  714. package/npm-shrinkwrap.json +3858 -0
  715. package/package.json +15 -9
  716. package/dist/modes/interactive/components/exit-card.d.ts +0 -22
  717. package/dist/modes/interactive/components/exit-card.d.ts.map +0 -1
  718. package/dist/modes/interactive/components/exit-card.js +0 -69
  719. package/dist/modes/interactive/components/exit-card.js.map +0 -1
  720. package/dist/node-runtime/agent-session-services-YXXFCP5J.js +0 -49
  721. package/dist/node-runtime/chunk-4HXHDDCF.js +0 -16
  722. package/dist/node-runtime/chunk-4TLO4PO2.js +0 -3427
  723. package/dist/node-runtime/chunk-AUXVGBO4.js +0 -19
  724. package/dist/node-runtime/chunk-OVX6X377.js +0 -50
  725. package/dist/node-runtime/chunk-QTU6AKNJ.js +0 -773
  726. package/dist/node-runtime/chunk-TORR5XBV.js +0 -356
  727. package/dist/node-runtime/commands-QC6VUZJQ.js +0 -36
  728. package/dist/node-runtime/interactive-mode-Z5M7WYYZ.js +0 -72
  729. package/dist/node-runtime/mcp-auth-flow-QIXHW6QN.js +0 -32
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/commands.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext } from \"@ashx-j/lunr\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { McpAuthResult, McpConfig, ServerEntry, McpPanelCallbacks, McpPanelResult, ImportKind } from \"./types.ts\";\nimport {\n ensureCompatibilityImports,\n getMcpDiscoverySummary,\n getServerProvenance,\n previewCompatibilityImports,\n previewSharedServerEntry,\n previewStarterProjectConfig,\n writeDirectToolsConfig,\n writeSharedServerEntry,\n writeStarterProjectConfig,\n} from \"./config.ts\";\nimport { lazyConnect, updateMetadataCache, updateStatusBar, getFailureAgeSeconds } from \"./init.ts\";\nimport { loadMetadataCache } from \"./metadata-cache.ts\";\nimport { buildToolMetadata } from \"./tool-metadata.ts\";\nimport { supportsOAuth, authenticate, removeAuth } from \"./mcp-auth-flow.ts\";\nimport { getAuthForUrl } from \"./mcp-auth.ts\";\nimport { loadOnboardingState, markSetupCompleted as persistSetupCompleted, markSharedConfigHintShown } from \"./onboarding-state.ts\";\nimport { openPath } from \"./utils.ts\";\n\nexport async function showStatus(state: McpExtensionState, ctx: ExtensionContext): Promise<void> {\n if (!ctx.hasUI) return;\n\n const lines: string[] = [\"MCP Server Status:\", \"\"];\n\n for (const name of Object.keys(state.config.mcpServers)) {\n const connection = state.manager.getConnection(name);\n const metadata = state.toolMetadata.get(name);\n const toolCount = metadata?.length ?? 0;\n const failedAgo = getFailureAgeSeconds(state, name);\n let status = \"not connected\";\n let statusIcon = \"○\";\n let failed = false;\n\n if (connection?.status === \"connected\") {\n status = \"connected\";\n statusIcon = \"✓\";\n } else if (connection?.status === \"needs-auth\") {\n status = \"needs auth\";\n statusIcon = \"⚠\";\n } else if (failedAgo !== null) {\n status = `failed ${failedAgo}s ago`;\n statusIcon = \"✗\";\n failed = true;\n } else if (metadata !== undefined) {\n status = \"cached\";\n }\n\n const toolSuffix = failed ? \"\" : ` (${toolCount} tools${status === \"cached\" ? \", cached\" : \"\"})`;\n lines.push(`${statusIcon} ${name}: ${status}${toolSuffix}`);\n }\n\n if (Object.keys(state.config.mcpServers).length === 0) {\n lines.push(\"No MCP servers configured\");\n lines.push(\"Run /mcp setup to adopt imports or scaffold a starter .mcp.json\");\n }\n\n ctx.ui.notify(lines.join(\"\\n\"), \"info\");\n}\n\nexport async function showTools(state: McpExtensionState, ctx: ExtensionContext): Promise<void> {\n if (!ctx.hasUI) return;\n\n const allTools = [...state.toolMetadata.values()].flat().map(m => m.name);\n\n if (allTools.length === 0) {\n ctx.ui.notify(\"No MCP tools available\", \"info\");\n return;\n }\n\n const lines = [\n \"MCP Tools:\",\n \"\",\n ...allTools.map(t => ` ${t}`),\n \"\",\n `Total: ${allTools.length} tools`,\n ];\n\n ctx.ui.notify(lines.join(\"\\n\"), \"info\");\n}\n\nexport async function reconnectServers(\n state: McpExtensionState,\n ctx: ExtensionContext,\n targetServer?: string\n): Promise<void> {\n if (targetServer && !state.config.mcpServers[targetServer]) {\n if (ctx.hasUI) {\n ctx.ui.notify(`Server \"${targetServer}\" not found in config`, \"error\");\n }\n return;\n }\n\n const entries = targetServer\n ? [[targetServer, state.config.mcpServers[targetServer]] as [string, ServerEntry]]\n : Object.entries(state.config.mcpServers);\n\n for (const [name, definition] of entries) {\n try {\n await state.manager.close(name);\n\n const connection = await state.manager.connect(name, definition);\n if (connection.status === \"needs-auth\") {\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: ${name} requires OAuth. Run /mcp-auth ${name} first.`, \"warning\");\n }\n continue;\n }\n const prefix = state.config.settings?.toolPrefix ?? \"server\";\n\n const { metadata, failedTools } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n state.toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n state.failureTracker.delete(name);\n\n if (ctx.hasUI) {\n ctx.ui.notify(\n `MCP: Reconnected to ${name} (${connection.tools.length} tools, ${connection.resources.length} resources)`,\n \"info\"\n );\n if (failedTools.length > 0) {\n ctx.ui.notify(`MCP: ${name} - ${failedTools.length} tools skipped`, \"warning\");\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n state.failureTracker.set(name, Date.now());\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: Failed to reconnect to ${name}: ${message}`, \"error\");\n }\n }\n }\n\n updateStatusBar(state);\n}\n\nexport async function authenticateServer(\n serverName: string,\n config: McpConfig,\n ctx: ExtensionContext\n): Promise<McpAuthResult> {\n if (!ctx.hasUI) return { ok: false, message: \"OAuth authentication requires an interactive session.\" };\n\n const definition = config.mcpServers[serverName];\n if (!definition) {\n const message = `Server \"${serverName}\" not found in config`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n if (!supportsOAuth(definition)) {\n const message = `Server \"${serverName}\" does not use OAuth authentication. Set \"auth\": \"oauth\" or omit auth for auto-detection.`;\n ctx.ui.notify(\n `Server \"${serverName}\" does not use OAuth authentication.\\n` +\n `Set \"auth\": \"oauth\" or omit auth for auto-detection.`,\n \"error\"\n );\n return { ok: false, message };\n }\n\n if (!definition.url) {\n const message = `Server \"${serverName}\" has no URL configured (OAuth requires HTTP transport)`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n try {\n ctx.ui.setStatus(\"mcp-auth\", `Authenticating ${serverName}...`);\n const status = await authenticate(serverName, definition.url, definition, {\n onAuthorizationUrl: (authorizationUrl) => {\n ctx.ui.notify(\n `Open this URL to authenticate ${serverName}:\\n\\n${authorizationUrl}\\n\\n` +\n \"After approving, return to Pi; the local callback will complete automatically.\",\n \"info\"\n );\n },\n });\n\n if (status === \"authenticated\") {\n const message = `OAuth authentication successful for \"${serverName}\"! Run /mcp reconnect ${serverName} to connect with the new token.`;\n ctx.ui.notify(\n `OAuth authentication successful for \"${serverName}\"!\\n` +\n `Run /mcp reconnect ${serverName} to connect with the new token.`,\n \"info\"\n );\n return { ok: true, message };\n }\n\n const message = `OAuth authentication failed for \"${serverName}\".`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n ctx.ui.notify(`Failed to authenticate \"${serverName}\": ${message}`, \"error\");\n return { ok: false, message };\n } finally {\n ctx.ui.setStatus(\"mcp-auth\", undefined);\n }\n}\n\nexport async function logoutServer(\n serverName: string,\n state: McpExtensionState,\n ctx: ExtensionContext\n): Promise<{ ok: boolean; message: string }> {\n const definition = state.config.mcpServers[serverName];\n if (!definition) {\n const message = `Server \"${serverName}\" not found in config`;\n if (ctx.hasUI) ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n await removeAuth(serverName);\n await state.manager.close(serverName);\n updateStatusBar(state);\n\n const message = `OAuth credentials cleared for \"${serverName}\". Run /mcp-auth ${serverName} to authenticate again.`;\n if (ctx.hasUI) ctx.ui.notify(message, \"info\");\n return { ok: true, message };\n}\n\nexport interface PanelFlowResult {\n configChanged: boolean;\n}\n\nfunction buildSharedConfigNoticeLines(configOverridePath: string | undefined, cwd: string): { lines: string[]; fingerprint: string | null } {\n const discovery = getMcpDiscoverySummary(configOverridePath, cwd);\n const onboardingState = loadOnboardingState();\n if (!discovery.hasSharedServers || onboardingState.sharedConfigHintShown) {\n return { lines: [], fingerprint: null };\n }\n\n const sharedSources = discovery.sources.filter((source) => source.kind === \"shared\" && source.serverCount > 0);\n const sourceList = sharedSources.map((source) => source.path).join(\", \");\n return {\n lines: [\n `Using standard MCP config from ${sourceList}.`,\n \"Pi only writes compatibility imports and adapter-specific overrides into Pi-owned files when needed.\",\n ],\n fingerprint: discovery.fingerprint,\n };\n}\n\nexport async function openMcpSetup(\n _state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n mode: \"empty\" | \"setup\" = \"setup\",\n): Promise<PanelFlowResult> {\n if (!ctx.hasUI) return { configChanged: false };\n\n const discovery = getMcpDiscoverySummary(configOverridePath, ctx.cwd);\n const onboardingState = loadOnboardingState();\n const { createMcpSetupPanel } = await import(\"./mcp-setup-panel.ts\");\n let configChanged = false;\n\n const callbacks = {\n previewImports: (imports: ImportKind[]) => previewCompatibilityImports(imports, configOverridePath),\n previewStarterProject: () => previewStarterProjectConfig(ctx.cwd),\n previewRepoPrompt: () => {\n const repoPrompt = getMcpDiscoverySummary(configOverridePath, ctx.cwd).repoPrompt;\n if (!repoPrompt.entry || !repoPrompt.targetPath || !repoPrompt.serverName) return null;\n return previewSharedServerEntry(repoPrompt.targetPath, repoPrompt.serverName, repoPrompt.entry);\n },\n adoptImports: async (imports: ImportKind[]) => {\n const result = ensureCompatibilityImports(imports, configOverridePath);\n if (result.added.length > 0) configChanged = true;\n return result;\n },\n scaffoldProjectConfig: async () => {\n const path = writeStarterProjectConfig(ctx.cwd);\n configChanged = true;\n return { path };\n },\n addRepoPrompt: async () => {\n const repoPrompt = getMcpDiscoverySummary(configOverridePath, ctx.cwd).repoPrompt;\n if (!repoPrompt.entry || !repoPrompt.targetPath || !repoPrompt.serverName) {\n throw new Error(\"RepoPrompt is not available to add from this setup screen.\");\n }\n const path = writeSharedServerEntry(repoPrompt.targetPath, repoPrompt.serverName, repoPrompt.entry);\n configChanged = true;\n return { path, serverName: repoPrompt.serverName };\n },\n openPath: async (targetPath: string) => {\n await openPath(pi, targetPath);\n },\n markSetupCompleted: () => {\n persistSetupCompleted(discovery.fingerprint);\n },\n };\n\n return new Promise<PanelFlowResult>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpSetupPanel(discovery, callbacks, { mode, onboardingState, keybindings }, tui, () => {\n done(undefined);\n resolve({ configChanged });\n });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 92 } },\n );\n });\n}\n\nfunction buildMcpPanelCallbacks(\n state: McpExtensionState,\n config: McpConfig,\n ctx: ExtensionContext,\n): McpPanelCallbacks {\n return {\n reconnect: (serverName: string) => lazyConnect(state, serverName),\n canAuthenticate: (serverName: string) => {\n const definition = config.mcpServers[serverName];\n return definition ? supportsOAuth(definition) : false;\n },\n authenticate: (serverName: string) => authenticateServer(serverName, config, ctx),\n getConnectionStatus: (serverName: string) => {\n const definition = config.mcpServers[serverName];\n const connection = state.manager.getConnection(serverName);\n if (connection?.status === \"needs-auth\") {\n return \"needs-auth\";\n }\n if (\n definition?.auth === \"oauth\"\n && definition.url\n && definition.oauth !== false\n && definition.oauth?.grantType !== \"client_credentials\"\n && !getAuthForUrl(serverName, definition.url)?.tokens\n ) {\n return \"needs-auth\";\n }\n if (connection?.status === \"connected\") return \"connected\";\n if (getFailureAgeSeconds(state, serverName) !== null) return \"failed\";\n return \"idle\";\n },\n refreshCacheAfterReconnect: (serverName: string) => {\n const freshCache = loadMetadataCache();\n return freshCache?.servers?.[serverName] ?? null;\n },\n };\n}\n\nexport async function openMcpPanel(\n state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n): Promise<PanelFlowResult> {\n if (Object.keys(state.config.mcpServers).length === 0) {\n return openMcpSetup(state, pi, ctx, configOverridePath, \"empty\");\n }\n\n const config = state.config;\n const cache = loadMetadataCache();\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined ?? configOverridePath;\n const provenanceMap = getServerProvenance(configPath, ctx.cwd);\n const { lines: noticeLines, fingerprint } = buildSharedConfigNoticeLines(configPath, ctx.cwd);\n\n const callbacks = buildMcpPanelCallbacks(state, config, ctx);\n\n const { createMcpPanel } = await import(\"./mcp-panel.ts\");\n let configChanged = false;\n\n await new Promise<void>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpPanel(config, cache, provenanceMap, callbacks, tui, (result: McpPanelResult) => {\n if (!result.cancelled && result.changes.size > 0) {\n writeDirectToolsConfig(result.changes, provenanceMap, config);\n configChanged = true;\n ctx.ui.notify(\"Direct tools updated. Pi will reload after this panel closes.\", \"info\");\n }\n done(undefined);\n resolve();\n }, { noticeLines, keybindings });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 82 } },\n );\n });\n\n if (noticeLines.length > 0 && fingerprint) {\n markSharedConfigHintShown(fingerprint);\n }\n\n return { configChanged };\n}\n\nexport async function openMcpAuthPanel(\n state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n): Promise<PanelFlowResult> {\n if (!ctx.hasUI) return { configChanged: false };\n\n const config = state.config;\n const oauthServers = Object.entries(config.mcpServers).filter(([, definition]) => supportsOAuth(definition));\n if (oauthServers.length === 0) {\n ctx.ui.notify(\"No OAuth-capable MCP servers are configured.\", \"warning\");\n return { configChanged: false };\n }\n\n const cache = loadMetadataCache();\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined ?? configOverridePath;\n const provenanceMap = getServerProvenance(configPath, ctx.cwd);\n const callbacks = buildMcpPanelCallbacks(state, config, ctx);\n const { createMcpPanel } = await import(\"./mcp-panel.ts\");\n\n await new Promise<void>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpPanel(config, cache, provenanceMap, callbacks, tui, () => {\n done(undefined);\n resolve();\n }, {\n authOnly: true,\n keybindings,\n noticeLines: [\"Select an OAuth MCP server and press Enter or ctrl+a to authenticate.\"],\n });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 82 } },\n );\n });\n\n return { configChanged: false };\n}\n"]}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/commands.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext } from \"@ashx-j/lunr\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { McpAuthResult, McpConfig, ServerEntry, McpPanelCallbacks, McpPanelResult, ImportKind } from \"./types.ts\";\nimport {\n ensureCompatibilityImports,\n getMcpDiscoverySummary,\n getServerProvenance,\n previewCompatibilityImports,\n previewSharedServerEntry,\n previewStarterProjectConfig,\n writeDirectToolsConfig,\n writeSharedServerEntry,\n writeStarterProjectConfig,\n} from \"./config.ts\";\nimport { lazyConnect, updateMetadataCache, updateStatusBar, getFailureAgeSeconds } from \"./init.ts\";\nimport { loadMetadataCache } from \"./metadata-cache.ts\";\nimport { buildToolMetadata } from \"./tool-metadata.ts\";\nimport { supportsOAuth, type McpAuthFlow } from \"./mcp-auth-flow.ts\";\nimport { getAuthForUrl } from \"./mcp-auth.ts\";\nimport { loadOnboardingState, markSetupCompleted as persistSetupCompleted, markSharedConfigHintShown } from \"./onboarding-state.ts\";\nimport { openPath } from \"./utils.ts\";\n\nexport async function showStatus(state: McpExtensionState, ctx: ExtensionContext): Promise<void> {\n if (!ctx.hasUI) return;\n\n const lines: string[] = [\"MCP Server Status:\", \"\"];\n\n for (const name of Object.keys(state.config.mcpServers)) {\n const connection = state.manager.getConnection(name);\n const metadata = state.toolMetadata.get(name);\n const toolCount = metadata?.length ?? 0;\n const failedAgo = getFailureAgeSeconds(state, name);\n let status = \"not connected\";\n let statusIcon = \"○\";\n let failed = false;\n\n if (connection?.status === \"connected\") {\n status = \"connected\";\n statusIcon = \"✓\";\n } else if (connection?.status === \"needs-auth\") {\n status = \"needs auth\";\n statusIcon = \"⚠\";\n } else if (failedAgo !== null) {\n status = `failed ${failedAgo}s ago`;\n statusIcon = \"✗\";\n failed = true;\n } else if (metadata !== undefined) {\n status = \"cached\";\n }\n\n const toolSuffix = failed ? \"\" : ` (${toolCount} tools${status === \"cached\" ? \", cached\" : \"\"})`;\n lines.push(`${statusIcon} ${name}: ${status}${toolSuffix}`);\n }\n\n if (Object.keys(state.config.mcpServers).length === 0) {\n lines.push(\"No MCP servers configured\");\n lines.push(\"Run /mcp setup to adopt imports or scaffold a starter .mcp.json\");\n }\n\n ctx.ui.notify(lines.join(\"\\n\"), \"info\");\n}\n\nexport async function showTools(state: McpExtensionState, ctx: ExtensionContext): Promise<void> {\n if (!ctx.hasUI) return;\n\n const allTools = [...state.toolMetadata.values()].flat().map(m => m.name);\n\n if (allTools.length === 0) {\n ctx.ui.notify(\"No MCP tools available\", \"info\");\n return;\n }\n\n const lines = [\n \"MCP Tools:\",\n \"\",\n ...allTools.map(t => ` ${t}`),\n \"\",\n `Total: ${allTools.length} tools`,\n ];\n\n ctx.ui.notify(lines.join(\"\\n\"), \"info\");\n}\n\nexport async function reconnectServers(\n state: McpExtensionState,\n ctx: ExtensionContext,\n targetServer?: string\n): Promise<void> {\n if (targetServer && !state.config.mcpServers[targetServer]) {\n if (ctx.hasUI) {\n ctx.ui.notify(`Server \"${targetServer}\" not found in config`, \"error\");\n }\n return;\n }\n\n const entries = targetServer\n ? [[targetServer, state.config.mcpServers[targetServer]] as [string, ServerEntry]]\n : Object.entries(state.config.mcpServers);\n\n for (const [name, definition] of entries) {\n try {\n await state.manager.close(name);\n\n const connection = await state.manager.connect(name, definition);\n if (connection.status === \"needs-auth\") {\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: ${name} requires OAuth. Run /mcp-auth ${name} first.`, \"warning\");\n }\n continue;\n }\n const prefix = state.config.settings?.toolPrefix ?? \"server\";\n\n const { metadata, failedTools } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n state.toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n state.failureTracker.delete(name);\n\n if (ctx.hasUI) {\n ctx.ui.notify(\n `MCP: Reconnected to ${name} (${connection.tools.length} tools, ${connection.resources.length} resources)`,\n \"info\"\n );\n if (failedTools.length > 0) {\n ctx.ui.notify(`MCP: ${name} - ${failedTools.length} tools skipped`, \"warning\");\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n state.failureTracker.set(name, Date.now());\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: Failed to reconnect to ${name}: ${message}`, \"error\");\n }\n }\n }\n\n updateStatusBar(state);\n}\n\nexport async function authenticateServer(\n serverName: string,\n config: McpConfig,\n ctx: ExtensionContext,\n authFlow: McpAuthFlow,\n): Promise<McpAuthResult> {\n if (!ctx.hasUI) return { ok: false, message: \"OAuth authentication requires an interactive session.\" };\n\n const definition = config.mcpServers[serverName];\n if (!definition) {\n const message = `Server \"${serverName}\" not found in config`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n if (!supportsOAuth(definition)) {\n const message = `Server \"${serverName}\" does not use OAuth authentication. Set \"auth\": \"oauth\" or omit auth for auto-detection.`;\n ctx.ui.notify(\n `Server \"${serverName}\" does not use OAuth authentication.\\n` +\n `Set \"auth\": \"oauth\" or omit auth for auto-detection.`,\n \"error\"\n );\n return { ok: false, message };\n }\n\n if (!definition.url) {\n const message = `Server \"${serverName}\" has no URL configured (OAuth requires HTTP transport)`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n try {\n ctx.ui.setStatus(\"mcp-auth\", `Authenticating ${serverName}...`);\n const status = await authFlow.authenticate(serverName, definition.url, definition, {\n onAuthorizationUrl: (authorizationUrl) => {\n ctx.ui.notify(\n `Open this URL to authenticate ${serverName}:\\n\\n${authorizationUrl}\\n\\n` +\n \"After approving, return to lunR; the local callback will complete automatically.\",\n \"info\"\n );\n },\n });\n\n if (status === \"authenticated\") {\n const message = `OAuth authentication successful for \"${serverName}\"! Run /mcp reconnect ${serverName} to connect with the new token.`;\n ctx.ui.notify(\n `OAuth authentication successful for \"${serverName}\"!\\n` +\n `Run /mcp reconnect ${serverName} to connect with the new token.`,\n \"info\"\n );\n return { ok: true, message };\n }\n\n const message = `OAuth authentication failed for \"${serverName}\".`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n ctx.ui.notify(`Failed to authenticate \"${serverName}\": ${message}`, \"error\");\n return { ok: false, message };\n } finally {\n ctx.ui.setStatus(\"mcp-auth\", undefined);\n }\n}\n\nexport async function logoutServer(\n serverName: string,\n state: McpExtensionState,\n ctx: ExtensionContext\n): Promise<{ ok: boolean; message: string }> {\n const definition = state.config.mcpServers[serverName];\n if (!definition) {\n const message = `Server \"${serverName}\" not found in config`;\n if (ctx.hasUI) ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n await state.authFlow.removeAuth(serverName);\n await state.manager.close(serverName);\n updateStatusBar(state);\n\n const message = `OAuth credentials cleared for \"${serverName}\". Run /mcp-auth ${serverName} to authenticate again.`;\n if (ctx.hasUI) ctx.ui.notify(message, \"info\");\n return { ok: true, message };\n}\n\nexport interface PanelFlowResult {\n configChanged: boolean;\n}\n\nfunction buildSharedConfigNoticeLines(configOverridePath: string | undefined, cwd: string): { lines: string[]; fingerprint: string | null } {\n const discovery = getMcpDiscoverySummary(configOverridePath, cwd);\n const onboardingState = loadOnboardingState();\n if (!discovery.hasSharedServers || onboardingState.sharedConfigHintShown) {\n return { lines: [], fingerprint: null };\n }\n\n const sharedSources = discovery.sources.filter((source) => source.kind === \"shared\" && source.serverCount > 0);\n const sourceList = sharedSources.map((source) => source.path).join(\", \");\n return {\n lines: [\n `Using standard MCP config from ${sourceList}.`,\n \"Pi only writes compatibility imports and adapter-specific overrides into Pi-owned files when needed.\",\n ],\n fingerprint: discovery.fingerprint,\n };\n}\n\nexport async function openMcpSetup(\n _state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n mode: \"empty\" | \"setup\" = \"setup\",\n): Promise<PanelFlowResult> {\n if (!ctx.hasUI) return { configChanged: false };\n\n const discovery = getMcpDiscoverySummary(configOverridePath, ctx.cwd);\n const onboardingState = loadOnboardingState();\n const { createMcpSetupPanel } = await import(\"./mcp-setup-panel.ts\");\n let configChanged = false;\n\n const callbacks = {\n previewImports: (imports: ImportKind[]) => previewCompatibilityImports(imports, configOverridePath),\n previewStarterProject: () => previewStarterProjectConfig(ctx.cwd),\n previewRepoPrompt: () => {\n const repoPrompt = getMcpDiscoverySummary(configOverridePath, ctx.cwd).repoPrompt;\n if (!repoPrompt.entry || !repoPrompt.targetPath || !repoPrompt.serverName) return null;\n return previewSharedServerEntry(repoPrompt.targetPath, repoPrompt.serverName, repoPrompt.entry);\n },\n adoptImports: async (imports: ImportKind[]) => {\n const result = ensureCompatibilityImports(imports, configOverridePath);\n if (result.added.length > 0) configChanged = true;\n return result;\n },\n scaffoldProjectConfig: async () => {\n const path = writeStarterProjectConfig(ctx.cwd);\n configChanged = true;\n return { path };\n },\n addRepoPrompt: async () => {\n const repoPrompt = getMcpDiscoverySummary(configOverridePath, ctx.cwd).repoPrompt;\n if (!repoPrompt.entry || !repoPrompt.targetPath || !repoPrompt.serverName) {\n throw new Error(\"RepoPrompt is not available to add from this setup screen.\");\n }\n const path = writeSharedServerEntry(repoPrompt.targetPath, repoPrompt.serverName, repoPrompt.entry);\n configChanged = true;\n return { path, serverName: repoPrompt.serverName };\n },\n openPath: async (targetPath: string) => {\n await openPath(pi, targetPath);\n },\n markSetupCompleted: () => {\n persistSetupCompleted(discovery.fingerprint);\n },\n };\n\n return new Promise<PanelFlowResult>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpSetupPanel(discovery, callbacks, { mode, onboardingState, keybindings }, tui, () => {\n done(undefined);\n resolve({ configChanged });\n });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 92 } },\n );\n });\n}\n\nfunction buildMcpPanelCallbacks(\n state: McpExtensionState,\n config: McpConfig,\n ctx: ExtensionContext,\n): McpPanelCallbacks {\n return {\n reconnect: (serverName: string) => lazyConnect(state, serverName),\n canAuthenticate: (serverName: string) => {\n const definition = config.mcpServers[serverName];\n return definition ? supportsOAuth(definition) : false;\n },\n authenticate: (serverName: string) => authenticateServer(serverName, config, ctx, state.authFlow),\n getConnectionStatus: (serverName: string) => {\n const definition = config.mcpServers[serverName];\n const connection = state.manager.getConnection(serverName);\n if (connection?.status === \"needs-auth\") {\n return \"needs-auth\";\n }\n if (\n definition?.auth === \"oauth\"\n && definition.url\n && definition.oauth !== false\n && definition.oauth?.grantType !== \"client_credentials\"\n && !getAuthForUrl(serverName, definition.url)?.tokens\n ) {\n return \"needs-auth\";\n }\n if (connection?.status === \"connected\") return \"connected\";\n if (getFailureAgeSeconds(state, serverName) !== null) return \"failed\";\n return \"idle\";\n },\n refreshCacheAfterReconnect: (serverName: string) => {\n const freshCache = loadMetadataCache();\n return freshCache?.servers?.[serverName] ?? null;\n },\n };\n}\n\nexport async function openMcpPanel(\n state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n): Promise<PanelFlowResult> {\n if (Object.keys(state.config.mcpServers).length === 0) {\n return openMcpSetup(state, pi, ctx, configOverridePath, \"empty\");\n }\n\n const config = state.config;\n const cache = loadMetadataCache();\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined ?? configOverridePath;\n const provenanceMap = getServerProvenance(configPath, ctx.cwd);\n const { lines: noticeLines, fingerprint } = buildSharedConfigNoticeLines(configPath, ctx.cwd);\n\n const callbacks = buildMcpPanelCallbacks(state, config, ctx);\n\n const { createMcpPanel } = await import(\"./mcp-panel.ts\");\n let configChanged = false;\n\n await new Promise<void>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpPanel(config, cache, provenanceMap, callbacks, tui, (result: McpPanelResult) => {\n if (!result.cancelled && result.changes.size > 0) {\n writeDirectToolsConfig(result.changes, provenanceMap, config);\n configChanged = true;\n ctx.ui.notify(\"Direct tools updated. Pi will reload after this panel closes.\", \"info\");\n }\n done(undefined);\n resolve();\n }, { noticeLines, keybindings });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 82 } },\n );\n });\n\n if (noticeLines.length > 0 && fingerprint) {\n markSharedConfigHintShown(fingerprint);\n }\n\n return { configChanged };\n}\n\nexport async function openMcpAuthPanel(\n state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n): Promise<PanelFlowResult> {\n if (!ctx.hasUI) return { configChanged: false };\n\n const config = state.config;\n const oauthServers = Object.entries(config.mcpServers).filter(([, definition]) => supportsOAuth(definition));\n if (oauthServers.length === 0) {\n ctx.ui.notify(\"No OAuth-capable MCP servers are configured.\", \"warning\");\n return { configChanged: false };\n }\n\n const cache = loadMetadataCache();\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined ?? configOverridePath;\n const provenanceMap = getServerProvenance(configPath, ctx.cwd);\n const callbacks = buildMcpPanelCallbacks(state, config, ctx);\n const { createMcpPanel } = await import(\"./mcp-panel.ts\");\n\n await new Promise<void>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpPanel(config, cache, provenanceMap, callbacks, tui, () => {\n done(undefined);\n resolve();\n }, {\n authOnly: true,\n keybindings,\n noticeLines: [\"Select an OAuth MCP server and press Enter or ctrl+a to authenticate.\"],\n });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 82 } },\n );\n });\n\n return { configChanged: false };\n}\n"]}
@@ -62,7 +62,7 @@ export declare function getProjectPiConfigReadPath(cwd?: string): string;
62
62
  export declare function getConfigDiscoveryPaths(overridePath?: string, cwd?: string): ConfigDiscoveryPath[];
63
63
  export declare function findAvailableImportConfigs(cwd?: string): DiscoveredImportConfig[];
64
64
  export declare function getMcpDiscoverySummary(overridePath?: string, cwd?: string): McpDiscoverySummary;
65
- export declare function loadMcpConfig(overridePath?: string, cwd?: string): McpConfig;
65
+ export declare function loadMcpConfig(overridePath?: string, cwd?: string, projectTrusted?: boolean): McpConfig;
66
66
  export declare function previewCompatibilityImports(importKinds: ImportKind[], overridePath?: string): ConfigWritePreview;
67
67
  export declare function ensureCompatibilityImports(importKinds: ImportKind[], overridePath?: string): {
68
68
  path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/config.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n// config.ts - Config loading with import support\nimport { existsSync, readFileSync, writeFileSync, mkdirSync, renameSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { getAgentPath } from \"./agent-dir.ts\";\nimport type { McpConfig, ServerEntry, McpSettings, ImportKind, ServerProvenance } from \"./types.ts\";\n\nconst GENERIC_GLOBAL_CONFIG_PATH = join(homedir(), \".config\", \"mcp\", \"mcp.json\");\nconst PROJECT_CONFIG_NAME = \".mcp.json\";\n// lunr: project-scope MCP config lives at .lunr/mcp.json (lunr's project config\n// dir); .pi/mcp.json is kept only as a back-compat read fallback for projects\n// previously configured under upstream pi. Writes always go to .lunr/mcp.json.\nconst PROJECT_LUNR_CONFIG_NAME = \".lunr/mcp.json\";\nconst LEGACY_PROJECT_PI_CONFIG_NAME = \".pi/mcp.json\";\nconst REPOPROMPT_BINARY_CANDIDATES = [\n join(homedir(), \"RepoPrompt\", \"repoprompt_cli\"),\n \"/Applications/Repo Prompt.app/Contents/MacOS/repoprompt-mcp\",\n];\n\nconst IMPORT_PATHS: Record<ImportKind, string[]> = {\n cursor: [join(homedir(), \".cursor\", \"mcp.json\")],\n \"claude-code\": [\n join(homedir(), \".claude\", \"mcp.json\"),\n join(homedir(), \".claude.json\"),\n join(homedir(), \".claude\", \"claude_desktop_config.json\"),\n ],\n \"claude-desktop\": [join(homedir(), \"Library\", \"Application Support\", \"Claude\", \"claude_desktop_config.json\")],\n codex: [join(homedir(), \".codex\", \"config.json\")],\n windsurf: [join(homedir(), \".windsurf\", \"mcp.json\")],\n vscode: [\".vscode/mcp.json\"],\n};\n\ninterface ConfigSourceSpec {\n id: \"shared-global\" | \"pi-global\" | \"shared-project\" | \"pi-project\";\n label: string;\n readPath: string;\n writePath: string;\n kind: \"user\" | \"project\" | \"import\";\n importKind?: string;\n shared: boolean;\n scope: \"global\" | \"project\";\n}\n\nexport interface ConfigDiscoveryPath {\n label: string;\n path: string;\n exists: boolean;\n}\n\nexport interface DiscoveredImportConfig {\n kind: ImportKind;\n path: string;\n}\n\nexport interface ConfigDiscoverySource extends ConfigDiscoveryPath {\n id: ConfigSourceSpec[\"id\"];\n scope: ConfigSourceSpec[\"scope\"];\n kind: \"shared\" | \"pi\";\n serverCount: number;\n}\n\nexport interface ImportConfigSummary extends DiscoveredImportConfig {\n serverCount: number;\n}\n\nexport interface RepoPromptDiscovery {\n configured: boolean;\n configuredPath?: string;\n executablePath?: string;\n targetPath?: string;\n serverName?: string;\n entry?: ServerEntry;\n}\n\nexport interface McpDiscoverySummary {\n sources: ConfigDiscoverySource[];\n imports: ImportConfigSummary[];\n hasAnyConfig: boolean;\n hasAnyDetectedPaths: boolean;\n hasSharedServers: boolean;\n hasPiOwnedServers: boolean;\n totalServerCount: number;\n fingerprint: string;\n repoPrompt: RepoPromptDiscovery;\n}\n\nexport interface ConfigWritePreview {\n path: string;\n existed: boolean;\n changed: boolean;\n beforeText: string;\n afterText: string;\n diffText: string;\n}\n\nexport function getPiGlobalConfigPath(overridePath?: string): string {\n return overridePath ? resolve(overridePath) : getAgentPath(\"mcp.json\");\n}\n\nexport function getGenericGlobalConfigPath(): string {\n return GENERIC_GLOBAL_CONFIG_PATH;\n}\n\nexport function getProjectConfigPath(cwd = process.cwd()): string {\n return resolve(cwd, PROJECT_CONFIG_NAME);\n}\n\nexport function getProjectPiConfigPath(cwd = process.cwd()): string {\n return resolve(cwd, PROJECT_LUNR_CONFIG_NAME);\n}\n\n// lunr: read path prefers .lunr/mcp.json and falls back to the legacy .pi/mcp.json\n// when only the pi-era file exists.\nexport function getProjectPiConfigReadPath(cwd = process.cwd()): string {\n const lunrPath = getProjectPiConfigPath(cwd);\n if (existsSync(lunrPath)) return lunrPath;\n const legacyPath = resolve(cwd, LEGACY_PROJECT_PI_CONFIG_NAME);\n return existsSync(legacyPath) ? legacyPath : lunrPath;\n}\n\nexport function getConfigDiscoveryPaths(overridePath?: string, cwd = process.cwd()): ConfigDiscoveryPath[] {\n return getConfigSources(overridePath, cwd).map((source) => ({\n label: source.label,\n path: source.readPath,\n exists: existsSync(source.readPath),\n }));\n}\n\nexport function findAvailableImportConfigs(cwd = process.cwd()): DiscoveredImportConfig[] {\n const discovered: DiscoveredImportConfig[] = [];\n\n for (const importKind of Object.keys(IMPORT_PATHS) as ImportKind[]) {\n const importPath = resolveImportPath(importKind, cwd);\n if (importPath) {\n discovered.push({ kind: importKind, path: importPath });\n }\n }\n\n return discovered;\n}\n\nexport function getMcpDiscoverySummary(overridePath?: string, cwd = process.cwd()): McpDiscoverySummary {\n const sources = getConfigSources(overridePath, cwd).map((source) => {\n const loaded = readValidatedConfig(source.readPath, `MCP config from ${source.readPath}`);\n return {\n id: source.id,\n label: source.label,\n path: source.readPath,\n exists: existsSync(source.readPath),\n scope: source.scope,\n kind: source.shared ? \"shared\" : \"pi\",\n serverCount: loaded ? Object.keys(loaded.mcpServers).length : 0,\n } satisfies ConfigDiscoverySource;\n });\n\n const imports = (Object.keys(IMPORT_PATHS) as ImportKind[])\n .map((kind) => {\n const path = resolveImportPath(kind, cwd);\n if (!path) return null;\n return {\n kind,\n path,\n serverCount: getImportServerCount(kind, path),\n } satisfies ImportConfigSummary;\n })\n .filter((value): value is ImportConfigSummary => value !== null);\n\n const totalServerCount = sources.reduce((sum, source) => sum + source.serverCount, 0);\n const hasSharedServers = sources.some((source) => source.kind === \"shared\" && source.serverCount > 0);\n const hasPiOwnedServers = sources.some((source) => source.kind === \"pi\" && source.serverCount > 0);\n const hasAnyDetectedPaths = sources.some((source) => source.exists) || imports.length > 0;\n const hasAnyConfig = totalServerCount > 0 || imports.some((entry) => entry.serverCount > 0) || hasAnyDetectedPaths;\n\n const summaryWithoutRepoPrompt = {\n sources,\n imports,\n hasAnyConfig,\n hasAnyDetectedPaths,\n hasSharedServers,\n hasPiOwnedServers,\n totalServerCount,\n };\n\n const fingerprint = JSON.stringify({\n sources: sources.map((source) => [source.id, source.exists, source.serverCount]),\n imports: imports.map((entry) => [entry.kind, entry.path, entry.serverCount]),\n });\n\n return {\n ...summaryWithoutRepoPrompt,\n fingerprint,\n repoPrompt: detectRepoPrompt(summaryWithoutRepoPrompt, cwd),\n };\n}\n\nexport function loadMcpConfig(overridePath?: string, cwd = process.cwd()): McpConfig {\n let config: McpConfig = { mcpServers: {} };\n\n for (const source of getConfigSources(overridePath, cwd)) {\n const loaded = readValidatedConfig(source.readPath, `MCP config from ${source.readPath}`);\n if (!loaded) continue;\n config = mergeConfigs(config, expandImports(loaded, cwd));\n }\n\n return config;\n}\n\nfunction getConfigSources(overridePath?: string, cwd = process.cwd()): ConfigSourceSpec[] {\n const userPath = getPiGlobalConfigPath(overridePath);\n const projectPath = getProjectConfigPath(cwd);\n const projectPiPath = getProjectPiConfigPath(cwd);\n const projectPiReadPath = getProjectPiConfigReadPath(cwd);\n const sources: ConfigSourceSpec[] = [];\n\n if (GENERIC_GLOBAL_CONFIG_PATH !== userPath) {\n sources.push({\n id: \"shared-global\",\n label: \"user-global standard MCP\",\n readPath: GENERIC_GLOBAL_CONFIG_PATH,\n writePath: userPath,\n kind: \"import\",\n importKind: \"global MCP config\",\n shared: true,\n scope: \"global\",\n });\n }\n\n sources.push({\n id: \"pi-global\",\n label: \"Pi global override\",\n readPath: userPath,\n writePath: userPath,\n kind: \"user\",\n shared: false,\n scope: \"global\",\n });\n\n if (projectPath !== userPath) {\n sources.push({\n id: \"shared-project\",\n label: \"project standard MCP\",\n readPath: projectPath,\n writePath: projectPath,\n kind: \"project\",\n shared: true,\n scope: \"project\",\n });\n }\n\n if (projectPiPath !== userPath && projectPiPath !== projectPath) {\n sources.push({\n id: \"pi-project\",\n label: \"project Pi override\",\n readPath: projectPiReadPath,\n writePath: projectPiPath,\n kind: \"project\",\n shared: false,\n scope: \"project\",\n });\n }\n\n return sources;\n}\n\nfunction mergeConfigs(base: McpConfig, next: McpConfig): McpConfig {\n return {\n mcpServers: mergeServerMaps(base.mcpServers, next.mcpServers),\n imports: mergeImports(base.imports, next.imports),\n settings: next.settings ? { ...base.settings, ...next.settings } : base.settings,\n };\n}\n\nfunction mergeServerMaps(\n base: Record<string, ServerEntry>,\n next: Record<string, ServerEntry>,\n): Record<string, ServerEntry> {\n const merged = { ...base };\n for (const [name, definition] of Object.entries(next)) {\n merged[name] = { ...(merged[name] ?? {}), ...definition };\n }\n return merged;\n}\n\nfunction mergeImports(left: ImportKind[] | undefined, right: ImportKind[] | undefined): ImportKind[] | undefined {\n const merged = [...(left ?? []), ...(right ?? [])];\n if (merged.length === 0) return undefined;\n return [...new Set(merged)];\n}\n\nfunction expandImports(config: McpConfig, cwd = process.cwd()): McpConfig {\n if (!config.imports?.length) return config;\n\n const importedServers: Record<string, ServerEntry> = {};\n for (const importKind of config.imports) {\n const importPath = resolveImportPath(importKind, cwd);\n if (!importPath) continue;\n\n try {\n const imported = JSON.parse(readFileSync(importPath, \"utf-8\"));\n const servers = extractServers(imported, importKind);\n for (const [name, definition] of Object.entries(servers)) {\n if (!importedServers[name]) {\n importedServers[name] = definition;\n }\n }\n } catch (error) {\n console.warn(`Failed to import MCP config from ${importKind}:`, error);\n }\n }\n\n return {\n imports: config.imports,\n settings: config.settings,\n mcpServers: mergeServerMaps(importedServers, config.mcpServers),\n };\n}\n\nfunction resolveImportPath(importKind: ImportKind, cwd = process.cwd()): string | null {\n const candidates = IMPORT_PATHS[importKind] ?? [];\n for (const candidate of candidates) {\n const fullPath = candidate.startsWith(\".\") ? resolve(cwd, candidate) : candidate;\n if (existsSync(fullPath)) {\n return fullPath;\n }\n }\n return null;\n}\n\nfunction getImportServerCount(importKind: ImportKind, path: string): number {\n try {\n const raw = JSON.parse(readFileSync(path, \"utf-8\"));\n return Object.keys(extractServers(raw, importKind)).length;\n } catch {\n return 0;\n }\n}\n\nfunction readValidatedConfig(path: string, label: string): McpConfig | null {\n if (!existsSync(path)) return null;\n\n try {\n return validateConfig(JSON.parse(readFileSync(path, \"utf-8\")));\n } catch (error) {\n console.warn(`Failed to load ${label}:`, error);\n return null;\n }\n}\n\nfunction validateConfig(raw: unknown): McpConfig {\n if (!raw || typeof raw !== \"object\") {\n return { mcpServers: {} };\n }\n\n const obj = raw as Record<string, unknown>;\n const servers = obj.mcpServers ?? obj[\"mcp-servers\"] ?? {};\n\n if (typeof servers !== \"object\" || servers === null || Array.isArray(servers)) {\n return { mcpServers: {} };\n }\n\n return {\n mcpServers: servers as Record<string, ServerEntry>,\n imports: Array.isArray(obj.imports) ? (obj.imports as ImportKind[]) : undefined,\n settings: obj.settings as McpSettings | undefined,\n };\n}\n\nfunction extractServers(config: unknown, kind: ImportKind): Record<string, ServerEntry> {\n if (!config || typeof config !== \"object\") return {};\n\n const obj = config as Record<string, unknown>;\n\n let servers: unknown;\n switch (kind) {\n case \"claude-desktop\":\n case \"claude-code\":\n case \"codex\":\n servers = obj.mcpServers;\n break;\n case \"cursor\":\n case \"windsurf\":\n case \"vscode\":\n servers = obj.mcpServers ?? obj[\"mcp-servers\"];\n break;\n default:\n return {};\n }\n\n if (!servers || typeof servers !== \"object\" || Array.isArray(servers)) {\n return {};\n }\n\n return servers as Record<string, ServerEntry>;\n}\n\nfunction serializeRawConfig(raw: Record<string, unknown>): string {\n return `${JSON.stringify(raw, null, 2)}\\n`;\n}\n\nfunction buildUnifiedDiff(beforeText: string, afterText: string): string {\n if (beforeText === afterText) return \"(no changes)\";\n\n const before = beforeText.split(\"\\n\");\n const after = afterText.split(\"\\n\");\n const rows = before.length;\n const cols = after.length;\n const lcs = Array.from({ length: rows + 1 }, () => Array<number>(cols + 1).fill(0));\n\n for (let i = rows - 1; i >= 0; i--) {\n for (let j = cols - 1; j >= 0; j--) {\n lcs[i][j] = before[i] === after[j]\n ? lcs[i + 1][j + 1] + 1\n : Math.max(lcs[i + 1][j], lcs[i][j + 1]);\n }\n }\n\n const lines: string[] = [\"--- before\", \"+++ after\"];\n let i = 0;\n let j = 0;\n while (i < rows || j < cols) {\n if (i < rows && j < cols && before[i] === after[j]) {\n lines.push(` ${before[i]}`);\n i++;\n j++;\n continue;\n }\n if (j < cols && (i === rows || lcs[i][j + 1] >= lcs[i + 1][j])) {\n lines.push(`+ ${after[j]}`);\n j++;\n continue;\n }\n if (i < rows) {\n lines.push(`- ${before[i]}`);\n i++;\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction buildConfigWritePreview(filePath: string, nextRaw: Record<string, unknown>): ConfigWritePreview {\n const existed = existsSync(filePath);\n const beforeRaw = readRawConfigObject(filePath);\n const beforeText = existed ? serializeRawConfig(beforeRaw) : \"\";\n const afterText = serializeRawConfig(nextRaw);\n return {\n path: filePath,\n existed,\n changed: beforeText !== afterText,\n beforeText,\n afterText,\n diffText: buildUnifiedDiff(beforeText, afterText),\n };\n}\n\nfunction readRawConfigObject(filePath: string): Record<string, unknown> {\n if (!existsSync(filePath)) return {};\n\n try {\n const raw = JSON.parse(readFileSync(filePath, \"utf-8\"));\n return raw && typeof raw === \"object\" && !Array.isArray(raw) ? raw as Record<string, unknown> : {};\n } catch {\n return {};\n }\n}\n\nfunction writeRawConfigObject(filePath: string, raw: Record<string, unknown>): void {\n mkdirSync(dirname(filePath), { recursive: true });\n const tmpPath = `${filePath}.${process.pid}.tmp`;\n writeFileSync(tmpPath, `${JSON.stringify(raw, null, 2)}\\n`, \"utf-8\");\n renameSync(tmpPath, filePath);\n}\n\nfunction getServersObject(raw: Record<string, unknown>): Record<string, ServerEntry> {\n const existing = raw.mcpServers ?? raw[\"mcp-servers\"] ?? {};\n if (!existing || typeof existing !== \"object\" || Array.isArray(existing)) {\n return {};\n }\n return existing as Record<string, ServerEntry>;\n}\n\nfunction setServersObject(raw: Record<string, unknown>, servers: Record<string, ServerEntry>): void {\n delete raw[\"mcp-servers\"];\n raw.mcpServers = servers;\n}\n\nfunction isRepoPromptServer(name: string, entry: ServerEntry): boolean {\n const normalizedName = name.toLowerCase();\n if (normalizedName.includes(\"repoprompt\") || normalizedName === \"rp\") {\n return true;\n }\n\n const command = entry.command?.toLowerCase() ?? \"\";\n if (command.includes(\"repoprompt\") || command.includes(\"rp-mcp\") || command.endsWith(\"repoprompt_cli\")) {\n return true;\n }\n\n return (entry.args ?? []).some((arg) => typeof arg === \"string\" && arg.toLowerCase().includes(\"repoprompt\"));\n}\n\nfunction findProjectRoot(cwd = process.cwd()): string | null {\n let current = resolve(cwd);\n while (true) {\n if (\n existsSync(join(current, \".git\"))\n || existsSync(join(current, \"package.json\"))\n || existsSync(join(current, PROJECT_CONFIG_NAME))\n || existsSync(join(current, \".pi\"))\n || existsSync(join(current, \".lunr\")) // lunr: lunr's project config dir is also a root marker\n ) {\n return current;\n }\n\n const parent = dirname(current);\n if (parent === current) return null;\n current = parent;\n }\n}\n\nfunction buildRepoPromptEntry(executablePath: string): ServerEntry {\n return {\n command: executablePath,\n args: [],\n lifecycle: \"lazy\",\n };\n}\n\nfunction detectRepoPrompt(summary: Omit<McpDiscoverySummary, \"fingerprint\" | \"repoPrompt\">, cwd = process.cwd()): RepoPromptDiscovery {\n for (const source of summary.sources) {\n if (source.kind !== \"shared\" || source.serverCount === 0) continue;\n const config = readValidatedConfig(source.path, `MCP config from ${source.path}`);\n if (!config) continue;\n for (const [name, entry] of Object.entries(config.mcpServers)) {\n if (isRepoPromptServer(name, entry)) {\n return { configured: true, configuredPath: source.path };\n }\n }\n }\n\n const executablePath = REPOPROMPT_BINARY_CANDIDATES.find((candidate) => existsSync(candidate));\n if (!executablePath) {\n return { configured: false };\n }\n\n const projectRoot = findProjectRoot(cwd);\n const targetPath = projectRoot ? join(projectRoot, PROJECT_CONFIG_NAME) : GENERIC_GLOBAL_CONFIG_PATH;\n return {\n configured: false,\n executablePath,\n targetPath,\n serverName: \"repoprompt\",\n entry: buildRepoPromptEntry(executablePath),\n };\n}\n\nexport function previewCompatibilityImports(importKinds: ImportKind[], overridePath?: string): ConfigWritePreview {\n const targetPath = getPiGlobalConfigPath(overridePath);\n const raw = readRawConfigObject(targetPath);\n const currentImports = Array.isArray(raw.imports) ? raw.imports.filter((value): value is ImportKind => typeof value === \"string\") : [];\n const merged = [...new Set([...currentImports, ...importKinds])];\n const nextRaw = { ...raw, imports: merged };\n setServersObject(nextRaw, getServersObject(nextRaw));\n return buildConfigWritePreview(targetPath, nextRaw);\n}\n\nexport function ensureCompatibilityImports(importKinds: ImportKind[], overridePath?: string): { path: string; added: ImportKind[] } {\n const targetPath = getPiGlobalConfigPath(overridePath);\n const raw = readRawConfigObject(targetPath);\n const currentImports = Array.isArray(raw.imports) ? raw.imports.filter((value): value is ImportKind => typeof value === \"string\") : [];\n const merged = [...new Set([...currentImports, ...importKinds])];\n const added = merged.filter((kind) => !currentImports.includes(kind));\n if (added.length === 0) {\n return { path: targetPath, added: [] };\n }\n\n raw.imports = merged;\n const servers = getServersObject(raw);\n setServersObject(raw, servers);\n writeRawConfigObject(targetPath, raw);\n return { path: targetPath, added };\n}\n\nexport function buildStarterProjectConfig(): McpConfig {\n return {\n mcpServers: {},\n };\n}\n\nexport function previewStarterProjectConfig(cwd = process.cwd()): ConfigWritePreview {\n const targetPath = getProjectConfigPath(cwd);\n const nextRaw = { mcpServers: buildStarterProjectConfig().mcpServers };\n return buildConfigWritePreview(targetPath, nextRaw);\n}\n\nexport function writeStarterProjectConfig(cwd = process.cwd()): string {\n const targetPath = getProjectConfigPath(cwd);\n const raw = { mcpServers: buildStarterProjectConfig().mcpServers };\n writeRawConfigObject(targetPath, raw);\n return targetPath;\n}\n\nexport function previewSharedServerEntry(filePath: string, serverName: string, entry: ServerEntry): ConfigWritePreview {\n const raw = readRawConfigObject(filePath);\n const nextRaw = { ...raw };\n const servers = getServersObject(nextRaw);\n servers[serverName] = entry;\n setServersObject(nextRaw, servers);\n return buildConfigWritePreview(filePath, nextRaw);\n}\n\nexport function writeSharedServerEntry(filePath: string, serverName: string, entry: ServerEntry): string {\n const raw = readRawConfigObject(filePath);\n const servers = getServersObject(raw);\n servers[serverName] = entry;\n setServersObject(raw, servers);\n writeRawConfigObject(filePath, raw);\n return filePath;\n}\n\nexport function getServerProvenance(overridePath?: string, cwd = process.cwd()): Map<string, ServerProvenance> {\n const provenance = new Map<string, ServerProvenance>();\n const userPath = getPiGlobalConfigPath(overridePath);\n\n for (const source of getConfigSources(overridePath, cwd)) {\n const loaded = readValidatedConfig(source.readPath, `MCP config from ${source.readPath}`);\n if (!loaded) continue;\n\n if (loaded.imports?.length) {\n for (const importKind of loaded.imports) {\n const importPath = resolveImportPath(importKind, cwd);\n if (!importPath) continue;\n\n try {\n const imported = JSON.parse(readFileSync(importPath, \"utf-8\"));\n const servers = extractServers(imported, importKind);\n for (const name of Object.keys(servers)) {\n if (!provenance.has(name)) {\n provenance.set(name, { path: userPath, kind: \"import\", importKind });\n }\n }\n } catch {}\n }\n }\n\n for (const name of Object.keys(loaded.mcpServers)) {\n provenance.set(name, {\n path: source.writePath,\n kind: source.kind,\n importKind: source.importKind,\n });\n }\n }\n\n return provenance;\n}\n\nexport function writeDirectToolsConfig(\n changes: Map<string, true | string[] | false>,\n provenance: Map<string, ServerProvenance>,\n fullConfig: McpConfig,\n): void {\n const byPath = new Map<string, { name: string; value: true | string[] | false; prov: ServerProvenance }[]>();\n\n for (const [serverName, value] of changes) {\n const prov = provenance.get(serverName);\n if (!prov) continue;\n\n const targetPath = prov.path;\n\n if (!byPath.has(targetPath)) byPath.set(targetPath, []);\n byPath.get(targetPath)!.push({ name: serverName, value, prov });\n }\n\n for (const [filePath, entries] of byPath) {\n const raw = readRawConfigObject(filePath);\n const servers = getServersObject(raw);\n\n for (const { name, value, prov } of entries) {\n if (prov.kind === \"import\") {\n const fullDef = fullConfig.mcpServers[name];\n if (fullDef) {\n servers[name] = { ...fullDef, directTools: value };\n }\n } else if (servers[name]) {\n servers[name] = { ...servers[name], directTools: value };\n }\n }\n\n setServersObject(raw, servers);\n writeRawConfigObject(filePath, raw);\n }\n}\n"]}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/config.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n// config.ts - Config loading with import support\nimport { existsSync, readFileSync, writeFileSync, mkdirSync, renameSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { getAgentPath } from \"./agent-dir.ts\";\nimport type { McpConfig, ServerEntry, McpSettings, ImportKind, ServerProvenance } from \"./types.ts\";\n\nconst GENERIC_GLOBAL_CONFIG_PATH = join(homedir(), \".config\", \"mcp\", \"mcp.json\");\nconst PROJECT_CONFIG_NAME = \".mcp.json\";\n// lunr: project-scope MCP config lives at .lunr/mcp.json (lunr's project config\n// dir); .pi/mcp.json is kept only as a back-compat read fallback for projects\n// previously configured under upstream pi. Writes always go to .lunr/mcp.json.\nconst PROJECT_LUNR_CONFIG_NAME = \".lunr/mcp.json\";\nconst LEGACY_PROJECT_PI_CONFIG_NAME = \".pi/mcp.json\";\nconst REPOPROMPT_BINARY_CANDIDATES = [\n join(homedir(), \"RepoPrompt\", \"repoprompt_cli\"),\n \"/Applications/Repo Prompt.app/Contents/MacOS/repoprompt-mcp\",\n];\n\nconst IMPORT_PATHS: Record<ImportKind, string[]> = {\n cursor: [join(homedir(), \".cursor\", \"mcp.json\")],\n \"claude-code\": [\n join(homedir(), \".claude\", \"mcp.json\"),\n join(homedir(), \".claude.json\"),\n join(homedir(), \".claude\", \"claude_desktop_config.json\"),\n ],\n \"claude-desktop\": [join(homedir(), \"Library\", \"Application Support\", \"Claude\", \"claude_desktop_config.json\")],\n codex: [join(homedir(), \".codex\", \"config.json\")],\n windsurf: [join(homedir(), \".windsurf\", \"mcp.json\")],\n vscode: [\".vscode/mcp.json\"],\n};\n\ninterface ConfigSourceSpec {\n id: \"shared-global\" | \"pi-global\" | \"shared-project\" | \"pi-project\";\n label: string;\n readPath: string;\n writePath: string;\n kind: \"user\" | \"project\" | \"import\";\n importKind?: string;\n shared: boolean;\n scope: \"global\" | \"project\";\n}\n\nexport interface ConfigDiscoveryPath {\n label: string;\n path: string;\n exists: boolean;\n}\n\nexport interface DiscoveredImportConfig {\n kind: ImportKind;\n path: string;\n}\n\nexport interface ConfigDiscoverySource extends ConfigDiscoveryPath {\n id: ConfigSourceSpec[\"id\"];\n scope: ConfigSourceSpec[\"scope\"];\n kind: \"shared\" | \"pi\";\n serverCount: number;\n}\n\nexport interface ImportConfigSummary extends DiscoveredImportConfig {\n serverCount: number;\n}\n\nexport interface RepoPromptDiscovery {\n configured: boolean;\n configuredPath?: string;\n executablePath?: string;\n targetPath?: string;\n serverName?: string;\n entry?: ServerEntry;\n}\n\nexport interface McpDiscoverySummary {\n sources: ConfigDiscoverySource[];\n imports: ImportConfigSummary[];\n hasAnyConfig: boolean;\n hasAnyDetectedPaths: boolean;\n hasSharedServers: boolean;\n hasPiOwnedServers: boolean;\n totalServerCount: number;\n fingerprint: string;\n repoPrompt: RepoPromptDiscovery;\n}\n\nexport interface ConfigWritePreview {\n path: string;\n existed: boolean;\n changed: boolean;\n beforeText: string;\n afterText: string;\n diffText: string;\n}\n\nexport function getPiGlobalConfigPath(overridePath?: string): string {\n return overridePath ? resolve(overridePath) : getAgentPath(\"mcp.json\");\n}\n\nexport function getGenericGlobalConfigPath(): string {\n return GENERIC_GLOBAL_CONFIG_PATH;\n}\n\nexport function getProjectConfigPath(cwd = process.cwd()): string {\n return resolve(cwd, PROJECT_CONFIG_NAME);\n}\n\nexport function getProjectPiConfigPath(cwd = process.cwd()): string {\n return resolve(cwd, PROJECT_LUNR_CONFIG_NAME);\n}\n\n// lunr: read path prefers .lunr/mcp.json and falls back to the legacy .pi/mcp.json\n// when only the pi-era file exists.\nexport function getProjectPiConfigReadPath(cwd = process.cwd()): string {\n const lunrPath = getProjectPiConfigPath(cwd);\n if (existsSync(lunrPath)) return lunrPath;\n const legacyPath = resolve(cwd, LEGACY_PROJECT_PI_CONFIG_NAME);\n return existsSync(legacyPath) ? legacyPath : lunrPath;\n}\n\nexport function getConfigDiscoveryPaths(overridePath?: string, cwd = process.cwd()): ConfigDiscoveryPath[] {\n return getConfigSources(overridePath, cwd).map((source) => ({\n label: source.label,\n path: source.readPath,\n exists: existsSync(source.readPath),\n }));\n}\n\nexport function findAvailableImportConfigs(cwd = process.cwd()): DiscoveredImportConfig[] {\n const discovered: DiscoveredImportConfig[] = [];\n\n for (const importKind of Object.keys(IMPORT_PATHS) as ImportKind[]) {\n const importPath = resolveImportPath(importKind, cwd);\n if (importPath) {\n discovered.push({ kind: importKind, path: importPath });\n }\n }\n\n return discovered;\n}\n\nexport function getMcpDiscoverySummary(overridePath?: string, cwd = process.cwd()): McpDiscoverySummary {\n const sources = getConfigSources(overridePath, cwd).map((source) => {\n const loaded = readValidatedConfig(source.readPath, `MCP config from ${source.readPath}`);\n return {\n id: source.id,\n label: source.label,\n path: source.readPath,\n exists: existsSync(source.readPath),\n scope: source.scope,\n kind: source.shared ? \"shared\" : \"pi\",\n serverCount: loaded ? Object.keys(loaded.mcpServers).length : 0,\n } satisfies ConfigDiscoverySource;\n });\n\n const imports = (Object.keys(IMPORT_PATHS) as ImportKind[])\n .map((kind) => {\n const path = resolveImportPath(kind, cwd);\n if (!path) return null;\n return {\n kind,\n path,\n serverCount: getImportServerCount(kind, path),\n } satisfies ImportConfigSummary;\n })\n .filter((value): value is ImportConfigSummary => value !== null);\n\n const totalServerCount = sources.reduce((sum, source) => sum + source.serverCount, 0);\n const hasSharedServers = sources.some((source) => source.kind === \"shared\" && source.serverCount > 0);\n const hasPiOwnedServers = sources.some((source) => source.kind === \"pi\" && source.serverCount > 0);\n const hasAnyDetectedPaths = sources.some((source) => source.exists) || imports.length > 0;\n const hasAnyConfig = totalServerCount > 0 || imports.some((entry) => entry.serverCount > 0) || hasAnyDetectedPaths;\n\n const summaryWithoutRepoPrompt = {\n sources,\n imports,\n hasAnyConfig,\n hasAnyDetectedPaths,\n hasSharedServers,\n hasPiOwnedServers,\n totalServerCount,\n };\n\n const fingerprint = JSON.stringify({\n sources: sources.map((source) => [source.id, source.exists, source.serverCount]),\n imports: imports.map((entry) => [entry.kind, entry.path, entry.serverCount]),\n });\n\n return {\n ...summaryWithoutRepoPrompt,\n fingerprint,\n repoPrompt: detectRepoPrompt(summaryWithoutRepoPrompt, cwd),\n };\n}\n\nexport function loadMcpConfig(overridePath?: string, cwd = process.cwd(), projectTrusted = false): McpConfig {\n let config: McpConfig = { mcpServers: {} };\n\n for (const source of getConfigSources(overridePath, cwd)) {\n if (source.scope === \"project\" && !projectTrusted) continue;\n const loaded = readValidatedConfig(source.readPath, `MCP config from ${source.readPath}`);\n if (!loaded) continue;\n config = mergeConfigs(config, expandImports(loaded, cwd, projectTrusted));\n }\n\n return config;\n}\n\nfunction getConfigSources(overridePath?: string, cwd = process.cwd()): ConfigSourceSpec[] {\n const userPath = getPiGlobalConfigPath(overridePath);\n const projectPath = getProjectConfigPath(cwd);\n const projectPiPath = getProjectPiConfigPath(cwd);\n const projectPiReadPath = getProjectPiConfigReadPath(cwd);\n const sources: ConfigSourceSpec[] = [];\n\n if (GENERIC_GLOBAL_CONFIG_PATH !== userPath) {\n sources.push({\n id: \"shared-global\",\n label: \"user-global standard MCP\",\n readPath: GENERIC_GLOBAL_CONFIG_PATH,\n writePath: userPath,\n kind: \"import\",\n importKind: \"global MCP config\",\n shared: true,\n scope: \"global\",\n });\n }\n\n sources.push({\n id: \"pi-global\",\n label: \"Pi global override\",\n readPath: userPath,\n writePath: userPath,\n kind: \"user\",\n shared: false,\n scope: \"global\",\n });\n\n if (projectPath !== userPath) {\n sources.push({\n id: \"shared-project\",\n label: \"project standard MCP\",\n readPath: projectPath,\n writePath: projectPath,\n kind: \"project\",\n shared: true,\n scope: \"project\",\n });\n }\n\n if (projectPiPath !== userPath && projectPiPath !== projectPath) {\n sources.push({\n id: \"pi-project\",\n label: \"project Pi override\",\n readPath: projectPiReadPath,\n writePath: projectPiPath,\n kind: \"project\",\n shared: false,\n scope: \"project\",\n });\n }\n\n return sources;\n}\n\nfunction mergeConfigs(base: McpConfig, next: McpConfig): McpConfig {\n return {\n mcpServers: mergeServerMaps(base.mcpServers, next.mcpServers),\n imports: mergeImports(base.imports, next.imports),\n settings: next.settings ? { ...base.settings, ...next.settings } : base.settings,\n };\n}\n\nfunction mergeServerMaps(\n base: Record<string, ServerEntry>,\n next: Record<string, ServerEntry>,\n): Record<string, ServerEntry> {\n const merged = { ...base };\n for (const [name, definition] of Object.entries(next)) {\n merged[name] = { ...(merged[name] ?? {}), ...definition };\n }\n return merged;\n}\n\nfunction mergeImports(left: ImportKind[] | undefined, right: ImportKind[] | undefined): ImportKind[] | undefined {\n const merged = [...(left ?? []), ...(right ?? [])];\n if (merged.length === 0) return undefined;\n return [...new Set(merged)];\n}\n\nfunction expandImports(config: McpConfig, cwd = process.cwd(), projectTrusted = false): McpConfig {\n if (!config.imports?.length) return config;\n\n const importedServers: Record<string, ServerEntry> = {};\n for (const importKind of config.imports) {\n const importPath = resolveImportPath(importKind, cwd, projectTrusted);\n if (!importPath) continue;\n\n try {\n const imported = JSON.parse(readFileSync(importPath, \"utf-8\"));\n const servers = extractServers(imported, importKind);\n for (const [name, definition] of Object.entries(servers)) {\n if (!importedServers[name]) {\n importedServers[name] = definition;\n }\n }\n } catch (error) {\n console.warn(`Failed to import MCP config from ${importKind}:`, error);\n }\n }\n\n return {\n imports: config.imports,\n settings: config.settings,\n mcpServers: mergeServerMaps(importedServers, config.mcpServers),\n };\n}\n\nfunction resolveImportPath(importKind: ImportKind, cwd = process.cwd(), projectTrusted = true): string | null {\n const candidates = IMPORT_PATHS[importKind] ?? [];\n for (const candidate of candidates) {\n if (candidate.startsWith(\".\") && !projectTrusted) continue;\n const fullPath = candidate.startsWith(\".\") ? resolve(cwd, candidate) : candidate;\n if (existsSync(fullPath)) {\n return fullPath;\n }\n }\n return null;\n}\n\nfunction getImportServerCount(importKind: ImportKind, path: string): number {\n try {\n const raw = JSON.parse(readFileSync(path, \"utf-8\"));\n return Object.keys(extractServers(raw, importKind)).length;\n } catch {\n return 0;\n }\n}\n\nfunction readValidatedConfig(path: string, label: string): McpConfig | null {\n if (!existsSync(path)) return null;\n\n try {\n return validateConfig(JSON.parse(readFileSync(path, \"utf-8\")));\n } catch (error) {\n console.warn(`Failed to load ${label}:`, error);\n return null;\n }\n}\n\nfunction validateConfig(raw: unknown): McpConfig {\n if (!raw || typeof raw !== \"object\") {\n return { mcpServers: {} };\n }\n\n const obj = raw as Record<string, unknown>;\n const servers = obj.mcpServers ?? obj[\"mcp-servers\"] ?? {};\n\n if (typeof servers !== \"object\" || servers === null || Array.isArray(servers)) {\n return { mcpServers: {} };\n }\n\n return {\n mcpServers: servers as Record<string, ServerEntry>,\n imports: Array.isArray(obj.imports) ? (obj.imports as ImportKind[]) : undefined,\n settings: obj.settings as McpSettings | undefined,\n };\n}\n\nfunction extractServers(config: unknown, kind: ImportKind): Record<string, ServerEntry> {\n if (!config || typeof config !== \"object\") return {};\n\n const obj = config as Record<string, unknown>;\n\n let servers: unknown;\n switch (kind) {\n case \"claude-desktop\":\n case \"claude-code\":\n case \"codex\":\n servers = obj.mcpServers;\n break;\n case \"cursor\":\n case \"windsurf\":\n case \"vscode\":\n servers = obj.mcpServers ?? obj[\"mcp-servers\"];\n break;\n default:\n return {};\n }\n\n if (!servers || typeof servers !== \"object\" || Array.isArray(servers)) {\n return {};\n }\n\n return servers as Record<string, ServerEntry>;\n}\n\nfunction serializeRawConfig(raw: Record<string, unknown>): string {\n return `${JSON.stringify(raw, null, 2)}\\n`;\n}\n\nfunction buildUnifiedDiff(beforeText: string, afterText: string): string {\n if (beforeText === afterText) return \"(no changes)\";\n\n const before = beforeText.split(\"\\n\");\n const after = afterText.split(\"\\n\");\n const rows = before.length;\n const cols = after.length;\n const lcs = Array.from({ length: rows + 1 }, () => Array<number>(cols + 1).fill(0));\n\n for (let i = rows - 1; i >= 0; i--) {\n for (let j = cols - 1; j >= 0; j--) {\n lcs[i][j] = before[i] === after[j]\n ? lcs[i + 1][j + 1] + 1\n : Math.max(lcs[i + 1][j], lcs[i][j + 1]);\n }\n }\n\n const lines: string[] = [\"--- before\", \"+++ after\"];\n let i = 0;\n let j = 0;\n while (i < rows || j < cols) {\n if (i < rows && j < cols && before[i] === after[j]) {\n lines.push(` ${before[i]}`);\n i++;\n j++;\n continue;\n }\n if (j < cols && (i === rows || lcs[i][j + 1] >= lcs[i + 1][j])) {\n lines.push(`+ ${after[j]}`);\n j++;\n continue;\n }\n if (i < rows) {\n lines.push(`- ${before[i]}`);\n i++;\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction buildConfigWritePreview(filePath: string, nextRaw: Record<string, unknown>): ConfigWritePreview {\n const existed = existsSync(filePath);\n const beforeRaw = readRawConfigObject(filePath);\n const beforeText = existed ? serializeRawConfig(beforeRaw) : \"\";\n const afterText = serializeRawConfig(nextRaw);\n return {\n path: filePath,\n existed,\n changed: beforeText !== afterText,\n beforeText,\n afterText,\n diffText: buildUnifiedDiff(beforeText, afterText),\n };\n}\n\nfunction readRawConfigObject(filePath: string): Record<string, unknown> {\n if (!existsSync(filePath)) return {};\n\n try {\n const raw = JSON.parse(readFileSync(filePath, \"utf-8\"));\n return raw && typeof raw === \"object\" && !Array.isArray(raw) ? raw as Record<string, unknown> : {};\n } catch {\n return {};\n }\n}\n\nfunction writeRawConfigObject(filePath: string, raw: Record<string, unknown>): void {\n mkdirSync(dirname(filePath), { recursive: true });\n const tmpPath = `${filePath}.${process.pid}.tmp`;\n writeFileSync(tmpPath, `${JSON.stringify(raw, null, 2)}\\n`, \"utf-8\");\n renameSync(tmpPath, filePath);\n}\n\nfunction getServersObject(raw: Record<string, unknown>): Record<string, ServerEntry> {\n const existing = raw.mcpServers ?? raw[\"mcp-servers\"] ?? {};\n if (!existing || typeof existing !== \"object\" || Array.isArray(existing)) {\n return {};\n }\n return existing as Record<string, ServerEntry>;\n}\n\nfunction setServersObject(raw: Record<string, unknown>, servers: Record<string, ServerEntry>): void {\n delete raw[\"mcp-servers\"];\n raw.mcpServers = servers;\n}\n\nfunction isRepoPromptServer(name: string, entry: ServerEntry): boolean {\n const normalizedName = name.toLowerCase();\n if (normalizedName.includes(\"repoprompt\") || normalizedName === \"rp\") {\n return true;\n }\n\n const command = entry.command?.toLowerCase() ?? \"\";\n if (command.includes(\"repoprompt\") || command.includes(\"rp-mcp\") || command.endsWith(\"repoprompt_cli\")) {\n return true;\n }\n\n return (entry.args ?? []).some((arg) => typeof arg === \"string\" && arg.toLowerCase().includes(\"repoprompt\"));\n}\n\nfunction findProjectRoot(cwd = process.cwd()): string | null {\n let current = resolve(cwd);\n while (true) {\n if (\n existsSync(join(current, \".git\"))\n || existsSync(join(current, \"package.json\"))\n || existsSync(join(current, PROJECT_CONFIG_NAME))\n || existsSync(join(current, \".pi\"))\n || existsSync(join(current, \".lunr\")) // lunr: lunr's project config dir is also a root marker\n ) {\n return current;\n }\n\n const parent = dirname(current);\n if (parent === current) return null;\n current = parent;\n }\n}\n\nfunction buildRepoPromptEntry(executablePath: string): ServerEntry {\n return {\n command: executablePath,\n args: [],\n lifecycle: \"lazy\",\n };\n}\n\nfunction detectRepoPrompt(summary: Omit<McpDiscoverySummary, \"fingerprint\" | \"repoPrompt\">, cwd = process.cwd()): RepoPromptDiscovery {\n for (const source of summary.sources) {\n if (source.kind !== \"shared\" || source.serverCount === 0) continue;\n const config = readValidatedConfig(source.path, `MCP config from ${source.path}`);\n if (!config) continue;\n for (const [name, entry] of Object.entries(config.mcpServers)) {\n if (isRepoPromptServer(name, entry)) {\n return { configured: true, configuredPath: source.path };\n }\n }\n }\n\n const executablePath = REPOPROMPT_BINARY_CANDIDATES.find((candidate) => existsSync(candidate));\n if (!executablePath) {\n return { configured: false };\n }\n\n const projectRoot = findProjectRoot(cwd);\n const targetPath = projectRoot ? join(projectRoot, PROJECT_CONFIG_NAME) : GENERIC_GLOBAL_CONFIG_PATH;\n return {\n configured: false,\n executablePath,\n targetPath,\n serverName: \"repoprompt\",\n entry: buildRepoPromptEntry(executablePath),\n };\n}\n\nexport function previewCompatibilityImports(importKinds: ImportKind[], overridePath?: string): ConfigWritePreview {\n const targetPath = getPiGlobalConfigPath(overridePath);\n const raw = readRawConfigObject(targetPath);\n const currentImports = Array.isArray(raw.imports) ? raw.imports.filter((value): value is ImportKind => typeof value === \"string\") : [];\n const merged = [...new Set([...currentImports, ...importKinds])];\n const nextRaw = { ...raw, imports: merged };\n setServersObject(nextRaw, getServersObject(nextRaw));\n return buildConfigWritePreview(targetPath, nextRaw);\n}\n\nexport function ensureCompatibilityImports(importKinds: ImportKind[], overridePath?: string): { path: string; added: ImportKind[] } {\n const targetPath = getPiGlobalConfigPath(overridePath);\n const raw = readRawConfigObject(targetPath);\n const currentImports = Array.isArray(raw.imports) ? raw.imports.filter((value): value is ImportKind => typeof value === \"string\") : [];\n const merged = [...new Set([...currentImports, ...importKinds])];\n const added = merged.filter((kind) => !currentImports.includes(kind));\n if (added.length === 0) {\n return { path: targetPath, added: [] };\n }\n\n raw.imports = merged;\n const servers = getServersObject(raw);\n setServersObject(raw, servers);\n writeRawConfigObject(targetPath, raw);\n return { path: targetPath, added };\n}\n\nexport function buildStarterProjectConfig(): McpConfig {\n return {\n mcpServers: {},\n };\n}\n\nexport function previewStarterProjectConfig(cwd = process.cwd()): ConfigWritePreview {\n const targetPath = getProjectConfigPath(cwd);\n const nextRaw = { mcpServers: buildStarterProjectConfig().mcpServers };\n return buildConfigWritePreview(targetPath, nextRaw);\n}\n\nexport function writeStarterProjectConfig(cwd = process.cwd()): string {\n const targetPath = getProjectConfigPath(cwd);\n const raw = { mcpServers: buildStarterProjectConfig().mcpServers };\n writeRawConfigObject(targetPath, raw);\n return targetPath;\n}\n\nexport function previewSharedServerEntry(filePath: string, serverName: string, entry: ServerEntry): ConfigWritePreview {\n const raw = readRawConfigObject(filePath);\n const nextRaw = { ...raw };\n const servers = getServersObject(nextRaw);\n servers[serverName] = entry;\n setServersObject(nextRaw, servers);\n return buildConfigWritePreview(filePath, nextRaw);\n}\n\nexport function writeSharedServerEntry(filePath: string, serverName: string, entry: ServerEntry): string {\n const raw = readRawConfigObject(filePath);\n const servers = getServersObject(raw);\n servers[serverName] = entry;\n setServersObject(raw, servers);\n writeRawConfigObject(filePath, raw);\n return filePath;\n}\n\nexport function getServerProvenance(overridePath?: string, cwd = process.cwd()): Map<string, ServerProvenance> {\n const provenance = new Map<string, ServerProvenance>();\n const userPath = getPiGlobalConfigPath(overridePath);\n\n for (const source of getConfigSources(overridePath, cwd)) {\n if (source.scope === \"project\" && !projectTrusted) continue;\n const loaded = readValidatedConfig(source.readPath, `MCP config from ${source.readPath}`);\n if (!loaded) continue;\n\n if (loaded.imports?.length) {\n for (const importKind of loaded.imports) {\n const importPath = resolveImportPath(importKind, cwd);\n if (!importPath) continue;\n\n try {\n const imported = JSON.parse(readFileSync(importPath, \"utf-8\"));\n const servers = extractServers(imported, importKind);\n for (const name of Object.keys(servers)) {\n if (!provenance.has(name)) {\n provenance.set(name, { path: userPath, kind: \"import\", importKind });\n }\n }\n } catch {}\n }\n }\n\n for (const name of Object.keys(loaded.mcpServers)) {\n provenance.set(name, {\n path: source.writePath,\n kind: source.kind,\n importKind: source.importKind,\n });\n }\n }\n\n return provenance;\n}\n\nexport function writeDirectToolsConfig(\n changes: Map<string, true | string[] | false>,\n provenance: Map<string, ServerProvenance>,\n fullConfig: McpConfig,\n): void {\n const byPath = new Map<string, { name: string; value: true | string[] | false; prov: ServerProvenance }[]>();\n\n for (const [serverName, value] of changes) {\n const prov = provenance.get(serverName);\n if (!prov) continue;\n\n const targetPath = prov.path;\n\n if (!byPath.has(targetPath)) byPath.set(targetPath, []);\n byPath.get(targetPath)!.push({ name: serverName, value, prov });\n }\n\n for (const [filePath, entries] of byPath) {\n const raw = readRawConfigObject(filePath);\n const servers = getServersObject(raw);\n\n for (const { name, value, prov } of entries) {\n if (prov.kind === \"import\") {\n const fullDef = fullConfig.mcpServers[name];\n if (fullDef) {\n servers[name] = { ...fullDef, directTools: value };\n }\n } else if (servers[name]) {\n servers[name] = { ...servers[name], directTools: value };\n }\n }\n\n setServersObject(raw, servers);\n writeRawConfigObject(filePath, raw);\n }\n}\n"]}
@@ -114,13 +114,15 @@ export function getMcpDiscoverySummary(overridePath, cwd = process.cwd()) {
114
114
  repoPrompt: detectRepoPrompt(summaryWithoutRepoPrompt, cwd),
115
115
  };
116
116
  }
117
- export function loadMcpConfig(overridePath, cwd = process.cwd()) {
117
+ export function loadMcpConfig(overridePath, cwd = process.cwd(), projectTrusted = false) {
118
118
  let config = { mcpServers: {} };
119
119
  for (const source of getConfigSources(overridePath, cwd)) {
120
+ if (source.scope === "project" && !projectTrusted)
121
+ continue;
120
122
  const loaded = readValidatedConfig(source.readPath, `MCP config from ${source.readPath}`);
121
123
  if (!loaded)
122
124
  continue;
123
- config = mergeConfigs(config, expandImports(loaded, cwd));
125
+ config = mergeConfigs(config, expandImports(loaded, cwd, projectTrusted));
124
126
  }
125
127
  return config;
126
128
  }
@@ -195,12 +197,12 @@ function mergeImports(left, right) {
195
197
  return undefined;
196
198
  return [...new Set(merged)];
197
199
  }
198
- function expandImports(config, cwd = process.cwd()) {
200
+ function expandImports(config, cwd = process.cwd(), projectTrusted = false) {
199
201
  if (!config.imports?.length)
200
202
  return config;
201
203
  const importedServers = {};
202
204
  for (const importKind of config.imports) {
203
- const importPath = resolveImportPath(importKind, cwd);
205
+ const importPath = resolveImportPath(importKind, cwd, projectTrusted);
204
206
  if (!importPath)
205
207
  continue;
206
208
  try {
@@ -222,9 +224,11 @@ function expandImports(config, cwd = process.cwd()) {
222
224
  mcpServers: mergeServerMaps(importedServers, config.mcpServers),
223
225
  };
224
226
  }
225
- function resolveImportPath(importKind, cwd = process.cwd()) {
227
+ function resolveImportPath(importKind, cwd = process.cwd(), projectTrusted = true) {
226
228
  const candidates = IMPORT_PATHS[importKind] ?? [];
227
229
  for (const candidate of candidates) {
230
+ if (candidate.startsWith(".") && !projectTrusted)
231
+ continue;
228
232
  const fullPath = candidate.startsWith(".") ? resolve(cwd, candidate) : candidate;
229
233
  if (existsSync(fullPath)) {
230
234
  return fullPath;
@@ -495,6 +499,8 @@ export function getServerProvenance(overridePath, cwd = process.cwd()) {
495
499
  const provenance = new Map();
496
500
  const userPath = getPiGlobalConfigPath(overridePath);
497
501
  for (const source of getConfigSources(overridePath, cwd)) {
502
+ if (source.scope === "project" && !projectTrusted)
503
+ continue;
498
504
  const loaded = readValidatedConfig(source.readPath, `MCP config from ${source.readPath}`);
499
505
  if (!loaded)
500
506
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/config.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,iDAAiD;AACjD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,0BAA0B,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AACjF,MAAM,mBAAmB,GAAG,WAAW,CAAC;AACxC,gFAAgF;AAChF,8EAA8E;AAC9E,+EAA+E;AAC/E,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AAClD,MAAM,6BAA6B,GAAG,cAAc,CAAC;AACrD,MAAM,4BAA4B,GAAG;IACnC,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,gBAAgB,CAAC;IAC/C,6DAA6D;CAC9D,CAAC;AAEF,MAAM,YAAY,GAAiC;IACjD,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAChD,aAAa,EAAE;QACb,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,4BAA4B,CAAC;KACzD;IACD,gBAAgB,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;IAC7G,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IACjD,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,EAAE,CAAC,kBAAkB,CAAC;CAC7B,CAAC;AAiEF,MAAM,UAAU,qBAAqB,CAAC,YAAqB,EAAU;IACnE,OAAO,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AAAA,CACxE;AAED,MAAM,UAAU,0BAA0B,GAAW;IACnD,OAAO,0BAA0B,CAAC;AAAA,CACnC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAU;IAChE,OAAO,OAAO,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;AAAA,CAC1C;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAU;IAClE,OAAO,OAAO,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;AAAA,CAC/C;AAED,mFAAmF;AACnF,oCAAoC;AACpC,MAAM,UAAU,0BAA0B,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAU;IACtE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,6BAA6B,CAAC,CAAC;IAC/D,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;AAAA,CACvD;AAED,MAAM,UAAU,uBAAuB,CAAC,YAAqB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAyB;IACzG,OAAO,gBAAgB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1D,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,QAAQ;QACrB,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;KACpC,CAAC,CAAC,CAAC;AAAA,CACL;AAED,MAAM,UAAU,0BAA0B,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAA4B;IACxF,MAAM,UAAU,GAA6B,EAAE,CAAC;IAEhD,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAiB,EAAE,CAAC;QACnE,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AAAA,CACnB;AAED,MAAM,UAAU,sBAAsB,CAAC,YAAqB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAuB;IACtG,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1F,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;YACnC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;YACrC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAChC,CAAC;IAAA,CACnC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAkB;SACxD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO;YACL,IAAI;YACJ,IAAI;YACJ,WAAW,EAAE,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC;SAChB,CAAC;IAAA,CACjC,CAAC;SACD,MAAM,CAAC,CAAC,KAAK,EAAgC,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAEnE,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACtF,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IACtG,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IACnG,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1F,MAAM,YAAY,GAAG,gBAAgB,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,mBAAmB,CAAC;IAEnH,MAAM,wBAAwB,GAAG;QAC/B,OAAO;QACP,OAAO;QACP,YAAY;QACZ,mBAAmB;QACnB,gBAAgB;QAChB,iBAAiB;QACjB,gBAAgB;KACjB,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAChF,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;KAC7E,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,wBAAwB;QAC3B,WAAW;QACX,UAAU,EAAE,gBAAgB,CAAC,wBAAwB,EAAE,GAAG,CAAC;KAC5D,CAAC;AAAA,CACH;AAED,MAAM,UAAU,aAAa,CAAC,YAAqB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAa;IACnF,IAAI,MAAM,GAAc,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAE3C,KAAK,MAAM,MAAM,IAAI,gBAAgB,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,MAAM,CAAC;AAAA,CACf;AAED,SAAS,gBAAgB,CAAC,YAAqB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAsB;IACxF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,iBAAiB,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,IAAI,0BAA0B,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,0BAA0B;YACjC,QAAQ,EAAE,0BAA0B;YACpC,SAAS,EAAE,QAAQ;YACnB,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,mBAAmB;YAC/B,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,IAAI,CAAC;QACX,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,oBAAoB;QAC3B,QAAQ,EAAE,QAAQ;QAClB,SAAS,EAAE,QAAQ;QACnB,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAC;IAEH,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,gBAAgB;YACpB,KAAK,EAAE,sBAAsB;YAC7B,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,WAAW;YACtB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,YAAY;YAChB,KAAK,EAAE,qBAAqB;YAC5B,QAAQ,EAAE,iBAAiB;YAC3B,SAAS,EAAE,aAAa;YACxB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AAAA,CAChB;AAED,SAAS,YAAY,CAAC,IAAe,EAAE,IAAe,EAAa;IACjE,OAAO;QACL,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;QAC7D,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;QACjD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ;KACjF,CAAC;AAAA,CACH;AAED,SAAS,eAAe,CACtB,IAAiC,EACjC,IAAiC,EACJ;IAC7B,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,MAAM,CAAC;AAAA,CACf;AAED,SAAS,YAAY,CAAC,IAA8B,EAAE,KAA+B,EAA4B;IAC/G,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,CAC7B;AAED,SAAS,aAAa,CAAC,MAAiB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAa;IACxE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM;QAAE,OAAO,MAAM,CAAC;IAE3C,MAAM,eAAe,GAAgC,EAAE,CAAC;IACxD,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU;YAAE,SAAS;QAE1B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/D,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACrD,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3B,eAAe,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,oCAAoC,UAAU,GAAG,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,eAAe,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC;KAChE,CAAC;AAAA,CACH;AAED,SAAS,iBAAiB,CAAC,UAAsB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAiB;IACrF,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAClD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjF,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACb;AAED,SAAS,oBAAoB,CAAC,UAAsB,EAAE,IAAY,EAAU;IAC1E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AAAA,CACF;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,KAAa,EAAoB;IAC1E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,kBAAkB,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;AAAA,CACF;AAED,SAAS,cAAc,CAAC,GAAY,EAAa;IAC/C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IAE3D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9E,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,UAAU,EAAE,OAAsC;QAClD,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,OAAwB,CAAC,CAAC,CAAC,SAAS;QAC/E,QAAQ,EAAE,GAAG,CAAC,QAAmC;KAClD,CAAC;AAAA,CACH;AAED,SAAS,cAAc,CAAC,MAAe,EAAE,IAAgB,EAA+B;IACtF,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAErD,MAAM,GAAG,GAAG,MAAiC,CAAC;IAE9C,IAAI,OAAgB,CAAC;IACrB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,gBAAgB,CAAC;QACtB,KAAK,aAAa,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC;YACzB,MAAM;QACR,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;YAC/C,MAAM;QACR;YACE,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACtE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,OAAsC,CAAC;AAAA,CAC/C;AAED,SAAS,kBAAkB,CAAC,GAA4B,EAAU;IAChE,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAAA,CAC5C;AAED,SAAS,gBAAgB,CAAC,UAAkB,EAAE,SAAiB,EAAU;IACvE,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,cAAc,CAAC;IAEpD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;IAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAS,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpF,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;gBAChC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;gBACvB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAa,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACzB;AAED,SAAS,uBAAuB,CAAC,QAAgB,EAAE,OAAgC,EAAsB;IACvG,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO;QACP,OAAO,EAAE,UAAU,KAAK,SAAS;QACjC,UAAU;QACV,SAAS;QACT,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC;KAClD,CAAC;AAAA,CACH;AAED,SAAS,mBAAmB,CAAC,QAAgB,EAA2B;IACtE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACxD,OAAO,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAA8B,CAAC,CAAC,CAAC,EAAE,CAAC;IACrG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AAAA,CACF;AAED,SAAS,oBAAoB,CAAC,QAAgB,EAAE,GAA4B,EAAQ;IAClF,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IACjD,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAAA,CAC/B;AAED,SAAS,gBAAgB,CAAC,GAA4B,EAA+B;IACnF,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzE,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,QAAuC,CAAC;AAAA,CAChD;AAED,SAAS,gBAAgB,CAAC,GAA4B,EAAE,OAAoC,EAAQ;IAClG,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;IAC1B,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC;AAAA,CAC1B;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,KAAkB,EAAW;IACrE,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC1C,IAAI,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACnD,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvG,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;AAAA,CAC9G;AAED,SAAS,eAAe,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAiB;IAC3D,IAAI,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,IAAI,EAAE,CAAC;QACZ,IACE,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;eAC9B,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;eACzC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;eAC9C,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;eAChC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,wDAAwD;UAC9F,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;AAAA,CACF;AAED,SAAS,oBAAoB,CAAC,cAAsB,EAAe;IACjE,OAAO;QACL,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;KAClB,CAAC;AAAA,CACH;AAED,SAAS,gBAAgB,CAAC,OAAgE,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAuB;IACpI,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,KAAK,CAAC;YAAE,SAAS;QACnE,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,mBAAmB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9D,IAAI,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;gBACpC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/F,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC;IACrG,OAAO;QACL,UAAU,EAAE,KAAK;QACjB,cAAc;QACd,UAAU;QACV,UAAU,EAAE,YAAY;QACxB,KAAK,EAAE,oBAAoB,CAAC,cAAc,CAAC;KAC5C,CAAC;AAAA,CACH;AAED,MAAM,UAAU,2BAA2B,CAAC,WAAyB,EAAE,YAAqB,EAAsB;IAChH,MAAM,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAuB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvI,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC5C,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,OAAO,uBAAuB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAAA,CACrD;AAED,MAAM,UAAU,0BAA0B,CAAC,WAAyB,EAAE,YAAqB,EAAyC;IAClI,MAAM,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAuB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvI,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACzC,CAAC;IAED,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;IACrB,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/B,oBAAoB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACtC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAAA,CACpC;AAED,MAAM,UAAU,yBAAyB,GAAc;IACrD,OAAO;QACL,UAAU,EAAE,EAAE;KACf,CAAC;AAAA,CACH;AAED,MAAM,UAAU,2BAA2B,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAsB;IACnF,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,EAAE,UAAU,EAAE,yBAAyB,EAAE,CAAC,UAAU,EAAE,CAAC;IACvE,OAAO,uBAAuB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAAA,CACrD;AAED,MAAM,UAAU,yBAAyB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAU;IACrE,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,EAAE,UAAU,EAAE,yBAAyB,EAAE,CAAC,UAAU,EAAE,CAAC;IACnE,oBAAoB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACtC,OAAO,UAAU,CAAC;AAAA,CACnB;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAgB,EAAE,UAAkB,EAAE,KAAkB,EAAsB;IACrH,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;IAC5B,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAAA,CACnD;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,UAAkB,EAAE,KAAkB,EAAU;IACvG,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;IAC5B,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/B,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACpC,OAAO,QAAQ,CAAC;AAAA,CACjB;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAqB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAiC;IAC7G,MAAM,UAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;IACvD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAErD,KAAK,MAAM,MAAM,IAAI,gBAAgB,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;YAC3B,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACxC,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;gBACtD,IAAI,CAAC,UAAU;oBAAE,SAAS;gBAE1B,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;oBAC/D,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;oBACrD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;wBACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;4BAC1B,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;wBACvE,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;QACH,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAClD,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE;gBACnB,IAAI,EAAE,MAAM,CAAC,SAAS;gBACtB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AAAA,CACnB;AAED,MAAM,UAAU,sBAAsB,CACpC,OAA6C,EAC7C,UAAyC,EACzC,UAAqB,EACf;IACN,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsF,CAAC;IAE7G,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;QAE7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAEtC,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;gBACrD,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC/B,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;AAAA,CACF","sourcesContent":["// @ts-nocheck\n// config.ts - Config loading with import support\nimport { existsSync, readFileSync, writeFileSync, mkdirSync, renameSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { getAgentPath } from \"./agent-dir.ts\";\nimport type { McpConfig, ServerEntry, McpSettings, ImportKind, ServerProvenance } from \"./types.ts\";\n\nconst GENERIC_GLOBAL_CONFIG_PATH = join(homedir(), \".config\", \"mcp\", \"mcp.json\");\nconst PROJECT_CONFIG_NAME = \".mcp.json\";\n// lunr: project-scope MCP config lives at .lunr/mcp.json (lunr's project config\n// dir); .pi/mcp.json is kept only as a back-compat read fallback for projects\n// previously configured under upstream pi. Writes always go to .lunr/mcp.json.\nconst PROJECT_LUNR_CONFIG_NAME = \".lunr/mcp.json\";\nconst LEGACY_PROJECT_PI_CONFIG_NAME = \".pi/mcp.json\";\nconst REPOPROMPT_BINARY_CANDIDATES = [\n join(homedir(), \"RepoPrompt\", \"repoprompt_cli\"),\n \"/Applications/Repo Prompt.app/Contents/MacOS/repoprompt-mcp\",\n];\n\nconst IMPORT_PATHS: Record<ImportKind, string[]> = {\n cursor: [join(homedir(), \".cursor\", \"mcp.json\")],\n \"claude-code\": [\n join(homedir(), \".claude\", \"mcp.json\"),\n join(homedir(), \".claude.json\"),\n join(homedir(), \".claude\", \"claude_desktop_config.json\"),\n ],\n \"claude-desktop\": [join(homedir(), \"Library\", \"Application Support\", \"Claude\", \"claude_desktop_config.json\")],\n codex: [join(homedir(), \".codex\", \"config.json\")],\n windsurf: [join(homedir(), \".windsurf\", \"mcp.json\")],\n vscode: [\".vscode/mcp.json\"],\n};\n\ninterface ConfigSourceSpec {\n id: \"shared-global\" | \"pi-global\" | \"shared-project\" | \"pi-project\";\n label: string;\n readPath: string;\n writePath: string;\n kind: \"user\" | \"project\" | \"import\";\n importKind?: string;\n shared: boolean;\n scope: \"global\" | \"project\";\n}\n\nexport interface ConfigDiscoveryPath {\n label: string;\n path: string;\n exists: boolean;\n}\n\nexport interface DiscoveredImportConfig {\n kind: ImportKind;\n path: string;\n}\n\nexport interface ConfigDiscoverySource extends ConfigDiscoveryPath {\n id: ConfigSourceSpec[\"id\"];\n scope: ConfigSourceSpec[\"scope\"];\n kind: \"shared\" | \"pi\";\n serverCount: number;\n}\n\nexport interface ImportConfigSummary extends DiscoveredImportConfig {\n serverCount: number;\n}\n\nexport interface RepoPromptDiscovery {\n configured: boolean;\n configuredPath?: string;\n executablePath?: string;\n targetPath?: string;\n serverName?: string;\n entry?: ServerEntry;\n}\n\nexport interface McpDiscoverySummary {\n sources: ConfigDiscoverySource[];\n imports: ImportConfigSummary[];\n hasAnyConfig: boolean;\n hasAnyDetectedPaths: boolean;\n hasSharedServers: boolean;\n hasPiOwnedServers: boolean;\n totalServerCount: number;\n fingerprint: string;\n repoPrompt: RepoPromptDiscovery;\n}\n\nexport interface ConfigWritePreview {\n path: string;\n existed: boolean;\n changed: boolean;\n beforeText: string;\n afterText: string;\n diffText: string;\n}\n\nexport function getPiGlobalConfigPath(overridePath?: string): string {\n return overridePath ? resolve(overridePath) : getAgentPath(\"mcp.json\");\n}\n\nexport function getGenericGlobalConfigPath(): string {\n return GENERIC_GLOBAL_CONFIG_PATH;\n}\n\nexport function getProjectConfigPath(cwd = process.cwd()): string {\n return resolve(cwd, PROJECT_CONFIG_NAME);\n}\n\nexport function getProjectPiConfigPath(cwd = process.cwd()): string {\n return resolve(cwd, PROJECT_LUNR_CONFIG_NAME);\n}\n\n// lunr: read path prefers .lunr/mcp.json and falls back to the legacy .pi/mcp.json\n// when only the pi-era file exists.\nexport function getProjectPiConfigReadPath(cwd = process.cwd()): string {\n const lunrPath = getProjectPiConfigPath(cwd);\n if (existsSync(lunrPath)) return lunrPath;\n const legacyPath = resolve(cwd, LEGACY_PROJECT_PI_CONFIG_NAME);\n return existsSync(legacyPath) ? legacyPath : lunrPath;\n}\n\nexport function getConfigDiscoveryPaths(overridePath?: string, cwd = process.cwd()): ConfigDiscoveryPath[] {\n return getConfigSources(overridePath, cwd).map((source) => ({\n label: source.label,\n path: source.readPath,\n exists: existsSync(source.readPath),\n }));\n}\n\nexport function findAvailableImportConfigs(cwd = process.cwd()): DiscoveredImportConfig[] {\n const discovered: DiscoveredImportConfig[] = [];\n\n for (const importKind of Object.keys(IMPORT_PATHS) as ImportKind[]) {\n const importPath = resolveImportPath(importKind, cwd);\n if (importPath) {\n discovered.push({ kind: importKind, path: importPath });\n }\n }\n\n return discovered;\n}\n\nexport function getMcpDiscoverySummary(overridePath?: string, cwd = process.cwd()): McpDiscoverySummary {\n const sources = getConfigSources(overridePath, cwd).map((source) => {\n const loaded = readValidatedConfig(source.readPath, `MCP config from ${source.readPath}`);\n return {\n id: source.id,\n label: source.label,\n path: source.readPath,\n exists: existsSync(source.readPath),\n scope: source.scope,\n kind: source.shared ? \"shared\" : \"pi\",\n serverCount: loaded ? Object.keys(loaded.mcpServers).length : 0,\n } satisfies ConfigDiscoverySource;\n });\n\n const imports = (Object.keys(IMPORT_PATHS) as ImportKind[])\n .map((kind) => {\n const path = resolveImportPath(kind, cwd);\n if (!path) return null;\n return {\n kind,\n path,\n serverCount: getImportServerCount(kind, path),\n } satisfies ImportConfigSummary;\n })\n .filter((value): value is ImportConfigSummary => value !== null);\n\n const totalServerCount = sources.reduce((sum, source) => sum + source.serverCount, 0);\n const hasSharedServers = sources.some((source) => source.kind === \"shared\" && source.serverCount > 0);\n const hasPiOwnedServers = sources.some((source) => source.kind === \"pi\" && source.serverCount > 0);\n const hasAnyDetectedPaths = sources.some((source) => source.exists) || imports.length > 0;\n const hasAnyConfig = totalServerCount > 0 || imports.some((entry) => entry.serverCount > 0) || hasAnyDetectedPaths;\n\n const summaryWithoutRepoPrompt = {\n sources,\n imports,\n hasAnyConfig,\n hasAnyDetectedPaths,\n hasSharedServers,\n hasPiOwnedServers,\n totalServerCount,\n };\n\n const fingerprint = JSON.stringify({\n sources: sources.map((source) => [source.id, source.exists, source.serverCount]),\n imports: imports.map((entry) => [entry.kind, entry.path, entry.serverCount]),\n });\n\n return {\n ...summaryWithoutRepoPrompt,\n fingerprint,\n repoPrompt: detectRepoPrompt(summaryWithoutRepoPrompt, cwd),\n };\n}\n\nexport function loadMcpConfig(overridePath?: string, cwd = process.cwd()): McpConfig {\n let config: McpConfig = { mcpServers: {} };\n\n for (const source of getConfigSources(overridePath, cwd)) {\n const loaded = readValidatedConfig(source.readPath, `MCP config from ${source.readPath}`);\n if (!loaded) continue;\n config = mergeConfigs(config, expandImports(loaded, cwd));\n }\n\n return config;\n}\n\nfunction getConfigSources(overridePath?: string, cwd = process.cwd()): ConfigSourceSpec[] {\n const userPath = getPiGlobalConfigPath(overridePath);\n const projectPath = getProjectConfigPath(cwd);\n const projectPiPath = getProjectPiConfigPath(cwd);\n const projectPiReadPath = getProjectPiConfigReadPath(cwd);\n const sources: ConfigSourceSpec[] = [];\n\n if (GENERIC_GLOBAL_CONFIG_PATH !== userPath) {\n sources.push({\n id: \"shared-global\",\n label: \"user-global standard MCP\",\n readPath: GENERIC_GLOBAL_CONFIG_PATH,\n writePath: userPath,\n kind: \"import\",\n importKind: \"global MCP config\",\n shared: true,\n scope: \"global\",\n });\n }\n\n sources.push({\n id: \"pi-global\",\n label: \"Pi global override\",\n readPath: userPath,\n writePath: userPath,\n kind: \"user\",\n shared: false,\n scope: \"global\",\n });\n\n if (projectPath !== userPath) {\n sources.push({\n id: \"shared-project\",\n label: \"project standard MCP\",\n readPath: projectPath,\n writePath: projectPath,\n kind: \"project\",\n shared: true,\n scope: \"project\",\n });\n }\n\n if (projectPiPath !== userPath && projectPiPath !== projectPath) {\n sources.push({\n id: \"pi-project\",\n label: \"project Pi override\",\n readPath: projectPiReadPath,\n writePath: projectPiPath,\n kind: \"project\",\n shared: false,\n scope: \"project\",\n });\n }\n\n return sources;\n}\n\nfunction mergeConfigs(base: McpConfig, next: McpConfig): McpConfig {\n return {\n mcpServers: mergeServerMaps(base.mcpServers, next.mcpServers),\n imports: mergeImports(base.imports, next.imports),\n settings: next.settings ? { ...base.settings, ...next.settings } : base.settings,\n };\n}\n\nfunction mergeServerMaps(\n base: Record<string, ServerEntry>,\n next: Record<string, ServerEntry>,\n): Record<string, ServerEntry> {\n const merged = { ...base };\n for (const [name, definition] of Object.entries(next)) {\n merged[name] = { ...(merged[name] ?? {}), ...definition };\n }\n return merged;\n}\n\nfunction mergeImports(left: ImportKind[] | undefined, right: ImportKind[] | undefined): ImportKind[] | undefined {\n const merged = [...(left ?? []), ...(right ?? [])];\n if (merged.length === 0) return undefined;\n return [...new Set(merged)];\n}\n\nfunction expandImports(config: McpConfig, cwd = process.cwd()): McpConfig {\n if (!config.imports?.length) return config;\n\n const importedServers: Record<string, ServerEntry> = {};\n for (const importKind of config.imports) {\n const importPath = resolveImportPath(importKind, cwd);\n if (!importPath) continue;\n\n try {\n const imported = JSON.parse(readFileSync(importPath, \"utf-8\"));\n const servers = extractServers(imported, importKind);\n for (const [name, definition] of Object.entries(servers)) {\n if (!importedServers[name]) {\n importedServers[name] = definition;\n }\n }\n } catch (error) {\n console.warn(`Failed to import MCP config from ${importKind}:`, error);\n }\n }\n\n return {\n imports: config.imports,\n settings: config.settings,\n mcpServers: mergeServerMaps(importedServers, config.mcpServers),\n };\n}\n\nfunction resolveImportPath(importKind: ImportKind, cwd = process.cwd()): string | null {\n const candidates = IMPORT_PATHS[importKind] ?? [];\n for (const candidate of candidates) {\n const fullPath = candidate.startsWith(\".\") ? resolve(cwd, candidate) : candidate;\n if (existsSync(fullPath)) {\n return fullPath;\n }\n }\n return null;\n}\n\nfunction getImportServerCount(importKind: ImportKind, path: string): number {\n try {\n const raw = JSON.parse(readFileSync(path, \"utf-8\"));\n return Object.keys(extractServers(raw, importKind)).length;\n } catch {\n return 0;\n }\n}\n\nfunction readValidatedConfig(path: string, label: string): McpConfig | null {\n if (!existsSync(path)) return null;\n\n try {\n return validateConfig(JSON.parse(readFileSync(path, \"utf-8\")));\n } catch (error) {\n console.warn(`Failed to load ${label}:`, error);\n return null;\n }\n}\n\nfunction validateConfig(raw: unknown): McpConfig {\n if (!raw || typeof raw !== \"object\") {\n return { mcpServers: {} };\n }\n\n const obj = raw as Record<string, unknown>;\n const servers = obj.mcpServers ?? obj[\"mcp-servers\"] ?? {};\n\n if (typeof servers !== \"object\" || servers === null || Array.isArray(servers)) {\n return { mcpServers: {} };\n }\n\n return {\n mcpServers: servers as Record<string, ServerEntry>,\n imports: Array.isArray(obj.imports) ? (obj.imports as ImportKind[]) : undefined,\n settings: obj.settings as McpSettings | undefined,\n };\n}\n\nfunction extractServers(config: unknown, kind: ImportKind): Record<string, ServerEntry> {\n if (!config || typeof config !== \"object\") return {};\n\n const obj = config as Record<string, unknown>;\n\n let servers: unknown;\n switch (kind) {\n case \"claude-desktop\":\n case \"claude-code\":\n case \"codex\":\n servers = obj.mcpServers;\n break;\n case \"cursor\":\n case \"windsurf\":\n case \"vscode\":\n servers = obj.mcpServers ?? obj[\"mcp-servers\"];\n break;\n default:\n return {};\n }\n\n if (!servers || typeof servers !== \"object\" || Array.isArray(servers)) {\n return {};\n }\n\n return servers as Record<string, ServerEntry>;\n}\n\nfunction serializeRawConfig(raw: Record<string, unknown>): string {\n return `${JSON.stringify(raw, null, 2)}\\n`;\n}\n\nfunction buildUnifiedDiff(beforeText: string, afterText: string): string {\n if (beforeText === afterText) return \"(no changes)\";\n\n const before = beforeText.split(\"\\n\");\n const after = afterText.split(\"\\n\");\n const rows = before.length;\n const cols = after.length;\n const lcs = Array.from({ length: rows + 1 }, () => Array<number>(cols + 1).fill(0));\n\n for (let i = rows - 1; i >= 0; i--) {\n for (let j = cols - 1; j >= 0; j--) {\n lcs[i][j] = before[i] === after[j]\n ? lcs[i + 1][j + 1] + 1\n : Math.max(lcs[i + 1][j], lcs[i][j + 1]);\n }\n }\n\n const lines: string[] = [\"--- before\", \"+++ after\"];\n let i = 0;\n let j = 0;\n while (i < rows || j < cols) {\n if (i < rows && j < cols && before[i] === after[j]) {\n lines.push(` ${before[i]}`);\n i++;\n j++;\n continue;\n }\n if (j < cols && (i === rows || lcs[i][j + 1] >= lcs[i + 1][j])) {\n lines.push(`+ ${after[j]}`);\n j++;\n continue;\n }\n if (i < rows) {\n lines.push(`- ${before[i]}`);\n i++;\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction buildConfigWritePreview(filePath: string, nextRaw: Record<string, unknown>): ConfigWritePreview {\n const existed = existsSync(filePath);\n const beforeRaw = readRawConfigObject(filePath);\n const beforeText = existed ? serializeRawConfig(beforeRaw) : \"\";\n const afterText = serializeRawConfig(nextRaw);\n return {\n path: filePath,\n existed,\n changed: beforeText !== afterText,\n beforeText,\n afterText,\n diffText: buildUnifiedDiff(beforeText, afterText),\n };\n}\n\nfunction readRawConfigObject(filePath: string): Record<string, unknown> {\n if (!existsSync(filePath)) return {};\n\n try {\n const raw = JSON.parse(readFileSync(filePath, \"utf-8\"));\n return raw && typeof raw === \"object\" && !Array.isArray(raw) ? raw as Record<string, unknown> : {};\n } catch {\n return {};\n }\n}\n\nfunction writeRawConfigObject(filePath: string, raw: Record<string, unknown>): void {\n mkdirSync(dirname(filePath), { recursive: true });\n const tmpPath = `${filePath}.${process.pid}.tmp`;\n writeFileSync(tmpPath, `${JSON.stringify(raw, null, 2)}\\n`, \"utf-8\");\n renameSync(tmpPath, filePath);\n}\n\nfunction getServersObject(raw: Record<string, unknown>): Record<string, ServerEntry> {\n const existing = raw.mcpServers ?? raw[\"mcp-servers\"] ?? {};\n if (!existing || typeof existing !== \"object\" || Array.isArray(existing)) {\n return {};\n }\n return existing as Record<string, ServerEntry>;\n}\n\nfunction setServersObject(raw: Record<string, unknown>, servers: Record<string, ServerEntry>): void {\n delete raw[\"mcp-servers\"];\n raw.mcpServers = servers;\n}\n\nfunction isRepoPromptServer(name: string, entry: ServerEntry): boolean {\n const normalizedName = name.toLowerCase();\n if (normalizedName.includes(\"repoprompt\") || normalizedName === \"rp\") {\n return true;\n }\n\n const command = entry.command?.toLowerCase() ?? \"\";\n if (command.includes(\"repoprompt\") || command.includes(\"rp-mcp\") || command.endsWith(\"repoprompt_cli\")) {\n return true;\n }\n\n return (entry.args ?? []).some((arg) => typeof arg === \"string\" && arg.toLowerCase().includes(\"repoprompt\"));\n}\n\nfunction findProjectRoot(cwd = process.cwd()): string | null {\n let current = resolve(cwd);\n while (true) {\n if (\n existsSync(join(current, \".git\"))\n || existsSync(join(current, \"package.json\"))\n || existsSync(join(current, PROJECT_CONFIG_NAME))\n || existsSync(join(current, \".pi\"))\n || existsSync(join(current, \".lunr\")) // lunr: lunr's project config dir is also a root marker\n ) {\n return current;\n }\n\n const parent = dirname(current);\n if (parent === current) return null;\n current = parent;\n }\n}\n\nfunction buildRepoPromptEntry(executablePath: string): ServerEntry {\n return {\n command: executablePath,\n args: [],\n lifecycle: \"lazy\",\n };\n}\n\nfunction detectRepoPrompt(summary: Omit<McpDiscoverySummary, \"fingerprint\" | \"repoPrompt\">, cwd = process.cwd()): RepoPromptDiscovery {\n for (const source of summary.sources) {\n if (source.kind !== \"shared\" || source.serverCount === 0) continue;\n const config = readValidatedConfig(source.path, `MCP config from ${source.path}`);\n if (!config) continue;\n for (const [name, entry] of Object.entries(config.mcpServers)) {\n if (isRepoPromptServer(name, entry)) {\n return { configured: true, configuredPath: source.path };\n }\n }\n }\n\n const executablePath = REPOPROMPT_BINARY_CANDIDATES.find((candidate) => existsSync(candidate));\n if (!executablePath) {\n return { configured: false };\n }\n\n const projectRoot = findProjectRoot(cwd);\n const targetPath = projectRoot ? join(projectRoot, PROJECT_CONFIG_NAME) : GENERIC_GLOBAL_CONFIG_PATH;\n return {\n configured: false,\n executablePath,\n targetPath,\n serverName: \"repoprompt\",\n entry: buildRepoPromptEntry(executablePath),\n };\n}\n\nexport function previewCompatibilityImports(importKinds: ImportKind[], overridePath?: string): ConfigWritePreview {\n const targetPath = getPiGlobalConfigPath(overridePath);\n const raw = readRawConfigObject(targetPath);\n const currentImports = Array.isArray(raw.imports) ? raw.imports.filter((value): value is ImportKind => typeof value === \"string\") : [];\n const merged = [...new Set([...currentImports, ...importKinds])];\n const nextRaw = { ...raw, imports: merged };\n setServersObject(nextRaw, getServersObject(nextRaw));\n return buildConfigWritePreview(targetPath, nextRaw);\n}\n\nexport function ensureCompatibilityImports(importKinds: ImportKind[], overridePath?: string): { path: string; added: ImportKind[] } {\n const targetPath = getPiGlobalConfigPath(overridePath);\n const raw = readRawConfigObject(targetPath);\n const currentImports = Array.isArray(raw.imports) ? raw.imports.filter((value): value is ImportKind => typeof value === \"string\") : [];\n const merged = [...new Set([...currentImports, ...importKinds])];\n const added = merged.filter((kind) => !currentImports.includes(kind));\n if (added.length === 0) {\n return { path: targetPath, added: [] };\n }\n\n raw.imports = merged;\n const servers = getServersObject(raw);\n setServersObject(raw, servers);\n writeRawConfigObject(targetPath, raw);\n return { path: targetPath, added };\n}\n\nexport function buildStarterProjectConfig(): McpConfig {\n return {\n mcpServers: {},\n };\n}\n\nexport function previewStarterProjectConfig(cwd = process.cwd()): ConfigWritePreview {\n const targetPath = getProjectConfigPath(cwd);\n const nextRaw = { mcpServers: buildStarterProjectConfig().mcpServers };\n return buildConfigWritePreview(targetPath, nextRaw);\n}\n\nexport function writeStarterProjectConfig(cwd = process.cwd()): string {\n const targetPath = getProjectConfigPath(cwd);\n const raw = { mcpServers: buildStarterProjectConfig().mcpServers };\n writeRawConfigObject(targetPath, raw);\n return targetPath;\n}\n\nexport function previewSharedServerEntry(filePath: string, serverName: string, entry: ServerEntry): ConfigWritePreview {\n const raw = readRawConfigObject(filePath);\n const nextRaw = { ...raw };\n const servers = getServersObject(nextRaw);\n servers[serverName] = entry;\n setServersObject(nextRaw, servers);\n return buildConfigWritePreview(filePath, nextRaw);\n}\n\nexport function writeSharedServerEntry(filePath: string, serverName: string, entry: ServerEntry): string {\n const raw = readRawConfigObject(filePath);\n const servers = getServersObject(raw);\n servers[serverName] = entry;\n setServersObject(raw, servers);\n writeRawConfigObject(filePath, raw);\n return filePath;\n}\n\nexport function getServerProvenance(overridePath?: string, cwd = process.cwd()): Map<string, ServerProvenance> {\n const provenance = new Map<string, ServerProvenance>();\n const userPath = getPiGlobalConfigPath(overridePath);\n\n for (const source of getConfigSources(overridePath, cwd)) {\n const loaded = readValidatedConfig(source.readPath, `MCP config from ${source.readPath}`);\n if (!loaded) continue;\n\n if (loaded.imports?.length) {\n for (const importKind of loaded.imports) {\n const importPath = resolveImportPath(importKind, cwd);\n if (!importPath) continue;\n\n try {\n const imported = JSON.parse(readFileSync(importPath, \"utf-8\"));\n const servers = extractServers(imported, importKind);\n for (const name of Object.keys(servers)) {\n if (!provenance.has(name)) {\n provenance.set(name, { path: userPath, kind: \"import\", importKind });\n }\n }\n } catch {}\n }\n }\n\n for (const name of Object.keys(loaded.mcpServers)) {\n provenance.set(name, {\n path: source.writePath,\n kind: source.kind,\n importKind: source.importKind,\n });\n }\n }\n\n return provenance;\n}\n\nexport function writeDirectToolsConfig(\n changes: Map<string, true | string[] | false>,\n provenance: Map<string, ServerProvenance>,\n fullConfig: McpConfig,\n): void {\n const byPath = new Map<string, { name: string; value: true | string[] | false; prov: ServerProvenance }[]>();\n\n for (const [serverName, value] of changes) {\n const prov = provenance.get(serverName);\n if (!prov) continue;\n\n const targetPath = prov.path;\n\n if (!byPath.has(targetPath)) byPath.set(targetPath, []);\n byPath.get(targetPath)!.push({ name: serverName, value, prov });\n }\n\n for (const [filePath, entries] of byPath) {\n const raw = readRawConfigObject(filePath);\n const servers = getServersObject(raw);\n\n for (const { name, value, prov } of entries) {\n if (prov.kind === \"import\") {\n const fullDef = fullConfig.mcpServers[name];\n if (fullDef) {\n servers[name] = { ...fullDef, directTools: value };\n }\n } else if (servers[name]) {\n servers[name] = { ...servers[name], directTools: value };\n }\n }\n\n setServersObject(raw, servers);\n writeRawConfigObject(filePath, raw);\n }\n}\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/config.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n// config.ts - Config loading with import support\nimport { existsSync, readFileSync, writeFileSync, mkdirSync, renameSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { getAgentPath } from \"./agent-dir.ts\";\nimport type { McpConfig, ServerEntry, McpSettings, ImportKind, ServerProvenance } from \"./types.ts\";\n\nconst GENERIC_GLOBAL_CONFIG_PATH = join(homedir(), \".config\", \"mcp\", \"mcp.json\");\nconst PROJECT_CONFIG_NAME = \".mcp.json\";\n// lunr: project-scope MCP config lives at .lunr/mcp.json (lunr's project config\n// dir); .pi/mcp.json is kept only as a back-compat read fallback for projects\n// previously configured under upstream pi. Writes always go to .lunr/mcp.json.\nconst PROJECT_LUNR_CONFIG_NAME = \".lunr/mcp.json\";\nconst LEGACY_PROJECT_PI_CONFIG_NAME = \".pi/mcp.json\";\nconst REPOPROMPT_BINARY_CANDIDATES = [\n join(homedir(), \"RepoPrompt\", \"repoprompt_cli\"),\n \"/Applications/Repo Prompt.app/Contents/MacOS/repoprompt-mcp\",\n];\n\nconst IMPORT_PATHS: Record<ImportKind, string[]> = {\n cursor: [join(homedir(), \".cursor\", \"mcp.json\")],\n \"claude-code\": [\n join(homedir(), \".claude\", \"mcp.json\"),\n join(homedir(), \".claude.json\"),\n join(homedir(), \".claude\", \"claude_desktop_config.json\"),\n ],\n \"claude-desktop\": [join(homedir(), \"Library\", \"Application Support\", \"Claude\", \"claude_desktop_config.json\")],\n codex: [join(homedir(), \".codex\", \"config.json\")],\n windsurf: [join(homedir(), \".windsurf\", \"mcp.json\")],\n vscode: [\".vscode/mcp.json\"],\n};\n\ninterface ConfigSourceSpec {\n id: \"shared-global\" | \"pi-global\" | \"shared-project\" | \"pi-project\";\n label: string;\n readPath: string;\n writePath: string;\n kind: \"user\" | \"project\" | \"import\";\n importKind?: string;\n shared: boolean;\n scope: \"global\" | \"project\";\n}\n\nexport interface ConfigDiscoveryPath {\n label: string;\n path: string;\n exists: boolean;\n}\n\nexport interface DiscoveredImportConfig {\n kind: ImportKind;\n path: string;\n}\n\nexport interface ConfigDiscoverySource extends ConfigDiscoveryPath {\n id: ConfigSourceSpec[\"id\"];\n scope: ConfigSourceSpec[\"scope\"];\n kind: \"shared\" | \"pi\";\n serverCount: number;\n}\n\nexport interface ImportConfigSummary extends DiscoveredImportConfig {\n serverCount: number;\n}\n\nexport interface RepoPromptDiscovery {\n configured: boolean;\n configuredPath?: string;\n executablePath?: string;\n targetPath?: string;\n serverName?: string;\n entry?: ServerEntry;\n}\n\nexport interface McpDiscoverySummary {\n sources: ConfigDiscoverySource[];\n imports: ImportConfigSummary[];\n hasAnyConfig: boolean;\n hasAnyDetectedPaths: boolean;\n hasSharedServers: boolean;\n hasPiOwnedServers: boolean;\n totalServerCount: number;\n fingerprint: string;\n repoPrompt: RepoPromptDiscovery;\n}\n\nexport interface ConfigWritePreview {\n path: string;\n existed: boolean;\n changed: boolean;\n beforeText: string;\n afterText: string;\n diffText: string;\n}\n\nexport function getPiGlobalConfigPath(overridePath?: string): string {\n return overridePath ? resolve(overridePath) : getAgentPath(\"mcp.json\");\n}\n\nexport function getGenericGlobalConfigPath(): string {\n return GENERIC_GLOBAL_CONFIG_PATH;\n}\n\nexport function getProjectConfigPath(cwd = process.cwd()): string {\n return resolve(cwd, PROJECT_CONFIG_NAME);\n}\n\nexport function getProjectPiConfigPath(cwd = process.cwd()): string {\n return resolve(cwd, PROJECT_LUNR_CONFIG_NAME);\n}\n\n// lunr: read path prefers .lunr/mcp.json and falls back to the legacy .pi/mcp.json\n// when only the pi-era file exists.\nexport function getProjectPiConfigReadPath(cwd = process.cwd()): string {\n const lunrPath = getProjectPiConfigPath(cwd);\n if (existsSync(lunrPath)) return lunrPath;\n const legacyPath = resolve(cwd, LEGACY_PROJECT_PI_CONFIG_NAME);\n return existsSync(legacyPath) ? legacyPath : lunrPath;\n}\n\nexport function getConfigDiscoveryPaths(overridePath?: string, cwd = process.cwd()): ConfigDiscoveryPath[] {\n return getConfigSources(overridePath, cwd).map((source) => ({\n label: source.label,\n path: source.readPath,\n exists: existsSync(source.readPath),\n }));\n}\n\nexport function findAvailableImportConfigs(cwd = process.cwd()): DiscoveredImportConfig[] {\n const discovered: DiscoveredImportConfig[] = [];\n\n for (const importKind of Object.keys(IMPORT_PATHS) as ImportKind[]) {\n const importPath = resolveImportPath(importKind, cwd);\n if (importPath) {\n discovered.push({ kind: importKind, path: importPath });\n }\n }\n\n return discovered;\n}\n\nexport function getMcpDiscoverySummary(overridePath?: string, cwd = process.cwd()): McpDiscoverySummary {\n const sources = getConfigSources(overridePath, cwd).map((source) => {\n const loaded = readValidatedConfig(source.readPath, `MCP config from ${source.readPath}`);\n return {\n id: source.id,\n label: source.label,\n path: source.readPath,\n exists: existsSync(source.readPath),\n scope: source.scope,\n kind: source.shared ? \"shared\" : \"pi\",\n serverCount: loaded ? Object.keys(loaded.mcpServers).length : 0,\n } satisfies ConfigDiscoverySource;\n });\n\n const imports = (Object.keys(IMPORT_PATHS) as ImportKind[])\n .map((kind) => {\n const path = resolveImportPath(kind, cwd);\n if (!path) return null;\n return {\n kind,\n path,\n serverCount: getImportServerCount(kind, path),\n } satisfies ImportConfigSummary;\n })\n .filter((value): value is ImportConfigSummary => value !== null);\n\n const totalServerCount = sources.reduce((sum, source) => sum + source.serverCount, 0);\n const hasSharedServers = sources.some((source) => source.kind === \"shared\" && source.serverCount > 0);\n const hasPiOwnedServers = sources.some((source) => source.kind === \"pi\" && source.serverCount > 0);\n const hasAnyDetectedPaths = sources.some((source) => source.exists) || imports.length > 0;\n const hasAnyConfig = totalServerCount > 0 || imports.some((entry) => entry.serverCount > 0) || hasAnyDetectedPaths;\n\n const summaryWithoutRepoPrompt = {\n sources,\n imports,\n hasAnyConfig,\n hasAnyDetectedPaths,\n hasSharedServers,\n hasPiOwnedServers,\n totalServerCount,\n };\n\n const fingerprint = JSON.stringify({\n sources: sources.map((source) => [source.id, source.exists, source.serverCount]),\n imports: imports.map((entry) => [entry.kind, entry.path, entry.serverCount]),\n });\n\n return {\n ...summaryWithoutRepoPrompt,\n fingerprint,\n repoPrompt: detectRepoPrompt(summaryWithoutRepoPrompt, cwd),\n };\n}\n\nexport function loadMcpConfig(overridePath?: string, cwd = process.cwd(), projectTrusted = false): McpConfig {\n let config: McpConfig = { mcpServers: {} };\n\n for (const source of getConfigSources(overridePath, cwd)) {\n if (source.scope === \"project\" && !projectTrusted) continue;\n const loaded = readValidatedConfig(source.readPath, `MCP config from ${source.readPath}`);\n if (!loaded) continue;\n config = mergeConfigs(config, expandImports(loaded, cwd, projectTrusted));\n }\n\n return config;\n}\n\nfunction getConfigSources(overridePath?: string, cwd = process.cwd()): ConfigSourceSpec[] {\n const userPath = getPiGlobalConfigPath(overridePath);\n const projectPath = getProjectConfigPath(cwd);\n const projectPiPath = getProjectPiConfigPath(cwd);\n const projectPiReadPath = getProjectPiConfigReadPath(cwd);\n const sources: ConfigSourceSpec[] = [];\n\n if (GENERIC_GLOBAL_CONFIG_PATH !== userPath) {\n sources.push({\n id: \"shared-global\",\n label: \"user-global standard MCP\",\n readPath: GENERIC_GLOBAL_CONFIG_PATH,\n writePath: userPath,\n kind: \"import\",\n importKind: \"global MCP config\",\n shared: true,\n scope: \"global\",\n });\n }\n\n sources.push({\n id: \"pi-global\",\n label: \"Pi global override\",\n readPath: userPath,\n writePath: userPath,\n kind: \"user\",\n shared: false,\n scope: \"global\",\n });\n\n if (projectPath !== userPath) {\n sources.push({\n id: \"shared-project\",\n label: \"project standard MCP\",\n readPath: projectPath,\n writePath: projectPath,\n kind: \"project\",\n shared: true,\n scope: \"project\",\n });\n }\n\n if (projectPiPath !== userPath && projectPiPath !== projectPath) {\n sources.push({\n id: \"pi-project\",\n label: \"project Pi override\",\n readPath: projectPiReadPath,\n writePath: projectPiPath,\n kind: \"project\",\n shared: false,\n scope: \"project\",\n });\n }\n\n return sources;\n}\n\nfunction mergeConfigs(base: McpConfig, next: McpConfig): McpConfig {\n return {\n mcpServers: mergeServerMaps(base.mcpServers, next.mcpServers),\n imports: mergeImports(base.imports, next.imports),\n settings: next.settings ? { ...base.settings, ...next.settings } : base.settings,\n };\n}\n\nfunction mergeServerMaps(\n base: Record<string, ServerEntry>,\n next: Record<string, ServerEntry>,\n): Record<string, ServerEntry> {\n const merged = { ...base };\n for (const [name, definition] of Object.entries(next)) {\n merged[name] = { ...(merged[name] ?? {}), ...definition };\n }\n return merged;\n}\n\nfunction mergeImports(left: ImportKind[] | undefined, right: ImportKind[] | undefined): ImportKind[] | undefined {\n const merged = [...(left ?? []), ...(right ?? [])];\n if (merged.length === 0) return undefined;\n return [...new Set(merged)];\n}\n\nfunction expandImports(config: McpConfig, cwd = process.cwd(), projectTrusted = false): McpConfig {\n if (!config.imports?.length) return config;\n\n const importedServers: Record<string, ServerEntry> = {};\n for (const importKind of config.imports) {\n const importPath = resolveImportPath(importKind, cwd, projectTrusted);\n if (!importPath) continue;\n\n try {\n const imported = JSON.parse(readFileSync(importPath, \"utf-8\"));\n const servers = extractServers(imported, importKind);\n for (const [name, definition] of Object.entries(servers)) {\n if (!importedServers[name]) {\n importedServers[name] = definition;\n }\n }\n } catch (error) {\n console.warn(`Failed to import MCP config from ${importKind}:`, error);\n }\n }\n\n return {\n imports: config.imports,\n settings: config.settings,\n mcpServers: mergeServerMaps(importedServers, config.mcpServers),\n };\n}\n\nfunction resolveImportPath(importKind: ImportKind, cwd = process.cwd(), projectTrusted = true): string | null {\n const candidates = IMPORT_PATHS[importKind] ?? [];\n for (const candidate of candidates) {\n if (candidate.startsWith(\".\") && !projectTrusted) continue;\n const fullPath = candidate.startsWith(\".\") ? resolve(cwd, candidate) : candidate;\n if (existsSync(fullPath)) {\n return fullPath;\n }\n }\n return null;\n}\n\nfunction getImportServerCount(importKind: ImportKind, path: string): number {\n try {\n const raw = JSON.parse(readFileSync(path, \"utf-8\"));\n return Object.keys(extractServers(raw, importKind)).length;\n } catch {\n return 0;\n }\n}\n\nfunction readValidatedConfig(path: string, label: string): McpConfig | null {\n if (!existsSync(path)) return null;\n\n try {\n return validateConfig(JSON.parse(readFileSync(path, \"utf-8\")));\n } catch (error) {\n console.warn(`Failed to load ${label}:`, error);\n return null;\n }\n}\n\nfunction validateConfig(raw: unknown): McpConfig {\n if (!raw || typeof raw !== \"object\") {\n return { mcpServers: {} };\n }\n\n const obj = raw as Record<string, unknown>;\n const servers = obj.mcpServers ?? obj[\"mcp-servers\"] ?? {};\n\n if (typeof servers !== \"object\" || servers === null || Array.isArray(servers)) {\n return { mcpServers: {} };\n }\n\n return {\n mcpServers: servers as Record<string, ServerEntry>,\n imports: Array.isArray(obj.imports) ? (obj.imports as ImportKind[]) : undefined,\n settings: obj.settings as McpSettings | undefined,\n };\n}\n\nfunction extractServers(config: unknown, kind: ImportKind): Record<string, ServerEntry> {\n if (!config || typeof config !== \"object\") return {};\n\n const obj = config as Record<string, unknown>;\n\n let servers: unknown;\n switch (kind) {\n case \"claude-desktop\":\n case \"claude-code\":\n case \"codex\":\n servers = obj.mcpServers;\n break;\n case \"cursor\":\n case \"windsurf\":\n case \"vscode\":\n servers = obj.mcpServers ?? obj[\"mcp-servers\"];\n break;\n default:\n return {};\n }\n\n if (!servers || typeof servers !== \"object\" || Array.isArray(servers)) {\n return {};\n }\n\n return servers as Record<string, ServerEntry>;\n}\n\nfunction serializeRawConfig(raw: Record<string, unknown>): string {\n return `${JSON.stringify(raw, null, 2)}\\n`;\n}\n\nfunction buildUnifiedDiff(beforeText: string, afterText: string): string {\n if (beforeText === afterText) return \"(no changes)\";\n\n const before = beforeText.split(\"\\n\");\n const after = afterText.split(\"\\n\");\n const rows = before.length;\n const cols = after.length;\n const lcs = Array.from({ length: rows + 1 }, () => Array<number>(cols + 1).fill(0));\n\n for (let i = rows - 1; i >= 0; i--) {\n for (let j = cols - 1; j >= 0; j--) {\n lcs[i][j] = before[i] === after[j]\n ? lcs[i + 1][j + 1] + 1\n : Math.max(lcs[i + 1][j], lcs[i][j + 1]);\n }\n }\n\n const lines: string[] = [\"--- before\", \"+++ after\"];\n let i = 0;\n let j = 0;\n while (i < rows || j < cols) {\n if (i < rows && j < cols && before[i] === after[j]) {\n lines.push(` ${before[i]}`);\n i++;\n j++;\n continue;\n }\n if (j < cols && (i === rows || lcs[i][j + 1] >= lcs[i + 1][j])) {\n lines.push(`+ ${after[j]}`);\n j++;\n continue;\n }\n if (i < rows) {\n lines.push(`- ${before[i]}`);\n i++;\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction buildConfigWritePreview(filePath: string, nextRaw: Record<string, unknown>): ConfigWritePreview {\n const existed = existsSync(filePath);\n const beforeRaw = readRawConfigObject(filePath);\n const beforeText = existed ? serializeRawConfig(beforeRaw) : \"\";\n const afterText = serializeRawConfig(nextRaw);\n return {\n path: filePath,\n existed,\n changed: beforeText !== afterText,\n beforeText,\n afterText,\n diffText: buildUnifiedDiff(beforeText, afterText),\n };\n}\n\nfunction readRawConfigObject(filePath: string): Record<string, unknown> {\n if (!existsSync(filePath)) return {};\n\n try {\n const raw = JSON.parse(readFileSync(filePath, \"utf-8\"));\n return raw && typeof raw === \"object\" && !Array.isArray(raw) ? raw as Record<string, unknown> : {};\n } catch {\n return {};\n }\n}\n\nfunction writeRawConfigObject(filePath: string, raw: Record<string, unknown>): void {\n mkdirSync(dirname(filePath), { recursive: true });\n const tmpPath = `${filePath}.${process.pid}.tmp`;\n writeFileSync(tmpPath, `${JSON.stringify(raw, null, 2)}\\n`, \"utf-8\");\n renameSync(tmpPath, filePath);\n}\n\nfunction getServersObject(raw: Record<string, unknown>): Record<string, ServerEntry> {\n const existing = raw.mcpServers ?? raw[\"mcp-servers\"] ?? {};\n if (!existing || typeof existing !== \"object\" || Array.isArray(existing)) {\n return {};\n }\n return existing as Record<string, ServerEntry>;\n}\n\nfunction setServersObject(raw: Record<string, unknown>, servers: Record<string, ServerEntry>): void {\n delete raw[\"mcp-servers\"];\n raw.mcpServers = servers;\n}\n\nfunction isRepoPromptServer(name: string, entry: ServerEntry): boolean {\n const normalizedName = name.toLowerCase();\n if (normalizedName.includes(\"repoprompt\") || normalizedName === \"rp\") {\n return true;\n }\n\n const command = entry.command?.toLowerCase() ?? \"\";\n if (command.includes(\"repoprompt\") || command.includes(\"rp-mcp\") || command.endsWith(\"repoprompt_cli\")) {\n return true;\n }\n\n return (entry.args ?? []).some((arg) => typeof arg === \"string\" && arg.toLowerCase().includes(\"repoprompt\"));\n}\n\nfunction findProjectRoot(cwd = process.cwd()): string | null {\n let current = resolve(cwd);\n while (true) {\n if (\n existsSync(join(current, \".git\"))\n || existsSync(join(current, \"package.json\"))\n || existsSync(join(current, PROJECT_CONFIG_NAME))\n || existsSync(join(current, \".pi\"))\n || existsSync(join(current, \".lunr\")) // lunr: lunr's project config dir is also a root marker\n ) {\n return current;\n }\n\n const parent = dirname(current);\n if (parent === current) return null;\n current = parent;\n }\n}\n\nfunction buildRepoPromptEntry(executablePath: string): ServerEntry {\n return {\n command: executablePath,\n args: [],\n lifecycle: \"lazy\",\n };\n}\n\nfunction detectRepoPrompt(summary: Omit<McpDiscoverySummary, \"fingerprint\" | \"repoPrompt\">, cwd = process.cwd()): RepoPromptDiscovery {\n for (const source of summary.sources) {\n if (source.kind !== \"shared\" || source.serverCount === 0) continue;\n const config = readValidatedConfig(source.path, `MCP config from ${source.path}`);\n if (!config) continue;\n for (const [name, entry] of Object.entries(config.mcpServers)) {\n if (isRepoPromptServer(name, entry)) {\n return { configured: true, configuredPath: source.path };\n }\n }\n }\n\n const executablePath = REPOPROMPT_BINARY_CANDIDATES.find((candidate) => existsSync(candidate));\n if (!executablePath) {\n return { configured: false };\n }\n\n const projectRoot = findProjectRoot(cwd);\n const targetPath = projectRoot ? join(projectRoot, PROJECT_CONFIG_NAME) : GENERIC_GLOBAL_CONFIG_PATH;\n return {\n configured: false,\n executablePath,\n targetPath,\n serverName: \"repoprompt\",\n entry: buildRepoPromptEntry(executablePath),\n };\n}\n\nexport function previewCompatibilityImports(importKinds: ImportKind[], overridePath?: string): ConfigWritePreview {\n const targetPath = getPiGlobalConfigPath(overridePath);\n const raw = readRawConfigObject(targetPath);\n const currentImports = Array.isArray(raw.imports) ? raw.imports.filter((value): value is ImportKind => typeof value === \"string\") : [];\n const merged = [...new Set([...currentImports, ...importKinds])];\n const nextRaw = { ...raw, imports: merged };\n setServersObject(nextRaw, getServersObject(nextRaw));\n return buildConfigWritePreview(targetPath, nextRaw);\n}\n\nexport function ensureCompatibilityImports(importKinds: ImportKind[], overridePath?: string): { path: string; added: ImportKind[] } {\n const targetPath = getPiGlobalConfigPath(overridePath);\n const raw = readRawConfigObject(targetPath);\n const currentImports = Array.isArray(raw.imports) ? raw.imports.filter((value): value is ImportKind => typeof value === \"string\") : [];\n const merged = [...new Set([...currentImports, ...importKinds])];\n const added = merged.filter((kind) => !currentImports.includes(kind));\n if (added.length === 0) {\n return { path: targetPath, added: [] };\n }\n\n raw.imports = merged;\n const servers = getServersObject(raw);\n setServersObject(raw, servers);\n writeRawConfigObject(targetPath, raw);\n return { path: targetPath, added };\n}\n\nexport function buildStarterProjectConfig(): McpConfig {\n return {\n mcpServers: {},\n };\n}\n\nexport function previewStarterProjectConfig(cwd = process.cwd()): ConfigWritePreview {\n const targetPath = getProjectConfigPath(cwd);\n const nextRaw = { mcpServers: buildStarterProjectConfig().mcpServers };\n return buildConfigWritePreview(targetPath, nextRaw);\n}\n\nexport function writeStarterProjectConfig(cwd = process.cwd()): string {\n const targetPath = getProjectConfigPath(cwd);\n const raw = { mcpServers: buildStarterProjectConfig().mcpServers };\n writeRawConfigObject(targetPath, raw);\n return targetPath;\n}\n\nexport function previewSharedServerEntry(filePath: string, serverName: string, entry: ServerEntry): ConfigWritePreview {\n const raw = readRawConfigObject(filePath);\n const nextRaw = { ...raw };\n const servers = getServersObject(nextRaw);\n servers[serverName] = entry;\n setServersObject(nextRaw, servers);\n return buildConfigWritePreview(filePath, nextRaw);\n}\n\nexport function writeSharedServerEntry(filePath: string, serverName: string, entry: ServerEntry): string {\n const raw = readRawConfigObject(filePath);\n const servers = getServersObject(raw);\n servers[serverName] = entry;\n setServersObject(raw, servers);\n writeRawConfigObject(filePath, raw);\n return filePath;\n}\n\nexport function getServerProvenance(overridePath?: string, cwd = process.cwd()): Map<string, ServerProvenance> {\n const provenance = new Map<string, ServerProvenance>();\n const userPath = getPiGlobalConfigPath(overridePath);\n\n for (const source of getConfigSources(overridePath, cwd)) {\n if (source.scope === \"project\" && !projectTrusted) continue;\n const loaded = readValidatedConfig(source.readPath, `MCP config from ${source.readPath}`);\n if (!loaded) continue;\n\n if (loaded.imports?.length) {\n for (const importKind of loaded.imports) {\n const importPath = resolveImportPath(importKind, cwd);\n if (!importPath) continue;\n\n try {\n const imported = JSON.parse(readFileSync(importPath, \"utf-8\"));\n const servers = extractServers(imported, importKind);\n for (const name of Object.keys(servers)) {\n if (!provenance.has(name)) {\n provenance.set(name, { path: userPath, kind: \"import\", importKind });\n }\n }\n } catch {}\n }\n }\n\n for (const name of Object.keys(loaded.mcpServers)) {\n provenance.set(name, {\n path: source.writePath,\n kind: source.kind,\n importKind: source.importKind,\n });\n }\n }\n\n return provenance;\n}\n\nexport function writeDirectToolsConfig(\n changes: Map<string, true | string[] | false>,\n provenance: Map<string, ServerProvenance>,\n fullConfig: McpConfig,\n): void {\n const byPath = new Map<string, { name: string; value: true | string[] | false; prov: ServerProvenance }[]>();\n\n for (const [serverName, value] of changes) {\n const prov = provenance.get(serverName);\n if (!prov) continue;\n\n const targetPath = prov.path;\n\n if (!byPath.has(targetPath)) byPath.set(targetPath, []);\n byPath.get(targetPath)!.push({ name: serverName, value, prov });\n }\n\n for (const [filePath, entries] of byPath) {\n const raw = readRawConfigObject(filePath);\n const servers = getServersObject(raw);\n\n for (const { name, value, prov } of entries) {\n if (prov.kind === \"import\") {\n const fullDef = fullConfig.mcpServers[name];\n if (fullDef) {\n servers[name] = { ...fullDef, directTools: value };\n }\n } else if (servers[name]) {\n servers[name] = { ...servers[name], directTools: value };\n }\n }\n\n setServersObject(raw, servers);\n writeRawConfigObject(filePath, raw);\n }\n}\n"]}