@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.
- package/.cursor/plans/157.1-security-quality-violations-by-type.csv +374 -0
- package/.cursor/rules/assistant-driven-integration-build.mdc +40 -0
- package/.cursor/rules/deploy-rules/docker-image-ip-policy.mdc +49 -0
- package/.cursor/rules/plan-rules/application-lifecycle.mdc +30 -0
- package/.cursor/rules/plan-rules/plan-frontmatter.mdc +35 -0
- package/.cursor/rules/plan-rules/plan-lifecycle.mdc +31 -0
- package/.cursor/rules/plan-rules/plan-validation-gate.mdc +34 -0
- package/.cursor/skills/README.md +1 -0
- package/.dockerignore +52 -0
- package/.eslintignore +22 -0
- package/README.md +2 -0
- package/bin/builder-api-cleanup.js +26 -0
- package/bin/builder-api-nest.js +10 -0
- package/bin/builder-api-spike.js +19 -0
- package/enterprise-knowledge/README.md +50 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/README.md +22 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/application.json +15 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/deploy.js +69 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-deploy.json +52 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-system.json +29 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/env.template +2 -0
- package/integration/README.md +81 -0
- package/integration/github/README.md +53 -0
- package/integration/github/application.json +21 -0
- package/integration/github/deploy.js +72 -0
- package/integration/github/env.template +11 -0
- package/integration/github/github-datasource-issue-comments.json +239 -0
- package/integration/github/github-datasource-issues.json +399 -0
- package/integration/github/github-datasource-repository.json +354 -0
- package/integration/github/github-deploy.json +1202 -0
- package/integration/github/github-system.json +82 -0
- package/integration/hubspot-test/README.md +1 -1
- package/integration/hubspot-test/create-hubspot.js +1 -16
- package/jest.isolated-projects.js +31 -1
- package/jest.projects.js +87 -1
- package/lib/api/dev-server-https.js +1 -1
- package/lib/api/enterprise-knowledge.api.js +63 -0
- package/lib/api/evidence-kinds.api.js +128 -0
- package/lib/api/evidence.api.js +172 -0
- package/lib/api/external-systems.api.js +8 -2
- package/lib/api/pipeline.api.js +5 -1
- package/lib/api/resource-types.api.js +5 -4
- package/lib/api/roles.api.js +121 -0
- package/lib/api/types/enterprise-knowledge.types.js +46 -0
- package/lib/api/types/evidence-kinds.types.js +42 -0
- package/lib/api/types/evidence.types.js +67 -0
- package/lib/api/types/resource-types.types.js +2 -0
- package/lib/api/types/roles.types.js +36 -0
- package/lib/app/certification-verify-rows.js +1 -1
- package/lib/app/controller-application-filter.js +36 -0
- package/lib/app/deploy.js +1 -1
- package/lib/app/list-external-systems.js +130 -0
- package/lib/app/list.js +20 -8
- package/lib/app/run.js +3 -1
- package/lib/app/show-display.js +8 -3
- package/lib/app/show-online.js +178 -0
- package/lib/app/show.js +39 -90
- package/lib/build/builder-api-docker-staging.js +47 -0
- package/lib/build/miso-controller-npm-sdk-guard.js +2 -2
- package/lib/build/standard-docker-build.js +2 -0
- package/lib/certification/merge-certification-from-artifact.js +1 -1
- package/lib/certification/post-unified-cert-sync.js +4 -31
- package/lib/certification/sync-after-external-command.js +0 -1
- package/lib/certification/sync-system-certification.js +0 -3
- package/lib/channels/add-channel.js +40 -34
- package/lib/channels/approval-guides/chatgpt.js +33 -0
- package/lib/channels/approval-guides/credential-portal.js +38 -0
- package/lib/channels/approval-guides/index.js +110 -0
- package/lib/channels/approval-guides/microsoft-copilot.js +34 -0
- package/lib/channels/approval-guides/slack.js +34 -0
- package/lib/channels/approval-guides/teams-bot.js +35 -0
- package/lib/channels/approval-guides/web-embed.js +32 -0
- package/lib/channels/channel-approval-guide.js +11 -0
- package/lib/channels/channel-artifact-generator.js +18 -5
- package/lib/channels/channel-audit.js +3 -0
- package/lib/channels/channel-auth-context.js +1 -1
- package/lib/channels/channel-description.js +59 -0
- package/lib/channels/channel-integration-generator.js +13 -230
- package/lib/channels/channel-integration-template.js +94 -0
- package/lib/channels/channel-runtime-resolver.js +43 -3
- package/lib/channels/channel-status-display.js +66 -26
- package/lib/channels/channel-targets.js +3 -3
- package/lib/cli/index.js +31 -3
- package/lib/cli/infra-guided.js +5 -1
- package/lib/cli/setup-app-external-create.js +111 -0
- package/lib/cli/setup-app.help.js +1 -1
- package/lib/cli/setup-app.js +60 -130
- package/lib/cli/setup-app.test-commands.js +26 -52
- package/lib/cli/setup-certification-commands.js +4 -4
- package/lib/cli/setup-certification.help.js +9 -9
- package/lib/cli/setup-dev.js +30 -9
- package/lib/cli/setup-external-system-help.js +4 -6
- package/lib/cli/setup-external-system.js +58 -52
- package/lib/cli/setup-infra-up-builder-api-action.js +64 -0
- package/lib/cli/setup-infra-up-platform-action.js +3 -1
- package/lib/cli/setup-infra.js +15 -0
- package/lib/cli/setup-list.js +43 -0
- package/lib/cli/setup-utility-help-after.js +12 -0
- package/lib/cli/setup-utility-repair.js +26 -7
- package/lib/cli/setup-utility-validate.js +41 -2
- package/lib/cli/setup-utility.js +5 -3
- package/lib/commands/app.js +15 -43
- package/lib/commands/channel-add-setup.js +110 -0
- package/lib/commands/channel.js +42 -8
- package/lib/commands/datasource-sync-display.js +96 -0
- package/lib/commands/datasource-sync-policy.js +210 -0
- package/lib/commands/datasource-test-trust-cli.js +6 -6
- package/lib/commands/datasource-unified-test-cli.js +2 -1
- package/lib/commands/datasource-unified-test-cli.options.js +33 -23
- package/lib/commands/deploy-gate-failure-details.js +184 -0
- package/lib/commands/deploy-gate-orchestrator.js +368 -0
- package/lib/commands/dev-cli-handlers.js +7 -62
- package/lib/commands/dev-host-ops-params.js +91 -0
- package/lib/commands/dev-host-ops-poll.js +111 -0
- package/lib/commands/dev-host-ops.js +107 -94
- package/lib/commands/dev-init.js +6 -106
- package/lib/commands/dev-refresh.js +197 -0
- package/lib/commands/enterprise-knowledge.js +284 -0
- package/lib/commands/evidence-cli-leaves.js +250 -0
- package/lib/commands/evidence-kind.js +428 -0
- package/lib/commands/evidence.js +51 -0
- package/lib/commands/governance-cli-shared.js +2 -2
- package/lib/commands/governance-command-action.js +5 -3
- package/lib/commands/governance-fixture-subjects.js +85 -0
- package/lib/commands/governance.js +1 -1
- package/lib/commands/lifecycle-command-action.js +2 -2
- package/lib/commands/lifecycle-external.js +3 -3
- package/lib/commands/manifest-cli-auth.js +29 -0
- package/lib/commands/manifest-cli-commands.js +170 -0
- package/lib/commands/manifest-cli-integration-path.js +63 -0
- package/lib/commands/manifest.js +21 -0
- package/lib/commands/protection-cli-leaves.js +3 -3
- package/lib/commands/repair-auth-apply.js +15 -1
- package/lib/commands/repair-authentications-454.js +169 -0
- package/lib/commands/repair-capability-openapi-warnings.js +126 -0
- package/lib/commands/repair-datasource-apply.js +135 -0
- package/lib/commands/repair-datasource-auto-rbac.js +62 -1
- package/lib/commands/repair-datasource-http-service-contract.js +239 -0
- package/lib/commands/repair-datasource-operation-security.js +180 -0
- package/lib/commands/repair-datasource-run.js +7 -2
- package/lib/commands/repair-datasource-sync-operations.js +177 -0
- package/lib/commands/repair-datasource-webhooks-sync-bridge.js +133 -0
- package/lib/commands/repair-datasource.js +12 -68
- package/lib/commands/repair-env-template.js +11 -1
- package/lib/commands/repair-external-run.js +121 -31
- package/lib/commands/repair-internal.js +1 -1
- package/lib/commands/repair-openapi-export.js +156 -0
- package/lib/commands/repair-openapi-sync.js +33 -8
- package/lib/commands/repair-orchestration-datasource-split.js +259 -0
- package/lib/commands/repair-persist.js +22 -1
- package/lib/commands/repair-rbac-platform-preset.js +204 -0
- package/lib/commands/repair-rbac-reader-roles.js +191 -0
- package/lib/commands/repair-rbac.js +163 -86
- package/lib/commands/repair-steps.js +83 -18
- package/lib/commands/repair-system-permissions.js +1 -0
- package/lib/commands/repair.js +1 -1
- package/lib/commands/resource-type.js +166 -44
- package/lib/commands/role.js +452 -0
- package/lib/commands/run-post-publish-data-sync.js +68 -0
- package/lib/commands/setup-modes.js +1 -1
- package/lib/commands/setup.js +1 -1
- package/lib/commands/test-e2e-external.js +21 -8
- package/lib/commands/test-governance-cli-options.js +2 -2
- package/lib/commands/test-trust-cli-options.js +2 -2
- package/lib/commands/up-builder-api-bootstrap.js +71 -0
- package/lib/commands/up-builder-api-provision.js +241 -0
- package/lib/commands/up-builder-api.js +88 -0
- package/lib/commands/up-common.js +25 -1
- package/lib/commands/upload-credential-push-log.js +117 -0
- package/lib/commands/upload-data-sync-finalize.js +60 -0
- package/lib/commands/upload-probe.js +66 -0
- package/lib/commands/upload-publish-context.js +4 -1
- package/lib/commands/upload-sidecar-followups.js +55 -27
- package/lib/commands/upload.js +116 -157
- package/lib/commands/validate-json.js +230 -0
- package/lib/commands/verify-governance-combined-external.js +1 -1
- package/lib/commands/verify-governance-db.js +2 -2
- package/lib/commands/verify-operations-command-action.js +2 -2
- package/lib/commands/verify-operations-step-plan.js +79 -41
- package/lib/commands/verify-operations-steps.js +2 -2
- package/lib/commands/verify-trust-command-action.js +1 -1
- package/lib/commands/wizard-core.js +1 -1
- package/lib/commands/wizard-headless.js +2 -1
- package/lib/core/admin-secrets.js +2 -6
- package/lib/core/audit-logger.js +1 -1
- package/lib/core/secrets-env-content.js +10 -4
- package/lib/core/secrets-env-write.js +2 -13
- package/lib/core/secrets-load.js +1 -3
- package/lib/datasource/agent-trust-run.js +3 -3
- package/lib/datasource/capability/relate-operations.js +1 -1
- package/lib/datasource/deploy.js +3 -1
- package/lib/datasource/test-e2e.js +6 -1
- package/lib/datasource/unified-validation-run-body.js +4 -1
- package/lib/datasource/unified-validation-run.js +1 -1
- package/lib/deployment/deploy-poll-ui.js +73 -12
- package/lib/deployment/deployer-poll-run.js +113 -0
- package/lib/deployment/deployer.js +17 -87
- package/lib/evidence/dataplane-context.js +21 -0
- package/lib/evidence/evidence-display.js +78 -0
- package/lib/evidence/evidence-service.js +392 -0
- package/lib/external-system/deploy.js +290 -112
- package/lib/external-system/download.js +7 -3
- package/lib/external-system/test-execution.js +1 -1
- package/lib/external-system/test-system-level.js +8 -10
- package/lib/external-system/test.js +12 -6
- package/lib/generator/deploy-script.js +73 -0
- package/lib/generator/external.js +2 -1
- package/lib/generator/helpers.js +13 -5
- package/lib/generator/index.js +17 -2
- package/lib/generator/split-variables.js +9 -3
- package/lib/generator/wizard.js +3 -36
- package/lib/infrastructure/helpers-docker-check.js +6 -0
- package/lib/infrastructure/helpers.js +1 -1
- package/lib/internal/fs-real-sync.js +22 -1
- package/lib/internal/node-fs.js +2 -0
- package/lib/lifecycle/lifecycle-governance-options.js +1 -1
- package/lib/lifecycle/verify-step-progress.js +1 -1
- package/lib/programmatic/access-log.js +26 -0
- package/lib/programmatic/auth-config.js +45 -0
- package/lib/programmatic/bearer-auth.js +176 -0
- package/lib/programmatic/builder-api-request.js +175 -0
- package/lib/programmatic/builder-api-route-dispatch.js +82 -0
- package/lib/programmatic/builder-api-runtime-config.js +42 -0
- package/lib/programmatic/builder-api-server.js +230 -0
- package/lib/programmatic/builder-help-authentication-catalog.js +282 -0
- package/lib/programmatic/builder-help-connected-system-ui.js +266 -0
- package/lib/programmatic/builder-help-enterprise-sync-fabrix.js +60 -0
- package/lib/programmatic/builder-help-envelope.js +36 -0
- package/lib/programmatic/builder-help-fixtures.js +200 -0
- package/lib/programmatic/builder-help-governance.js +172 -0
- package/lib/programmatic/builder-help-schema-catalog.js +92 -0
- package/lib/programmatic/builder-help.js +361 -0
- package/lib/programmatic/capability-registry.js +77 -0
- package/lib/programmatic/command-options.js +32 -0
- package/lib/programmatic/enterprise-mcp-client.js +114 -0
- package/lib/programmatic/http-problem-details.js +99 -0
- package/lib/programmatic/http-route-match.js +40 -0
- package/lib/programmatic/idempotency-cache.js +69 -0
- package/lib/programmatic/index.js +53 -0
- package/lib/programmatic/integration-path-scope.js +39 -0
- package/lib/programmatic/log-redaction.js +66 -0
- package/lib/programmatic/manifest-get-section.js +146 -0
- package/lib/programmatic/manifest-patch-section.js +252 -0
- package/lib/programmatic/manifest-repair.js +122 -0
- package/lib/programmatic/manifest-section-dependency-graph.js +160 -0
- package/lib/programmatic/manifest-section-io.js +225 -0
- package/lib/programmatic/manifest-section-quality.js +171 -0
- package/lib/programmatic/manifest-section-registry-data.js +269 -0
- package/lib/programmatic/manifest-section-registry.js +222 -0
- package/lib/programmatic/nest-http-bridge.js +34 -0
- package/lib/programmatic/openapi-component-schemas.js +68 -0
- package/lib/programmatic/openapi-description-enricher.js +117 -0
- package/lib/programmatic/openapi-descriptions.js +190 -0
- package/lib/programmatic/openapi-docs-serving.js +123 -0
- package/lib/programmatic/openapi-help-schemas.js +63 -0
- package/lib/programmatic/openapi-manifest-schemas.js +141 -0
- package/lib/programmatic/openapi-operation-bindings.js +274 -0
- package/lib/programmatic/openapi-request-schemas.js +155 -0
- package/lib/programmatic/openapi-result-schemas.js +493 -0
- package/lib/programmatic/openapi-schema-descriptions-certify.js +139 -0
- package/lib/programmatic/openapi-schema-descriptions-core.js +162 -0
- package/lib/programmatic/openapi-schema-descriptions-help.js +40 -0
- package/lib/programmatic/openapi-schema-descriptions-manifest.js +143 -0
- package/lib/programmatic/openapi-schema-descriptions-mcp.js +118 -0
- package/lib/programmatic/openapi-schema-descriptions-operations.js +281 -0
- package/lib/programmatic/openapi-schema-helpers.js +108 -0
- package/lib/programmatic/openapi-spec.js +203 -0
- package/lib/programmatic/orchestration-openapi-meta.js +159 -0
- package/lib/programmatic/platform-rbac-catalog.js +90 -0
- package/lib/programmatic/request-timeout.js +53 -0
- package/lib/programmatic/route-handler-map.js +143 -0
- package/lib/programmatic/route-handlers-context.js +29 -0
- package/lib/programmatic/route-handlers.js +33 -0
- package/lib/programmatic/run-certify.js +57 -0
- package/lib/programmatic/run-enterprise-mcp.js +32 -0
- package/lib/programmatic/run-lifecycle.js +29 -0
- package/lib/programmatic/run-repair.js +41 -0
- package/lib/programmatic/run-repository-emcp.js +62 -0
- package/lib/programmatic/run-template-workspace.js +74 -0
- package/lib/programmatic/run-test.js +49 -0
- package/lib/programmatic/run-upload.js +63 -0
- package/lib/programmatic/run-validate.js +53 -0
- package/lib/programmatic/run-wizard.js +40 -0
- package/lib/programmatic/system-key.js +48 -0
- package/lib/programmatic/wizard-config-normalize.js +118 -0
- package/lib/programmatic/workspace-cleanup.js +128 -0
- package/lib/programmatic/workspace-context.js +145 -0
- package/lib/programmatic/workspace-lock.js +75 -0
- package/lib/programmatic/workspace-meta.js +64 -0
- package/lib/programmatic/workspace-ops.js +149 -0
- package/lib/protection/run-commands-upload-sync.js +35 -0
- package/lib/protection/run-commands.js +2 -20
- package/lib/protection/upload-batch.js +11 -7
- package/lib/resolvers/evidence-kind-file.js +230 -0
- package/lib/resolvers/resource-type-file.js +58 -1
- package/lib/resolvers/role-file.js +227 -0
- package/lib/schema/application-schema.json +22 -2
- package/lib/schema/external-datasource.schema.json +245 -2
- package/lib/schema/external-system.schema.json +259 -119
- package/lib/schema/flag-map-validation-run.json +3 -0
- package/lib/schema/infra.parameter.yaml +25 -1
- package/lib/schema/type/credential-field-registry.json +21 -5
- package/lib/schema/type/document-storage.json +9 -0
- package/lib/utils/agent-trust-run-display.js +1 -1
- package/lib/utils/api.js +8 -2
- package/lib/utils/app-path-resolve.js +168 -0
- package/lib/utils/app-register-config.js +4 -3
- package/lib/utils/authentication-env-template.js +222 -0
- package/lib/utils/cli-sync-options.js +62 -10
- package/lib/utils/cli-utils.js +15 -3
- package/lib/utils/cli-workspace-options.js +29 -0
- package/lib/utils/compose-generate-docker-compose.js +102 -0
- package/lib/utils/configuration-env-resolver.js +203 -27
- package/lib/utils/datasource-test-run-certificate-tty.js +28 -2
- package/lib/utils/datasource-test-run-certification-debug.js +130 -0
- package/lib/utils/datasource-test-run-debug-display.js +2 -0
- package/lib/utils/datasource-test-run-debug-slice.js +7 -0
- package/lib/utils/datasource-test-run-display.js +2 -1
- package/lib/utils/dev-ca-install.js +5 -6
- package/lib/utils/dev-config.js +2 -2
- package/lib/utils/dev-init-ssh-merge.js +165 -23
- package/lib/utils/dev-list-sort.js +145 -0
- package/lib/utils/dev-pin-share-instructions.js +110 -0
- package/lib/utils/dev-platform-tls.js +0 -63
- package/lib/utils/dev-ssh-config-helper.js +177 -33
- package/lib/utils/docker-build.js +46 -27
- package/lib/utils/docker-daemon-tls-ca.js +1 -1
- package/lib/utils/docker-exec.js +91 -6
- package/lib/utils/enterprise-knowledge-paths.js +142 -0
- package/lib/utils/env-copy.js +3 -4
- package/lib/utils/env-dotenv-format.js +103 -0
- package/lib/utils/error-formatters/error-parser.js +0 -3
- package/lib/utils/external-env-template.js +5 -2
- package/lib/utils/external-system-display.js +5 -1
- package/lib/utils/external-system-readiness-compact-blocks.js +248 -0
- package/lib/utils/external-system-readiness-compact-display.js +324 -0
- package/lib/utils/external-system-readiness-core.js +16 -0
- package/lib/utils/external-system-readiness-deploy-display.js +29 -11
- package/lib/utils/external-system-readiness-display-internals.js +3 -1
- package/lib/utils/external-system-readiness-display.js +20 -30
- package/lib/utils/external-system-system-test-tty-certification.js +135 -0
- package/lib/utils/external-system-system-test-tty.js +5 -41
- package/lib/utils/health-check-request.js +2 -3
- package/lib/utils/help-builder.js +9 -1
- package/lib/utils/host-ops-job-labels.js +236 -0
- package/lib/utils/host-ops-job-result.js +61 -0
- package/lib/utils/host-ops-poll-ui.js +163 -0
- package/lib/utils/image-name.js +22 -4
- package/lib/utils/integration-path-resolve.js +112 -0
- package/lib/utils/logger.js +37 -4
- package/lib/utils/manifest-source-emit.js +1 -1
- package/lib/utils/paths-reload-source.js +148 -0
- package/lib/utils/paths-system-builder-keys.js +25 -0
- package/lib/utils/paths.js +183 -30
- package/lib/utils/pipeline-upload-auth-retry.js +4 -0
- package/lib/utils/postgres-platform-bootstrap.js +24 -17
- package/lib/utils/postgres-wipe.js +5 -2
- package/lib/utils/remote-dev-auth.js +39 -4
- package/lib/utils/resolve-docker-image-ref.js +36 -6
- package/lib/utils/runtime-configuration-values.js +64 -2
- package/lib/utils/secrets-helpers.js +5 -1
- package/lib/utils/ssh-known-hosts.js +130 -0
- package/lib/utils/test-target-cli-options.js +75 -0
- package/lib/utils/token-manager.js +16 -0
- package/lib/utils/upload-sync-options.js +20 -2
- package/lib/utils/validation-run-request.js +11 -2
- package/lib/validation/external-manifest-validator.js +11 -1
- package/lib/validation/openapi-contract-surface-validator.js +430 -0
- package/lib/validation/openapi-contract-vendor-validation.js +238 -0
- package/lib/validation/validate-external-file.js +160 -0
- package/lib/validation/validate.js +6 -117
- package/lib/validation/validator.js +6 -5
- package/package.json +76 -37
- package/packages/builder-api/README.md +120 -0
- package/packages/builder-api/package.json +30 -0
- package/packages/builder-api/src/app.module.ts +7 -0
- package/packages/builder-api/src/auth/auth.module.ts +5 -0
- package/packages/builder-api/src/external-system/external-system.module.ts +5 -0
- package/packages/builder-api/src/main.ts +16 -0
- package/packages/builder-api/tsconfig.json +15 -0
- package/scripts/check-builder-api-architecture-grep.js +79 -0
- package/scripts/docker_image_content_gate.js +47 -0
- package/scripts/docker_image_content_gate.sh +5 -0
- package/scripts/export-builder-api-evidence.js +262 -0
- package/scripts/lib/builder-api-docker-staging-copy.js +60 -0
- package/scripts/lib/builder-api-docker-staging-core.js +183 -0
- package/scripts/lib/docker-image-content-gate-core.js +166 -0
- package/scripts/lib/plan-actor.js +109 -0
- package/scripts/lib/plan-config.js +20 -0
- package/scripts/lib/plan-gates.js +154 -0
- package/scripts/lib/plan-meta.js +104 -0
- package/scripts/lib/plan-parse.js +162 -0
- package/scripts/lib/plan-prevalidate-gates.js +337 -0
- package/scripts/lib/plan-run-core.js +125 -0
- package/scripts/lib/plan-run-report.js +119 -0
- package/scripts/plan-approve.js +24 -0
- package/scripts/plan-archive.js +49 -0
- package/scripts/plan-run.js +13 -0
- package/scripts/plan-set-actor.js +21 -0
- package/scripts/plan-validate.js +80 -0
- package/scripts/pnpm/af.mjs +110 -0
- package/scripts/pnpm/check-quiet.mjs +32 -0
- package/scripts/pnpm/dev-install.mjs +29 -0
- package/scripts/pnpm/dev-reload.mjs +18 -0
- package/scripts/pnpm/help.mjs +55 -0
- package/scripts/pnpm/lib/dev-reload-core.mjs +189 -0
- package/scripts/pnpm/lib/dev-reload-log-capture.mjs +67 -0
- package/scripts/pnpm/lib/dev-reload-log-utils.mjs +32 -0
- package/scripts/pnpm/lib/resolve-aifabrix-bin.mjs +124 -0
- package/scripts/pnpm/lib/resolve-app-url.mjs +183 -0
- package/scripts/pnpm/lib/spinner.mjs +42 -0
- package/scripts/stage_builder_api_for_docker.js +65 -0
- package/scripts/sync-builder-api-template.js +44 -0
- package/templates/README.md +3 -0
- package/templates/applications/builder-api/Dockerfile +38 -0
- package/templates/applications/builder-api/application.yaml +75 -0
- package/templates/applications/builder-api/env.template +48 -0
- package/templates/applications/dataplane/application.yaml +27 -5
- package/templates/applications/dataplane/env.template +38 -15
- package/templates/applications/dataplane/rbac.yaml +85 -3
- package/templates/applications/miso-controller/application.yaml +10 -1
- package/templates/applications/miso-controller/env.template +11 -10
- package/templates/applications/miso-controller/rbac.yaml +72 -0
- package/templates/channels/README.md +18 -0
- package/templates/channels/ai-fabrix-icon.jpg +0 -0
- package/templates/channels/chatgpt/install.template.md.hbs +21 -24
- package/templates/channels/chatgpt/integration/README.md +11 -0
- package/templates/channels/chatgpt/integration/application.json +15 -0
- package/templates/channels/chatgpt/integration/chatgpt-system.json +29 -0
- package/templates/channels/chatgpt/integration/env.template +4 -0
- package/templates/channels/microsoft-copilot/install.template.md.hbs +20 -25
- package/templates/channels/microsoft-copilot/integration/README.md +11 -0
- package/templates/channels/microsoft-copilot/integration/application.json +15 -0
- package/templates/channels/microsoft-copilot/integration/env.template +6 -0
- package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +34 -0
- package/templates/channels/slack/install.template.md.hbs +48 -18
- package/templates/channels/slack/integration/README.md +38 -0
- package/templates/channels/slack/integration/application.json +18 -0
- package/templates/channels/slack/integration/env.template +29 -0
- package/templates/channels/slack/integration/slack-datasource-conversations.json +226 -0
- package/templates/channels/slack/integration/slack-datasource-messages.json +269 -0
- package/templates/channels/slack/integration/slack-system.json +144 -0
- package/templates/channels/slack/manifest.template.json.hbs +20 -10
- package/templates/channels/teams-bot/install.template.md.hbs +31 -17
- package/templates/channels/teams-bot/integration/README.md +18 -0
- package/templates/channels/teams-bot/integration/application.json +17 -0
- package/templates/channels/teams-bot/integration/env.template +5 -0
- package/templates/channels/teams-bot/integration/teams-bot-system.json +55 -0
- package/templates/channels/teams-bot/manifest.template.json.hbs +27 -0
- package/templates/channels/web-embed/install.template.md.hbs +16 -26
- package/templates/channels/web-embed/integration/README.md +11 -0
- package/templates/channels/web-embed/integration/application.json +15 -0
- package/templates/channels/web-embed/integration/env.template +4 -0
- package/templates/channels/web-embed/integration/web-embed-system.json +29 -0
- package/templates/openapi/redoc_page.html +86 -0
- package/templates/python/docker-compose.hbs +11 -0
- package/templates/python/requirements.txt +2 -2
- package/templates/typescript/docker-compose.hbs +11 -0
- 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, '&')
|
|
56
|
+
.replace(/"/g, '"')
|
|
57
|
+
.replace(/</g, '<');
|
|
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
|
+
};
|