@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
@@ -91,6 +91,7 @@ export const SDK_EXPORTS = [
91
91
  'managedSecret',
92
92
  'meilisearch',
93
93
  'noodleManaged',
94
+ 'noodlePlatform',
94
95
  'openAICompatible',
95
96
  'prompt',
96
97
  'publicWebsite',
@@ -152,6 +153,8 @@ export const COMPILE_ERROR_CODES = [
152
153
  'invalid_knowledge',
153
154
  'knowledge_unhashed',
154
155
  'invalid_managed_collection',
156
+ 'invalid_variable_declaration',
157
+ 'invalid_managed_collection_source',
155
158
  'unknown_connector_alias',
156
159
  'connector_not_in_catalog',
157
160
  'unknown_operation',
@@ -59,9 +59,9 @@ export function renderAuthoringWorkflowReference() {
59
59
  '',
60
60
  '## Connectors',
61
61
  '',
62
- 'Declare connectors as data, not imperative code:',
62
+ 'Declare typed connectors:',
63
63
  '',
64
- '- **HTTP**: `connector("id").version("1.0.0").http({ baseUrl, allowedOrigins, auth, operations })` with per-operation `request`/`response` mapping using `${args...}` / `${response...}` expressions.',
64
+ '- **HTTP**: `connector("id").version("1.0.0").http({ baseUrl, allowedOrigins, auth, operations })`; map request/response with `${args...}` / `${response...}`. Use `${execution.id}` for provider idempotency, never model input. Optional `evidence: { outcome: "${response.execution_outcome}", reference: "${response.id}" }` classifies completed/rejected/accepted/unknown; reference is a bounded opaque ID, never a bearer URL or payload. No automatic action retry.',
65
65
  '- **MCP**: `connector("id").version("1.0.0").mcp({ endpoint, allowedOrigins, auth?, operations })` where each operation freezes the separate upstream `tool` wire name plus input/output schema. Import with `noodle import mcp`; do not hand-copy a live surface or call `tools/list` at runtime.',
66
66
  '- **Compute**: `connector("id").version("1.0.0").compute(name, { input, output, calls?, run })` — a self-contained, sandboxed function (no imports/closure capture) that may call allowlisted operations via `callOperation`.',
67
67
  '',
@@ -75,6 +75,7 @@ export function renderAuthoringWorkflowReference() {
75
75
  'credential, and closes it; it does not act as an agent for upstream sampling, roots, or elicitation.',
76
76
  '',
77
77
  'HTTP connector auth variants: `bearer` (`{ kind: "bearer", secret: secret("API_TOKEN") }`), `apiKey` (`{ kind: "apiKey", header: "X-API-Key", secret: secret("API_KEY") }`), `clientCredentials`, `delegatedOAuth`, `delegatedSessionCookie`, and `delegatedTokenExchange` (per-user calls to your own API — see "Delegated downstream auth" below). Use managed `secret(...)` / `variable(...)` refs for all values that differ by org/app/env.',
78
+ 'An application-owned adapter may require its own service credential in addition to the operator account credential. Declare `http.transportAuth: { kind: "apiKey", header: "X-Adapter-Key", secret: secret("ADAPTER_SERVICE_KEY") }` alongside bound account credential profiles; the credential broker supplies the two independently. Never put either credential in tool arguments or ordinary headers, and never reuse an inbound MCP bearer. This capability does not imply a provider requires two credentials.',
78
79
  '',
79
80
  'When one connector needs independently selectable accounts, declare catalog `credentialProfiles` plus each operation’s accepted `credentials.profiles`, then bind each `server.use` alias with `bind(connector, { profile, connection: connection("logical_id", managedSecret(secret("NAME"), { scopes, audience })) })`. The alias is the stable account boundary; never put provider account ids, labels, or credential values in it. `gmailConnector()` is the curated Gmail catalog helper; reuse it under independent aliases and accept canonical `accounts` arrays in tools (one account for writes, or an explicitly ordered supported combination for reads). See the bundled `gmail-multi-account` flagship. Bound managed secrets are supported by hosted execution. For deployed-server access to Google APIs, use `googleWorkloadIdentity({ provider: variable("GOOGLE_WIF_PROVIDER"), access: { kind: "direct" } })`, or add `serviceAccountImpersonation` with a managed service-account email. This is keyless Google Workload Identity Federation: exact Google scopes/audience come from the catalog operation, while `noodle auth google prepare|status|doctor|revoke` owns operator lifecycle. See the bundled `google-bigquery` flagship. `externalExchange()` is runnable only when the deployment operator injects an exact HTTPS provider endpoint/origin/audience and durable shared subject-pin store through service ports; Noodle sends a short-lived platform-signed deployment workload assertion and accepts only a bounded bearer response. Provider implementations must consume assertion replay ids through durable shared atomic storage across instances and restarts. There is intentionally no hosted enrollment or provider CRUD surface yet. The provider wire contract is public, but its conformance kit is workspace/source-only and is not an installable npm package. Bound `clientCredentials(...)` remains fail-closed until its provider slice lands.',
80
81
  '',
@@ -220,6 +221,12 @@ export function renderAuthoringWorkflowReference() {
220
221
  '',
221
222
  'Author managed config as `secret("NAME")` / `variable("NAME")` and operate it with `noodle secrets set` / `noodle variables set` (scoped org/app/env). Never inline secret values in `server.ts`, tests, or generated files.',
222
223
  '',
224
+ 'For business-editable configuration, declare `const notice = variable("SERVICE_NOTICE", { schema: z.string().max(500), default: "Welcome", portal: { label: "Service notice", group: "Guest experience" }, requiredFor: ["show_menu"] })` and register it in `server(..., { variables: [notice], ... }, tools)`. Use the same ref in ordinary fulfilment/connector arguments. The default is reusable safe intent; each business supplies its own values without editing source. Only explicit `portal` metadata exposes a setting. Name-only references and declared variables without `portal` remain technical configuration; secrets remain credential slots. See the bundled `acme-bistro` source.',
225
+ '',
226
+ 'Business schemas must be bounded: booleans, finite bounded numbers, bounded text, string enums, bounded arrays, and closed objects. Put defaults in the declaration, not inside Zod schema defaults; custom transforms/refinements and arbitrary schema code cannot run in the shared runtime. `requiredFor` names existing tools whose invocation needs the value; unresolved settings must leave only dependent capabilities unavailable. Publisher compilation does not require a future buyer’s values. Application code enforces business rules server-side; exposing a control or placing the rule in a prompt is insufficient.',
227
+ '',
228
+ 'For an installed application, use the same `noodle variables list|resolve|set|delete` family with `--installation <id> --org <org> --runtime cloud|other`; do not combine it with app/env/scope flags or secrets. Inspection shows schema metadata, provenance, readiness and revision without saved values. Set inputs are JSON (including quotes for strings), read the current projection and save atomically; `--expected-revision <digest>` pins an explicit prior inspection. Delete resets to the current declared default or unset state. Business-administrator permission is required for mutations, conflicts never retry writes, and mutation output excludes values.',
229
+ '',
223
230
  '## Embedded assistant',
224
231
  '',
225
232
  'To place the same server tools inside a SaaS web app, declare `assistant: embeddedAssistant(...)` alongside the one server-level brand kit. Read `embedded-assistant.md` before integrating: it owns the HTTPS-origin rule, managed model configuration, required deploy-before-client sequence, customer-backend exchange, browser mount, and verification checklist.',
@@ -257,8 +264,13 @@ export function renderAuthoringWorkflowReference() {
257
264
  '## Managed collections',
258
265
  '',
259
266
  'Use `managedCollection(name, { title, description, schemaVersion, record })` when an application needs reusable typed intent for business records that Noodle may later hold. Pass it through `server(..., { collections: [...] }, definitions)`. `record` is one bounded, closed Zod object; names use lowercase letters, numbers, and underscores. Keep payment-card, credentials, passport/government identity, health, and biometric fields out of this surface.',
267
+ 'Native record controls are independent: `management: { assignment: true }`, `{ notes: true }`, both, or neither. Status is an ordinary application field such as `progress: z.enum(["received", "reviewing", "handled"]).default("received")`; no framework transition graph exists. Declare `publicFields` explicitly (default empty), `editableFields` for authorized staff (default all schema properties), optional field labels/help, `summaryFields`, `filterFields` and `sortFields`. References must name actual fields and filters/sorts select scalars. Public callers cannot set staff-only fields; a required private field needs a valid creation default. Staff updates merge only admitted fields and revalidate the complete record. See the notes-only `acme-bistro` collection.',
268
+ 'Operator record queries use `noodle solutions records list --filters \'[{"field":"progress","value":"received"}]\' --sort-field progress`. Only declared scalar equality/sort fields apply. Payload queries scan at most 10,000 candidates; narrow `--created-at-from`/`--created-at-to` if the API returns `query_limit_exceeded`. Ordinary listing/export has no such scan cap. Cursor reuse requires unchanged query/schema and anchor revision. An administrator can explicitly migrate an eligible historical request with `records migrate-schema ... --expected-revision N`; never implement read-time rewrites.',
269
+ '',
270
+ 'Omitting `source` makes Noodle authoritative for the collection. To project a read-only collection from an outside system, bind an HTTP connector in `server(..., { use: [...] })` and add `source: { connector: connector.ref(), scan: "scan_operation" }`. The compiler requires the exact normalized scan contract and the same record schema. Noodle ingests a one-way replica; create, update, and delete in the outside system remain ordinary application tools with their own confirmation and policy.',
260
271
  '',
261
- 'This declaration compiles schema metadata only. It does not create a submit tool, grant access, select retention or residency, provision storage, or make records available to MCP or the embedded assistant. Operators bind lifecycle and authority separately. Until the service intake path is shipped, keep live business operations on their existing connector tools.',
272
+ 'For an explicitly authored native operation, bind `use: { records: noodlePlatform.records.v1 }` and call `connectors.records.submitRecord({ collection: "guest_requests", payload: input })` from an ordinary confirmed tool. Submission accepts only public fields and returns a receipt. `createRecord`, `getRecord`, `listRecords`, `updateRecord`, and `deleteRecord` require a verified platform caller with a live business grant; updates/deletes require the current revision. `updateRecord({ collection, id, expectedRevision, patch, unset: ["optional_field"] })` removes named optional editable fields; omitted keys stay unchanged, `null` is data, and overlap with `patch`, required fields or undeclared fields is rejected. Runtime identity supplies write idempotency and admission; never accept those controls as model arguments. An uninstalled collection is unavailable, including during local tool execution.',
273
+ 'A collection declaration does not create a submit tool, grant access, select retention or residency, provision storage, or expose records to MCP or an embedded assistant. Operators activate the definition and configure lifecycle, access, and any external binding. A connector does not become a collection unless the app explicitly supplies the source contract, and an external collection never becomes a writable mirror.',
262
274
  '',
263
275
  '## Boundaries',
264
276
  '',
@@ -53,7 +53,7 @@ const SDK_NOTES = {
53
53
  resource: '`resource(name, { ... })` — an MCP resource.',
54
54
  prompt: '`prompt(name, { ... })` — an MCP prompt.',
55
55
  secret: '`secret("NAME")` — reference a managed secret (operated via `noodle secrets`).',
56
- variable: '`variable("NAME")` — reference a managed variable (operated via `noodle variables`).',
56
+ variable: '`variable("NAME")` — reference managed configuration; add `{ schema, default?, portal?, requiredFor? }` and register in `server.variables` for typed business settings. Operate through `noodle variables` or authorized Portal settings.',
57
57
  customerAuth: '`customerAuth.oidc(...)`, `.federatedOidc(...)`, `.firebase(...)`, or `.microsoft(...)` — end-user/customer identity for `--access customers` deployments. A direct/federated issuer must publish direct RFC 8414 discovery, Dynamic Client Registration, authorization-code + refresh grants, PKCE `code_challenge_methods_supported: ["S256"]`, public-client `token_endpoint_auth_methods_supported: ["none"]`, and a public JWKS; verify it with `noodle auth doctor src/server.ts`. Firebase Web App fields are browser-visible configuration: use `variable(...)`, not `secret(...)`, and restrict the key in Firebase.',
58
58
  handoffSession: '`handoffSession(...)` — typed cross-host handoff session envelopes.',
59
59
  z: '`z` — Zod, for input/output schemas (compiles to JSON Schema 2020-12).',
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noodle-borg/agent-kit",
3
- "version": "0.99.1",
3
+ "version": "0.100.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "engines": {
@@ -3,6 +3,13 @@ import { type AssistantAppearanceOverride } from './assistant-appearance.js';
3
3
  import type { AssistantAppearanceSettingsStore } from './assistant-appearance-store.js';
4
4
  import { ASSISTANT_BROWSER_UI_FIELDS } from './assistant-browser-fields.js';
5
5
  import type { TenantRef } from './tenant-ref.js';
6
+ type BusinessNoticeDisplay = {
7
+ readonly displayName: string;
8
+ readonly privacyUrl: string;
9
+ readonly supportUrl: string;
10
+ };
11
+ /** A current action must not silently use a different recipient from the session's visible notice. */
12
+ export declare function assistantConfigurationHasBusinessNotice(configuration: AssistantAppearanceOverride | undefined, notice: BusinessNoticeDisplay): boolean;
6
13
  /**
7
14
  * What the browser is allowed to see.
8
15
  *
@@ -18,7 +25,7 @@ import type { TenantRef } from './tenant-ref.js';
18
25
  */
19
26
  export declare function assistantBrowserConfiguration(server: ArtifactServer, boundSurface?: 'public' | 'authenticated'): AssistantAppearanceOverride | undefined;
20
27
  /** Resolve environment operator state above the immutable deployment projection. */
21
- export declare function effectiveAssistantBrowserConfiguration(server: ArtifactServer, tenant: TenantRef, store: AssistantAppearanceSettingsStore | undefined, boundSurface?: 'public' | 'authenticated'): Promise<{
28
+ export declare function effectiveAssistantBrowserConfiguration(server: ArtifactServer, tenant: TenantRef, store: AssistantAppearanceSettingsStore | undefined, boundSurface?: 'public' | 'authenticated', notice?: BusinessNoticeDisplay): Promise<{
22
29
  effective: AssistantAppearanceOverride | undefined;
23
30
  fallback: "halo";
24
31
  provenance: import("./assistant-appearance.js").AssistantAppearanceProvenance;
@@ -28,4 +35,5 @@ export declare function effectiveAssistantBrowserConfiguration(server: ArtifactS
28
35
  } | undefined;
29
36
  record: import("./assistant-appearance-store.js").AssistantAppearanceSettingsRecord | undefined;
30
37
  }>;
38
+ export {};
31
39
  //# sourceMappingURL=assistant-configuration.d.ts.map
@@ -1,5 +1,14 @@
1
1
  import { resolveAssistantAppearanceConfiguration, } from './assistant-appearance.js';
2
2
  import { ASSISTANT_BROWSER_UI_FIELDS } from './assistant-browser-fields.js';
3
+ const noticeText = (notice) => `Information is shared with ${notice.displayName}. Support: ${notice.supportUrl}`;
4
+ /** A current action must not silently use a different recipient from the session's visible notice. */
5
+ export function assistantConfigurationHasBusinessNotice(configuration, notice) {
6
+ const text = noticeText(notice);
7
+ const welcome = configuration?.assistant?.labels?.welcomeMessage;
8
+ return (configuration?.branding?.name === notice.displayName &&
9
+ configuration?.assistant?.privacyUrl === notice.privacyUrl &&
10
+ (welcome === text || welcome?.startsWith(`${text}\n\n`) === true));
11
+ }
3
12
  /**
4
13
  * What the browser is allowed to see.
5
14
  *
@@ -45,13 +54,35 @@ function surfaceOfMode(assistant, mode) {
45
54
  return assistant.surfaces.find((surface) => surface.mode === mode || (mode === 'public' && surface.mode === 'mixed'));
46
55
  }
47
56
  /** Resolve environment operator state above the immutable deployment projection. */
48
- export async function effectiveAssistantBrowserConfiguration(server, tenant, store, boundSurface) {
57
+ export async function effectiveAssistantBrowserConfiguration(server, tenant, store, boundSurface, notice) {
49
58
  const developer = assistantBrowserConfiguration(server, boundSurface);
50
59
  const record = await store?.get(tenant);
60
+ const resolved = resolveAssistantAppearanceConfiguration(developer, record?.override);
61
+ // Receiving-business authority is separate from optional appearance; use fields old widgets render.
62
+ const requiredNotice = notice && noticeText(notice);
63
+ const originalWelcome = resolved.effective?.assistant?.labels?.welcomeMessage;
64
+ const welcome = requiredNotice &&
65
+ requiredNotice +
66
+ (originalWelcome
67
+ ? `\n\n${originalWelcome}`.slice(0, Math.max(0, 1000 - requiredNotice.length))
68
+ : '');
51
69
  return {
52
70
  developer,
53
71
  record,
54
- ...resolveAssistantAppearanceConfiguration(developer, record?.override),
72
+ ...resolved,
73
+ ...(notice
74
+ ? {
75
+ effective: {
76
+ ...resolved.effective,
77
+ branding: { ...resolved.effective?.branding, name: notice.displayName },
78
+ assistant: {
79
+ ...resolved.effective?.assistant,
80
+ privacyUrl: notice.privacyUrl,
81
+ labels: { ...resolved.effective?.assistant?.labels, welcomeMessage: welcome ?? '' },
82
+ },
83
+ },
84
+ }
85
+ : {}),
55
86
  };
56
87
  }
57
88
  //# sourceMappingURL=assistant-configuration.js.map
@@ -0,0 +1,3 @@
1
+ /** Enforce the same accepted-flow bound used by durable unknown-outcome cleanup. */
2
+ export declare function boundedAssistantExecution<T>(work: (signal: AbortSignal) => Promise<T>, unknown: () => T, timeoutMs?: number): Promise<T>;
3
+ //# sourceMappingURL=assistant-execution-bound.d.ts.map
@@ -0,0 +1,29 @@
1
+ import { ASSISTANT_INTERACTION_EXECUTION_LIMIT_MS } from './assistant-interaction-state.js';
2
+ /** Enforce the same accepted-flow bound used by durable unknown-outcome cleanup. */
3
+ export async function boundedAssistantExecution(work, unknown, timeoutMs = ASSISTANT_INTERACTION_EXECUTION_LIMIT_MS) {
4
+ if (!Number.isInteger(timeoutMs) ||
5
+ timeoutMs < 1 ||
6
+ timeoutMs > ASSISTANT_INTERACTION_EXECUTION_LIMIT_MS)
7
+ throw new Error('Invalid assistant execution bound');
8
+ const controller = new AbortController();
9
+ let timer;
10
+ try {
11
+ return await Promise.race([
12
+ Promise.resolve().then(() => work(controller.signal)),
13
+ new Promise((resolve) => {
14
+ timer = setTimeout(() => {
15
+ controller.abort(new DOMException('Assistant execution deadline elapsed', 'TimeoutError'));
16
+ resolve(unknown());
17
+ }, timeoutMs);
18
+ }),
19
+ ]);
20
+ }
21
+ catch {
22
+ return unknown();
23
+ }
24
+ finally {
25
+ clearTimeout(timer);
26
+ controller.abort();
27
+ }
28
+ }
29
+ //# sourceMappingURL=assistant-execution-bound.js.map
@@ -1,8 +1,8 @@
1
1
  import type { InvocationContext } from '@noodle-borg/runtime';
2
2
  export declare const DEFAULT_MAX_PENDING_INTERACTIONS_PER_SESSION = 8;
3
3
  export declare const ASSISTANT_INTERACTION_OUTCOME_RETENTION_MS: number;
4
- /** Recovery grace for an in-flight action before its outcome becomes unknowable and payload is scrubbed. */
5
- export declare const ASSISTANT_INTERACTION_EXECUTING_GRACE_MS: number;
4
+ /** Enforced maximum for one accepted flow; individual connector actions keep their shorter bounds. */
5
+ export declare const ASSISTANT_INTERACTION_EXECUTION_LIMIT_MS = 120000;
6
6
  export type AssistantInteractionKind = 'confirmation' | 'input';
7
7
  export type AssistantInteractionStatus = 'pending' | 'executing' | 'succeeded' | 'failed' | 'declined' | 'cancelled';
8
8
  export type AssistantInteractionPublicScalar = string | number | boolean | null;
@@ -27,7 +27,7 @@ interface AssistantInteractionCommon {
27
27
  readonly deploymentId: string;
28
28
  /** Immutable proposal-time snapshot reused when the interaction resumes. */
29
29
  readonly context?: InvocationContext;
30
- /** Set when a terminal interaction's exact private payload has been removed. */
30
+ /** Set when an interaction's exact private payload has left durable custody. */
31
31
  readonly payloadScrubbedAt?: string;
32
32
  readonly createdAt: string;
33
33
  readonly expiresAt: string;
@@ -175,6 +175,8 @@ export declare function isPrunableInteraction(interaction: AssistantInteractionR
175
175
  export declare function shouldExpireStrandedExecutingInteraction(interaction: AssistantInteractionRecord, now: Date): interaction is AssistantInteractionRecord & AssistantExecutingInteractionState;
176
176
  /** Preserve a non-retryable unknown outcome without retaining its exact private payload. */
177
177
  export declare function expireStrandedExecutingInteraction(interaction: AssistantInteractionRecord & AssistantExecutingInteractionState, scrubbedAt: Date): AssistantInteractionRecord & AssistantFailedInteractionState;
178
+ /** Exact inputs leave durable custody when handed to the single executor, before connector I/O. */
179
+ export declare function scrubExecutingInteraction(interaction: AssistantInteractionRecord & AssistantExecutingInteractionState): AssistantInteractionRecord & AssistantExecutingInteractionState;
178
180
  export declare function cloneInteraction<T extends AssistantInteractionRecord>(interaction: T): T;
179
181
  export declare function normalizePublicOutcome(input: AssistantInteractionPublicOutcome): AssistantInteractionPublicOutcome;
180
182
  export {};
@@ -1,8 +1,8 @@
1
1
  import { isCredentialShapedAssistantText } from './assistant-sensitive-values.js';
2
2
  export const DEFAULT_MAX_PENDING_INTERACTIONS_PER_SESSION = 8;
3
3
  export const ASSISTANT_INTERACTION_OUTCOME_RETENTION_MS = 24 * 60 * 60 * 1000;
4
- /** Recovery grace for an in-flight action before its outcome becomes unknowable and payload is scrubbed. */
5
- export const ASSISTANT_INTERACTION_EXECUTING_GRACE_MS = 60 * 60 * 1000;
4
+ /** Enforced maximum for one accepted flow; individual connector actions keep their shorter bounds. */
5
+ export const ASSISTANT_INTERACTION_EXECUTION_LIMIT_MS = 120_000;
6
6
  export const ASSISTANT_INTERACTION_UNKNOWN_OUTCOME = {
7
7
  code: 'interaction_outcome_unknown',
8
8
  summary: 'The action may have completed, but its outcome could not be verified.',
@@ -125,8 +125,7 @@ export function isPrunableInteraction(interaction, now) {
125
125
  }
126
126
  export function shouldExpireStrandedExecutingInteraction(interaction, now) {
127
127
  return (interaction.status === 'executing' &&
128
- interaction.payloadScrubbedAt === undefined &&
129
- Date.parse(interaction.claimedAt) + ASSISTANT_INTERACTION_EXECUTING_GRACE_MS <= now.getTime());
128
+ Date.parse(interaction.claimedAt) + ASSISTANT_INTERACTION_EXECUTION_LIMIT_MS <= now.getTime());
130
129
  }
131
130
  /** Preserve a non-retryable unknown outcome without retaining its exact private payload. */
132
131
  export function expireStrandedExecutingInteraction(interaction, scrubbedAt) {
@@ -138,21 +137,33 @@ export function expireStrandedExecutingInteraction(interaction, scrubbedAt) {
138
137
  publicOutcome: ASSISTANT_INTERACTION_UNKNOWN_OUTCOME,
139
138
  });
140
139
  }
141
- /** Retain only replay-safe public state once no execution path needs the exact payload. */
140
+ /** Exact inputs leave durable custody when handed to the single executor, before connector I/O. */
141
+ export function scrubExecutingInteraction(interaction) {
142
+ const scrubbed = scrubInteractionPayload(interaction, interaction.claimedAt);
143
+ if (scrubbed.status !== 'executing')
144
+ throw new Error('interaction status changed during scrub');
145
+ return scrubbed;
146
+ }
142
147
  function scrubTerminalInteraction(interaction) {
148
+ const scrubbed = scrubInteractionPayload(interaction, interaction.completedAt);
149
+ if (!isTerminalInteraction(scrubbed))
150
+ throw new Error('interaction status changed during scrub');
151
+ return scrubbed;
152
+ }
153
+ function scrubInteractionPayload(interaction, instant) {
143
154
  if (interaction.kind === 'confirmation') {
144
- const { context: _context, payloadScrubbedAt: _payloadScrubbedAt, continuation: _continuation, review: _review, ...withoutPrivatePayload } = interaction;
155
+ const { context: _context, continuation: _continuation, review: _review, ...withoutPrivate } = interaction;
145
156
  return cloneInteraction({
146
- ...withoutPrivatePayload,
157
+ ...withoutPrivate,
147
158
  arguments: null,
148
- payloadScrubbedAt: interaction.completedAt,
159
+ payloadScrubbedAt: instant,
149
160
  });
150
161
  }
151
- const { context: _context, payloadScrubbedAt: _payloadScrubbedAt, ...withoutContext } = interaction;
162
+ const { context: _context, ...withoutContext } = interaction;
152
163
  return cloneInteraction({
153
164
  ...withoutContext,
154
165
  continuation: null,
155
- payloadScrubbedAt: interaction.completedAt,
166
+ payloadScrubbedAt: instant,
156
167
  });
157
168
  }
158
169
  export function cloneInteraction(interaction) {
@@ -6,7 +6,7 @@ import type { AssistantCustomerRouting } from './assistant-customer-routing.js';
6
6
  import { type AssistantInteractionClaimResult, type AssistantInteractionCompletionResult, type AssistantInteractionCreateInput, type AssistantInteractionRecord, type AssistantInteractionScope, type AssistantInteractionTransitionInput, type AssistantInteractionTransitionResult, type AssistantPendingConfirmationInteractionRecord, type AssistantPendingInputInteractionRecord, type AssistantPendingInteractionRecord } from './assistant-interaction-state.js';
7
7
  import type { AssistantRecoverableView } from './assistant-view-availability.js';
8
8
  import type { TenantRef } from './tenant-ref.js';
9
- export { ASSISTANT_INTERACTION_EXECUTING_GRACE_MS, ASSISTANT_INTERACTION_OUTCOME_RETENTION_MS, type AssistantConfirmationInteractionRecord, AssistantInteractionCapacityError, type AssistantInteractionClaimResult, type AssistantInteractionCompletion, type AssistantInteractionCompletionResult, type AssistantInteractionCreateInput, type AssistantInteractionKind, type AssistantInteractionPublicArray, type AssistantInteractionPublicObject, type AssistantInteractionPublicOutcome, type AssistantInteractionPublicValue, type AssistantInteractionRecord, type AssistantInteractionScope, type AssistantInteractionStatus, type AssistantInteractionTransitionInput, type AssistantInteractionTransitionNext, type AssistantInteractionTransitionResult, type AssistantPendingConfirmationInteractionRecord, type AssistantPendingInputInteractionRecord, type AssistantPendingInteractionRecord, DEFAULT_MAX_PENDING_INTERACTIONS_PER_SESSION, } from './assistant-interaction-state.js';
9
+ export { ASSISTANT_INTERACTION_EXECUTION_LIMIT_MS, ASSISTANT_INTERACTION_OUTCOME_RETENTION_MS, type AssistantConfirmationInteractionRecord, AssistantInteractionCapacityError, type AssistantInteractionClaimResult, type AssistantInteractionCompletion, type AssistantInteractionCompletionResult, type AssistantInteractionCreateInput, type AssistantInteractionKind, type AssistantInteractionPublicArray, type AssistantInteractionPublicObject, type AssistantInteractionPublicOutcome, type AssistantInteractionPublicValue, type AssistantInteractionRecord, type AssistantInteractionScope, type AssistantInteractionStatus, type AssistantInteractionTransitionInput, type AssistantInteractionTransitionNext, type AssistantInteractionTransitionResult, type AssistantPendingConfirmationInteractionRecord, type AssistantPendingInputInteractionRecord, type AssistantPendingInteractionRecord, DEFAULT_MAX_PENDING_INTERACTIONS_PER_SESSION, } from './assistant-interaction-state.js';
10
10
  export declare const ASSISTANT_SESSION_IDLE_MS: number;
11
11
  export { ASSISTANT_BROWSER_UI_FIELDS } from './assistant-browser-fields.js';
12
12
  export interface AssistantClientRecord {
@@ -1,7 +1,7 @@
1
1
  import { createHash, randomBytes, randomUUID, timingSafeEqual } from 'node:crypto';
2
2
  import { ADMISSION_DEFAULTS } from '@noodle-borg/admission-limits/portable';
3
- import { AssistantInteractionCapacityError, cloneInteraction, completedInteraction, createPendingInteraction, DEFAULT_MAX_PENDING_INTERACTIONS_PER_SESSION, executingInteraction, expireStrandedExecutingInteraction, isPrunableInteraction, isTerminalInteraction, shouldExpireStrandedExecutingInteraction, transitionedInteractions, } from './assistant-interaction-state.js';
4
- export { ASSISTANT_INTERACTION_EXECUTING_GRACE_MS, ASSISTANT_INTERACTION_OUTCOME_RETENTION_MS, AssistantInteractionCapacityError, DEFAULT_MAX_PENDING_INTERACTIONS_PER_SESSION, } from './assistant-interaction-state.js';
3
+ import { AssistantInteractionCapacityError, cloneInteraction, completedInteraction, createPendingInteraction, DEFAULT_MAX_PENDING_INTERACTIONS_PER_SESSION, executingInteraction, expireStrandedExecutingInteraction, isPrunableInteraction, isTerminalInteraction, scrubExecutingInteraction, shouldExpireStrandedExecutingInteraction, transitionedInteractions, } from './assistant-interaction-state.js';
4
+ export { ASSISTANT_INTERACTION_EXECUTION_LIMIT_MS, ASSISTANT_INTERACTION_OUTCOME_RETENTION_MS, AssistantInteractionCapacityError, DEFAULT_MAX_PENDING_INTERACTIONS_PER_SESSION, } from './assistant-interaction-state.js';
5
5
  export const ASSISTANT_SESSION_IDLE_MS = 30 * 60 * 1000;
6
6
  export { ASSISTANT_BROWSER_UI_FIELDS } from './assistant-browser-fields.js';
7
7
  /** Latest prompt messages retained for model continuity; turn admission is tracked separately. */
@@ -346,7 +346,7 @@ export class InMemoryAssistantStore {
346
346
  return { disposition: 'replay', interaction: cloneInteraction(current) };
347
347
  }
348
348
  const claimed = executingInteraction(current, input.now);
349
- this.#interactions.set(claimed.id, claimed);
349
+ this.#interactions.set(claimed.id, scrubExecutingInteraction(claimed));
350
350
  return { disposition: 'claimed', interaction: cloneInteraction(claimed) };
351
351
  }
352
352
  #scopedInteraction(input) {
@@ -8,6 +8,7 @@ export * from './assistant-context.js';
8
8
  export * from './assistant-customer-issuer.js';
9
9
  export * from './assistant-customer-routing.js';
10
10
  export * from './assistant-delegated-projection.js';
11
+ export * from './assistant-execution-bound.js';
11
12
  export * from './assistant-guide.js';
12
13
  export * from './assistant-interaction-state.js';
13
14
  export * from './assistant-interactive.js';
@@ -8,6 +8,7 @@ export * from './assistant-context.js';
8
8
  export * from './assistant-customer-issuer.js';
9
9
  export * from './assistant-customer-routing.js';
10
10
  export * from './assistant-delegated-projection.js';
11
+ export * from './assistant-execution-bound.js';
11
12
  export * from './assistant-guide.js';
12
13
  export * from './assistant-interaction-state.js';
13
14
  export * from './assistant-interactive.js';
@@ -6,8 +6,9 @@ export async function resolveAssistantSessionTarget(load, session) {
6
6
  return undefined;
7
7
  const assistant = target.served.artifact.server.assistant;
8
8
  const bound = session.boundSurface ?? deriveLegacyBinding(assistant, session);
9
- if (bound === 'pre-surfaces')
10
- return target;
9
+ if (bound === 'pre-surfaces') {
10
+ return assistant?.allowedOrigins.includes(session.origin) ? target : undefined;
11
+ }
11
12
  // Fail closed: an origin no surface owns must never widen to the whole server.
12
13
  if (bound === 'unowned')
13
14
  return undefined;
@@ -15,7 +16,7 @@ export async function resolveAssistantSessionTarget(load, session) {
15
16
  // session's reach, never hand it the unprojected server.
16
17
  if (bound === 'authenticated') {
17
18
  const surface = authenticatedSurfaceOf(assistant);
18
- if (surface === undefined)
19
+ if (surface === undefined || !surface.origins.includes(session.origin))
19
20
  return undefined;
20
21
  // An omitted allowlist on an authenticated surface is the authored whole-server intent, so the
21
22
  // exact binding still holds (instructions, budgets, attribution) without narrowing capabilities.
@@ -24,7 +25,7 @@ export async function resolveAssistantSessionTarget(load, session) {
24
25
  return projected(target, surface.capabilities);
25
26
  }
26
27
  const surface = publicSurfaceOf(assistant);
27
- if (surface === undefined)
28
+ if (surface === undefined || !surface.origins.includes(session.origin))
28
29
  return undefined;
29
30
  return projected(target, surface.capabilities);
30
31
  }
@@ -7,10 +7,30 @@ export interface ConfigRef {
7
7
  toExpression(): string;
8
8
  toString(): string;
9
9
  }
10
+ export interface VariableOptions<Schema extends z.ZodType> {
11
+ readonly schema: Schema;
12
+ readonly default?: z.output<Schema>;
13
+ readonly portal?: {
14
+ readonly label: string;
15
+ readonly help?: string;
16
+ readonly group?: string;
17
+ };
18
+ readonly requiredFor?: readonly string[];
19
+ }
20
+ export interface DeclaredVariableRef extends ConfigRef {
21
+ readonly kind: 'variable';
22
+ readonly declaration: VariableDeclarationManifest;
23
+ }
10
24
  export declare function variable(name: string): ConfigRef;
25
+ export declare function variable<Schema extends z.ZodType>(name: string, options: VariableOptions<Schema>): DeclaredVariableRef;
26
+ export declare function manifestVariables(refs: readonly DeclaredVariableRef[] | undefined): {
27
+ variables?: VariableDeclarationManifest[];
28
+ };
11
29
  export declare function secret(name: string): ConfigRef;
12
30
  export declare function isConfigRef(value: unknown): value is ConfigRef;
13
31
  export declare function serializeVariableRef(ref: ConfigRef, path: string): string;
14
32
  export declare function serializeSecretRef(ref: ConfigRef, path: string): string;
33
+ import { type VariableDeclarationManifest } from '@noodle-borg/compiler';
34
+ import type { z } from 'zod';
15
35
  export {};
16
36
  //# sourceMappingURL=config.d.ts.map
@@ -1,7 +1,32 @@
1
1
  const CONFIG_REF = Symbol.for('noodle.authoring.configRef');
2
2
  const CONFIG_REF_NAME = /^[A-Za-z0-9_]+$/;
3
- export function variable(name) {
4
- return makeConfigRef('variable', name);
3
+ export function variable(name, options) {
4
+ const ref = makeConfigRef('variable', name);
5
+ if (options === undefined)
6
+ return ref;
7
+ const declaration = {
8
+ name,
9
+ schemaVersion: 1,
10
+ valueSchema: toJsonSchema(options.schema, 'output', true),
11
+ ...(Object.hasOwn(options, 'default') ? { default: options.default } : {}),
12
+ ...(options.portal === undefined ? {} : { portal: { ...options.portal } }),
13
+ requiredFor: [...new Set(options.requiredFor ?? [])].sort(),
14
+ };
15
+ const errors = validateVariableDeclaration(declaration);
16
+ if (errors.length > 0)
17
+ throw new Error(`variable("${name}") ${errors.map((error) => `${error.path}: ${error.message}`).join('; ')}`);
18
+ return { ...ref, kind: 'variable', declaration: structuredClone(declaration) };
19
+ }
20
+ export function manifestVariables(refs) {
21
+ if (refs === undefined || refs.length === 0)
22
+ return {};
23
+ return {
24
+ variables: refs.map((ref) => {
25
+ if (!isConfigRef(ref) || ref.kind !== 'variable' || ref.declaration === undefined)
26
+ throw new Error('server.variables requires typed variable declarations');
27
+ return structuredClone(ref.declaration);
28
+ }),
29
+ };
5
30
  }
6
31
  export function secret(name) {
7
32
  return makeConfigRef('secret', name);
@@ -40,4 +65,6 @@ function makeConfigRef(kind, name) {
40
65
  },
41
66
  };
42
67
  }
68
+ import { validateVariableDeclaration, } from '@noodle-borg/compiler';
69
+ import { toJsonSchema } from './json-schema.js';
43
70
  //# sourceMappingURL=config.js.map
@@ -77,7 +77,12 @@ type HttpOperationOptionsWithRefs = Omit<HttpConnectorDef['operations'][string],
77
77
  readonly input?: OperationIoOptions;
78
78
  readonly output?: OperationIoOptions;
79
79
  };
80
- export type HttpConnectorOptions = Omit<HttpConnectorDef['http'], 'baseUrl' | 'allowedOrigins' | 'auth'> & {
80
+ export type HttpConnectorOptions = Omit<HttpConnectorDef['http'], 'baseUrl' | 'allowedOrigins' | 'auth' | 'transportAuth'> & {
81
+ readonly transportAuth?: {
82
+ readonly kind: 'apiKey';
83
+ readonly header: string;
84
+ readonly secret: string | ConfigRef;
85
+ };
81
86
  readonly baseUrl: string | ConfigRef | CustomerEndpointRef;
82
87
  /** Exact literal or operator-managed origins that may receive connector requests. */
83
88
  readonly allowedOrigins?: readonly (string | ConfigRef)[];
@@ -241,6 +241,11 @@ function normalizeHttpOptions(id, options) {
241
241
  ...(options.auth !== undefined
242
242
  ? { auth: normalizeAuth(options.auth, `connectors.${id}.http.auth`) }
243
243
  : {}),
244
+ ...(options.transportAuth === undefined
245
+ ? {}
246
+ : {
247
+ transportAuth: normalizeAuth(options.transportAuth, `connectors.${id}.http.transportAuth`),
248
+ }),
244
249
  operations,
245
250
  };
246
251
  return normalized;
@@ -3,7 +3,7 @@ import { z } from 'zod';
3
3
  export type { PackagedAssetReference } from '@noodle-borg/compiler';
4
4
  export type { AgentCapabilityKind, AgentCapabilityRef, AgentExampleSource, AgentGuideSource, AgentWorkflowSource, AgentWorkflowStepSource, } from './agent-guide.js';
5
5
  export { type AssistantAccess, type AssistantCapability, type AssistantLabels, type AssistantLayoutMode, type AssistantModel, type AssistantPosition, type AssistantPresentationOptions, type AssistantPresentationTone, type AssistantSurfaceConfig, type AssistantSurfaceMode, type AssistantThemeMode, type AssistantUiOptions, type AuthenticatedWebsiteAccess, type AuthenticatedWebsiteInput, authenticatedWebsite, type CapabilityRef, type EmbeddedAssistantConfig, type EmbeddedAssistantOptions, embeddedAssistant, type NoodleManagedModel, noodleManaged, type OpenAICompatibleModel, type OpenAICompatibleModelInput, type OpenAICompatibleTransport, openAICompatible, type PublicWebsiteAccess, type PublicWebsiteInput, publicWebsite, } from './assistant.js';
6
- export { type ConfigRef, type ConfigRefKind, secret, variable, } from './config.js';
6
+ export { type ConfigRef, type ConfigRefKind, type DeclaredVariableRef, secret, type VariableOptions, variable, } from './config.js';
7
7
  export { type BoundConnectorRef, bind, type ConnectionBinding, type ConnectionRef, type ConnectionSource, clientCredentials, connection, externalExchange, type GoogleWorkloadIdentityAccess, googleWorkloadIdentity, managedSecret, } from './connections.js';
8
8
  export { type ComputeHost, type ComputeLimits, type ComputeOperationOptions, ConnectorBuilder, type ConnectorCatalogDoc, type ConnectorOpDefinition, type ConnectorOperationOptions, type ConnectorRef, connector, type HttpConnectorOptions, type McpAuthOptions, type McpConnectorOptions, } from './connectors.js';
9
9
  export type { AmbientContextOptions, AmbientProviderContext, ServerContextOptions, } from './context.js';
@@ -13,7 +13,7 @@ export type { DistributionImageSource, DistributionMetadataSource, DistributionM
13
13
  export { gmailConnector } from './gmail.js';
14
14
  export { type HandoffPurpose, type HandoffSession, type HandoffStateHandleLink, handoffSession, } from './handoff.js';
15
15
  export { algolia, file, firecrawl, type KnowledgeCrawlerDeclaration, type KnowledgeIndexDeclaration, type KnowledgeInput, knowledge, meilisearch, site, tavily, } from './knowledge.js';
16
- export { type ManagedCollectionDeclaration, type ManagedCollectionInput, managedCollection, } from './managed-collection.js';
16
+ export { type ManagedCollectionDeclaration, type ManagedCollectionInput, type ManagedCollectionSource, managedCollection, } from './managed-collection.js';
17
17
  export { noodlePlatform, noodlePlatformCatalog } from './platform.js';
18
18
  export { type Cond, type ConnectorClient, type Ref, type SymbolicScope, when, } from './recording.js';
19
19
  export { annotations, asset, type BrandThemeTokens, type ElicitationOptions, isServerDefinition, type PromptArgument, type PromptOptions, prompt, type ResourceContext, type ResourceFulfilResult, type ResourceOptions, resource, type ServerComponent, type ServerDefinition, type ServerOptions, server, type ToolAuthorizationOptions, type ToolContext, type ToolOptions, type ToolViewOptions, tool, type WidgetCsp, type WidgetPermissionGrant, type WidgetPermissions, widgetResult, } from './server.js';
@@ -15,5 +15,5 @@ export type JsonSchema = Record<string, unknown>;
15
15
  * `.default()` as optional. Zod only forces `additionalProperties:false` under `io:'output'`, so for
16
16
  * `io:'input'` we re-assert it on every emitted object node to keep input objects closed.
17
17
  */
18
- export declare function toJsonSchema(schema: JsonSchema | z.ZodType, io?: 'input' | 'output'): JsonSchema;
18
+ export declare function toJsonSchema(schema: JsonSchema | z.ZodType, io?: 'input' | 'output', rejectRuntimeChecks?: boolean): JsonSchema;
19
19
  //# sourceMappingURL=json-schema.d.ts.map
@@ -13,9 +13,22 @@ import { z } from 'zod';
13
13
  * `.default()` as optional. Zod only forces `additionalProperties:false` under `io:'output'`, so for
14
14
  * `io:'input'` we re-assert it on every emitted object node to keep input objects closed.
15
15
  */
16
- export function toJsonSchema(schema, io = 'output') {
16
+ export function toJsonSchema(schema, io = 'output', rejectRuntimeChecks = false) {
17
17
  if (schema instanceof z.ZodType) {
18
- const json = z.toJSONSchema(schema, { target: 'draft-2020-12', io });
18
+ const json = z.toJSONSchema(schema, {
19
+ target: 'draft-2020-12',
20
+ io,
21
+ ...(rejectRuntimeChecks
22
+ ? {
23
+ override: ({ zodSchema }) => {
24
+ const definition = zodSchema._zod.def;
25
+ if (definition.checks?.some((check) => ['custom', 'overwrite'].includes(check._zod.def.check))) {
26
+ throw new Error('business variable schemas cannot contain runtime refinements or transforms');
27
+ }
28
+ },
29
+ }
30
+ : {}),
31
+ });
19
32
  if (io === 'input')
20
33
  closeObjectSchemas(json);
21
34
  return json;
@@ -33,7 +33,7 @@ export function prepareAuthoringRuntimeDir(dir, options) {
33
33
  './react': './react.mjs',
34
34
  },
35
35
  }));
36
- writeFileSync(join(self, 'index.mjs'), "export { algolia, annotations, asset, authenticatedWebsite, bind, clientCredentials, connector, connection, customerAuth, customerEndpoint, embeddedAssistant, externalExchange, file, firecrawl, gmailConnector, googleWorkloadIdentity, handoffSession, knowledge, managedCollection, managedSecret, meilisearch, noodleManaged, openAICompatible, prompt, publicWebsite, resource, secret, server, site, tavily, tool, variable, when, z } from '@noodle-borg/authoring';\n");
36
+ writeFileSync(join(self, 'index.mjs'), "export { algolia, annotations, asset, authenticatedWebsite, bind, clientCredentials, connector, connection, customerAuth, customerEndpoint, embeddedAssistant, externalExchange, file, firecrawl, gmailConnector, googleWorkloadIdentity, handoffSession, knowledge, managedCollection, managedSecret, meilisearch, noodleManaged, noodlePlatform, openAICompatible, prompt, publicWebsite, resource, secret, server, site, tavily, tool, variable, when, z } from '@noodle-borg/authoring';\n");
37
37
  writeFileSync(join(self, 'platform.mjs'), "export { noodlePlatform, noodlePlatformCatalog } from '@noodle-borg/authoring';\n");
38
38
  writeFileSync(join(self, 'react.mjs'), "export * from '@noodle-borg/authoring/react';\n");
39
39
  }
@@ -1,26 +1,40 @@
1
+ import { type ManagedCollectionControls, projectManagedCollectionControls } from '@noodle-borg/compiler';
1
2
  import type { z } from 'zod';
3
+ import type { ConnectorRef } from './connectors.js';
2
4
  import { type JsonSchema } from './json-schema.js';
3
- export interface ManagedCollectionInput {
5
+ export interface ManagedCollectionSource {
6
+ /** An existing connector from the enclosing server's `use` map. */
7
+ readonly connector: ConnectorRef;
8
+ /** Read operation implementing the normalized bounded scan contract. */
9
+ readonly scan: string;
10
+ }
11
+ export interface ManagedCollectionInput extends ManagedCollectionControls {
4
12
  readonly title: string;
5
13
  readonly description: string;
6
14
  readonly schemaVersion: number;
7
15
  readonly record: z.ZodType;
16
+ /** Omission makes Noodle Seed the authoritative native store. */
17
+ readonly source?: ManagedCollectionSource;
8
18
  }
9
19
  export interface ManagedCollectionDeclaration extends ManagedCollectionInput {
10
20
  readonly kind: 'managedCollection';
11
21
  readonly name: string;
12
22
  }
13
- export interface ManifestManagedCollection {
23
+ export interface ManifestManagedCollection extends ReturnType<typeof projectManagedCollectionControls> {
14
24
  readonly name: string;
15
25
  readonly title: string;
16
26
  readonly description: string;
17
27
  readonly schemaVersion: number;
18
28
  readonly recordSchema: JsonSchema;
29
+ readonly source?: {
30
+ readonly connector: string;
31
+ readonly scan: string;
32
+ };
19
33
  }
20
34
  /** Declare one typed collection whose lifecycle is bound later by an authorized operator. */
21
35
  export declare function managedCollection(name: string, input: ManagedCollectionInput): ManagedCollectionDeclaration;
22
- export declare function manifestManagedCollection(declaration: ManagedCollectionDeclaration): ManifestManagedCollection;
23
- export declare function manifestCollections(declarations: readonly ManagedCollectionDeclaration[] | undefined): {
36
+ export declare function manifestManagedCollection(declaration: ManagedCollectionDeclaration, connectors: Readonly<Record<string, ConnectorRef>>): ManifestManagedCollection;
37
+ export declare function manifestCollections(declarations: readonly ManagedCollectionDeclaration[] | undefined, connectors: Readonly<Record<string, ConnectorRef>>): {
24
38
  readonly collections?: ManifestManagedCollection[];
25
39
  };
26
40
  //# sourceMappingURL=managed-collection.d.ts.map