@noodleseed/one 0.162.0 → 0.163.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 (308) hide show
  1. package/dist/commands/billing-catalog-ops.d.ts +4 -0
  2. package/dist/commands/billing-catalog-ops.d.ts.map +1 -0
  3. package/dist/commands/billing-catalog-ops.js +58 -0
  4. package/dist/commands/billing-catalog-ops.js.map +1 -0
  5. package/dist/commands/billing-ops.d.ts.map +1 -1
  6. package/dist/commands/billing-ops.js +3 -0
  7. package/dist/commands/billing-ops.js.map +1 -1
  8. package/dist/commands/catalog.d.ts.map +1 -1
  9. package/dist/commands/catalog.js +2 -0
  10. package/dist/commands/catalog.js.map +1 -1
  11. package/dist/commands/config-values.d.ts.map +1 -1
  12. package/dist/commands/config-values.js +16 -0
  13. package/dist/commands/config-values.js.map +1 -1
  14. package/dist/commands/installation-variables.d.ts +26 -0
  15. package/dist/commands/installation-variables.d.ts.map +1 -0
  16. package/dist/commands/installation-variables.js +171 -0
  17. package/dist/commands/installation-variables.js.map +1 -0
  18. package/dist/commands/solutions-activity.d.ts +5 -0
  19. package/dist/commands/solutions-activity.d.ts.map +1 -0
  20. package/dist/commands/solutions-activity.js +116 -0
  21. package/dist/commands/solutions-activity.js.map +1 -0
  22. package/dist/commands/solutions-connections.d.ts +7 -0
  23. package/dist/commands/solutions-connections.d.ts.map +1 -0
  24. package/dist/commands/solutions-connections.js +88 -0
  25. package/dist/commands/solutions-connections.js.map +1 -0
  26. package/dist/commands/solutions-installation-options.d.ts +5 -0
  27. package/dist/commands/solutions-installation-options.d.ts.map +1 -0
  28. package/dist/commands/solutions-installation-options.js +52 -0
  29. package/dist/commands/solutions-installation-options.js.map +1 -0
  30. package/dist/commands/solutions-onboarding.d.ts +5 -0
  31. package/dist/commands/solutions-onboarding.d.ts.map +1 -0
  32. package/dist/commands/solutions-onboarding.js +113 -0
  33. package/dist/commands/solutions-onboarding.js.map +1 -0
  34. package/dist/commands/solutions-ops.d.ts.map +1 -1
  35. package/dist/commands/solutions-ops.js +278 -17
  36. package/dist/commands/solutions-ops.js.map +1 -1
  37. package/dist/index.d.ts +1 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +1 -1
  40. package/dist/index.js.map +1 -1
  41. package/node_modules/@noodle-borg/admission-limits/dist/counter-store.d.ts +21 -2
  42. package/node_modules/@noodle-borg/admission-limits/dist/counter-store.js +10 -1
  43. package/node_modules/@noodle-borg/admission-limits/dist/in-memory-counter-store.d.ts +5 -1
  44. package/node_modules/@noodle-borg/admission-limits/dist/in-memory-counter-store.js +31 -2
  45. package/node_modules/@noodle-borg/admission-limits/dist/portable.d.ts +3 -0
  46. package/node_modules/@noodle-borg/admission-limits/dist/portable.js +3 -0
  47. package/node_modules/@noodle-borg/admission-limits/dist/public-admission-assertion.d.ts +28 -0
  48. package/node_modules/@noodle-borg/admission-limits/dist/public-admission-assertion.js +124 -0
  49. package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.d.ts +54 -0
  50. package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.js +74 -0
  51. package/node_modules/@noodle-borg/admission-limits/dist/request-attribution.d.ts +11 -0
  52. package/node_modules/@noodle-borg/admission-limits/dist/request-attribution.js +19 -0
  53. package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js +2 -0
  54. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +5 -5
  55. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +3 -0
  56. package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +15 -3
  57. package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +1 -1
  58. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  59. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.d.ts +9 -1
  60. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.js +33 -2
  61. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-execution-bound.d.ts +3 -0
  62. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-execution-bound.js +29 -0
  63. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-interaction-state.d.ts +5 -3
  64. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-interaction-state.js +21 -10
  65. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.d.ts +1 -1
  66. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.js +3 -3
  67. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.d.ts +1 -0
  68. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.js +1 -0
  69. package/node_modules/@noodle-borg/assistant-gateway/dist/session-target.js +5 -4
  70. package/node_modules/@noodle-borg/authoring/dist/config.d.ts +20 -0
  71. package/node_modules/@noodle-borg/authoring/dist/config.js +29 -2
  72. package/node_modules/@noodle-borg/authoring/dist/connectors.d.ts +6 -1
  73. package/node_modules/@noodle-borg/authoring/dist/connectors.js +5 -0
  74. package/node_modules/@noodle-borg/authoring/dist/index.d.ts +2 -2
  75. package/node_modules/@noodle-borg/authoring/dist/json-schema.d.ts +1 -1
  76. package/node_modules/@noodle-borg/authoring/dist/json-schema.js +15 -2
  77. package/node_modules/@noodle-borg/authoring/dist/load-authored.js +1 -1
  78. package/node_modules/@noodle-borg/authoring/dist/managed-collection.d.ts +18 -4
  79. package/node_modules/@noodle-borg/authoring/dist/managed-collection.js +22 -3
  80. package/node_modules/@noodle-borg/authoring/dist/platform.d.ts +3 -0
  81. package/node_modules/@noodle-borg/authoring/dist/platform.js +4 -0
  82. package/node_modules/@noodle-borg/authoring/dist/server-presentation.js +43 -0
  83. package/node_modules/@noodle-borg/authoring/dist/server.d.ts +3 -1
  84. package/node_modules/@noodle-borg/authoring/dist/server.js +4 -44
  85. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-billing.js +18 -0
  86. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-config.js +31 -4
  87. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-solutions.js +778 -0
  88. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-resources.js +0 -241
  89. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-types.js +7 -0
  90. package/node_modules/@noodle-borg/cli-catalog/dist/index.js +20 -0
  91. package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.js +2 -1
  92. package/node_modules/@noodle-borg/compiler/dist/artifact/catalog-emission.js +3 -1
  93. package/node_modules/@noodle-borg/compiler/dist/artifact/config.js +3 -0
  94. package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +17 -1
  95. package/node_modules/@noodle-borg/compiler/dist/artifact/version.d.ts +6 -1
  96. package/node_modules/@noodle-borg/compiler/dist/artifact/version.js +6 -1
  97. package/node_modules/@noodle-borg/compiler/dist/business-variables.d.ts +27 -0
  98. package/node_modules/@noodle-borg/compiler/dist/business-variables.js +230 -0
  99. package/node_modules/@noodle-borg/compiler/dist/compile.js +7 -1
  100. package/node_modules/@noodle-borg/compiler/dist/errors.d.ts +1 -1
  101. package/node_modules/@noodle-borg/compiler/dist/index.d.ts +3 -0
  102. package/node_modules/@noodle-borg/compiler/dist/index.js +3 -0
  103. package/node_modules/@noodle-borg/compiler/dist/managed-collection-controls.d.ts +52 -0
  104. package/node_modules/@noodle-borg/compiler/dist/managed-collection-controls.js +92 -0
  105. package/node_modules/@noodle-borg/compiler/dist/managed-collections.d.ts +26 -1
  106. package/node_modules/@noodle-borg/compiler/dist/managed-collections.js +190 -1
  107. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +100 -36
  108. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +2 -0
  109. package/node_modules/@noodle-borg/compiler/dist/native-record-operations.d.ts +7 -0
  110. package/node_modules/@noodle-borg/compiler/dist/native-record-operations.js +59 -0
  111. package/node_modules/@noodle-borg/connector-defs/dist/compile-http.js +83 -8
  112. package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts +31 -1
  113. package/node_modules/@noodle-borg/connector-defs/dist/schema.js +16 -0
  114. package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +12 -3
  115. package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +41 -2
  116. package/node_modules/@noodle-borg/connector-http/dist/http-response.js +3 -2
  117. package/node_modules/@noodle-borg/connector-http/dist/mcp/config.js +1 -1
  118. package/node_modules/@noodle-borg/connector-http/dist/url-resolution.js +1 -1
  119. package/node_modules/@noodle-borg/control-plane/dist/contracts.d.ts +2 -1
  120. package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.d.ts +3 -0
  121. package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.js +11 -0
  122. package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.d.ts +45 -0
  123. package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.js +74 -0
  124. package/node_modules/@noodle-borg/control-plane/dist/portable.d.ts +1 -0
  125. package/node_modules/@noodle-borg/control-plane/dist/portable.js +1 -0
  126. package/node_modules/@noodle-borg/module/dist/contract.d.ts +20 -0
  127. package/node_modules/@noodle-borg/module/dist/platform-human-identity.d.ts +2 -0
  128. package/node_modules/@noodle-borg/protocol/dist/request-deps.js +1 -0
  129. package/node_modules/@noodle-borg/protocol/dist/request-state.d.ts +1 -0
  130. package/node_modules/@noodle-borg/protocol/dist/request-state.js +11 -2
  131. package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts +2 -0
  132. package/node_modules/@noodle-borg/protocol/dist/v2/input-required.js +2 -1
  133. package/node_modules/@noodle-borg/protocol/dist/v2/server.js +2 -1
  134. package/node_modules/@noodle-borg/runtime/dist/ambient-context.js +6 -1
  135. package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts +2 -0
  136. package/node_modules/@noodle-borg/runtime/dist/business-variables.d.ts +15 -0
  137. package/node_modules/@noodle-borg/runtime/dist/business-variables.js +75 -0
  138. package/node_modules/@noodle-borg/runtime/dist/confirmation-continuation.js +2 -1
  139. package/node_modules/@noodle-borg/runtime/dist/confirmation.js +23 -3
  140. package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts +17 -1
  141. package/node_modules/@noodle-borg/runtime/dist/connector-snapshot.js +6 -0
  142. package/node_modules/@noodle-borg/runtime/dist/execute.d.ts +18 -3
  143. package/node_modules/@noodle-borg/runtime/dist/execute.js +13 -3
  144. package/node_modules/@noodle-borg/runtime/dist/index.d.ts +2 -0
  145. package/node_modules/@noodle-borg/runtime/dist/index.js +1 -0
  146. package/node_modules/@noodle-borg/runtime/dist/interactive.js +11 -0
  147. package/node_modules/@noodle-borg/runtime/dist/managed-origins.d.ts +3 -1
  148. package/node_modules/@noodle-borg/runtime/dist/managed-origins.js +32 -7
  149. package/node_modules/@noodle-borg/runtime/dist/operation-credential.js +6 -0
  150. package/node_modules/@noodle-borg/runtime/dist/operation-evidence.d.ts +30 -0
  151. package/node_modules/@noodle-borg/runtime/dist/operation-evidence.js +68 -0
  152. package/node_modules/@noodle-borg/runtime/dist/operation-execution.d.ts +2 -2
  153. package/node_modules/@noodle-borg/runtime/dist/operation-execution.js +142 -71
  154. package/node_modules/@noodle-borg/runtime/dist/result.d.ts +6 -4
  155. package/node_modules/@noodle-borg/runtime/dist/tool-dispatch.d.ts +7 -0
  156. package/node_modules/@noodle-borg/runtime/dist/tool-dispatch.js +48 -4
  157. package/node_modules/@noodle-borg/service/dist/admission.js +2 -1
  158. package/node_modules/@noodle-borg/service/dist/application-activity.js +236 -0
  159. package/node_modules/@noodle-borg/service/dist/application-business-notice.js +28 -0
  160. package/node_modules/@noodle-borg/service/dist/application-runtime-target.js +141 -0
  161. package/node_modules/@noodle-borg/service/dist/application-settings-targets.js +72 -0
  162. package/node_modules/@noodle-borg/service/dist/application-settings.js +210 -0
  163. package/node_modules/@noodle-borg/service/dist/business-api-admission.js +121 -0
  164. package/node_modules/@noodle-borg/service/dist/business-information/activity-pagination.js +73 -0
  165. package/node_modules/@noodle-borg/service/dist/business-information/business-notice.d.ts +24 -0
  166. package/node_modules/@noodle-borg/service/dist/business-information/business-notice.js +18 -0
  167. package/node_modules/@noodle-borg/service/dist/business-information/collection-controls.js +51 -0
  168. package/node_modules/@noodle-borg/service/dist/business-information/contracts.d.ts +439 -0
  169. package/node_modules/@noodle-borg/service/dist/business-information/definition-resolver.js +94 -0
  170. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-installation-lifecycle.js +136 -0
  171. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-invitations.js +160 -0
  172. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-locks.js +23 -0
  173. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-store.js +287 -132
  174. package/node_modules/@noodle-borg/service/dist/business-information/installation-capacity.js +10 -0
  175. package/node_modules/@noodle-borg/service/dist/business-information/invitations.js +68 -0
  176. package/node_modules/@noodle-borg/service/dist/business-information/legacy-request-migration.js +60 -0
  177. package/node_modules/@noodle-borg/service/dist/business-information/managed-releases.js +245 -0
  178. package/node_modules/@noodle-borg/service/dist/business-information/managed-solution-blueprints.js +51 -0
  179. package/node_modules/@noodle-borg/service/dist/business-information/managed-solution-executable.js +76 -0
  180. package/node_modules/@noodle-borg/service/dist/business-information/model.js +124 -23
  181. package/node_modules/@noodle-borg/service/dist/business-information/native-query.js +162 -0
  182. package/node_modules/@noodle-borg/service/dist/business-information/native-storage-budget.js +60 -0
  183. package/node_modules/@noodle-borg/service/dist/business-information/pagination.js +28 -0
  184. package/node_modules/@noodle-borg/service/dist/business-information/portable.js +9 -0
  185. package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.d.ts +11 -0
  186. package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.js +42 -0
  187. package/node_modules/@noodle-borg/service/dist/business-information/profiles.js +137 -6
  188. package/node_modules/@noodle-borg/service/dist/business-information/reader-floor.js +26 -0
  189. package/node_modules/@noodle-borg/service/dist/business-information/source-credential-fence.js +79 -0
  190. package/node_modules/@noodle-borg/service/dist/business-information/source-custody-budget.js +30 -0
  191. package/node_modules/@noodle-borg/service/dist/business-information/source-custody-memory.js +122 -0
  192. package/node_modules/@noodle-borg/service/dist/business-information/source-executor.js +191 -0
  193. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-contracts.js +2 -0
  194. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-coordinator.js +136 -0
  195. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-failures.js +32 -0
  196. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-state.js +154 -0
  197. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-store.js +568 -0
  198. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-types.js +26 -0
  199. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-values.js +59 -0
  200. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-pagination.js +54 -0
  201. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-validation.js +163 -0
  202. package/node_modules/@noodle-borg/service/dist/business-information/source-refresh-retention.js +29 -0
  203. package/node_modules/@noodle-borg/service/dist/business-information-runtime.js +80 -0
  204. package/node_modules/@noodle-borg/service/dist/business-onboarding.js +73 -0
  205. package/node_modules/@noodle-borg/service/dist/connections/types.js +8 -0
  206. package/node_modules/@noodle-borg/service/dist/credential-binding-index.js +38 -33
  207. package/node_modules/@noodle-borg/service/dist/deployment-execution.js +275 -0
  208. package/node_modules/@noodle-borg/service/dist/external-credential-binding-broker.js +19 -1
  209. package/node_modules/@noodle-borg/service/dist/external-credential-exchange.d.ts +16 -1
  210. package/node_modules/@noodle-borg/service/dist/modules/host.js +4 -1
  211. package/node_modules/@noodle-borg/service/dist/native-record-connector.d.ts +20 -0
  212. package/node_modules/@noodle-borg/service/dist/native-record-connector.js +206 -0
  213. package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts +3 -0
  214. package/node_modules/@noodle-borg/service/dist/operation-evidence.js +89 -0
  215. package/node_modules/@noodle-borg/service/dist/recovery-quarantine.js +49 -0
  216. package/node_modules/@noodle-borg/service/dist/registry-compile.js +60 -11
  217. package/node_modules/@noodle-borg/service/dist/registry-deploy-transaction.js +18 -0
  218. package/node_modules/@noodle-borg/service/dist/registry-rollback.js +2 -1
  219. package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +1 -1
  220. package/node_modules/@noodle-borg/service/dist/registry-state.js +6 -3
  221. package/node_modules/@noodle-borg/service/dist/registry-targets.js +49 -0
  222. package/node_modules/@noodle-borg/service/dist/registry-types.d.ts +2 -0
  223. package/node_modules/@noodle-borg/service/dist/registry.d.ts +15 -3
  224. package/node_modules/@noodle-borg/service/dist/registry.js +177 -137
  225. package/node_modules/@noodle-borg/service/dist/routes/assistant-appearance.js +3 -2
  226. package/node_modules/@noodle-borg/service/dist/routes/assistant-clients.js +2 -1
  227. package/node_modules/@noodle-borg/service/dist/routes/assistant-doctor.js +2 -1
  228. package/node_modules/@noodle-borg/service/dist/routes/assistant-embeds.js +8 -3
  229. package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-replay.js +1 -1
  230. package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.js +48 -36
  231. package/node_modules/@noodle-borg/service/dist/routes/assistant-public-configuration.js +3 -2
  232. package/node_modules/@noodle-borg/service/dist/routes/assistant-public-session.js +10 -10
  233. package/node_modules/@noodle-borg/service/dist/routes/assistant-session-target.js +32 -3
  234. package/node_modules/@noodle-borg/service/dist/routes/assistant-suggestions.js +1 -1
  235. package/node_modules/@noodle-borg/service/dist/routes/assistant-transcript.js +1 -1
  236. package/node_modules/@noodle-borg/service/dist/routes/assistant.js +10 -10
  237. package/node_modules/@noodle-borg/service/dist/routes/business-information-activity.js +83 -0
  238. package/node_modules/@noodle-borg/service/dist/routes/business-information-admission.js +26 -0
  239. package/node_modules/@noodle-borg/service/dist/routes/business-information-channels.js +153 -0
  240. package/node_modules/@noodle-borg/service/dist/routes/business-information-connections.js +107 -0
  241. package/node_modules/@noodle-borg/service/dist/routes/business-information-dispatch.js +87 -4
  242. package/node_modules/@noodle-borg/service/dist/routes/business-information-external.js +79 -0
  243. package/node_modules/@noodle-borg/service/dist/routes/business-information-installation.js +24 -0
  244. package/node_modules/@noodle-borg/service/dist/routes/business-information-notice.js +69 -0
  245. package/node_modules/@noodle-borg/service/dist/routes/business-information-onboarding.js +58 -0
  246. package/node_modules/@noodle-borg/service/dist/routes/business-information-paths.js +76 -0
  247. package/node_modules/@noodle-borg/service/dist/routes/business-information-public.js +151 -0
  248. package/node_modules/@noodle-borg/service/dist/routes/business-information-reader-floor.js +15 -0
  249. package/node_modules/@noodle-borg/service/dist/routes/business-information-record-create.js +29 -0
  250. package/node_modules/@noodle-borg/service/dist/routes/business-information-record-reads.js +36 -0
  251. package/node_modules/@noodle-borg/service/dist/routes/business-information-request.js +64 -0
  252. package/node_modules/@noodle-borg/service/dist/routes/business-information-settings.js +64 -0
  253. package/node_modules/@noodle-borg/service/dist/routes/business-information-source.js +249 -0
  254. package/node_modules/@noodle-borg/service/dist/routes/business-information-staff.js +258 -0
  255. package/node_modules/@noodle-borg/service/dist/routes/business-information-wire.js +226 -26
  256. package/node_modules/@noodle-borg/service/dist/routes/business-information.js +238 -197
  257. package/node_modules/@noodle-borg/service/dist/routes/config-values-dispatch.js +1 -1
  258. package/node_modules/@noodle-borg/service/dist/routes/config-values.js +26 -4
  259. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +19 -233
  260. package/node_modules/@noodle-borg/service/dist/routes/deployment-activation-response.js +13 -4
  261. package/node_modules/@noodle-borg/service/dist/service-resource-cleanup.js +4 -0
  262. package/node_modules/@noodle-borg/service/dist/service.js +57 -11
  263. package/node_modules/@noodle-borg/service/dist/solution-installation-activation.js +149 -0
  264. package/node_modules/@noodle-borg/service/dist/source-configuration-authority.js +94 -0
  265. package/node_modules/@noodle-borg/service/dist/state-catalog.js +6 -5
  266. package/node_modules/@noodle-borg/service/dist/store/config-values.d.ts +42 -17
  267. package/node_modules/@noodle-borg/service/dist/store/config-values.js +123 -24
  268. package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts +1 -0
  269. package/node_modules/@noodle-borg/service/dist/store/in-memory.js +3 -0
  270. package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +1 -0
  271. package/node_modules/@noodle-borg/service/dist/store/json-file.js +3 -0
  272. package/node_modules/@noodle-borg/service/dist/store.d.ts +3 -1
  273. package/node_modules/@noodle-borg/service/package.json +2 -2
  274. package/node_modules/@noodle-borg/transport-http/dist/serve-request.js +9 -0
  275. package/node_modules/@noodle-borg/transport-http/package.json +1 -0
  276. package/node_modules/@noodle-borg/wire-contracts/dist/application-activity.d.ts +143 -0
  277. package/node_modules/@noodle-borg/wire-contracts/dist/application-activity.js +90 -0
  278. package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.d.ts +130 -0
  279. package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.js +77 -0
  280. package/node_modules/@noodle-borg/wire-contracts/dist/application-connections.d.ts +105 -0
  281. package/node_modules/@noodle-borg/wire-contracts/dist/application-connections.js +67 -0
  282. package/node_modules/@noodle-borg/wire-contracts/dist/application-onboarding.d.ts +27 -0
  283. package/node_modules/@noodle-borg/wire-contracts/dist/application-onboarding.js +28 -0
  284. package/node_modules/@noodle-borg/wire-contracts/dist/application-settings.d.ts +112 -0
  285. package/node_modules/@noodle-borg/wire-contracts/dist/application-settings.js +88 -0
  286. package/node_modules/@noodle-borg/wire-contracts/dist/assistant.d.ts +1 -1
  287. package/node_modules/@noodle-borg/wire-contracts/dist/billing-catalog.d.ts +62 -0
  288. package/node_modules/@noodle-borg/wire-contracts/dist/billing-catalog.js +57 -0
  289. package/node_modules/@noodle-borg/wire-contracts/dist/billing-enforcement.d.ts +12 -12
  290. package/node_modules/@noodle-borg/wire-contracts/dist/billing-metering.d.ts +4 -4
  291. package/node_modules/@noodle-borg/wire-contracts/dist/billing-org-transfer.d.ts +3 -3
  292. package/node_modules/@noodle-borg/wire-contracts/dist/business-information-query.d.ts +25 -0
  293. package/node_modules/@noodle-borg/wire-contracts/dist/business-information-query.js +37 -0
  294. package/node_modules/@noodle-borg/wire-contracts/dist/business-information.d.ts +1816 -158
  295. package/node_modules/@noodle-borg/wire-contracts/dist/business-information.js +416 -41
  296. package/node_modules/@noodle-borg/wire-contracts/dist/control-plane.d.ts +2 -2
  297. package/node_modules/@noodle-borg/wire-contracts/dist/distribution.d.ts +5 -5
  298. package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts +8 -0
  299. package/node_modules/@noodle-borg/wire-contracts/dist/index.js +8 -0
  300. package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.d.ts +3 -3
  301. package/node_modules/@noodle-borg/wire-contracts/dist/managed-assistant-sponsorship.d.ts +7 -7
  302. package/node_modules/@noodle-borg/wire-contracts/dist/platform-account-reset.d.ts +5 -0
  303. package/node_modules/@noodle-borg/wire-contracts/dist/platform-account-reset.js +1 -0
  304. package/node_modules/@noodle-borg/wire-contracts/dist/platform-auth.d.ts +66 -66
  305. package/node_modules/@noodle-borg/wire-contracts/dist/solution-onboarding.d.ts +143 -0
  306. package/node_modules/@noodle-borg/wire-contracts/dist/solution-onboarding.js +94 -0
  307. package/node_modules/@noodleseed/assistant/README.md +5 -0
  308. package/package.json +2 -2
@@ -0,0 +1,74 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { validateSlug } from './validation.js';
3
+ export class OrganizationAgreementError extends Error {
4
+ code;
5
+ constructor(code) {
6
+ super(code === 'agreement_owner_required'
7
+ ? 'Organization owner required to accept agreements.'
8
+ : 'Agreement version has a different immutable document identity.');
9
+ this.code = code;
10
+ this.name = 'OrganizationAgreementError';
11
+ }
12
+ }
13
+ export function validateAgreementDocuments(input) {
14
+ if (!/^[A-Za-z0-9][A-Za-z0-9_-]{0,79}$/.test(input.version))
15
+ throw new Error('Invalid agreement version');
16
+ const document = (value) => {
17
+ if (typeof value.url !== 'string' ||
18
+ value.url.length > 2048 ||
19
+ !/^[a-f0-9]{64}$/.test(value.sha256))
20
+ throw new Error('Invalid agreement document');
21
+ const url = new URL(value.url);
22
+ if (url.protocol !== 'https:' || url.username || url.password || url.hash)
23
+ throw new Error('Invalid agreement document URL');
24
+ return { url: value.url, sha256: value.sha256 };
25
+ };
26
+ return {
27
+ version: input.version,
28
+ terms: document(input.terms),
29
+ privacy: document(input.privacy),
30
+ processing: document(input.processing),
31
+ };
32
+ }
33
+ export function agreementDocumentDigest(documents) {
34
+ return createHash('sha256')
35
+ .update(JSON.stringify(validateAgreementDocuments(documents)))
36
+ .digest('hex');
37
+ }
38
+ /** Synchronous commit boundary keeps membership recheck, catalog registration and receipt indivisible. */
39
+ export class InMemoryOrganizationAgreements {
40
+ isOwner;
41
+ now;
42
+ #catalog = new Map();
43
+ #receipts = new Map();
44
+ constructor(isOwner, now) {
45
+ this.isOwner = isOwner;
46
+ this.now = now;
47
+ }
48
+ getOrganizationAgreement(org, version) {
49
+ const receipt = this.#receipts.get(JSON.stringify([validateSlug('org', org), version]));
50
+ return Promise.resolve(receipt ? structuredClone(receipt) : undefined);
51
+ }
52
+ async acceptOrganizationAgreement(input) {
53
+ const org = validateSlug('org', input.org);
54
+ if (!this.isOwner(org, input.actorSubject))
55
+ throw new OrganizationAgreementError('agreement_owner_required');
56
+ const documents = validateAgreementDocuments(input.documents);
57
+ const documentDigest = agreementDocumentDigest(documents);
58
+ const registered = this.#catalog.get(documents.version);
59
+ if (registered !== undefined && registered !== documentDigest)
60
+ throw new OrganizationAgreementError('agreement_version_conflict');
61
+ const key = JSON.stringify([org, documents.version]);
62
+ const receipt = this.#receipts.get(key) ?? {
63
+ org,
64
+ actorSubject: input.actorSubject,
65
+ documents,
66
+ documentDigest,
67
+ acceptedAt: this.now().toISOString(),
68
+ };
69
+ this.#catalog.set(documents.version, documentDigest);
70
+ this.#receipts.set(key, receipt);
71
+ return structuredClone(receipt);
72
+ }
73
+ }
74
+ //# sourceMappingURL=organization-agreements.js.map
@@ -6,6 +6,7 @@ export { CompositeControlPlaneGate, type ControlPlaneSignupMode, GoogleControlPl
6
6
  export { InMemoryControlPlaneStore } from './in-memory-control-plane-store.js';
7
7
  export { bindInMemoryOrganizationStore, type InMemoryOrganizationOperations, InMemoryOrganizationStore, } from './in-memory-organization-store.js';
8
8
  export { InMemoryMcpSubdomainClaimStore, McpSubdomainCooldownError, McpSubdomainIdempotencyConflictError, McpSubdomainOwnerRequiredError, type McpSubdomainRouteRef, McpSubdomainUnavailableError, mcpSubdomainEndpointOptions, type ResolvedMcpTenantRef, resolveMcpSubdomainTenant, } from './mcp-subdomain-claims.js';
9
+ export { type AcceptOrganizationAgreementInput, type AgreementDocument, type AgreementDocuments, agreementDocumentDigest, type OrganizationAgreementAcceptance, OrganizationAgreementError, type OrganizationAgreementStore, validateAgreementDocuments, } from './organization-agreements.js';
9
10
  export { domainFromEmail, domainKey, memberKey, normalizeSignupAllowlistValue, personalOrgSlug, personalOrgSlugSuffix, signupKey, } from './organization-helpers.js';
10
11
  export { ensurePersonalWorkspace } from './personal-workspace.js';
11
12
  export { type RollbackControlPlane, type RollbackOperationDependencies, type RollbackOperationInput, type RollbackOperationResult, type RollbackRegistry, rollbackDeploymentOperation, } from './rollback-deployment.js';
@@ -5,6 +5,7 @@ export { CompositeControlPlaneGate, GoogleControlPlaneGate, GoogleWorkloadContro
5
5
  export { InMemoryControlPlaneStore } from './in-memory-control-plane-store.js';
6
6
  export { bindInMemoryOrganizationStore, InMemoryOrganizationStore, } from './in-memory-organization-store.js';
7
7
  export { InMemoryMcpSubdomainClaimStore, McpSubdomainCooldownError, McpSubdomainIdempotencyConflictError, McpSubdomainOwnerRequiredError, McpSubdomainUnavailableError, mcpSubdomainEndpointOptions, resolveMcpSubdomainTenant, } from './mcp-subdomain-claims.js';
8
+ export { agreementDocumentDigest, OrganizationAgreementError, validateAgreementDocuments, } from './organization-agreements.js';
8
9
  export { domainFromEmail, domainKey, memberKey, normalizeSignupAllowlistValue, personalOrgSlug, personalOrgSlugSuffix, signupKey, } from './organization-helpers.js';
9
10
  export { ensurePersonalWorkspace } from './personal-workspace.js';
10
11
  export { rollbackDeploymentOperation, } from './rollback-deployment.js';
@@ -181,7 +181,27 @@ export interface ModuleContributionsV1 {
181
181
  readonly readiness?: ReadinessProbe;
182
182
  readonly dispose?: ModuleDispose;
183
183
  }
184
+ /** Verified current authority; absence must not synthesize a commercial tier. */
185
+ export interface ActivityHistoryAllowance {
186
+ readonly maximumDays: number;
187
+ readonly defaultDays: number;
188
+ readonly revision: string;
189
+ /** Read-only scenarios; this is not evidence that a plan change is selected or scheduled. */
190
+ readonly preview?: {
191
+ readonly asOf: string;
192
+ readonly paidPeriodEnd: string;
193
+ readonly scenarios: readonly {
194
+ readonly id: string;
195
+ readonly label: string;
196
+ readonly maximumDays: number;
197
+ }[];
198
+ };
199
+ }
200
+ export type ResolveActivityHistoryAllowance = (org: string, options?: {
201
+ readonly includePreview: true;
202
+ }) => Promise<ActivityHistoryAllowance | undefined>;
184
203
  export interface ModuleContributions extends ModuleContributionsV1 {
204
+ readonly resolveActivityHistoryAllowance?: ResolveActivityHistoryAllowance;
185
205
  readonly assetStore?: AssetStore;
186
206
  readonly deploymentAutomation?: DeploymentAutomationAuthorizer;
187
207
  readonly platformHumanIdentity?: PlatformHumanIdentityContribution;
@@ -85,6 +85,8 @@ export interface PlatformHumanIdentityContribution {
85
85
  readonly oldTokenHash: string;
86
86
  readonly clientId: string;
87
87
  }) => Promise<'continue' | 'unknown' | 'suspended'>;
88
+ /** Check a business assignee under the caller's borrowed transaction and suspension lock. */
89
+ readonly assertActivePrincipal?: (transaction: ModuleSqlTransaction, subject: string) => Promise<void>;
88
90
  readonly continuityProbe?: () => void | Promise<void>;
89
91
  }
90
92
  //# sourceMappingURL=platform-human-identity.d.ts.map
@@ -4,6 +4,7 @@ export function buildProtocolRequestDeps(artifact, deps, context) {
4
4
  return {
5
5
  ...deps,
6
6
  ...(context.caller !== undefined ? { caller: context.caller } : {}),
7
+ ...(context.publicAdmission === undefined ? {} : { publicAdmission: context.publicAdmission }),
7
8
  ...(context.customerIssuer !== undefined ? { customerIssuer: context.customerIssuer } : {}),
8
9
  ...(artifact.customerEndpoints === undefined
9
10
  ? {}
@@ -1,6 +1,7 @@
1
1
  import { type ElicitationResponse, SecretBox } from '@noodle-borg/runtime';
2
2
  export type RequestStateMethod = 'tools/call' | 'resources/read' | 'prompts/get';
3
3
  export interface RequestStateBinding {
4
+ readonly executionRevision?: string;
4
5
  readonly deploymentId: string;
5
6
  readonly serverVersion: string;
6
7
  readonly method: RequestStateMethod;
@@ -140,7 +140,14 @@ function assertPayload(value, maxRounds) {
140
140
  }
141
141
  }
142
142
  function assertBinding(actual, expected) {
143
- for (const key of ['deploymentId', 'serverVersion', 'method', 'target', 'principal']) {
143
+ for (const key of [
144
+ 'deploymentId',
145
+ 'serverVersion',
146
+ 'method',
147
+ 'target',
148
+ 'principal',
149
+ 'executionRevision',
150
+ ]) {
144
151
  if (actual[key] !== expected[key]) {
145
152
  throw new RequestStateError('request_state_binding_mismatch');
146
153
  }
@@ -158,7 +165,9 @@ function isBinding(value) {
158
165
  value.method === 'prompts/get') &&
159
166
  typeof value.target === 'string' &&
160
167
  typeof value.principal === 'string' &&
161
- typeof value.argumentDigest === 'string');
168
+ typeof value.argumentDigest === 'string' &&
169
+ (value.executionRevision === undefined ||
170
+ (typeof value.executionRevision === 'string' && value.executionRevision.length <= 256)));
162
171
  }
163
172
  function isResponseMap(value) {
164
173
  return (isRecord(value) &&
@@ -19,6 +19,8 @@ export interface ServedArtifact {
19
19
  }
20
20
  export interface ProtocolRequestContext {
21
21
  readonly caller?: CallerIdentity;
22
+ /** Internal hosting attribution, never MCP payload metadata or caller-visible context. */
23
+ readonly publicAdmission?: NonNullable<ExecuteDeps['publicAdmission']>;
22
24
  /** Origin-wide readiness for the complete OAuth client-credentials lifecycle. */
23
25
  readonly oauthClientCredentialsReady?: boolean;
24
26
  /** Request-host-specific widget metadata projection; never persisted into the served artifact. */
@@ -2,7 +2,7 @@ import { randomUUID } from 'node:crypto';
2
2
  import { fromJsonSchema, inputRequired, } from '@modelcontextprotocol/server';
3
3
  import { digestMcpArguments, RequestStateError, } from '../request-state.js';
4
4
  const REQUEST_STATE_TTL_MS = 5 * 60_000;
5
- export function toolRequestStateBinding(artifact, context, toolName, toolArguments) {
5
+ export function toolRequestStateBinding(artifact, context, toolName, toolArguments, executionRevision) {
6
6
  return {
7
7
  deploymentId: context.deploymentId ?? `local:${artifact.server.name}`,
8
8
  serverVersion: artifact.server.version,
@@ -10,6 +10,7 @@ export function toolRequestStateBinding(artifact, context, toolName, toolArgumen
10
10
  target: toolName,
11
11
  principal: requestStatePrincipal(context),
12
12
  argumentDigest: digestMcpArguments(toolArguments),
13
+ ...(executionRevision === undefined ? {} : { executionRevision }),
13
14
  };
14
15
  }
15
16
  function requestStatePrincipal(context) {
@@ -169,7 +169,7 @@ function registerV2Tools(server, artifact, deps, context, era) {
169
169
  : { arguments: captured.arguments, responses: {} };
170
170
  let toolArguments = interaction.arguments;
171
171
  const requestState = era === 'modern' ? ctx.mcpReq.requestState() : undefined;
172
- const modernBinding = () => toolRequestStateBinding(artifact, context, toolName, interaction.arguments);
172
+ const modernBinding = () => toolRequestStateBinding(artifact, context, toolName, interaction.arguments, deps.executionBinding?.revision);
173
173
  const rejectRequestState = (error) => {
174
174
  const rejection = asRequestStateError(error);
175
175
  observe('mcp_error', { errorKind: rejection.reason });
@@ -229,6 +229,7 @@ function registerV2Tools(server, artifact, deps, context, era) {
229
229
  }
230
230
  const toolDeps = {
231
231
  ...deps,
232
+ ...(requestState === undefined ? {} : { invocationId: requestState.nonce }),
232
233
  signal: ctx.mcpReq.signal,
233
234
  ...(context.beforeToolDispatch === undefined
234
235
  ? {}
@@ -1,5 +1,6 @@
1
+ import { resolveVariableEnvironment } from './business-variables.js';
1
2
  import { canonicalizeContext } from './context-bounds.js';
2
- import { runFulfilment, validateAgainstSchema } from './execute.js';
3
+ import { resolveEnv, runFulfilment, validateAgainstSchema } from './execute.js';
3
4
  import { splitResultMeta } from './result-meta.js';
4
5
  /**
5
6
  * Resolve the server's declared ambient context against the invocation's temporal/caller snapshot.
@@ -19,6 +20,9 @@ export async function executeAmbientContext(artifact, deps) {
19
20
  const ambient = artifact.server.context?.ambient;
20
21
  if (ambient === undefined)
21
22
  return { ok: true, output: undefined };
23
+ const variables = resolveVariableEnvironment(artifact.server.variables ?? [], await resolveEnv(deps));
24
+ if (!variables.ok)
25
+ return variables;
22
26
  const providerContext = deps.context === undefined
23
27
  ? undefined
24
28
  : {
@@ -27,6 +31,7 @@ export async function executeAmbientContext(artifact, deps) {
27
31
  };
28
32
  const providerDeps = {
29
33
  ...deps,
34
+ env: variables.env,
30
35
  ...(providerContext !== undefined ? { context: providerContext } : {}),
31
36
  };
32
37
  const result = await runFulfilment(ambient.fulfilment, {}, 'server.context.ambient', providerDeps);
@@ -56,6 +56,8 @@ export interface CredentialRequest {
56
56
  readonly bindingId?: string;
57
57
  readonly connectionId?: string;
58
58
  readonly connectionConfigRevision?: string;
59
+ /** Original operator account generation from trusted hosting state, never caller input. */
60
+ readonly expectedConnectionGeneration?: string;
59
61
  readonly profile?: string;
60
62
  readonly presentation?: CredentialProfile;
61
63
  readonly requiredScopes?: readonly string[];
@@ -0,0 +1,15 @@
1
+ import { type ArtifactVariableDeclaration, type RuntimeArtifact } from '@noodle-borg/compiler';
2
+ import type { ExecutionError } from './result.js';
3
+ export type VariableEnvironmentResult = {
4
+ readonly ok: true;
5
+ readonly env: Record<string, unknown>;
6
+ readonly missing: readonly string[];
7
+ } | {
8
+ readonly ok: false;
9
+ readonly error: ExecutionError;
10
+ };
11
+ /** Decode the authoritative string store once at an invocation boundary. No implicit coercion. */
12
+ export declare function resolveVariableEnvironment(declarations: readonly ArtifactVariableDeclaration[], rawConfig: Readonly<Record<string, unknown>>, toolName?: string): VariableEnvironmentResult;
13
+ /** A resumed intent cannot silently continue under changed effective business configuration. */
14
+ export declare function validateVariableContinuation(artifact: RuntimeArtifact, previousEnv: Readonly<Record<string, unknown>>, current: VariableEnvironmentResult): ExecutionError | undefined;
15
+ //# sourceMappingURL=business-variables.d.ts.map
@@ -0,0 +1,75 @@
1
+ import { canonicalJson, MAX_VARIABLE_VALUE_BYTES, validateJsonSchema, } from '@noodle-borg/compiler';
2
+ /** Decode the authoritative string store once at an invocation boundary. No implicit coercion. */
3
+ export function resolveVariableEnvironment(declarations, rawConfig, toolName) {
4
+ const env = { ...rawConfig };
5
+ const missing = [];
6
+ for (const declaration of declarations) {
7
+ const raw = Object.hasOwn(rawConfig, declaration.name)
8
+ ? rawConfig[declaration.name]
9
+ : undefined;
10
+ if (raw === undefined && !Object.hasOwn(declaration, 'default')) {
11
+ missing.push(declaration.name);
12
+ delete env[declaration.name];
13
+ continue;
14
+ }
15
+ let value;
16
+ try {
17
+ if (raw === undefined)
18
+ value = structuredClone(declaration.default);
19
+ else if (typeof raw === 'string') {
20
+ if (Buffer.byteLength(raw) > MAX_VARIABLE_VALUE_BYTES)
21
+ return invalidVariable();
22
+ value = JSON.parse(raw);
23
+ }
24
+ else
25
+ value = structuredClone(raw);
26
+ if (Buffer.byteLength(canonicalJson(value)) > MAX_VARIABLE_VALUE_BYTES)
27
+ return invalidVariable();
28
+ }
29
+ catch {
30
+ return invalidVariable();
31
+ }
32
+ if (validateJsonSchema(declaration.valueSchema, value).length > 0)
33
+ return invalidVariable();
34
+ Object.defineProperty(env, declaration.name, {
35
+ value,
36
+ enumerable: true,
37
+ configurable: true,
38
+ writable: true,
39
+ });
40
+ }
41
+ if (toolName !== undefined &&
42
+ declarations.some((declaration) => missing.includes(declaration.name) && declaration.requiredFor.includes(toolName))) {
43
+ return {
44
+ ok: false,
45
+ error: {
46
+ code: 'configuration_required',
47
+ message: 'This capability needs business settings before it can run.',
48
+ },
49
+ };
50
+ }
51
+ return { ok: true, env, missing };
52
+ }
53
+ /** A resumed intent cannot silently continue under changed effective business configuration. */
54
+ export function validateVariableContinuation(artifact, previousEnv, current) {
55
+ if (!current.ok)
56
+ return current.error;
57
+ const names = (artifact.server.variables ?? []).map((declaration) => declaration.name);
58
+ const project = (env) => Object.fromEntries(names.map((name) => [name, env[name]]));
59
+ if (canonicalJson(project(previousEnv)) !== canonicalJson(project(current.env)))
60
+ return {
61
+ code: 'configuration_changed',
62
+ message: 'Business settings changed. Prepare and confirm the action again.',
63
+ };
64
+ return undefined;
65
+ }
66
+ function invalidVariable() {
67
+ return {
68
+ ok: false,
69
+ error: {
70
+ code: 'configuration_invalid',
71
+ message: 'Business settings are unavailable or invalid.',
72
+ },
73
+ };
74
+ }
75
+ //# sourceMappingURL=business-variables.js.map
@@ -1,4 +1,4 @@
1
- export function confirmationRequired(artifact, toolName, input, nextStepIndex, completedSteps, elicited, env, action) {
1
+ export function confirmationRequired(artifact, toolName, input, nextStepIndex, completedSteps, elicited, env, action, executionRevision) {
2
2
  const reviewedAction = action === undefined
3
3
  ? undefined
4
4
  : {
@@ -43,6 +43,7 @@ export function confirmationRequired(artifact, toolName, input, nextStepIndex, c
43
43
  },
44
44
  continuation: {
45
45
  kind: 'prepared_confirmation',
46
+ ...(executionRevision === undefined ? {} : { executionRevision }),
46
47
  version: 1,
47
48
  artifact: artifactIdentity(artifact),
48
49
  toolName,
@@ -1,3 +1,4 @@
1
+ import { resolveVariableEnvironment, validateVariableContinuation } from './business-variables.js';
1
2
  import { analyzeEligibleActions, countTrailingEligibleOperations, isActionOperation, validateConfirmationFlow, } from './confirmation-analysis.js';
2
3
  import { artifactIdentity, confirmationRequired, sameArtifact, } from './confirmation-continuation.js';
3
4
  import { validatePreparedCustomerRoutes } from './confirmation-customer-routes.js';
@@ -21,6 +22,10 @@ export async function prepareToolForConfirmation(artifact, toolName, input, deps
21
22
  const tool = artifact.tools.find((candidate) => candidate.name === toolName);
22
23
  if (!tool)
23
24
  return failPreparation('unknown_tool', `no tool named "${toolName}"`);
25
+ const variables = resolveVariableEnvironment(artifact.server.variables ?? [], await resolveEnv(deps), toolName);
26
+ if (!variables.ok)
27
+ return { status: 'failed', error: variables.error };
28
+ deps = { ...deps, env: variables.env };
24
29
  const invocationDeps = withConnectorSnapshot(deps);
25
30
  const preflightError = preflightFulfilmentSignatures(tool.fulfilment, invocationDeps.connectors);
26
31
  if (preflightError)
@@ -41,7 +46,7 @@ export async function prepareToolForConfirmation(artifact, toolName, input, deps
41
46
  return confirmationRequired(artifact, toolName, input, 0, {}, {}, env, {
42
47
  prepared: prepared.action,
43
48
  review: prepared.review,
44
- });
49
+ }, invocationDeps.executionBinding?.revision);
45
50
  }
46
51
  return runPreparation(artifact, toolName, tool.fulfilment, input, 0, {}, {}, env, invocationDeps);
47
52
  }
@@ -57,6 +62,12 @@ export async function resumeToolPreparation(artifact, continuation, response, de
57
62
  }
58
63
  if (response.action !== 'accept')
59
64
  return { status: 'stopped', action: response.action };
65
+ if ((artifact.server.variables?.length ?? 0) > 0) {
66
+ const variables = resolveVariableEnvironment(artifact.server.variables ?? [], await resolveEnv(deps), continuation.toolName);
67
+ const configurationError = validateVariableContinuation(artifact, continuation.env, variables);
68
+ if (configurationError)
69
+ return { status: 'failed', error: configurationError };
70
+ }
60
71
  const validated = validateElicitationContent(response.content ?? {}, continuation.pending.requestedSchema, `steps.${continuation.pending.id}`);
61
72
  if (!validated.ok)
62
73
  return { status: 'failed', error: validated.error };
@@ -94,6 +105,15 @@ export async function executePreparedTool(artifact, continuation, deps) {
94
105
  const tool = artifact.tools.find((candidate) => candidate.name === continuation.toolName);
95
106
  if (!tool)
96
107
  return failInteractive('invalid_continuation', 'continued tool is unavailable');
108
+ if (continuation.executionRevision !== deps.executionBinding?.revision) {
109
+ return failInteractive('configuration_changed', 'Application configuration or connection changed; request a new confirmation.');
110
+ }
111
+ if ((artifact.server.variables?.length ?? 0) > 0) {
112
+ const variables = resolveVariableEnvironment(artifact.server.variables ?? [], await resolveEnv(deps), continuation.toolName);
113
+ const configurationError = validateVariableContinuation(artifact, continuation.env, variables);
114
+ if (configurationError)
115
+ return { status: 'failed', error: configurationError };
116
+ }
97
117
  const inputError = validateAgainstSchema(continuation.input, tool.inputSchema, 'input', 'arg_invalid', 'tool input');
98
118
  if (inputError)
99
119
  return { status: 'failed', error: inputError };
@@ -194,7 +214,7 @@ async function runPreparation(artifact, toolName, flow, input, startIndex, steps
194
214
  return confirmationRequired(artifact, toolName, input, index, steps, elicited, env, {
195
215
  prepared: prepared.action,
196
216
  review: prepared.review,
197
- });
217
+ }, deps.executionBinding?.revision);
198
218
  }
199
219
  if (step.kind === 'map') {
200
220
  steps[step.id] = evalExprMap(step.value, scope, `steps.${step.id}`);
@@ -229,7 +249,7 @@ async function runPreparation(artifact, toolName, flow, input, startIndex, steps
229
249
  if (actionAnalysis.flowHasActions && actionAnalysis.eligibleIndexes.length !== 1) {
230
250
  return failPreparation('invalid_confirmation_flow', 'confirmable conditional flows must resolve exactly one eligible action');
231
251
  }
232
- return confirmationRequired(artifact, toolName, input, flow.steps.length, steps, elicited, env);
252
+ return confirmationRequired(artifact, toolName, input, flow.steps.length, steps, elicited, env, undefined, deps.executionBinding?.revision);
233
253
  }
234
254
  catch (error) {
235
255
  if (error instanceof ExpressionEvalError) {
@@ -1,6 +1,7 @@
1
1
  import type { CredentialProfile, OperationSignature, ResolvedOperationRef } from '@noodle-borg/compiler';
2
2
  import type { DownstreamCredential } from '../broker/types.js';
3
3
  import type { CustomerConnectorRoute } from '../customer-routing.js';
4
+ import type { OperationEvidence } from '../operation-evidence.js';
4
5
  /** Verified caller claims that may be threaded into first-party connector operations. */
5
6
  export interface CallerIdentity {
6
7
  readonly subject: string;
@@ -78,10 +79,21 @@ export interface ConnectorCallHost {
78
79
  /** A single connector-operation invocation, fully resolved and credentialed by the runtime. */
79
80
  export interface ConnectorCall {
80
81
  readonly operation: string;
82
+ /** Runtime-generated, deployment/step-bound identity. Not a business input or recovery authority. */
83
+ readonly execution?: Readonly<{
84
+ readonly id: string;
85
+ }>;
86
+ /** Connector/application-classified evidence; never infer completion from a transport status alone. */
87
+ readonly reportOutcome?: (evidence: OperationEvidence) => void;
88
+ /** Trusted request attribution for native public writes; never an argument or expression value. */
89
+ readonly publicAdmission?: {
90
+ readonly network: string;
91
+ readonly visitor?: string;
92
+ };
81
93
  /** Evaluated, validated arguments. */
82
94
  readonly args: Readonly<Record<string, unknown>>;
83
95
  /** Managed variables resolved for the deployment scope. */
84
- readonly env?: Readonly<Record<string, string>>;
96
+ readonly env?: Readonly<Record<string, unknown>>;
85
97
  /** Request-scoped cancellation; connectors should propagate it to outbound work. */
86
98
  readonly signal?: AbortSignal;
87
99
  /**
@@ -91,6 +103,8 @@ export interface ConnectorCall {
91
103
  readonly credential: DownstreamCredential;
92
104
  /** Binding-selected presentation; when present it overrides connector-level legacy auth config. */
93
105
  readonly credentialPresentation?: CredentialProfile;
106
+ /** Lazy deployment credential for an explicitly declared independent transport; called only after egress validation. */
107
+ readonly acquireTransportCredential?: () => Promise<DownstreamCredential>;
94
108
  /** Verified caller claims, when the access mode intentionally exposes them to execution. */
95
109
  readonly caller?: CallerIdentity;
96
110
  /** Full request-local route supplied only to the connector that needs it. */
@@ -114,6 +128,8 @@ export interface Connector {
114
128
  readonly version: string;
115
129
  /** The operation's signature, used for signature-drift verification and argument/output checks. */
116
130
  signature(operation: string): OperationSignature | undefined;
131
+ /** Maximum action execution duration owned by this connector; excludes confirmation/model time. */
132
+ executionBoundMs?(operation: string): number | undefined;
117
133
  /** Invoke the operation. May reject; the runtime normalizes the failure (no secret leakage). */
118
134
  invoke(call: ConnectorCall): Promise<unknown>;
119
135
  }
@@ -21,6 +21,7 @@ export function withConnectorSnapshot(deps) {
21
21
  return undefined;
22
22
  }
23
23
  const signatures = new Map();
24
+ const executionBounds = new Map();
24
25
  const snapshot = {
25
26
  id: connector.id,
26
27
  version: connector.version,
@@ -32,6 +33,11 @@ export function withConnectorSnapshot(deps) {
32
33
  }
33
34
  return signatures.get(operation);
34
35
  },
36
+ executionBoundMs(operation) {
37
+ if (!executionBounds.has(operation))
38
+ executionBounds.set(operation, connector.executionBoundMs?.(operation));
39
+ return executionBounds.get(operation);
40
+ },
35
41
  invoke(call) {
36
42
  return connector.invoke(call);
37
43
  },
@@ -4,6 +4,7 @@ import type { CallerIdentity, ConnectorRegistry, ExecutionTraceSink } from './co
4
4
  import type { FrozenCustomerRoutes } from './customer-routing.js';
5
5
  import { type EvalScope } from './eval/evaluate.js';
6
6
  import type { InvocationContext } from './invocation-context.js';
7
+ import type { OperationEvidencePort } from './operation-evidence.js';
7
8
  import type { PolicyGate } from './policy/types.js';
8
9
  import type { ExecutionResult } from './result.js';
9
10
  import { type ToolDispatchHook } from './tool-dispatch.js';
@@ -19,17 +20,31 @@ export interface ExecuteDeps {
19
20
  readonly connectors: ConnectorRegistry;
20
21
  readonly broker: CredentialBroker;
21
22
  readonly policy?: PolicyGate;
22
- readonly env?: Record<string, string> | (() => Promise<Record<string, string>>);
23
+ readonly env?: Record<string, unknown> | (() => Promise<Record<string, unknown>>);
23
24
  readonly caller?: CallerIdentity;
25
+ /** Transport-owned admission attribution; absent network means public native writes must refuse. */
26
+ readonly publicAdmission?: {
27
+ readonly network: string;
28
+ readonly visitor?: string;
29
+ };
24
30
  /** Verified customer IdP issuer, kept outside caller/expression scope for credential isolation. */
25
31
  readonly customerIssuer?: string;
26
32
  /** Request-local validated customer connector routes, kept separate from caller/expression scope. */
27
33
  readonly customerRoutes?: FrozenCustomerRoutes;
28
34
  readonly tenantId?: string;
29
35
  readonly deploymentId?: string;
36
+ /** Trusted adapter invocation/confirmation identity; never read from tool input or expression scope. */
37
+ readonly invocationId?: string;
38
+ readonly operationEvidence?: OperationEvidencePort;
39
+ /** Hosting snapshot: operator configuration and original connected-account generations. */
40
+ readonly executionBinding?: {
41
+ readonly revision: string;
42
+ readonly connections: Readonly<Record<string, string>>;
43
+ };
30
44
  /** Immutable facts resolved once for this invocation and exposed only through `${context...}`. */
31
45
  readonly context?: InvocationContext;
32
46
  readonly trace?: ExecutionTraceSink;
47
+ /** Host-owned cancellation; TimeoutError denotes a hard execution deadline. Never caller payload. */
33
48
  readonly signal?: AbortSignal;
34
49
  /** Deployment-bound knowledge search (ADR 0202); absent means no knowledge tools serve. */
35
50
  readonly knowledgeSearch?: KnowledgeSearchPort;
@@ -100,7 +115,7 @@ export declare function executePrompt(artifact: RuntimeArtifact, promptName: str
100
115
  /** @internal Shared with the ambient-context executor; not exported from the package barrel. */
101
116
  export declare function runFulfilment(fulfilment: ArtifactFulfilment, input: unknown, label: string, deps: ExecuteDeps, beforeDispatch?: ToolDispatchHook): Promise<ExecutionResult>;
102
117
  /** @internal Shared with the suspension-aware flow executor. */
103
- export declare function scopeFor(input: unknown, steps: Record<string, unknown>, env: Record<string, string>, deps: ExecuteDeps): EvalScope;
118
+ export declare function scopeFor(input: unknown, steps: Record<string, unknown>, env: Record<string, unknown>, deps: ExecuteDeps): EvalScope;
104
119
  /** @internal Shared with the suspension-aware flow executor. */
105
- export declare function resolveEnv(deps: ExecuteDeps): Promise<Record<string, string>>;
120
+ export declare function resolveEnv(deps: ExecuteDeps): Promise<Record<string, unknown>>;
106
121
  //# sourceMappingURL=execute.d.ts.map
@@ -1,3 +1,4 @@
1
+ import { resolveVariableEnvironment } from './business-variables.js';
1
2
  import { preflightFulfilmentSignatures } from './connector-snapshot.js';
2
3
  import { preflightFulfilmentCustomerRoutes } from './customer-routing.js';
3
4
  import { ExpressionEvalError, evaluateCondition } from './eval/evaluate.js';
@@ -25,7 +26,10 @@ export async function executeTool(artifact, toolName, input, deps) {
25
26
  const tool = artifact.tools.find((t) => t.name === toolName);
26
27
  if (!tool)
27
28
  return fail('unknown_tool', `no tool named "${toolName}"`);
28
- return runFulfilment(tool.fulfilment, input, toolName, deps, deps.beforeDispatch);
29
+ const variables = resolveVariableEnvironment(artifact.server.variables ?? [], await resolveEnv(deps), toolName);
30
+ if (!variables.ok)
31
+ return variables;
32
+ return runFulfilment(tool.fulfilment, input, toolName, { ...deps, env: variables.env }, deps.beforeDispatch);
29
33
  }
30
34
  /**
31
35
  * Execute a resource read against a resolved artifact. `input` is the resource's variable scope — the
@@ -40,7 +44,10 @@ export async function executeResource(artifact, resourceName, input, deps) {
40
44
  const resource = artifact.resources?.find((r) => r.name === resourceName);
41
45
  if (!resource)
42
46
  return fail('unknown_resource', `no resource named "${resourceName}"`);
43
- return runFulfilment(resource.fulfilment, input, resourceName, deps);
47
+ const variables = resolveVariableEnvironment(artifact.server.variables ?? [], await resolveEnv(deps));
48
+ if (!variables.ok)
49
+ return variables;
50
+ return runFulfilment(resource.fulfilment, input, resourceName, { ...deps, env: variables.env });
44
51
  }
45
52
  /**
46
53
  * Execute a prompt against a resolved artifact. `args` is the supplied prompt-arguments map (the
@@ -54,7 +61,10 @@ export async function executePrompt(artifact, promptName, args, deps) {
54
61
  const prompt = artifact.prompts?.find((p) => p.name === promptName);
55
62
  if (!prompt)
56
63
  return fail('unknown_prompt', `no prompt named "${promptName}"`);
57
- return runFulfilment(prompt.fulfilment, args, promptName, deps);
64
+ const variables = resolveVariableEnvironment(artifact.server.variables ?? [], await resolveEnv(deps));
65
+ if (!variables.ok)
66
+ return variables;
67
+ return runFulfilment(prompt.fulfilment, args, promptName, { ...deps, env: variables.env });
58
68
  }
59
69
  /**
60
70
  * Run a normalized fulfilment (single operation or non-suspending flow) against an `input` scope. Shared
@@ -3,6 +3,7 @@ export { MapServiceBroker } from './broker/map.js';
3
3
  export { type MasterKeyProvider, type SealedSecret, type SealedSecretV1, type SealedSecretV2, SecretBox, SecretDecryptError, type StaticMasterKey, staticMasterKeyProvider, type WrappingMasterKey, } from './broker/secret-box.js';
4
4
  export { StaticServiceBroker } from './broker/static.js';
5
5
  export { type CredentialBindingDescriptor, type CredentialBroker, type CredentialProbeRouteResolver, type CredentialRequest, CredentialUnavailableError, type CredentialUnavailableErrorOptions, type CredentialUnavailableReason, credentialBindingDescriptorFromRequest, credentialUnavailableErrorSnapshot, type DelegatedCredentialProbe, type DownstreamCredential, } from './broker/types.js';
6
+ export { resolveVariableEnvironment, type VariableEnvironmentResult, validateVariableContinuation, } from './business-variables.js';
6
7
  export { executePreparedTool, prepareToolForConfirmation, resumeToolPreparation, } from './confirmation.js';
7
8
  export { sanitizeConnectorFailureDetails } from './connector/failure-details.js';
8
9
  export { InMemoryConnector, InMemoryConnectorRegistry, type InMemoryOperation, type OperationHandler, } from './connector/in-memory.js';
@@ -14,6 +15,7 @@ export { type ExecuteDeps, type ExecuteToolDeps, executePrompt, executeResource,
14
15
  export { executeToolInteractive, resumeTool } from './interactive.js';
15
16
  export type { InvocationContext, InvocationContextPreferenceSource, InvocationLocationContext, InvocationTemporalContext, } from './invocation-context.js';
16
17
  export { type ManagedOriginResolutionResult, resolveManagedOrigins, } from './managed-origins.js';
18
+ export type { OperationEvidence, OperationEvidenceIntent, OperationEvidencePort, } from './operation-evidence.js';
17
19
  export { AllowAllPolicy } from './policy/allow-all.js';
18
20
  export type { PolicyContext, PolicyDecision, PolicyGate } from './policy/types.js';
19
21
  export { type ConfirmationActionReview, type ConfirmationPreparationResult, type ConfirmationReview, type ConnectorFailureAttribution, type ElicitationRequest, type ElicitationResponse, type ExecutionError, type ExecutionErrorCode, type ExecutionResult, type InteractiveExecutionResult, isConfirmationRequired, isInputRequired, isInputRequiredForConfirmation, type PreparedOperationAction, type PreparedToolContinuation, type ToolContinuation, type ToolPreparationContinuation, } from './result.js';
@@ -3,6 +3,7 @@ export { MapServiceBroker } from './broker/map.js';
3
3
  export { SecretBox, SecretDecryptError, staticMasterKeyProvider, } from './broker/secret-box.js';
4
4
  export { StaticServiceBroker } from './broker/static.js';
5
5
  export { CredentialUnavailableError, credentialBindingDescriptorFromRequest, credentialUnavailableErrorSnapshot, } from './broker/types.js';
6
+ export { resolveVariableEnvironment, validateVariableContinuation, } from './business-variables.js';
6
7
  export { executePreparedTool, prepareToolForConfirmation, resumeToolPreparation, } from './confirmation.js';
7
8
  export { sanitizeConnectorFailureDetails } from './connector/failure-details.js';
8
9
  export { InMemoryConnector, InMemoryConnectorRegistry, } from './connector/in-memory.js';