@noodleseed/one 0.95.2 → 0.96.0

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 (423) hide show
  1. package/dist/commands/author-loop.d.ts.map +1 -1
  2. package/dist/commands/author-loop.js +3 -2
  3. package/dist/commands/author-loop.js.map +1 -1
  4. package/dist/commands/connect-oauth.d.ts.map +1 -1
  5. package/dist/commands/connect-oauth.js +1 -0
  6. package/dist/commands/connect-oauth.js.map +1 -1
  7. package/dist/dev.d.ts +6 -1
  8. package/dist/dev.d.ts.map +1 -1
  9. package/dist/dev.js +120 -34
  10. package/dist/dev.js.map +1 -1
  11. package/dist/device-login.js +1 -0
  12. package/dist/device-login.js.map +1 -1
  13. package/dist/devtools-preview.d.ts.map +1 -1
  14. package/dist/devtools-preview.js +82 -8
  15. package/dist/devtools-preview.js.map +1 -1
  16. package/dist/plugin-mode/build-readiness-server.d.ts +1 -1
  17. package/dist/plugin-mode/build-readiness-server.d.ts.map +1 -1
  18. package/dist/plugin-mode/build-readiness-server.js +3 -4
  19. package/dist/plugin-mode/build-readiness-server.js.map +1 -1
  20. package/dist/plugin-mode/plugin-operation-contract.d.ts +1 -1
  21. package/dist/plugin-mode/plugin-operation-contract.d.ts.map +1 -1
  22. package/dist/plugin-mode/plugin-operation-tools.d.ts +1 -2
  23. package/dist/plugin-mode/plugin-operation-tools.d.ts.map +1 -1
  24. package/dist/plugin-mode/plugin-operation-tools.js.map +1 -1
  25. package/node_modules/@modelcontextprotocol/client/LICENSE +216 -0
  26. package/node_modules/@modelcontextprotocol/client/README.md +26 -0
  27. package/node_modules/@modelcontextprotocol/client/dist/ajvProvider-1b6pVpkg.cjs +7531 -0
  28. package/node_modules/@modelcontextprotocol/client/dist/ajvProvider-1b6pVpkg.cjs.map +1 -0
  29. package/node_modules/@modelcontextprotocol/client/dist/ajvProvider-97rDpkRx.mjs +7514 -0
  30. package/node_modules/@modelcontextprotocol/client/dist/ajvProvider-97rDpkRx.mjs.map +1 -0
  31. package/node_modules/@modelcontextprotocol/client/dist/ajvProvider-FOQRM7up.d.cts +1071 -0
  32. package/node_modules/@modelcontextprotocol/client/dist/ajvProvider-FOQRM7up.d.cts.map +1 -0
  33. package/node_modules/@modelcontextprotocol/client/dist/ajvProvider-INpkxUi1.d.mts +1071 -0
  34. package/node_modules/@modelcontextprotocol/client/dist/ajvProvider-INpkxUi1.d.mts.map +1 -0
  35. package/node_modules/@modelcontextprotocol/client/dist/cfWorkerProvider-B3ZJEoRM.d.mts +74 -0
  36. package/node_modules/@modelcontextprotocol/client/dist/cfWorkerProvider-B3ZJEoRM.d.mts.map +1 -0
  37. package/node_modules/@modelcontextprotocol/client/dist/cfWorkerProvider-B3dvjU3F.cjs +986 -0
  38. package/node_modules/@modelcontextprotocol/client/dist/cfWorkerProvider-B3dvjU3F.cjs.map +1 -0
  39. package/node_modules/@modelcontextprotocol/client/dist/cfWorkerProvider-BylNJ1R5.mjs +981 -0
  40. package/node_modules/@modelcontextprotocol/client/dist/cfWorkerProvider-BylNJ1R5.mjs.map +1 -0
  41. package/node_modules/@modelcontextprotocol/client/dist/cfWorkerProvider-doTkZbTr.d.cts +74 -0
  42. package/node_modules/@modelcontextprotocol/client/dist/cfWorkerProvider-doTkZbTr.d.cts.map +1 -0
  43. package/node_modules/@modelcontextprotocol/client/dist/chunk-Bnu9O96Y.cjs +60 -0
  44. package/node_modules/@modelcontextprotocol/client/dist/chunk-Br0eD_fh.mjs +42 -0
  45. package/node_modules/@modelcontextprotocol/client/dist/dialects-BGO_ZrYF.cjs +46 -0
  46. package/node_modules/@modelcontextprotocol/client/dist/dialects-BGO_ZrYF.cjs.map +1 -0
  47. package/node_modules/@modelcontextprotocol/client/dist/dialects-BOhdv1Fc.mjs +34 -0
  48. package/node_modules/@modelcontextprotocol/client/dist/dialects-BOhdv1Fc.mjs.map +1 -0
  49. package/node_modules/@modelcontextprotocol/client/dist/index-CHhhk6PQ.d.cts +2526 -0
  50. package/node_modules/@modelcontextprotocol/client/dist/index-CHhhk6PQ.d.cts.map +1 -0
  51. package/node_modules/@modelcontextprotocol/client/dist/index-D4xIIEF6.d.mts +2523 -0
  52. package/node_modules/@modelcontextprotocol/client/dist/index-D4xIIEF6.d.mts.map +1 -0
  53. package/node_modules/@modelcontextprotocol/client/dist/index.cjs +5690 -0
  54. package/node_modules/@modelcontextprotocol/client/dist/index.cjs.map +1 -0
  55. package/node_modules/@modelcontextprotocol/client/dist/index.d.cts +3252 -0
  56. package/node_modules/@modelcontextprotocol/client/dist/index.d.cts.map +1 -0
  57. package/node_modules/@modelcontextprotocol/client/dist/index.d.mts +3252 -0
  58. package/node_modules/@modelcontextprotocol/client/dist/index.d.mts.map +1 -0
  59. package/node_modules/@modelcontextprotocol/client/dist/index.mjs +5481 -0
  60. package/node_modules/@modelcontextprotocol/client/dist/index.mjs.map +1 -0
  61. package/node_modules/@modelcontextprotocol/client/dist/shimsBrowser.cjs +14 -0
  62. package/node_modules/@modelcontextprotocol/client/dist/shimsBrowser.cjs.map +1 -0
  63. package/node_modules/@modelcontextprotocol/client/dist/shimsBrowser.d.cts +13 -0
  64. package/node_modules/@modelcontextprotocol/client/dist/shimsBrowser.d.cts.map +1 -0
  65. package/node_modules/@modelcontextprotocol/client/dist/shimsBrowser.d.mts +13 -0
  66. package/node_modules/@modelcontextprotocol/client/dist/shimsBrowser.d.mts.map +1 -0
  67. package/node_modules/@modelcontextprotocol/client/dist/shimsBrowser.mjs +13 -0
  68. package/node_modules/@modelcontextprotocol/client/dist/shimsBrowser.mjs.map +1 -0
  69. package/node_modules/@modelcontextprotocol/client/dist/shimsNode.cjs +14 -0
  70. package/node_modules/@modelcontextprotocol/client/dist/shimsNode.cjs.map +1 -0
  71. package/node_modules/@modelcontextprotocol/client/dist/shimsNode.d.cts +13 -0
  72. package/node_modules/@modelcontextprotocol/client/dist/shimsNode.d.cts.map +1 -0
  73. package/node_modules/@modelcontextprotocol/client/dist/shimsNode.d.mts +13 -0
  74. package/node_modules/@modelcontextprotocol/client/dist/shimsNode.d.mts.map +1 -0
  75. package/node_modules/@modelcontextprotocol/client/dist/shimsNode.mjs +13 -0
  76. package/node_modules/@modelcontextprotocol/client/dist/shimsNode.mjs.map +1 -0
  77. package/node_modules/@modelcontextprotocol/client/dist/shimsWorkerd.cjs +21 -0
  78. package/node_modules/@modelcontextprotocol/client/dist/shimsWorkerd.cjs.map +1 -0
  79. package/node_modules/@modelcontextprotocol/client/dist/shimsWorkerd.d.cts +13 -0
  80. package/node_modules/@modelcontextprotocol/client/dist/shimsWorkerd.d.cts.map +1 -0
  81. package/node_modules/@modelcontextprotocol/client/dist/shimsWorkerd.d.mts +13 -0
  82. package/node_modules/@modelcontextprotocol/client/dist/shimsWorkerd.d.mts.map +1 -0
  83. package/node_modules/@modelcontextprotocol/client/dist/shimsWorkerd.mjs +20 -0
  84. package/node_modules/@modelcontextprotocol/client/dist/shimsWorkerd.mjs.map +1 -0
  85. package/node_modules/@modelcontextprotocol/client/dist/src-D_zzAWoS.mjs +7063 -0
  86. package/node_modules/@modelcontextprotocol/client/dist/src-D_zzAWoS.mjs.map +1 -0
  87. package/node_modules/@modelcontextprotocol/client/dist/src-NAgB4Mp8.cjs +7431 -0
  88. package/node_modules/@modelcontextprotocol/client/dist/src-NAgB4Mp8.cjs.map +1 -0
  89. package/node_modules/@modelcontextprotocol/client/dist/stdio.cjs +217 -0
  90. package/node_modules/@modelcontextprotocol/client/dist/stdio.cjs.map +1 -0
  91. package/node_modules/@modelcontextprotocol/client/dist/stdio.d.cts +96 -0
  92. package/node_modules/@modelcontextprotocol/client/dist/stdio.d.cts.map +1 -0
  93. package/node_modules/@modelcontextprotocol/client/dist/stdio.d.mts +96 -0
  94. package/node_modules/@modelcontextprotocol/client/dist/stdio.d.mts.map +1 -0
  95. package/node_modules/@modelcontextprotocol/client/dist/stdio.mjs +212 -0
  96. package/node_modules/@modelcontextprotocol/client/dist/stdio.mjs.map +1 -0
  97. package/node_modules/@modelcontextprotocol/client/dist/types-DsbMXNFL.d.cts +1099 -0
  98. package/node_modules/@modelcontextprotocol/client/dist/types-DsbMXNFL.d.cts.map +1 -0
  99. package/node_modules/@modelcontextprotocol/client/dist/types-mS0yxCL0.d.mts +1099 -0
  100. package/node_modules/@modelcontextprotocol/client/dist/types-mS0yxCL0.d.mts.map +1 -0
  101. package/node_modules/@modelcontextprotocol/client/dist/validators/ajv.cjs +5 -0
  102. package/node_modules/@modelcontextprotocol/client/dist/validators/ajv.d.cts +2 -0
  103. package/node_modules/@modelcontextprotocol/client/dist/validators/ajv.d.mts +2 -0
  104. package/node_modules/@modelcontextprotocol/client/dist/validators/ajv.mjs +3 -0
  105. package/node_modules/@modelcontextprotocol/client/dist/validators/cfWorker.cjs +3 -0
  106. package/node_modules/@modelcontextprotocol/client/dist/validators/cfWorker.d.cts +2 -0
  107. package/node_modules/@modelcontextprotocol/client/dist/validators/cfWorker.d.mts +2 -0
  108. package/node_modules/@modelcontextprotocol/client/dist/validators/cfWorker.mjs +3 -0
  109. package/node_modules/@modelcontextprotocol/client/package.json +166 -0
  110. package/node_modules/@modelcontextprotocol/core/LICENSE +216 -0
  111. package/node_modules/@modelcontextprotocol/core/README.md +40 -0
  112. package/node_modules/@modelcontextprotocol/core/dist/auth-BWdKR39I.d.mts +8501 -0
  113. package/node_modules/@modelcontextprotocol/core/dist/auth-BWdKR39I.d.mts.map +1 -0
  114. package/node_modules/@modelcontextprotocol/core/dist/auth-CUe6YdwF.mjs +1678 -0
  115. package/node_modules/@modelcontextprotocol/core/dist/auth-CUe6YdwF.mjs.map +1 -0
  116. package/node_modules/@modelcontextprotocol/core/dist/auth-CfDMXiII.cjs +2899 -0
  117. package/node_modules/@modelcontextprotocol/core/dist/auth-CfDMXiII.cjs.map +1 -0
  118. package/node_modules/@modelcontextprotocol/core/dist/auth-hYtaIUZm.d.cts +8501 -0
  119. package/node_modules/@modelcontextprotocol/core/dist/auth-hYtaIUZm.d.cts.map +1 -0
  120. package/node_modules/@modelcontextprotocol/core/dist/index.cjs +175 -0
  121. package/node_modules/@modelcontextprotocol/core/dist/index.d.cts +2 -0
  122. package/node_modules/@modelcontextprotocol/core/dist/index.d.mts +2 -0
  123. package/node_modules/@modelcontextprotocol/core/dist/index.mjs +3 -0
  124. package/node_modules/@modelcontextprotocol/core/dist/internal.cjs +201 -0
  125. package/node_modules/@modelcontextprotocol/core/dist/internal.d.cts +99 -0
  126. package/node_modules/@modelcontextprotocol/core/dist/internal.d.cts.map +1 -0
  127. package/node_modules/@modelcontextprotocol/core/dist/internal.d.mts +99 -0
  128. package/node_modules/@modelcontextprotocol/core/dist/internal.d.mts.map +1 -0
  129. package/node_modules/@modelcontextprotocol/core/dist/internal.mjs +3 -0
  130. package/node_modules/@modelcontextprotocol/core/package.json +85 -0
  131. package/node_modules/@modelcontextprotocol/server/LICENSE +216 -0
  132. package/node_modules/@modelcontextprotocol/server/README.md +30 -0
  133. package/node_modules/@modelcontextprotocol/server/dist/ajvProvider-CEoC__sr.mjs +7514 -0
  134. package/node_modules/@modelcontextprotocol/server/dist/ajvProvider-CEoC__sr.mjs.map +1 -0
  135. package/node_modules/@modelcontextprotocol/server/dist/ajvProvider-CgI-5L6O.d.mts +1071 -0
  136. package/node_modules/@modelcontextprotocol/server/dist/ajvProvider-CgI-5L6O.d.mts.map +1 -0
  137. package/node_modules/@modelcontextprotocol/server/dist/ajvProvider-FOQRM7up.d.cts +1071 -0
  138. package/node_modules/@modelcontextprotocol/server/dist/ajvProvider-FOQRM7up.d.cts.map +1 -0
  139. package/node_modules/@modelcontextprotocol/server/dist/ajvProvider-ZaoO9afR.cjs +7531 -0
  140. package/node_modules/@modelcontextprotocol/server/dist/ajvProvider-ZaoO9afR.cjs.map +1 -0
  141. package/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-BwbPzsdI.cjs +986 -0
  142. package/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-BwbPzsdI.cjs.map +1 -0
  143. package/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-C03CSigr.d.mts +74 -0
  144. package/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-C03CSigr.d.mts.map +1 -0
  145. package/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-doTkZbTr.d.cts +74 -0
  146. package/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-doTkZbTr.d.cts.map +1 -0
  147. package/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-p3WaZPqB.mjs +981 -0
  148. package/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-p3WaZPqB.mjs.map +1 -0
  149. package/node_modules/@modelcontextprotocol/server/dist/chunk-Bnu9O96Y.cjs +60 -0
  150. package/node_modules/@modelcontextprotocol/server/dist/chunk-Br0eD_fh.mjs +42 -0
  151. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-CLhGwQTn.d.mts +4043 -0
  152. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-CLhGwQTn.d.mts.map +1 -0
  153. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-dBHMsxwf.d.cts +4045 -0
  154. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-dBHMsxwf.d.cts.map +1 -0
  155. package/node_modules/@modelcontextprotocol/server/dist/dialects-D8eXzoGv.cjs +46 -0
  156. package/node_modules/@modelcontextprotocol/server/dist/dialects-D8eXzoGv.cjs.map +1 -0
  157. package/node_modules/@modelcontextprotocol/server/dist/dialects-DoSzNhcb.mjs +34 -0
  158. package/node_modules/@modelcontextprotocol/server/dist/dialects-DoSzNhcb.mjs.map +1 -0
  159. package/node_modules/@modelcontextprotocol/server/dist/index.cjs +2055 -0
  160. package/node_modules/@modelcontextprotocol/server/dist/index.cjs.map +1 -0
  161. package/node_modules/@modelcontextprotocol/server/dist/index.d.cts +739 -0
  162. package/node_modules/@modelcontextprotocol/server/dist/index.d.cts.map +1 -0
  163. package/node_modules/@modelcontextprotocol/server/dist/index.d.mts +739 -0
  164. package/node_modules/@modelcontextprotocol/server/dist/index.d.mts.map +1 -0
  165. package/node_modules/@modelcontextprotocol/server/dist/index.mjs +1870 -0
  166. package/node_modules/@modelcontextprotocol/server/dist/index.mjs.map +1 -0
  167. package/node_modules/@modelcontextprotocol/server/dist/mcp-D7GmuPnv.cjs +2022 -0
  168. package/node_modules/@modelcontextprotocol/server/dist/mcp-D7GmuPnv.cjs.map +1 -0
  169. package/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs +1931 -0
  170. package/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs.map +1 -0
  171. package/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.cjs +23 -0
  172. package/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.cjs.map +1 -0
  173. package/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.d.cts +11 -0
  174. package/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.d.cts.map +1 -0
  175. package/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.d.mts +11 -0
  176. package/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.d.mts.map +1 -0
  177. package/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.mjs +22 -0
  178. package/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.mjs.map +1 -0
  179. package/node_modules/@modelcontextprotocol/server/dist/shimsNode.cjs +12 -0
  180. package/node_modules/@modelcontextprotocol/server/dist/shimsNode.d.cts +3 -0
  181. package/node_modules/@modelcontextprotocol/server/dist/shimsNode.d.mts +3 -0
  182. package/node_modules/@modelcontextprotocol/server/dist/shimsNode.mjs +4 -0
  183. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs +30 -0
  184. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs.map +1 -0
  185. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.d.cts +10 -0
  186. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.d.cts.map +1 -0
  187. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.d.mts +10 -0
  188. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.d.mts.map +1 -0
  189. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs +29 -0
  190. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs.map +1 -0
  191. package/node_modules/@modelcontextprotocol/server/dist/src-CX2iR2pK.mjs +7606 -0
  192. package/node_modules/@modelcontextprotocol/server/dist/src-CX2iR2pK.mjs.map +1 -0
  193. package/node_modules/@modelcontextprotocol/server/dist/src-STyD_Vvf.cjs +8104 -0
  194. package/node_modules/@modelcontextprotocol/server/dist/src-STyD_Vvf.cjs.map +1 -0
  195. package/node_modules/@modelcontextprotocol/server/dist/stdio.cjs +564 -0
  196. package/node_modules/@modelcontextprotocol/server/dist/stdio.cjs.map +1 -0
  197. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts +107 -0
  198. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts.map +1 -0
  199. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts +107 -0
  200. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts.map +1 -0
  201. package/node_modules/@modelcontextprotocol/server/dist/stdio.mjs +562 -0
  202. package/node_modules/@modelcontextprotocol/server/dist/stdio.mjs.map +1 -0
  203. package/node_modules/@modelcontextprotocol/server/dist/types-DUs7mGBv.d.mts +1099 -0
  204. package/node_modules/@modelcontextprotocol/server/dist/types-DUs7mGBv.d.mts.map +1 -0
  205. package/node_modules/@modelcontextprotocol/server/dist/types-DsbMXNFL.d.cts +1099 -0
  206. package/node_modules/@modelcontextprotocol/server/dist/types-DsbMXNFL.d.cts.map +1 -0
  207. package/node_modules/@modelcontextprotocol/server/dist/validators/ajv.cjs +5 -0
  208. package/node_modules/@modelcontextprotocol/server/dist/validators/ajv.d.cts +2 -0
  209. package/node_modules/@modelcontextprotocol/server/dist/validators/ajv.d.mts +2 -0
  210. package/node_modules/@modelcontextprotocol/server/dist/validators/ajv.mjs +3 -0
  211. package/node_modules/@modelcontextprotocol/server/dist/validators/cfWorker.cjs +3 -0
  212. package/node_modules/@modelcontextprotocol/server/dist/validators/cfWorker.d.cts +2 -0
  213. package/node_modules/@modelcontextprotocol/server/dist/validators/cfWorker.d.mts +2 -0
  214. package/node_modules/@modelcontextprotocol/server/dist/validators/cfWorker.mjs +3 -0
  215. package/node_modules/@modelcontextprotocol/server/package.json +160 -0
  216. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +1 -1
  217. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
  218. package/node_modules/@noodle-borg/agent-kit/dist/skill-server-playbook-ref.d.ts.map +1 -1
  219. package/node_modules/@noodle-borg/agent-kit/dist/skill-server-playbook-ref.js +1 -0
  220. package/node_modules/@noodle-borg/agent-kit/dist/skill-server-playbook-ref.js.map +1 -1
  221. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  222. package/node_modules/@noodle-borg/capabilities/dist/index.d.ts.map +1 -1
  223. package/node_modules/@noodle-borg/capabilities/dist/index.js +10 -3
  224. package/node_modules/@noodle-borg/capabilities/dist/index.js.map +1 -1
  225. package/node_modules/@noodle-borg/developer-mcp/dist/prompts.d.ts +1 -1
  226. package/node_modules/@noodle-borg/developer-mcp/dist/prompts.d.ts.map +1 -1
  227. package/node_modules/@noodle-borg/developer-mcp/dist/resources.d.ts +1 -1
  228. package/node_modules/@noodle-borg/developer-mcp/dist/resources.d.ts.map +1 -1
  229. package/node_modules/@noodle-borg/developer-mcp/dist/server.d.ts +1 -1
  230. package/node_modules/@noodle-borg/developer-mcp/dist/server.d.ts.map +1 -1
  231. package/node_modules/@noodle-borg/developer-mcp/dist/server.js +3 -1
  232. package/node_modules/@noodle-borg/developer-mcp/dist/server.js.map +1 -1
  233. package/node_modules/@noodle-borg/developer-mcp/package.json +2 -1
  234. package/node_modules/@noodle-borg/module/dist/contract.d.ts +2 -0
  235. package/node_modules/@noodle-borg/module/dist/contract.d.ts.map +1 -1
  236. package/node_modules/@noodle-borg/module/dist/contract.js.map +1 -1
  237. package/node_modules/@noodle-borg/protocol/dist/error-codes.d.ts +11 -0
  238. package/node_modules/@noodle-borg/protocol/dist/error-codes.d.ts.map +1 -0
  239. package/node_modules/@noodle-borg/protocol/dist/error-codes.js +11 -0
  240. package/node_modules/@noodle-borg/protocol/dist/error-codes.js.map +1 -0
  241. package/node_modules/@noodle-borg/protocol/dist/handlers/prompts.d.ts +6 -0
  242. package/node_modules/@noodle-borg/protocol/dist/handlers/prompts.d.ts.map +1 -0
  243. package/node_modules/@noodle-borg/protocol/dist/handlers/prompts.js +31 -0
  244. package/node_modules/@noodle-borg/protocol/dist/handlers/prompts.js.map +1 -0
  245. package/node_modules/@noodle-borg/protocol/dist/handlers/resources.d.ts +6 -0
  246. package/node_modules/@noodle-borg/protocol/dist/handlers/resources.d.ts.map +1 -0
  247. package/node_modules/@noodle-borg/protocol/dist/handlers/resources.js +50 -0
  248. package/node_modules/@noodle-borg/protocol/dist/handlers/resources.js.map +1 -0
  249. package/node_modules/@noodle-borg/protocol/dist/handlers/tools.d.ts +6 -0
  250. package/node_modules/@noodle-borg/protocol/dist/handlers/tools.d.ts.map +1 -0
  251. package/node_modules/@noodle-borg/protocol/dist/handlers/tools.js +126 -0
  252. package/node_modules/@noodle-borg/protocol/dist/handlers/tools.js.map +1 -0
  253. package/node_modules/@noodle-borg/protocol/dist/index.d.ts +6 -2
  254. package/node_modules/@noodle-borg/protocol/dist/index.d.ts.map +1 -1
  255. package/node_modules/@noodle-borg/protocol/dist/index.js +4 -1
  256. package/node_modules/@noodle-borg/protocol/dist/index.js.map +1 -1
  257. package/node_modules/@noodle-borg/protocol/dist/interaction-envelope.d.ts +10 -0
  258. package/node_modules/@noodle-borg/protocol/dist/interaction-envelope.d.ts.map +1 -0
  259. package/node_modules/@noodle-borg/protocol/dist/interaction-envelope.js +66 -0
  260. package/node_modules/@noodle-borg/protocol/dist/interaction-envelope.js.map +1 -0
  261. package/node_modules/@noodle-borg/protocol/dist/jsonrpc.d.ts +1 -0
  262. package/node_modules/@noodle-borg/protocol/dist/jsonrpc.d.ts.map +1 -1
  263. package/node_modules/@noodle-borg/protocol/dist/jsonrpc.js +1 -0
  264. package/node_modules/@noodle-borg/protocol/dist/jsonrpc.js.map +1 -1
  265. package/node_modules/@noodle-borg/protocol/dist/observation.d.ts +27 -0
  266. package/node_modules/@noodle-borg/protocol/dist/observation.d.ts.map +1 -0
  267. package/node_modules/@noodle-borg/protocol/dist/observation.js +20 -0
  268. package/node_modules/@noodle-borg/protocol/dist/observation.js.map +1 -0
  269. package/node_modules/@noodle-borg/protocol/dist/request-deps.d.ts +6 -0
  270. package/node_modules/@noodle-borg/protocol/dist/request-deps.d.ts.map +1 -0
  271. package/node_modules/@noodle-borg/protocol/dist/request-deps.js +16 -0
  272. package/node_modules/@noodle-borg/protocol/dist/request-deps.js.map +1 -0
  273. package/node_modules/@noodle-borg/protocol/dist/request-state.d.ts +50 -0
  274. package/node_modules/@noodle-borg/protocol/dist/request-state.d.ts.map +1 -0
  275. package/node_modules/@noodle-borg/protocol/dist/request-state.js +195 -0
  276. package/node_modules/@noodle-borg/protocol/dist/request-state.js.map +1 -0
  277. package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts +16 -23
  278. package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts.map +1 -1
  279. package/node_modules/@noodle-borg/protocol/dist/sdk-server.js +7 -341
  280. package/node_modules/@noodle-borg/protocol/dist/sdk-server.js.map +1 -1
  281. package/node_modules/@noodle-borg/protocol/dist/tool-authorization.d.ts +1 -1
  282. package/node_modules/@noodle-borg/protocol/dist/tool-authorization.d.ts.map +1 -1
  283. package/node_modules/@noodle-borg/protocol/dist/tool-authorization.js +1 -1
  284. package/node_modules/@noodle-borg/protocol/dist/tool-authorization.js.map +1 -1
  285. package/node_modules/@noodle-borg/protocol/dist/tool-interaction.d.ts +7 -2
  286. package/node_modules/@noodle-borg/protocol/dist/tool-interaction.d.ts.map +1 -1
  287. package/node_modules/@noodle-borg/protocol/dist/tool-interaction.js +8 -1
  288. package/node_modules/@noodle-borg/protocol/dist/tool-interaction.js.map +1 -1
  289. package/node_modules/@noodle-borg/protocol/dist/tool-results.d.ts +7 -0
  290. package/node_modules/@noodle-borg/protocol/dist/tool-results.d.ts.map +1 -0
  291. package/node_modules/@noodle-borg/protocol/dist/tool-results.js +49 -0
  292. package/node_modules/@noodle-borg/protocol/dist/tool-results.js.map +1 -0
  293. package/node_modules/@noodle-borg/protocol/dist/v2/cache-hints.d.ts +11 -0
  294. package/node_modules/@noodle-borg/protocol/dist/v2/cache-hints.d.ts.map +1 -0
  295. package/node_modules/@noodle-borg/protocol/dist/v2/cache-hints.js +14 -0
  296. package/node_modules/@noodle-borg/protocol/dist/v2/cache-hints.js.map +1 -0
  297. package/node_modules/@noodle-borg/protocol/dist/v2/confirmation.d.ts +16 -0
  298. package/node_modules/@noodle-borg/protocol/dist/v2/confirmation.d.ts.map +1 -0
  299. package/node_modules/@noodle-borg/protocol/dist/v2/confirmation.js +57 -0
  300. package/node_modules/@noodle-borg/protocol/dist/v2/confirmation.js.map +1 -0
  301. package/node_modules/@noodle-borg/protocol/dist/v2/handler.d.ts +11 -0
  302. package/node_modules/@noodle-borg/protocol/dist/v2/handler.d.ts.map +1 -0
  303. package/node_modules/@noodle-borg/protocol/dist/v2/handler.js +154 -0
  304. package/node_modules/@noodle-borg/protocol/dist/v2/handler.js.map +1 -0
  305. package/node_modules/@noodle-borg/protocol/dist/v2/input-required.d.ts +12 -0
  306. package/node_modules/@noodle-borg/protocol/dist/v2/input-required.d.ts.map +1 -0
  307. package/node_modules/@noodle-borg/protocol/dist/v2/input-required.js +78 -0
  308. package/node_modules/@noodle-borg/protocol/dist/v2/input-required.js.map +1 -0
  309. package/node_modules/@noodle-borg/protocol/dist/v2/server.d.ts +5 -0
  310. package/node_modules/@noodle-borg/protocol/dist/v2/server.d.ts.map +1 -0
  311. package/node_modules/@noodle-borg/protocol/dist/v2/server.js +314 -0
  312. package/node_modules/@noodle-borg/protocol/dist/v2/server.js.map +1 -0
  313. package/node_modules/@noodle-borg/protocol/dist/v2/tool-list.d.ts +4 -0
  314. package/node_modules/@noodle-borg/protocol/dist/v2/tool-list.d.ts.map +1 -0
  315. package/node_modules/@noodle-borg/protocol/dist/v2/tool-list.js +25 -0
  316. package/node_modules/@noodle-borg/protocol/dist/v2/tool-list.js.map +1 -0
  317. package/node_modules/@noodle-borg/protocol/dist/v2/versions.d.ts +6 -0
  318. package/node_modules/@noodle-borg/protocol/dist/v2/versions.d.ts.map +1 -0
  319. package/node_modules/@noodle-borg/protocol/dist/v2/versions.js +11 -0
  320. package/node_modules/@noodle-borg/protocol/dist/v2/versions.js.map +1 -0
  321. package/node_modules/@noodle-borg/protocol/package.json +3 -0
  322. package/node_modules/@noodle-borg/service/dist/billing/usage-identity.d.ts +2 -0
  323. package/node_modules/@noodle-borg/service/dist/billing/usage-identity.d.ts.map +1 -1
  324. package/node_modules/@noodle-borg/service/dist/billing/usage-identity.js +15 -7
  325. package/node_modules/@noodle-borg/service/dist/billing/usage-identity.js.map +1 -1
  326. package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.d.ts +2 -1
  327. package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.d.ts.map +1 -1
  328. package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js +16 -14
  329. package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js.map +1 -1
  330. package/node_modules/@noodle-borg/service/dist/developer-mcp/service-options.d.ts.map +1 -1
  331. package/node_modules/@noodle-borg/service/dist/developer-mcp/service-options.js +1 -0
  332. package/node_modules/@noodle-borg/service/dist/developer-mcp/service-options.js.map +1 -1
  333. package/node_modules/@noodle-borg/service/dist/index.d.ts +2 -0
  334. package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
  335. package/node_modules/@noodle-borg/service/dist/index.js +2 -0
  336. package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
  337. package/node_modules/@noodle-borg/service/dist/main.js +3 -0
  338. package/node_modules/@noodle-borg/service/dist/main.js.map +1 -1
  339. package/node_modules/@noodle-borg/service/dist/mcp-confirmation-nonce-postgres.d.ts +14 -0
  340. package/node_modules/@noodle-borg/service/dist/mcp-confirmation-nonce-postgres.d.ts.map +1 -0
  341. package/node_modules/@noodle-borg/service/dist/mcp-confirmation-nonce-postgres.js +35 -0
  342. package/node_modules/@noodle-borg/service/dist/mcp-confirmation-nonce-postgres.js.map +1 -0
  343. package/node_modules/@noodle-borg/service/dist/mcp-protocol-runtime.d.ts +16 -0
  344. package/node_modules/@noodle-borg/service/dist/mcp-protocol-runtime.d.ts.map +1 -0
  345. package/node_modules/@noodle-borg/service/dist/mcp-protocol-runtime.js +21 -0
  346. package/node_modules/@noodle-borg/service/dist/mcp-protocol-runtime.js.map +1 -0
  347. package/node_modules/@noodle-borg/service/dist/oauth/app.d.ts.map +1 -1
  348. package/node_modules/@noodle-borg/service/dist/oauth/app.js +47 -0
  349. package/node_modules/@noodle-borg/service/dist/oauth/app.js.map +1 -1
  350. package/node_modules/@noodle-borg/service/dist/oauth/authorization-response.d.ts +4 -0
  351. package/node_modules/@noodle-borg/service/dist/oauth/authorization-response.d.ts.map +1 -0
  352. package/node_modules/@noodle-borg/service/dist/oauth/authorization-response.js +6 -0
  353. package/node_modules/@noodle-borg/service/dist/oauth/authorization-response.js.map +1 -0
  354. package/node_modules/@noodle-borg/service/dist/oauth/consent-decision.d.ts.map +1 -1
  355. package/node_modules/@noodle-borg/service/dist/oauth/consent-decision.js +2 -1
  356. package/node_modules/@noodle-borg/service/dist/oauth/consent-decision.js.map +1 -1
  357. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.js +2 -1
  358. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.js.map +1 -1
  359. package/node_modules/@noodle-borg/service/dist/oauth/first-party-client.d.ts.map +1 -1
  360. package/node_modules/@noodle-borg/service/dist/oauth/first-party-client.js +1 -0
  361. package/node_modules/@noodle-borg/service/dist/oauth/first-party-client.js.map +1 -1
  362. package/node_modules/@noodle-borg/service/dist/oauth/metadata.d.ts.map +1 -1
  363. package/node_modules/@noodle-borg/service/dist/oauth/metadata.js +1 -0
  364. package/node_modules/@noodle-borg/service/dist/oauth/metadata.js.map +1 -1
  365. package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts.map +1 -1
  366. package/node_modules/@noodle-borg/service/dist/oauth/provider.js +1 -0
  367. package/node_modules/@noodle-borg/service/dist/oauth/provider.js.map +1 -1
  368. package/node_modules/@noodle-borg/service/dist/oauth/token-issuer.d.ts.map +1 -1
  369. package/node_modules/@noodle-borg/service/dist/oauth/token-issuer.js +2 -1
  370. package/node_modules/@noodle-borg/service/dist/oauth/token-issuer.js.map +1 -1
  371. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-handler.d.ts.map +1 -1
  372. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-handler.js +1 -0
  373. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-handler.js.map +1 -1
  374. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-support.d.ts +1 -0
  375. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-support.d.ts.map +1 -1
  376. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-support.js +2 -1
  377. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-support.js.map +1 -1
  378. package/node_modules/@noodle-borg/service/dist/options.d.ts +8 -1
  379. package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
  380. package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
  381. package/node_modules/@noodle-borg/service/dist/serve.js +15 -0
  382. package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
  383. package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
  384. package/node_modules/@noodle-borg/service/dist/service.js +5 -0
  385. package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
  386. package/node_modules/@noodle-borg/service/dist/store/request-events-postgres.d.ts.map +1 -1
  387. package/node_modules/@noodle-borg/service/dist/store/request-events-postgres.js +9 -2
  388. package/node_modules/@noodle-borg/service/dist/store/request-events-postgres.js.map +1 -1
  389. package/node_modules/@noodle-borg/service/dist/store/request-events.d.ts.map +1 -1
  390. package/node_modules/@noodle-borg/service/dist/store/request-events.js +1 -0
  391. package/node_modules/@noodle-borg/service/dist/store/request-events.js.map +1 -1
  392. package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts +19 -67
  393. package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts.map +1 -1
  394. package/node_modules/@noodle-borg/transport-http/dist/handler.js +12 -281
  395. package/node_modules/@noodle-borg/transport-http/dist/handler.js.map +1 -1
  396. package/node_modules/@noodle-borg/transport-http/dist/index.d.ts +2 -1
  397. package/node_modules/@noodle-borg/transport-http/dist/index.d.ts.map +1 -1
  398. package/node_modules/@noodle-borg/transport-http/dist/index.js +1 -0
  399. package/node_modules/@noodle-borg/transport-http/dist/index.js.map +1 -1
  400. package/node_modules/@noodle-borg/transport-http/dist/request-capture.d.ts.map +1 -1
  401. package/node_modules/@noodle-borg/transport-http/dist/request-capture.js +38 -4
  402. package/node_modules/@noodle-borg/transport-http/dist/request-capture.js.map +1 -1
  403. package/node_modules/@noodle-borg/transport-http/dist/responses.d.ts +28 -0
  404. package/node_modules/@noodle-borg/transport-http/dist/responses.d.ts.map +1 -0
  405. package/node_modules/@noodle-borg/transport-http/dist/responses.js +50 -0
  406. package/node_modules/@noodle-borg/transport-http/dist/responses.js.map +1 -0
  407. package/node_modules/@noodle-borg/transport-http/dist/routing.d.ts +28 -0
  408. package/node_modules/@noodle-borg/transport-http/dist/routing.d.ts.map +1 -0
  409. package/node_modules/@noodle-borg/transport-http/dist/routing.js +52 -0
  410. package/node_modules/@noodle-borg/transport-http/dist/routing.js.map +1 -0
  411. package/node_modules/@noodle-borg/transport-http/dist/serve-request.d.ts +35 -0
  412. package/node_modules/@noodle-borg/transport-http/dist/serve-request.d.ts.map +1 -0
  413. package/node_modules/@noodle-borg/transport-http/dist/serve-request.js +190 -0
  414. package/node_modules/@noodle-borg/transport-http/dist/serve-request.js.map +1 -0
  415. package/node_modules/@noodle-borg/transport-http/dist/tool-dispatch.d.ts +1 -1
  416. package/node_modules/@noodle-borg/transport-http/dist/tool-dispatch.d.ts.map +1 -1
  417. package/node_modules/@noodle-borg/transport-http/dist/tool-dispatch.js +17 -5
  418. package/node_modules/@noodle-borg/transport-http/dist/tool-dispatch.js.map +1 -1
  419. package/node_modules/@noodle-borg/transport-http/dist/web-bridge.d.ts +9 -0
  420. package/node_modules/@noodle-borg/transport-http/dist/web-bridge.d.ts.map +1 -0
  421. package/node_modules/@noodle-borg/transport-http/dist/web-bridge.js +61 -0
  422. package/node_modules/@noodle-borg/transport-http/dist/web-bridge.js.map +1 -0
  423. package/package.json +6 -2
@@ -0,0 +1,28 @@
1
+ import type { IncomingMessage } from 'node:http';
2
+ import type { TenantRouteRef } from '@noodle-borg/module';
3
+ export interface PublicTenantRouting {
4
+ readonly allowedBaseDomains: readonly string[];
5
+ readonly edgeToken: string;
6
+ }
7
+ export type ParsedRoute = {
8
+ readonly kind: 'tenant';
9
+ readonly ref: TenantRouteRef;
10
+ readonly logId: string;
11
+ readonly publicResourceUrl?: string;
12
+ } | {
13
+ readonly kind: 'deployment';
14
+ readonly deploymentId: string;
15
+ readonly logId: string;
16
+ };
17
+ export type RouteResolution = {
18
+ readonly ok: true;
19
+ readonly route: ParsedRoute | null;
20
+ } | {
21
+ readonly ok: false;
22
+ readonly status: 403;
23
+ };
24
+ export declare function resolveRoute(req: IncomingMessage, pathname: string, publicTenantRouting: PublicTenantRouting | undefined): RouteResolution;
25
+ export declare function parseRoute(pathname: string): ParsedRoute | null;
26
+ export declare function tenantLogId(ref: TenantRouteRef): string;
27
+ export declare function safeDecode(value: string): string | null;
28
+ //# sourceMappingURL=routing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../src/routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAO1D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,WAAW,GACnB;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3F,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAA;CAAE,CAAC;AAEjD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,MAAM,EAChB,mBAAmB,EAAE,mBAAmB,GAAG,SAAS,GACnD,eAAe,CAsBjB;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAY/D;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAEvD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMvD"}
@@ -0,0 +1,52 @@
1
+ import { parseLegacyTenantMcpPath, parsePublicTenantMcpUrl } from '@noodle-borg/module';
2
+ import { canonicalPublicResourceUrl, edgeTokenMatches } from './public-routing.js';
3
+ import { header } from './request-capture.js';
4
+ const SERVER_PATH = /^\/([^/]+)\/mcp$/;
5
+ export function resolveRoute(req, pathname, publicTenantRouting) {
6
+ const forwardedHost = header(req, 'x-app-host');
7
+ if (forwardedHost !== undefined) {
8
+ if (publicTenantRouting === undefined ||
9
+ !edgeTokenMatches(header(req, 'x-noodle-edge-token'), publicTenantRouting.edgeToken)) {
10
+ return { ok: false, status: 403 };
11
+ }
12
+ const ref = parsePublicTenantMcpUrl(forwardedHost, publicTenantRouting.allowedBaseDomains);
13
+ if (ref === undefined)
14
+ return { ok: true, route: null };
15
+ return {
16
+ ok: true,
17
+ route: {
18
+ kind: 'tenant',
19
+ ref,
20
+ logId: tenantLogId(ref),
21
+ publicResourceUrl: canonicalPublicResourceUrl(forwardedHost),
22
+ },
23
+ };
24
+ }
25
+ return { ok: true, route: parseRoute(pathname) };
26
+ }
27
+ export function parseRoute(pathname) {
28
+ const tenant = parseLegacyTenantMcpPath(pathname);
29
+ if (tenant !== undefined) {
30
+ return { kind: 'tenant', ref: tenant, logId: tenantLogId(tenant) };
31
+ }
32
+ const deployment = SERVER_PATH.exec(pathname);
33
+ if (deployment) {
34
+ const deploymentId = safeDecode(deployment[1]);
35
+ if (deploymentId === null)
36
+ return null;
37
+ return { kind: 'deployment', deploymentId, logId: deploymentId };
38
+ }
39
+ return null;
40
+ }
41
+ export function tenantLogId(ref) {
42
+ return `${ref.org}/${ref.app}/${ref.env}${ref.serverVersion !== undefined ? `@${ref.serverVersion}` : ''}`;
43
+ }
44
+ export function safeDecode(value) {
45
+ try {
46
+ return decodeURIComponent(value);
47
+ }
48
+ catch {
49
+ return null;
50
+ }
51
+ }
52
+ //# sourceMappingURL=routing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing.js","sourceRoot":"","sources":["../src/routing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAoBvC,MAAM,UAAU,YAAY,CAC1B,GAAoB,EACpB,QAAgB,EAChB,mBAAoD;IAEpD,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAChD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,IACE,mBAAmB,KAAK,SAAS;YACjC,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,qBAAqB,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,EACpF,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACpC,CAAC;QACD,MAAM,GAAG,GAAG,uBAAuB,CAAC,aAAa,EAAE,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;QAC3F,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACxD,OAAO;YACL,EAAE,EAAE,IAAI;YACR,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,GAAG;gBACH,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC;gBACvB,iBAAiB,EAAE,0BAA0B,CAAC,aAAa,CAAC;aAC7D;SACF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;IACrE,CAAC;IACD,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAW,CAAC,CAAC;QACzD,IAAI,YAAY,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACvC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAmB;IAC7C,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC7G,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { AdmissionGate, RequestEventInput, TenantRouteRef } from '@noodle-borg/module';
3
+ import { type ConfirmationNonceLedger, type RequestStateManager, type ServedArtifact } from '@noodle-borg/protocol';
4
+ import type { InvocationContextResolver, McpProtocolMode, OriginPolicy } from './handler.js';
5
+ import { type IdentityAuthorizationOptions } from './identity-authorization.js';
6
+ import type { Logger } from './logging.js';
7
+ import { type HostedToolDispatchHook } from './tool-dispatch.js';
8
+ /** Per-request authentication context for one resolved target. */
9
+ export interface ServeAuth extends IdentityAuthorizationOptions {
10
+ readonly deploymentId: string | undefined;
11
+ readonly app: string | undefined;
12
+ readonly environment: string | undefined;
13
+ readonly admissionGate: AdmissionGate | undefined;
14
+ readonly captureRequestEvent: ((event: RequestEventInput) => void) | undefined;
15
+ readonly resolveInvocationContext: InvocationContextResolver | undefined;
16
+ readonly beforeToolDispatch: HostedToolDispatchHook | undefined;
17
+ readonly protocolMode: McpProtocolMode;
18
+ readonly requestState: RequestStateManager | undefined;
19
+ readonly confirmationNonceLedger: ConfirmationNonceLedger | undefined;
20
+ readonly logger: Logger;
21
+ }
22
+ /**
23
+ * The shared, stateless front-door (origin → method → auth → content-type → accept → body) for one resolved
24
+ * tenant. After the guards pass, the parsed JSON-RPC body is handed to the SDK transport, which writes
25
+ * the full response (including `202` for a notification). Path matching is done by the caller.
26
+ */
27
+ export declare function serveRequest(req: IncomingMessage, res: ServerResponse, target: ServedArtifact, auth: ServeAuth, routeId: string, maxBody: number, allowed: OriginPolicy | undefined, tenant?: TenantRouteRef): Promise<void>;
28
+ export declare function originAllowed(origin: string, allowed: OriginPolicy | undefined): boolean;
29
+ export declare function readBody(req: IncomingMessage, max: number): Promise<{
30
+ ok: true;
31
+ text: string;
32
+ } | {
33
+ ok: false;
34
+ }>;
35
+ //# sourceMappingURL=serve-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve-request.d.ts","sourceRoot":"","sources":["../src/serve-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EACL,KAAK,uBAAuB,EAM5B,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,EAGL,KAAK,4BAA4B,EAElC,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,OAAO,EAAE,KAAK,sBAAsB,EAA0B,MAAM,oBAAoB,CAAC;AAGzF,kEAAkE;AAClE,MAAM,WAAW,SAAU,SAAQ,4BAA4B;IAC7D,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/E,QAAQ,CAAC,wBAAwB,EAAE,yBAAyB,GAAG,SAAS,CAAC;IACzE,QAAQ,CAAC,kBAAkB,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB,GAAG,SAAS,CAAC;IACtE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,MAAM,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAmKf;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAGxF;AAED,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC,CAUrD"}
@@ -0,0 +1,190 @@
1
+ import { createDualEraMcpHandler, handleStatelessHttp, JSON_RPC, } from '@noodle-borg/protocol';
2
+ import { admissionContexts, requestsInvocationContext } from './admission-context.js';
3
+ import { authorizeIdentityMode, authorizeMixedMode, isIdentityMode, } from './identity-authorization.js';
4
+ import { emitRequestEvent, header } from './request-capture.js';
5
+ import { admissionRpcError, rpcError, sendJson } from './responses.js';
6
+ import { preflightToolAuthorization, sendToolAuthorizationDenial } from './tool-authorization.js';
7
+ import { withHostedToolDispatch } from './tool-dispatch.js';
8
+ import { toWebRequest, writeWebResponse } from './web-bridge.js';
9
+ /**
10
+ * The shared, stateless front-door (origin → method → auth → content-type → accept → body) for one resolved
11
+ * tenant. After the guards pass, the parsed JSON-RPC body is handed to the SDK transport, which writes
12
+ * the full response (including `202` for a notification). Path matching is done by the caller.
13
+ */
14
+ export async function serveRequest(req, res, target, auth, routeId, maxBody, allowed, tenant) {
15
+ const startedAt = Date.now();
16
+ const origin = header(req, 'origin');
17
+ if (origin !== undefined && !originAllowed(origin, allowed)) {
18
+ return sendJson(res, 403, rpcError(JSON_RPC.INVALID_REQUEST, 'origin not allowed'));
19
+ }
20
+ if (req.method !== 'POST') {
21
+ // No server-initiated SSE stream this phase: GET/DELETE/other are not allowed.
22
+ res.setHeader('Allow', 'POST');
23
+ return sendJson(res, 405, rpcError(JSON_RPC.INVALID_REQUEST, 'method not allowed'));
24
+ }
25
+ // Identity auth gate, before reading the body so an unauthenticated caller never has its payload buffered
26
+ // and the SDK transport is never constructed for it. A missing accessMode is reserved for loopback/local
27
+ // dev targets and remains open.
28
+ let protocolContext = {};
29
+ let subject;
30
+ if (isIdentityMode(auth.accessMode)) {
31
+ const authResult = await authorizeIdentityMode(req, res, auth);
32
+ if (!authResult.allow)
33
+ return;
34
+ if (authResult.caller !== undefined) {
35
+ protocolContext = {
36
+ caller: authResult.caller,
37
+ ...(authResult.customerIssuer === undefined
38
+ ? {}
39
+ : { customerIssuer: authResult.customerIssuer }),
40
+ ...(authResult.customerRouting === undefined
41
+ ? {}
42
+ : { customerRouting: authResult.customerRouting }),
43
+ };
44
+ subject = authResult.caller.subject;
45
+ res.setHeader('Cache-Control', 'private, no-store');
46
+ }
47
+ else if (authResult.subject !== undefined) {
48
+ subject = authResult.subject;
49
+ }
50
+ }
51
+ else if (auth.accessMode === 'mixed') {
52
+ const authResult = await authorizeMixedMode(req, res, auth);
53
+ if (!authResult.allow)
54
+ return;
55
+ if (authResult.caller !== undefined) {
56
+ protocolContext = {
57
+ caller: authResult.caller,
58
+ ...(authResult.customerIssuer === undefined
59
+ ? {}
60
+ : { customerIssuer: authResult.customerIssuer }),
61
+ ...(authResult.customerRouting === undefined
62
+ ? {}
63
+ : { customerRouting: authResult.customerRouting }),
64
+ };
65
+ subject = authResult.caller.subject;
66
+ res.setHeader('Cache-Control', 'private, no-store');
67
+ }
68
+ }
69
+ const body = await readBody(req, maxBody);
70
+ if (!body.ok)
71
+ return sendJson(res, 413, rpcError(JSON_RPC.INVALID_REQUEST, 'request body too large'));
72
+ let parsed;
73
+ try {
74
+ parsed = JSON.parse(body.text);
75
+ }
76
+ catch {
77
+ return sendJson(res, 400, rpcError(JSON_RPC.PARSE_ERROR, 'invalid JSON'));
78
+ }
79
+ const contexts = admissionContexts(parsed, {
80
+ routeId,
81
+ ...(subject !== undefined ? { subject } : {}),
82
+ ...(tenant !== undefined ? tenant : {}),
83
+ ...(auth.deploymentId !== undefined ? { deploymentId: auth.deploymentId } : {}),
84
+ ...(auth.accessMode !== undefined ? { accessMode: auth.accessMode } : {}),
85
+ ...(req.socket.remoteAddress !== undefined ? { remoteAddress: req.socket.remoteAddress } : {}),
86
+ });
87
+ for (const context of contexts) {
88
+ const decision = auth.admissionGate
89
+ ? await auth.admissionGate(context)
90
+ : { allow: true };
91
+ auth.logger.info('mcp.admission', {
92
+ routeId: context.routeId,
93
+ method: context.method,
94
+ category: context.category,
95
+ ...(context.name !== undefined ? { name: context.name } : {}),
96
+ ...(context.org !== undefined ? { org: context.org } : {}),
97
+ ...(context.app !== undefined ? { app: context.app } : {}),
98
+ ...(context.env !== undefined ? { env: context.env } : {}),
99
+ ...(context.serverVersion !== undefined ? { serverVersion: context.serverVersion } : {}),
100
+ ...(context.accessMode !== undefined ? { accessMode: context.accessMode } : {}),
101
+ decision: decision.allow ? 'allow' : 'deny',
102
+ ...(decision.reason !== undefined ? { reason: decision.reason } : {}),
103
+ });
104
+ if (!decision.allow) {
105
+ if (decision.retryAfterSeconds !== undefined) {
106
+ res.setHeader('Retry-After', String(decision.retryAfterSeconds));
107
+ }
108
+ return sendJson(res, decision.status ?? 403, admissionRpcError(context, decision));
109
+ }
110
+ }
111
+ const authorization = preflightToolAuthorization(parsed, target, protocolContext.caller);
112
+ for (const observation of authorization.observations) {
113
+ auth.logger.info('mcp.tool_authorization', {
114
+ toolName: observation.toolName,
115
+ decision: observation.decision,
116
+ reason: observation.reason,
117
+ ruleClass: observation.ruleClass,
118
+ ruleFingerprint: observation.ruleFingerprint,
119
+ });
120
+ }
121
+ if (authorization.denial !== undefined) {
122
+ sendToolAuthorizationDenial(req, res, auth, authorization.denial);
123
+ return;
124
+ }
125
+ if (auth.resolveInvocationContext !== undefined && requestsInvocationContext(parsed)) {
126
+ const invocationContext = await auth.resolveInvocationContext({
127
+ target,
128
+ ...(protocolContext.caller !== undefined ? { caller: protocolContext.caller } : {}),
129
+ });
130
+ if (invocationContext !== undefined) {
131
+ protocolContext = { ...protocolContext, invocationContext };
132
+ }
133
+ }
134
+ protocolContext = {
135
+ ...protocolContext,
136
+ ...(auth.deploymentId !== undefined ? { deploymentId: auth.deploymentId } : {}),
137
+ ...(auth.requestState !== undefined ? { requestState: auth.requestState } : {}),
138
+ ...(auth.confirmationNonceLedger !== undefined
139
+ ? { confirmationNonceLedger: auth.confirmationNonceLedger }
140
+ : {}),
141
+ };
142
+ protocolContext = withHostedToolDispatch(req, parsed, protocolContext, auth);
143
+ let observed;
144
+ if (auth.captureRequestEvent !== undefined) {
145
+ protocolContext = {
146
+ ...protocolContext,
147
+ observe: (observation) => {
148
+ observed = observation;
149
+ },
150
+ };
151
+ }
152
+ if (auth.protocolMode === 'legacy-only') {
153
+ await handleStatelessHttp(target, req, res, parsed, protocolContext);
154
+ }
155
+ else {
156
+ const handler = createDualEraMcpHandler(target, protocolContext);
157
+ try {
158
+ const response = await handler.fetch(toWebRequest(req, body.text), { parsedBody: parsed });
159
+ const frontDoorCacheControl = res.getHeader('cache-control');
160
+ if (frontDoorCacheControl !== undefined) {
161
+ response.headers.set('cache-control', Array.isArray(frontDoorCacheControl)
162
+ ? frontDoorCacheControl.join(', ')
163
+ : String(frontDoorCacheControl));
164
+ }
165
+ await writeWebResponse(res, response);
166
+ }
167
+ finally {
168
+ await handler.close();
169
+ }
170
+ }
171
+ emitRequestEvent({ req, res, target, auth, tenant, parsed, subject, observed, startedAt });
172
+ }
173
+ export function originAllowed(origin, allowed) {
174
+ if (allowed === undefined)
175
+ return true;
176
+ return typeof allowed === 'function' ? allowed(origin) : allowed.includes(origin);
177
+ }
178
+ export async function readBody(req, max) {
179
+ const chunks = [];
180
+ let size = 0;
181
+ for await (const chunk of req) {
182
+ const buf = chunk;
183
+ size += buf.length;
184
+ if (size > max)
185
+ return { ok: false };
186
+ chunks.push(buf);
187
+ }
188
+ return { ok: true, text: Buffer.concat(chunks).toString('utf8') };
189
+ }
190
+ //# sourceMappingURL=serve-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve-request.js","sourceRoot":"","sources":["../src/serve-request.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,6 @@ interface HostedToolDispatchTarget {
22
22
  readonly deploymentId: string | undefined;
23
23
  }
24
24
  /** Attach hosted facts only after auth for the runtime's once-per-tool-call usage admission. */
25
- export declare function withHostedToolDispatch(req: IncomingMessage, context: ProtocolRequestContext, target: HostedToolDispatchTarget): ProtocolRequestContext;
25
+ export declare function withHostedToolDispatch(req: IncomingMessage, parsed: unknown, context: ProtocolRequestContext, target: HostedToolDispatchTarget): ProtocolRequestContext;
26
26
  export {};
27
27
  //# sourceMappingURL=tool-dispatch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-dispatch.d.ts","sourceRoot":"","sources":["../src/tool-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EACV,sBAAsB,EACtB,2BAA2B,EAC3B,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,yBAA0B,SAAQ,2BAA2B;IAC5E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChE,sFAAsF;IACtF,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,MAAM,sBAAsB,GAAG,CACnC,OAAO,EAAE,yBAAyB,KAC/B,UAAU,CAAC,wBAAwB,CAAC,CAAC;AAE1C,UAAU,wBAAwB;IAChC,QAAQ,CAAC,kBAAkB,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C;AAED,gGAAgG;AAChG,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,wBAAwB,GAC/B,sBAAsB,CAuBxB"}
1
+ {"version":3,"file":"tool-dispatch.d.ts","sourceRoot":"","sources":["../src/tool-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EACV,sBAAsB,EACtB,2BAA2B,EAC3B,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,yBAA0B,SAAQ,2BAA2B;IAC5E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChE,sFAAsF;IACtF,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,MAAM,sBAAsB,GAAG,CACnC,OAAO,EAAE,yBAAyB,KAC/B,UAAU,CAAC,wBAAwB,CAAC,CAAC;AAE1C,UAAU,wBAAwB;IAChC,QAAQ,CAAC,kBAAkB,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C;AAED,gGAAgG;AAChG,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,wBAAwB,GAC/B,sBAAsB,CAuBxB"}
@@ -1,6 +1,6 @@
1
1
  import { header } from './request-capture.js';
2
2
  /** Attach hosted facts only after auth for the runtime's once-per-tool-call usage admission. */
3
- export function withHostedToolDispatch(req, context, target) {
3
+ export function withHostedToolDispatch(req, parsed, context, target) {
4
4
  const hook = target.beforeToolDispatch;
5
5
  if (hook === undefined ||
6
6
  target.org === undefined ||
@@ -15,16 +15,17 @@ export function withHostedToolDispatch(req, context, target) {
15
15
  environment: target.environment,
16
16
  deploymentId: target.deploymentId,
17
17
  ...(context.caller !== undefined ? { caller: context.caller } : {}),
18
- client: dispatchClientContext(req),
18
+ client: dispatchClientContext(req, parsed),
19
19
  };
20
20
  return {
21
21
  ...context,
22
22
  beforeToolDispatch: (dispatch) => hook({ ...dispatchBase, ...dispatch }),
23
23
  };
24
24
  }
25
- function dispatchClientContext(req) {
26
- const protocolVersion = header(req, 'mcp-protocol-version');
27
- const sessionId = header(req, 'mcp-session-id');
25
+ function dispatchClientContext(req, parsed) {
26
+ const modernVersion = modernProtocolVersion(parsed);
27
+ const protocolVersion = modernVersion ?? header(req, 'mcp-protocol-version');
28
+ const sessionId = modernVersion === undefined ? header(req, 'mcp-session-id') : undefined;
28
29
  const userAgent = header(req, 'user-agent');
29
30
  return {
30
31
  ...(protocolVersion !== undefined ? { protocolVersion } : {}),
@@ -32,4 +33,15 @@ function dispatchClientContext(req) {
32
33
  ...(userAgent !== undefined ? { userAgent } : {}),
33
34
  };
34
35
  }
36
+ function modernProtocolVersion(value) {
37
+ const first = Array.isArray(value) ? value[0] : value;
38
+ if (!isRecord(first) || !isRecord(first.params) || !isRecord(first.params._meta)) {
39
+ return undefined;
40
+ }
41
+ const version = first.params._meta['io.modelcontextprotocol/protocolVersion'];
42
+ return typeof version === 'string' ? version : undefined;
43
+ }
44
+ function isRecord(value) {
45
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
46
+ }
35
47
  //# sourceMappingURL=tool-dispatch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-dispatch.js","sourceRoot":"","sources":["../src/tool-dispatch.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AA4B9C,gGAAgG;AAChG,MAAM,UAAU,sBAAsB,CACpC,GAAoB,EACpB,OAA+B,EAC/B,MAAgC;IAEhC,MAAM,IAAI,GAAG,MAAM,CAAC,kBAAkB,CAAC;IACvC,IACE,IAAI,KAAK,SAAS;QAClB,MAAM,CAAC,GAAG,KAAK,SAAS;QACxB,MAAM,CAAC,GAAG,KAAK,SAAS;QACxB,MAAM,CAAC,WAAW,KAAK,SAAS;QAChC,MAAM,CAAC,YAAY,KAAK,SAAS,EACjC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,YAAY,GAAG;QACnB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,EAAE,qBAAqB,CAAC,GAAG,CAAC;KACnC,CAAC;IACF,OAAO;QACL,GAAG,OAAO;QACV,kBAAkB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,YAAY,EAAE,GAAG,QAAQ,EAAE,CAAC;KACzE,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAoB;IACjD,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC5C,OAAO;QACL,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"tool-dispatch.js","sourceRoot":"","sources":["../src/tool-dispatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ /**
3
+ * Convert one already-admitted Node request to the web-standard request consumed by the MCP handler.
4
+ * The caller supplies the body it already bounded and parsed at the security front door.
5
+ */
6
+ export declare function toWebRequest(req: IncomingMessage, bufferedBody?: Uint8Array | string): Request;
7
+ /** Write a web-standard response back to Node without collapsing repeated Set-Cookie fields. */
8
+ export declare function writeWebResponse(res: ServerResponse, response: Response): Promise<void>;
9
+ //# sourceMappingURL=web-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-bridge.d.ts","sourceRoot":"","sources":["../src/web-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAyBjE;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,eAAe,EACpB,YAAY,GAAE,UAAU,GAAG,MAAyB,GACnD,OAAO,CAcT;AAED,gGAAgG;AAChG,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB7F"}
@@ -0,0 +1,61 @@
1
+ import { Readable } from 'node:stream';
2
+ import { pipeline } from 'node:stream/promises';
3
+ function firstHeaderValue(value) {
4
+ const first = Array.isArray(value) ? value[0] : value;
5
+ return first?.split(',', 1)[0]?.trim();
6
+ }
7
+ function requestOrigin(req) {
8
+ const protocol = firstHeaderValue(req.headers['x-forwarded-proto']) ?? 'http';
9
+ const host = firstHeaderValue(req.headers.host) ?? 'localhost';
10
+ return `${protocol}://${host}`;
11
+ }
12
+ function requestHeaders(req) {
13
+ const headers = new Headers();
14
+ for (let index = 0; index < req.rawHeaders.length; index += 2) {
15
+ const name = req.rawHeaders[index];
16
+ const value = req.rawHeaders[index + 1];
17
+ if (name !== undefined && value !== undefined)
18
+ headers.append(name, value);
19
+ }
20
+ return headers;
21
+ }
22
+ /**
23
+ * Convert one already-admitted Node request to the web-standard request consumed by the MCP handler.
24
+ * The caller supplies the body it already bounded and parsed at the security front door.
25
+ */
26
+ export function toWebRequest(req, bufferedBody = new Uint8Array()) {
27
+ const method = req.method ?? 'GET';
28
+ const canHaveBody = method !== 'GET' && method !== 'HEAD';
29
+ const bodyLength = typeof bufferedBody === 'string' ? bufferedBody.length : bufferedBody.byteLength;
30
+ return new Request(new URL(req.url ?? '/', requestOrigin(req)), {
31
+ method,
32
+ headers: requestHeaders(req),
33
+ ...(canHaveBody && bodyLength > 0
34
+ ? {
35
+ body: typeof bufferedBody === 'string' ? bufferedBody : new Uint8Array(bufferedBody),
36
+ }
37
+ : {}),
38
+ });
39
+ }
40
+ /** Write a web-standard response back to Node without collapsing repeated Set-Cookie fields. */
41
+ export async function writeWebResponse(res, response) {
42
+ if (res.headersSent) {
43
+ throw new Error('cannot write web response: headers already sent');
44
+ }
45
+ res.statusCode = response.status;
46
+ if (response.statusText !== '')
47
+ res.statusMessage = response.statusText;
48
+ const cookies = response.headers.getSetCookie();
49
+ for (const [name, value] of response.headers) {
50
+ if (name.toLowerCase() !== 'set-cookie')
51
+ res.setHeader(name, value);
52
+ }
53
+ if (cookies.length > 0)
54
+ res.setHeader('set-cookie', cookies);
55
+ if (response.body === null) {
56
+ res.end();
57
+ return;
58
+ }
59
+ await pipeline(Readable.fromWeb(response.body), res);
60
+ }
61
+ //# sourceMappingURL=web-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-bridge.js","sourceRoot":"","sources":["../src/web-bridge.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noodleseed/one",
3
- "version": "0.95.2",
3
+ "version": "0.96.0",
4
4
  "private": false,
5
5
  "description": "Noodle CLI by Noodle Seed — author, run, and deploy declarative MCP servers. Embedding the assistant in your own web app is @noodleseed/assistant.",
6
6
  "license": "Apache-2.0",
@@ -70,7 +70,10 @@
70
70
  "@jitl/quickjs-wasmfile-debug-sync",
71
71
  "@jitl/quickjs-wasmfile-release-asyncify",
72
72
  "@jitl/quickjs-wasmfile-release-sync",
73
+ "@modelcontextprotocol/client",
74
+ "@modelcontextprotocol/core",
73
75
  "@modelcontextprotocol/sdk",
76
+ "@modelcontextprotocol/server",
74
77
  "@noodle-borg/agent-kit",
75
78
  "@noodle-borg/auth",
76
79
  "@noodle-borg/authoring",
@@ -201,7 +204,8 @@
201
204
  "@jitl/quickjs-wasmfile-debug-sync": "0.32.0",
202
205
  "@jitl/quickjs-wasmfile-release-asyncify": "0.32.0",
203
206
  "@jitl/quickjs-wasmfile-release-sync": "0.32.0",
204
- "@modelcontextprotocol/sdk": "1.29.0",
207
+ "@modelcontextprotocol/client": "2.0.0",
208
+ "@modelcontextprotocol/server": "2.0.0",
205
209
  "@noodle-borg/agent-kit": "0.0.0",
206
210
  "@noodle-borg/auth": "0.0.0",
207
211
  "@noodle-borg/authoring": "0.0.0",