@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
package/lib/cli/index.js
CHANGED
|
@@ -23,15 +23,21 @@ const { setupAppCommands: setupAppManagementCommands } = require('../commands/ap
|
|
|
23
23
|
const { setupDatasourceCommands } = require('../commands/datasource');
|
|
24
24
|
const { setupDimensionCommands } = require('../commands/dimension');
|
|
25
25
|
const { setupResourceTypeCommands } = require('../commands/resource-type');
|
|
26
|
+
const { setupRoleCommands } = require('../commands/role');
|
|
27
|
+
const { setupEvidenceKindCommands } = require('../commands/evidence-kind');
|
|
28
|
+
const { setupEnterpriseKnowledgeCommands } = require('../commands/enterprise-knowledge');
|
|
26
29
|
const { setupIdentityCommands } = require('../commands/identity');
|
|
27
30
|
const { setupProtectionCommands } = require('../commands/protection');
|
|
31
|
+
const { setupEvidenceCommands } = require('../commands/evidence');
|
|
28
32
|
const { setupCredentialDeploymentCommands } = require('./setup-credential-deployment');
|
|
29
33
|
const { setupIntegrationClientCommands } = require('./setup-integration-client');
|
|
30
34
|
const { setupPlatformCommands } = require('./setup-platform');
|
|
31
35
|
const { setupCertificationCommands } = require('./setup-certification-commands');
|
|
32
36
|
const { setupGovernanceCommands } = require('../commands/governance');
|
|
33
37
|
const { setupChannelCommands } = require('../commands/channel');
|
|
38
|
+
const { setupManifestCommands } = require('../commands/manifest');
|
|
34
39
|
const { setupNpmCommands } = require('./setup-npm');
|
|
40
|
+
const { setupListCommand } = require('./setup-list');
|
|
35
41
|
|
|
36
42
|
/**
|
|
37
43
|
* Dev, secrets, parameters, and platform commands (keeps setupCommands under statement limit).
|
|
@@ -46,10 +52,10 @@ function setupDevAndPlatformCommands(program) {
|
|
|
46
52
|
}
|
|
47
53
|
|
|
48
54
|
/**
|
|
49
|
-
*
|
|
50
|
-
* @param {Command} program
|
|
55
|
+
* Core platform and integration CLI command groups.
|
|
56
|
+
* @param {import('commander').Command} program
|
|
51
57
|
*/
|
|
52
|
-
function
|
|
58
|
+
function setupCoreCliCommands(program) {
|
|
53
59
|
setupInfraCommands(program);
|
|
54
60
|
setupAuthCommands(program);
|
|
55
61
|
setupAppCommands(program);
|
|
@@ -59,14 +65,36 @@ function setupCommands(program) {
|
|
|
59
65
|
setupAppManagementCommands(program);
|
|
60
66
|
setupChannelCommands(program);
|
|
61
67
|
setupDatasourceCommands(program);
|
|
68
|
+
setupManifestCommands(program);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Extended catalog and policy CLI command groups.
|
|
73
|
+
* @param {import('commander').Command} program
|
|
74
|
+
*/
|
|
75
|
+
function setupExtendedCliCommands(program) {
|
|
62
76
|
setupDimensionCommands(program);
|
|
63
77
|
setupResourceTypeCommands(program);
|
|
78
|
+
setupRoleCommands(program);
|
|
79
|
+
setupEvidenceKindCommands(program);
|
|
80
|
+
setupEnterpriseKnowledgeCommands(program);
|
|
64
81
|
setupIdentityCommands(program);
|
|
65
82
|
setupProtectionCommands(program);
|
|
83
|
+
setupEvidenceCommands(program);
|
|
66
84
|
setupUtilityCommands(program);
|
|
85
|
+
setupListCommand(program);
|
|
67
86
|
setupCredentialDeploymentCommands(program);
|
|
68
87
|
setupIntegrationClientCommands(program);
|
|
69
88
|
setupExternalSystemCommands(program);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Sets up all CLI commands on the Commander program instance
|
|
93
|
+
* @param {Command} program - Commander program instance
|
|
94
|
+
*/
|
|
95
|
+
function setupCommands(program) {
|
|
96
|
+
setupCoreCliCommands(program);
|
|
97
|
+
setupExtendedCliCommands(program);
|
|
70
98
|
setupDevAndPlatformCommands(program);
|
|
71
99
|
}
|
|
72
100
|
|
package/lib/cli/infra-guided.js
CHANGED
|
@@ -15,6 +15,7 @@ const infra = require('../infrastructure');
|
|
|
15
15
|
const { execWithDockerEnv } = require('../utils/docker-exec');
|
|
16
16
|
const { getLogLevel, passesLevelFilter } = require('../commands/app-logs');
|
|
17
17
|
const { handleLogin } = require('../commands/login');
|
|
18
|
+
const { handleUpBuilderApi } = require('../commands/up-builder-api');
|
|
18
19
|
const {
|
|
19
20
|
resolveGuidedAuthControllerUrl,
|
|
20
21
|
runGuidedAuthStep,
|
|
@@ -309,7 +310,10 @@ async function runGuidedUpPlatform(options, handleUpMiso, handleUpDataplane, han
|
|
|
309
310
|
await runGuidedAuthStep(handleLogin, authOpts, { startSpinner, stopSpinnerSuccess });
|
|
310
311
|
const controllerUrl = await resolveGuidedAuthControllerUrl(authOpts);
|
|
311
312
|
await runGuidedDataplaneInstallPhase(options, handleUpDataplane, handleLogin, controllerUrl);
|
|
312
|
-
|
|
313
|
+
const baSpin = startSpinner('Starting builder-api...');
|
|
314
|
+
await withMutedLogger(() => handleUpBuilderApi({ ...options, platformInstall: true }));
|
|
315
|
+
stopSpinnerSuccess(baSpin, 'Builder API ready');
|
|
316
|
+
await validateAppErrorLogs(['miso-controller', 'dataplane', 'builder-api']);
|
|
313
317
|
await logPlatformReadyFooter();
|
|
314
318
|
}
|
|
315
319
|
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External-system create option normalization for setup-app.js.
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview Headless external create CLI helpers
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const VALID_ENTITY_TYPES = ['recordStorage', 'documentStorage', 'vectorStore', 'messageService', 'none'];
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Normalize options for external system creation
|
|
11
|
+
* @param {Object} options - Raw CLI options
|
|
12
|
+
* @returns {Object} Normalized options
|
|
13
|
+
*/
|
|
14
|
+
function normalizeExternalOptions(options) {
|
|
15
|
+
const normalized = { ...options };
|
|
16
|
+
if (options.displayName) normalized.systemDisplayName = options.displayName;
|
|
17
|
+
if (options.description) normalized.systemDescription = options.description;
|
|
18
|
+
if (options.systemType) normalized.systemType = options.systemType;
|
|
19
|
+
if (options.authType) normalized.authType = options.authType;
|
|
20
|
+
if (options.entityType) {
|
|
21
|
+
if (!VALID_ENTITY_TYPES.includes(options.entityType)) {
|
|
22
|
+
throw new Error(`Invalid --entity-type. Must be one of: ${VALID_ENTITY_TYPES.join(', ')}`);
|
|
23
|
+
}
|
|
24
|
+
normalized.entityType = options.entityType;
|
|
25
|
+
}
|
|
26
|
+
if (options.datasources !== undefined) {
|
|
27
|
+
const parsedCount = parseInt(options.datasources, 10);
|
|
28
|
+
if (Number.isNaN(parsedCount) || parsedCount < 1 || parsedCount > 10) {
|
|
29
|
+
throw new Error('Datasources count must be a number between 1 and 10');
|
|
30
|
+
}
|
|
31
|
+
normalized.datasourceCount = parsedCount;
|
|
32
|
+
}
|
|
33
|
+
if (options.controller) {
|
|
34
|
+
normalized.controller = true;
|
|
35
|
+
normalized.controllerUrl = options.controller;
|
|
36
|
+
}
|
|
37
|
+
return normalized;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Whether normalized options include all external CLI fields for headless create.
|
|
42
|
+
* @param {Object} normalized - Normalized external create options
|
|
43
|
+
* @returns {boolean}
|
|
44
|
+
*/
|
|
45
|
+
function hasFullExternalCliOptions(normalized) {
|
|
46
|
+
return Boolean(
|
|
47
|
+
normalized.systemKey &&
|
|
48
|
+
normalized.systemDisplayName &&
|
|
49
|
+
normalized.systemDescription &&
|
|
50
|
+
normalized.systemType &&
|
|
51
|
+
normalized.authType &&
|
|
52
|
+
normalized.entityType &&
|
|
53
|
+
normalized.datasourceCount
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Map positional systemKey and apply headless defaults for external create.
|
|
59
|
+
* @param {string} appName - Positional appKey or systemKey from CLI
|
|
60
|
+
* @param {Object} options - Raw CLI options
|
|
61
|
+
* @returns {Object} Normalized options ready for createApp
|
|
62
|
+
*/
|
|
63
|
+
function prepareExternalCreateOptions(appName, options) {
|
|
64
|
+
const normalized = normalizeExternalOptions(options);
|
|
65
|
+
const isExternalType = options.type === 'external' || !options.type;
|
|
66
|
+
|
|
67
|
+
if (isExternalType && appName) {
|
|
68
|
+
normalized.systemKey = appName;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (isExternalType && hasFullExternalCliOptions(normalized)) {
|
|
72
|
+
if (!Object.prototype.hasOwnProperty.call(normalized, 'github')) {
|
|
73
|
+
normalized.github = false;
|
|
74
|
+
}
|
|
75
|
+
if (!Object.prototype.hasOwnProperty.call(normalized, 'controller')) {
|
|
76
|
+
normalized.controller = false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return normalized;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Validate required options for non-interactive external creation
|
|
85
|
+
* @param {Object} normalizedOptions - Normalized options
|
|
86
|
+
* @throws {Error} If required options are missing
|
|
87
|
+
*/
|
|
88
|
+
function validateNonInteractiveExternalOptions(normalizedOptions) {
|
|
89
|
+
const missing = [];
|
|
90
|
+
if (!normalizedOptions.systemDisplayName) missing.push('--display-name');
|
|
91
|
+
if (!normalizedOptions.systemDescription) missing.push('--description');
|
|
92
|
+
if (!normalizedOptions.systemType) missing.push('--system-type');
|
|
93
|
+
if (!normalizedOptions.authType) missing.push('--auth-type');
|
|
94
|
+
if (!normalizedOptions.entityType) missing.push('--entity-type');
|
|
95
|
+
if (!normalizedOptions.datasourceCount) missing.push('--datasources');
|
|
96
|
+
if (missing.length > 0) {
|
|
97
|
+
throw new Error(`Missing required options for non-interactive external create: ${missing.join(', ')}`);
|
|
98
|
+
}
|
|
99
|
+
if (!Object.prototype.hasOwnProperty.call(normalizedOptions, 'github')) {
|
|
100
|
+
normalizedOptions.github = false;
|
|
101
|
+
}
|
|
102
|
+
if (!Object.prototype.hasOwnProperty.call(normalizedOptions, 'controller')) {
|
|
103
|
+
normalizedOptions.controller = false;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
module.exports = {
|
|
108
|
+
normalizeExternalOptions,
|
|
109
|
+
prepareExternalCreateOptions,
|
|
110
|
+
validateNonInteractiveExternalOptions
|
|
111
|
+
};
|
|
@@ -56,7 +56,7 @@ Examples:
|
|
|
56
56
|
Notes:
|
|
57
57
|
- To run E2E for one datasource, use:
|
|
58
58
|
aifabrix datasource test-e2e <datasourceKey>
|
|
59
|
-
- External integration: local system and datasource files are published to the dataplane before E2E (same as upload). Use --no-
|
|
59
|
+
- External integration: local system and datasource files are published to the dataplane before E2E (same as upload). Use --no-publish to exercise only config already deployed.
|
|
60
60
|
`;
|
|
61
61
|
|
|
62
62
|
const IDENTITY_HELP_AFTER = `
|
package/lib/cli/setup-app.js
CHANGED
|
@@ -13,6 +13,10 @@ const app = require('../app');
|
|
|
13
13
|
const logger = require('../utils/logger');
|
|
14
14
|
const { handleCommandError } = require('../utils/cli-utils');
|
|
15
15
|
const { setupInstallTestE2eLintCommands } = require('./setup-app.test-commands');
|
|
16
|
+
const {
|
|
17
|
+
prepareExternalCreateOptions,
|
|
18
|
+
validateNonInteractiveExternalOptions
|
|
19
|
+
} = require('./setup-app-external-create');
|
|
16
20
|
|
|
17
21
|
const CREATE_HELP_AFTER = `
|
|
18
22
|
Examples:
|
|
@@ -46,18 +50,20 @@ Examples:
|
|
|
46
50
|
$ aifabrix push myapp --registry $ACR_REGISTRY --tag $IMAGE_TAG
|
|
47
51
|
$ aifabrix deploy myapp \\
|
|
48
52
|
--client-id "$DEV_MISO_CLIENTID" \\
|
|
49
|
-
--client-secret "$DEV_MISO_CLIENTSECRET"
|
|
50
|
-
--no-poll
|
|
53
|
+
--client-secret "$DEV_MISO_CLIENTSECRET"
|
|
51
54
|
|
|
52
55
|
# CI/CD — external integration (after upload/tests; promote to controller)
|
|
53
56
|
$ aifabrix validate hubspot-demo
|
|
54
57
|
$ aifabrix upload hubspot-demo --probe
|
|
55
|
-
$ aifabrix deploy hubspot-demo --probe
|
|
58
|
+
$ aifabrix deploy hubspot-demo --probe -v
|
|
59
|
+
$ aifabrix deploy ek-sales --gate full --subject-email ops@example.com
|
|
56
60
|
|
|
57
61
|
Notes:
|
|
58
62
|
- Login or set MISO_CONTROLLER_URL + environment (aifabrix login / aifabrix auth).
|
|
59
63
|
- CI: register once (aifabrix app register <appKey>), store DEV_MISO_CLIENTID and DEV_MISO_CLIENTSECRET in pipeline secrets.
|
|
60
64
|
- upload = dataplane publish for dev iteration; deploy = controller validate + deploy (Azure or local Docker).
|
|
65
|
+
- Default output is a compact status card; use -v for expanded preflight and readiness detail.
|
|
66
|
+
- Controller deploy always polls to a terminal status (no --poll / --no-poll on this command).
|
|
61
67
|
- --repository-url overrides repo URL for pipeline validate (default: application.yaml repository.repositoryUrl).
|
|
62
68
|
`;
|
|
63
69
|
|
|
@@ -79,106 +85,6 @@ Notes:
|
|
|
79
85
|
- Use -t 0 (--tail 0) for the full buffered log; default is 100 lines.
|
|
80
86
|
`;
|
|
81
87
|
|
|
82
|
-
/**
|
|
83
|
-
* Normalize options for external system creation
|
|
84
|
-
* @param {Object} options - Raw CLI options
|
|
85
|
-
* @returns {Object} Normalized options
|
|
86
|
-
*/
|
|
87
|
-
const VALID_ENTITY_TYPES = ['recordStorage', 'documentStorage', 'vectorStore', 'messageService', 'none'];
|
|
88
|
-
|
|
89
|
-
function normalizeExternalOptions(options) {
|
|
90
|
-
const normalized = { ...options };
|
|
91
|
-
if (options.displayName) normalized.systemDisplayName = options.displayName;
|
|
92
|
-
if (options.description) normalized.systemDescription = options.description;
|
|
93
|
-
if (options.systemType) normalized.systemType = options.systemType;
|
|
94
|
-
if (options.authType) normalized.authType = options.authType;
|
|
95
|
-
if (options.entityType) {
|
|
96
|
-
if (!VALID_ENTITY_TYPES.includes(options.entityType)) {
|
|
97
|
-
throw new Error(`Invalid --entity-type. Must be one of: ${VALID_ENTITY_TYPES.join(', ')}`);
|
|
98
|
-
}
|
|
99
|
-
normalized.entityType = options.entityType;
|
|
100
|
-
}
|
|
101
|
-
if (options.datasources !== undefined) {
|
|
102
|
-
const parsedCount = parseInt(options.datasources, 10);
|
|
103
|
-
if (Number.isNaN(parsedCount) || parsedCount < 1 || parsedCount > 10) {
|
|
104
|
-
throw new Error('Datasources count must be a number between 1 and 10');
|
|
105
|
-
}
|
|
106
|
-
normalized.datasourceCount = parsedCount;
|
|
107
|
-
}
|
|
108
|
-
if (options.controller) {
|
|
109
|
-
normalized.controller = true;
|
|
110
|
-
normalized.controllerUrl = options.controller;
|
|
111
|
-
}
|
|
112
|
-
return normalized;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Whether normalized options include all external CLI fields for headless create.
|
|
117
|
-
* @param {Object} normalized - Normalized external create options
|
|
118
|
-
* @returns {boolean}
|
|
119
|
-
*/
|
|
120
|
-
function hasFullExternalCliOptions(normalized) {
|
|
121
|
-
return Boolean(
|
|
122
|
-
normalized.systemKey &&
|
|
123
|
-
normalized.systemDisplayName &&
|
|
124
|
-
normalized.systemDescription &&
|
|
125
|
-
normalized.systemType &&
|
|
126
|
-
normalized.authType &&
|
|
127
|
-
normalized.entityType &&
|
|
128
|
-
normalized.datasourceCount
|
|
129
|
-
);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Map positional systemKey and apply headless defaults for external create.
|
|
134
|
-
* @param {string} appName - Positional appKey or systemKey from CLI
|
|
135
|
-
* @param {Object} options - Raw CLI options
|
|
136
|
-
* @returns {Object} Normalized options ready for createApp
|
|
137
|
-
*/
|
|
138
|
-
function prepareExternalCreateOptions(appName, options) {
|
|
139
|
-
const normalized = normalizeExternalOptions(options);
|
|
140
|
-
const isExternalType = options.type === 'external' || !options.type;
|
|
141
|
-
|
|
142
|
-
if (isExternalType && appName) {
|
|
143
|
-
normalized.systemKey = appName;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
if (isExternalType && hasFullExternalCliOptions(normalized)) {
|
|
147
|
-
if (!Object.prototype.hasOwnProperty.call(normalized, 'github')) {
|
|
148
|
-
normalized.github = false;
|
|
149
|
-
}
|
|
150
|
-
if (!Object.prototype.hasOwnProperty.call(normalized, 'controller')) {
|
|
151
|
-
normalized.controller = false;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
return normalized;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Validate required options for non-interactive external creation
|
|
160
|
-
* @param {Object} normalizedOptions - Normalized options
|
|
161
|
-
* @throws {Error} If required options are missing
|
|
162
|
-
*/
|
|
163
|
-
function validateNonInteractiveExternalOptions(normalizedOptions) {
|
|
164
|
-
const missing = [];
|
|
165
|
-
if (!normalizedOptions.systemDisplayName) missing.push('--display-name');
|
|
166
|
-
if (!normalizedOptions.systemDescription) missing.push('--description');
|
|
167
|
-
if (!normalizedOptions.systemType) missing.push('--system-type');
|
|
168
|
-
if (!normalizedOptions.authType) missing.push('--auth-type');
|
|
169
|
-
if (!normalizedOptions.entityType) missing.push('--entity-type');
|
|
170
|
-
if (!normalizedOptions.datasourceCount) missing.push('--datasources');
|
|
171
|
-
if (missing.length > 0) {
|
|
172
|
-
throw new Error(`Missing required options for non-interactive external create: ${missing.join(', ')}`);
|
|
173
|
-
}
|
|
174
|
-
if (!Object.prototype.hasOwnProperty.call(normalizedOptions, 'github')) {
|
|
175
|
-
normalizedOptions.github = false;
|
|
176
|
-
}
|
|
177
|
-
if (!Object.prototype.hasOwnProperty.call(normalizedOptions, 'controller')) {
|
|
178
|
-
normalizedOptions.controller = false;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
88
|
/**
|
|
183
89
|
* Handle create command execution
|
|
184
90
|
* @async
|
|
@@ -315,7 +221,7 @@ Examples:
|
|
|
315
221
|
});
|
|
316
222
|
}
|
|
317
223
|
|
|
318
|
-
function
|
|
224
|
+
function registerBuildCommand(program) {
|
|
319
225
|
program.command('build <appKey>')
|
|
320
226
|
.description('Build Docker image for builder appKey (auto-detect runtime)')
|
|
321
227
|
.option('-l, --language <lang>', 'Override language detection')
|
|
@@ -339,9 +245,9 @@ function setupBuildRunLogsDownCommands(program) {
|
|
|
339
245
|
process.exit(1);
|
|
340
246
|
}
|
|
341
247
|
});
|
|
248
|
+
}
|
|
342
249
|
|
|
343
|
-
|
|
344
|
-
|
|
250
|
+
function registerLogsCommand(program) {
|
|
345
251
|
program.command('logs <appKey>')
|
|
346
252
|
.description('Tail container logs for appKey (optional env summary; secrets masked)')
|
|
347
253
|
.option('-f', 'Follow log stream')
|
|
@@ -352,14 +258,22 @@ function setupBuildRunLogsDownCommands(program) {
|
|
|
352
258
|
try {
|
|
353
259
|
const { runAppLogs } = require('../commands/app-logs');
|
|
354
260
|
const tailNum = parseInt(options.tail, 10);
|
|
355
|
-
const level = options.level !== undefined && options.level !== null && options.level !== ''
|
|
356
|
-
|
|
261
|
+
const level = options.level !== undefined && options.level !== null && options.level !== ''
|
|
262
|
+
? String(options.level).trim()
|
|
263
|
+
: undefined;
|
|
264
|
+
await runAppLogs(appName, {
|
|
265
|
+
follow: options.f,
|
|
266
|
+
tail: Number.isNaN(tailNum) ? 100 : tailNum,
|
|
267
|
+
level
|
|
268
|
+
});
|
|
357
269
|
} catch (error) {
|
|
358
270
|
handleCommandError(error, 'logs');
|
|
359
271
|
process.exit(1);
|
|
360
272
|
}
|
|
361
273
|
});
|
|
274
|
+
}
|
|
362
275
|
|
|
276
|
+
function registerDownAppCommand(program) {
|
|
363
277
|
program.command('down-app <appKey>')
|
|
364
278
|
.description('Stop and remove container for appKey (--volumes removes data volume)')
|
|
365
279
|
.option('--volumes', 'Remove application Docker volume')
|
|
@@ -374,6 +288,13 @@ function setupBuildRunLogsDownCommands(program) {
|
|
|
374
288
|
});
|
|
375
289
|
}
|
|
376
290
|
|
|
291
|
+
function setupBuildRunLogsDownCommands(program) {
|
|
292
|
+
registerBuildCommand(program);
|
|
293
|
+
registerRunCommand(program);
|
|
294
|
+
registerLogsCommand(program);
|
|
295
|
+
registerDownAppCommand(program);
|
|
296
|
+
}
|
|
297
|
+
|
|
377
298
|
function setupShellTestStopCommands(program) {
|
|
378
299
|
program.command('stop <appKey>')
|
|
379
300
|
.description('Alias for down-app: stop and remove container for appKey')
|
|
@@ -419,21 +340,7 @@ function setupDockerfileGenerateCommand(program) {
|
|
|
419
340
|
});
|
|
420
341
|
}
|
|
421
342
|
|
|
422
|
-
function
|
|
423
|
-
program.command('push <appKey>')
|
|
424
|
-
.description('Push builder appKey image to Azure Container Registry')
|
|
425
|
-
.addHelpText('after', PUSH_HELP_AFTER)
|
|
426
|
-
.option('-r, --registry <registry>', 'ACR registry URL (overrides application.yaml)')
|
|
427
|
-
.option('-t, --tag <tag>', 'Image tag(s) - comma-separated for multiple (default: latest)')
|
|
428
|
-
.action(async(appName, options) => {
|
|
429
|
-
try {
|
|
430
|
-
await app.pushApp(appName, options);
|
|
431
|
-
} catch (error) {
|
|
432
|
-
handleCommandError(error, 'push');
|
|
433
|
-
process.exit(1);
|
|
434
|
-
}
|
|
435
|
-
});
|
|
436
|
-
|
|
343
|
+
function setupDeployCommand(program) {
|
|
437
344
|
program.command('deploy <appKey|systemKey>')
|
|
438
345
|
.description('Deploy builder app or external system via Miso Controller (Azure or --local)')
|
|
439
346
|
.addHelpText('after', DEPLOY_HELP_AFTER)
|
|
@@ -441,13 +348,20 @@ function setupPushDeployDockerfileCommands(program) {
|
|
|
441
348
|
.option('--client-id <id>', 'Client ID (overrides config)')
|
|
442
349
|
.option('--client-secret <secret>', 'Client Secret (overrides config)')
|
|
443
350
|
.option('--repository-url <url>', 'Repository URL for pipeline validation (default: application.yaml repository.repositoryUrl, else https://github.com/aifabrix/<appKey>)')
|
|
444
|
-
.option('--
|
|
445
|
-
.option('--no-poll', 'Do not poll for status')
|
|
351
|
+
.option('-v, --verbose', 'Expanded deploy summary and preflight progress')
|
|
446
352
|
.option('--probe', 'After external deploy, run dataplane runtime checks (validation/run); slower')
|
|
447
353
|
.option('--probe-timeout <ms>', 'Timeout for --probe on external deploy (default: 120000)', '120000')
|
|
448
354
|
.option(
|
|
449
|
-
'--
|
|
450
|
-
'
|
|
355
|
+
'--sync',
|
|
356
|
+
'After deploy, run full datasource data sync for every datasource on the system (default: bootstrap-if-empty only)'
|
|
357
|
+
)
|
|
358
|
+
.option(
|
|
359
|
+
'--gate <gates>',
|
|
360
|
+
'Optional pre-promote gates (comma-separated): operations, trust, governance, full'
|
|
361
|
+
)
|
|
362
|
+
.option(
|
|
363
|
+
'--subject-email <emails>',
|
|
364
|
+
'Subject email(s) for governance gate (comma-separated; used with --gate governance|full)'
|
|
451
365
|
)
|
|
452
366
|
.action(async(appName, options) => {
|
|
453
367
|
try {
|
|
@@ -458,6 +372,7 @@ function setupPushDeployDockerfileCommands(program) {
|
|
|
458
372
|
const opts = {
|
|
459
373
|
...options,
|
|
460
374
|
local: !!options.local,
|
|
375
|
+
verbose: options.verbose === true,
|
|
461
376
|
probeTimeout: Number.isFinite(probeTimeout) ? probeTimeout : 120000
|
|
462
377
|
};
|
|
463
378
|
const outcome = await app.deployApp(appName, opts);
|
|
@@ -470,7 +385,24 @@ function setupPushDeployDockerfileCommands(program) {
|
|
|
470
385
|
process.exit(1);
|
|
471
386
|
}
|
|
472
387
|
});
|
|
388
|
+
}
|
|
473
389
|
|
|
390
|
+
function setupPushDeployDockerfileCommands(program) {
|
|
391
|
+
program.command('push <appKey>')
|
|
392
|
+
.description('Push builder appKey image to Azure Container Registry')
|
|
393
|
+
.addHelpText('after', PUSH_HELP_AFTER)
|
|
394
|
+
.option('-r, --registry <registry>', 'ACR registry URL (overrides application.yaml)')
|
|
395
|
+
.option('-t, --tag <tag>', 'Image tag(s) - comma-separated for multiple (default: latest)')
|
|
396
|
+
.action(async(appName, options) => {
|
|
397
|
+
try {
|
|
398
|
+
await app.pushApp(appName, options);
|
|
399
|
+
} catch (error) {
|
|
400
|
+
handleCommandError(error, 'push');
|
|
401
|
+
process.exit(1);
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
|
|
405
|
+
setupDeployCommand(program);
|
|
474
406
|
setupDockerfileGenerateCommand(program);
|
|
475
407
|
}
|
|
476
408
|
|
|
@@ -489,7 +421,5 @@ function setupAppCommands(program) {
|
|
|
489
421
|
|
|
490
422
|
module.exports = {
|
|
491
423
|
setupAppCommands,
|
|
492
|
-
|
|
493
|
-
prepareExternalCreateOptions,
|
|
494
|
-
validateNonInteractiveExternalOptions
|
|
424
|
+
...require('./setup-app-external-create')
|
|
495
425
|
};
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
const chalk = require('chalk');
|
|
8
8
|
const logger = require('../utils/logger');
|
|
9
9
|
const { handleCommandError } = require('../utils/cli-utils');
|
|
10
|
-
const { cliOptsSkipCertSync } = require('../certification/cli-cert-sync-skip');
|
|
11
10
|
const {
|
|
12
11
|
TEST_HELP_AFTER,
|
|
13
12
|
TEST_E2E_HELP_AFTER
|
|
@@ -18,7 +17,7 @@ function setupTestCommand(program) {
|
|
|
18
17
|
.description('Tests: builder appKey in container; external systemKey = local validation')
|
|
19
18
|
.option('-e, --env <env>', 'For builder app: dev (running container) or tst (ephemeral)', 'dev')
|
|
20
19
|
.option('-v, --verbose', 'Verbose output')
|
|
21
|
-
.option('-d, --debug', '
|
|
20
|
+
.option('-d, --debug', 'Certification debug + log to integration/<systemKey>/logs/ (external only)')
|
|
22
21
|
.option(
|
|
23
22
|
'--sync',
|
|
24
23
|
'Not supported for this command (local validation only). Use aifabrix upload <systemKey> or dataplane test commands with --sync.'
|
|
@@ -58,45 +57,22 @@ function setupTestCommand(program) {
|
|
|
58
57
|
}
|
|
59
58
|
|
|
60
59
|
/**
|
|
61
|
-
*
|
|
62
|
-
* @param {Array<{ key?: string, datasourceTestRun?: { certificateIssuance?: { status?: string, reasonCode?: string, message?: string } } }>} results
|
|
63
|
-
* @returns {string|null}
|
|
64
|
-
*/
|
|
65
|
-
function firstIssuanceFailureHintFromE2eResults(results) {
|
|
66
|
-
const failed = [];
|
|
67
|
-
for (const row of results || []) {
|
|
68
|
-
const ci = row.datasourceTestRun && row.datasourceTestRun.certificateIssuance;
|
|
69
|
-
if (ci && ci.status === 'failed') {
|
|
70
|
-
failed.push({ key: row.key, ci });
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
if (failed.length === 0) return null;
|
|
74
|
-
const firstRc = failed[0].ci.reasonCode;
|
|
75
|
-
const sameAll = failed.every(f => f.ci.reasonCode === firstRc);
|
|
76
|
-
if (sameAll && failed.length > 1) {
|
|
77
|
-
const parts = [firstRc, failed[0].ci.message].filter(Boolean);
|
|
78
|
-
return `${parts.join(': ')} (${failed.length} datasource scopes; first: ${failed[0].key})`;
|
|
79
|
-
}
|
|
80
|
-
const parts = [failed[0].ci.reasonCode, failed[0].ci.message].filter(Boolean);
|
|
81
|
-
return `[${failed[0].key}] ${parts.join(': ')}`.trim();
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* External integration E2E: run, display, exit on aggregate, optional cert sync.
|
|
60
|
+
* External integration E2E: run, display, exit on aggregate.
|
|
86
61
|
* @param {string} appName
|
|
87
62
|
* @param {Object} options
|
|
88
63
|
* @returns {Promise<void>}
|
|
89
64
|
*/
|
|
90
|
-
async function
|
|
91
|
-
const {
|
|
65
|
+
async function runExternalIntegrationE2EAndExit(appName, options, cmd) {
|
|
66
|
+
const { cliOptsSkipPublish } = require('../utils/cli-sync-options');
|
|
92
67
|
const { runTestE2EForExternalSystem } = require('../commands/test-e2e-external');
|
|
93
|
-
const
|
|
68
|
+
const noPublish = cliOptsSkipPublish(options, cmd);
|
|
94
69
|
const { success, results } = await runTestE2EForExternalSystem(appName, {
|
|
95
70
|
env: options.env,
|
|
96
71
|
debug: options.debug,
|
|
97
72
|
verbose: options.verbose,
|
|
98
73
|
async: options.async !== false,
|
|
99
|
-
|
|
74
|
+
noPublish,
|
|
75
|
+
syncMode: options.syncMode
|
|
100
76
|
});
|
|
101
77
|
const { displayIntegrationTestResults } = require('../utils/external-system-display');
|
|
102
78
|
const datasourceResults = results.map(r => ({
|
|
@@ -117,25 +93,21 @@ async function runExternalIntegrationE2EAndCertSync(appName, options, cmd) {
|
|
|
117
93
|
requireCert: options.requireCert === true
|
|
118
94
|
});
|
|
119
95
|
if (exitCode !== 0) process.exit(exitCode);
|
|
120
|
-
if (cliOptsSkipCertSync(options)) return;
|
|
121
|
-
const { trySyncCertificationFromDataplaneForExternalApp } = require('../certification/sync-after-external-command');
|
|
122
|
-
const issuanceFailureHint = firstIssuanceFailureHintFromE2eResults(results);
|
|
123
|
-
await trySyncCertificationFromDataplaneForExternalApp(appName, 'test-e2e', { issuanceFailureHint });
|
|
124
96
|
}
|
|
125
97
|
|
|
126
98
|
async function runTestE2ECommand(appName, options, cmd) {
|
|
127
|
-
const {
|
|
128
|
-
const
|
|
99
|
+
const { cliOptsSkipPublish } = require('../utils/cli-sync-options');
|
|
100
|
+
const noPublish = cliOptsSkipPublish(options, cmd);
|
|
129
101
|
const pathsUtil = require('../utils/paths');
|
|
130
102
|
const appType = await pathsUtil.detectAppType(appName).catch(() => null);
|
|
131
|
-
if (
|
|
103
|
+
if (noPublish && appType && appType.baseDir === 'builder') {
|
|
132
104
|
throw new Error(
|
|
133
|
-
'Option --no-
|
|
134
|
-
'Remove --no-
|
|
105
|
+
'Option --no-publish applies only to external integration E2E (integration/<systemKey>/). ' +
|
|
106
|
+
'Remove --no-publish for builder app E2E.'
|
|
135
107
|
);
|
|
136
108
|
}
|
|
137
109
|
if (appType && appType.baseDir === 'integration') {
|
|
138
|
-
await
|
|
110
|
+
await runExternalIntegrationE2EAndExit(appName, options, cmd);
|
|
139
111
|
return;
|
|
140
112
|
}
|
|
141
113
|
const { runAppTestE2e } = require('../commands/app-test');
|
|
@@ -170,21 +142,24 @@ function setupTestE2eCommand(program) {
|
|
|
170
142
|
.description('E2E: builder appKey in container; external systemKey = all datasources via dataplane')
|
|
171
143
|
.option('-e, --env <env>', 'Environment: dev, tst, or pro (builder: dev/tst for container)', 'dev')
|
|
172
144
|
.option('-v, --verbose', 'Show detailed step output and poll progress')
|
|
173
|
-
.option('-d, --debug', '
|
|
174
|
-
.option(
|
|
175
|
-
'--no-sync',
|
|
176
|
-
'Skip publishing local integration files; E2E uses the system config already on the dataplane (external integration only)'
|
|
177
|
-
)
|
|
145
|
+
.option('-d, --debug', 'Certification debug + log to integration/<systemKey>/logs/')
|
|
146
|
+
.option('--no-publish', 'Skip publishing local integration files before E2E')
|
|
178
147
|
.option(
|
|
179
148
|
'--force',
|
|
180
149
|
'With default sync, pass force to upload (bypass active-datasource schema replacement guards; same as aifabrix upload --force)'
|
|
181
150
|
)
|
|
182
|
-
.option('--warnings-as-errors', 'Treat aggregate warn as failure (exit 1)')
|
|
183
|
-
.option('--require-cert', 'Require certification passed on every datasource (exit 2 if not)')
|
|
184
151
|
.option(
|
|
185
|
-
'--
|
|
186
|
-
'
|
|
152
|
+
'--version <target>',
|
|
153
|
+
'Manifest version for E2E (latest, running, or explicit version id)',
|
|
154
|
+
'latest'
|
|
187
155
|
)
|
|
156
|
+
.option(
|
|
157
|
+
'--sync-mode <mode>',
|
|
158
|
+
'Sync policy during E2E: auto (default), never, or force. Distinct from default pre-run publish.',
|
|
159
|
+
'auto'
|
|
160
|
+
)
|
|
161
|
+
.option('--warnings-as-errors', 'Treat aggregate warn as failure (exit 1)')
|
|
162
|
+
.option('--require-cert', 'Require certification passed on every datasource (exit 2 if not)')
|
|
188
163
|
.addHelpText('after', TEST_E2E_HELP_AFTER)
|
|
189
164
|
.action(async(appName, options, cmd) => {
|
|
190
165
|
try {
|
|
@@ -232,7 +207,6 @@ function setupInstallTestE2eLintCommands(program) {
|
|
|
232
207
|
}
|
|
233
208
|
|
|
234
209
|
module.exports = {
|
|
235
|
-
setupInstallTestE2eLintCommands
|
|
236
|
-
firstIssuanceFailureHintFromE2eResults
|
|
210
|
+
setupInstallTestE2eLintCommands
|
|
237
211
|
};
|
|
238
212
|
|