@aifabrix/builder 2.49.2 → 2.50.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/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/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.api.js +172 -0
- package/lib/api/external-systems.api.js +8 -2
- package/lib/api/resource-types.api.js +1 -0
- package/lib/api/types/enterprise-knowledge.types.js +46 -0
- package/lib/api/types/evidence.types.js +67 -0
- package/lib/api/types/resource-types.types.js +2 -0
- 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 +37 -88
- 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/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 +16 -4
- 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 +27 -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 +38 -125
- 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 +7 -2
- 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-repair.js +26 -7
- 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 +163 -0
- package/lib/commands/deploy-gate-orchestrator.js +322 -0
- package/lib/commands/dev-cli-handlers.js +1 -59
- 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 +3 -1
- package/lib/commands/enterprise-knowledge.js +284 -0
- package/lib/commands/evidence-cli-leaves.js +250 -0
- package/lib/commands/evidence.js +51 -0
- package/lib/commands/governance-cli-shared.js +2 -2
- package/lib/commands/governance-command-action.js +2 -2
- 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 +19 -2
- 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 +65 -26
- package/lib/commands/run-post-publish-data-sync.js +68 -0
- package/lib/commands/setup-modes.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/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 +2 -2
- 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/secrets-env-content.js +10 -4
- package/lib/core/secrets-env-write.js +2 -13
- package/lib/datasource/agent-trust-run.js +3 -3
- 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/index.js +17 -2
- package/lib/generator/wizard.js +3 -36
- 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 +44 -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 +98 -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 +205 -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 +476 -0
- package/lib/programmatic/openapi-schema-descriptions-certify.js +139 -0
- package/lib/programmatic/openapi-schema-descriptions-core.js +159 -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 +93 -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 +54 -0
- package/lib/programmatic/run-template-workspace.js +61 -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/resource-type-file.js +22 -0
- package/lib/schema/external-datasource.schema.json +161 -1
- package/lib/schema/external-system.schema.json +244 -118
- package/lib/schema/flag-map-validation-run.json +3 -0
- package/lib/schema/type/credential-field-registry.json +2 -2
- package/lib/schema/type/document-storage.json +9 -0
- package/lib/utils/agent-trust-run-display.js +1 -1
- package/lib/utils/app-path-resolve.js +168 -0
- package/lib/utils/authentication-env-template.js +222 -0
- package/lib/utils/cli-sync-options.js +7 -11
- package/lib/utils/cli-utils.js +4 -0
- 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-init-ssh-merge.js +165 -23
- package/lib/utils/dev-pin-share-instructions.js +110 -0
- package/lib/utils/dev-ssh-config-helper.js +177 -33
- package/lib/utils/enterprise-knowledge-paths.js +142 -0
- package/lib/utils/env-copy.js +2 -1
- package/lib/utils/env-dotenv-format.js +103 -0
- package/lib/utils/external-env-template.js +4 -1
- package/lib/utils/external-system-display.js +5 -1
- package/lib/utils/external-system-readiness-compact-blocks.js +221 -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/help-builder.js +6 -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/integration-path-resolve.js +112 -0
- package/lib/utils/paths-reload-source.js +148 -0
- package/lib/utils/paths-system-builder-keys.js +25 -0
- package/lib/utils/paths.js +151 -26
- 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/upload-sync-options.js +4 -0
- 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 +426 -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/package.json +46 -29
- 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 +326 -0
- package/scripts/lib/plan-run-core.js +125 -0
- package/scripts/lib/plan-run-report.js +108 -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 +1 -1
- package/templates/applications/dataplane/env.template +10 -6
- package/templates/applications/dataplane/rbac.yaml +21 -1
- package/templates/applications/miso-controller/application.yaml +1 -1
- package/templates/applications/miso-controller/env.template +1 -3
- 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 +86 -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 +1 -1
- package/templates/typescript/docker-compose.hbs +11 -0
- package/lib/certification/cli-cert-sync-skip.js +0 -21
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section registry extract/inject for governed manifest editing (plan 154.4).
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview sectionKey enum, subtree IO, schema fragments
|
|
5
|
+
* @author AI Fabrix Team
|
|
6
|
+
* @version 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const fs = require('fs');
|
|
12
|
+
const path = require('path');
|
|
13
|
+
const {
|
|
14
|
+
loadExternalSystemSchema,
|
|
15
|
+
loadExternalDataSourceSchema
|
|
16
|
+
} = require('../utils/schema-loader');
|
|
17
|
+
const { SECTION_DEFINITIONS } = require('./manifest-section-registry-data');
|
|
18
|
+
|
|
19
|
+
const SCHEMA_DIR = path.join(__dirname, '..', 'schema');
|
|
20
|
+
|
|
21
|
+
/** @type {Object|null} */
|
|
22
|
+
let systemSchemaDoc = null;
|
|
23
|
+
/** @type {Object|null} */
|
|
24
|
+
let datasourceSchemaDoc = null;
|
|
25
|
+
|
|
26
|
+
function getSystemSchemaDoc() {
|
|
27
|
+
if (!systemSchemaDoc) {
|
|
28
|
+
systemSchemaDoc = JSON.parse(fs.readFileSync(path.join(SCHEMA_DIR, 'external-system.schema.json'), 'utf8'));
|
|
29
|
+
}
|
|
30
|
+
return systemSchemaDoc;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function getDatasourceSchemaDoc() {
|
|
34
|
+
if (!datasourceSchemaDoc) {
|
|
35
|
+
datasourceSchemaDoc = JSON.parse(
|
|
36
|
+
fs.readFileSync(path.join(SCHEMA_DIR, 'external-datasource.schema.json'), 'utf8')
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
return datasourceSchemaDoc;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @param {string} sectionKey
|
|
44
|
+
* @returns {import('./manifest-section-registry-data').SectionDefinition}
|
|
45
|
+
*/
|
|
46
|
+
function getSectionDefinition(sectionKey) {
|
|
47
|
+
const def = SECTION_DEFINITIONS[sectionKey];
|
|
48
|
+
if (!def) {
|
|
49
|
+
const err = new Error(`Unknown sectionKey: ${sectionKey}`);
|
|
50
|
+
err.statusCode = 404;
|
|
51
|
+
throw err;
|
|
52
|
+
}
|
|
53
|
+
return def;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @param {string} [targetFilter]
|
|
58
|
+
* @returns {string[]}
|
|
59
|
+
*/
|
|
60
|
+
function listSectionKeys(targetFilter) {
|
|
61
|
+
return Object.keys(SECTION_DEFINITIONS).filter((key) => {
|
|
62
|
+
if (!targetFilter) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
return SECTION_DEFINITIONS[key].target === targetFilter;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @param {Object} doc
|
|
71
|
+
* @param {string} dottedPath
|
|
72
|
+
* @returns {*}
|
|
73
|
+
*/
|
|
74
|
+
function getPathValue(doc, dottedPath) {
|
|
75
|
+
const parts = dottedPath.split('.');
|
|
76
|
+
let current = doc;
|
|
77
|
+
for (const part of parts) {
|
|
78
|
+
if (current === null || current === undefined || typeof current !== 'object') {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
current = current[part];
|
|
82
|
+
}
|
|
83
|
+
return current;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @param {Object} doc
|
|
88
|
+
* @param {string} dottedPath
|
|
89
|
+
* @param {*} value
|
|
90
|
+
*/
|
|
91
|
+
function setPathValue(doc, dottedPath, value) {
|
|
92
|
+
const parts = dottedPath.split('.');
|
|
93
|
+
let current = doc;
|
|
94
|
+
for (let i = 0; i < parts.length - 1; i += 1) {
|
|
95
|
+
const part = parts[i];
|
|
96
|
+
if (current[part] === null || current[part] === undefined || typeof current[part] !== 'object') {
|
|
97
|
+
current[part] = {};
|
|
98
|
+
}
|
|
99
|
+
current = current[part];
|
|
100
|
+
}
|
|
101
|
+
current[parts[parts.length - 1]] = value;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @param {Object} doc
|
|
106
|
+
* @param {import('./manifest-section-registry-data').SectionDefinition} def
|
|
107
|
+
* @returns {Object}
|
|
108
|
+
*/
|
|
109
|
+
function extractSectionValue(doc, def) {
|
|
110
|
+
if (def.paths.length === 1) {
|
|
111
|
+
const value = getPathValue(doc, def.paths[0]);
|
|
112
|
+
return value === undefined ? {} : value;
|
|
113
|
+
}
|
|
114
|
+
/** @type {Record<string, *>} */
|
|
115
|
+
const result = {};
|
|
116
|
+
for (const pathKey of def.paths) {
|
|
117
|
+
const leaf = pathKey.includes('.') ? pathKey.split('.').pop() : pathKey;
|
|
118
|
+
const value = getPathValue(doc, pathKey);
|
|
119
|
+
if (value !== undefined) {
|
|
120
|
+
result[leaf] = value;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* @param {Object} doc
|
|
128
|
+
* @param {import('./manifest-section-registry-data').SectionDefinition} def
|
|
129
|
+
* @param {Object} sectionValue
|
|
130
|
+
* @param {'merge' | 'replace'} mode
|
|
131
|
+
*/
|
|
132
|
+
function injectSectionValue(doc, def, sectionValue, mode) {
|
|
133
|
+
if (def.paths.length === 1) {
|
|
134
|
+
const pathKey = def.paths[0];
|
|
135
|
+
if (mode === 'replace') {
|
|
136
|
+
setPathValue(doc, pathKey, sectionValue);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const existing = getPathValue(doc, pathKey);
|
|
140
|
+
const merged =
|
|
141
|
+
existing && typeof existing === 'object' && !Array.isArray(existing)
|
|
142
|
+
? { ...existing, ...sectionValue }
|
|
143
|
+
: sectionValue;
|
|
144
|
+
setPathValue(doc, pathKey, merged);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
for (const pathKey of def.paths) {
|
|
148
|
+
const leaf = pathKey.includes('.') ? pathKey.split('.').pop() : pathKey;
|
|
149
|
+
if (!(leaf in sectionValue)) {
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
if (mode === 'replace') {
|
|
153
|
+
setPathValue(doc, pathKey, sectionValue[leaf]);
|
|
154
|
+
} else {
|
|
155
|
+
const existing = getPathValue(doc, pathKey);
|
|
156
|
+
const incoming = sectionValue[leaf];
|
|
157
|
+
const merged =
|
|
158
|
+
existing && typeof existing === 'object' && !Array.isArray(existing) && typeof incoming === 'object'
|
|
159
|
+
? { ...existing, ...incoming }
|
|
160
|
+
: incoming;
|
|
161
|
+
setPathValue(doc, pathKey, merged);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* @param {import('./manifest-section-registry-data').ManifestTarget} target
|
|
168
|
+
* @param {string} pathKey
|
|
169
|
+
* @returns {Object}
|
|
170
|
+
*/
|
|
171
|
+
function buildSchemaFragment(target, pathKey) {
|
|
172
|
+
const root = target === 'system' ? getSystemSchemaDoc() : getDatasourceSchemaDoc();
|
|
173
|
+
const topKey = pathKey.split('.')[0];
|
|
174
|
+
const prop = root.properties && root.properties[topKey];
|
|
175
|
+
if (!prop) {
|
|
176
|
+
return { type: 'object' };
|
|
177
|
+
}
|
|
178
|
+
if (pathKey.includes('.')) {
|
|
179
|
+
return { type: 'object' };
|
|
180
|
+
}
|
|
181
|
+
return JSON.parse(JSON.stringify(prop));
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* @param {import('./manifest-section-registry-data').ManifestTarget} target
|
|
186
|
+
* @param {Object} doc
|
|
187
|
+
* @returns {{ valid: boolean, errors: Object[] }}
|
|
188
|
+
*/
|
|
189
|
+
function validateManifestDocument(target, doc) {
|
|
190
|
+
const validate = target === 'system' ? loadExternalSystemSchema() : loadExternalDataSourceSchema();
|
|
191
|
+
const valid = validate(doc);
|
|
192
|
+
return { valid: !!valid, errors: validate.errors || [] };
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
module.exports = {
|
|
196
|
+
SECTION_DEFINITIONS,
|
|
197
|
+
getSectionDefinition,
|
|
198
|
+
listSectionKeys,
|
|
199
|
+
extractSectionValue,
|
|
200
|
+
injectSectionValue,
|
|
201
|
+
buildSchemaFragment,
|
|
202
|
+
validateManifestDocument,
|
|
203
|
+
getPathValue,
|
|
204
|
+
setPathValue
|
|
205
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mount builder-api Node router on an Express instance (Nest adapter).
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview Shared HTTP bridge for spike server and Nest bootstrap
|
|
5
|
+
* @author AI Fabrix Team
|
|
6
|
+
* @version 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const { handleRequest, BASE } = require('./builder-api-server');
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @param {import('express').Express} expressApp
|
|
15
|
+
*/
|
|
16
|
+
function wireBuilderApiHttpBridge(expressApp) {
|
|
17
|
+
expressApp.use((req, res, next) => {
|
|
18
|
+
const pathname = (req.url || '/').split('?')[0];
|
|
19
|
+
if (pathname !== BASE && !pathname.startsWith(`${BASE}/`)) {
|
|
20
|
+
next();
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
handleRequest(req, res).catch((err) => {
|
|
24
|
+
res.statusCode = 500;
|
|
25
|
+
res.setHeader('Content-Type', 'application/json');
|
|
26
|
+
res.end(JSON.stringify({ error: err.message || 'Internal error' }));
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
module.exports = {
|
|
32
|
+
wireBuilderApiHttpBridge,
|
|
33
|
+
BASE
|
|
34
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI component schemas for builder-api (frozen models + response envelopes).
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview Merges request/result schemas; no additionalProperties: true
|
|
5
|
+
* @author AI Fabrix Team
|
|
6
|
+
* @version 1.1.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const { enrichOpenApiComponentSchemas } = require('./openapi-description-enricher');
|
|
12
|
+
const { buildSuccessEnvelopeSchema } = require('./openapi-schema-helpers');
|
|
13
|
+
const { OPENAPI_REQUEST_SCHEMAS } = require('./openapi-request-schemas');
|
|
14
|
+
const { OPENAPI_RESULT_SCHEMAS } = require('./openapi-result-schemas');
|
|
15
|
+
const {
|
|
16
|
+
OPENAPI_MANIFEST_REQUEST_SCHEMAS,
|
|
17
|
+
OPENAPI_MANIFEST_RESULT_SCHEMAS
|
|
18
|
+
} = require('./openapi-manifest-schemas');
|
|
19
|
+
|
|
20
|
+
const RESPONSE_ENVELOPES = [
|
|
21
|
+
['ListSystemsResponse', 'ListSystemsData'],
|
|
22
|
+
['CreateSystemResponse', 'CreateSystemData'],
|
|
23
|
+
['SystemManifestResponse', 'SystemManifestData'],
|
|
24
|
+
['DeleteSystemResponse', 'DeleteSystemData'],
|
|
25
|
+
['WizardRunResponse', 'WizardRunData'],
|
|
26
|
+
['RepairResultResponse', 'RepairResultData'],
|
|
27
|
+
['ValidateResultResponse', 'ValidateResultData'],
|
|
28
|
+
['PreviewUploadResponse', 'PreviewUploadData'],
|
|
29
|
+
['UploadResultResponse', 'UploadResultData'],
|
|
30
|
+
['TestResultResponse', 'TestResultData'],
|
|
31
|
+
['CertifyResultResponse', 'CertifyResultData'],
|
|
32
|
+
['LifecycleReportResponse', 'LifecycleReportData'],
|
|
33
|
+
['EnterpriseMcpInvocationResponse', 'EnterpriseMcpInvocationData'],
|
|
34
|
+
['WorkspaceStatusResponse', 'WorkspaceStatusData'],
|
|
35
|
+
['RepositoryStatusResponse', 'RepositoryStatusData'],
|
|
36
|
+
['HealthResponse', 'HealthData'],
|
|
37
|
+
['ReadyResponse', 'ReadyData'],
|
|
38
|
+
['EmptyResultResponse', 'EmptyResultData'],
|
|
39
|
+
['ManifestSectionViewResponse', 'ManifestSectionViewData'],
|
|
40
|
+
['ManifestPatchResultResponse', 'ManifestPatchResultData'],
|
|
41
|
+
['ManifestSectionsListResponse', 'ManifestSectionsListData'],
|
|
42
|
+
['ManifestRepairResultResponse', 'ManifestRepairResultData']
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @returns {Record<string, Object>}
|
|
47
|
+
*/
|
|
48
|
+
function buildOpenApiComponentSchemas() {
|
|
49
|
+
const envelopes = {};
|
|
50
|
+
for (const [responseName, dataName] of RESPONSE_ENVELOPES) {
|
|
51
|
+
envelopes[responseName] = buildSuccessEnvelopeSchema(dataName);
|
|
52
|
+
}
|
|
53
|
+
return enrichOpenApiComponentSchemas({
|
|
54
|
+
...OPENAPI_REQUEST_SCHEMAS,
|
|
55
|
+
...OPENAPI_MANIFEST_REQUEST_SCHEMAS,
|
|
56
|
+
...OPENAPI_RESULT_SCHEMAS,
|
|
57
|
+
...OPENAPI_MANIFEST_RESULT_SCHEMAS,
|
|
58
|
+
EmptyResultData: { type: 'object', properties: {}, additionalProperties: false },
|
|
59
|
+
...envelopes
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
module.exports = {
|
|
64
|
+
buildOpenApiComponentSchemas,
|
|
65
|
+
buildSuccessEnvelopeSchema,
|
|
66
|
+
OPENAPI_REQUEST_SCHEMAS,
|
|
67
|
+
OPENAPI_RESULT_SCHEMAS
|
|
68
|
+
};
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply MCP-friendly descriptions to frozen OpenAPI component schemas.
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview Merges description catalogs and wraps $ref props for OAS 3.0
|
|
5
|
+
* @author AI Fabrix Team
|
|
6
|
+
* @version 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const { CORE_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-core');
|
|
12
|
+
const { OPERATIONS_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-operations');
|
|
13
|
+
const { CERTIFY_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-certify');
|
|
14
|
+
const { MANIFEST_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-manifest');
|
|
15
|
+
const { MCP_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-mcp');
|
|
16
|
+
const { HELP_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-help');
|
|
17
|
+
|
|
18
|
+
/** @type {Record<string, Object>} */
|
|
19
|
+
const MERGED_SCHEMA_DESCRIPTIONS = {
|
|
20
|
+
...CORE_SCHEMA_DESCRIPTIONS,
|
|
21
|
+
...OPERATIONS_SCHEMA_DESCRIPTIONS,
|
|
22
|
+
...CERTIFY_SCHEMA_DESCRIPTIONS,
|
|
23
|
+
...MANIFEST_SCHEMA_DESCRIPTIONS,
|
|
24
|
+
...MCP_SCHEMA_DESCRIPTIONS,
|
|
25
|
+
...HELP_SCHEMA_DESCRIPTIONS
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @param {Object} propSchema
|
|
30
|
+
* @param {string} description
|
|
31
|
+
* @returns {Object}
|
|
32
|
+
*/
|
|
33
|
+
function withPropertyDescription(propSchema, description) {
|
|
34
|
+
if (!description) {
|
|
35
|
+
return propSchema;
|
|
36
|
+
}
|
|
37
|
+
if (propSchema.$ref) {
|
|
38
|
+
return { description, allOf: [propSchema] };
|
|
39
|
+
}
|
|
40
|
+
return { ...propSchema, description };
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @param {Object} propSchema
|
|
45
|
+
* @param {Object} propDesc
|
|
46
|
+
*/
|
|
47
|
+
function enrichArrayProperty(propSchema, propDesc) {
|
|
48
|
+
if (typeof propDesc._schema === 'string') {
|
|
49
|
+
propSchema.description = propDesc._schema;
|
|
50
|
+
}
|
|
51
|
+
enrichSchemaNode(propSchema.items, propDesc._arrayItems);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @param {Object} schema
|
|
56
|
+
* @param {string} prop
|
|
57
|
+
* @param {string|Object} propDesc
|
|
58
|
+
*/
|
|
59
|
+
function enrichSchemaProperty(schema, prop, propDesc) {
|
|
60
|
+
const propSchema = schema.properties[prop];
|
|
61
|
+
if (!propSchema) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (typeof propDesc === 'string') {
|
|
65
|
+
schema.properties[prop] = withPropertyDescription(propSchema, propDesc);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (typeof propDesc !== 'object') {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (propDesc._arrayItems && propSchema.type === 'array' && propSchema.items) {
|
|
72
|
+
enrichArrayProperty(propSchema, propDesc);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
enrichSchemaNode(propSchema, propDesc);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @param {Object} schema
|
|
80
|
+
* @param {Object} descNode
|
|
81
|
+
*/
|
|
82
|
+
function enrichSchemaNode(schema, descNode) {
|
|
83
|
+
if (!schema || !descNode || typeof descNode !== 'object') {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (typeof descNode._schema === 'string') {
|
|
87
|
+
schema.description = descNode._schema;
|
|
88
|
+
}
|
|
89
|
+
if (!schema.properties) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
for (const [prop, propDesc] of Object.entries(descNode)) {
|
|
93
|
+
if (prop === '_schema') {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
enrichSchemaProperty(schema, prop, propDesc);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @param {Record<string, Object>} schemas
|
|
102
|
+
* @returns {Record<string, Object>}
|
|
103
|
+
*/
|
|
104
|
+
function enrichOpenApiComponentSchemas(schemas) {
|
|
105
|
+
for (const [name, descNode] of Object.entries(MERGED_SCHEMA_DESCRIPTIONS)) {
|
|
106
|
+
if (schemas[name]) {
|
|
107
|
+
enrichSchemaNode(schemas[name], descNode);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return schemas;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
module.exports = {
|
|
114
|
+
enrichOpenApiComponentSchemas,
|
|
115
|
+
MERGED_SCHEMA_DESCRIPTIONS,
|
|
116
|
+
withPropertyDescription
|
|
117
|
+
};
|
|
@@ -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
|
+
};
|