@noodleseed/one 0.151.1 → 0.153.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 (379) hide show
  1. package/dist/agent-product-skill-state.d.ts +2 -2
  2. package/dist/agent-product-skill-state.d.ts.map +1 -1
  3. package/dist/agent-product-skill-state.js.map +1 -1
  4. package/dist/agent-skills-state.d.ts +2 -2
  5. package/dist/agent-skills-state.d.ts.map +1 -1
  6. package/dist/agent-skills-state.js +1 -1
  7. package/dist/agent-skills-state.js.map +1 -1
  8. package/dist/agents.d.ts +2 -3
  9. package/dist/agents.d.ts.map +1 -1
  10. package/dist/agents.js.map +1 -1
  11. package/dist/assistant-embed-scaffold-template.d.ts +1 -0
  12. package/dist/assistant-embed-scaffold-template.d.ts.map +1 -1
  13. package/dist/assistant-embed-scaffold-template.js +80 -12
  14. package/dist/assistant-embed-scaffold-template.js.map +1 -1
  15. package/dist/checklist.d.ts +2 -1
  16. package/dist/checklist.d.ts.map +1 -1
  17. package/dist/commands/apps-ops.d.ts +0 -4
  18. package/dist/commands/apps-ops.d.ts.map +1 -1
  19. package/dist/commands/apps-ops.js +3 -3
  20. package/dist/commands/apps-ops.js.map +1 -1
  21. package/dist/commands/assistant-embed-ops.d.ts.map +1 -1
  22. package/dist/commands/assistant-embed-ops.js +141 -4
  23. package/dist/commands/assistant-embed-ops.js.map +1 -1
  24. package/dist/commands/assistant-ops.js +1 -1
  25. package/dist/commands/assistant-ops.js.map +1 -1
  26. package/dist/commands/auth-ops.d.ts +0 -14
  27. package/dist/commands/auth-ops.d.ts.map +1 -1
  28. package/dist/commands/auth-ops.js +1 -1
  29. package/dist/commands/auth-ops.js.map +1 -1
  30. package/dist/commands/author-loop.d.ts +0 -2
  31. package/dist/commands/author-loop.d.ts.map +1 -1
  32. package/dist/commands/author-loop.js +2 -2
  33. package/dist/commands/author-loop.js.map +1 -1
  34. package/dist/commands/catalog.d.ts +1 -7
  35. package/dist/commands/catalog.d.ts.map +1 -1
  36. package/dist/commands/catalog.js +3 -3
  37. package/dist/commands/catalog.js.map +1 -1
  38. package/dist/commands/config-values.d.ts +1 -47
  39. package/dist/commands/config-values.d.ts.map +1 -1
  40. package/dist/commands/config-values.js +11 -11
  41. package/dist/commands/config-values.js.map +1 -1
  42. package/dist/commands/connect-oauth.d.ts +0 -1
  43. package/dist/commands/connect-oauth.d.ts.map +1 -1
  44. package/dist/commands/connect-oauth.js +1 -1
  45. package/dist/commands/connect-oauth.js.map +1 -1
  46. package/dist/commands/connect.d.ts +0 -1
  47. package/dist/commands/connect.d.ts.map +1 -1
  48. package/dist/commands/connect.js +1 -1
  49. package/dist/commands/connect.js.map +1 -1
  50. package/dist/commands/customer-auth-smoke.d.ts +2 -1
  51. package/dist/commands/customer-auth-smoke.d.ts.map +1 -1
  52. package/dist/commands/customer-auth-smoke.js +3 -2
  53. package/dist/commands/customer-auth-smoke.js.map +1 -1
  54. package/dist/commands/deploy-ops.d.ts +0 -9
  55. package/dist/commands/deploy-ops.d.ts.map +1 -1
  56. package/dist/commands/deploy-ops.js +3 -4
  57. package/dist/commands/deploy-ops.js.map +1 -1
  58. package/dist/commands/deploy-resume.d.ts +0 -1
  59. package/dist/commands/deploy-resume.d.ts.map +1 -1
  60. package/dist/commands/deploy-resume.js +1 -1
  61. package/dist/commands/deploy-resume.js.map +1 -1
  62. package/dist/commands/deploy-version-resolution.d.ts +0 -2
  63. package/dist/commands/deploy-version-resolution.d.ts.map +1 -1
  64. package/dist/commands/deploy-version-resolution.js +1 -1
  65. package/dist/commands/deploy-version-resolution.js.map +1 -1
  66. package/dist/commands/deployments-ops.d.ts +0 -2
  67. package/dist/commands/deployments-ops.d.ts.map +1 -1
  68. package/dist/commands/deployments-ops.js +2 -2
  69. package/dist/commands/deployments-ops.js.map +1 -1
  70. package/dist/commands/envs-ops.d.ts +0 -3
  71. package/dist/commands/envs-ops.d.ts.map +1 -1
  72. package/dist/commands/envs-ops.js +3 -3
  73. package/dist/commands/envs-ops.js.map +1 -1
  74. package/dist/commands/feedback-ops.d.ts +0 -8
  75. package/dist/commands/feedback-ops.d.ts.map +1 -1
  76. package/dist/commands/feedback-ops.js +1 -1
  77. package/dist/commands/feedback-ops.js.map +1 -1
  78. package/dist/commands/github-ops.d.ts +0 -2
  79. package/dist/commands/github-ops.d.ts.map +1 -1
  80. package/dist/commands/github-ops.js +2 -2
  81. package/dist/commands/github-ops.js.map +1 -1
  82. package/dist/commands/mcp-apps.d.ts +0 -1
  83. package/dist/commands/mcp-apps.d.ts.map +1 -1
  84. package/dist/commands/org-admin.d.ts +0 -17
  85. package/dist/commands/org-admin.d.ts.map +1 -1
  86. package/dist/commands/org-admin.js +1 -2
  87. package/dist/commands/org-admin.js.map +1 -1
  88. package/dist/commands/output.d.ts +3 -12
  89. package/dist/commands/output.d.ts.map +1 -1
  90. package/dist/commands/output.js.map +1 -1
  91. package/dist/commands/platform-account-reset-files.d.ts +0 -3
  92. package/dist/commands/platform-account-reset-files.d.ts.map +1 -1
  93. package/dist/commands/platform-account-reset-files.js +1 -1
  94. package/dist/commands/platform-account-reset-files.js.map +1 -1
  95. package/dist/commands/platform-auth-rollout-acceleration-files.d.ts +0 -3
  96. package/dist/commands/platform-auth-rollout-acceleration-files.d.ts.map +1 -1
  97. package/dist/commands/platform-auth-rollout-acceleration-files.js +1 -1
  98. package/dist/commands/platform-auth-rollout-acceleration-files.js.map +1 -1
  99. package/dist/commands/project-setup.d.ts +0 -1
  100. package/dist/commands/project-setup.d.ts.map +1 -1
  101. package/dist/commands/project-setup.js +1 -1
  102. package/dist/commands/project-setup.js.map +1 -1
  103. package/dist/commands/resource-shared.d.ts +0 -6
  104. package/dist/commands/resource-shared.d.ts.map +1 -1
  105. package/dist/commands/resource-shared.js +1 -1
  106. package/dist/commands/resource-shared.js.map +1 -1
  107. package/dist/commands/session.d.ts +3 -13
  108. package/dist/commands/session.d.ts.map +1 -1
  109. package/dist/commands/session.js +2 -2
  110. package/dist/commands/session.js.map +1 -1
  111. package/dist/commands/target-picker.d.ts +0 -2
  112. package/dist/commands/target-picker.d.ts.map +1 -1
  113. package/dist/commands/target-picker.js +1 -1
  114. package/dist/commands/target-picker.js.map +1 -1
  115. package/dist/commands/update-ops.d.ts +0 -8
  116. package/dist/commands/update-ops.d.ts.map +1 -1
  117. package/dist/commands/update-ops.js +1 -1
  118. package/dist/commands/update-ops.js.map +1 -1
  119. package/dist/control-plane.d.ts +1 -1
  120. package/dist/control-plane.d.ts.map +1 -1
  121. package/dist/control-plane.js.map +1 -1
  122. package/dist/deploy.d.ts +0 -12
  123. package/dist/deploy.d.ts.map +1 -1
  124. package/dist/deploy.js +2 -2
  125. package/dist/deploy.js.map +1 -1
  126. package/dist/dev.d.ts.map +1 -1
  127. package/dist/dev.js +2 -3
  128. package/dist/dev.js.map +1 -1
  129. package/dist/devtools-auth-session.d.ts +0 -1
  130. package/dist/devtools-auth-session.d.ts.map +1 -1
  131. package/dist/devtools-auth-session.js.map +1 -1
  132. package/dist/devtools-chat.d.ts +1 -1
  133. package/dist/devtools-chat.d.ts.map +1 -1
  134. package/dist/devtools-chat.js.map +1 -1
  135. package/dist/devtools-delegated-exchange-state.d.ts +1 -1
  136. package/dist/devtools-delegated-exchange-state.d.ts.map +1 -1
  137. package/dist/devtools-design-contract.d.ts +3 -3
  138. package/dist/devtools-design-contract.d.ts.map +1 -1
  139. package/dist/devtools-design-contract.js +1 -1
  140. package/dist/devtools-design-contract.js.map +1 -1
  141. package/dist/devtools-preview.d.ts +1 -1
  142. package/dist/devtools-preview.d.ts.map +1 -1
  143. package/dist/devtools-rpc-forwarder.d.ts +2 -1
  144. package/dist/devtools-rpc-forwarder.d.ts.map +1 -1
  145. package/dist/devtools-rpc-forwarder.js +11 -12
  146. package/dist/devtools-rpc-forwarder.js.map +1 -1
  147. package/dist/gradient.d.ts +0 -3
  148. package/dist/gradient.d.ts.map +1 -1
  149. package/dist/gradient.js +1 -3
  150. package/dist/gradient.js.map +1 -1
  151. package/dist/local-compile.d.ts +2 -1
  152. package/dist/local-compile.d.ts.map +1 -1
  153. package/dist/local-target.d.ts +2 -1
  154. package/dist/local-target.d.ts.map +1 -1
  155. package/dist/node-version.d.ts +0 -2
  156. package/dist/node-version.d.ts.map +1 -1
  157. package/dist/node-version.js +2 -2
  158. package/dist/node-version.js.map +1 -1
  159. package/dist/plugin-mode/build-readiness-tools.d.ts +5 -4
  160. package/dist/plugin-mode/build-readiness-tools.d.ts.map +1 -1
  161. package/dist/plugin-mode/plugin-operation-contract.d.ts +0 -35
  162. package/dist/plugin-mode/plugin-operation-contract.d.ts.map +1 -1
  163. package/dist/plugin-mode/plugin-operation-contract.js +1 -1
  164. package/dist/plugin-mode/plugin-operation-contract.js.map +1 -1
  165. package/dist/project-entrypoint.d.ts +2 -1
  166. package/dist/project-entrypoint.d.ts.map +1 -1
  167. package/dist/project.d.ts +3 -3
  168. package/dist/project.d.ts.map +1 -1
  169. package/dist/project.js.map +1 -1
  170. package/dist/skills-update.d.ts +0 -1
  171. package/dist/skills-update.d.ts.map +1 -1
  172. package/dist/skills-update.js +1 -1
  173. package/dist/skills-update.js.map +1 -1
  174. package/dist/status.d.ts +0 -9
  175. package/dist/status.d.ts.map +1 -1
  176. package/dist/status.js +0 -16
  177. package/dist/status.js.map +1 -1
  178. package/dist/update-binary.d.ts +3 -2
  179. package/dist/update-binary.d.ts.map +1 -1
  180. package/dist/update-check.d.ts +0 -3
  181. package/dist/update-check.d.ts.map +1 -1
  182. package/dist/update-check.js +1 -1
  183. package/dist/update-check.js.map +1 -1
  184. package/dist/validate.d.ts +2 -1
  185. package/dist/validate.d.ts.map +1 -1
  186. package/node_modules/@noodle-borg/agent-kit/dist/behavior-skills.js +10 -10
  187. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +11 -8
  188. package/node_modules/@noodle-borg/agent-kit/dist/index.js +13 -1
  189. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bootstrap-skill.d.ts +0 -2
  190. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bootstrap-skill.js +1 -1
  191. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.d.ts +1 -1
  192. package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +8 -0
  193. package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +6 -6
  194. package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-operations-ref.js +78 -0
  195. package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js +156 -135
  196. package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-renderer-ref.js +109 -0
  197. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.d.ts +2 -3
  198. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js +1 -1
  199. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  200. package/node_modules/@noodle-borg/agent-packaging/dist/host-package-assets.js +1 -1
  201. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-browser-fields.d.ts +3 -0
  202. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-browser-fields.js +15 -0
  203. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.d.ts +1 -1
  204. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.js +3 -2
  205. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.d.ts +19 -11
  206. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.js +24 -23
  207. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-transcript-events.d.ts +24 -0
  208. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-transcript-events.js +39 -0
  209. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-transcript.d.ts +6 -2
  210. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-transcript.js +11 -0
  211. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-view-availability.d.ts +8 -0
  212. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-view-availability.js +8 -0
  213. package/node_modules/@noodle-borg/assistant-gateway/dist/elevation-store.d.ts +3 -0
  214. package/node_modules/@noodle-borg/assistant-gateway/dist/elevation.d.ts +7 -1
  215. package/node_modules/@noodle-borg/assistant-gateway/dist/elevation.js +1 -0
  216. package/node_modules/@noodle-borg/assistant-gateway/dist/in-memory-elevation-store.d.ts +1 -0
  217. package/node_modules/@noodle-borg/assistant-gateway/dist/in-memory-elevation-store.js +1 -0
  218. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.d.ts +1 -0
  219. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.js +1 -0
  220. package/node_modules/@noodle-borg/assistant-gateway/package.json +2 -1
  221. package/node_modules/@noodle-borg/authoring/dist/assistant.d.ts +2 -1
  222. package/node_modules/@noodle-borg/authoring/dist/connections.d.ts +0 -2
  223. package/node_modules/@noodle-borg/authoring/dist/connections.js +1 -1
  224. package/node_modules/@noodle-borg/authoring/dist/load-authored.js +2 -2
  225. package/node_modules/@noodle-borg/authoring/dist/react/bridge.d.ts +3 -2
  226. package/node_modules/@noodle-borg/authoring/dist/react/form-components.d.ts +0 -8
  227. package/node_modules/@noodle-borg/authoring/dist/react/form-components.js +2 -4
  228. package/node_modules/@noodle-borg/authoring/dist/react/hooks.d.ts +2 -2
  229. package/node_modules/@noodle-borg/authoring/dist/server.d.ts +2 -0
  230. package/node_modules/@noodle-borg/authoring/dist/server.js +3 -0
  231. package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +12 -11
  232. package/node_modules/@noodle-borg/compiler/dist/artifact/version.d.ts +4 -1
  233. package/node_modules/@noodle-borg/compiler/dist/artifact/version.js +4 -1
  234. package/node_modules/@noodle-borg/compiler/dist/compile.d.ts +0 -1
  235. package/node_modules/@noodle-borg/compiler/dist/fulfilment-structural.d.ts +1 -1
  236. package/node_modules/@noodle-borg/compiler/dist/manifest/expression.d.ts +14 -14
  237. package/node_modules/@noodle-borg/compiler/dist/manifest/naming.d.ts +0 -2
  238. package/node_modules/@noodle-borg/compiler/dist/manifest/naming.js +1 -1
  239. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +4 -0
  240. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +20 -1
  241. package/node_modules/@noodle-borg/compiler/dist/manifest/website-projection.d.ts +2 -1
  242. package/node_modules/@noodle-borg/compiler/dist/state-handles.js +1 -0
  243. package/node_modules/@noodle-borg/compiler/package.json +1 -4
  244. package/node_modules/@noodle-borg/connector-defs/dist/credential-profiles.js +1 -1
  245. package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts +0 -6
  246. package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +2 -2
  247. package/node_modules/@noodle-borg/connector-http/dist/http-response.d.ts +2 -1
  248. package/node_modules/@noodle-borg/connector-http/dist/mcp/config.js +1 -1
  249. package/node_modules/@noodle-borg/control-plane/dist/deploy-auth.d.ts +0 -1
  250. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/shared.js +1 -1
  251. package/node_modules/@noodle-borg/knowledge-operations/dist/crawl-lifecycle.d.ts +2 -1
  252. package/node_modules/@noodle-borg/knowledge-operations/package.json +1 -2
  253. package/node_modules/@noodle-borg/observability/dist/request-events-postgres.js +3 -1
  254. package/node_modules/@noodle-borg/plugin-distribution/dist/openai-submission-render.js +1 -1
  255. package/node_modules/@noodle-borg/protocol/dist/index.d.ts +1 -1
  256. package/node_modules/@noodle-borg/protocol/dist/index.js +1 -1
  257. package/node_modules/@noodle-borg/protocol/dist/interaction-envelope.js +2 -2
  258. package/node_modules/@noodle-borg/protocol/dist/jsonrpc.d.ts +1 -1
  259. package/node_modules/@noodle-borg/protocol/dist/jsonrpc.js +1 -1
  260. package/node_modules/@noodle-borg/protocol/dist/mapping.d.ts +4 -6
  261. package/node_modules/@noodle-borg/protocol/dist/mapping.js +1 -1
  262. package/node_modules/@noodle-borg/protocol/dist/observation.d.ts +0 -9
  263. package/node_modules/@noodle-borg/protocol/dist/observation.js +1 -1
  264. package/node_modules/@noodle-borg/protocol/dist/v2/handler.d.ts +2 -1
  265. package/node_modules/@noodle-borg/protocol/dist/v2/versions.d.ts +4 -0
  266. package/node_modules/@noodle-borg/protocol/dist/v2/versions.js +2 -0
  267. package/node_modules/@noodle-borg/protocol/dist/widget/domain-projection.d.ts +2 -1
  268. package/node_modules/@noodle-borg/protocol/package.json +0 -1
  269. package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts +2 -2
  270. package/node_modules/@noodle-borg/runtime/dist/index.d.ts +1 -0
  271. package/node_modules/@noodle-borg/runtime/dist/index.js +1 -0
  272. package/node_modules/@noodle-borg/runtime/dist/state-handle-ownership.d.ts +21 -0
  273. package/node_modules/@noodle-borg/runtime/dist/state-handle-ownership.js +10 -0
  274. package/node_modules/@noodle-borg/runtime/package.json +6 -1
  275. package/node_modules/@noodle-borg/service/dist/app-package-snapshot.d.ts +1 -2
  276. package/node_modules/@noodle-borg/service/dist/app-package-snapshot.js +1 -2
  277. package/node_modules/@noodle-borg/service/dist/archive-preflight.js +1 -1
  278. package/node_modules/@noodle-borg/service/dist/assets.js +1 -1
  279. package/node_modules/@noodle-borg/service/dist/assistant-bindings.js +2 -2
  280. package/node_modules/@noodle-borg/service/dist/client-compatibility.js +1 -2
  281. package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js +2 -2
  282. package/node_modules/@noodle-borg/service/dist/external-credential-exchange.d.ts +0 -1
  283. package/node_modules/@noodle-borg/service/dist/external-credential-exchange.js +1 -1
  284. package/node_modules/@noodle-borg/service/dist/http-util.js +1 -72
  285. package/node_modules/@noodle-borg/service/dist/managed-config-expressions.d.ts +0 -1
  286. package/node_modules/@noodle-borg/service/dist/managed-config-expressions.js +1 -1
  287. package/node_modules/@noodle-borg/service/dist/oauth/customer-bridge.js +1 -1
  288. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.js +2 -2
  289. package/node_modules/@noodle-borg/service/dist/observability-runtime.js +2 -3
  290. package/node_modules/@noodle-borg/service/dist/registry-targets.js +3 -3
  291. package/node_modules/@noodle-borg/service/dist/routes/access-mode.js +0 -4
  292. package/node_modules/@noodle-borg/service/dist/routes/access.js +1 -1
  293. package/node_modules/@noodle-borg/service/dist/routes/alerts.js +3 -2
  294. package/node_modules/@noodle-borg/service/dist/routes/analytics.js +2 -1
  295. package/node_modules/@noodle-borg/service/dist/routes/apps.js +1 -1
  296. package/node_modules/@noodle-borg/service/dist/routes/archive.js +2 -1
  297. package/node_modules/@noodle-borg/service/dist/routes/asset-control-plane.js +2 -1
  298. package/node_modules/@noodle-borg/service/dist/routes/assistant-agent.js +7 -2
  299. package/node_modules/@noodle-borg/service/dist/routes/assistant-appearance.js +2 -1
  300. package/node_modules/@noodle-borg/service/dist/routes/assistant-clients.js +2 -1
  301. package/node_modules/@noodle-borg/service/dist/routes/assistant-doctor.js +2 -1
  302. package/node_modules/@noodle-borg/service/dist/routes/assistant-elevation.js +15 -8
  303. package/node_modules/@noodle-borg/service/dist/routes/assistant-embeds.js +2 -1
  304. package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-replay.js +5 -3
  305. package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.js +5 -3
  306. package/node_modules/@noodle-borg/service/dist/routes/assistant-public-configuration.js +1 -1
  307. package/node_modules/@noodle-borg/service/dist/routes/assistant-public-session.js +1 -1
  308. package/node_modules/@noodle-borg/service/dist/routes/assistant-route-http.js +4 -3
  309. package/node_modules/@noodle-borg/service/dist/routes/assistant-sandbox.js +1 -1
  310. package/node_modules/@noodle-borg/service/dist/routes/assistant-suggestions.js +1 -1
  311. package/node_modules/@noodle-borg/service/dist/routes/assistant-transcript.js +48 -9
  312. package/node_modules/@noodle-borg/service/dist/routes/assistant-usage.js +2 -1
  313. package/node_modules/@noodle-borg/service/dist/routes/assistant.js +2 -1
  314. package/node_modules/@noodle-borg/service/dist/routes/auth-discovery.js +2 -2
  315. package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-live.js +1 -1
  316. package/node_modules/@noodle-borg/service/dist/routes/config-values-paths.js +1 -1
  317. package/node_modules/@noodle-borg/service/dist/routes/config-values.js +2 -1
  318. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +2 -3
  319. package/node_modules/@noodle-borg/service/dist/routes/deploy-preflight.js +1 -1
  320. package/node_modules/@noodle-borg/service/dist/routes/deployment-activation-response.js +1 -1
  321. package/node_modules/@noodle-borg/service/dist/routes/deployment-lock.js +1 -1
  322. package/node_modules/@noodle-borg/service/dist/routes/deployment-package.js +1 -1
  323. package/node_modules/@noodle-borg/service/dist/routes/deployments.js +1 -1
  324. package/node_modules/@noodle-borg/service/dist/routes/diagnostics.js +2 -1
  325. package/node_modules/@noodle-borg/service/dist/routes/environment-production.js +2 -1
  326. package/node_modules/@noodle-borg/service/dist/routes/envs.js +1 -1
  327. package/node_modules/@noodle-borg/service/dist/routes/google-workload-identity.js +1 -1
  328. package/node_modules/@noodle-borg/service/dist/routes/intent-capture.js +2 -1
  329. package/node_modules/@noodle-borg/service/dist/routes/logs.js +2 -1
  330. package/node_modules/@noodle-borg/service/dist/routes/openai-apps-challenge.js +1 -2
  331. package/node_modules/@noodle-borg/service/dist/routes/org-admin.js +2 -1
  332. package/node_modules/@noodle-borg/service/dist/routes/org-domains.js +2 -1
  333. package/node_modules/@noodle-borg/service/dist/routes/org-mcp-subdomain.js +1 -1
  334. package/node_modules/@noodle-borg/service/dist/routes/paths.js +0 -39
  335. package/node_modules/@noodle-borg/service/dist/routes/protected-resource-metadata.js +3 -3
  336. package/node_modules/@noodle-borg/service/dist/routes/rollback.js +2 -1
  337. package/node_modules/@noodle-borg/service/dist/routes/service-principals-dispatch.js +2 -3
  338. package/node_modules/@noodle-borg/service/dist/routes/service-principals.js +1 -1
  339. package/node_modules/@noodle-borg/service/dist/service-config.d.ts +3 -2
  340. package/node_modules/@noodle-borg/service/dist/service-config.js +1 -1
  341. package/node_modules/@noodle-borg/service/dist/service.js +5 -2
  342. package/node_modules/@noodle-borg/service/dist/store/alert-rules.js +1 -1
  343. package/node_modules/@noodle-borg/service/dist/store/audit.js +1 -1
  344. package/node_modules/@noodle-borg/service/dist/store/records.js +1 -1
  345. package/node_modules/@noodle-borg/service/dist/store/validate.d.ts +1 -1
  346. package/node_modules/@noodle-borg/service/dist/store/validate.js +1 -1
  347. package/node_modules/@noodle-borg/service/dist/store.d.ts +2 -2
  348. package/node_modules/@noodle-borg/service/dist/store.js +1 -1
  349. package/node_modules/@noodle-borg/service/package.json +1 -1
  350. package/node_modules/@noodle-borg/transport-http/dist/client-identity.js +1 -1
  351. package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts +1 -2
  352. package/node_modules/@noodle-borg/transport-http/dist/identity-authorization.d.ts +51 -0
  353. package/node_modules/@noodle-borg/transport-http/dist/identity-authorization.js +7 -7
  354. package/node_modules/@noodle-borg/transport-http/dist/index.d.ts +4 -2
  355. package/node_modules/@noodle-borg/transport-http/dist/index.js +3 -1
  356. package/node_modules/@noodle-borg/transport-http/dist/request-body.d.ts +29 -0
  357. package/node_modules/@noodle-borg/transport-http/dist/request-body.js +64 -0
  358. package/node_modules/@noodle-borg/transport-http/dist/responses.d.ts +28 -0
  359. package/node_modules/@noodle-borg/transport-http/dist/routing.d.ts +2 -4
  360. package/node_modules/@noodle-borg/transport-http/dist/routing.js +3 -3
  361. package/node_modules/@noodle-borg/transport-http/dist/serve-request.js +2 -13
  362. package/node_modules/@noodle-borg/transport-http/package.json +0 -1
  363. package/node_modules/@noodle-borg/wire-contracts/dist/assistant.d.ts +19 -25
  364. package/node_modules/@noodle-borg/wire-contracts/dist/assistant.js +20 -34
  365. package/node_modules/@noodleseed/assistant/README.md +1 -1
  366. package/node_modules/@noodleseed/assistant/package.json +2 -1
  367. package/package.json +2 -2
  368. package/dist/commands/catalog-data-billing.d.ts +0 -3
  369. package/dist/commands/catalog-data-billing.d.ts.map +0 -1
  370. package/dist/commands/catalog-data-billing.js +0 -3
  371. package/dist/commands/catalog-data-billing.js.map +0 -1
  372. package/dist/commands/catalog-data-policy.d.ts +0 -3
  373. package/dist/commands/catalog-data-policy.d.ts.map +0 -1
  374. package/dist/commands/catalog-data-policy.js +0 -3
  375. package/dist/commands/catalog-data-policy.js.map +0 -1
  376. package/node_modules/@noodle-borg/compiler/dist/artifact/catalog-emission.d.ts +0 -50
  377. package/node_modules/@noodle-borg/compiler/dist/context-compile.d.ts +0 -17
  378. package/node_modules/@noodle-borg/transport-http/dist/module-http.d.ts +0 -13
  379. package/node_modules/@noodle-borg/transport-http/dist/module-http.js +0 -28
@@ -11,7 +11,7 @@ export { type ConfigScope, type ConfigStore, type ConfigValueMetadata, InMemoryC
11
11
  export type { ProductionEnvironmentChange } from './store/environment-production.js';
12
12
  export { InMemoryArtifactStore } from './store/in-memory.js';
13
13
  export { JsonFileArtifactStore } from './store/json-file.js';
14
- export { CONFIG_NAME_PATTERN, DEPLOYMENT_ID_PATTERN, DOMAIN_PATTERN, OPENAI_APPS_CHALLENGE_MAX_LENGTH, SLUG_PATTERN, validateConfigName, validateConfigScope, validateDomain, validateMcpSubdomain, validateOpenAIAppsChallenge, validateOrgMembershipDomain, validateOrgRole, validatePositiveInteger, validateSignupAllowlistKind, validateSlug, validateTenantRef, validateUserOwnedOrgSlug, } from './store/validate.js';
14
+ export { CONFIG_NAME_PATTERN, DEPLOYMENT_ID_PATTERN, DOMAIN_PATTERN, SLUG_PATTERN, validateConfigName, validateConfigScope, validateDomain, validateOrgMembershipDomain, validateOrgRole, validatePositiveInteger, validateSignupAllowlistKind, validateSlug, validateTenantRef, } from './store/validate.js';
15
15
  /**
16
16
  * Secret values at rest. The compiled runtime keeps plaintext tokens in memory (the broker), but the
17
17
  * *persisted* form is a tagged envelope. `aes-256-gcm` (Slice 26, ADR 0028) holds an AES-256-GCM
@@ -92,7 +92,7 @@ export interface TenantOidcAuthConfig {
92
92
  readonly claims?: TenantAuthClaimMap | undefined;
93
93
  readonly routing?: ArtifactCustomerAuthRouting | undefined;
94
94
  }
95
- export interface TenantFederatedOidcAuthConfig {
95
+ interface TenantFederatedOidcAuthConfig {
96
96
  readonly kind: 'federatedOidc';
97
97
  readonly issuers: readonly {
98
98
  readonly issuer: string;
@@ -4,5 +4,5 @@ export { InMemoryConfigStore, resolveConfigScope, scopeChain, } from './store/co
4
4
  // surface.
5
5
  export { InMemoryArtifactStore } from './store/in-memory.js';
6
6
  export { JsonFileArtifactStore } from './store/json-file.js';
7
- export { CONFIG_NAME_PATTERN, DEPLOYMENT_ID_PATTERN, DOMAIN_PATTERN, OPENAI_APPS_CHALLENGE_MAX_LENGTH, SLUG_PATTERN, validateConfigName, validateConfigScope, validateDomain, validateMcpSubdomain, validateOpenAIAppsChallenge, validateOrgMembershipDomain, validateOrgRole, validatePositiveInteger, validateSignupAllowlistKind, validateSlug, validateTenantRef, validateUserOwnedOrgSlug, } from './store/validate.js';
7
+ export { CONFIG_NAME_PATTERN, DEPLOYMENT_ID_PATTERN, DOMAIN_PATTERN, SLUG_PATTERN, validateConfigName, validateConfigScope, validateDomain, validateOrgMembershipDomain, validateOrgRole, validatePositiveInteger, validateSignupAllowlistKind, validateSlug, validateTenantRef, } from './store/validate.js';
8
8
  //# sourceMappingURL=store.js.map
@@ -39,7 +39,7 @@
39
39
  "dependencies": {
40
40
  "@modelcontextprotocol/sdk": "^1.29.0",
41
41
  "@noodle-borg/admission-limits": "0.0.0",
42
- "@noodle-borg/agent-kit": "0.91.0",
42
+ "@noodle-borg/agent-kit": "0.92.0",
43
43
  "@noodle-borg/app-package": "0.0.0",
44
44
  "@noodle-borg/assistant-gateway": "0.0.0",
45
45
  "@noodle-borg/auth": "0.0.0",
@@ -38,7 +38,7 @@ const KNOWN_UA_FAMILIES = [
38
38
  [/mozilla|chrome|safari|firefox|edg/i, 'browser'],
39
39
  ];
40
40
  /** Bound a wire-supplied client identity scalar: printable, trimmed, and length-capped. */
41
- export function boundedClientScalar(value, max) {
41
+ function boundedClientScalar(value, max) {
42
42
  if (value === undefined)
43
43
  return undefined;
44
44
  let cleaned = '';
@@ -1,6 +1,6 @@
1
1
  import type { IncomingMessage, ServerResponse } from 'node:http';
2
2
  import type { AccessMode, AdmissionGate, DataPlaneIdentityAuthorizer, IntentCaptureMode, IntentEventInput, OrgMembershipSource, OwnerTokenVerifier, RequestEventInput, TenantRouteRef } from '@noodle-borg/module';
3
- import { type ConfirmationNonceLedger, type ProtocolRequestContext, type RequestStateManager, type ServedArtifact } from '@noodle-borg/protocol';
3
+ import { type ConfirmationNonceLedger, type McpProtocolMode, type ProtocolRequestContext, type RequestStateManager, type ServedArtifact } from '@noodle-borg/protocol';
4
4
  import { type TlsPosture } from './front-door.js';
5
5
  import { type Logger } from './logging.js';
6
6
  import { type PublicTenantRouting } from './routing.js';
@@ -10,7 +10,6 @@ export type { AccessMode, AdmissionCategory, AdmissionContext, AdmissionDecision
10
10
  export type { PublicTenantRouting } from './routing.js';
11
11
  /** Origins allowed to call the endpoint: an explicit list, a predicate, or undefined (allow any). */
12
12
  export type OriginPolicy = readonly string[] | ((origin: string) => boolean);
13
- export type McpProtocolMode = 'dual' | 'legacy-only';
14
13
  /** Validated, bounded coordinates from one host request. Never identity or policy input. */
15
14
  export interface InvocationClientLocationHint {
16
15
  readonly latitude: number;
@@ -0,0 +1,51 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { AccessMode, DataPlaneIdentityAuthorizer, OrgMembershipSource, OwnerTokenVerifier } from '@noodle-borg/module';
3
+ import { type ProtocolRequestContext } from '@noodle-borg/protocol';
4
+ export interface IdentityAuthorizationOptions {
5
+ readonly accessMode: AccessMode | undefined;
6
+ readonly ownerSubject: string | undefined;
7
+ readonly org: string | undefined;
8
+ readonly orgMembershipSources: readonly OrgMembershipSource[] | undefined;
9
+ readonly verifyOwnerToken: OwnerTokenVerifier | undefined;
10
+ readonly authorizeDataPlaneIdentity: DataPlaneIdentityAuthorizer | undefined;
11
+ /** Whether to trust forwarded-proto when reconstructing the public resource/PRM URLs. */
12
+ readonly trustProxy: boolean;
13
+ /** Public resource URL supplied by a trusted edge for MCP-subdomain routes. */
14
+ readonly publicResourceUrl?: string;
15
+ }
16
+ /**
17
+ * Bounded identity-denial taxonomy retained by request analytics (#1309). Derived structurally at
18
+ * this seam — the token verifier stays opaque — and never carries token material or claims.
19
+ */
20
+ type IdentityDenialReason = 'missing_token' | 'verifier_unavailable' | 'token_rejected' | 'identity_not_customer' | 'owner_unconfigured' | 'owner_mismatch' | 'org_membership_denied';
21
+ export type IdentityAuthResult = {
22
+ readonly allow: true;
23
+ readonly caller?: NonNullable<ProtocolRequestContext['caller']>;
24
+ readonly customerIssuer?: string;
25
+ readonly customerRouting?: Readonly<Record<string, string>>;
26
+ readonly subject?: string;
27
+ } | {
28
+ readonly allow: false;
29
+ readonly reason: IdentityDenialReason;
30
+ };
31
+ /**
32
+ * Identity gate (OA-1/OA-3): require a verified token and authorize it against the deployment access mode.
33
+ * `allow: true` means the request may proceed, with caller and subject fields when available. `allow: false`
34
+ * means this function already wrote the denial response. Missing tokens and absent verifiers fail closed.
35
+ */
36
+ export declare function authorizeIdentityMode(req: IncomingMessage, res: ServerResponse, auth: IdentityAuthorizationOptions): Promise<IdentityAuthResult>;
37
+ /**
38
+ * Public endpoints stay anonymous unless a valid service-principal bearer is supplied. Invalid, human,
39
+ * and customer bearers retain the pre-existing public behavior and are ignored rather than challenged.
40
+ */
41
+ export declare function authorizePublicServiceMode(req: IncomingMessage, auth: IdentityAuthorizationOptions): Promise<IdentityAuthResult>;
42
+ export declare function authorizeMixedMode(req: IncomingMessage, res: ServerResponse, auth: IdentityAuthorizationOptions): Promise<IdentityAuthResult>;
43
+ export declare function isIdentityMode(mode: AccessMode | undefined): boolean;
44
+ /** The credential carried by one `Authorization` header value, or null when it is not a bearer. */
45
+ export declare function bearerToken(headerValue: string | undefined): string | null;
46
+ /** The canonical resource identifier (the tenant MCP URL) a token must be audience-bound to (RFC 8707). */
47
+ export declare function canonicalResourceUrl(req: IncomingMessage, auth: Pick<IdentityAuthorizationOptions, 'trustProxy' | 'publicResourceUrl'>): string;
48
+ /** The RFC 9728 protected-resource-metadata URL for this request (well-known prefix before the path). */
49
+ export declare function protectedResourceMetadataUrl(req: IncomingMessage, auth: IdentityAuthorizationOptions): string;
50
+ export {};
51
+ //# sourceMappingURL=identity-authorization.d.ts.map
@@ -8,7 +8,7 @@ import { header } from './request-capture.js';
8
8
  */
9
9
  export async function authorizeIdentityMode(req, res, auth) {
10
10
  const challenge = protectedResourceMetadataUrl(req, auth);
11
- const token = bearerToken(req);
11
+ const token = bearerToken(header(req, 'authorization'));
12
12
  if (token === null || auth.verifyOwnerToken === undefined) {
13
13
  sendUnauthorized(res, challenge);
14
14
  return { allow: false, reason: token === null ? 'missing_token' : 'verifier_unavailable' };
@@ -75,7 +75,7 @@ export async function authorizeIdentityMode(req, res, auth) {
75
75
  * and customer bearers retain the pre-existing public behavior and are ignored rather than challenged.
76
76
  */
77
77
  export async function authorizePublicServiceMode(req, auth) {
78
- const token = bearerToken(req);
78
+ const token = bearerToken(header(req, 'authorization'));
79
79
  if (token === null || auth.verifyOwnerToken === undefined)
80
80
  return { allow: true };
81
81
  const verification = await auth.verifyOwnerToken(token, canonicalResourceUrl(req, auth));
@@ -84,7 +84,7 @@ export async function authorizePublicServiceMode(req, auth) {
84
84
  : { allow: true };
85
85
  }
86
86
  export async function authorizeMixedMode(req, res, auth) {
87
- const token = bearerToken(req);
87
+ const token = bearerToken(header(req, 'authorization'));
88
88
  if (token === null)
89
89
  return { allow: true };
90
90
  const challenge = protectedResourceMetadataUrl(req, auth);
@@ -114,11 +114,11 @@ export function isIdentityMode(mode) {
114
114
  mode === 'authenticated' ||
115
115
  mode === 'customers');
116
116
  }
117
- function bearerToken(req) {
118
- const auth = header(req, 'authorization');
119
- if (!auth)
117
+ /** The credential carried by one `Authorization` header value, or null when it is not a bearer. */
118
+ export function bearerToken(headerValue) {
119
+ if (!headerValue)
120
120
  return null;
121
- const match = /^Bearer\s+(.+)$/i.exec(auth);
121
+ const match = /^Bearer\s+(.+)$/i.exec(headerValue);
122
122
  return match?.[1] ?? null;
123
123
  }
124
124
  /**
@@ -1,8 +1,10 @@
1
1
  export { applySecurityHeaders, effectiveProto, enforceHttps, type TlsPosture, } from './front-door.js';
2
- export { type AccessMode, type AdmissionCategory, type AdmissionContext, type AdmissionDecision, type AdmissionGate, createMcpHttpHandler, createMcpRouter, type DataPlaneAuthorizationResult, type DataPlaneIdentityAuthorizer, type HttpHandlerOptions, type InvocationClientHint, type InvocationClientLocationHint, type InvocationContextResolutionInput, type InvocationContextResolver, type McpProtocolMode, type OriginPolicy, type OwnerTokenVerifier, type ServedTarget, type ServerLookup, type TenantPreflight, type TenantRouteRef, } from './handler.js';
2
+ export { type AccessMode, type AdmissionCategory, type AdmissionContext, type AdmissionDecision, type AdmissionGate, createMcpHttpHandler, createMcpRouter, type DataPlaneAuthorizationResult, type DataPlaneIdentityAuthorizer, type HttpHandlerOptions, type InvocationClientHint, type InvocationClientLocationHint, type InvocationContextResolutionInput, type InvocationContextResolver, type OriginPolicy, type OwnerTokenVerifier, type ServedTarget, type ServerLookup, type TenantPreflight, type TenantRouteRef, } from './handler.js';
3
+ export { bearerToken } from './identity-authorization.js';
3
4
  export { createLogger, type LogFields, type Logger, type LoggerOptions, type LogLevel, type LogSink, noopLogger, stderrSink, stdoutSink, } from './logging.js';
4
- export { type ModuleJsonBodyResult, readModuleJsonBody, sendModuleJson, } from './module-http.js';
5
5
  export { resolveTrustedPublicOrg, resolveTrustedTenantMcpResource, type TrustedPublicOrg, type TrustedPublicRef, type TrustedPublicRouting, type TrustedTenantMcpResource, trustedPublicMcpRef, trustedPublicOrgWellKnownRef, } from './public-routing.js';
6
+ export { readBody, readDeployBody, readJsonBody } from './request-body.js';
7
+ export { sendJson } from './responses.js';
6
8
  export { type RunningServer, type ServeOptions, serveHttp } from './serve.js';
7
9
  export type { HostedToolAuthorizationObservation, HostedToolAuthorizationObserver, ServicePrincipalToolAuthorizationObservation, } from './service-principal-authorization.js';
8
10
  export { preflightServicePrincipalToolCall, sendServicePrincipalToolDenial, } from './service-principal-authorization.js';
@@ -1,8 +1,10 @@
1
1
  export { applySecurityHeaders, effectiveProto, enforceHttps, } from './front-door.js';
2
2
  export { createMcpHttpHandler, createMcpRouter, } from './handler.js';
3
+ export { bearerToken } from './identity-authorization.js';
3
4
  export { createLogger, noopLogger, stderrSink, stdoutSink, } from './logging.js';
4
- export { readModuleJsonBody, sendModuleJson, } from './module-http.js';
5
5
  export { resolveTrustedPublicOrg, resolveTrustedTenantMcpResource, trustedPublicMcpRef, trustedPublicOrgWellKnownRef, } from './public-routing.js';
6
+ export { readBody, readDeployBody, readJsonBody } from './request-body.js';
7
+ export { sendJson } from './responses.js';
6
8
  export { serveHttp } from './serve.js';
7
9
  export { preflightServicePrincipalToolCall, sendServicePrincipalToolDenial, } from './service-principal-authorization.js';
8
10
  export { toWebRequest, writeWebResponse } from './web-bridge.js';
@@ -0,0 +1,29 @@
1
+ import type { IncomingMessage } from 'node:http';
2
+ export declare function readBody(req: IncomingMessage, max: number): Promise<{
3
+ ok: true;
4
+ text: string;
5
+ } | {
6
+ ok: false;
7
+ receivedBytes: number;
8
+ maxBytes: number;
9
+ }>;
10
+ export declare function readDeployBody(req: IncomingMessage, max: number): Promise<{
11
+ ok: true;
12
+ text: string;
13
+ encoding: 'identity' | 'gzip';
14
+ } | {
15
+ ok: false;
16
+ status: 400 | 413 | 415;
17
+ error: string;
18
+ receivedBytes?: number;
19
+ maxBytes?: number;
20
+ }>;
21
+ export declare function readJsonBody(req: IncomingMessage, max: number): Promise<{
22
+ ok: true;
23
+ value: unknown;
24
+ } | {
25
+ ok: false;
26
+ status: 400 | 413;
27
+ error: string;
28
+ }>;
29
+ //# sourceMappingURL=request-body.d.ts.map
@@ -0,0 +1,64 @@
1
+ import { gunzipSync } from 'node:zlib';
2
+ export async function readBody(req, max) {
3
+ const body = await readBodyBuffer(req, max);
4
+ return body.ok ? { ok: true, text: body.buffer.toString('utf8') } : body;
5
+ }
6
+ async function readBodyBuffer(req, max) {
7
+ const chunks = [];
8
+ let size = 0;
9
+ for await (const chunk of req) {
10
+ const buf = chunk;
11
+ size += buf.length;
12
+ if (size > max)
13
+ return { ok: false, receivedBytes: size, maxBytes: max };
14
+ chunks.push(buf);
15
+ }
16
+ return { ok: true, buffer: Buffer.concat(chunks) };
17
+ }
18
+ export async function readDeployBody(req, max) {
19
+ const encoding = (req.headers['content-encoding'] ?? 'identity').trim().toLowerCase();
20
+ if (encoding !== 'identity' && encoding !== 'gzip') {
21
+ return { ok: false, status: 415, error: `unsupported content encoding "${encoding}"` };
22
+ }
23
+ const body = await readBodyBuffer(req, max);
24
+ if (!body.ok) {
25
+ return {
26
+ ok: false,
27
+ status: 413,
28
+ error: `${encoding === 'gzip' ? 'compressed deploy' : 'deploy'} request exceeds the ${body.maxBytes} byte limit (received at least ${body.receivedBytes} bytes)`,
29
+ receivedBytes: body.receivedBytes,
30
+ maxBytes: body.maxBytes,
31
+ };
32
+ }
33
+ if (encoding === 'identity') {
34
+ return { ok: true, text: body.buffer.toString('utf8'), encoding };
35
+ }
36
+ try {
37
+ const expanded = gunzipSync(body.buffer, { maxOutputLength: max });
38
+ return { ok: true, text: expanded.toString('utf8'), encoding };
39
+ }
40
+ catch (error) {
41
+ const code = error instanceof Error && 'code' in error ? String(error.code) : '';
42
+ if (code === 'ERR_BUFFER_TOO_LARGE') {
43
+ return {
44
+ ok: false,
45
+ status: 413,
46
+ error: `expanded deploy request exceeds the ${max} byte limit`,
47
+ maxBytes: max,
48
+ };
49
+ }
50
+ return { ok: false, status: 400, error: 'invalid gzip deploy request' };
51
+ }
52
+ }
53
+ export async function readJsonBody(req, max) {
54
+ const body = await readBody(req, max);
55
+ if (!body.ok)
56
+ return { ok: false, status: 413, error: 'request body too large' };
57
+ try {
58
+ return { ok: true, value: JSON.parse(body.text) };
59
+ }
60
+ catch (error) {
61
+ return { ok: false, status: 400, error: `invalid JSON: ${error.message}` };
62
+ }
63
+ }
64
+ //# sourceMappingURL=request-body.js.map
@@ -0,0 +1,28 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { AdmissionContext, AdmissionGate } from '@noodle-borg/module';
3
+ import type { Logger } from './logging.js';
4
+ /** Emit one `mcp.request` lifecycle line with safe scalar fields only. */
5
+ export declare function logRequest(logger: Logger, routeId: string, req: IncomingMessage, res: ServerResponse, start: number): void;
6
+ export declare function guard(res: ServerResponse, fn: Promise<void>): Promise<void>;
7
+ export declare function sendJson(res: ServerResponse, status: number, body: unknown): void;
8
+ /** A transport-level JSON-RPC error response with no id (per the Streamable HTTP spec). */
9
+ export declare function rpcError(code: number, message: string): {
10
+ jsonrpc: '2.0';
11
+ id: null;
12
+ error: {
13
+ code: number;
14
+ message: string;
15
+ };
16
+ };
17
+ export declare function admissionRpcError(context: AdmissionContext, decision: Exclude<Awaited<ReturnType<AdmissionGate>>, {
18
+ allow: true;
19
+ }>): {
20
+ jsonrpc: '2.0';
21
+ id: string | number | null;
22
+ error: {
23
+ code: number;
24
+ message: string;
25
+ data: Record<string, string | number>;
26
+ };
27
+ };
28
+ //# sourceMappingURL=responses.d.ts.map
@@ -5,7 +5,7 @@ export interface PublicTenantRouting {
5
5
  readonly edgeToken: string;
6
6
  readonly resolveTenant: (ref: PublicMcpRouteRef) => Promise<TenantRouteRef | undefined>;
7
7
  }
8
- export type ParsedRoute = {
8
+ type ParsedRoute = {
9
9
  readonly kind: 'tenant';
10
10
  readonly ref: TenantRouteRef;
11
11
  readonly logId: string;
@@ -23,7 +23,5 @@ export type RouteResolution = {
23
23
  readonly status: 403;
24
24
  };
25
25
  export declare function resolveRoute(req: IncomingMessage, pathname: string, publicTenantRouting: PublicTenantRouting | undefined): Promise<RouteResolution>;
26
- export declare function parseRoute(pathname: string): ParsedRoute | null;
27
- export declare function tenantLogId(ref: TenantRouteRef): string;
28
- export declare function safeDecode(value: string): string | null;
26
+ export {};
29
27
  //# sourceMappingURL=routing.d.ts.map
@@ -27,7 +27,7 @@ export async function resolveRoute(req, pathname, publicTenantRouting) {
27
27
  }
28
28
  return { ok: true, route: parseRoute(pathname) };
29
29
  }
30
- export function parseRoute(pathname) {
30
+ function parseRoute(pathname) {
31
31
  const tenant = parseLegacyTenantMcpPath(pathname);
32
32
  if (tenant !== undefined) {
33
33
  return { kind: 'tenant', ref: tenant, logId: tenantLogId(tenant) };
@@ -41,10 +41,10 @@ export function parseRoute(pathname) {
41
41
  }
42
42
  return null;
43
43
  }
44
- export function tenantLogId(ref) {
44
+ function tenantLogId(ref) {
45
45
  return `${ref.org}/${ref.app}/${ref.env}${ref.serverVersion !== undefined ? `@${ref.serverVersion}` : ''}`;
46
46
  }
47
- export function safeDecode(value) {
47
+ function safeDecode(value) {
48
48
  try {
49
49
  return decodeURIComponent(value);
50
50
  }
@@ -3,6 +3,7 @@ import { createDualEraMcpHandler, handleStatelessHttp, JSON_RPC, } from '@noodle
3
3
  import { admissionContexts, requestsInvocationContext } from './admission-context.js';
4
4
  import { authorizeIdentityMode, authorizeMixedMode, authorizePublicServiceMode, canonicalResourceUrl, isIdentityMode, } from './identity-authorization.js';
5
5
  import { invocationClientHint } from './invocation-client-hints.js';
6
+ import { readBody } from './request-body.js';
6
7
  import { emitDeniedRequestEvent, emitIntentEvents, emitRequestEvent, header, } from './request-capture.js';
7
8
  import { admissionRpcError, rpcError, sendJson } from './responses.js';
8
9
  import { preflightServicePrincipalToolCall, sendServicePrincipalToolDenial, } from './service-principal-authorization.js';
@@ -284,21 +285,9 @@ function boundedReason(reason) {
284
285
  .slice(0, 32);
285
286
  return token.length === 0 ? 'denied' : token;
286
287
  }
287
- export function originAllowed(origin, allowed) {
288
+ function originAllowed(origin, allowed) {
288
289
  if (allowed === undefined)
289
290
  return true;
290
291
  return typeof allowed === 'function' ? allowed(origin) : allowed.includes(origin);
291
292
  }
292
- export async function readBody(req, max) {
293
- const chunks = [];
294
- let size = 0;
295
- for await (const chunk of req) {
296
- const buf = chunk;
297
- size += buf.length;
298
- if (size > max)
299
- return { ok: false };
300
- chunks.push(buf);
301
- }
302
- return { ok: true, text: Buffer.concat(chunks).toString('utf8') };
303
- }
304
293
  //# sourceMappingURL=serve-request.js.map
@@ -28,7 +28,6 @@
28
28
  "devDependencies": {
29
29
  "@modelcontextprotocol/sdk": "^1.29.0",
30
30
  "@noodle-borg/compiler": "0.0.0",
31
- "@noodle-borg/connector-http": "0.0.0",
32
31
  "@noodle-borg/runtime": "0.0.0",
33
32
  "@types/node": "^24.13.1"
34
33
  }
@@ -30,28 +30,9 @@ export declare const assistantSessionResponseSchema: z.ZodObject<{
30
30
  resume: z.ZodOptional<z.ZodObject<{
31
31
  tool: z.ZodString;
32
32
  }, z.core.$strip>>;
33
+ continuedAfterAuthentication: z.ZodOptional<z.ZodLiteral<true>>;
33
34
  }, z.core.$strip>;
34
35
  export type AssistantSessionResponse = z.infer<typeof assistantSessionResponseSchema>;
35
- /**
36
- * The bounded visible transcript (ADR 0141/0201 amendments 2026-08-26): only rows that actually
37
- * appeared in the panel — never tool internals, tickets, or model-facing scaffolding. Bounded by the
38
- * session history window (40 messages); a read spends no turn budget. Strict, because the service
39
- * parses its own response before sending, like the session exchange.
40
- */
41
- export declare const assistantTranscriptResponseSchema: z.ZodObject<{
42
- entries: z.ZodArray<z.ZodObject<{
43
- role: z.ZodEnum<{
44
- assistant: "assistant";
45
- user: "user";
46
- }>;
47
- text: z.ZodString;
48
- }, z.core.$strict>>;
49
- suggestions: z.ZodOptional<z.ZodObject<{
50
- phase: z.ZodLiteral<"follow_up">;
51
- prompts: z.ZodArray<z.ZodString>;
52
- }, z.core.$strict>>;
53
- }, z.core.$strict>;
54
- export type AssistantTranscriptResponse = z.infer<typeof assistantTranscriptResponseSchema>;
55
36
  /** MCP-Apps-shaped, author-selected renderer summary included on one assistant turn. */
56
37
  export declare const assistantModelContextUpdateSchema: z.ZodObject<{
57
38
  content: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -150,6 +131,19 @@ export type AssistantInteractionRequest = z.infer<typeof assistantInteractionReq
150
131
  * proposal/completion payloads while clients talking to older services tolerate absent new fields.
151
132
  */
152
133
  export declare const assistantWireEventSchema: z.ZodUnion<readonly [z.ZodObject<{
134
+ event: z.ZodLiteral<string>;
135
+ data: z.ZodObject<{
136
+ message: z.ZodString;
137
+ }, z.core.$strip>;
138
+ }, z.core.$strip>, z.ZodObject<{
139
+ event: z.ZodLiteral<string>;
140
+ data: z.ZodObject<{
141
+ tool: z.ZodString;
142
+ }, z.core.$strip>;
143
+ }, z.core.$strip>, z.ZodObject<{
144
+ event: z.ZodLiteral<string>;
145
+ data: z.ZodObject<{}, z.core.$strip>;
146
+ }, z.core.$strip>, z.ZodObject<{
153
147
  event: z.ZodLiteral<string>;
154
148
  data: z.ZodObject<{
155
149
  turnId: z.ZodOptional<z.ZodString>;
@@ -210,18 +204,18 @@ export declare const assistantWireEventSchema: z.ZodUnion<readonly [z.ZodObject<
210
204
  }, z.core.$strip>, z.ZodObject<{
211
205
  event: z.ZodLiteral<string>;
212
206
  data: z.ZodObject<{
213
- turnId: z.ZodOptional<z.ZodString>;
214
- id: z.ZodString;
215
207
  tool: z.ZodString;
208
+ id: z.ZodString;
216
209
  resourceUri: z.ZodString;
217
210
  title: z.ZodOptional<z.ZodString>;
218
211
  result: z.ZodJSONSchema;
219
212
  arguments: z.ZodOptional<z.ZodJSONSchema>;
220
- html: z.ZodOptional<z.ZodString>;
221
213
  resourceMeta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
222
214
  allowedOpenDomains: z.ZodOptional<z.ZodArray<z.ZodURL>>;
215
+ turnId: z.ZodOptional<z.ZodString>;
216
+ html: z.ZodOptional<z.ZodString>;
223
217
  replayed: z.ZodOptional<z.ZodLiteral<true>>;
224
- }, z.core.$strip>;
218
+ }, z.core.$strict>;
225
219
  }, z.core.$strip>, z.ZodObject<{
226
220
  event: z.ZodLiteral<string>;
227
221
  data: z.ZodObject<{
@@ -237,8 +231,8 @@ export declare const assistantWireEventSchema: z.ZodUnion<readonly [z.ZodObject<
237
231
  data: z.ZodObject<{
238
232
  turnId: z.ZodOptional<z.ZodString>;
239
233
  phase: z.ZodEnum<{
240
- follow_up: "follow_up";
241
234
  initial: "initial";
235
+ follow_up: "follow_up";
242
236
  }>;
243
237
  prompts: z.ZodArray<z.ZodString>;
244
238
  }, z.core.$strip>;
@@ -44,9 +44,9 @@ export const assistantSessionResponseSchema = z.object({
44
44
  sandbox: z.url().optional(),
45
45
  /**
46
46
  * Additive bounded visible-transcript endpoint (ADR 0141/0201 amendments 2026-08-26): a
47
- * session-token-authenticated POST returning what the panel may repaint after a full-page
48
- * navigation — the sign-in redirect above all. Absent on older services; the widget then
49
- * starts visually fresh exactly as before.
47
+ * session-token-authenticated POST replaying standard assistant events after a full-page
48
+ * navigation — the sign-in redirect above all. Absent on older services; the widget then starts
49
+ * visually fresh exactly as before.
50
50
  */
51
51
  transcript: z.url().optional(),
52
52
  /** Additive model-generated prompt suggestions; its presence is the client capability gate. */
@@ -59,30 +59,21 @@ export const assistantSessionResponseSchema = z.object({
59
59
  * existing turns endpoint; older widgets strip unknown keys and simply never auto-resume.
60
60
  */
61
61
  resume: z.object({ tool: z.string().min(1) }).optional(),
62
+ /** Additive elevation marker; the client renders one bounded continuation status. */
63
+ continuedAfterAuthentication: z.literal(true).optional(),
62
64
  });
63
- /**
64
- * The bounded visible transcript (ADR 0141/0201 amendments 2026-08-26): only rows that actually
65
- * appeared in the panel — never tool internals, tickets, or model-facing scaffolding. Bounded by the
66
- * session history window (40 messages); a read spends no turn budget. Strict, because the service
67
- * parses its own response before sending, like the session exchange.
68
- */
69
- export const assistantTranscriptResponseSchema = z
65
+ const recoverableViewSchema = z
70
66
  .object({
71
- entries: z
72
- .array(z
73
- .object({
74
- role: z.enum(['user', 'assistant']),
75
- text: z.string(),
76
- })
77
- .strict())
78
- .max(40),
79
- suggestions: z
80
- .object({
81
- phase: z.literal('follow_up'),
82
- prompts: z.array(z.string().trim().min(1).max(240)).max(3),
83
- })
84
- .strict()
85
- .optional(),
67
+ id: z.string().min(1),
68
+ tool: z.string().min(1),
69
+ resourceUri: z.string().startsWith('ui://'),
70
+ title: z.string().min(1).optional(),
71
+ result: z.json(),
72
+ arguments: z.json().optional(),
73
+ html: z.string().min(1),
74
+ resourceMeta: z.record(z.string(), z.unknown()).optional(),
75
+ allowedOpenDomains: z.array(z.url().startsWith('https://')).optional(),
76
+ replayed: z.literal(true),
86
77
  })
87
78
  .strict();
88
79
  const assistantModelContentPartSchema = z
@@ -185,6 +176,9 @@ const eventEnvelope = (event, data) => z.object({ event: z.literal(event), data
185
176
  * proposal/completion payloads while clients talking to older services tolerate absent new fields.
186
177
  */
187
178
  export const assistantWireEventSchema = z.union([
179
+ eventEnvelope('message_started', z.object({ message: z.string().min(1) })),
180
+ eventEnvelope('resume_started', z.object({ tool: z.string() })),
181
+ eventEnvelope('message_completed', z.object({})),
188
182
  eventEnvelope('content', z.object({ turnId: optionalTurnId, delta: z.string() })),
189
183
  eventEnvelope('tool_started', z.object({
190
184
  turnId: optionalTurnId,
@@ -224,17 +218,9 @@ export const assistantWireEventSchema = z.union([
224
218
  resourceMeta: z.record(z.string(), z.unknown()).optional(),
225
219
  replayed: z.literal(true).optional(),
226
220
  })),
227
- eventEnvelope('view_available', z.object({
221
+ eventEnvelope('view_available', recoverableViewSchema.omit({ replayed: true }).extend({
228
222
  turnId: optionalTurnId,
229
- id: z.string().min(1),
230
- tool: z.string().min(1),
231
- resourceUri: z.string().startsWith('ui://'),
232
- title: z.string().min(1).optional(),
233
- result: z.json(),
234
- arguments: z.json().optional(),
235
223
  html: z.string().min(1).optional(),
236
- resourceMeta: z.record(z.string(), z.unknown()).optional(),
237
- allowedOpenDomains: z.array(z.url().startsWith('https://')).optional(),
238
224
  replayed: z.literal(true).optional(),
239
225
  })),
240
226
  eventEnvelope('auth_requested', z.object({
@@ -31,7 +31,7 @@ Runtime requirements: Node.js 20+ for the server helper; the package ships ESM a
31
31
  export conditions, so bundlers and plain Node resolve it without aliases or type shims.
32
32
 
33
33
  The full, always-current integration guide (access modes, session response contract, framework notes, and
34
- troubleshooting) lives at <https://docs.noodleseed.dev/guides/embedded-assistant>. Authoring and deploying
34
+ troubleshooting) lives at <https://docs.noodleseed.dev/docs/guides/embedded-assistant>. Authoring and deploying
35
35
  the server itself is `@noodleseed/one` (`npm install -g @noodleseed/one`).
36
36
 
37
37
  If your page sends a `Content-Security-Policy`, allow the Noodle service origin in `connect-src` (turns and
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noodleseed/assistant",
3
- "version": "1.31.0",
3
+ "version": "1.32.0",
4
4
  "description": "Embed the Noodle Seed customer-branded assistant in your web app with managed or framework-owned UI, a framework-neutral MCP App host, a DOM-free client, and a backend session helper. Authoring and deploying the server is @noodleseed/one.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -90,6 +90,7 @@
90
90
  "access": "public"
91
91
  },
92
92
  "scripts": {
93
+ "attw": "attw --pack . --format json",
93
94
  "build": "tsup",
94
95
  "typecheck": "tsc -p tsconfig.json --noEmit"
95
96
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noodleseed/one",
3
- "version": "0.151.1",
3
+ "version": "0.153.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",
@@ -236,7 +236,7 @@
236
236
  "@modelcontextprotocol/client": "2.0.0",
237
237
  "@modelcontextprotocol/server": "2.0.0",
238
238
  "@noodle-borg/admission-limits": "0.0.0",
239
- "@noodle-borg/agent-kit": "0.91.0",
239
+ "@noodle-borg/agent-kit": "0.92.0",
240
240
  "@noodle-borg/app-audit": "0.0.0",
241
241
  "@noodle-borg/app-package": "0.0.0",
242
242
  "@noodle-borg/assistant-gateway": "0.0.0",
@@ -1,3 +0,0 @@
1
- /** Compatibility route; catalog ownership lives in `@noodle-borg/cli-catalog`. */
2
- export * from '@noodle-borg/cli-catalog/billing';
3
- //# sourceMappingURL=catalog-data-billing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalog-data-billing.d.ts","sourceRoot":"","sources":["../../src/commands/catalog-data-billing.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,cAAc,kCAAkC,CAAC"}
@@ -1,3 +0,0 @@
1
- /** Compatibility route; catalog ownership lives in `@noodle-borg/cli-catalog`. */
2
- export * from '@noodle-borg/cli-catalog/billing';
3
- //# sourceMappingURL=catalog-data-billing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalog-data-billing.js","sourceRoot":"","sources":["../../src/commands/catalog-data-billing.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,cAAc,kCAAkC,CAAC"}
@@ -1,3 +0,0 @@
1
- /** Compatibility route; catalog ownership lives in `@noodle-borg/cli-catalog`. */
2
- export * from '@noodle-borg/cli-catalog/policy';
3
- //# sourceMappingURL=catalog-data-policy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalog-data-policy.d.ts","sourceRoot":"","sources":["../../src/commands/catalog-data-policy.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,cAAc,iCAAiC,CAAC"}
@@ -1,3 +0,0 @@
1
- /** Compatibility route; catalog ownership lives in `@noodle-borg/cli-catalog`. */
2
- export * from '@noodle-borg/cli-catalog/policy';
3
- //# sourceMappingURL=catalog-data-policy.js.map