@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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* TTY output for
|
|
2
|
+
* TTY output for channel add (plan 152).
|
|
3
3
|
*
|
|
4
4
|
* @fileoverview Channel install status display — customer language: Assistant
|
|
5
5
|
* @author AI Fabrix Team
|
|
@@ -26,32 +26,79 @@ function separatorLine() {
|
|
|
26
26
|
: '────────────────────────────────────────';
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
/**
|
|
30
|
+
* @param {Object|null} approvalGuide
|
|
31
|
+
*/
|
|
32
|
+
function displayApprovalGuideOptionalLinks(approvalGuide) {
|
|
33
|
+
if (approvalGuide.artifactPath) {
|
|
34
|
+
logger.log('');
|
|
35
|
+
logger.log(metadata('Manifest file:'));
|
|
36
|
+
logger.log(chalk.white(approvalGuide.artifactPath));
|
|
37
|
+
}
|
|
38
|
+
if (approvalGuide.credentialPortalUrl) {
|
|
39
|
+
logger.log('');
|
|
40
|
+
logger.log(metadata('AI Fabrix authentication:'));
|
|
41
|
+
logger.log(chalk.cyan(approvalGuide.credentialPortalUrl));
|
|
42
|
+
}
|
|
43
|
+
if (approvalGuide.installGuidePath) {
|
|
44
|
+
logger.log('');
|
|
45
|
+
logger.log(metadata(`Full guide: ${approvalGuide.installGuidePath}`));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @param {Object|null} approvalGuide
|
|
51
|
+
*/
|
|
52
|
+
function displayApprovalGuideSection(approvalGuide) {
|
|
53
|
+
if (!approvalGuide?.steps?.length) return;
|
|
54
|
+
logger.log('');
|
|
55
|
+
const heading =
|
|
56
|
+
approvalGuide.approvalRequired === false
|
|
57
|
+
? 'Go-live steps'
|
|
58
|
+
: 'Platform admin approval required';
|
|
59
|
+
logger.log(formatWarningLine(heading));
|
|
60
|
+
if (approvalGuide.portalUrl) {
|
|
61
|
+
logger.log(metadata('Admin console:'));
|
|
62
|
+
logger.log(chalk.cyan(approvalGuide.portalUrl));
|
|
63
|
+
}
|
|
64
|
+
logger.log('');
|
|
65
|
+
logger.log(metadata('Next steps:'));
|
|
66
|
+
approvalGuide.steps.forEach((step, index) => {
|
|
67
|
+
logger.log(chalk.white(` ${index + 1}. ${step}`));
|
|
68
|
+
});
|
|
69
|
+
displayApprovalGuideOptionalLinks(approvalGuide);
|
|
70
|
+
}
|
|
71
|
+
|
|
29
72
|
/**
|
|
30
73
|
* @param {Object} params
|
|
31
74
|
* @param {string} params.channelTarget
|
|
32
75
|
* @param {string} params.name
|
|
33
76
|
* @param {Object|null} params.channelExt
|
|
34
|
-
* @param {
|
|
77
|
+
* @param {Object|null} [params.approvalGuide]
|
|
35
78
|
*/
|
|
36
79
|
function displayExistingChannelStatus(params) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
80
|
+
const status = params.channelExt?.status || 'unknown';
|
|
81
|
+
displayChannelCoreFields({
|
|
82
|
+
channelTarget: params.channelTarget,
|
|
83
|
+
name: params.name,
|
|
84
|
+
statusLabel: status,
|
|
85
|
+
baseName: params.channelExt?.baseName,
|
|
86
|
+
credentialKey: params.channelExt?.credentialKey,
|
|
87
|
+
capabilities: params.channelExt?.capabilities
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
if (status === 'approvalRequired' && params.approvalGuide) {
|
|
91
|
+
displayApprovalGuideSection(params.approvalGuide);
|
|
92
|
+
logger.log(separatorLine());
|
|
93
|
+
return;
|
|
50
94
|
}
|
|
95
|
+
|
|
51
96
|
logger.log('');
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
logger.log(metadata(
|
|
97
|
+
if (status === 'installed' || status === 'validated') {
|
|
98
|
+
logger.log(formatSuccessLine('Channel install is complete.'));
|
|
99
|
+
logger.log(metadata('Use --force to regenerate artifacts and patch config.'));
|
|
100
|
+
} else {
|
|
101
|
+
logger.log(formatWarningLine('Channel install already configured. Use --force to regenerate artifacts.'));
|
|
55
102
|
}
|
|
56
103
|
logger.log(separatorLine());
|
|
57
104
|
}
|
|
@@ -107,14 +154,7 @@ function displayValidationSection(validation) {
|
|
|
107
154
|
* @param {Object} result
|
|
108
155
|
*/
|
|
109
156
|
function displayApprovalSection(result) {
|
|
110
|
-
|
|
111
|
-
logger.log('');
|
|
112
|
-
logger.log(formatWarningLine('Approval required'));
|
|
113
|
-
logger.log(metadata('Open this URL as platform admin:'));
|
|
114
|
-
logger.log(chalk.cyan(result.approvalUrl));
|
|
115
|
-
logger.log('');
|
|
116
|
-
logger.log(metadata('After approval, run:'));
|
|
117
|
-
logger.log(chalk.white(` aifabrix app add-channel ${result.channelTarget} --name "${result.name}"`));
|
|
157
|
+
displayApprovalGuideSection(result.approvalGuide);
|
|
118
158
|
}
|
|
119
159
|
|
|
120
160
|
/**
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
/** @typedef {'teams-bot'|'slack'|'microsoft-copilot'|'chatgpt'|'web-embed'} ChannelTargetKey */
|
|
12
12
|
|
|
13
|
-
const DEFAULT_CAPABILITIES = ['chat', 'notify'];
|
|
13
|
+
const DEFAULT_CAPABILITIES = ['chat', 'notify', 'documentApproval'];
|
|
14
14
|
|
|
15
15
|
const CHANNEL_TARGETS = {
|
|
16
16
|
'teams-bot': {
|
|
@@ -101,8 +101,8 @@ function getChannelTarget(channelTarget) {
|
|
|
101
101
|
*/
|
|
102
102
|
function getDefaultChannelDescription() {
|
|
103
103
|
return (
|
|
104
|
-
'Enterprise AI assistant for employees.
|
|
105
|
-
'
|
|
104
|
+
'Enterprise AI assistant for employees. Approved assistants, enterprise knowledge, ' +
|
|
105
|
+
'workflows, and governed actions via AI Fabrix.'
|
|
106
106
|
);
|
|
107
107
|
}
|
|
108
108
|
|
package/lib/cli/index.js
CHANGED
|
@@ -23,15 +23,19 @@ 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 { setupEnterpriseKnowledgeCommands } = require('../commands/enterprise-knowledge');
|
|
26
27
|
const { setupIdentityCommands } = require('../commands/identity');
|
|
27
28
|
const { setupProtectionCommands } = require('../commands/protection');
|
|
29
|
+
const { setupEvidenceCommands } = require('../commands/evidence');
|
|
28
30
|
const { setupCredentialDeploymentCommands } = require('./setup-credential-deployment');
|
|
29
31
|
const { setupIntegrationClientCommands } = require('./setup-integration-client');
|
|
30
32
|
const { setupPlatformCommands } = require('./setup-platform');
|
|
31
33
|
const { setupCertificationCommands } = require('./setup-certification-commands');
|
|
32
34
|
const { setupGovernanceCommands } = require('../commands/governance');
|
|
33
35
|
const { setupChannelCommands } = require('../commands/channel');
|
|
36
|
+
const { setupManifestCommands } = require('../commands/manifest');
|
|
34
37
|
const { setupNpmCommands } = require('./setup-npm');
|
|
38
|
+
const { setupListCommand } = require('./setup-list');
|
|
35
39
|
|
|
36
40
|
/**
|
|
37
41
|
* Dev, secrets, parameters, and platform commands (keeps setupCommands under statement limit).
|
|
@@ -46,10 +50,10 @@ function setupDevAndPlatformCommands(program) {
|
|
|
46
50
|
}
|
|
47
51
|
|
|
48
52
|
/**
|
|
49
|
-
*
|
|
50
|
-
* @param {Command} program
|
|
53
|
+
* Core platform and integration CLI command groups.
|
|
54
|
+
* @param {import('commander').Command} program
|
|
51
55
|
*/
|
|
52
|
-
function
|
|
56
|
+
function setupCoreCliCommands(program) {
|
|
53
57
|
setupInfraCommands(program);
|
|
54
58
|
setupAuthCommands(program);
|
|
55
59
|
setupAppCommands(program);
|
|
@@ -59,14 +63,34 @@ function setupCommands(program) {
|
|
|
59
63
|
setupAppManagementCommands(program);
|
|
60
64
|
setupChannelCommands(program);
|
|
61
65
|
setupDatasourceCommands(program);
|
|
66
|
+
setupManifestCommands(program);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Extended catalog and policy CLI command groups.
|
|
71
|
+
* @param {import('commander').Command} program
|
|
72
|
+
*/
|
|
73
|
+
function setupExtendedCliCommands(program) {
|
|
62
74
|
setupDimensionCommands(program);
|
|
63
75
|
setupResourceTypeCommands(program);
|
|
76
|
+
setupEnterpriseKnowledgeCommands(program);
|
|
64
77
|
setupIdentityCommands(program);
|
|
65
78
|
setupProtectionCommands(program);
|
|
79
|
+
setupEvidenceCommands(program);
|
|
66
80
|
setupUtilityCommands(program);
|
|
81
|
+
setupListCommand(program);
|
|
67
82
|
setupCredentialDeploymentCommands(program);
|
|
68
83
|
setupIntegrationClientCommands(program);
|
|
69
84
|
setupExternalSystemCommands(program);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Sets up all CLI commands on the Commander program instance
|
|
89
|
+
* @param {Command} program - Commander program instance
|
|
90
|
+
*/
|
|
91
|
+
function setupCommands(program) {
|
|
92
|
+
setupCoreCliCommands(program);
|
|
93
|
+
setupExtendedCliCommands(program);
|
|
70
94
|
setupDevAndPlatformCommands(program);
|
|
71
95
|
}
|
|
72
96
|
|
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,13 +50,13 @@ 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).
|
|
@@ -79,106 +83,6 @@ Notes:
|
|
|
79
83
|
- Use -t 0 (--tail 0) for the full buffered log; default is 100 lines.
|
|
80
84
|
`;
|
|
81
85
|
|
|
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
86
|
/**
|
|
183
87
|
* Handle create command execution
|
|
184
88
|
* @async
|
|
@@ -419,21 +323,7 @@ function setupDockerfileGenerateCommand(program) {
|
|
|
419
323
|
});
|
|
420
324
|
}
|
|
421
325
|
|
|
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
|
-
|
|
326
|
+
function setupDeployCommand(program) {
|
|
437
327
|
program.command('deploy <appKey|systemKey>')
|
|
438
328
|
.description('Deploy builder app or external system via Miso Controller (Azure or --local)')
|
|
439
329
|
.addHelpText('after', DEPLOY_HELP_AFTER)
|
|
@@ -441,13 +331,20 @@ function setupPushDeployDockerfileCommands(program) {
|
|
|
441
331
|
.option('--client-id <id>', 'Client ID (overrides config)')
|
|
442
332
|
.option('--client-secret <secret>', 'Client Secret (overrides config)')
|
|
443
333
|
.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')
|
|
334
|
+
.option('-v, --verbose', 'Expanded deploy summary and preflight progress')
|
|
446
335
|
.option('--probe', 'After external deploy, run dataplane runtime checks (validation/run); slower')
|
|
447
336
|
.option('--probe-timeout <ms>', 'Timeout for --probe on external deploy (default: 120000)', '120000')
|
|
448
337
|
.option(
|
|
449
|
-
'--
|
|
450
|
-
'
|
|
338
|
+
'--sync',
|
|
339
|
+
'After deploy, run full datasource data sync for every datasource on the system (default: bootstrap-if-empty only)'
|
|
340
|
+
)
|
|
341
|
+
.option(
|
|
342
|
+
'--gate <gates>',
|
|
343
|
+
'Optional pre-promote gates (comma-separated): operations, trust, governance, full'
|
|
344
|
+
)
|
|
345
|
+
.option(
|
|
346
|
+
'--subject-email <emails>',
|
|
347
|
+
'Subject email(s) for governance gate (comma-separated; used with --gate governance|full)'
|
|
451
348
|
)
|
|
452
349
|
.action(async(appName, options) => {
|
|
453
350
|
try {
|
|
@@ -458,6 +355,7 @@ function setupPushDeployDockerfileCommands(program) {
|
|
|
458
355
|
const opts = {
|
|
459
356
|
...options,
|
|
460
357
|
local: !!options.local,
|
|
358
|
+
verbose: options.verbose === true,
|
|
461
359
|
probeTimeout: Number.isFinite(probeTimeout) ? probeTimeout : 120000
|
|
462
360
|
};
|
|
463
361
|
const outcome = await app.deployApp(appName, opts);
|
|
@@ -470,7 +368,24 @@ function setupPushDeployDockerfileCommands(program) {
|
|
|
470
368
|
process.exit(1);
|
|
471
369
|
}
|
|
472
370
|
});
|
|
371
|
+
}
|
|
473
372
|
|
|
373
|
+
function setupPushDeployDockerfileCommands(program) {
|
|
374
|
+
program.command('push <appKey>')
|
|
375
|
+
.description('Push builder appKey image to Azure Container Registry')
|
|
376
|
+
.addHelpText('after', PUSH_HELP_AFTER)
|
|
377
|
+
.option('-r, --registry <registry>', 'ACR registry URL (overrides application.yaml)')
|
|
378
|
+
.option('-t, --tag <tag>', 'Image tag(s) - comma-separated for multiple (default: latest)')
|
|
379
|
+
.action(async(appName, options) => {
|
|
380
|
+
try {
|
|
381
|
+
await app.pushApp(appName, options);
|
|
382
|
+
} catch (error) {
|
|
383
|
+
handleCommandError(error, 'push');
|
|
384
|
+
process.exit(1);
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
setupDeployCommand(program);
|
|
474
389
|
setupDockerfileGenerateCommand(program);
|
|
475
390
|
}
|
|
476
391
|
|
|
@@ -489,7 +404,5 @@ function setupAppCommands(program) {
|
|
|
489
404
|
|
|
490
405
|
module.exports = {
|
|
491
406
|
setupAppCommands,
|
|
492
|
-
|
|
493
|
-
prepareExternalCreateOptions,
|
|
494
|
-
validateNonInteractiveExternalOptions
|
|
407
|
+
...require('./setup-app-external-create')
|
|
495
408
|
};
|