@aifabrix/builder 2.49.2 → 2.51.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 (459) hide show
  1. package/.cursor/plans/157.1-security-quality-violations-by-type.csv +374 -0
  2. package/.cursor/rules/assistant-driven-integration-build.mdc +40 -0
  3. package/.cursor/rules/deploy-rules/docker-image-ip-policy.mdc +49 -0
  4. package/.cursor/rules/plan-rules/application-lifecycle.mdc +30 -0
  5. package/.cursor/rules/plan-rules/plan-frontmatter.mdc +35 -0
  6. package/.cursor/rules/plan-rules/plan-lifecycle.mdc +31 -0
  7. package/.cursor/rules/plan-rules/plan-validation-gate.mdc +34 -0
  8. package/.cursor/skills/README.md +1 -0
  9. package/.dockerignore +52 -0
  10. package/.eslintignore +22 -0
  11. package/README.md +2 -0
  12. package/bin/builder-api-cleanup.js +26 -0
  13. package/bin/builder-api-nest.js +10 -0
  14. package/bin/builder-api-spike.js +19 -0
  15. package/enterprise-knowledge/README.md +50 -0
  16. package/enterprise-knowledge/enterprise-integration-lifecycle/README.md +22 -0
  17. package/enterprise-knowledge/enterprise-integration-lifecycle/application.json +15 -0
  18. package/enterprise-knowledge/enterprise-integration-lifecycle/deploy.js +69 -0
  19. package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-deploy.json +52 -0
  20. package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-system.json +29 -0
  21. package/enterprise-knowledge/enterprise-integration-lifecycle/env.template +2 -0
  22. package/integration/README.md +81 -0
  23. package/integration/github/README.md +53 -0
  24. package/integration/github/application.json +21 -0
  25. package/integration/github/deploy.js +72 -0
  26. package/integration/github/env.template +11 -0
  27. package/integration/github/github-datasource-issue-comments.json +239 -0
  28. package/integration/github/github-datasource-issues.json +399 -0
  29. package/integration/github/github-datasource-repository.json +354 -0
  30. package/integration/github/github-deploy.json +1202 -0
  31. package/integration/github/github-system.json +82 -0
  32. package/integration/hubspot-test/README.md +1 -1
  33. package/integration/hubspot-test/create-hubspot.js +1 -16
  34. package/jest.isolated-projects.js +31 -1
  35. package/jest.projects.js +87 -1
  36. package/lib/api/dev-server-https.js +1 -1
  37. package/lib/api/enterprise-knowledge.api.js +63 -0
  38. package/lib/api/evidence-kinds.api.js +128 -0
  39. package/lib/api/evidence.api.js +172 -0
  40. package/lib/api/external-systems.api.js +8 -2
  41. package/lib/api/pipeline.api.js +5 -1
  42. package/lib/api/resource-types.api.js +5 -4
  43. package/lib/api/roles.api.js +121 -0
  44. package/lib/api/types/enterprise-knowledge.types.js +46 -0
  45. package/lib/api/types/evidence-kinds.types.js +42 -0
  46. package/lib/api/types/evidence.types.js +67 -0
  47. package/lib/api/types/resource-types.types.js +2 -0
  48. package/lib/api/types/roles.types.js +36 -0
  49. package/lib/app/certification-verify-rows.js +1 -1
  50. package/lib/app/controller-application-filter.js +36 -0
  51. package/lib/app/deploy.js +1 -1
  52. package/lib/app/list-external-systems.js +130 -0
  53. package/lib/app/list.js +20 -8
  54. package/lib/app/run.js +3 -1
  55. package/lib/app/show-display.js +8 -3
  56. package/lib/app/show-online.js +178 -0
  57. package/lib/app/show.js +39 -90
  58. package/lib/build/builder-api-docker-staging.js +47 -0
  59. package/lib/build/miso-controller-npm-sdk-guard.js +2 -2
  60. package/lib/build/standard-docker-build.js +2 -0
  61. package/lib/certification/merge-certification-from-artifact.js +1 -1
  62. package/lib/certification/post-unified-cert-sync.js +4 -31
  63. package/lib/certification/sync-after-external-command.js +0 -1
  64. package/lib/certification/sync-system-certification.js +0 -3
  65. package/lib/channels/add-channel.js +40 -34
  66. package/lib/channels/approval-guides/chatgpt.js +33 -0
  67. package/lib/channels/approval-guides/credential-portal.js +38 -0
  68. package/lib/channels/approval-guides/index.js +110 -0
  69. package/lib/channels/approval-guides/microsoft-copilot.js +34 -0
  70. package/lib/channels/approval-guides/slack.js +34 -0
  71. package/lib/channels/approval-guides/teams-bot.js +35 -0
  72. package/lib/channels/approval-guides/web-embed.js +32 -0
  73. package/lib/channels/channel-approval-guide.js +11 -0
  74. package/lib/channels/channel-artifact-generator.js +18 -5
  75. package/lib/channels/channel-audit.js +3 -0
  76. package/lib/channels/channel-auth-context.js +1 -1
  77. package/lib/channels/channel-description.js +59 -0
  78. package/lib/channels/channel-integration-generator.js +13 -230
  79. package/lib/channels/channel-integration-template.js +94 -0
  80. package/lib/channels/channel-runtime-resolver.js +43 -3
  81. package/lib/channels/channel-status-display.js +66 -26
  82. package/lib/channels/channel-targets.js +3 -3
  83. package/lib/cli/index.js +31 -3
  84. package/lib/cli/infra-guided.js +5 -1
  85. package/lib/cli/setup-app-external-create.js +111 -0
  86. package/lib/cli/setup-app.help.js +1 -1
  87. package/lib/cli/setup-app.js +60 -130
  88. package/lib/cli/setup-app.test-commands.js +26 -52
  89. package/lib/cli/setup-certification-commands.js +4 -4
  90. package/lib/cli/setup-certification.help.js +9 -9
  91. package/lib/cli/setup-dev.js +30 -9
  92. package/lib/cli/setup-external-system-help.js +4 -6
  93. package/lib/cli/setup-external-system.js +58 -52
  94. package/lib/cli/setup-infra-up-builder-api-action.js +64 -0
  95. package/lib/cli/setup-infra-up-platform-action.js +3 -1
  96. package/lib/cli/setup-infra.js +15 -0
  97. package/lib/cli/setup-list.js +43 -0
  98. package/lib/cli/setup-utility-help-after.js +12 -0
  99. package/lib/cli/setup-utility-repair.js +26 -7
  100. package/lib/cli/setup-utility-validate.js +41 -2
  101. package/lib/cli/setup-utility.js +5 -3
  102. package/lib/commands/app.js +15 -43
  103. package/lib/commands/channel-add-setup.js +110 -0
  104. package/lib/commands/channel.js +42 -8
  105. package/lib/commands/datasource-sync-display.js +96 -0
  106. package/lib/commands/datasource-sync-policy.js +210 -0
  107. package/lib/commands/datasource-test-trust-cli.js +6 -6
  108. package/lib/commands/datasource-unified-test-cli.js +2 -1
  109. package/lib/commands/datasource-unified-test-cli.options.js +33 -23
  110. package/lib/commands/deploy-gate-failure-details.js +184 -0
  111. package/lib/commands/deploy-gate-orchestrator.js +368 -0
  112. package/lib/commands/dev-cli-handlers.js +7 -62
  113. package/lib/commands/dev-host-ops-params.js +91 -0
  114. package/lib/commands/dev-host-ops-poll.js +111 -0
  115. package/lib/commands/dev-host-ops.js +107 -94
  116. package/lib/commands/dev-init.js +6 -106
  117. package/lib/commands/dev-refresh.js +197 -0
  118. package/lib/commands/enterprise-knowledge.js +284 -0
  119. package/lib/commands/evidence-cli-leaves.js +250 -0
  120. package/lib/commands/evidence-kind.js +428 -0
  121. package/lib/commands/evidence.js +51 -0
  122. package/lib/commands/governance-cli-shared.js +2 -2
  123. package/lib/commands/governance-command-action.js +5 -3
  124. package/lib/commands/governance-fixture-subjects.js +85 -0
  125. package/lib/commands/governance.js +1 -1
  126. package/lib/commands/lifecycle-command-action.js +2 -2
  127. package/lib/commands/lifecycle-external.js +3 -3
  128. package/lib/commands/manifest-cli-auth.js +29 -0
  129. package/lib/commands/manifest-cli-commands.js +170 -0
  130. package/lib/commands/manifest-cli-integration-path.js +63 -0
  131. package/lib/commands/manifest.js +21 -0
  132. package/lib/commands/protection-cli-leaves.js +3 -3
  133. package/lib/commands/repair-auth-apply.js +15 -1
  134. package/lib/commands/repair-authentications-454.js +169 -0
  135. package/lib/commands/repair-capability-openapi-warnings.js +126 -0
  136. package/lib/commands/repair-datasource-apply.js +135 -0
  137. package/lib/commands/repair-datasource-auto-rbac.js +62 -1
  138. package/lib/commands/repair-datasource-http-service-contract.js +239 -0
  139. package/lib/commands/repair-datasource-operation-security.js +180 -0
  140. package/lib/commands/repair-datasource-run.js +7 -2
  141. package/lib/commands/repair-datasource-sync-operations.js +177 -0
  142. package/lib/commands/repair-datasource-webhooks-sync-bridge.js +133 -0
  143. package/lib/commands/repair-datasource.js +12 -68
  144. package/lib/commands/repair-env-template.js +11 -1
  145. package/lib/commands/repair-external-run.js +121 -31
  146. package/lib/commands/repair-internal.js +1 -1
  147. package/lib/commands/repair-openapi-export.js +156 -0
  148. package/lib/commands/repair-openapi-sync.js +33 -8
  149. package/lib/commands/repair-orchestration-datasource-split.js +259 -0
  150. package/lib/commands/repair-persist.js +22 -1
  151. package/lib/commands/repair-rbac-platform-preset.js +204 -0
  152. package/lib/commands/repair-rbac-reader-roles.js +191 -0
  153. package/lib/commands/repair-rbac.js +163 -86
  154. package/lib/commands/repair-steps.js +83 -18
  155. package/lib/commands/repair-system-permissions.js +1 -0
  156. package/lib/commands/repair.js +1 -1
  157. package/lib/commands/resource-type.js +166 -44
  158. package/lib/commands/role.js +452 -0
  159. package/lib/commands/run-post-publish-data-sync.js +68 -0
  160. package/lib/commands/setup-modes.js +1 -1
  161. package/lib/commands/setup.js +1 -1
  162. package/lib/commands/test-e2e-external.js +21 -8
  163. package/lib/commands/test-governance-cli-options.js +2 -2
  164. package/lib/commands/test-trust-cli-options.js +2 -2
  165. package/lib/commands/up-builder-api-bootstrap.js +71 -0
  166. package/lib/commands/up-builder-api-provision.js +241 -0
  167. package/lib/commands/up-builder-api.js +88 -0
  168. package/lib/commands/up-common.js +25 -1
  169. package/lib/commands/upload-credential-push-log.js +117 -0
  170. package/lib/commands/upload-data-sync-finalize.js +60 -0
  171. package/lib/commands/upload-probe.js +66 -0
  172. package/lib/commands/upload-publish-context.js +4 -1
  173. package/lib/commands/upload-sidecar-followups.js +55 -27
  174. package/lib/commands/upload.js +116 -157
  175. package/lib/commands/validate-json.js +230 -0
  176. package/lib/commands/verify-governance-combined-external.js +1 -1
  177. package/lib/commands/verify-governance-db.js +2 -2
  178. package/lib/commands/verify-operations-command-action.js +2 -2
  179. package/lib/commands/verify-operations-step-plan.js +79 -41
  180. package/lib/commands/verify-operations-steps.js +2 -2
  181. package/lib/commands/verify-trust-command-action.js +1 -1
  182. package/lib/commands/wizard-core.js +1 -1
  183. package/lib/commands/wizard-headless.js +2 -1
  184. package/lib/core/admin-secrets.js +2 -6
  185. package/lib/core/audit-logger.js +1 -1
  186. package/lib/core/secrets-env-content.js +10 -4
  187. package/lib/core/secrets-env-write.js +2 -13
  188. package/lib/core/secrets-load.js +1 -3
  189. package/lib/datasource/agent-trust-run.js +3 -3
  190. package/lib/datasource/capability/relate-operations.js +1 -1
  191. package/lib/datasource/deploy.js +3 -1
  192. package/lib/datasource/test-e2e.js +6 -1
  193. package/lib/datasource/unified-validation-run-body.js +4 -1
  194. package/lib/datasource/unified-validation-run.js +1 -1
  195. package/lib/deployment/deploy-poll-ui.js +73 -12
  196. package/lib/deployment/deployer-poll-run.js +113 -0
  197. package/lib/deployment/deployer.js +17 -87
  198. package/lib/evidence/dataplane-context.js +21 -0
  199. package/lib/evidence/evidence-display.js +78 -0
  200. package/lib/evidence/evidence-service.js +392 -0
  201. package/lib/external-system/deploy.js +290 -112
  202. package/lib/external-system/download.js +7 -3
  203. package/lib/external-system/test-execution.js +1 -1
  204. package/lib/external-system/test-system-level.js +8 -10
  205. package/lib/external-system/test.js +12 -6
  206. package/lib/generator/deploy-script.js +73 -0
  207. package/lib/generator/external.js +2 -1
  208. package/lib/generator/helpers.js +13 -5
  209. package/lib/generator/index.js +17 -2
  210. package/lib/generator/split-variables.js +9 -3
  211. package/lib/generator/wizard.js +3 -36
  212. package/lib/infrastructure/helpers-docker-check.js +6 -0
  213. package/lib/infrastructure/helpers.js +1 -1
  214. package/lib/internal/fs-real-sync.js +22 -1
  215. package/lib/internal/node-fs.js +2 -0
  216. package/lib/lifecycle/lifecycle-governance-options.js +1 -1
  217. package/lib/lifecycle/verify-step-progress.js +1 -1
  218. package/lib/programmatic/access-log.js +26 -0
  219. package/lib/programmatic/auth-config.js +45 -0
  220. package/lib/programmatic/bearer-auth.js +176 -0
  221. package/lib/programmatic/builder-api-request.js +175 -0
  222. package/lib/programmatic/builder-api-route-dispatch.js +82 -0
  223. package/lib/programmatic/builder-api-runtime-config.js +42 -0
  224. package/lib/programmatic/builder-api-server.js +230 -0
  225. package/lib/programmatic/builder-help-authentication-catalog.js +282 -0
  226. package/lib/programmatic/builder-help-connected-system-ui.js +266 -0
  227. package/lib/programmatic/builder-help-enterprise-sync-fabrix.js +60 -0
  228. package/lib/programmatic/builder-help-envelope.js +36 -0
  229. package/lib/programmatic/builder-help-fixtures.js +200 -0
  230. package/lib/programmatic/builder-help-governance.js +172 -0
  231. package/lib/programmatic/builder-help-schema-catalog.js +92 -0
  232. package/lib/programmatic/builder-help.js +361 -0
  233. package/lib/programmatic/capability-registry.js +77 -0
  234. package/lib/programmatic/command-options.js +32 -0
  235. package/lib/programmatic/enterprise-mcp-client.js +114 -0
  236. package/lib/programmatic/http-problem-details.js +99 -0
  237. package/lib/programmatic/http-route-match.js +40 -0
  238. package/lib/programmatic/idempotency-cache.js +69 -0
  239. package/lib/programmatic/index.js +53 -0
  240. package/lib/programmatic/integration-path-scope.js +39 -0
  241. package/lib/programmatic/log-redaction.js +66 -0
  242. package/lib/programmatic/manifest-get-section.js +146 -0
  243. package/lib/programmatic/manifest-patch-section.js +252 -0
  244. package/lib/programmatic/manifest-repair.js +122 -0
  245. package/lib/programmatic/manifest-section-dependency-graph.js +160 -0
  246. package/lib/programmatic/manifest-section-io.js +225 -0
  247. package/lib/programmatic/manifest-section-quality.js +171 -0
  248. package/lib/programmatic/manifest-section-registry-data.js +269 -0
  249. package/lib/programmatic/manifest-section-registry.js +222 -0
  250. package/lib/programmatic/nest-http-bridge.js +34 -0
  251. package/lib/programmatic/openapi-component-schemas.js +68 -0
  252. package/lib/programmatic/openapi-description-enricher.js +117 -0
  253. package/lib/programmatic/openapi-descriptions.js +190 -0
  254. package/lib/programmatic/openapi-docs-serving.js +123 -0
  255. package/lib/programmatic/openapi-help-schemas.js +63 -0
  256. package/lib/programmatic/openapi-manifest-schemas.js +141 -0
  257. package/lib/programmatic/openapi-operation-bindings.js +274 -0
  258. package/lib/programmatic/openapi-request-schemas.js +155 -0
  259. package/lib/programmatic/openapi-result-schemas.js +493 -0
  260. package/lib/programmatic/openapi-schema-descriptions-certify.js +139 -0
  261. package/lib/programmatic/openapi-schema-descriptions-core.js +162 -0
  262. package/lib/programmatic/openapi-schema-descriptions-help.js +40 -0
  263. package/lib/programmatic/openapi-schema-descriptions-manifest.js +143 -0
  264. package/lib/programmatic/openapi-schema-descriptions-mcp.js +118 -0
  265. package/lib/programmatic/openapi-schema-descriptions-operations.js +281 -0
  266. package/lib/programmatic/openapi-schema-helpers.js +108 -0
  267. package/lib/programmatic/openapi-spec.js +203 -0
  268. package/lib/programmatic/orchestration-openapi-meta.js +159 -0
  269. package/lib/programmatic/platform-rbac-catalog.js +90 -0
  270. package/lib/programmatic/request-timeout.js +53 -0
  271. package/lib/programmatic/route-handler-map.js +143 -0
  272. package/lib/programmatic/route-handlers-context.js +29 -0
  273. package/lib/programmatic/route-handlers.js +33 -0
  274. package/lib/programmatic/run-certify.js +57 -0
  275. package/lib/programmatic/run-enterprise-mcp.js +32 -0
  276. package/lib/programmatic/run-lifecycle.js +29 -0
  277. package/lib/programmatic/run-repair.js +41 -0
  278. package/lib/programmatic/run-repository-emcp.js +62 -0
  279. package/lib/programmatic/run-template-workspace.js +74 -0
  280. package/lib/programmatic/run-test.js +49 -0
  281. package/lib/programmatic/run-upload.js +63 -0
  282. package/lib/programmatic/run-validate.js +53 -0
  283. package/lib/programmatic/run-wizard.js +40 -0
  284. package/lib/programmatic/system-key.js +48 -0
  285. package/lib/programmatic/wizard-config-normalize.js +118 -0
  286. package/lib/programmatic/workspace-cleanup.js +128 -0
  287. package/lib/programmatic/workspace-context.js +145 -0
  288. package/lib/programmatic/workspace-lock.js +75 -0
  289. package/lib/programmatic/workspace-meta.js +64 -0
  290. package/lib/programmatic/workspace-ops.js +149 -0
  291. package/lib/protection/run-commands-upload-sync.js +35 -0
  292. package/lib/protection/run-commands.js +2 -20
  293. package/lib/protection/upload-batch.js +11 -7
  294. package/lib/resolvers/evidence-kind-file.js +230 -0
  295. package/lib/resolvers/resource-type-file.js +58 -1
  296. package/lib/resolvers/role-file.js +227 -0
  297. package/lib/schema/application-schema.json +22 -2
  298. package/lib/schema/external-datasource.schema.json +245 -2
  299. package/lib/schema/external-system.schema.json +259 -119
  300. package/lib/schema/flag-map-validation-run.json +3 -0
  301. package/lib/schema/infra.parameter.yaml +25 -1
  302. package/lib/schema/type/credential-field-registry.json +21 -5
  303. package/lib/schema/type/document-storage.json +9 -0
  304. package/lib/utils/agent-trust-run-display.js +1 -1
  305. package/lib/utils/api.js +8 -2
  306. package/lib/utils/app-path-resolve.js +168 -0
  307. package/lib/utils/app-register-config.js +4 -3
  308. package/lib/utils/authentication-env-template.js +222 -0
  309. package/lib/utils/cli-sync-options.js +62 -10
  310. package/lib/utils/cli-utils.js +15 -3
  311. package/lib/utils/cli-workspace-options.js +29 -0
  312. package/lib/utils/compose-generate-docker-compose.js +102 -0
  313. package/lib/utils/configuration-env-resolver.js +203 -27
  314. package/lib/utils/datasource-test-run-certificate-tty.js +28 -2
  315. package/lib/utils/datasource-test-run-certification-debug.js +130 -0
  316. package/lib/utils/datasource-test-run-debug-display.js +2 -0
  317. package/lib/utils/datasource-test-run-debug-slice.js +7 -0
  318. package/lib/utils/datasource-test-run-display.js +2 -1
  319. package/lib/utils/dev-ca-install.js +5 -6
  320. package/lib/utils/dev-config.js +2 -2
  321. package/lib/utils/dev-init-ssh-merge.js +165 -23
  322. package/lib/utils/dev-list-sort.js +145 -0
  323. package/lib/utils/dev-pin-share-instructions.js +110 -0
  324. package/lib/utils/dev-platform-tls.js +0 -63
  325. package/lib/utils/dev-ssh-config-helper.js +177 -33
  326. package/lib/utils/docker-build.js +46 -27
  327. package/lib/utils/docker-daemon-tls-ca.js +1 -1
  328. package/lib/utils/docker-exec.js +91 -6
  329. package/lib/utils/enterprise-knowledge-paths.js +142 -0
  330. package/lib/utils/env-copy.js +3 -4
  331. package/lib/utils/env-dotenv-format.js +103 -0
  332. package/lib/utils/error-formatters/error-parser.js +0 -3
  333. package/lib/utils/external-env-template.js +5 -2
  334. package/lib/utils/external-system-display.js +5 -1
  335. package/lib/utils/external-system-readiness-compact-blocks.js +248 -0
  336. package/lib/utils/external-system-readiness-compact-display.js +324 -0
  337. package/lib/utils/external-system-readiness-core.js +16 -0
  338. package/lib/utils/external-system-readiness-deploy-display.js +29 -11
  339. package/lib/utils/external-system-readiness-display-internals.js +3 -1
  340. package/lib/utils/external-system-readiness-display.js +20 -30
  341. package/lib/utils/external-system-system-test-tty-certification.js +135 -0
  342. package/lib/utils/external-system-system-test-tty.js +5 -41
  343. package/lib/utils/health-check-request.js +2 -3
  344. package/lib/utils/help-builder.js +9 -1
  345. package/lib/utils/host-ops-job-labels.js +236 -0
  346. package/lib/utils/host-ops-job-result.js +61 -0
  347. package/lib/utils/host-ops-poll-ui.js +163 -0
  348. package/lib/utils/image-name.js +22 -4
  349. package/lib/utils/integration-path-resolve.js +112 -0
  350. package/lib/utils/logger.js +37 -4
  351. package/lib/utils/manifest-source-emit.js +1 -1
  352. package/lib/utils/paths-reload-source.js +148 -0
  353. package/lib/utils/paths-system-builder-keys.js +25 -0
  354. package/lib/utils/paths.js +183 -30
  355. package/lib/utils/pipeline-upload-auth-retry.js +4 -0
  356. package/lib/utils/postgres-platform-bootstrap.js +24 -17
  357. package/lib/utils/postgres-wipe.js +5 -2
  358. package/lib/utils/remote-dev-auth.js +39 -4
  359. package/lib/utils/resolve-docker-image-ref.js +36 -6
  360. package/lib/utils/runtime-configuration-values.js +64 -2
  361. package/lib/utils/secrets-helpers.js +5 -1
  362. package/lib/utils/ssh-known-hosts.js +130 -0
  363. package/lib/utils/test-target-cli-options.js +75 -0
  364. package/lib/utils/token-manager.js +16 -0
  365. package/lib/utils/upload-sync-options.js +20 -2
  366. package/lib/utils/validation-run-request.js +11 -2
  367. package/lib/validation/external-manifest-validator.js +11 -1
  368. package/lib/validation/openapi-contract-surface-validator.js +430 -0
  369. package/lib/validation/openapi-contract-vendor-validation.js +238 -0
  370. package/lib/validation/validate-external-file.js +160 -0
  371. package/lib/validation/validate.js +6 -117
  372. package/lib/validation/validator.js +6 -5
  373. package/package.json +76 -37
  374. package/packages/builder-api/README.md +120 -0
  375. package/packages/builder-api/package.json +30 -0
  376. package/packages/builder-api/src/app.module.ts +7 -0
  377. package/packages/builder-api/src/auth/auth.module.ts +5 -0
  378. package/packages/builder-api/src/external-system/external-system.module.ts +5 -0
  379. package/packages/builder-api/src/main.ts +16 -0
  380. package/packages/builder-api/tsconfig.json +15 -0
  381. package/scripts/check-builder-api-architecture-grep.js +79 -0
  382. package/scripts/docker_image_content_gate.js +47 -0
  383. package/scripts/docker_image_content_gate.sh +5 -0
  384. package/scripts/export-builder-api-evidence.js +262 -0
  385. package/scripts/lib/builder-api-docker-staging-copy.js +60 -0
  386. package/scripts/lib/builder-api-docker-staging-core.js +183 -0
  387. package/scripts/lib/docker-image-content-gate-core.js +166 -0
  388. package/scripts/lib/plan-actor.js +109 -0
  389. package/scripts/lib/plan-config.js +20 -0
  390. package/scripts/lib/plan-gates.js +154 -0
  391. package/scripts/lib/plan-meta.js +104 -0
  392. package/scripts/lib/plan-parse.js +162 -0
  393. package/scripts/lib/plan-prevalidate-gates.js +337 -0
  394. package/scripts/lib/plan-run-core.js +125 -0
  395. package/scripts/lib/plan-run-report.js +119 -0
  396. package/scripts/plan-approve.js +24 -0
  397. package/scripts/plan-archive.js +49 -0
  398. package/scripts/plan-run.js +13 -0
  399. package/scripts/plan-set-actor.js +21 -0
  400. package/scripts/plan-validate.js +80 -0
  401. package/scripts/pnpm/af.mjs +110 -0
  402. package/scripts/pnpm/check-quiet.mjs +32 -0
  403. package/scripts/pnpm/dev-install.mjs +29 -0
  404. package/scripts/pnpm/dev-reload.mjs +18 -0
  405. package/scripts/pnpm/help.mjs +55 -0
  406. package/scripts/pnpm/lib/dev-reload-core.mjs +189 -0
  407. package/scripts/pnpm/lib/dev-reload-log-capture.mjs +67 -0
  408. package/scripts/pnpm/lib/dev-reload-log-utils.mjs +32 -0
  409. package/scripts/pnpm/lib/resolve-aifabrix-bin.mjs +124 -0
  410. package/scripts/pnpm/lib/resolve-app-url.mjs +183 -0
  411. package/scripts/pnpm/lib/spinner.mjs +42 -0
  412. package/scripts/stage_builder_api_for_docker.js +65 -0
  413. package/scripts/sync-builder-api-template.js +44 -0
  414. package/templates/README.md +3 -0
  415. package/templates/applications/builder-api/Dockerfile +38 -0
  416. package/templates/applications/builder-api/application.yaml +75 -0
  417. package/templates/applications/builder-api/env.template +48 -0
  418. package/templates/applications/dataplane/application.yaml +27 -5
  419. package/templates/applications/dataplane/env.template +38 -15
  420. package/templates/applications/dataplane/rbac.yaml +85 -3
  421. package/templates/applications/miso-controller/application.yaml +10 -1
  422. package/templates/applications/miso-controller/env.template +11 -10
  423. package/templates/applications/miso-controller/rbac.yaml +72 -0
  424. package/templates/channels/README.md +18 -0
  425. package/templates/channels/ai-fabrix-icon.jpg +0 -0
  426. package/templates/channels/chatgpt/install.template.md.hbs +21 -24
  427. package/templates/channels/chatgpt/integration/README.md +11 -0
  428. package/templates/channels/chatgpt/integration/application.json +15 -0
  429. package/templates/channels/chatgpt/integration/chatgpt-system.json +29 -0
  430. package/templates/channels/chatgpt/integration/env.template +4 -0
  431. package/templates/channels/microsoft-copilot/install.template.md.hbs +20 -25
  432. package/templates/channels/microsoft-copilot/integration/README.md +11 -0
  433. package/templates/channels/microsoft-copilot/integration/application.json +15 -0
  434. package/templates/channels/microsoft-copilot/integration/env.template +6 -0
  435. package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +34 -0
  436. package/templates/channels/slack/install.template.md.hbs +48 -18
  437. package/templates/channels/slack/integration/README.md +38 -0
  438. package/templates/channels/slack/integration/application.json +18 -0
  439. package/templates/channels/slack/integration/env.template +29 -0
  440. package/templates/channels/slack/integration/slack-datasource-conversations.json +226 -0
  441. package/templates/channels/slack/integration/slack-datasource-messages.json +269 -0
  442. package/templates/channels/slack/integration/slack-system.json +144 -0
  443. package/templates/channels/slack/manifest.template.json.hbs +20 -10
  444. package/templates/channels/teams-bot/install.template.md.hbs +31 -17
  445. package/templates/channels/teams-bot/integration/README.md +18 -0
  446. package/templates/channels/teams-bot/integration/application.json +17 -0
  447. package/templates/channels/teams-bot/integration/env.template +5 -0
  448. package/templates/channels/teams-bot/integration/teams-bot-system.json +55 -0
  449. package/templates/channels/teams-bot/manifest.template.json.hbs +27 -0
  450. package/templates/channels/web-embed/install.template.md.hbs +16 -26
  451. package/templates/channels/web-embed/integration/README.md +11 -0
  452. package/templates/channels/web-embed/integration/application.json +15 -0
  453. package/templates/channels/web-embed/integration/env.template +4 -0
  454. package/templates/channels/web-embed/integration/web-embed-system.json +29 -0
  455. package/templates/openapi/redoc_page.html +86 -0
  456. package/templates/python/docker-compose.hbs +11 -0
  457. package/templates/python/requirements.txt +2 -2
  458. package/templates/typescript/docker-compose.hbs +11 -0
  459. package/lib/certification/cli-cert-sync-skip.js +0 -21
@@ -0,0 +1,190 @@
1
+ /**
2
+ * MCP-friendly OpenAPI operation text for builder-api routes (plan 154.0 §6).
3
+ *
4
+ * @fileoverview One capability per route; imperative descriptions
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ /** @type {Record<string, { summary: string, description: string, tags: string[] }>} */
12
+ const OPERATION_DESCRIPTIONS = Object.freeze({
13
+ listSystems: {
14
+ summary: 'List workspace external systems',
15
+ description:
16
+ 'List integration system keys under the authenticated user workspace. Read-only; does not call Dataplane.',
17
+ tags: ['workspace']
18
+ },
19
+ createSystem: {
20
+ summary: 'Create workspace system folder',
21
+ description:
22
+ 'Create an empty integration workspace for a systemKey. Mutating; requires Idempotency-Key on retries.',
23
+ tags: ['workspace']
24
+ },
25
+ getSystemManifest: {
26
+ summary: 'Read workspace manifest summary',
27
+ description: 'Return local workspace metadata and file manifest for one systemKey. Read-only.',
28
+ tags: ['workspace']
29
+ },
30
+ deleteSystem: {
31
+ summary: 'Delete workspace system folder',
32
+ description:
33
+ 'Remove the local integration workspace for a systemKey. Mutating; does not delete Dataplane config.',
34
+ tags: ['workspace']
35
+ },
36
+ runWizard: {
37
+ summary: 'Generate integration files from OpenAPI or wizard config',
38
+ description:
39
+ 'Run headless wizard to materialize system and datasource JSON under the workspace. Mutating; may take up to MAX_REQUEST_TIMEOUT_MS. Retry with the same Idempotency-Key.',
40
+ tags: ['build']
41
+ },
42
+ runRepair: {
43
+ summary: 'Repair workspace manifest drift',
44
+ description:
45
+ 'Align application manifest, env.template, and datasource metadata with on-disk JSON. Mutating.',
46
+ tags: ['build']
47
+ },
48
+ listManifestSections: {
49
+ summary: 'List governed manifest sections',
50
+ description: 'Return sectionKey catalog and datasource keys for MCP section editing. Read-only.',
51
+ tags: ['manifest']
52
+ },
53
+ getManifestSection: {
54
+ summary: 'Read one system manifest section',
55
+ description:
56
+ 'Return section value, schema fragment, quality, dependency graph, and sectionReadToken. MUST call before patchSection.',
57
+ tags: ['manifest']
58
+ },
59
+ patchManifestSection: {
60
+ summary: 'Patch one system manifest section',
61
+ description:
62
+ 'Apply governed merge/replace to a system section. Requires intent and sectionReadToken from GET. Mutating.',
63
+ tags: ['manifest']
64
+ },
65
+ getDatasourceManifestSection: {
66
+ summary: 'Read one datasource manifest section',
67
+ description:
68
+ 'Return datasource section value, quality, missingInputs, and sectionReadToken. MUST call before patchSection.',
69
+ tags: ['manifest']
70
+ },
71
+ patchDatasourceManifestSection: {
72
+ summary: 'Patch one datasource manifest section',
73
+ description:
74
+ 'Apply governed merge/replace to a datasource section. Requires intent and sectionReadToken. Mutating.',
75
+ tags: ['manifest']
76
+ },
77
+ runManifestRepair: {
78
+ summary: 'Repair manifest sections with explicit hooks',
79
+ description:
80
+ 'Run named repair hooks in dependency-graph order after section patches. Mutating; does not auto-upload.',
81
+ tags: ['manifest']
82
+ },
83
+ runValidate: {
84
+ summary: 'Validate local integration manifests',
85
+ description:
86
+ 'Run AJV validation on workspace files. Optionally include pipeline validate-only against Dataplane (read-only).',
87
+ tags: ['validate']
88
+ },
89
+ runPreviewUpload: {
90
+ summary: 'Preview dev upload payload without publishing',
91
+ description:
92
+ 'Build and validate the deploy payload locally. MUST NOT push credentials or mutate Dataplane. Use before POST /upload.',
93
+ tags: ['validate']
94
+ },
95
+ runTest: {
96
+ summary: 'Run unit, integration, or e2e tests',
97
+ description:
98
+ 'Execute test ladder for the workspace. Mutating when syncing to Dataplane. e2e may take up to MAX_TEST_E2E_TIMEOUT_MS.',
99
+ tags: ['test']
100
+ },
101
+ runCertifyPillar: {
102
+ summary: 'Run certification pillar checks',
103
+ description:
104
+ 'Run verify-operations, verify-trust, verify-governance, or lifecycle-run against Dataplane. Mutating when sync is enabled.',
105
+ tags: ['certify']
106
+ },
107
+ getLifecycleReport: {
108
+ summary: 'Read lifecycle certification report',
109
+ description: 'Fetch lifecycle report from Dataplane for the workspace system. Read-only proxy.',
110
+ tags: ['certify']
111
+ },
112
+ runUpload: {
113
+ summary: 'Upload integration to dev Dataplane',
114
+ description:
115
+ 'Full dev publish: validate, sync deploy JSON, push credentials, pipeline upload. Requires external-system:publish in dev. Mutating; use Idempotency-Key; may take up to MAX_UPLOAD_TIMEOUT_MS.',
116
+ tags: ['apply']
117
+ },
118
+ materializeTemplate: {
119
+ summary: 'Materialize workspace from template',
120
+ description:
121
+ 'Invoke Enterprise MCP template.materializeWorkspace for the integration systemKey. Provider-neutral; mutating.',
122
+ tags: ['template']
123
+ },
124
+ getWorkspaceStatus: {
125
+ summary: 'Read workspace status',
126
+ description: 'Combine local workspace manifest with Enterprise MCP workspace.status when available.',
127
+ tags: ['workspace']
128
+ },
129
+ runWorkspaceDiff: {
130
+ summary: 'Diff workspace draft',
131
+ description: 'Invoke Enterprise MCP workspace.diff for local draft vs remote/template baseline.',
132
+ tags: ['workspace']
133
+ },
134
+ resetWorkspaceFromTemplate: {
135
+ summary: 'Reset workspace from template',
136
+ description:
137
+ 'Invoke Enterprise MCP workspace.resetFromTemplate. Use Dataplane lifecycle / verify-trust before mutating when required.',
138
+ tags: ['template']
139
+ },
140
+ runRepositorySync: {
141
+ summary: 'Sync workspace with remote repository',
142
+ description:
143
+ 'Invoke Enterprise MCP repository.sync (pull or push via body params). Provider-neutral; mutating.',
144
+ tags: ['repository']
145
+ },
146
+ runRepositoryCreateReview: {
147
+ summary: 'Create or update repository review',
148
+ description: 'Invoke Enterprise MCP repository.createReview (PR or provider-equivalent). Mutating.',
149
+ tags: ['repository']
150
+ },
151
+ getRepositoryStatus: {
152
+ summary: 'Read repository sync status',
153
+ description: 'Invoke Enterprise MCP repository.status. Read-only proxy.',
154
+ tags: ['repository']
155
+ },
156
+ runRepositoryDispatchPipeline: {
157
+ summary: 'Dispatch repository pipeline',
158
+ description: 'Invoke Enterprise MCP repository.dispatchPipeline for CI/CD dispatch. Mutating.',
159
+ tags: ['repository']
160
+ },
161
+ health: {
162
+ summary: 'Liveness probe',
163
+ description: 'Returns ok when the builder-api process is running. No authentication.',
164
+ tags: ['infra']
165
+ },
166
+ ready: {
167
+ summary: 'Readiness probe',
168
+ description: 'Returns ready with configured dataplaneUrl. Does not verify Dataplane connectivity in V1.',
169
+ tags: ['infra']
170
+ }
171
+ });
172
+
173
+ /**
174
+ * @param {string} handlerId
175
+ * @returns {{ summary: string, description: string, tags: string[] }}
176
+ */
177
+ function getOperationDescription(handlerId) {
178
+ return (
179
+ OPERATION_DESCRIPTIONS[handlerId] || {
180
+ summary: handlerId,
181
+ description: handlerId,
182
+ tags: ['builder']
183
+ }
184
+ );
185
+ }
186
+
187
+ module.exports = {
188
+ OPERATION_DESCRIPTIONS,
189
+ getOperationDescription
190
+ };
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Public OpenAPI / ReDoc serving for builder-api (aligned with dataplane / miso-controller).
3
+ *
4
+ * @fileoverview ReDoc HTML shell + request-derived public base URL
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const fs = require('../internal/fs-real-sync');
12
+ const path = require('path');
13
+ const { getProjectRoot } = require('../utils/paths');
14
+ const { BASE } = require('./http-route-match');
15
+
16
+ const REDOC_JS_URL = 'https://cdn.jsdelivr.net/npm/redoc@latest/bundles/redoc.standalone.js';
17
+ const REDOC_TEMPLATE_REL = path.join('templates', 'openapi', 'redoc_page.html');
18
+
19
+ /** @type {string|null} */
20
+ let cachedTemplate = null;
21
+
22
+ /**
23
+ * Resolve shipped ReDoc HTML template (stable under lib/ layout; not tied to mutable PROJECT_ROOT).
24
+ * @returns {string}
25
+ */
26
+ function resolveRedocTemplatePath() {
27
+ const fromModule = path.resolve(__dirname, '..', '..', REDOC_TEMPLATE_REL);
28
+ if (fs.existsSync(fromModule)) {
29
+ return fromModule;
30
+ }
31
+ return path.join(getProjectRoot(), REDOC_TEMPLATE_REL);
32
+ }
33
+
34
+ /**
35
+ * @param {import('http').IncomingMessage} req
36
+ * @returns {string}
37
+ */
38
+ function resolvePublicBaseUrl(req) {
39
+ const rawProto = String(req.headers['x-forwarded-proto'] || '').trim();
40
+ const proto = rawProto ? rawProto.split(',')[0].trim() : 'http';
41
+ const rawHost = String(req.headers['x-forwarded-host'] || req.headers.host || '').trim();
42
+ const host = rawHost ? rawHost.split(',')[0].trim() : '';
43
+ if (!host) {
44
+ return '';
45
+ }
46
+ return `${proto}://${host}`.replace(/\/$/, '');
47
+ }
48
+
49
+ /**
50
+ * @param {string} value
51
+ * @returns {string}
52
+ */
53
+ function escapeHtmlAttr(value) {
54
+ return String(value)
55
+ .replace(/&/g, '&amp;')
56
+ .replace(/"/g, '&quot;')
57
+ .replace(/</g, '&lt;');
58
+ }
59
+
60
+ /**
61
+ * @returns {string}
62
+ */
63
+ function loadRedocTemplate() {
64
+ if (cachedTemplate) {
65
+ return cachedTemplate;
66
+ }
67
+ cachedTemplate = fs.readFileSync(resolveRedocTemplatePath(), 'utf8');
68
+ return cachedTemplate;
69
+ }
70
+
71
+ /**
72
+ * @param {Record<string, string>} replacements
73
+ * @returns {string}
74
+ */
75
+ function applyTemplateReplacements(replacements) {
76
+ let html = loadRedocTemplate();
77
+ for (const [token, value] of Object.entries(replacements)) {
78
+ html = html.split(token).join(value);
79
+ }
80
+ return html;
81
+ }
82
+
83
+ /**
84
+ * @returns {string}
85
+ */
86
+ function openapiJsonPath() {
87
+ return `${BASE}/api-docs/openapi.json`;
88
+ }
89
+
90
+ /**
91
+ * @param {import('http').IncomingMessage} req
92
+ * @returns {string}
93
+ */
94
+ function absoluteOpenApiJsonUrl(req) {
95
+ const base = resolvePublicBaseUrl(req);
96
+ const relative = openapiJsonPath();
97
+ return base ? `${base}${relative}` : relative;
98
+ }
99
+
100
+ /**
101
+ * @param {import('http').IncomingMessage} req
102
+ * @returns {string}
103
+ */
104
+ function renderBuilderApiRedocHtml(req) {
105
+ const specUrl = escapeHtmlAttr(absoluteOpenApiJsonUrl(req));
106
+ const jsonDownloadUrl = `${specUrl}${specUrl.includes('?') ? '&' : '?'}attachment=true`;
107
+ return applyTemplateReplacements({
108
+ '@@TITLE@@': 'AI Fabrix Builder API - ReDoc',
109
+ '@@SPEC_URL@@': specUrl,
110
+ '@@JSON_DOWNLOAD_URL@@': jsonDownloadUrl,
111
+ '@@JSON_DOWNLOAD_NAME@@': 'builder-api-openapi.json',
112
+ '@@REDOC_JS_URL@@': REDOC_JS_URL
113
+ });
114
+ }
115
+
116
+ module.exports = {
117
+ REDOC_JS_URL,
118
+ resolveRedocTemplatePath,
119
+ resolvePublicBaseUrl,
120
+ renderBuilderApiRedocHtml,
121
+ openapiJsonPath,
122
+ absoluteOpenApiJsonUrl
123
+ };
@@ -0,0 +1,63 @@
1
+ /**
2
+ * OpenAPI component schemas for builder-api help endpoint (plan 154.5).
3
+ *
4
+ * @fileoverview BuilderHelpTopic enum and help response data model
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const stringArraySchema = () => ({
12
+ type: 'array',
13
+ items: { type: 'string' },
14
+ additionalProperties: false
15
+ });
16
+
17
+ /** @type {Record<string, Object>} */
18
+ const OPENAPI_HELP_RESULT_SCHEMAS = Object.freeze({
19
+ BuilderHelpTopic: {
20
+ type: 'string',
21
+ enum: [
22
+ 'overview',
23
+ 'sections',
24
+ 'section',
25
+ 'dependencyGraph',
26
+ 'repairRules',
27
+ 'workflow',
28
+ 'schemaCatalog',
29
+ 'subscriptionGuide',
30
+ 'cipOverview',
31
+ 'goldenExamples',
32
+ 'goldenExample',
33
+ 'evidencePatterns',
34
+ 'evidencePattern',
35
+ 'connectedSystemUi',
36
+ 'enterpriseSyncFabrix',
37
+ 'platformRoles',
38
+ 'resourceTypeCatalog',
39
+ 'dimensionsGuide',
40
+ 'channelOnboarding'
41
+ ]
42
+ },
43
+ BuilderHelpData: {
44
+ type: 'object',
45
+ properties: {
46
+ version: { type: 'string' },
47
+ schemaVersion: { type: 'string' },
48
+ topic: { $ref: '#/components/schemas/BuilderHelpTopic' },
49
+ key: { type: 'string' },
50
+ title: { type: 'string' },
51
+ summary: { type: 'string' },
52
+ data: { type: 'object' },
53
+ related: stringArraySchema(),
54
+ recommendedNext: stringArraySchema()
55
+ },
56
+ required: ['version', 'schemaVersion', 'topic', 'key', 'title', 'summary', 'data', 'related', 'recommendedNext'],
57
+ additionalProperties: false
58
+ }
59
+ });
60
+
61
+ module.exports = {
62
+ OPENAPI_HELP_RESULT_SCHEMAS
63
+ };
@@ -0,0 +1,141 @@
1
+ /**
2
+ * OpenAPI schemas for manifest section routes (plan 154.4).
3
+ *
4
+ * @fileoverview Frozen request/result models for section editing
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const { frozenObject, schemaRef, stringArraySchema } = require('./openapi-schema-helpers');
12
+
13
+ const SectionKey = {
14
+ type: 'string',
15
+ description: 'Governed manifest section key (e.g. datasource.metadata, system.basics).'
16
+ };
17
+
18
+ const DatasourceKey = {
19
+ type: 'string',
20
+ pattern: '^[a-z0-9-]+$',
21
+ description: 'Datasource key within the external system workspace.'
22
+ };
23
+
24
+ const MissingInput = frozenObject(
25
+ {
26
+ field: { type: 'string', description: 'Field name requiring user input.' },
27
+ question: { type: 'string', description: 'Question to ask the user verbatim.' },
28
+ required: { type: 'boolean', description: 'When true, AI must not guess — ask user first.' }
29
+ },
30
+ ['field', 'question', 'required']
31
+ );
32
+
33
+ const SectionQuality = frozenObject(
34
+ {
35
+ score: { type: 'integer', minimum: 0, maximum: 100, description: 'Deterministic quality score.' },
36
+ blockingIssues: {
37
+ type: 'array',
38
+ items: frozenObject({ severity: { type: 'string' }, message: { type: 'string' } }, ['message'])
39
+ },
40
+ warnings: stringArraySchema(),
41
+ missingInputs: { type: 'array', items: schemaRef('MissingInput') },
42
+ assumptions: stringArraySchema()
43
+ },
44
+ ['score', 'blockingIssues', 'warnings', 'missingInputs', 'assumptions']
45
+ );
46
+
47
+ const OPENAPI_MANIFEST_REQUEST_SCHEMAS = {
48
+ SectionKey,
49
+ DatasourceKey,
50
+ MissingInput,
51
+ SectionQuality,
52
+ ManifestPatchSectionRequest: frozenObject(
53
+ {
54
+ intent: { type: 'string', minLength: 1, description: 'Why this patch is made — audit and repair hints.' },
55
+ patch: { type: 'object', description: 'Section-scoped merge/replace payload.' },
56
+ mode: { type: 'string', enum: ['merge', 'replace'], description: 'Merge into or replace section value.' },
57
+ sectionReadToken: { type: 'string', description: 'Token from prior GET; stale token returns 409.' },
58
+ dryRun: { type: 'boolean', description: 'Validate patch without writing files.' }
59
+ },
60
+ ['intent', 'patch', 'mode', 'sectionReadToken']
61
+ ),
62
+ ManifestRepairRequest: frozenObject(
63
+ {
64
+ hooks: stringArraySchema(),
65
+ sectionKey: schemaRef('SectionKey'),
66
+ datasourceKey: schemaRef('DatasourceKey'),
67
+ dryRun: { type: 'boolean' },
68
+ auth: { type: 'string', description: 'Optional auth repair mode passed to repair command.' }
69
+ },
70
+ ['hooks']
71
+ )
72
+ };
73
+
74
+ const OPENAPI_MANIFEST_RESULT_SCHEMAS = {
75
+ ManifestSectionViewData: frozenObject(
76
+ {
77
+ sectionKey: schemaRef('SectionKey'),
78
+ target: { type: 'string', enum: ['system', 'datasource'] },
79
+ datasourceKey: { type: ['string', 'null'] },
80
+ currentValue: { type: 'object' },
81
+ schemaFragment: { type: 'object' },
82
+ required: { type: 'boolean' },
83
+ mutable: { type: 'boolean' },
84
+ sourceOfTruth: { type: 'boolean' },
85
+ dependencyGraph: frozenObject({ downstreamFromThis: stringArraySchema() }, ['downstreamFromThis']),
86
+ repairHooks: stringArraySchema(),
87
+ recommendedNextActions: stringArraySchema(),
88
+ sectionReadToken: { type: 'string' },
89
+ quality: schemaRef('SectionQuality')
90
+ },
91
+ ['sectionKey', 'target', 'currentValue', 'sectionReadToken', 'quality']
92
+ ),
93
+ ManifestPatchResultData: frozenObject(
94
+ {
95
+ sectionKey: schemaRef('SectionKey'),
96
+ datasourceKey: { type: ['string', 'null'] },
97
+ intent: { type: 'string' },
98
+ changedPaths: stringArraySchema(),
99
+ beforeHash: { type: 'string' },
100
+ afterHash: { type: 'string' },
101
+ derivedSectionsAffected: stringArraySchema(),
102
+ repairRecommended: { type: 'boolean' },
103
+ repairHooks: stringArraySchema(),
104
+ validationPreview: { type: 'object' },
105
+ riskHints: stringArraySchema(),
106
+ nextActions: stringArraySchema(),
107
+ dryRun: { type: 'boolean' },
108
+ quality: schemaRef('SectionQuality')
109
+ },
110
+ ['sectionKey', 'intent', 'quality']
111
+ ),
112
+ ManifestSectionsListData: frozenObject(
113
+ {
114
+ systemKey: schemaRef('SystemKey'),
115
+ sections: {
116
+ type: 'array',
117
+ items: frozenObject(
118
+ { sectionKey: schemaRef('SectionKey'), target: { type: 'string', enum: ['system', 'datasource'] } },
119
+ ['sectionKey', 'target']
120
+ )
121
+ },
122
+ datasourceKeys: stringArraySchema()
123
+ },
124
+ ['systemKey', 'sections', 'datasourceKeys']
125
+ ),
126
+ ManifestRepairResultData: frozenObject(
127
+ {
128
+ hooksRun: stringArraySchema(),
129
+ derivedSectionsUpdated: stringArraySchema(),
130
+ repairResult: { type: 'object' },
131
+ dryRun: { type: 'boolean' },
132
+ quality: { oneOf: [schemaRef('SectionQuality'), { type: 'null' }] }
133
+ },
134
+ ['hooksRun', 'derivedSectionsUpdated']
135
+ )
136
+ };
137
+
138
+ module.exports = {
139
+ OPENAPI_MANIFEST_REQUEST_SCHEMAS,
140
+ OPENAPI_MANIFEST_RESULT_SCHEMAS
141
+ };