@noodleseed/one 0.162.0 → 0.164.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 (326) hide show
  1. package/dist/banner.d.ts +6 -0
  2. package/dist/banner.d.ts.map +1 -0
  3. package/dist/banner.js +29 -0
  4. package/dist/banner.js.map +1 -0
  5. package/dist/commands/billing-catalog-ops.d.ts +4 -0
  6. package/dist/commands/billing-catalog-ops.d.ts.map +1 -0
  7. package/dist/commands/billing-catalog-ops.js +58 -0
  8. package/dist/commands/billing-catalog-ops.js.map +1 -0
  9. package/dist/commands/billing-ops.d.ts.map +1 -1
  10. package/dist/commands/billing-ops.js +3 -0
  11. package/dist/commands/billing-ops.js.map +1 -1
  12. package/dist/commands/catalog.d.ts.map +1 -1
  13. package/dist/commands/catalog.js +2 -0
  14. package/dist/commands/catalog.js.map +1 -1
  15. package/dist/commands/config-values.d.ts.map +1 -1
  16. package/dist/commands/config-values.js +16 -0
  17. package/dist/commands/config-values.js.map +1 -1
  18. package/dist/commands/installation-variables.d.ts +26 -0
  19. package/dist/commands/installation-variables.d.ts.map +1 -0
  20. package/dist/commands/installation-variables.js +171 -0
  21. package/dist/commands/installation-variables.js.map +1 -0
  22. package/dist/commands/project-setup.d.ts.map +1 -1
  23. package/dist/commands/project-setup.js +2 -0
  24. package/dist/commands/project-setup.js.map +1 -1
  25. package/dist/commands/solutions-activity.d.ts +5 -0
  26. package/dist/commands/solutions-activity.d.ts.map +1 -0
  27. package/dist/commands/solutions-activity.js +116 -0
  28. package/dist/commands/solutions-activity.js.map +1 -0
  29. package/dist/commands/solutions-connections.d.ts +7 -0
  30. package/dist/commands/solutions-connections.d.ts.map +1 -0
  31. package/dist/commands/solutions-connections.js +88 -0
  32. package/dist/commands/solutions-connections.js.map +1 -0
  33. package/dist/commands/solutions-installation-options.d.ts +5 -0
  34. package/dist/commands/solutions-installation-options.d.ts.map +1 -0
  35. package/dist/commands/solutions-installation-options.js +52 -0
  36. package/dist/commands/solutions-installation-options.js.map +1 -0
  37. package/dist/commands/solutions-onboarding.d.ts +5 -0
  38. package/dist/commands/solutions-onboarding.d.ts.map +1 -0
  39. package/dist/commands/solutions-onboarding.js +113 -0
  40. package/dist/commands/solutions-onboarding.js.map +1 -0
  41. package/dist/commands/solutions-ops.d.ts.map +1 -1
  42. package/dist/commands/solutions-ops.js +278 -17
  43. package/dist/commands/solutions-ops.js.map +1 -1
  44. package/dist/first-run.d.ts.map +1 -1
  45. package/dist/first-run.js +2 -0
  46. package/dist/first-run.js.map +1 -1
  47. package/dist/index.d.ts +1 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +1 -1
  50. package/dist/index.js.map +1 -1
  51. package/node_modules/@noodle-borg/admission-limits/dist/counter-store.d.ts +21 -2
  52. package/node_modules/@noodle-borg/admission-limits/dist/counter-store.js +10 -1
  53. package/node_modules/@noodle-borg/admission-limits/dist/in-memory-counter-store.d.ts +5 -1
  54. package/node_modules/@noodle-borg/admission-limits/dist/in-memory-counter-store.js +31 -2
  55. package/node_modules/@noodle-borg/admission-limits/dist/portable.d.ts +3 -0
  56. package/node_modules/@noodle-borg/admission-limits/dist/portable.js +3 -0
  57. package/node_modules/@noodle-borg/admission-limits/dist/public-admission-assertion.d.ts +28 -0
  58. package/node_modules/@noodle-borg/admission-limits/dist/public-admission-assertion.js +124 -0
  59. package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.d.ts +54 -0
  60. package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.js +74 -0
  61. package/node_modules/@noodle-borg/admission-limits/dist/request-attribution.d.ts +11 -0
  62. package/node_modules/@noodle-borg/admission-limits/dist/request-attribution.js +19 -0
  63. package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js +2 -0
  64. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +5 -5
  65. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +3 -0
  66. package/node_modules/@noodle-borg/agent-kit/dist/index.d.ts +1 -0
  67. package/node_modules/@noodle-borg/agent-kit/dist/index.js +1 -0
  68. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bootstrap-skill.js +10 -0
  69. package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +15 -3
  70. package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +1 -1
  71. package/node_modules/@noodle-borg/agent-kit/dist/welcome-wordmark.d.ts +3 -0
  72. package/node_modules/@noodle-borg/agent-kit/dist/welcome-wordmark.js +10 -0
  73. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  74. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.d.ts +9 -1
  75. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.js +33 -2
  76. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-execution-bound.d.ts +3 -0
  77. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-execution-bound.js +29 -0
  78. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-interaction-state.d.ts +5 -3
  79. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-interaction-state.js +21 -10
  80. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.d.ts +1 -1
  81. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.js +3 -3
  82. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.d.ts +1 -0
  83. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.js +1 -0
  84. package/node_modules/@noodle-borg/assistant-gateway/dist/session-target.js +5 -4
  85. package/node_modules/@noodle-borg/assistant-gateway/package.json +1 -1
  86. package/node_modules/@noodle-borg/authoring/dist/config.d.ts +20 -0
  87. package/node_modules/@noodle-borg/authoring/dist/config.js +29 -2
  88. package/node_modules/@noodle-borg/authoring/dist/connectors.d.ts +6 -1
  89. package/node_modules/@noodle-borg/authoring/dist/connectors.js +5 -0
  90. package/node_modules/@noodle-borg/authoring/dist/index.d.ts +2 -2
  91. package/node_modules/@noodle-borg/authoring/dist/json-schema.d.ts +1 -1
  92. package/node_modules/@noodle-borg/authoring/dist/json-schema.js +15 -2
  93. package/node_modules/@noodle-borg/authoring/dist/load-authored.js +1 -1
  94. package/node_modules/@noodle-borg/authoring/dist/managed-collection.d.ts +18 -4
  95. package/node_modules/@noodle-borg/authoring/dist/managed-collection.js +22 -3
  96. package/node_modules/@noodle-borg/authoring/dist/platform.d.ts +3 -0
  97. package/node_modules/@noodle-borg/authoring/dist/platform.js +4 -0
  98. package/node_modules/@noodle-borg/authoring/dist/server-presentation.js +43 -0
  99. package/node_modules/@noodle-borg/authoring/dist/server.d.ts +3 -1
  100. package/node_modules/@noodle-borg/authoring/dist/server.js +4 -44
  101. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-billing.js +18 -0
  102. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-config.js +31 -4
  103. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-solutions.js +778 -0
  104. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-resources.js +0 -241
  105. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-types.js +7 -0
  106. package/node_modules/@noodle-borg/cli-catalog/dist/index.js +20 -0
  107. package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.js +2 -1
  108. package/node_modules/@noodle-borg/compiler/dist/artifact/catalog-emission.js +3 -1
  109. package/node_modules/@noodle-borg/compiler/dist/artifact/config.js +3 -0
  110. package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +17 -1
  111. package/node_modules/@noodle-borg/compiler/dist/artifact/version.d.ts +6 -1
  112. package/node_modules/@noodle-borg/compiler/dist/artifact/version.js +6 -1
  113. package/node_modules/@noodle-borg/compiler/dist/business-variables.d.ts +27 -0
  114. package/node_modules/@noodle-borg/compiler/dist/business-variables.js +230 -0
  115. package/node_modules/@noodle-borg/compiler/dist/compile.js +7 -1
  116. package/node_modules/@noodle-borg/compiler/dist/errors.d.ts +1 -1
  117. package/node_modules/@noodle-borg/compiler/dist/index.d.ts +3 -0
  118. package/node_modules/@noodle-borg/compiler/dist/index.js +3 -0
  119. package/node_modules/@noodle-borg/compiler/dist/managed-collection-controls.d.ts +52 -0
  120. package/node_modules/@noodle-borg/compiler/dist/managed-collection-controls.js +92 -0
  121. package/node_modules/@noodle-borg/compiler/dist/managed-collections.d.ts +26 -1
  122. package/node_modules/@noodle-borg/compiler/dist/managed-collections.js +190 -1
  123. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +100 -36
  124. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +2 -0
  125. package/node_modules/@noodle-borg/compiler/dist/native-record-operations.d.ts +7 -0
  126. package/node_modules/@noodle-borg/compiler/dist/native-record-operations.js +59 -0
  127. package/node_modules/@noodle-borg/connector-defs/dist/compile-http.js +83 -8
  128. package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts +31 -1
  129. package/node_modules/@noodle-borg/connector-defs/dist/schema.js +16 -0
  130. package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +12 -3
  131. package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +41 -2
  132. package/node_modules/@noodle-borg/connector-http/dist/http-response.js +3 -2
  133. package/node_modules/@noodle-borg/connector-http/dist/mcp/config.js +1 -1
  134. package/node_modules/@noodle-borg/connector-http/dist/url-resolution.js +1 -1
  135. package/node_modules/@noodle-borg/control-plane/dist/contracts.d.ts +4 -1
  136. package/node_modules/@noodle-borg/control-plane/dist/deploy-gates.js +1 -0
  137. package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.d.ts +3 -0
  138. package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.js +11 -0
  139. package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.d.ts +45 -0
  140. package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.js +74 -0
  141. package/node_modules/@noodle-borg/control-plane/dist/portable.d.ts +1 -0
  142. package/node_modules/@noodle-borg/control-plane/dist/portable.js +1 -0
  143. package/node_modules/@noodle-borg/module/dist/contract.d.ts +22 -0
  144. package/node_modules/@noodle-borg/module/dist/platform-human-identity.d.ts +2 -0
  145. package/node_modules/@noodle-borg/protocol/dist/request-deps.js +1 -0
  146. package/node_modules/@noodle-borg/protocol/dist/request-state.d.ts +1 -0
  147. package/node_modules/@noodle-borg/protocol/dist/request-state.js +11 -2
  148. package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts +2 -0
  149. package/node_modules/@noodle-borg/protocol/dist/v2/input-required.js +2 -1
  150. package/node_modules/@noodle-borg/protocol/dist/v2/server.js +2 -1
  151. package/node_modules/@noodle-borg/runtime/dist/ambient-context.js +6 -1
  152. package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts +2 -0
  153. package/node_modules/@noodle-borg/runtime/dist/business-variables.d.ts +15 -0
  154. package/node_modules/@noodle-borg/runtime/dist/business-variables.js +75 -0
  155. package/node_modules/@noodle-borg/runtime/dist/confirmation-continuation.js +2 -1
  156. package/node_modules/@noodle-borg/runtime/dist/confirmation.js +23 -3
  157. package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts +17 -1
  158. package/node_modules/@noodle-borg/runtime/dist/connector-snapshot.js +6 -0
  159. package/node_modules/@noodle-borg/runtime/dist/execute.d.ts +18 -3
  160. package/node_modules/@noodle-borg/runtime/dist/execute.js +13 -3
  161. package/node_modules/@noodle-borg/runtime/dist/index.d.ts +2 -0
  162. package/node_modules/@noodle-borg/runtime/dist/index.js +1 -0
  163. package/node_modules/@noodle-borg/runtime/dist/interactive.js +11 -0
  164. package/node_modules/@noodle-borg/runtime/dist/managed-origins.d.ts +3 -1
  165. package/node_modules/@noodle-borg/runtime/dist/managed-origins.js +32 -7
  166. package/node_modules/@noodle-borg/runtime/dist/operation-credential.js +6 -0
  167. package/node_modules/@noodle-borg/runtime/dist/operation-evidence.d.ts +30 -0
  168. package/node_modules/@noodle-borg/runtime/dist/operation-evidence.js +68 -0
  169. package/node_modules/@noodle-borg/runtime/dist/operation-execution.d.ts +2 -2
  170. package/node_modules/@noodle-borg/runtime/dist/operation-execution.js +142 -71
  171. package/node_modules/@noodle-borg/runtime/dist/result.d.ts +6 -4
  172. package/node_modules/@noodle-borg/runtime/dist/tool-dispatch.d.ts +7 -0
  173. package/node_modules/@noodle-borg/runtime/dist/tool-dispatch.js +48 -4
  174. package/node_modules/@noodle-borg/service/dist/admission.js +2 -1
  175. package/node_modules/@noodle-borg/service/dist/application-activity.js +236 -0
  176. package/node_modules/@noodle-borg/service/dist/application-business-notice.js +28 -0
  177. package/node_modules/@noodle-borg/service/dist/application-runtime-target.js +141 -0
  178. package/node_modules/@noodle-borg/service/dist/application-settings-targets.js +72 -0
  179. package/node_modules/@noodle-borg/service/dist/application-settings.js +210 -0
  180. package/node_modules/@noodle-borg/service/dist/business-api-admission.js +121 -0
  181. package/node_modules/@noodle-borg/service/dist/business-information/activity-pagination.js +73 -0
  182. package/node_modules/@noodle-borg/service/dist/business-information/business-notice.d.ts +24 -0
  183. package/node_modules/@noodle-borg/service/dist/business-information/business-notice.js +18 -0
  184. package/node_modules/@noodle-borg/service/dist/business-information/collection-controls.js +51 -0
  185. package/node_modules/@noodle-borg/service/dist/business-information/contracts.d.ts +439 -0
  186. package/node_modules/@noodle-borg/service/dist/business-information/definition-resolver.js +94 -0
  187. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-installation-lifecycle.js +136 -0
  188. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-invitations.js +160 -0
  189. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-locks.js +23 -0
  190. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-store.js +287 -132
  191. package/node_modules/@noodle-borg/service/dist/business-information/installation-capacity.js +10 -0
  192. package/node_modules/@noodle-borg/service/dist/business-information/invitations.js +68 -0
  193. package/node_modules/@noodle-borg/service/dist/business-information/legacy-request-migration.js +60 -0
  194. package/node_modules/@noodle-borg/service/dist/business-information/managed-releases.js +245 -0
  195. package/node_modules/@noodle-borg/service/dist/business-information/managed-solution-blueprints.js +51 -0
  196. package/node_modules/@noodle-borg/service/dist/business-information/managed-solution-executable.js +76 -0
  197. package/node_modules/@noodle-borg/service/dist/business-information/model.js +124 -23
  198. package/node_modules/@noodle-borg/service/dist/business-information/native-query.js +162 -0
  199. package/node_modules/@noodle-borg/service/dist/business-information/native-storage-budget.js +60 -0
  200. package/node_modules/@noodle-borg/service/dist/business-information/pagination.js +28 -0
  201. package/node_modules/@noodle-borg/service/dist/business-information/portable.js +9 -0
  202. package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.d.ts +11 -0
  203. package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.js +42 -0
  204. package/node_modules/@noodle-borg/service/dist/business-information/profiles.js +137 -6
  205. package/node_modules/@noodle-borg/service/dist/business-information/reader-floor.js +26 -0
  206. package/node_modules/@noodle-borg/service/dist/business-information/source-credential-fence.js +79 -0
  207. package/node_modules/@noodle-borg/service/dist/business-information/source-custody-budget.js +30 -0
  208. package/node_modules/@noodle-borg/service/dist/business-information/source-custody-memory.js +122 -0
  209. package/node_modules/@noodle-borg/service/dist/business-information/source-executor.js +191 -0
  210. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-contracts.js +2 -0
  211. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-coordinator.js +136 -0
  212. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-failures.js +32 -0
  213. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-state.js +154 -0
  214. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-store.js +568 -0
  215. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-types.js +26 -0
  216. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-values.js +59 -0
  217. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-pagination.js +54 -0
  218. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-validation.js +163 -0
  219. package/node_modules/@noodle-borg/service/dist/business-information/source-refresh-retention.js +29 -0
  220. package/node_modules/@noodle-borg/service/dist/business-information-runtime.js +80 -0
  221. package/node_modules/@noodle-borg/service/dist/business-onboarding.js +73 -0
  222. package/node_modules/@noodle-borg/service/dist/connections/types.js +8 -0
  223. package/node_modules/@noodle-borg/service/dist/credential-binding-index.js +38 -33
  224. package/node_modules/@noodle-borg/service/dist/deployment-execution.js +275 -0
  225. package/node_modules/@noodle-borg/service/dist/external-credential-binding-broker.js +19 -1
  226. package/node_modules/@noodle-borg/service/dist/external-credential-exchange.d.ts +16 -1
  227. package/node_modules/@noodle-borg/service/dist/modules/host.js +4 -1
  228. package/node_modules/@noodle-borg/service/dist/native-record-connector.d.ts +20 -0
  229. package/node_modules/@noodle-borg/service/dist/native-record-connector.js +206 -0
  230. package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts +3 -0
  231. package/node_modules/@noodle-borg/service/dist/operation-evidence.js +89 -0
  232. package/node_modules/@noodle-borg/service/dist/recovery-quarantine.js +49 -0
  233. package/node_modules/@noodle-borg/service/dist/registry-compile.js +60 -11
  234. package/node_modules/@noodle-borg/service/dist/registry-deploy-transaction.js +18 -0
  235. package/node_modules/@noodle-borg/service/dist/registry-rollback.js +2 -1
  236. package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +1 -1
  237. package/node_modules/@noodle-borg/service/dist/registry-state.js +6 -3
  238. package/node_modules/@noodle-borg/service/dist/registry-targets.js +49 -0
  239. package/node_modules/@noodle-borg/service/dist/registry-types.d.ts +2 -0
  240. package/node_modules/@noodle-borg/service/dist/registry.d.ts +15 -3
  241. package/node_modules/@noodle-borg/service/dist/registry.js +177 -137
  242. package/node_modules/@noodle-borg/service/dist/routes/assistant-appearance.js +3 -2
  243. package/node_modules/@noodle-borg/service/dist/routes/assistant-clients.js +2 -1
  244. package/node_modules/@noodle-borg/service/dist/routes/assistant-doctor.js +2 -1
  245. package/node_modules/@noodle-borg/service/dist/routes/assistant-embeds.js +8 -3
  246. package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-replay.js +1 -1
  247. package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.js +48 -36
  248. package/node_modules/@noodle-borg/service/dist/routes/assistant-public-configuration.js +3 -2
  249. package/node_modules/@noodle-borg/service/dist/routes/assistant-public-session.js +10 -10
  250. package/node_modules/@noodle-borg/service/dist/routes/assistant-session-target.js +32 -3
  251. package/node_modules/@noodle-borg/service/dist/routes/assistant-suggestions.js +1 -1
  252. package/node_modules/@noodle-borg/service/dist/routes/assistant-transcript.js +1 -1
  253. package/node_modules/@noodle-borg/service/dist/routes/assistant.js +10 -10
  254. package/node_modules/@noodle-borg/service/dist/routes/business-information-activity.js +83 -0
  255. package/node_modules/@noodle-borg/service/dist/routes/business-information-admission.js +26 -0
  256. package/node_modules/@noodle-borg/service/dist/routes/business-information-channels.js +153 -0
  257. package/node_modules/@noodle-borg/service/dist/routes/business-information-connections.js +107 -0
  258. package/node_modules/@noodle-borg/service/dist/routes/business-information-dispatch.js +87 -4
  259. package/node_modules/@noodle-borg/service/dist/routes/business-information-external.js +79 -0
  260. package/node_modules/@noodle-borg/service/dist/routes/business-information-installation.js +24 -0
  261. package/node_modules/@noodle-borg/service/dist/routes/business-information-notice.js +69 -0
  262. package/node_modules/@noodle-borg/service/dist/routes/business-information-onboarding.js +58 -0
  263. package/node_modules/@noodle-borg/service/dist/routes/business-information-paths.js +76 -0
  264. package/node_modules/@noodle-borg/service/dist/routes/business-information-public.js +151 -0
  265. package/node_modules/@noodle-borg/service/dist/routes/business-information-reader-floor.js +15 -0
  266. package/node_modules/@noodle-borg/service/dist/routes/business-information-record-create.js +29 -0
  267. package/node_modules/@noodle-borg/service/dist/routes/business-information-record-reads.js +36 -0
  268. package/node_modules/@noodle-borg/service/dist/routes/business-information-request.js +64 -0
  269. package/node_modules/@noodle-borg/service/dist/routes/business-information-settings.js +64 -0
  270. package/node_modules/@noodle-borg/service/dist/routes/business-information-source.js +249 -0
  271. package/node_modules/@noodle-borg/service/dist/routes/business-information-staff.js +258 -0
  272. package/node_modules/@noodle-borg/service/dist/routes/business-information-wire.js +226 -26
  273. package/node_modules/@noodle-borg/service/dist/routes/business-information.js +238 -197
  274. package/node_modules/@noodle-borg/service/dist/routes/config-values-dispatch.js +1 -1
  275. package/node_modules/@noodle-borg/service/dist/routes/config-values.js +26 -4
  276. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +33 -234
  277. package/node_modules/@noodle-borg/service/dist/routes/deployment-activation-response.js +13 -4
  278. package/node_modules/@noodle-borg/service/dist/service-resource-cleanup.js +4 -0
  279. package/node_modules/@noodle-borg/service/dist/service.js +57 -11
  280. package/node_modules/@noodle-borg/service/dist/solution-installation-activation.js +149 -0
  281. package/node_modules/@noodle-borg/service/dist/source-configuration-authority.js +94 -0
  282. package/node_modules/@noodle-borg/service/dist/state-catalog.js +6 -5
  283. package/node_modules/@noodle-borg/service/dist/store/config-values.d.ts +42 -17
  284. package/node_modules/@noodle-borg/service/dist/store/config-values.js +123 -24
  285. package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts +1 -0
  286. package/node_modules/@noodle-borg/service/dist/store/in-memory.js +3 -0
  287. package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +1 -0
  288. package/node_modules/@noodle-borg/service/dist/store/json-file.js +3 -0
  289. package/node_modules/@noodle-borg/service/dist/store.d.ts +3 -1
  290. package/node_modules/@noodle-borg/service/package.json +2 -2
  291. package/node_modules/@noodle-borg/transport-http/dist/serve-request.js +9 -0
  292. package/node_modules/@noodle-borg/transport-http/package.json +1 -0
  293. package/node_modules/@noodle-borg/wire-contracts/dist/application-activity.d.ts +143 -0
  294. package/node_modules/@noodle-borg/wire-contracts/dist/application-activity.js +90 -0
  295. package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.d.ts +130 -0
  296. package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.js +77 -0
  297. package/node_modules/@noodle-borg/wire-contracts/dist/application-connections.d.ts +105 -0
  298. package/node_modules/@noodle-borg/wire-contracts/dist/application-connections.js +67 -0
  299. package/node_modules/@noodle-borg/wire-contracts/dist/application-onboarding.d.ts +27 -0
  300. package/node_modules/@noodle-borg/wire-contracts/dist/application-onboarding.js +28 -0
  301. package/node_modules/@noodle-borg/wire-contracts/dist/application-settings.d.ts +112 -0
  302. package/node_modules/@noodle-borg/wire-contracts/dist/application-settings.js +88 -0
  303. package/node_modules/@noodle-borg/wire-contracts/dist/assistant.d.ts +1 -1
  304. package/node_modules/@noodle-borg/wire-contracts/dist/billing-catalog.d.ts +62 -0
  305. package/node_modules/@noodle-borg/wire-contracts/dist/billing-catalog.js +57 -0
  306. package/node_modules/@noodle-borg/wire-contracts/dist/billing-enforcement.d.ts +12 -12
  307. package/node_modules/@noodle-borg/wire-contracts/dist/billing-metering.d.ts +4 -4
  308. package/node_modules/@noodle-borg/wire-contracts/dist/billing-org-transfer.d.ts +3 -3
  309. package/node_modules/@noodle-borg/wire-contracts/dist/business-information-query.d.ts +25 -0
  310. package/node_modules/@noodle-borg/wire-contracts/dist/business-information-query.js +37 -0
  311. package/node_modules/@noodle-borg/wire-contracts/dist/business-information.d.ts +1816 -158
  312. package/node_modules/@noodle-borg/wire-contracts/dist/business-information.js +416 -41
  313. package/node_modules/@noodle-borg/wire-contracts/dist/control-plane.d.ts +2 -2
  314. package/node_modules/@noodle-borg/wire-contracts/dist/distribution.d.ts +5 -5
  315. package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts +8 -0
  316. package/node_modules/@noodle-borg/wire-contracts/dist/index.js +8 -0
  317. package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.d.ts +3 -3
  318. package/node_modules/@noodle-borg/wire-contracts/dist/managed-assistant-sponsorship.d.ts +7 -7
  319. package/node_modules/@noodle-borg/wire-contracts/dist/platform-account-reset.d.ts +5 -0
  320. package/node_modules/@noodle-borg/wire-contracts/dist/platform-account-reset.js +1 -0
  321. package/node_modules/@noodle-borg/wire-contracts/dist/platform-auth.d.ts +66 -66
  322. package/node_modules/@noodle-borg/wire-contracts/dist/solution-onboarding.d.ts +143 -0
  323. package/node_modules/@noodle-borg/wire-contracts/dist/solution-onboarding.js +94 -0
  324. package/node_modules/@noodleseed/assistant/README.md +5 -0
  325. package/node_modules/@noodleseed/assistant/package.json +1 -1
  326. package/package.json +2 -2
@@ -9,6 +9,7 @@ import { emitCatalogArtifactSurfaces, isContextProvider, } from './artifact/cata
9
9
  import { MCP_APP_MIME_TYPE, } from './artifact/types.js';
10
10
  import { rewriteHostedAssets, rewriteLocalAssets, } from './assets.js';
11
11
  import { brandingWarnings, normalizeRuntimeBranding } from './branding.js';
12
+ import { compileVariableDeclarations } from './business-variables.js';
12
13
  import { validateInteractiveFlow } from './confirmation-flow.js';
13
14
  import { parseAmbientContext } from './context-compile.js';
14
15
  import { findExternalRef, parseFulfilment } from './fulfilment-structural.js';
@@ -144,7 +145,11 @@ export function compileManifest(raw, options = {}) {
144
145
  // 2. Structural passes (catalog-independent): duplicate names, `$use` resolution, external refs,
145
146
  // fulfilment parsing. `$use` is resolved first so external-ref detection also scans bundled defs.
146
147
  const errors = widgetHtmlSizeErrors(manifest, runtimeBranding);
147
- const managedCollections = compileManagedCollections(manifest.manifestVersion === '2' ? (manifest.server.collections ?? []) : [], manifest.tools.map((tool) => tool.name), errors);
148
+ const variables = compileVariableDeclarations(manifest.manifestVersion === '2' ? (manifest.server.variables ?? []) : [], manifest.tools.map((tool) => tool.name), errors);
149
+ const managedCollections = compileManagedCollections(manifest.manifestVersion === '2' ? (manifest.server.collections ?? []) : [], manifest.tools.map((tool) => tool.name), errors, {
150
+ ...(options.catalog === undefined ? {} : { catalog: options.catalog }),
151
+ declared: manifest.connectors ?? {},
152
+ });
148
153
  const requirements = parseCapabilityRequirements(manifest.requires, errors);
149
154
  const seen = new Set();
150
155
  const schemasMap = manifest.schemas ?? {};
@@ -437,6 +442,7 @@ export function compileManifest(raw, options = {}) {
437
442
  customerEndpoints,
438
443
  ...(knowledge.length > 0 ? { knowledge } : {}),
439
444
  ...(managedCollections.length > 0 ? { managedCollections } : {}),
445
+ ...(variables.length > 0 ? { variables } : {}),
440
446
  });
441
447
  const warnings = [
442
448
  ...brandingWarnings(manifest.server.branding),
@@ -1,7 +1,7 @@
1
1
  import type { AppPackageArtifactV1 } from '@noodle-borg/app-package';
2
2
  import type { RuntimeArtifact } from './artifact/types.js';
3
3
  import type { PackagedAsset } from './assets.js';
4
- export type CompileErrorCode = 'invalid_context_provider' | 'yaml_parse_error' | 'invalid_shape' | 'invalid_name' | 'duplicate_name' | 'reserved_name' | 'unsupported_manifest_version' | 'reserved_for_future_version' | 'invalid_operation_ref' | 'external_ref' | 'invalid_schema_ref' | 'unknown_schema_ref' | 'schema_ref_conflict' | 'invalid_expression' | 'expr_unknown_root' | 'expr_root_unavailable' | 'expr_operator_not_allowed' | 'expr_if_not_boolean' | 'unknown_step_ref' | 'forward_step_ref' | 'self_step_ref' | 'duplicate_step_id' | 'invalid_fulfilment' | 'invalid_elicitation_schema' | 'invalid_elicitation_flow' | 'invalid_confirmation_flow' | 'arg_type_mismatch' | 'ambient_context_action' | 'duplicate_resource' | 'duplicate_prompt' | 'duplicate_resource_uri' | 'unsupported_uri_template' | 'duplicate_widget' | 'unknown_widget_tool' | 'unknown_widget_action_tool' | 'duplicate_widget_tool' | 'invalid_widget_binding' | 'invalid_widget_state_handle' | 'widget_html_too_large' | 'widget_html_total_too_large' | 'invalid_asset' | 'invalid_capability_requirement' | 'state_secret_field' | 'invalid_knowledge' | 'knowledge_unhashed' | 'invalid_managed_collection' | 'unknown_connector_alias' | 'connector_not_in_catalog' | 'unknown_operation' | 'connector_binding_required' | 'unsupported_credential_profile' | 'credential_scope_mismatch' | 'credential_audience_mismatch' | 'customer_endpoint_auth_required' | 'customer_endpoint_mapping_required' | 'customer_endpoint_unknown_mapping' | 'customer_endpoint_bridge_unsupported' | 'assistant_capability_unknown' | 'assistant_public_user_reference' | 'assistant_public_effect_unconfirmed' | 'customer_endpoint_action_unsupported' | 'customer_endpoint_surface_unsupported' | 'customer_endpoint_credential_source_unsupported' | 'customer_endpoint_policy_conflict' | 'customer_endpoint_routing_inconsistent' | 'unused_connector_alias' | 'arg_mismatch' | 'agent_guide_invalid' | 'agent_guide_duplicate_workflow' | 'agent_guide_duplicate_example' | 'agent_guide_example_workflow_missing' | 'agent_guide_capability_missing' | 'agent_guide_capability_kind' | 'app_package_sensitive_content';
4
+ export type CompileErrorCode = 'invalid_context_provider' | 'yaml_parse_error' | 'invalid_shape' | 'invalid_name' | 'duplicate_name' | 'reserved_name' | 'unsupported_manifest_version' | 'reserved_for_future_version' | 'invalid_operation_ref' | 'external_ref' | 'invalid_schema_ref' | 'unknown_schema_ref' | 'schema_ref_conflict' | 'invalid_expression' | 'expr_unknown_root' | 'expr_root_unavailable' | 'expr_operator_not_allowed' | 'expr_if_not_boolean' | 'unknown_step_ref' | 'forward_step_ref' | 'self_step_ref' | 'duplicate_step_id' | 'invalid_fulfilment' | 'invalid_elicitation_schema' | 'invalid_elicitation_flow' | 'invalid_confirmation_flow' | 'arg_type_mismatch' | 'ambient_context_action' | 'duplicate_resource' | 'duplicate_prompt' | 'duplicate_resource_uri' | 'unsupported_uri_template' | 'duplicate_widget' | 'unknown_widget_tool' | 'unknown_widget_action_tool' | 'duplicate_widget_tool' | 'invalid_widget_binding' | 'invalid_widget_state_handle' | 'widget_html_too_large' | 'widget_html_total_too_large' | 'invalid_asset' | 'invalid_capability_requirement' | 'state_secret_field' | 'invalid_knowledge' | 'knowledge_unhashed' | 'invalid_managed_collection' | 'invalid_variable_declaration' | 'invalid_managed_collection_source' | 'unknown_connector_alias' | 'connector_not_in_catalog' | 'unknown_operation' | 'connector_binding_required' | 'unsupported_credential_profile' | 'credential_scope_mismatch' | 'credential_audience_mismatch' | 'customer_endpoint_auth_required' | 'customer_endpoint_mapping_required' | 'customer_endpoint_unknown_mapping' | 'customer_endpoint_bridge_unsupported' | 'assistant_capability_unknown' | 'assistant_public_user_reference' | 'assistant_public_effect_unconfirmed' | 'customer_endpoint_action_unsupported' | 'customer_endpoint_surface_unsupported' | 'customer_endpoint_credential_source_unsupported' | 'customer_endpoint_policy_conflict' | 'customer_endpoint_routing_inconsistent' | 'unused_connector_alias' | 'arg_mismatch' | 'agent_guide_invalid' | 'agent_guide_duplicate_workflow' | 'agent_guide_duplicate_example' | 'agent_guide_example_workflow_missing' | 'agent_guide_capability_missing' | 'agent_guide_capability_kind' | 'app_package_sensitive_content';
5
5
  export interface CompileError {
6
6
  readonly code: CompileErrorCode;
7
7
  /** Dotted path to the offending location (e.g. `tools.1.name`); empty string for the document root. */
@@ -5,6 +5,7 @@ export { compileAppPackage } from './app-package/compile.js';
5
5
  export { isSafeReadTool, requiresToolConfirmation } from './artifact/consent.js';
6
6
  export { ARTIFACT_SCHEMA_VERSION, type ArtifactConnectionSource, type ArtifactConnectorBinding, type ArtifactCustomerAuthRouting, type ArtifactFulfilment, type ArtifactManagedCollection, type ArtifactMeta, type ArtifactPackagedAsset, type ArtifactPrompt, type ArtifactPromptArgument, type ArtifactResource, type ArtifactServer, type ArtifactServerContext, type ArtifactState, type ArtifactStateHandle, type ArtifactStateHandleKind, type ArtifactStateHandleScope, type ArtifactStep, type ArtifactTool, type ArtifactToolAuthorization, type ExprMap, type JsonSchema, MCP_APP_MIME_TYPE, type OperationRef, type ResolvedCredentialBinding, type ResolvedOperationRef, type RuntimeArtifact, type UnresolvedOperationRef, type WidgetUiMeta, } from './artifact/types.js';
7
7
  export { assetReference, type HostedAssetOptions, type HostedPackagedAsset, isPackagedAssetReference, type LocalAssetOptions, localAssetRoutePrefix, type PackagedAsset, type PackagedAssetReference, type PreparedPackagedAsset, prepareLocalAssets, } from './assets.js';
8
+ export { type ArtifactVariableDeclaration, compileVariableDeclarations, MAX_VARIABLE_DECLARATIONS, MAX_VARIABLE_SCHEMA_BYTES, MAX_VARIABLE_SCHEMA_DEPTH, MAX_VARIABLE_VALUE_BYTES, type VariableDeclarationManifest, validateVariableDeclaration, variableDeclarationManifestSchema, } from './business-variables.js';
8
9
  export { InMemoryCatalog } from './catalog/in-memory.js';
9
10
  export { isLegacyFieldMap, normalizeOperationIoSchema } from './catalog/io-schema.js';
10
11
  export { computeSignatureHash } from './catalog/signature.js';
@@ -13,6 +14,7 @@ export { type CompileOptions, compile, compileManifest, type ValidateResult, val
13
14
  export { type CustomerEndpointPolicy, type CustomerEndpointRef, isCustomerEndpointRef, isValidCustomerEndpointName, normalizeCustomerEndpointPolicy, resolveCustomerEndpointBaseUrl, } from './customer-endpoint.js';
14
15
  export type { CompileError, CompileErrorCode, CompileResult } from './errors.js';
15
16
  export { computeConnectionConfigRevision } from './fulfilment-emit.js';
17
+ export { type ManagedCollectionControls, projectManagedCollectionControls, validateManagedCollectionControls, } from './managed-collection-controls.js';
16
18
  export { MAX_MANAGED_COLLECTION_DESCRIPTION_LENGTH, MAX_MANAGED_COLLECTION_NAME_LENGTH, MAX_MANAGED_COLLECTION_RECORD_FIELDS, MAX_MANAGED_COLLECTION_RECORD_SCHEMA_BYTES, MAX_MANAGED_COLLECTION_RECORD_SCHEMA_DEPTH, MAX_MANAGED_COLLECTION_SCHEMA_VERSION, MAX_MANAGED_COLLECTION_TITLE_LENGTH, MAX_MANAGED_COLLECTIONS, type ManagedCollectionManifest, } from './managed-collections.js';
17
19
  export { type CspFault, type CspList, cspFaultsInManifest, cspOriginFaults, isHonorableCspOrigin, } from './manifest/csp-origins.js';
18
20
  export { type ArrayNode, type CoalesceNode, type CondNode, type ExprNode, type ObjectEntry, type ObjectNode, type PathNode, type PathSegment, parseCondition, parseValue, } from './manifest/expression.js';
@@ -21,6 +23,7 @@ export { type Manifest, manifestSchema } from './manifest/schema.js';
21
23
  export { type ResolveSchemaResult, resolveSchemaUses, type SchemasMap, } from './manifest/schema-refs.js';
22
24
  export { anonymousBehavior } from './manifest/website-projection.js';
23
25
  export { type SniffedImage, sniffImageBytes } from './mime-sniffing.js';
26
+ export { BUILTIN_RECORD_CATALOG_CONNECTOR, RECORD_CONNECTOR_ID, RECORD_CONNECTOR_VERSION, RECORD_OPERATION_SIGNATURES, } from './native-record-operations.js';
24
27
  export { manifestJsonSchema } from './schema-export.js';
25
28
  export { MAX_COMPILED_WIDGET_HTML_BYTES, MAX_RAW_WIDGET_HTML_BYTES, MAX_TOTAL_WIDGET_HTML_BYTES, RECOMMENDED_COMPILED_WIDGET_HTML_BYTES, } from './widget-limits.js';
26
29
  //# sourceMappingURL=index.d.ts.map
@@ -4,12 +4,14 @@ export { compileAppPackage } from './app-package/compile.js';
4
4
  export { isSafeReadTool, requiresToolConfirmation } from './artifact/consent.js';
5
5
  export { ARTIFACT_SCHEMA_VERSION, MCP_APP_MIME_TYPE, } from './artifact/types.js';
6
6
  export { assetReference, isPackagedAssetReference, localAssetRoutePrefix, prepareLocalAssets, } from './assets.js';
7
+ export { compileVariableDeclarations, MAX_VARIABLE_DECLARATIONS, MAX_VARIABLE_SCHEMA_BYTES, MAX_VARIABLE_SCHEMA_DEPTH, MAX_VARIABLE_VALUE_BYTES, validateVariableDeclaration, variableDeclarationManifestSchema, } from './business-variables.js';
7
8
  export { InMemoryCatalog } from './catalog/in-memory.js';
8
9
  export { isLegacyFieldMap, normalizeOperationIoSchema } from './catalog/io-schema.js';
9
10
  export { computeSignatureHash } from './catalog/signature.js';
10
11
  export { compile, compileManifest, validateManifest, } from './compile.js';
11
12
  export { isCustomerEndpointRef, isValidCustomerEndpointName, normalizeCustomerEndpointPolicy, resolveCustomerEndpointBaseUrl, } from './customer-endpoint.js';
12
13
  export { computeConnectionConfigRevision } from './fulfilment-emit.js';
14
+ export { projectManagedCollectionControls, validateManagedCollectionControls, } from './managed-collection-controls.js';
13
15
  export { MAX_MANAGED_COLLECTION_DESCRIPTION_LENGTH, MAX_MANAGED_COLLECTION_NAME_LENGTH, MAX_MANAGED_COLLECTION_RECORD_FIELDS, MAX_MANAGED_COLLECTION_RECORD_SCHEMA_BYTES, MAX_MANAGED_COLLECTION_RECORD_SCHEMA_DEPTH, MAX_MANAGED_COLLECTION_SCHEMA_VERSION, MAX_MANAGED_COLLECTION_TITLE_LENGTH, MAX_MANAGED_COLLECTIONS, } from './managed-collections.js';
14
16
  export { cspFaultsInManifest, cspOriginFaults, isHonorableCspOrigin, } from './manifest/csp-origins.js';
15
17
  export { parseCondition, parseValue, } from './manifest/expression.js';
@@ -18,6 +20,7 @@ export { manifestSchema } from './manifest/schema.js';
18
20
  export { resolveSchemaUses, } from './manifest/schema-refs.js';
19
21
  export { anonymousBehavior } from './manifest/website-projection.js';
20
22
  export { sniffImageBytes } from './mime-sniffing.js';
23
+ export { BUILTIN_RECORD_CATALOG_CONNECTOR, RECORD_CONNECTOR_ID, RECORD_CONNECTOR_VERSION, RECORD_OPERATION_SIGNATURES, } from './native-record-operations.js';
21
24
  export { manifestJsonSchema } from './schema-export.js';
22
25
  export { MAX_COMPILED_WIDGET_HTML_BYTES, MAX_RAW_WIDGET_HTML_BYTES, MAX_TOTAL_WIDGET_HTML_BYTES, RECOMMENDED_COMPILED_WIDGET_HTML_BYTES, } from './widget-limits.js';
23
26
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,52 @@
1
+ import { z } from 'zod';
2
+ import type { CompileError } from './errors.js';
3
+ export declare const managedCollectionControlFields: {
4
+ management: z.ZodOptional<z.ZodObject<{
5
+ assignment: z.ZodOptional<z.ZodLiteral<true>>;
6
+ notes: z.ZodOptional<z.ZodLiteral<true>>;
7
+ }, z.core.$strict>>;
8
+ fields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
9
+ label: z.ZodOptional<z.ZodString>;
10
+ help: z.ZodOptional<z.ZodString>;
11
+ }, z.core.$strict>>>;
12
+ publicFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
13
+ editableFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
14
+ summaryFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
15
+ filterFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
16
+ sortFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
17
+ };
18
+ declare const controlsSchema: z.ZodObject<{
19
+ management: z.ZodOptional<z.ZodObject<{
20
+ assignment: z.ZodOptional<z.ZodLiteral<true>>;
21
+ notes: z.ZodOptional<z.ZodLiteral<true>>;
22
+ }, z.core.$strict>>;
23
+ fields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
24
+ label: z.ZodOptional<z.ZodString>;
25
+ help: z.ZodOptional<z.ZodString>;
26
+ }, z.core.$strict>>>;
27
+ publicFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
28
+ editableFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
29
+ summaryFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
30
+ filterFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
31
+ sortFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
32
+ }, z.core.$strict>;
33
+ export interface ManagedCollectionControls {
34
+ readonly management?: {
35
+ readonly assignment?: true | undefined;
36
+ readonly notes?: true | undefined;
37
+ } | undefined;
38
+ readonly fields?: Readonly<Record<string, {
39
+ readonly label?: string | undefined;
40
+ readonly help?: string | undefined;
41
+ }>> | undefined;
42
+ readonly publicFields?: readonly string[] | undefined;
43
+ readonly editableFields?: readonly string[] | undefined;
44
+ readonly summaryFields?: readonly string[] | undefined;
45
+ readonly filterFields?: readonly string[] | undefined;
46
+ readonly sortFields?: readonly string[] | undefined;
47
+ }
48
+ /** Validate presentation/exposure against actual record fields, independently of application names. */
49
+ export declare function validateManagedCollectionControls(controls: ManagedCollectionControls, schema: Readonly<Record<string, unknown>>, external: boolean, path: string, errors: CompileError[]): void;
50
+ export declare function projectManagedCollectionControls(value: ManagedCollectionControls): z.infer<typeof controlsSchema>;
51
+ export {};
52
+ //# sourceMappingURL=managed-collection-controls.d.ts.map
@@ -0,0 +1,92 @@
1
+ import { validateJsonSchema } from '@noodle-borg/app-package';
2
+ import { z } from 'zod';
3
+ const fieldName = z
4
+ .string()
5
+ .min(1)
6
+ .max(64)
7
+ .regex(/^(?!(?:__proto__|constructor|prototype)$)[A-Za-z_][A-Za-z0-9_]*$/);
8
+ const fieldList = z.array(fieldName).max(128);
9
+ const plainText = (max) => z
10
+ .string()
11
+ .trim()
12
+ .min(1)
13
+ .max(max)
14
+ .regex(/^[^<>\p{Cc}]+$/u);
15
+ export const managedCollectionControlFields = {
16
+ management: z
17
+ .object({ assignment: z.literal(true).optional(), notes: z.literal(true).optional() })
18
+ .strict()
19
+ .optional(),
20
+ fields: z
21
+ .record(fieldName, z.object({ label: plainText(120).optional(), help: plainText(1000).optional() }).strict())
22
+ .optional(),
23
+ publicFields: fieldList.optional(),
24
+ editableFields: fieldList.optional(),
25
+ summaryFields: fieldList.optional(),
26
+ filterFields: fieldList.optional(),
27
+ sortFields: fieldList.optional(),
28
+ };
29
+ const controlsSchema = z.object(managedCollectionControlFields).strict();
30
+ /** Validate presentation/exposure against actual record fields, independently of application names. */
31
+ export function validateManagedCollectionControls(controls, schema, external, path, errors) {
32
+ const fail = (suffix, message) => errors.push({ code: 'invalid_managed_collection', path: `${path}.${suffix}`, message });
33
+ if (!controlsSchema.safeParse(controls).success) {
34
+ fail('fields', 'invalid collection management or field metadata');
35
+ return;
36
+ }
37
+ const properties = isObject(schema.properties) ? schema.properties : {};
38
+ for (const key of [
39
+ 'publicFields',
40
+ 'editableFields',
41
+ 'summaryFields',
42
+ 'filterFields',
43
+ 'sortFields',
44
+ ]) {
45
+ const names = controls[key] ?? [];
46
+ if (new Set(names).size !== names.length)
47
+ fail(key, 'duplicate field reference');
48
+ for (const name of names) {
49
+ if (!Object.hasOwn(properties, name))
50
+ fail(key, 'field is not declared in the record schema');
51
+ if ((key === 'filterFields' || key === 'sortFields') &&
52
+ (!isObject(properties[name]) ||
53
+ !['string', 'number', 'integer', 'boolean'].includes(String(properties[name].type))))
54
+ fail(key, 'filter and sort fields must be scalar values');
55
+ }
56
+ }
57
+ for (const name of Object.keys(controls.fields ?? {}))
58
+ if (!Object.hasOwn(properties, name))
59
+ fail('fields', 'metadata must name a declared field');
60
+ if (external &&
61
+ (controls.management !== undefined ||
62
+ (controls.publicFields?.length ?? 0) > 0 ||
63
+ (controls.editableFields?.length ?? 0) > 0))
64
+ fail('management', 'external reference collections cannot enable record writes, assignment or notes');
65
+ if ((controls.publicFields?.length ?? 0) > 0 && Array.isArray(schema.required)) {
66
+ for (const name of schema.required) {
67
+ if (typeof name !== 'string' || controls.publicFields?.includes(name))
68
+ continue;
69
+ const property = properties[name];
70
+ if (!isObject(property) ||
71
+ !Object.hasOwn(property, 'default') ||
72
+ validateJsonSchema(property, property.default).length > 0)
73
+ fail('publicFields', 'required non-public fields need valid creation defaults');
74
+ }
75
+ }
76
+ for (const property of Object.values(properties)) {
77
+ if (isObject(property) &&
78
+ Object.hasOwn(property, 'default') &&
79
+ validateJsonSchema(property, property.default).length > 0)
80
+ fail('recordSchema', 'creation default does not match its field schema');
81
+ }
82
+ }
83
+ export function projectManagedCollectionControls(value) {
84
+ return controlsSchema.parse(Object.fromEntries(Object.keys(managedCollectionControlFields).flatMap((key) => {
85
+ const entry = value[key];
86
+ return entry === undefined ? [] : [[key, structuredClone(entry)]];
87
+ })));
88
+ }
89
+ function isObject(value) {
90
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
91
+ }
92
+ //# sourceMappingURL=managed-collection-controls.js.map
@@ -1,6 +1,8 @@
1
1
  import { z } from 'zod';
2
2
  import type { ArtifactManagedCollection } from './artifact/types.js';
3
+ import type { ConnectorCatalog } from './catalog/types.js';
3
4
  import type { CompileError } from './errors.js';
5
+ import { type DeclaredConnectorRef } from './fulfilment-emit.js';
4
6
  export declare const MAX_MANAGED_COLLECTIONS = 16;
5
7
  export declare const MAX_MANAGED_COLLECTION_NAME_LENGTH = 64;
6
8
  export declare const MAX_MANAGED_COLLECTION_TITLE_LENGTH = 120;
@@ -10,16 +12,39 @@ export declare const MAX_MANAGED_COLLECTION_RECORD_SCHEMA_BYTES: number;
10
12
  export declare const MAX_MANAGED_COLLECTION_RECORD_SCHEMA_DEPTH = 12;
11
13
  export declare const MAX_MANAGED_COLLECTION_RECORD_FIELDS = 128;
12
14
  export declare const managedCollectionManifestSchema: z.ZodObject<{
15
+ management: z.ZodOptional<z.ZodObject<{
16
+ assignment: z.ZodOptional<z.ZodLiteral<true>>;
17
+ notes: z.ZodOptional<z.ZodLiteral<true>>;
18
+ }, z.core.$strict>>;
19
+ fields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
20
+ label: z.ZodOptional<z.ZodString>;
21
+ help: z.ZodOptional<z.ZodString>;
22
+ }, z.core.$strict>>>;
23
+ publicFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
24
+ editableFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
25
+ summaryFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
26
+ filterFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
27
+ sortFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
13
28
  name: z.ZodString;
14
29
  title: z.ZodString;
15
30
  description: z.ZodString;
16
31
  schemaVersion: z.ZodNumber;
17
32
  recordSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
33
+ behavior: z.ZodOptional<z.ZodObject<{
34
+ kind: z.ZodLiteral<"request">;
35
+ }, z.core.$strict>>;
36
+ source: z.ZodOptional<z.ZodObject<{
37
+ connector: z.ZodString;
38
+ scan: z.ZodString;
39
+ }, z.core.$strict>>;
18
40
  }, z.core.$strict>;
19
41
  export type ManagedCollectionManifest = z.infer<typeof managedCollectionManifestSchema>;
20
42
  /**
21
43
  * Validate and lower reusable collection intent. Operator lifecycle, grants, residency, and
22
44
  * retention deliberately do not enter this compiled definition.
23
45
  */
24
- export declare function compileManagedCollections(collections: readonly ManagedCollectionManifest[], toolNames: readonly string[], errors: CompileError[]): readonly ArtifactManagedCollection[];
46
+ export declare function compileManagedCollections(collections: readonly ManagedCollectionManifest[], toolNames: readonly string[], errors: CompileError[], options?: {
47
+ readonly catalog?: ConnectorCatalog;
48
+ readonly declared?: Readonly<Record<string, DeclaredConnectorRef>>;
49
+ }): readonly ArtifactManagedCollection[];
25
50
  //# sourceMappingURL=managed-collections.d.ts.map
@@ -1,5 +1,8 @@
1
1
  import { canonicalJson, sha256Canonical } from '@noodle-borg/app-package';
2
2
  import { z } from 'zod';
3
+ import { computeSignatureHash } from './catalog/signature.js';
4
+ import { computeConnectionConfigRevision } from './fulfilment-emit.js';
5
+ import { managedCollectionControlFields, projectManagedCollectionControls, validateManagedCollectionControls, } from './managed-collection-controls.js';
3
6
  export const MAX_MANAGED_COLLECTIONS = 16;
4
7
  export const MAX_MANAGED_COLLECTION_NAME_LENGTH = 64;
5
8
  export const MAX_MANAGED_COLLECTION_TITLE_LENGTH = 120;
@@ -14,6 +17,12 @@ const collectionNameSchema = z
14
17
  .max(MAX_MANAGED_COLLECTION_NAME_LENGTH)
15
18
  .regex(/^[a-z][a-z0-9_]*$/, 'must start with a letter and use lowercase letters, numbers, and underscores');
16
19
  const jsonSchemaSchema = z.record(z.string(), z.unknown());
20
+ const sourceSchema = z
21
+ .object({
22
+ connector: collectionNameSchema,
23
+ scan: collectionNameSchema,
24
+ })
25
+ .strict();
17
26
  export const managedCollectionManifestSchema = z
18
27
  .object({
19
28
  name: collectionNameSchema,
@@ -21,6 +30,12 @@ export const managedCollectionManifestSchema = z
21
30
  description: z.string().trim().min(1).max(MAX_MANAGED_COLLECTION_DESCRIPTION_LENGTH),
22
31
  schemaVersion: z.number().int().positive().max(MAX_MANAGED_COLLECTION_SCHEMA_VERSION),
23
32
  recordSchema: jsonSchemaSchema,
33
+ behavior: z
34
+ .object({ kind: z.literal('request') })
35
+ .strict()
36
+ .optional(),
37
+ source: sourceSchema.optional(),
38
+ ...managedCollectionControlFields,
24
39
  })
25
40
  .strict();
26
41
  const PROHIBITED_FIELD_NAME = /(?:card|cvv|cvc|password|passcode|token|secret|passport|governmentid|nationalid|socialsecurity|health|biometric)/i;
@@ -45,7 +60,7 @@ const SUBSCHEMA_LIST_KEYS = ['prefixItems', 'allOf', 'anyOf', 'oneOf'];
45
60
  * Validate and lower reusable collection intent. Operator lifecycle, grants, residency, and
46
61
  * retention deliberately do not enter this compiled definition.
47
62
  */
48
- export function compileManagedCollections(collections, toolNames, errors) {
63
+ export function compileManagedCollections(collections, toolNames, errors, options = {}) {
49
64
  const compiled = [];
50
65
  const seen = new Set();
51
66
  collections.forEach((collection, index) => {
@@ -70,8 +85,12 @@ export function compileManagedCollections(collections, toolNames, errors) {
70
85
  }
71
86
  const schemaErrorsBefore = errors.length;
72
87
  validateRecordSchema(collection.recordSchema, `${path}.recordSchema`, errors);
88
+ validateManagedCollectionControls(projectManagedCollectionControls(collection), collection.recordSchema, collection.source !== undefined, path, errors);
73
89
  if (errors.length !== schemaErrorsBefore)
74
90
  return;
91
+ const source = compileCollectionSource(collection, path, errors, options);
92
+ if (collection.source !== undefined && source === undefined)
93
+ return;
75
94
  compiled.push({
76
95
  name: collection.name,
77
96
  title: collection.title,
@@ -79,10 +98,180 @@ export function compileManagedCollections(collections, toolNames, errors) {
79
98
  schemaVersion: collection.schemaVersion,
80
99
  schemaDigest: sha256Canonical(collection.recordSchema),
81
100
  recordSchema: collection.recordSchema,
101
+ ...projectManagedCollectionControls(collection),
102
+ ...(collection.behavior === undefined ? {} : { behavior: collection.behavior }),
103
+ source: source ?? { authority: 'native' },
82
104
  });
83
105
  });
84
106
  return compiled;
85
107
  }
108
+ function compileCollectionSource(collection, path, errors, options) {
109
+ if (collection.source === undefined)
110
+ return { authority: 'native' };
111
+ const declared = options.declared?.[collection.source.connector];
112
+ if (declared === undefined) {
113
+ sourceError(errors, `${path}.source.connector`, `connector alias "${collection.source.connector}" is not declared`);
114
+ return undefined;
115
+ }
116
+ if (declared.binding === undefined) {
117
+ sourceError(errors, `${path}.source.connector`, 'external collection sources require an operator-bound connector');
118
+ return undefined;
119
+ }
120
+ const connector = options.catalog?.get(declared.id, declared.version);
121
+ if (options.catalog !== undefined && connector === undefined) {
122
+ sourceError(errors, `${path}.source.connector`, `connector "${declared.id}" version "${declared.version}" is not in the catalog`);
123
+ return undefined;
124
+ }
125
+ const scan = resolveSourceOperation({
126
+ alias: collection.source.connector,
127
+ name: collection.source.scan,
128
+ connector,
129
+ declared,
130
+ recordSchema: collection.recordSchema,
131
+ path: `${path}.source.scan`,
132
+ errors,
133
+ });
134
+ if (scan === undefined)
135
+ return undefined;
136
+ return {
137
+ authority: 'external',
138
+ connectorAlias: collection.source.connector,
139
+ connectorId: declared.id,
140
+ connectorVersion: declared.version,
141
+ scan,
142
+ };
143
+ }
144
+ function resolveSourceOperation(input) {
145
+ if (input.connector === undefined) {
146
+ return { resolved: false, connector: input.alias, operation: input.name };
147
+ }
148
+ const operation = input.connector.operations[input.name];
149
+ if (operation === undefined) {
150
+ sourceError(input.errors, input.path, `operation "${input.name}" does not exist on connector "${input.connector.id}"`);
151
+ return undefined;
152
+ }
153
+ if (operation.type !== 'read') {
154
+ sourceError(input.errors, input.path, `source operation "${input.name}" must be classified as read`);
155
+ return undefined;
156
+ }
157
+ const contractError = validateScanSignature(operation, input.recordSchema);
158
+ if (contractError !== undefined) {
159
+ sourceError(input.errors, input.path, contractError);
160
+ return undefined;
161
+ }
162
+ const binding = input.declared.binding;
163
+ const credentialPresentation = binding === undefined ? undefined : input.connector.credentialProfiles?.[binding.profile];
164
+ if (binding === undefined || credentialPresentation === undefined) {
165
+ sourceError(input.errors, input.path, `source operation "${input.name}" requires a valid bound credential profile`);
166
+ return undefined;
167
+ }
168
+ const credentialRequirement = input.connector.operationCredentials?.[input.name];
169
+ if (credentialRequirement !== undefined &&
170
+ !credentialRequirement.profiles.includes(binding.profile)) {
171
+ sourceError(input.errors, input.path, `source operation "${input.name}" does not permit credential profile "${binding.profile}"`);
172
+ return undefined;
173
+ }
174
+ return {
175
+ resolved: true,
176
+ alias: input.alias,
177
+ connectorId: input.declared.id,
178
+ connectorVersion: input.declared.version,
179
+ operation: input.name,
180
+ signatureHash: computeSignatureHash(input.name, operation),
181
+ credentialBinding: {
182
+ bindingId: input.alias,
183
+ connectionId: binding.connection.id,
184
+ connectionConfigRevision: computeConnectionConfigRevision(binding.connection),
185
+ profile: binding.profile,
186
+ presentation: credentialPresentation,
187
+ requiredScopes: [...(credentialRequirement?.scopes ?? [])],
188
+ ...(credentialRequirement?.audience === undefined
189
+ ? {}
190
+ : { requiredAudience: credentialRequirement.audience }),
191
+ },
192
+ };
193
+ }
194
+ function validateScanSignature(operation, recordSchema) {
195
+ const input = operation.input;
196
+ if (!isClosedObjectWithKeys(input, ['mode', 'cursor', 'checkpoint', 'limit'])) {
197
+ return 'scan input must be a closed object containing only mode, cursor, checkpoint and limit';
198
+ }
199
+ const inputProperties = input.properties;
200
+ if (!hasTypes(inputProperties, {
201
+ mode: 'string',
202
+ cursor: 'string',
203
+ checkpoint: 'string',
204
+ limit: 'integer',
205
+ })) {
206
+ return 'scan input fields do not match the normalized source contract';
207
+ }
208
+ if (!sameStrings(input.required, ['mode', 'limit']))
209
+ return 'scan input must require mode and limit only';
210
+ const modeEnum = inputProperties.mode?.enum;
211
+ if (!sameStrings(modeEnum, ['snapshot', 'changes']))
212
+ return 'scan mode must allow snapshot and changes';
213
+ const output = operation.output;
214
+ if (!isClosedObjectWithKeys(output, [
215
+ 'records',
216
+ 'deletedIds',
217
+ 'nextCursor',
218
+ 'checkpoint',
219
+ 'complete',
220
+ 'resetRequired',
221
+ ])) {
222
+ return 'scan output must match the normalized source page envelope';
223
+ }
224
+ if (!sameStrings(output.required, ['records', 'deletedIds', 'complete'])) {
225
+ return 'scan output must require records, deletedIds and complete only';
226
+ }
227
+ const properties = output.properties;
228
+ if (!hasTypes(properties, {
229
+ records: 'array',
230
+ deletedIds: 'array',
231
+ nextCursor: 'string',
232
+ checkpoint: 'string',
233
+ complete: 'boolean',
234
+ resetRequired: 'boolean',
235
+ })) {
236
+ return 'scan output fields do not match the normalized source page contract';
237
+ }
238
+ const item = properties.records?.items;
239
+ if (!isRecord(item) || !isClosedObjectWithKeys(item, ['id', 'version', 'record'])) {
240
+ return 'scan records must contain closed id, optional version and record objects';
241
+ }
242
+ if (!sameStrings(item.required, ['id', 'record']))
243
+ return 'scan records must require id and record only';
244
+ const itemProperties = item.properties;
245
+ if (itemProperties.id?.type !== 'string' || itemProperties.version?.type !== 'string') {
246
+ return 'scan record id and version must be strings';
247
+ }
248
+ if (sha256Canonical(itemProperties.record) !== sha256Canonical(recordSchema)) {
249
+ return 'scan record schema must exactly match the managed collection record schema';
250
+ }
251
+ const deletedItems = properties.deletedIds?.items;
252
+ if (!isRecord(deletedItems) || deletedItems.type !== 'string')
253
+ return 'deletedIds must be an array of strings';
254
+ return undefined;
255
+ }
256
+ function isClosedObjectWithKeys(value, keys) {
257
+ if (!isRecord(value) ||
258
+ value.type !== 'object' ||
259
+ value.additionalProperties !== false ||
260
+ !isRecord(value.properties))
261
+ return false;
262
+ return sameStrings(Object.keys(value.properties), keys);
263
+ }
264
+ function hasTypes(properties, expected) {
265
+ return Object.entries(expected).every(([key, type]) => properties[key]?.type === type);
266
+ }
267
+ function sameStrings(value, expected) {
268
+ return (Array.isArray(value) &&
269
+ value.every((entry) => typeof entry === 'string') &&
270
+ [...value].sort().join('\u0000') === [...expected].sort().join('\u0000'));
271
+ }
272
+ function sourceError(errors, path, message) {
273
+ errors.push({ code: 'invalid_managed_collection_source', path, message });
274
+ }
86
275
  function validateRecordSchema(schema, path, errors) {
87
276
  const bytes = new TextEncoder().encode(canonicalJson(schema)).byteLength;
88
277
  if (bytes > MAX_MANAGED_COLLECTION_RECORD_SCHEMA_BYTES) {