pi-kot 0.1.20 → 0.1.21

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 (330) hide show
  1. package/README.md +253 -17
  2. package/package.json +8 -60
  3. package/bin/pi-kot.mjs +0 -148
  4. package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  5. package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  6. package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  7. package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  8. package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  9. package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  10. package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  11. package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  12. package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  13. package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  14. package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  15. package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  16. package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  17. package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  18. package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  19. package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  20. package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  21. package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  22. package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  23. package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  24. package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  25. package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  26. package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  27. package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  28. package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  29. package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  30. package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  31. package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  32. package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  33. package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  34. package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  35. package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  36. package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  37. package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  38. package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  39. package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  40. package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  41. package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  42. package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  43. package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  44. package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  45. package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  46. package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  47. package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  48. package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  49. package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  50. package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  51. package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  52. package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  53. package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  54. package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  55. package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  56. package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  57. package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  58. package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  59. package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  60. package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  61. package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  62. package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  63. package/dist/client/assets/index-C5quN7Km.js +0 -448
  64. package/dist/client/assets/index-C5quN7Km.js.map +0 -1
  65. package/dist/client/assets/index-CuQOwQs1.css +0 -1
  66. package/dist/client/index.html +0 -14
  67. package/dist/server/ask-user-question/envelope.d.ts +0 -11
  68. package/dist/server/ask-user-question/envelope.d.ts.map +0 -1
  69. package/dist/server/ask-user-question/envelope.js +0 -41
  70. package/dist/server/ask-user-question/envelope.js.map +0 -1
  71. package/dist/server/ask-user-question/plan-mode-question-tool.d.ts +0 -26
  72. package/dist/server/ask-user-question/plan-mode-question-tool.d.ts.map +0 -1
  73. package/dist/server/ask-user-question/plan-mode-question-tool.js +0 -273
  74. package/dist/server/ask-user-question/plan-mode-question-tool.js.map +0 -1
  75. package/dist/server/ask-user-question/prompt-strings.d.ts +0 -4
  76. package/dist/server/ask-user-question/prompt-strings.d.ts.map +0 -1
  77. package/dist/server/ask-user-question/prompt-strings.js +0 -18
  78. package/dist/server/ask-user-question/prompt-strings.js.map +0 -1
  79. package/dist/server/ask-user-question/registry.d.ts +0 -39
  80. package/dist/server/ask-user-question/registry.d.ts.map +0 -1
  81. package/dist/server/ask-user-question/registry.js +0 -124
  82. package/dist/server/ask-user-question/registry.js.map +0 -1
  83. package/dist/server/ask-user-question/tool.d.ts +0 -4
  84. package/dist/server/ask-user-question/tool.d.ts.map +0 -1
  85. package/dist/server/ask-user-question/tool.js +0 -68
  86. package/dist/server/ask-user-question/tool.js.map +0 -1
  87. package/dist/server/ask-user-question/types.d.ts +0 -50
  88. package/dist/server/ask-user-question/types.d.ts.map +0 -1
  89. package/dist/server/ask-user-question/types.js +0 -7
  90. package/dist/server/ask-user-question/types.js.map +0 -1
  91. package/dist/server/ask-user-question/validate.d.ts +0 -3
  92. package/dist/server/ask-user-question/validate.d.ts.map +0 -1
  93. package/dist/server/ask-user-question/validate.js +0 -67
  94. package/dist/server/ask-user-question/validate.js.map +0 -1
  95. package/dist/server/compaction-continuation.d.ts +0 -113
  96. package/dist/server/compaction-continuation.d.ts.map +0 -1
  97. package/dist/server/compaction-continuation.js +0 -65
  98. package/dist/server/compaction-continuation.js.map +0 -1
  99. package/dist/server/compaction-history.d.ts +0 -62
  100. package/dist/server/compaction-history.d.ts.map +0 -1
  101. package/dist/server/compaction-history.js +0 -180
  102. package/dist/server/compaction-history.js.map +0 -1
  103. package/dist/server/config-manager.d.ts +0 -97
  104. package/dist/server/config-manager.d.ts.map +0 -1
  105. package/dist/server/config-manager.js +0 -352
  106. package/dist/server/config-manager.js.map +0 -1
  107. package/dist/server/config.d.ts +0 -24
  108. package/dist/server/config.d.ts.map +0 -1
  109. package/dist/server/config.js +0 -67
  110. package/dist/server/config.js.map +0 -1
  111. package/dist/server/extension-manager.d.ts +0 -116
  112. package/dist/server/extension-manager.d.ts.map +0 -1
  113. package/dist/server/extension-manager.js +0 -586
  114. package/dist/server/extension-manager.js.map +0 -1
  115. package/dist/server/extension-ui-bridge.d.ts +0 -35
  116. package/dist/server/extension-ui-bridge.d.ts.map +0 -1
  117. package/dist/server/extension-ui-bridge.js +0 -228
  118. package/dist/server/extension-ui-bridge.js.map +0 -1
  119. package/dist/server/extensions-discovery.d.ts +0 -26
  120. package/dist/server/extensions-discovery.d.ts.map +0 -1
  121. package/dist/server/extensions-discovery.js +0 -107
  122. package/dist/server/extensions-discovery.js.map +0 -1
  123. package/dist/server/file-manager.d.ts +0 -79
  124. package/dist/server/file-manager.d.ts.map +0 -1
  125. package/dist/server/file-manager.js +0 -535
  126. package/dist/server/file-manager.js.map +0 -1
  127. package/dist/server/file-references.d.ts +0 -5
  128. package/dist/server/file-references.d.ts.map +0 -1
  129. package/dist/server/file-references.js +0 -249
  130. package/dist/server/file-references.js.map +0 -1
  131. package/dist/server/file-searcher.d.ts +0 -29
  132. package/dist/server/file-searcher.d.ts.map +0 -1
  133. package/dist/server/file-searcher.js +0 -318
  134. package/dist/server/file-searcher.js.map +0 -1
  135. package/dist/server/git-clone.d.ts +0 -56
  136. package/dist/server/git-clone.d.ts.map +0 -1
  137. package/dist/server/git-clone.js +0 -173
  138. package/dist/server/git-clone.js.map +0 -1
  139. package/dist/server/git-hunk-stager.d.ts +0 -56
  140. package/dist/server/git-hunk-stager.d.ts.map +0 -1
  141. package/dist/server/git-hunk-stager.js +0 -137
  142. package/dist/server/git-hunk-stager.js.map +0 -1
  143. package/dist/server/git-runner.d.ts +0 -346
  144. package/dist/server/git-runner.d.ts.map +0 -1
  145. package/dist/server/git-runner.js +0 -884
  146. package/dist/server/git-runner.js.map +0 -1
  147. package/dist/server/index.d.ts +0 -22
  148. package/dist/server/index.d.ts.map +0 -1
  149. package/dist/server/index.js +0 -262
  150. package/dist/server/index.js.map +0 -1
  151. package/dist/server/lifecycle-notifications.d.ts +0 -28
  152. package/dist/server/lifecycle-notifications.d.ts.map +0 -1
  153. package/dist/server/lifecycle-notifications.js +0 -38
  154. package/dist/server/lifecycle-notifications.js.map +0 -1
  155. package/dist/server/mcp/config.d.ts +0 -23
  156. package/dist/server/mcp/config.d.ts.map +0 -1
  157. package/dist/server/mcp/config.js +0 -139
  158. package/dist/server/mcp/config.js.map +0 -1
  159. package/dist/server/mcp/manager.d.ts +0 -40
  160. package/dist/server/mcp/manager.d.ts.map +0 -1
  161. package/dist/server/mcp/manager.js +0 -435
  162. package/dist/server/mcp/manager.js.map +0 -1
  163. package/dist/server/mcp/stdio-trust.d.ts +0 -5
  164. package/dist/server/mcp/stdio-trust.d.ts.map +0 -1
  165. package/dist/server/mcp/stdio-trust.js +0 -78
  166. package/dist/server/mcp/stdio-trust.js.map +0 -1
  167. package/dist/server/mcp/tool-bridge.d.ts +0 -33
  168. package/dist/server/mcp/tool-bridge.d.ts.map +0 -1
  169. package/dist/server/mcp/tool-bridge.js +0 -138
  170. package/dist/server/mcp/tool-bridge.js.map +0 -1
  171. package/dist/server/orchestration/config.d.ts +0 -5
  172. package/dist/server/orchestration/config.d.ts.map +0 -1
  173. package/dist/server/orchestration/config.js +0 -35
  174. package/dist/server/orchestration/config.js.map +0 -1
  175. package/dist/server/orchestration/event-bridge.d.ts +0 -32
  176. package/dist/server/orchestration/event-bridge.d.ts.map +0 -1
  177. package/dist/server/orchestration/event-bridge.js +0 -110
  178. package/dist/server/orchestration/event-bridge.js.map +0 -1
  179. package/dist/server/orchestration/inbox.d.ts +0 -9
  180. package/dist/server/orchestration/inbox.d.ts.map +0 -1
  181. package/dist/server/orchestration/inbox.js +0 -186
  182. package/dist/server/orchestration/inbox.js.map +0 -1
  183. package/dist/server/orchestration/init.d.ts +0 -2
  184. package/dist/server/orchestration/init.d.ts.map +0 -1
  185. package/dist/server/orchestration/init.js +0 -22
  186. package/dist/server/orchestration/init.js.map +0 -1
  187. package/dist/server/orchestration/store.d.ts +0 -33
  188. package/dist/server/orchestration/store.d.ts.map +0 -1
  189. package/dist/server/orchestration/store.js +0 -331
  190. package/dist/server/orchestration/store.js.map +0 -1
  191. package/dist/server/orchestration/tools.d.ts +0 -15
  192. package/dist/server/orchestration/tools.d.ts.map +0 -1
  193. package/dist/server/orchestration/tools.js +0 -621
  194. package/dist/server/orchestration/tools.js.map +0 -1
  195. package/dist/server/orchestration/types.d.ts +0 -68
  196. package/dist/server/orchestration/types.d.ts.map +0 -1
  197. package/dist/server/orchestration/types.js +0 -43
  198. package/dist/server/orchestration/types.js.map +0 -1
  199. package/dist/server/orchestration/worker-lifecycle.d.ts +0 -15
  200. package/dist/server/orchestration/worker-lifecycle.d.ts.map +0 -1
  201. package/dist/server/orchestration/worker-lifecycle.js +0 -45
  202. package/dist/server/orchestration/worker-lifecycle.js.map +0 -1
  203. package/dist/server/project-manager.d.ts +0 -25
  204. package/dist/server/project-manager.d.ts.map +0 -1
  205. package/dist/server/project-manager.js +0 -157
  206. package/dist/server/project-manager.js.map +0 -1
  207. package/dist/server/pty-manager.d.ts +0 -54
  208. package/dist/server/pty-manager.d.ts.map +0 -1
  209. package/dist/server/pty-manager.js +0 -220
  210. package/dist/server/pty-manager.js.map +0 -1
  211. package/dist/server/routes/_schemas.d.ts +0 -16
  212. package/dist/server/routes/_schemas.d.ts.map +0 -1
  213. package/dist/server/routes/_schemas.js +0 -12
  214. package/dist/server/routes/_schemas.js.map +0 -1
  215. package/dist/server/routes/ask-user-question.d.ts +0 -3
  216. package/dist/server/routes/ask-user-question.d.ts.map +0 -1
  217. package/dist/server/routes/ask-user-question.js +0 -105
  218. package/dist/server/routes/ask-user-question.js.map +0 -1
  219. package/dist/server/routes/auth.d.ts +0 -8
  220. package/dist/server/routes/auth.d.ts.map +0 -1
  221. package/dist/server/routes/auth.js +0 -225
  222. package/dist/server/routes/auth.js.map +0 -1
  223. package/dist/server/routes/config.d.ts +0 -3
  224. package/dist/server/routes/config.d.ts.map +0 -1
  225. package/dist/server/routes/config.js +0 -568
  226. package/dist/server/routes/config.js.map +0 -1
  227. package/dist/server/routes/control.d.ts +0 -3
  228. package/dist/server/routes/control.d.ts.map +0 -1
  229. package/dist/server/routes/control.js +0 -365
  230. package/dist/server/routes/control.js.map +0 -1
  231. package/dist/server/routes/exec.d.ts +0 -3
  232. package/dist/server/routes/exec.d.ts.map +0 -1
  233. package/dist/server/routes/exec.js +0 -426
  234. package/dist/server/routes/exec.js.map +0 -1
  235. package/dist/server/routes/extension-commands.d.ts +0 -22
  236. package/dist/server/routes/extension-commands.d.ts.map +0 -1
  237. package/dist/server/routes/extension-commands.js +0 -178
  238. package/dist/server/routes/extension-commands.js.map +0 -1
  239. package/dist/server/routes/extensions.d.ts +0 -8
  240. package/dist/server/routes/extensions.d.ts.map +0 -1
  241. package/dist/server/routes/extensions.js +0 -414
  242. package/dist/server/routes/extensions.js.map +0 -1
  243. package/dist/server/routes/files.d.ts +0 -3
  244. package/dist/server/routes/files.d.ts.map +0 -1
  245. package/dist/server/routes/files.js +0 -835
  246. package/dist/server/routes/files.js.map +0 -1
  247. package/dist/server/routes/git.d.ts +0 -3
  248. package/dist/server/routes/git.d.ts.map +0 -1
  249. package/dist/server/routes/git.js +0 -1058
  250. package/dist/server/routes/git.js.map +0 -1
  251. package/dist/server/routes/mcp.d.ts +0 -3
  252. package/dist/server/routes/mcp.d.ts.map +0 -1
  253. package/dist/server/routes/mcp.js +0 -403
  254. package/dist/server/routes/mcp.js.map +0 -1
  255. package/dist/server/routes/orchestration.d.ts +0 -3
  256. package/dist/server/routes/orchestration.d.ts.map +0 -1
  257. package/dist/server/routes/orchestration.js +0 -251
  258. package/dist/server/routes/orchestration.js.map +0 -1
  259. package/dist/server/routes/projects.d.ts +0 -3
  260. package/dist/server/routes/projects.d.ts.map +0 -1
  261. package/dist/server/routes/projects.js +0 -421
  262. package/dist/server/routes/projects.js.map +0 -1
  263. package/dist/server/routes/prompt.d.ts +0 -3
  264. package/dist/server/routes/prompt.d.ts.map +0 -1
  265. package/dist/server/routes/prompt.js +0 -311
  266. package/dist/server/routes/prompt.js.map +0 -1
  267. package/dist/server/routes/session-extensions.d.ts +0 -11
  268. package/dist/server/routes/session-extensions.d.ts.map +0 -1
  269. package/dist/server/routes/session-extensions.js +0 -171
  270. package/dist/server/routes/session-extensions.js.map +0 -1
  271. package/dist/server/routes/sessions.d.ts +0 -3
  272. package/dist/server/routes/sessions.d.ts.map +0 -1
  273. package/dist/server/routes/sessions.js +0 -706
  274. package/dist/server/routes/sessions.js.map +0 -1
  275. package/dist/server/routes/skills.d.ts +0 -14
  276. package/dist/server/routes/skills.d.ts.map +0 -1
  277. package/dist/server/routes/skills.js +0 -448
  278. package/dist/server/routes/skills.js.map +0 -1
  279. package/dist/server/routes/stream.d.ts +0 -3
  280. package/dist/server/routes/stream.d.ts.map +0 -1
  281. package/dist/server/routes/stream.js +0 -112
  282. package/dist/server/routes/stream.js.map +0 -1
  283. package/dist/server/routes/terminal.d.ts +0 -28
  284. package/dist/server/routes/terminal.d.ts.map +0 -1
  285. package/dist/server/routes/terminal.js +0 -211
  286. package/dist/server/routes/terminal.js.map +0 -1
  287. package/dist/server/routes/tunnel.d.ts +0 -13
  288. package/dist/server/routes/tunnel.d.ts.map +0 -1
  289. package/dist/server/routes/tunnel.js +0 -231
  290. package/dist/server/routes/tunnel.js.map +0 -1
  291. package/dist/server/session-registry.d.ts +0 -164
  292. package/dist/server/session-registry.d.ts.map +0 -1
  293. package/dist/server/session-registry.js +0 -754
  294. package/dist/server/session-registry.js.map +0 -1
  295. package/dist/server/skill-overrides.d.ts +0 -47
  296. package/dist/server/skill-overrides.d.ts.map +0 -1
  297. package/dist/server/skill-overrides.js +0 -178
  298. package/dist/server/skill-overrides.js.map +0 -1
  299. package/dist/server/sse-bridge.d.ts +0 -31
  300. package/dist/server/sse-bridge.d.ts.map +0 -1
  301. package/dist/server/sse-bridge.js +0 -158
  302. package/dist/server/sse-bridge.js.map +0 -1
  303. package/dist/server/tool-overrides.d.ts +0 -39
  304. package/dist/server/tool-overrides.d.ts.map +0 -1
  305. package/dist/server/tool-overrides.js +0 -121
  306. package/dist/server/tool-overrides.js.map +0 -1
  307. package/dist/server/tunnel/executable-search.d.ts +0 -45
  308. package/dist/server/tunnel/executable-search.d.ts.map +0 -1
  309. package/dist/server/tunnel/executable-search.js +0 -150
  310. package/dist/server/tunnel/executable-search.js.map +0 -1
  311. package/dist/server/tunnel/install-help.d.ts +0 -19
  312. package/dist/server/tunnel/install-help.d.ts.map +0 -1
  313. package/dist/server/tunnel/install-help.js +0 -47
  314. package/dist/server/tunnel/install-help.js.map +0 -1
  315. package/dist/server/tunnel/providers/ngrok.d.ts +0 -34
  316. package/dist/server/tunnel/providers/ngrok.d.ts.map +0 -1
  317. package/dist/server/tunnel/providers/ngrok.js +0 -464
  318. package/dist/server/tunnel/providers/ngrok.js.map +0 -1
  319. package/dist/server/tunnel/registry.d.ts +0 -15
  320. package/dist/server/tunnel/registry.d.ts.map +0 -1
  321. package/dist/server/tunnel/registry.js +0 -58
  322. package/dist/server/tunnel/registry.js.map +0 -1
  323. package/dist/server/tunnel/service.d.ts +0 -15
  324. package/dist/server/tunnel/service.d.ts.map +0 -1
  325. package/dist/server/tunnel/service.js +0 -158
  326. package/dist/server/tunnel/service.js.map +0 -1
  327. package/dist/server/tunnel/types.d.ts +0 -166
  328. package/dist/server/tunnel/types.d.ts.map +0 -1
  329. package/dist/server/tunnel/types.js +0 -217
  330. package/dist/server/tunnel/types.js.map +0 -1
@@ -1,40 +0,0 @@
1
- import type { ToolDefinition } from "@earendil-works/pi-coding-agent";
2
- import { type McpTransport } from "./config.js";
3
- export type ConnectionState = "idle" | "connecting" | "connected" | "error" | "disabled" | "trust_required";
4
- export type Scope = "global" | {
5
- project: string;
6
- };
7
- export declare function isGloballyEnabled(): boolean;
8
- export declare function loadGlobal(): Promise<void>;
9
- export declare function ensureGlobalLoaded(): Promise<void>;
10
- export declare function loadProject(projectId: string, projectPath: string): Promise<void>;
11
- export declare function ensureProjectLoaded(projectId: string, projectPath: string): Promise<void>;
12
- export declare function reloadGlobal(): Promise<void>;
13
- export declare function customToolsForProject(projectId: string): ToolDefinition[];
14
- export interface ServerStatus {
15
- scope: "global" | "project";
16
- projectId?: string;
17
- name: string;
18
- kind: "remote" | "stdio";
19
- url?: string;
20
- command?: string;
21
- args?: string[];
22
- enabled: boolean;
23
- state: ConnectionState;
24
- toolCount: number;
25
- tools: {
26
- name: string;
27
- shortName: string;
28
- description: string;
29
- }[];
30
- lastError?: string;
31
- transport?: McpTransport;
32
- }
33
- export declare function getStatus(opts?: {
34
- projectId?: string;
35
- }): ServerStatus[];
36
- export declare function probe(scope: Scope, name: string): Promise<ServerStatus | undefined>;
37
- export declare function reconnectGatedStdioForProject(projectId: string): Promise<void>;
38
- export declare function unloadProject(projectId: string): Promise<void>;
39
- export declare function disposeAll(): Promise<void>;
40
- //# sourceMappingURL=manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAoD,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAQlG,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,YAAY,GACZ,WAAW,GACX,OAAO,GACP,UAAU,GACV,gBAAgB,CAAC;AACrB,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AA2BnD,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAQhD;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGxD;AASD,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKvF;AAED,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/F;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAQlD;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,CA8BzE;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,YAAY,CAAC;CAC1B;AAED,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,EAAE,CAkCvE;AAED,wBAAsB,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CASzF;AAED,wBAAsB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWpF;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWpE;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAOhD"}
@@ -1,435 +0,0 @@
1
- import { readFile } from "node:fs/promises";
2
- import { join } from "node:path";
3
- import { Client } from "@modelcontextprotocol/sdk/client/index.js";
4
- import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
5
- import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
6
- import { getDefaultEnvironment, StdioClientTransport, } from "@modelcontextprotocol/sdk/client/stdio.js";
7
- import { isStdioConfig, readMcpJson } from "./config.js";
8
- import { isStdioTrustedForProject } from "./stdio-trust.js";
9
- import { bridgeMcpTool } from "./tool-bridge.js";
10
- const PROJECT_MCP_FILE = ".mcp.json";
11
- function entryKey(scope, name) {
12
- return scope === "global" ? `global::${name}` : `project:${scope.project}::${name}`;
13
- }
14
- const pool = new Map();
15
- const loadedProjects = new Set();
16
- let globallyEnabled = true;
17
- let globalLoaded = false;
18
- let globalLoadPromise;
19
- export function isGloballyEnabled() {
20
- return globallyEnabled;
21
- }
22
- export async function loadGlobal() {
23
- if (globalLoadPromise !== undefined)
24
- return globalLoadPromise;
25
- globalLoadPromise = loadGlobalNow();
26
- try {
27
- await globalLoadPromise;
28
- }
29
- finally {
30
- globalLoadPromise = undefined;
31
- }
32
- }
33
- export async function ensureGlobalLoaded() {
34
- if (globalLoaded)
35
- return;
36
- await loadGlobal();
37
- }
38
- async function loadGlobalNow() {
39
- const cfg = await readMcpJson();
40
- globallyEnabled = cfg.disabled !== true;
41
- await syncScope("global", cfg.servers);
42
- globalLoaded = true;
43
- }
44
- export async function loadProject(projectId, projectPath) {
45
- cachedProjectPaths.set(projectId, projectPath);
46
- const cfg = await readProjectMcpJson(projectPath);
47
- await syncScope({ project: projectId }, cfg);
48
- loadedProjects.add(projectId);
49
- }
50
- export async function ensureProjectLoaded(projectId, projectPath) {
51
- if (loadedProjects.has(projectId))
52
- return;
53
- await loadProject(projectId, projectPath);
54
- }
55
- export async function reloadGlobal() {
56
- loadedProjects.clear();
57
- globalLoadPromise = loadGlobalNow();
58
- try {
59
- await globalLoadPromise;
60
- }
61
- finally {
62
- globalLoadPromise = undefined;
63
- }
64
- }
65
- export function customToolsForProject(projectId) {
66
- const projectServerNames = new Set();
67
- for (const e of pool.values()) {
68
- if (e.scope === "global")
69
- continue;
70
- if (e.scope.project !== projectId)
71
- continue;
72
- projectServerNames.add(e.name);
73
- }
74
- const seenToolNames = new Set();
75
- const out = [];
76
- for (const e of pool.values()) {
77
- if (e.scope === "global")
78
- continue;
79
- if (e.scope.project !== projectId)
80
- continue;
81
- if (e.state !== "connected")
82
- continue;
83
- for (const t of e.bridged) {
84
- if (seenToolNames.has(t.name))
85
- continue;
86
- seenToolNames.add(t.name);
87
- out.push(t);
88
- }
89
- }
90
- for (const e of pool.values()) {
91
- if (e.scope !== "global")
92
- continue;
93
- if (projectServerNames.has(e.name))
94
- continue;
95
- if (e.state !== "connected")
96
- continue;
97
- for (const t of e.bridged) {
98
- if (seenToolNames.has(t.name))
99
- continue;
100
- seenToolNames.add(t.name);
101
- out.push(t);
102
- }
103
- }
104
- return out;
105
- }
106
- export function getStatus(opts) {
107
- const out = [];
108
- for (const e of pool.values()) {
109
- if (e.scope !== "global") {
110
- if (opts?.projectId !== undefined && e.scope.project !== opts.projectId)
111
- continue;
112
- if (opts?.projectId === undefined)
113
- continue;
114
- }
115
- const tools = e.tools.map((t, i) => ({
116
- name: e.bridged[i]?.name ?? `${e.name}__${t.name}`,
117
- shortName: t.name,
118
- description: t.description,
119
- }));
120
- const isStdio = isStdioConfig(e.config);
121
- const status = {
122
- scope: e.scope === "global" ? "global" : "project",
123
- name: e.name,
124
- kind: isStdio ? "stdio" : "remote",
125
- enabled: e.config.enabled !== false,
126
- state: e.state,
127
- toolCount: e.tools.length,
128
- tools,
129
- };
130
- if (isStdio) {
131
- if (e.config.command !== undefined)
132
- status.command = e.config.command;
133
- if (e.config.args !== undefined)
134
- status.args = [...e.config.args];
135
- }
136
- else {
137
- if (e.config.url !== undefined)
138
- status.url = e.config.url;
139
- if (e.config.transport !== undefined)
140
- status.transport = e.config.transport;
141
- }
142
- if (e.scope !== "global")
143
- status.projectId = e.scope.project;
144
- if (e.lastError !== undefined)
145
- status.lastError = e.lastError;
146
- out.push(status);
147
- }
148
- return out;
149
- }
150
- export async function probe(scope, name) {
151
- const entry = pool.get(entryKey(scope, name));
152
- if (entry === undefined)
153
- return undefined;
154
- await disconnectEntry(entry);
155
- await connectEntry(entry);
156
- const opts = scope === "global" ? undefined : { projectId: scope.project };
157
- return getStatus(opts).find((s) => s.name === name && s.scope === (scope === "global" ? "global" : "project"));
158
- }
159
- export async function reconnectGatedStdioForProject(projectId) {
160
- const toConnect = [];
161
- for (const e of pool.values()) {
162
- if (e.scope === "global")
163
- continue;
164
- if (e.scope.project !== projectId)
165
- continue;
166
- if (e.state !== "trust_required")
167
- continue;
168
- toConnect.push(e);
169
- }
170
- for (const entry of toConnect) {
171
- await connectEntry(entry);
172
- }
173
- }
174
- export async function unloadProject(projectId) {
175
- const toClose = [];
176
- for (const [key, entry] of Array.from(pool.entries())) {
177
- if (entry.scope === "global")
178
- continue;
179
- if (entry.scope.project !== projectId)
180
- continue;
181
- toClose.push(entry);
182
- pool.delete(key);
183
- }
184
- await Promise.allSettled(toClose.map((e) => disconnectEntry(e)));
185
- loadedProjects.delete(projectId);
186
- cachedProjectPaths.delete(projectId);
187
- }
188
- export async function disposeAll() {
189
- await Promise.allSettled(Array.from(pool.values()).map((entry) => disconnectEntry(entry)));
190
- pool.clear();
191
- loadedProjects.clear();
192
- cachedProjectPaths.clear();
193
- globalLoaded = false;
194
- globalLoadPromise = undefined;
195
- }
196
- async function syncScope(scope, configs) {
197
- const wantNames = new Set(Object.keys(configs));
198
- for (const [key, entry] of Array.from(pool.entries())) {
199
- if (entryScopeMatches(entry.scope, scope) && !wantNames.has(entry.name)) {
200
- await disconnectEntry(entry);
201
- pool.delete(key);
202
- }
203
- }
204
- const toConnect = [];
205
- for (const [name, cfg] of Object.entries(configs)) {
206
- const key = entryKey(scope, name);
207
- const existing = pool.get(key);
208
- if (existing !== undefined) {
209
- const sameEnabled = (existing.config.enabled !== false) === (cfg.enabled !== false);
210
- const sameConnectionFields = sameConnectionConfig(existing.config, cfg);
211
- existing.config = cfg;
212
- if (sameEnabled && sameConnectionFields && existing.state === "connected") {
213
- continue;
214
- }
215
- await disconnectEntry(existing);
216
- if (cfg.enabled === false) {
217
- existing.state = "disabled";
218
- continue;
219
- }
220
- toConnect.push(existing);
221
- continue;
222
- }
223
- const entry = {
224
- scope,
225
- name,
226
- config: cfg,
227
- state: cfg.enabled === false ? "disabled" : "idle",
228
- tools: [],
229
- bridged: [],
230
- };
231
- pool.set(key, entry);
232
- if (cfg.enabled !== false) {
233
- toConnect.push(entry);
234
- }
235
- }
236
- for (const entry of toConnect) {
237
- await connectEntry(entry);
238
- }
239
- }
240
- function sameConnectionConfig(a, b) {
241
- if (a.url !== b.url)
242
- return false;
243
- if (a.transport !== b.transport)
244
- return false;
245
- if (a.command !== b.command)
246
- return false;
247
- if (a.cwd !== b.cwd)
248
- return false;
249
- if (JSON.stringify(a.args ?? []) !== JSON.stringify(b.args ?? []))
250
- return false;
251
- if (JSON.stringify(a.headers ?? {}) !== JSON.stringify(b.headers ?? {}))
252
- return false;
253
- if (JSON.stringify(a.env ?? {}) !== JSON.stringify(b.env ?? {}))
254
- return false;
255
- return true;
256
- }
257
- function entryScopeMatches(a, b) {
258
- if (a === "global" && b === "global")
259
- return true;
260
- if (a !== "global" && b !== "global")
261
- return a.project === b.project;
262
- return false;
263
- }
264
- async function connectEntry(entry) {
265
- if (isStdioConfig(entry.config) && entry.scope !== "global") {
266
- const trusted = await isStdioTrustedForProject(entry.scope.project).catch(() => false);
267
- if (!trusted) {
268
- entry.state = "trust_required";
269
- entry.lastError = "stdio MCP servers from this project require trust";
270
- entry.tools = [];
271
- entry.bridged = [];
272
- return;
273
- }
274
- }
275
- entry.state = "connecting";
276
- delete entry.lastError;
277
- try {
278
- const { client, transport, resolvedTransport } = await openConnection(entry.config, entry.scope);
279
- entry.client = client;
280
- entry.transport = transport;
281
- if (resolvedTransport !== undefined)
282
- entry.config.transport = resolvedTransport;
283
- const list = await client.listTools();
284
- entry.tools = (list.tools ?? []).map((t) => ({
285
- name: t.name,
286
- description: typeof t.description === "string" ? t.description : "",
287
- inputSchema: t.inputSchema ?? {
288
- type: "object",
289
- properties: {},
290
- },
291
- }));
292
- entry.bridged = entry.tools.map((t) => bridgeMcpTool({
293
- serverName: entry.name,
294
- toolName: t.name,
295
- description: t.description,
296
- inputSchema: t.inputSchema,
297
- getClient: () => pool.get(entryKey(entry.scope, entry.name))?.client,
298
- recoverStaleSession: () => recoverStaleSession(entry.scope, entry.name),
299
- }));
300
- entry.state = "connected";
301
- }
302
- catch (err) {
303
- delete entry.client;
304
- delete entry.transport;
305
- entry.tools = [];
306
- entry.bridged = [];
307
- entry.state = "error";
308
- entry.lastError = err instanceof Error ? err.message : String(err);
309
- }
310
- }
311
- async function recoverStaleSession(scope, name) {
312
- const entry = pool.get(entryKey(scope, name));
313
- if (entry === undefined || entry.config.enabled === false)
314
- return false;
315
- if (entry.reconnecting !== undefined)
316
- return await entry.reconnecting;
317
- entry.reconnecting = (async () => {
318
- await disconnectEntry(entry);
319
- await connectEntry(entry);
320
- return entry.state === "connected" && entry.client !== undefined;
321
- })();
322
- try {
323
- return await entry.reconnecting;
324
- }
325
- finally {
326
- if (entry.reconnecting !== undefined)
327
- delete entry.reconnecting;
328
- }
329
- }
330
- async function disconnectEntry(entry) {
331
- const client = entry.client;
332
- const transport = entry.transport;
333
- delete entry.client;
334
- delete entry.transport;
335
- entry.tools = [];
336
- entry.bridged = [];
337
- if (entry.state !== "disabled")
338
- entry.state = "idle";
339
- await Promise.resolve(client?.close()).catch(() => undefined);
340
- await Promise.resolve(transport?.close()).catch(() => undefined);
341
- }
342
- async function openConnection(cfg, scope) {
343
- if (isStdioConfig(cfg)) {
344
- return await openStdio(cfg, scope);
345
- }
346
- if (cfg.url === undefined) {
347
- throw new Error("mcp: server has neither url nor command");
348
- }
349
- const url = new URL(cfg.url);
350
- const requested = cfg.transport ?? "auto";
351
- if (requested === "streamable-http") {
352
- return await openStreamableHttp(url, cfg.headers);
353
- }
354
- if (requested === "sse") {
355
- return await openSse(url, cfg.headers);
356
- }
357
- try {
358
- return await openStreamableHttp(url, cfg.headers);
359
- }
360
- catch {
361
- return await openSse(url, cfg.headers);
362
- }
363
- }
364
- async function openStdio(cfg, scope) {
365
- if (cfg.command === undefined || cfg.command.length === 0) {
366
- throw new Error("mcp: stdio server requires a command");
367
- }
368
- const resolvedCwd = cfg.cwd ?? (scope === "global" ? undefined : projectCwdHint(scope.project));
369
- const env = {
370
- ...getDefaultEnvironment(),
371
- ...(cfg.env ?? {}),
372
- };
373
- const transport = new StdioClientTransport({
374
- command: cfg.command,
375
- args: cfg.args ?? [],
376
- env,
377
- ...(resolvedCwd !== undefined ? { cwd: resolvedCwd } : {}),
378
- stderr: "inherit",
379
- });
380
- const client = new Client({ name: "pi-kot", version: "0.1.0" }, { capabilities: {} });
381
- await client.connect(transport);
382
- return { client, transport, resolvedTransport: undefined };
383
- }
384
- function projectCwdHint(projectId) {
385
- for (const e of pool.values()) {
386
- if (e.scope !== "global" && e.scope.project === projectId) {
387
- return e.config.cwd ?? cachedProjectPaths.get(projectId);
388
- }
389
- }
390
- return cachedProjectPaths.get(projectId);
391
- }
392
- const cachedProjectPaths = new Map();
393
- async function openStreamableHttp(url, headers) {
394
- const transport = new StreamableHTTPClientTransport(url, headers !== undefined ? { requestInit: { headers } } : undefined);
395
- const client = new Client({ name: "pi-kot", version: "0.1.0" }, { capabilities: {} });
396
- await client.connect(transport);
397
- return { client, transport, resolvedTransport: "streamable-http" };
398
- }
399
- async function openSse(url, headers) {
400
- const transport = headers !== undefined
401
- ? new SSEClientTransport(url, {
402
- requestInit: { headers },
403
- eventSourceInit: {
404
- fetch: (input, init) => fetch(input, {
405
- ...init,
406
- headers: { ...(init?.headers ?? {}), ...headers },
407
- }),
408
- },
409
- })
410
- : new SSEClientTransport(url);
411
- const client = new Client({ name: "pi-kot", version: "0.1.0" }, { capabilities: {} });
412
- await client.connect(transport);
413
- return { client, transport, resolvedTransport: "sse" };
414
- }
415
- async function readProjectMcpJson(projectPath) {
416
- const path = join(projectPath, PROJECT_MCP_FILE);
417
- try {
418
- const raw = await readFile(path, "utf8");
419
- if (raw.trim().length === 0)
420
- return {};
421
- const parsed = JSON.parse(raw);
422
- if (typeof parsed !== "object" || parsed === null)
423
- return {};
424
- const servers = parsed.servers ?? parsed.mcpServers;
425
- if (typeof servers !== "object" || servers === null)
426
- return {};
427
- return servers;
428
- }
429
- catch (err) {
430
- if (err.code === "ENOENT")
431
- return {};
432
- throw err;
433
- }
434
- }
435
- //# sourceMappingURL=manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export declare function isStdioTrustedForProject(projectId: string): Promise<boolean>;
2
- export declare function grantStdioTrust(projectId: string): Promise<void>;
3
- export declare function revokeStdioTrust(projectId: string): Promise<void>;
4
- export declare function clearProjectStdioTrust(projectId: string): Promise<void>;
5
- //# sourceMappingURL=stdio-trust.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stdio-trust.d.ts","sourceRoot":"","sources":["../../src/mcp/stdio-trust.ts"],"names":[],"mappings":"AAwDA,wBAAsB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlF;AAED,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKtE;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKvE;AAED,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7E"}
@@ -1,78 +0,0 @@
1
- import { chmodSync } from "node:fs";
2
- import { mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
3
- import { dirname } from "node:path";
4
- import { randomUUID } from "node:crypto";
5
- import { config } from "../config.js";
6
- async function ensureDir() {
7
- await mkdir(dirname(config.mcpStdioTrustFile), { recursive: true });
8
- }
9
- async function atomicWrite(data) {
10
- await ensureDir();
11
- const path = config.mcpStdioTrustFile;
12
- const tmp = `${path}.${randomUUID()}.tmp`;
13
- await writeFile(tmp, JSON.stringify(data, null, 2), { mode: 0o600 });
14
- try {
15
- chmodSync(tmp, 0o600);
16
- }
17
- catch {
18
- // best-effort
19
- }
20
- try {
21
- await rename(tmp, path);
22
- }
23
- catch (err) {
24
- await unlink(tmp).catch(() => undefined);
25
- throw err;
26
- }
27
- }
28
- async function readAll() {
29
- try {
30
- const raw = await readFile(config.mcpStdioTrustFile, "utf8");
31
- if (raw.trim().length === 0)
32
- return { projects: {} };
33
- const parsed = JSON.parse(raw);
34
- if (typeof parsed !== "object" || parsed === null || !("projects" in parsed)) {
35
- return { projects: {} };
36
- }
37
- const projects = parsed.projects;
38
- if (typeof projects !== "object" || projects === null)
39
- return { projects: {} };
40
- const out = { projects: {} };
41
- for (const [pid, val] of Object.entries(projects)) {
42
- if (typeof val !== "object" || val === null)
43
- continue;
44
- const trustedAt = val.trustedAt;
45
- if (typeof trustedAt !== "string")
46
- continue;
47
- out.projects[pid] = { trustedAt };
48
- }
49
- return out;
50
- }
51
- catch (err) {
52
- if (err.code === "ENOENT")
53
- return { projects: {} };
54
- throw err;
55
- }
56
- }
57
- export async function isStdioTrustedForProject(projectId) {
58
- const cur = await readAll();
59
- return cur.projects[projectId] !== undefined;
60
- }
61
- export async function grantStdioTrust(projectId) {
62
- const cur = await readAll();
63
- if (cur.projects[projectId] !== undefined)
64
- return;
65
- cur.projects[projectId] = { trustedAt: new Date().toISOString() };
66
- await atomicWrite(cur);
67
- }
68
- export async function revokeStdioTrust(projectId) {
69
- const cur = await readAll();
70
- if (cur.projects[projectId] === undefined)
71
- return;
72
- delete cur.projects[projectId];
73
- await atomicWrite(cur);
74
- }
75
- export async function clearProjectStdioTrust(projectId) {
76
- await revokeStdioTrust(projectId);
77
- }
78
- //# sourceMappingURL=stdio-trust.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stdio-trust.js","sourceRoot":"","sources":["../../src/mcp/stdio-trust.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import type { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
- import type { ToolDefinition } from "@earendil-works/pi-coding-agent";
3
- export declare function bridgeMcpTool(opts: {
4
- serverName: string;
5
- toolName: string;
6
- description: string;
7
- inputSchema: Record<string, unknown>;
8
- getClient: () => Client | undefined;
9
- recoverStaleSession?: () => Promise<boolean>;
10
- }): ToolDefinition;
11
- export declare function mcpResultToAgentResult(res: unknown): {
12
- content: ({
13
- type: "text";
14
- text: string;
15
- } | {
16
- type: "image";
17
- data: string;
18
- mimeType: string;
19
- })[];
20
- details: {} | null;
21
- };
22
- export declare const MCP_TEXT_CAP_CHARS = 30000;
23
- type ContentBlock = {
24
- type: "text";
25
- text: string;
26
- } | {
27
- type: "image";
28
- data: string;
29
- mimeType: string;
30
- };
31
- export declare function capTextContent(blocks: ContentBlock[]): ContentBlock[];
32
- export {};
33
- //# sourceMappingURL=tool-bridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-bridge.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-bridge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACpC,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9C,GAAG,cAAc,CA2CjB;AA4DD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO;;cAGzB,MAAM;cAAQ,MAAM;;cAAa,OAAO;cAAQ,MAAM;kBAAY,MAAM;;;EAyBjG;AAED,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAEzC,KAAK,YAAY,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAqCrE"}