@aifabrix/builder 2.49.1 → 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/process/README.md +9 -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/jest.isolated-projects.js +31 -1
- package/jest.projects.js +87 -1
- package/lib/api/dev-server-https.js +1 -1
- package/lib/api/dev.api.js +1 -0
- 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/host-ops.api.js +69 -0
- 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-path-commands.js +24 -0
- package/lib/cli/setup-dev.js +115 -16
- 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 +64 -61
- 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 +252 -0
- 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 +242 -4
- 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
package/lib/cli/setup-dev.js
CHANGED
|
@@ -21,6 +21,11 @@ const {
|
|
|
21
21
|
handleDevPin,
|
|
22
22
|
handleDevDelete
|
|
23
23
|
} = require('../commands/dev-cli-handlers');
|
|
24
|
+
const {
|
|
25
|
+
handlePlatformInstallCli,
|
|
26
|
+
handlePlatformUpdate,
|
|
27
|
+
handlePlatformInstall
|
|
28
|
+
} = require('../commands/dev-host-ops');
|
|
24
29
|
|
|
25
30
|
/** Appended to `dev update --help` (examples + partial-update behaviour). */
|
|
26
31
|
const DEV_UPDATE_HELP_AFTER = `
|
|
@@ -49,7 +54,7 @@ const DEV_GROUP_HELP_AFTER = `
|
|
|
49
54
|
Categories:
|
|
50
55
|
Local config show, set-id, set-scoped-resources, set-env-config, set-home, set-work, set-format, print-home, print-work
|
|
51
56
|
Onboarding init (PIN onboarding), refresh (sync settings / renew cert)
|
|
52
|
-
Remote admin list, add, update, pin, delete (need remote-server + client cert in ~/.aifabrix)
|
|
57
|
+
Remote admin list, add, update, pin, delete, platform-install, platform-update, platform-install-cli (need remote-server + client cert in ~/.aifabrix)
|
|
53
58
|
Sync / stop down (Mutagen; optional --apps for containers)
|
|
54
59
|
|
|
55
60
|
Use: aifabrix dev <command> --help
|
|
@@ -79,16 +84,37 @@ Examples:
|
|
|
79
84
|
$ aifabrix dev pin 02 --hosts-ip 192.168.1.25
|
|
80
85
|
$ aifabrix dev pin (uses developer-id from config)
|
|
81
86
|
|
|
82
|
-
Prints
|
|
83
|
-
|
|
87
|
+
Prints a shareable block for the developer: Node.js + Builder CLI install (Windows / Linux & macOS),
|
|
88
|
+
then copy-paste dev init commands (standard, hosts-file variant, and dev init --pin when config exists).
|
|
84
89
|
`;
|
|
85
90
|
|
|
86
91
|
/** Appended to `dev delete --help`. */
|
|
87
92
|
const DEV_DELETE_HELP_AFTER = `
|
|
88
|
-
|
|
93
|
+
Examples:
|
|
89
94
|
$ aifabrix dev delete 02
|
|
95
|
+
$ aifabrix dev delete 02 -y
|
|
96
|
+
$ aifabrix dev delete 02 --db-only
|
|
97
|
+
|
|
98
|
+
Default removes the developer from the host (OS user, containers) and server database. Use --db-only for database-only removal.
|
|
90
99
|
`;
|
|
91
100
|
|
|
101
|
+
/** Shared host-ops flags for platform commands and dev add provision. */
|
|
102
|
+
function addHostOpsSharedOptions(cmd) {
|
|
103
|
+
return cmd
|
|
104
|
+
.option('--check', 'Preflight only (no changes)')
|
|
105
|
+
.option('-y, --yes', 'Non-interactive (skip prompts)')
|
|
106
|
+
.option('--wait', 'Poll until job completes', true)
|
|
107
|
+
.option('--no-wait', 'Return after job is queued')
|
|
108
|
+
.option('--json', 'JSON output (includes job result when --wait)')
|
|
109
|
+
.option('--include <ids>', 'Comma-separated developer ids (batch)')
|
|
110
|
+
.option('--exclude <ids>', 'Comma-separated developer ids to skip')
|
|
111
|
+
.option('--builder-version <ver>', 'Builder CLI / platform bundle version')
|
|
112
|
+
.option('--admin-email <email>', 'Platform admin email (install / provision)')
|
|
113
|
+
.option('--admin-password <password>', 'Platform admin password (never logged)')
|
|
114
|
+
.option('--platform <mode>', 'Platform mode (e.g. single-traefik)')
|
|
115
|
+
.option('--installation <profile>', 'Installation profile (e.g. dev)');
|
|
116
|
+
}
|
|
117
|
+
|
|
92
118
|
/** Appended to `dev down --help`. */
|
|
93
119
|
const DEV_DOWN_HELP_AFTER = `
|
|
94
120
|
Examples:
|
|
@@ -276,6 +302,17 @@ function setupDevListAddCommands(dev) {
|
|
|
276
302
|
.requiredOption('--name <name>', 'Display name')
|
|
277
303
|
.requiredOption('--email <email>', 'Email address')
|
|
278
304
|
.option('--groups <items>', 'Comma-separated roles: admin, secret-manager, secret-reader, developer, docker', 'developer')
|
|
305
|
+
.option('--no-provision', 'Create user in database only (skip host provision job)')
|
|
306
|
+
.option('--builder-version <ver>', 'Builder CLI version for provision job')
|
|
307
|
+
.option('--admin-email <email>', 'Platform admin email for provision job')
|
|
308
|
+
.option('--admin-password <password>', 'Platform admin password for provision job')
|
|
309
|
+
.option('--platform <mode>', 'Platform mode for provision job')
|
|
310
|
+
.option('--installation <profile>', 'Installation profile for provision job')
|
|
311
|
+
.option('--skip-cert', 'Skip certificate step in provision job')
|
|
312
|
+
.option('--skip-platform', 'Skip platform install in provision job')
|
|
313
|
+
.option('--skip-cli', 'Skip Builder CLI install in provision job')
|
|
314
|
+
.option('--wait', 'Poll until provision job completes', true)
|
|
315
|
+
.option('--no-wait', 'Return after provision job is queued')
|
|
279
316
|
.addHelpText('after', DEV_ADD_HELP_AFTER)
|
|
280
317
|
.action(async(options) => {
|
|
281
318
|
try {
|
|
@@ -287,6 +324,27 @@ function setupDevListAddCommands(dev) {
|
|
|
287
324
|
});
|
|
288
325
|
}
|
|
289
326
|
|
|
327
|
+
/**
|
|
328
|
+
* Register dev down command.
|
|
329
|
+
* @param {Command} dev - dev subcommand group
|
|
330
|
+
*/
|
|
331
|
+
function setupDevDownCommand(dev) {
|
|
332
|
+
dev
|
|
333
|
+
.command('down')
|
|
334
|
+
.description('Stop Mutagen sync; --apps also stops app containers')
|
|
335
|
+
.addHelpText('after', DEV_DOWN_HELP_AFTER)
|
|
336
|
+
.option('--apps', 'Also stop running app containers for this developer')
|
|
337
|
+
.action(async(options) => {
|
|
338
|
+
try {
|
|
339
|
+
const { handleDevDown } = require('../commands/dev-down');
|
|
340
|
+
await handleDevDown(options);
|
|
341
|
+
} catch (error) {
|
|
342
|
+
handleCommandError(error, 'dev down');
|
|
343
|
+
process.exit(1);
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
|
|
290
348
|
/**
|
|
291
349
|
* Register dev update/pin/delete commands (remote only).
|
|
292
350
|
* @param {Command} dev - dev subcommand group
|
|
@@ -325,31 +383,71 @@ function setupDevUpdatePinDeleteCommands(dev) {
|
|
|
325
383
|
|
|
326
384
|
dev
|
|
327
385
|
.command('delete <developerId>')
|
|
328
|
-
.description('Remove developer from server (admin)')
|
|
386
|
+
.description('Remove developer from host and server (admin)')
|
|
387
|
+
.option('--db-only', 'Remove from server database only (legacy behaviour)')
|
|
388
|
+
.option('-y, --yes', 'Skip confirmation prompt')
|
|
389
|
+
.option('--wait', 'Poll until removal completes on the host', true)
|
|
390
|
+
.option('--no-wait', 'Return after removal job is queued')
|
|
391
|
+
.option('--json', 'JSON output (includes job result when --wait)')
|
|
329
392
|
.addHelpText('after', DEV_DELETE_HELP_AFTER)
|
|
330
|
-
.action(async(developerId) => {
|
|
393
|
+
.action(async(developerId, options) => {
|
|
331
394
|
try {
|
|
332
|
-
await handleDevDelete(developerId);
|
|
395
|
+
await handleDevDelete(developerId, options);
|
|
333
396
|
} catch (error) {
|
|
334
397
|
handleCommandError(error, 'dev delete');
|
|
335
398
|
process.exit(1);
|
|
336
399
|
}
|
|
337
400
|
});
|
|
338
401
|
|
|
339
|
-
dev
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
402
|
+
setupDevDownCommand(dev);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* Register platform lifecycle commands (host-ops).
|
|
407
|
+
* @param {Command} dev - dev subcommand group
|
|
408
|
+
*/
|
|
409
|
+
function setupDevPlatformCommands(dev) {
|
|
410
|
+
addHostOpsSharedOptions(
|
|
411
|
+
dev
|
|
412
|
+
.command('platform-install-cli [developerId]')
|
|
413
|
+
.description('Install or upgrade Builder CLI on dev host(s) (admin)')
|
|
414
|
+
)
|
|
415
|
+
.option('--force', 'Reinstall even when CLI is present')
|
|
416
|
+
.action(async(developerId, options) => {
|
|
345
417
|
try {
|
|
346
|
-
|
|
347
|
-
await handleDevDown(options);
|
|
418
|
+
await handlePlatformInstallCli(developerId, options);
|
|
348
419
|
} catch (error) {
|
|
349
|
-
handleCommandError(error, 'dev
|
|
420
|
+
handleCommandError(error, 'dev platform-install-cli');
|
|
350
421
|
process.exit(1);
|
|
351
422
|
}
|
|
352
423
|
});
|
|
424
|
+
|
|
425
|
+
addHostOpsSharedOptions(
|
|
426
|
+
dev
|
|
427
|
+
.command('platform-update [developerId]')
|
|
428
|
+
.description('Refresh dev platform images (admin)')
|
|
429
|
+
).action(async(developerId, options) => {
|
|
430
|
+
try {
|
|
431
|
+
await handlePlatformUpdate(developerId, options);
|
|
432
|
+
} catch (error) {
|
|
433
|
+
handleCommandError(error, 'dev platform-update');
|
|
434
|
+
process.exit(1);
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
|
|
438
|
+
addHostOpsSharedOptions(
|
|
439
|
+
dev
|
|
440
|
+
.command('platform-install <developerId>')
|
|
441
|
+
.description('Install dev platform for one developer (admin)')
|
|
442
|
+
.option('--force', 'Remove existing platform then reinstall')
|
|
443
|
+
).action(async(developerId, options) => {
|
|
444
|
+
try {
|
|
445
|
+
await handlePlatformInstall(developerId, options);
|
|
446
|
+
} catch (error) {
|
|
447
|
+
handleCommandError(error, 'dev platform-install');
|
|
448
|
+
process.exit(1);
|
|
449
|
+
}
|
|
450
|
+
});
|
|
353
451
|
}
|
|
354
452
|
|
|
355
453
|
/**
|
|
@@ -359,6 +457,7 @@ function setupDevUpdatePinDeleteCommands(dev) {
|
|
|
359
457
|
function setupDevUserCommands(dev) {
|
|
360
458
|
setupDevListAddCommands(dev);
|
|
361
459
|
setupDevUpdatePinDeleteCommands(dev);
|
|
460
|
+
setupDevPlatformCommands(dev);
|
|
362
461
|
}
|
|
363
462
|
|
|
364
463
|
/**
|
|
@@ -8,24 +8,22 @@ const UPLOAD_HELP_AFTER = `
|
|
|
8
8
|
Examples:
|
|
9
9
|
# Publish integration/<systemKey>/ to the dataplane (typical lab flow after validate + resolve)
|
|
10
10
|
$ aifabrix upload hubspot-demo
|
|
11
|
-
$ aifabrix upload hubspot-demo
|
|
11
|
+
$ aifabrix upload hubspot-demo -v
|
|
12
12
|
$ aifabrix upload hubspot-demo --probe
|
|
13
13
|
|
|
14
14
|
# Build and validate payload only (no API calls)
|
|
15
15
|
$ aifabrix upload hubspot-demo --dry-run
|
|
16
16
|
|
|
17
|
-
# Short summary after publish
|
|
18
|
-
$ aifabrix upload hubspot-demo --minimal
|
|
19
|
-
|
|
20
17
|
# Protection manifests (integration/.protection/ at repo root)
|
|
21
18
|
$ aifabrix upload .protection
|
|
22
|
-
$ aifabrix upload .protection --warnings-as-errors
|
|
19
|
+
$ aifabrix upload .protection --warnings-as-errors
|
|
23
20
|
|
|
24
21
|
Notes:
|
|
25
22
|
- Requires login (aifabrix auth status).
|
|
26
23
|
- Reads files under integration/<systemKey>/ (system JSON, datasources, credentials).
|
|
24
|
+
- Default output is a compact readiness summary; use -v for expanded detail and server-side validate warnings.
|
|
27
25
|
- --probe runs dataplane runtime checks after publish (slower; common in Session 1).
|
|
28
|
-
- test-e2e and test-integration publish local files first by default; use --no-
|
|
26
|
+
- test-e2e and test-integration publish local files first by default; use --no-publish on those commands to skip.
|
|
29
27
|
- After dimension/FK edits on active datasources, use --force (or test-e2e / test-integration / datasource test-* with --sync --force).
|
|
30
28
|
- For one datasource only: aifabrix datasource upload <datasourceKey>
|
|
31
29
|
`;
|
|
@@ -15,8 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
const { handleCommandError } = require('../utils/cli-utils');
|
|
18
|
-
const {
|
|
19
|
-
const { cliOptsSkipCertSync } = require('../certification/cli-cert-sync-skip');
|
|
18
|
+
const { cliOptsSkipPublish } = require('../utils/cli-sync-options');
|
|
20
19
|
const { TEST_INTEGRATION_HELP_AFTER } = require('./setup-app.help');
|
|
21
20
|
const {
|
|
22
21
|
UPLOAD_HELP_AFTER,
|
|
@@ -24,6 +23,39 @@ const {
|
|
|
24
23
|
DELETE_HELP_AFTER
|
|
25
24
|
} = require('./setup-external-system-help');
|
|
26
25
|
|
|
26
|
+
async function handleUploadCommandAction(systemKey, options) {
|
|
27
|
+
const { isProtectionScope } = require('../protection/scope');
|
|
28
|
+
if (isProtectionScope(systemKey)) {
|
|
29
|
+
const { uploadProtectionBatchCommand } = require('../protection/upload-batch');
|
|
30
|
+
const logger = require('../utils/logger');
|
|
31
|
+
const code = await uploadProtectionBatchCommand(
|
|
32
|
+
{
|
|
33
|
+
env: options.env,
|
|
34
|
+
dryRun: options.dryRun === true,
|
|
35
|
+
sync: options.sync === true,
|
|
36
|
+
json: options.json === true,
|
|
37
|
+
verbose: options.verbose === true,
|
|
38
|
+
warningsAsErrors: options.warningsAsErrors === true
|
|
39
|
+
},
|
|
40
|
+
logger
|
|
41
|
+
);
|
|
42
|
+
if (code !== 0) {
|
|
43
|
+
process.exit(code);
|
|
44
|
+
}
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const upload = require('../commands/upload');
|
|
48
|
+
const probeTimeout =
|
|
49
|
+
options.probeTimeout === undefined || options.probeTimeout === null
|
|
50
|
+
? 120000
|
|
51
|
+
: Number(options.probeTimeout);
|
|
52
|
+
await upload.uploadExternalSystem(systemKey, {
|
|
53
|
+
...options,
|
|
54
|
+
probeTimeout: Number.isFinite(probeTimeout) ? probeTimeout : 120000,
|
|
55
|
+
pathOptions: {}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
27
59
|
function setupDownloadCommand(program) {
|
|
28
60
|
program.command('download <systemKey>')
|
|
29
61
|
.description('Pull external system from dataplane into integration/<key>/')
|
|
@@ -31,6 +63,11 @@ function setupDownloadCommand(program) {
|
|
|
31
63
|
.option('--format <format>', 'Output format: json | yaml (default: yaml or config format)')
|
|
32
64
|
.option('--dry-run', 'Show what would be downloaded without actually downloading')
|
|
33
65
|
.option('--force', 'Overwrite existing README.md without prompting')
|
|
66
|
+
.option(
|
|
67
|
+
'--version <target>',
|
|
68
|
+
'Manifest version to download (running default; latest or explicit id when supported)',
|
|
69
|
+
'running'
|
|
70
|
+
)
|
|
34
71
|
.action(async(systemKey, options) => {
|
|
35
72
|
try {
|
|
36
73
|
const config = require('../core/config');
|
|
@@ -52,53 +89,22 @@ function setupUploadCommand(program) {
|
|
|
52
89
|
.description('Validate, publish to dataplane, and register with controller (draft application); or upload .protection batch')
|
|
53
90
|
.addHelpText('after', UPLOAD_HELP_AFTER)
|
|
54
91
|
.option('--dry-run', 'Validate and build payload only; no API calls')
|
|
55
|
-
.option(
|
|
92
|
+
.option(
|
|
93
|
+
'--sync',
|
|
94
|
+
'After publish, run full datasource data sync for every datasource on the system (default: bootstrap-if-empty only)'
|
|
95
|
+
)
|
|
56
96
|
.option('--json', 'For .protection: JSON output')
|
|
57
97
|
.option('--warnings-as-errors', 'For .protection: pass strict=true to dataplane validate')
|
|
58
|
-
.option('-v, --verbose', '
|
|
98
|
+
.option('-v, --verbose', 'Expanded upload summary and server-side pipeline validate warnings before publish')
|
|
59
99
|
.option('--probe', 'After publish, run dataplane runtime checks (validation/run); slower')
|
|
60
|
-
.option('--minimal', 'Print only a short readiness summary after upload')
|
|
61
100
|
.option('--probe-timeout <ms>', 'Timeout for --probe (default: 120000)', '120000')
|
|
62
|
-
.option(
|
|
63
|
-
'--no-cert-sync',
|
|
64
|
-
'Skip updating the system file certification block from the dataplane active certificate after publish'
|
|
65
|
-
)
|
|
66
101
|
.option(
|
|
67
102
|
'--force',
|
|
68
103
|
'Bypass schema guards on active datasources during publish (dangerous; shows a warning)'
|
|
69
104
|
)
|
|
70
105
|
.action(async(systemKey, options) => {
|
|
71
106
|
try {
|
|
72
|
-
|
|
73
|
-
if (isProtectionScope(systemKey)) {
|
|
74
|
-
const { uploadProtectionBatchCommand } = require('../protection/upload-batch');
|
|
75
|
-
const logger = require('../utils/logger');
|
|
76
|
-
const code = await uploadProtectionBatchCommand(
|
|
77
|
-
{
|
|
78
|
-
env: options.env,
|
|
79
|
-
dryRun: options.dryRun === true,
|
|
80
|
-
noSync: options.noSync === true,
|
|
81
|
-
json: options.json === true,
|
|
82
|
-
verbose: options.verbose === true,
|
|
83
|
-
warningsAsErrors: options.warningsAsErrors === true
|
|
84
|
-
},
|
|
85
|
-
logger
|
|
86
|
-
);
|
|
87
|
-
if (code !== 0) {
|
|
88
|
-
process.exit(code);
|
|
89
|
-
}
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
const upload = require('../commands/upload');
|
|
93
|
-
const probeTimeout =
|
|
94
|
-
options.probeTimeout === undefined || options.probeTimeout === null
|
|
95
|
-
? 120000
|
|
96
|
-
: Number(options.probeTimeout);
|
|
97
|
-
await upload.uploadExternalSystem(systemKey, {
|
|
98
|
-
...options,
|
|
99
|
-
noCertSync: cliOptsSkipCertSync(options),
|
|
100
|
-
probeTimeout: Number.isFinite(probeTimeout) ? probeTimeout : 120000
|
|
101
|
-
});
|
|
107
|
+
await handleUploadCommandAction(systemKey, options);
|
|
102
108
|
} catch (error) {
|
|
103
109
|
handleCommandError(error, 'upload');
|
|
104
110
|
process.exit(1);
|
|
@@ -181,7 +187,7 @@ async function runExternalSystemTestIntegration(appName, options) {
|
|
|
181
187
|
environment: options.env || options.environment,
|
|
182
188
|
debug: options.debug,
|
|
183
189
|
perDatasource: options.perDatasource,
|
|
184
|
-
|
|
190
|
+
noPublish: cliOptsSkipPublish(options)
|
|
185
191
|
};
|
|
186
192
|
const results = await test.testExternalSystemIntegration(appName, opts);
|
|
187
193
|
test.displayIntegrationTestResults(results, options.verbose, { debug: options.debug, runType: 'integration' });
|
|
@@ -192,9 +198,6 @@ async function runExternalSystemTestIntegration(appName, options) {
|
|
|
192
198
|
requireCert: options.requireCert === true
|
|
193
199
|
});
|
|
194
200
|
if (exitCode !== 0) process.exit(exitCode);
|
|
195
|
-
if (cliOptsSkipCertSync(options)) return;
|
|
196
|
-
const { trySyncCertificationFromDataplaneForExternalApp } = require('../certification/sync-after-external-command');
|
|
197
|
-
await trySyncCertificationFromDataplaneForExternalApp(appName, 'test-integration');
|
|
198
201
|
}
|
|
199
202
|
|
|
200
203
|
/**
|
|
@@ -238,10 +241,7 @@ function setupExternalSystemTestCommands(program) {
|
|
|
238
241
|
.option('-e, --env <env>', 'Environment: dev, tst, or pro (builder: dev/tst for container)', 'dev')
|
|
239
242
|
.option('-v, --verbose', 'Show detailed test output')
|
|
240
243
|
.option('-d, --debug', 'Include debug output and write log to integration/<systemKey>/logs/')
|
|
241
|
-
.option(
|
|
242
|
-
'--no-sync',
|
|
243
|
-
'Skip publishing local integration files; use system config already on the dataplane'
|
|
244
|
-
)
|
|
244
|
+
.option('--no-publish', 'Skip publishing local integration files before tests')
|
|
245
245
|
.option(
|
|
246
246
|
'--sync',
|
|
247
247
|
'Publish local system and datasource files before tests (default for external integration; same as upload)'
|
|
@@ -250,12 +250,18 @@ function setupExternalSystemTestCommands(program) {
|
|
|
250
250
|
'--force',
|
|
251
251
|
'With --sync, pass force to upload (bypass active-datasource schema replacement guards; same as aifabrix upload --force)'
|
|
252
252
|
)
|
|
253
|
-
.option('--warnings-as-errors', 'Treat aggregate warn as failure (exit 1)')
|
|
254
|
-
.option('--require-cert', 'Require certification passed on every datasource (exit 2 if not)')
|
|
255
253
|
.option(
|
|
256
|
-
'--
|
|
257
|
-
'
|
|
254
|
+
'--version <target>',
|
|
255
|
+
'Manifest version for test (latest, running, or explicit version id)',
|
|
256
|
+
'latest'
|
|
258
257
|
)
|
|
258
|
+
.option(
|
|
259
|
+
'--sync-mode <mode>',
|
|
260
|
+
'Sync policy during test: auto (default), never, or force. Distinct from --sync (publish local files).',
|
|
261
|
+
'auto'
|
|
262
|
+
)
|
|
263
|
+
.option('--warnings-as-errors', 'Treat aggregate warn as failure (exit 1)')
|
|
264
|
+
.option('--require-cert', 'Require certification passed on every datasource (exit 2 if not)')
|
|
259
265
|
.addHelpText('after', TEST_INTEGRATION_HELP_AFTER)
|
|
260
266
|
.action(async(appName, options, cmd) => {
|
|
261
267
|
try {
|
|
@@ -264,7 +270,7 @@ function setupExternalSystemTestCommands(program) {
|
|
|
264
270
|
const opts = {
|
|
265
271
|
...options,
|
|
266
272
|
env: envExplicit ? options.env : undefined,
|
|
267
|
-
|
|
273
|
+
noPublish: cliOptsSkipPublish(options, cmd)
|
|
268
274
|
};
|
|
269
275
|
await runTestIntegrationCommand(appName, opts);
|
|
270
276
|
} catch (error) {
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aifabrix up-builder-api` action body.
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview up-builder-api CLI action
|
|
5
|
+
* @author AI Fabrix Team
|
|
6
|
+
* @version 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const { handleCommandError } = require('../utils/cli-utils');
|
|
12
|
+
const { handleUpBuilderApi } = require('../commands/up-builder-api');
|
|
13
|
+
const { cleanBuilderAppDirs, BUILDER_API_APP_KEYS } = require('../commands/up-common');
|
|
14
|
+
const { recordInfraInstallationCommand } = require('./installation-log-command');
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @param {Object} options
|
|
18
|
+
* @returns {Promise<string[]>}
|
|
19
|
+
*/
|
|
20
|
+
async function runUpBuilderApiWork(options) {
|
|
21
|
+
let cleanedAppKeys = [];
|
|
22
|
+
if (options.force) {
|
|
23
|
+
const cleaned = await cleanBuilderAppDirs([...BUILDER_API_APP_KEYS]);
|
|
24
|
+
cleanedAppKeys = Array.isArray(cleaned) ? cleaned : [];
|
|
25
|
+
}
|
|
26
|
+
await handleUpBuilderApi(options);
|
|
27
|
+
return cleanedAppKeys;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @param {Object} options
|
|
32
|
+
* @returns {Promise<void>}
|
|
33
|
+
*/
|
|
34
|
+
async function handleUpBuilderApiCliAction(options) {
|
|
35
|
+
const startedAt = new Date();
|
|
36
|
+
let cleanedAppKeys = [];
|
|
37
|
+
try {
|
|
38
|
+
cleanedAppKeys = await runUpBuilderApiWork(options);
|
|
39
|
+
await recordInfraInstallationCommand({
|
|
40
|
+
command: 'up-builder-api',
|
|
41
|
+
options,
|
|
42
|
+
startedAt,
|
|
43
|
+
outcome: 'success',
|
|
44
|
+
platformAppList: ['builder-api'],
|
|
45
|
+
cleanup: cleanedAppKeys.length > 0 ? { cleanedAppKeys } : undefined
|
|
46
|
+
});
|
|
47
|
+
} catch (error) {
|
|
48
|
+
await recordInfraInstallationCommand({
|
|
49
|
+
command: 'up-builder-api',
|
|
50
|
+
options,
|
|
51
|
+
startedAt,
|
|
52
|
+
outcome: 'failure',
|
|
53
|
+
error,
|
|
54
|
+
platformAppList: ['builder-api'],
|
|
55
|
+
cleanup: cleanedAppKeys.length > 0 ? { cleanedAppKeys } : undefined
|
|
56
|
+
});
|
|
57
|
+
handleCommandError(error, 'up-builder-api');
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
module.exports = {
|
|
63
|
+
handleUpBuilderApiCliAction
|
|
64
|
+
};
|
|
@@ -16,6 +16,7 @@ const { resolveControllerUrl } = require('../utils/controller-url');
|
|
|
16
16
|
const { handleLogin } = require('../commands/login');
|
|
17
17
|
const { handleUpMiso } = require('../commands/up-miso');
|
|
18
18
|
const { handleUpDataplane } = require('../commands/up-dataplane');
|
|
19
|
+
const { handleUpBuilderApi } = require('../commands/up-builder-api');
|
|
19
20
|
const {
|
|
20
21
|
applyUpPlatformForceConfig,
|
|
21
22
|
cleanBuilderAppDirs,
|
|
@@ -25,7 +26,7 @@ const {
|
|
|
25
26
|
const { runGuidedUpPlatform } = require('./infra-guided');
|
|
26
27
|
const { recordInfraInstallationCommand } = require('./installation-log-command');
|
|
27
28
|
|
|
28
|
-
const PLATFORM_APPS = ['keycloak', 'miso-controller', 'dataplane'];
|
|
29
|
+
const PLATFORM_APPS = ['keycloak', 'miso-controller', 'dataplane', 'builder-api'];
|
|
29
30
|
|
|
30
31
|
/**
|
|
31
32
|
* @param {Object} options
|
|
@@ -57,6 +58,7 @@ async function runUpPlatformWork(options) {
|
|
|
57
58
|
await prepareUrlsLocalRegistryForUpPlatform();
|
|
58
59
|
await handleUpMiso(options);
|
|
59
60
|
await handleUpDataplane(options);
|
|
61
|
+
await handleUpBuilderApi({ ...options, platformInstall: true });
|
|
60
62
|
}
|
|
61
63
|
return cleanedAppKeys;
|
|
62
64
|
}
|
package/lib/cli/setup-infra.js
CHANGED
|
@@ -285,6 +285,20 @@ function setupUpDataplaneCommand(program) {
|
|
|
285
285
|
});
|
|
286
286
|
}
|
|
287
287
|
|
|
288
|
+
function setupUpBuilderApiCommand(program) {
|
|
289
|
+
program.command('up-builder-api')
|
|
290
|
+
.description('Materialize and run builder-api locally (dev env; needs up-infra; dataplane recommended)')
|
|
291
|
+
.option('-r, --registry <url>', 'Override registry for builder-api image')
|
|
292
|
+
.option('--registry-mode <mode>', 'Override registry mode (acr|external)')
|
|
293
|
+
.option('-i, --image <ref>', 'Override builder-api image reference')
|
|
294
|
+
.option('-f, --force', 'Clean builder/builder-api and re-fetch from templates')
|
|
295
|
+
.option('--verbose', 'Show full orchestration output')
|
|
296
|
+
.action((options) => {
|
|
297
|
+
const { handleUpBuilderApiCliAction } = require('./setup-infra-up-builder-api-action');
|
|
298
|
+
return handleUpBuilderApiCliAction(options);
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
|
|
288
302
|
function setupDownInfraCommand(program) {
|
|
289
303
|
program.command('down-infra [service|app]')
|
|
290
304
|
.description('Stop all infra, or stop one app; use -v to remove volumes')
|
|
@@ -418,6 +432,7 @@ function setupInfraCommands(program) {
|
|
|
418
432
|
setupUpPlatformCommand(program);
|
|
419
433
|
setupUpMisoCommand(program);
|
|
420
434
|
setupUpDataplaneCommand(program);
|
|
435
|
+
setupUpBuilderApiCommand(program);
|
|
421
436
|
setupDownInfraCommand(program);
|
|
422
437
|
setupDoctorCommand(program);
|
|
423
438
|
setupStatusCommand(program);
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Top-level connected-system list command.
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview aifabrix list — dataplane external systems
|
|
5
|
+
* @author AI Fabrix Team
|
|
6
|
+
* @version 2.0.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
const chalk = require('chalk');
|
|
10
|
+
const logger = require('../utils/logger');
|
|
11
|
+
const { listExternalSystemsOnDataplane } = require('../app/list-external-systems');
|
|
12
|
+
|
|
13
|
+
const LIST_HELP_AFTER = `
|
|
14
|
+
Lists connected systems published on the dataplane (not controller pipeline applications).
|
|
15
|
+
|
|
16
|
+
Examples:
|
|
17
|
+
aifabrix list
|
|
18
|
+
aifabrix list --json
|
|
19
|
+
|
|
20
|
+
Controller applications only: aifabrix app list
|
|
21
|
+
Show one system: aifabrix show <systemKey> --online
|
|
22
|
+
`;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @param {import('commander').Command} program
|
|
26
|
+
*/
|
|
27
|
+
function setupListCommand(program) {
|
|
28
|
+
program
|
|
29
|
+
.command('list')
|
|
30
|
+
.description('List connected systems on the dataplane')
|
|
31
|
+
.option('--json', 'Output as JSON')
|
|
32
|
+
.addHelpText('after', LIST_HELP_AFTER)
|
|
33
|
+
.action(async(options) => {
|
|
34
|
+
try {
|
|
35
|
+
await listExternalSystemsOnDataplane({ json: options.json === true });
|
|
36
|
+
} catch (error) {
|
|
37
|
+
logger.error(chalk.red(`Error: ${error.message}`));
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
module.exports = { setupListCommand };
|
|
@@ -34,7 +34,11 @@ function buildRepairExternalIntegrationOptions(appName, options, format) {
|
|
|
34
34
|
api: options.api || all,
|
|
35
35
|
test: options.test || all,
|
|
36
36
|
backup: options.backup,
|
|
37
|
-
noBackup: options.noBackup
|
|
37
|
+
noBackup: options.noBackup,
|
|
38
|
+
splitDatasources: options.splitDatasources === true,
|
|
39
|
+
rbacPreset: options.rbacPreset,
|
|
40
|
+
authWebhook: options.authWebhook === true,
|
|
41
|
+
authSync: options.authSync === true
|
|
38
42
|
};
|
|
39
43
|
}
|
|
40
44
|
|
|
@@ -142,7 +146,7 @@ function logRepairResult(options, result) {
|
|
|
142
146
|
*/
|
|
143
147
|
async function handleRepairCommand(appName, options) {
|
|
144
148
|
const { repairExternalIntegration } = require('../commands/repair');
|
|
145
|
-
const { appPath } = await detectAppType(appName);
|
|
149
|
+
const { appPath } = await detectAppType(appName, {});
|
|
146
150
|
logOfflinePathWhenType(appPath);
|
|
147
151
|
let format = 'yaml';
|
|
148
152
|
try {
|
|
@@ -151,10 +155,9 @@ async function handleRepairCommand(appName, options) {
|
|
|
151
155
|
} catch (_) {
|
|
152
156
|
/* default yaml when config unavailable */
|
|
153
157
|
}
|
|
154
|
-
const result = await repairExternalIntegration(
|
|
155
|
-
appName,
|
|
156
|
-
|
|
157
|
-
);
|
|
158
|
+
const result = await repairExternalIntegration(appName, {
|
|
159
|
+
...buildRepairExternalIntegrationOptions(appName, options, format)
|
|
160
|
+
});
|
|
158
161
|
logRepairResult(options, result);
|
|
159
162
|
}
|
|
160
163
|
|
|
@@ -175,9 +178,25 @@ function setupRepairCommand(program) {
|
|
|
175
178
|
)
|
|
176
179
|
.option('--doc', 'Regenerate README.md from deployment manifest')
|
|
177
180
|
.option('--expose', 'Set exposed.schema on each datasource from all fieldMappings.attributes keys (metadata.<key>); removes deprecated exposed.attributes if present')
|
|
178
|
-
.option('--rbac', 'Ensure RBAC permissions per datasource and add default Admin/Reader roles if none exist')
|
|
181
|
+
.option('--rbac', 'Ensure RBAC permissions per datasource and add default Admin/Reader roles if none exist; warns when capabilities lack openapi.operations (auto-syncs operations)')
|
|
179
182
|
.option('--sync', 'Add default sync section to datasources that lack it')
|
|
183
|
+
.option(
|
|
184
|
+
'--auth-webhook',
|
|
185
|
+
'Ensure authentications[] slot usage=webhookInbound (454 webhook inbound auth)'
|
|
186
|
+
)
|
|
187
|
+
.option(
|
|
188
|
+
'--auth-sync',
|
|
189
|
+
'Ensure authentications[] slot usage=syncExecution (454 syncBridge propagation auth)'
|
|
190
|
+
)
|
|
180
191
|
.option('--test', 'Generate testPayload.payloadTemplate and testPayload.expectedResult from attributes')
|
|
192
|
+
.option(
|
|
193
|
+
'--split-datasources',
|
|
194
|
+
'Split monolithic *-datasource-operations into per-OpenAPI-tag datasources (orchestration-api)'
|
|
195
|
+
)
|
|
196
|
+
.option(
|
|
197
|
+
'--rbac-preset <preset>',
|
|
198
|
+
'RBAC preset for facade APIs (e.g. platform — dataplane role catalog)'
|
|
199
|
+
)
|
|
181
200
|
.option('--no-backup', 'Skip timestamped copies under integration/<systemKey>/backup/')
|
|
182
201
|
.option('--dry-run', 'Report changes only; do not write')
|
|
183
202
|
.addHelpText('after', REPAIR_HELP_AFTER)
|
package/lib/cli/setup-utility.js
CHANGED
|
@@ -96,7 +96,7 @@ function setupJsonCommand(program) {
|
|
|
96
96
|
.addHelpText('after', JSON_HELP_AFTER)
|
|
97
97
|
.action(async(appName, options) => {
|
|
98
98
|
try {
|
|
99
|
-
const resolved = await getResolveAppPath(appName);
|
|
99
|
+
const resolved = await getResolveAppPath(appName, {});
|
|
100
100
|
const { emitManifestMetadataLineIfTTY } = require('../utils/manifest-source-emit');
|
|
101
101
|
emitManifestMetadataLineIfTTY(logger, {
|
|
102
102
|
appKey: appName,
|
|
@@ -104,7 +104,9 @@ function setupJsonCommand(program) {
|
|
|
104
104
|
envOnly: resolved.envOnly,
|
|
105
105
|
json: false
|
|
106
106
|
});
|
|
107
|
-
const result = await generator.generateDeployJsonWithValidation(appName,
|
|
107
|
+
const result = await generator.generateDeployJsonWithValidation(appName, {
|
|
108
|
+
...options
|
|
109
|
+
});
|
|
108
110
|
if (result.success) {
|
|
109
111
|
const fileName = result.path.includes('application-schema.json') ? 'application-schema.json' : 'deployment JSON';
|
|
110
112
|
logger.log(`✔ Generated ${fileName}: ${result.path}`);
|
|
@@ -195,7 +197,7 @@ function setupConvertCommand(program) {
|
|
|
195
197
|
|
|
196
198
|
function setupShowCommand(program) {
|
|
197
199
|
program.command('show <appKey|systemKey>')
|
|
198
|
-
.description('Show builder app or
|
|
200
|
+
.description('Show builder app or connected system from local tree (default) or online (--online)')
|
|
199
201
|
.option('--online', 'Fetch application data from the controller')
|
|
200
202
|
.option('--json', 'Output as JSON')
|
|
201
203
|
.option(
|