@aifabrix/builder 2.49.2 → 2.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor/plans/157.1-security-quality-violations-by-type.csv +374 -0
- package/.cursor/rules/assistant-driven-integration-build.mdc +40 -0
- package/.cursor/rules/deploy-rules/docker-image-ip-policy.mdc +49 -0
- package/.cursor/rules/plan-rules/application-lifecycle.mdc +30 -0
- package/.cursor/rules/plan-rules/plan-frontmatter.mdc +35 -0
- package/.cursor/rules/plan-rules/plan-lifecycle.mdc +31 -0
- package/.cursor/rules/plan-rules/plan-validation-gate.mdc +34 -0
- package/.cursor/skills/README.md +1 -0
- package/.dockerignore +52 -0
- package/.eslintignore +22 -0
- package/README.md +2 -0
- package/bin/builder-api-cleanup.js +26 -0
- package/bin/builder-api-nest.js +10 -0
- package/bin/builder-api-spike.js +19 -0
- package/enterprise-knowledge/README.md +50 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/README.md +22 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/application.json +15 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/deploy.js +69 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-deploy.json +52 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-system.json +29 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/env.template +2 -0
- package/integration/README.md +81 -0
- package/integration/github/README.md +53 -0
- package/integration/github/application.json +21 -0
- package/integration/github/deploy.js +72 -0
- package/integration/github/env.template +11 -0
- package/integration/github/github-datasource-issue-comments.json +239 -0
- package/integration/github/github-datasource-issues.json +399 -0
- package/integration/github/github-datasource-repository.json +354 -0
- package/integration/github/github-deploy.json +1202 -0
- package/integration/github/github-system.json +82 -0
- package/integration/hubspot-test/README.md +1 -1
- package/integration/hubspot-test/create-hubspot.js +1 -16
- package/jest.isolated-projects.js +31 -1
- package/jest.projects.js +87 -1
- package/lib/api/dev-server-https.js +1 -1
- package/lib/api/enterprise-knowledge.api.js +63 -0
- package/lib/api/evidence-kinds.api.js +128 -0
- package/lib/api/evidence.api.js +172 -0
- package/lib/api/external-systems.api.js +8 -2
- package/lib/api/pipeline.api.js +5 -1
- package/lib/api/resource-types.api.js +5 -4
- package/lib/api/roles.api.js +121 -0
- package/lib/api/types/enterprise-knowledge.types.js +46 -0
- package/lib/api/types/evidence-kinds.types.js +42 -0
- package/lib/api/types/evidence.types.js +67 -0
- package/lib/api/types/resource-types.types.js +2 -0
- package/lib/api/types/roles.types.js +36 -0
- package/lib/app/certification-verify-rows.js +1 -1
- package/lib/app/controller-application-filter.js +36 -0
- package/lib/app/deploy.js +1 -1
- package/lib/app/list-external-systems.js +130 -0
- package/lib/app/list.js +20 -8
- package/lib/app/run.js +3 -1
- package/lib/app/show-display.js +8 -3
- package/lib/app/show-online.js +178 -0
- package/lib/app/show.js +39 -90
- package/lib/build/builder-api-docker-staging.js +47 -0
- package/lib/build/miso-controller-npm-sdk-guard.js +2 -2
- package/lib/build/standard-docker-build.js +2 -0
- package/lib/certification/merge-certification-from-artifact.js +1 -1
- package/lib/certification/post-unified-cert-sync.js +4 -31
- package/lib/certification/sync-after-external-command.js +0 -1
- package/lib/certification/sync-system-certification.js +0 -3
- package/lib/channels/add-channel.js +40 -34
- package/lib/channels/approval-guides/chatgpt.js +33 -0
- package/lib/channels/approval-guides/credential-portal.js +38 -0
- package/lib/channels/approval-guides/index.js +110 -0
- package/lib/channels/approval-guides/microsoft-copilot.js +34 -0
- package/lib/channels/approval-guides/slack.js +34 -0
- package/lib/channels/approval-guides/teams-bot.js +35 -0
- package/lib/channels/approval-guides/web-embed.js +32 -0
- package/lib/channels/channel-approval-guide.js +11 -0
- package/lib/channels/channel-artifact-generator.js +18 -5
- package/lib/channels/channel-audit.js +3 -0
- package/lib/channels/channel-auth-context.js +1 -1
- package/lib/channels/channel-description.js +59 -0
- package/lib/channels/channel-integration-generator.js +13 -230
- package/lib/channels/channel-integration-template.js +94 -0
- package/lib/channels/channel-runtime-resolver.js +43 -3
- package/lib/channels/channel-status-display.js +66 -26
- package/lib/channels/channel-targets.js +3 -3
- package/lib/cli/index.js +31 -3
- package/lib/cli/infra-guided.js +5 -1
- package/lib/cli/setup-app-external-create.js +111 -0
- package/lib/cli/setup-app.help.js +1 -1
- package/lib/cli/setup-app.js +60 -130
- package/lib/cli/setup-app.test-commands.js +26 -52
- package/lib/cli/setup-certification-commands.js +4 -4
- package/lib/cli/setup-certification.help.js +9 -9
- package/lib/cli/setup-dev.js +30 -9
- package/lib/cli/setup-external-system-help.js +4 -6
- package/lib/cli/setup-external-system.js +58 -52
- package/lib/cli/setup-infra-up-builder-api-action.js +64 -0
- package/lib/cli/setup-infra-up-platform-action.js +3 -1
- package/lib/cli/setup-infra.js +15 -0
- package/lib/cli/setup-list.js +43 -0
- package/lib/cli/setup-utility-help-after.js +12 -0
- package/lib/cli/setup-utility-repair.js +26 -7
- package/lib/cli/setup-utility-validate.js +41 -2
- package/lib/cli/setup-utility.js +5 -3
- package/lib/commands/app.js +15 -43
- package/lib/commands/channel-add-setup.js +110 -0
- package/lib/commands/channel.js +42 -8
- package/lib/commands/datasource-sync-display.js +96 -0
- package/lib/commands/datasource-sync-policy.js +210 -0
- package/lib/commands/datasource-test-trust-cli.js +6 -6
- package/lib/commands/datasource-unified-test-cli.js +2 -1
- package/lib/commands/datasource-unified-test-cli.options.js +33 -23
- package/lib/commands/deploy-gate-failure-details.js +184 -0
- package/lib/commands/deploy-gate-orchestrator.js +368 -0
- package/lib/commands/dev-cli-handlers.js +7 -62
- package/lib/commands/dev-host-ops-params.js +91 -0
- package/lib/commands/dev-host-ops-poll.js +111 -0
- package/lib/commands/dev-host-ops.js +107 -94
- package/lib/commands/dev-init.js +6 -106
- package/lib/commands/dev-refresh.js +197 -0
- package/lib/commands/enterprise-knowledge.js +284 -0
- package/lib/commands/evidence-cli-leaves.js +250 -0
- package/lib/commands/evidence-kind.js +428 -0
- package/lib/commands/evidence.js +51 -0
- package/lib/commands/governance-cli-shared.js +2 -2
- package/lib/commands/governance-command-action.js +5 -3
- package/lib/commands/governance-fixture-subjects.js +85 -0
- package/lib/commands/governance.js +1 -1
- package/lib/commands/lifecycle-command-action.js +2 -2
- package/lib/commands/lifecycle-external.js +3 -3
- package/lib/commands/manifest-cli-auth.js +29 -0
- package/lib/commands/manifest-cli-commands.js +170 -0
- package/lib/commands/manifest-cli-integration-path.js +63 -0
- package/lib/commands/manifest.js +21 -0
- package/lib/commands/protection-cli-leaves.js +3 -3
- package/lib/commands/repair-auth-apply.js +15 -1
- package/lib/commands/repair-authentications-454.js +169 -0
- package/lib/commands/repair-capability-openapi-warnings.js +126 -0
- package/lib/commands/repair-datasource-apply.js +135 -0
- package/lib/commands/repair-datasource-auto-rbac.js +62 -1
- package/lib/commands/repair-datasource-http-service-contract.js +239 -0
- package/lib/commands/repair-datasource-operation-security.js +180 -0
- package/lib/commands/repair-datasource-run.js +7 -2
- package/lib/commands/repair-datasource-sync-operations.js +177 -0
- package/lib/commands/repair-datasource-webhooks-sync-bridge.js +133 -0
- package/lib/commands/repair-datasource.js +12 -68
- package/lib/commands/repair-env-template.js +11 -1
- package/lib/commands/repair-external-run.js +121 -31
- package/lib/commands/repair-internal.js +1 -1
- package/lib/commands/repair-openapi-export.js +156 -0
- package/lib/commands/repair-openapi-sync.js +33 -8
- package/lib/commands/repair-orchestration-datasource-split.js +259 -0
- package/lib/commands/repair-persist.js +22 -1
- package/lib/commands/repair-rbac-platform-preset.js +204 -0
- package/lib/commands/repair-rbac-reader-roles.js +191 -0
- package/lib/commands/repair-rbac.js +163 -86
- package/lib/commands/repair-steps.js +83 -18
- package/lib/commands/repair-system-permissions.js +1 -0
- package/lib/commands/repair.js +1 -1
- package/lib/commands/resource-type.js +166 -44
- package/lib/commands/role.js +452 -0
- package/lib/commands/run-post-publish-data-sync.js +68 -0
- package/lib/commands/setup-modes.js +1 -1
- package/lib/commands/setup.js +1 -1
- package/lib/commands/test-e2e-external.js +21 -8
- package/lib/commands/test-governance-cli-options.js +2 -2
- package/lib/commands/test-trust-cli-options.js +2 -2
- package/lib/commands/up-builder-api-bootstrap.js +71 -0
- package/lib/commands/up-builder-api-provision.js +241 -0
- package/lib/commands/up-builder-api.js +88 -0
- package/lib/commands/up-common.js +25 -1
- package/lib/commands/upload-credential-push-log.js +117 -0
- package/lib/commands/upload-data-sync-finalize.js +60 -0
- package/lib/commands/upload-probe.js +66 -0
- package/lib/commands/upload-publish-context.js +4 -1
- package/lib/commands/upload-sidecar-followups.js +55 -27
- package/lib/commands/upload.js +116 -157
- package/lib/commands/validate-json.js +230 -0
- package/lib/commands/verify-governance-combined-external.js +1 -1
- package/lib/commands/verify-governance-db.js +2 -2
- package/lib/commands/verify-operations-command-action.js +2 -2
- package/lib/commands/verify-operations-step-plan.js +79 -41
- package/lib/commands/verify-operations-steps.js +2 -2
- package/lib/commands/verify-trust-command-action.js +1 -1
- package/lib/commands/wizard-core.js +1 -1
- package/lib/commands/wizard-headless.js +2 -1
- package/lib/core/admin-secrets.js +2 -6
- package/lib/core/audit-logger.js +1 -1
- package/lib/core/secrets-env-content.js +10 -4
- package/lib/core/secrets-env-write.js +2 -13
- package/lib/core/secrets-load.js +1 -3
- package/lib/datasource/agent-trust-run.js +3 -3
- package/lib/datasource/capability/relate-operations.js +1 -1
- package/lib/datasource/deploy.js +3 -1
- package/lib/datasource/test-e2e.js +6 -1
- package/lib/datasource/unified-validation-run-body.js +4 -1
- package/lib/datasource/unified-validation-run.js +1 -1
- package/lib/deployment/deploy-poll-ui.js +73 -12
- package/lib/deployment/deployer-poll-run.js +113 -0
- package/lib/deployment/deployer.js +17 -87
- package/lib/evidence/dataplane-context.js +21 -0
- package/lib/evidence/evidence-display.js +78 -0
- package/lib/evidence/evidence-service.js +392 -0
- package/lib/external-system/deploy.js +290 -112
- package/lib/external-system/download.js +7 -3
- package/lib/external-system/test-execution.js +1 -1
- package/lib/external-system/test-system-level.js +8 -10
- package/lib/external-system/test.js +12 -6
- package/lib/generator/deploy-script.js +73 -0
- package/lib/generator/external.js +2 -1
- package/lib/generator/helpers.js +13 -5
- package/lib/generator/index.js +17 -2
- package/lib/generator/split-variables.js +9 -3
- package/lib/generator/wizard.js +3 -36
- package/lib/infrastructure/helpers-docker-check.js +6 -0
- package/lib/infrastructure/helpers.js +1 -1
- package/lib/internal/fs-real-sync.js +22 -1
- package/lib/internal/node-fs.js +2 -0
- package/lib/lifecycle/lifecycle-governance-options.js +1 -1
- package/lib/lifecycle/verify-step-progress.js +1 -1
- package/lib/programmatic/access-log.js +26 -0
- package/lib/programmatic/auth-config.js +45 -0
- package/lib/programmatic/bearer-auth.js +176 -0
- package/lib/programmatic/builder-api-request.js +175 -0
- package/lib/programmatic/builder-api-route-dispatch.js +82 -0
- package/lib/programmatic/builder-api-runtime-config.js +42 -0
- package/lib/programmatic/builder-api-server.js +230 -0
- package/lib/programmatic/builder-help-authentication-catalog.js +282 -0
- package/lib/programmatic/builder-help-connected-system-ui.js +266 -0
- package/lib/programmatic/builder-help-enterprise-sync-fabrix.js +60 -0
- package/lib/programmatic/builder-help-envelope.js +36 -0
- package/lib/programmatic/builder-help-fixtures.js +200 -0
- package/lib/programmatic/builder-help-governance.js +172 -0
- package/lib/programmatic/builder-help-schema-catalog.js +92 -0
- package/lib/programmatic/builder-help.js +361 -0
- package/lib/programmatic/capability-registry.js +77 -0
- package/lib/programmatic/command-options.js +32 -0
- package/lib/programmatic/enterprise-mcp-client.js +114 -0
- package/lib/programmatic/http-problem-details.js +99 -0
- package/lib/programmatic/http-route-match.js +40 -0
- package/lib/programmatic/idempotency-cache.js +69 -0
- package/lib/programmatic/index.js +53 -0
- package/lib/programmatic/integration-path-scope.js +39 -0
- package/lib/programmatic/log-redaction.js +66 -0
- package/lib/programmatic/manifest-get-section.js +146 -0
- package/lib/programmatic/manifest-patch-section.js +252 -0
- package/lib/programmatic/manifest-repair.js +122 -0
- package/lib/programmatic/manifest-section-dependency-graph.js +160 -0
- package/lib/programmatic/manifest-section-io.js +225 -0
- package/lib/programmatic/manifest-section-quality.js +171 -0
- package/lib/programmatic/manifest-section-registry-data.js +269 -0
- package/lib/programmatic/manifest-section-registry.js +222 -0
- package/lib/programmatic/nest-http-bridge.js +34 -0
- package/lib/programmatic/openapi-component-schemas.js +68 -0
- package/lib/programmatic/openapi-description-enricher.js +117 -0
- package/lib/programmatic/openapi-descriptions.js +190 -0
- package/lib/programmatic/openapi-docs-serving.js +123 -0
- package/lib/programmatic/openapi-help-schemas.js +63 -0
- package/lib/programmatic/openapi-manifest-schemas.js +141 -0
- package/lib/programmatic/openapi-operation-bindings.js +274 -0
- package/lib/programmatic/openapi-request-schemas.js +155 -0
- package/lib/programmatic/openapi-result-schemas.js +493 -0
- package/lib/programmatic/openapi-schema-descriptions-certify.js +139 -0
- package/lib/programmatic/openapi-schema-descriptions-core.js +162 -0
- package/lib/programmatic/openapi-schema-descriptions-help.js +40 -0
- package/lib/programmatic/openapi-schema-descriptions-manifest.js +143 -0
- package/lib/programmatic/openapi-schema-descriptions-mcp.js +118 -0
- package/lib/programmatic/openapi-schema-descriptions-operations.js +281 -0
- package/lib/programmatic/openapi-schema-helpers.js +108 -0
- package/lib/programmatic/openapi-spec.js +203 -0
- package/lib/programmatic/orchestration-openapi-meta.js +159 -0
- package/lib/programmatic/platform-rbac-catalog.js +90 -0
- package/lib/programmatic/request-timeout.js +53 -0
- package/lib/programmatic/route-handler-map.js +143 -0
- package/lib/programmatic/route-handlers-context.js +29 -0
- package/lib/programmatic/route-handlers.js +33 -0
- package/lib/programmatic/run-certify.js +57 -0
- package/lib/programmatic/run-enterprise-mcp.js +32 -0
- package/lib/programmatic/run-lifecycle.js +29 -0
- package/lib/programmatic/run-repair.js +41 -0
- package/lib/programmatic/run-repository-emcp.js +62 -0
- package/lib/programmatic/run-template-workspace.js +74 -0
- package/lib/programmatic/run-test.js +49 -0
- package/lib/programmatic/run-upload.js +63 -0
- package/lib/programmatic/run-validate.js +53 -0
- package/lib/programmatic/run-wizard.js +40 -0
- package/lib/programmatic/system-key.js +48 -0
- package/lib/programmatic/wizard-config-normalize.js +118 -0
- package/lib/programmatic/workspace-cleanup.js +128 -0
- package/lib/programmatic/workspace-context.js +145 -0
- package/lib/programmatic/workspace-lock.js +75 -0
- package/lib/programmatic/workspace-meta.js +64 -0
- package/lib/programmatic/workspace-ops.js +149 -0
- package/lib/protection/run-commands-upload-sync.js +35 -0
- package/lib/protection/run-commands.js +2 -20
- package/lib/protection/upload-batch.js +11 -7
- package/lib/resolvers/evidence-kind-file.js +230 -0
- package/lib/resolvers/resource-type-file.js +58 -1
- package/lib/resolvers/role-file.js +227 -0
- package/lib/schema/application-schema.json +22 -2
- package/lib/schema/external-datasource.schema.json +245 -2
- package/lib/schema/external-system.schema.json +259 -119
- package/lib/schema/flag-map-validation-run.json +3 -0
- package/lib/schema/infra.parameter.yaml +25 -1
- package/lib/schema/type/credential-field-registry.json +21 -5
- package/lib/schema/type/document-storage.json +9 -0
- package/lib/utils/agent-trust-run-display.js +1 -1
- package/lib/utils/api.js +8 -2
- package/lib/utils/app-path-resolve.js +168 -0
- package/lib/utils/app-register-config.js +4 -3
- package/lib/utils/authentication-env-template.js +222 -0
- package/lib/utils/cli-sync-options.js +62 -10
- package/lib/utils/cli-utils.js +15 -3
- package/lib/utils/cli-workspace-options.js +29 -0
- package/lib/utils/compose-generate-docker-compose.js +102 -0
- package/lib/utils/configuration-env-resolver.js +203 -27
- package/lib/utils/datasource-test-run-certificate-tty.js +28 -2
- package/lib/utils/datasource-test-run-certification-debug.js +130 -0
- package/lib/utils/datasource-test-run-debug-display.js +2 -0
- package/lib/utils/datasource-test-run-debug-slice.js +7 -0
- package/lib/utils/datasource-test-run-display.js +2 -1
- package/lib/utils/dev-ca-install.js +5 -6
- package/lib/utils/dev-config.js +2 -2
- package/lib/utils/dev-init-ssh-merge.js +165 -23
- package/lib/utils/dev-list-sort.js +145 -0
- package/lib/utils/dev-pin-share-instructions.js +110 -0
- package/lib/utils/dev-platform-tls.js +0 -63
- package/lib/utils/dev-ssh-config-helper.js +177 -33
- package/lib/utils/docker-build.js +46 -27
- package/lib/utils/docker-daemon-tls-ca.js +1 -1
- package/lib/utils/docker-exec.js +91 -6
- package/lib/utils/enterprise-knowledge-paths.js +142 -0
- package/lib/utils/env-copy.js +3 -4
- package/lib/utils/env-dotenv-format.js +103 -0
- package/lib/utils/error-formatters/error-parser.js +0 -3
- package/lib/utils/external-env-template.js +5 -2
- package/lib/utils/external-system-display.js +5 -1
- package/lib/utils/external-system-readiness-compact-blocks.js +248 -0
- package/lib/utils/external-system-readiness-compact-display.js +324 -0
- package/lib/utils/external-system-readiness-core.js +16 -0
- package/lib/utils/external-system-readiness-deploy-display.js +29 -11
- package/lib/utils/external-system-readiness-display-internals.js +3 -1
- package/lib/utils/external-system-readiness-display.js +20 -30
- package/lib/utils/external-system-system-test-tty-certification.js +135 -0
- package/lib/utils/external-system-system-test-tty.js +5 -41
- package/lib/utils/health-check-request.js +2 -3
- package/lib/utils/help-builder.js +9 -1
- package/lib/utils/host-ops-job-labels.js +236 -0
- package/lib/utils/host-ops-job-result.js +61 -0
- package/lib/utils/host-ops-poll-ui.js +163 -0
- package/lib/utils/image-name.js +22 -4
- package/lib/utils/integration-path-resolve.js +112 -0
- package/lib/utils/logger.js +37 -4
- package/lib/utils/manifest-source-emit.js +1 -1
- package/lib/utils/paths-reload-source.js +148 -0
- package/lib/utils/paths-system-builder-keys.js +25 -0
- package/lib/utils/paths.js +183 -30
- package/lib/utils/pipeline-upload-auth-retry.js +4 -0
- package/lib/utils/postgres-platform-bootstrap.js +24 -17
- package/lib/utils/postgres-wipe.js +5 -2
- package/lib/utils/remote-dev-auth.js +39 -4
- package/lib/utils/resolve-docker-image-ref.js +36 -6
- package/lib/utils/runtime-configuration-values.js +64 -2
- package/lib/utils/secrets-helpers.js +5 -1
- package/lib/utils/ssh-known-hosts.js +130 -0
- package/lib/utils/test-target-cli-options.js +75 -0
- package/lib/utils/token-manager.js +16 -0
- package/lib/utils/upload-sync-options.js +20 -2
- package/lib/utils/validation-run-request.js +11 -2
- package/lib/validation/external-manifest-validator.js +11 -1
- package/lib/validation/openapi-contract-surface-validator.js +430 -0
- package/lib/validation/openapi-contract-vendor-validation.js +238 -0
- package/lib/validation/validate-external-file.js +160 -0
- package/lib/validation/validate.js +6 -117
- package/lib/validation/validator.js +6 -5
- package/package.json +76 -37
- package/packages/builder-api/README.md +120 -0
- package/packages/builder-api/package.json +30 -0
- package/packages/builder-api/src/app.module.ts +7 -0
- package/packages/builder-api/src/auth/auth.module.ts +5 -0
- package/packages/builder-api/src/external-system/external-system.module.ts +5 -0
- package/packages/builder-api/src/main.ts +16 -0
- package/packages/builder-api/tsconfig.json +15 -0
- package/scripts/check-builder-api-architecture-grep.js +79 -0
- package/scripts/docker_image_content_gate.js +47 -0
- package/scripts/docker_image_content_gate.sh +5 -0
- package/scripts/export-builder-api-evidence.js +262 -0
- package/scripts/lib/builder-api-docker-staging-copy.js +60 -0
- package/scripts/lib/builder-api-docker-staging-core.js +183 -0
- package/scripts/lib/docker-image-content-gate-core.js +166 -0
- package/scripts/lib/plan-actor.js +109 -0
- package/scripts/lib/plan-config.js +20 -0
- package/scripts/lib/plan-gates.js +154 -0
- package/scripts/lib/plan-meta.js +104 -0
- package/scripts/lib/plan-parse.js +162 -0
- package/scripts/lib/plan-prevalidate-gates.js +337 -0
- package/scripts/lib/plan-run-core.js +125 -0
- package/scripts/lib/plan-run-report.js +119 -0
- package/scripts/plan-approve.js +24 -0
- package/scripts/plan-archive.js +49 -0
- package/scripts/plan-run.js +13 -0
- package/scripts/plan-set-actor.js +21 -0
- package/scripts/plan-validate.js +80 -0
- package/scripts/pnpm/af.mjs +110 -0
- package/scripts/pnpm/check-quiet.mjs +32 -0
- package/scripts/pnpm/dev-install.mjs +29 -0
- package/scripts/pnpm/dev-reload.mjs +18 -0
- package/scripts/pnpm/help.mjs +55 -0
- package/scripts/pnpm/lib/dev-reload-core.mjs +189 -0
- package/scripts/pnpm/lib/dev-reload-log-capture.mjs +67 -0
- package/scripts/pnpm/lib/dev-reload-log-utils.mjs +32 -0
- package/scripts/pnpm/lib/resolve-aifabrix-bin.mjs +124 -0
- package/scripts/pnpm/lib/resolve-app-url.mjs +183 -0
- package/scripts/pnpm/lib/spinner.mjs +42 -0
- package/scripts/stage_builder_api_for_docker.js +65 -0
- package/scripts/sync-builder-api-template.js +44 -0
- package/templates/README.md +3 -0
- package/templates/applications/builder-api/Dockerfile +38 -0
- package/templates/applications/builder-api/application.yaml +75 -0
- package/templates/applications/builder-api/env.template +48 -0
- package/templates/applications/dataplane/application.yaml +27 -5
- package/templates/applications/dataplane/env.template +38 -15
- package/templates/applications/dataplane/rbac.yaml +85 -3
- package/templates/applications/miso-controller/application.yaml +10 -1
- package/templates/applications/miso-controller/env.template +11 -10
- package/templates/applications/miso-controller/rbac.yaml +72 -0
- package/templates/channels/README.md +18 -0
- package/templates/channels/ai-fabrix-icon.jpg +0 -0
- package/templates/channels/chatgpt/install.template.md.hbs +21 -24
- package/templates/channels/chatgpt/integration/README.md +11 -0
- package/templates/channels/chatgpt/integration/application.json +15 -0
- package/templates/channels/chatgpt/integration/chatgpt-system.json +29 -0
- package/templates/channels/chatgpt/integration/env.template +4 -0
- package/templates/channels/microsoft-copilot/install.template.md.hbs +20 -25
- package/templates/channels/microsoft-copilot/integration/README.md +11 -0
- package/templates/channels/microsoft-copilot/integration/application.json +15 -0
- package/templates/channels/microsoft-copilot/integration/env.template +6 -0
- package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +34 -0
- package/templates/channels/slack/install.template.md.hbs +48 -18
- package/templates/channels/slack/integration/README.md +38 -0
- package/templates/channels/slack/integration/application.json +18 -0
- package/templates/channels/slack/integration/env.template +29 -0
- package/templates/channels/slack/integration/slack-datasource-conversations.json +226 -0
- package/templates/channels/slack/integration/slack-datasource-messages.json +269 -0
- package/templates/channels/slack/integration/slack-system.json +144 -0
- package/templates/channels/slack/manifest.template.json.hbs +20 -10
- package/templates/channels/teams-bot/install.template.md.hbs +31 -17
- package/templates/channels/teams-bot/integration/README.md +18 -0
- package/templates/channels/teams-bot/integration/application.json +17 -0
- package/templates/channels/teams-bot/integration/env.template +5 -0
- package/templates/channels/teams-bot/integration/teams-bot-system.json +55 -0
- package/templates/channels/teams-bot/manifest.template.json.hbs +27 -0
- package/templates/channels/web-embed/install.template.md.hbs +16 -26
- package/templates/channels/web-embed/integration/README.md +11 -0
- package/templates/channels/web-embed/integration/application.json +15 -0
- package/templates/channels/web-embed/integration/env.template +4 -0
- package/templates/channels/web-embed/integration/web-embed-system.json +29 -0
- package/templates/openapi/redoc_page.html +86 -0
- package/templates/python/docker-compose.hbs +11 -0
- package/templates/python/requirements.txt +2 -2
- package/templates/typescript/docker-compose.hbs +11 -0
- package/lib/certification/cli-cert-sync-skip.js +0 -21
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve Connected Systems vs Enterprise Knowledge authoring trees (456.5).
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview Workspace resolution from systemKind and CLI --workspace
|
|
5
|
+
* @author AI Fabrix Team
|
|
6
|
+
* @version 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const path = require('path');
|
|
12
|
+
const fs = require('../internal/fs-real-sync');
|
|
13
|
+
const {
|
|
14
|
+
WORKSPACE_ENTERPRISE_KNOWLEDGE,
|
|
15
|
+
SYSTEM_KIND_ENTERPRISE_KNOWLEDGE,
|
|
16
|
+
getEnterpriseKnowledgePath
|
|
17
|
+
} = require('./enterprise-knowledge-paths');
|
|
18
|
+
|
|
19
|
+
const WORKSPACE_INTEGRATION = 'integration';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Reads systemKind from <app>-system.json when present.
|
|
23
|
+
* @param {string} appPath - Anchor directory
|
|
24
|
+
* @param {string} appName - Anchor key
|
|
25
|
+
* @returns {string|null}
|
|
26
|
+
*/
|
|
27
|
+
function readSystemKindFromAppDir(appPath, appName) {
|
|
28
|
+
if (!appPath || !appName) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const systemFile = path.join(appPath, `${appName}-system.json`);
|
|
32
|
+
if (!fs.existsSync(systemFile)) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const raw = JSON.parse(fs.readFileSync(systemFile, 'utf8'));
|
|
37
|
+
const kind = raw && (raw.systemKind || raw.systemKindKey);
|
|
38
|
+
return typeof kind === 'string' && kind.trim() ? kind.trim() : null;
|
|
39
|
+
} catch {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @param {string} dirPath
|
|
46
|
+
* @returns {boolean}
|
|
47
|
+
*/
|
|
48
|
+
function isExistingDirectory(dirPath) {
|
|
49
|
+
try {
|
|
50
|
+
return fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();
|
|
51
|
+
} catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @param {string|undefined|null} raw
|
|
58
|
+
* @returns {string|null}
|
|
59
|
+
*/
|
|
60
|
+
function normalizeWorkspaceOverride(raw) {
|
|
61
|
+
if (raw === undefined || raw === null || raw === '') {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const v = String(raw).trim().toLowerCase();
|
|
65
|
+
if (v === WORKSPACE_INTEGRATION || v === WORKSPACE_ENTERPRISE_KNOWLEDGE) {
|
|
66
|
+
return v;
|
|
67
|
+
}
|
|
68
|
+
throw new Error(`Unknown workspace "${raw}". Use integration or enterprise-knowledge.`);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function workspacePair(appPath, baseDir) {
|
|
72
|
+
return { appPath, baseDir };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function resolveFromWorkspaceOverride(workspaceOverride, appName, getIntegrationPath) {
|
|
76
|
+
if (workspaceOverride === WORKSPACE_ENTERPRISE_KNOWLEDGE) {
|
|
77
|
+
return workspacePair(getEnterpriseKnowledgePath(appName), WORKSPACE_ENTERPRISE_KNOWLEDGE);
|
|
78
|
+
}
|
|
79
|
+
if (workspaceOverride === WORKSPACE_INTEGRATION) {
|
|
80
|
+
return workspacePair(getIntegrationPath(appName), WORKSPACE_INTEGRATION);
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function resolveAmbiguousWorkspace(ekPath, intPath, explicitKind, appName) {
|
|
86
|
+
const kind =
|
|
87
|
+
explicitKind ||
|
|
88
|
+
readSystemKindFromAppDir(ekPath, appName) ||
|
|
89
|
+
readSystemKindFromAppDir(intPath, appName);
|
|
90
|
+
if (kind === SYSTEM_KIND_ENTERPRISE_KNOWLEDGE) {
|
|
91
|
+
return workspacePair(ekPath, WORKSPACE_ENTERPRISE_KNOWLEDGE);
|
|
92
|
+
}
|
|
93
|
+
return workspacePair(intPath, WORKSPACE_INTEGRATION);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function resolveFromExistingPaths(ekPath, intPath, ekExists, intExists, explicitKind, appName) {
|
|
97
|
+
if (ekExists && !intExists) {
|
|
98
|
+
return workspacePair(ekPath, WORKSPACE_ENTERPRISE_KNOWLEDGE);
|
|
99
|
+
}
|
|
100
|
+
if (intExists && !ekExists) {
|
|
101
|
+
return workspacePair(intPath, WORKSPACE_INTEGRATION);
|
|
102
|
+
}
|
|
103
|
+
if (ekExists && intExists) {
|
|
104
|
+
return resolveAmbiguousWorkspace(ekPath, intPath, explicitKind, appName);
|
|
105
|
+
}
|
|
106
|
+
const kind = explicitKind || readSystemKindFromAppDir(intPath, appName);
|
|
107
|
+
if (kind === SYSTEM_KIND_ENTERPRISE_KNOWLEDGE) {
|
|
108
|
+
return workspacePair(ekPath, WORKSPACE_ENTERPRISE_KNOWLEDGE);
|
|
109
|
+
}
|
|
110
|
+
return workspacePair(intPath, WORKSPACE_INTEGRATION);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Resolves authoring tree for an external system or Enterprise Knowledge anchor.
|
|
115
|
+
* @param {string} appName - App or anchor key
|
|
116
|
+
* @param {Object} [options]
|
|
117
|
+
* @param {string} [options.workspace] - integration | enterprise-knowledge
|
|
118
|
+
* @param {string} [options.systemKind] - Explicit systemKind override
|
|
119
|
+
* @returns {{ appPath: string, baseDir: 'integration' | 'enterprise-knowledge' }}
|
|
120
|
+
*/
|
|
121
|
+
function resolveAppWorkspace(appName, options = {}) {
|
|
122
|
+
if (!appName || typeof appName !== 'string') {
|
|
123
|
+
throw new Error('App name is required and must be a string');
|
|
124
|
+
}
|
|
125
|
+
const { getIntegrationPath } = require('./paths');
|
|
126
|
+
const workspaceOverride = normalizeWorkspaceOverride(options.workspace);
|
|
127
|
+
const explicitKind = typeof options.systemKind === 'string' ? options.systemKind.trim() : '';
|
|
128
|
+
|
|
129
|
+
const fromOverride = resolveFromWorkspaceOverride(
|
|
130
|
+
workspaceOverride,
|
|
131
|
+
appName,
|
|
132
|
+
getIntegrationPath
|
|
133
|
+
);
|
|
134
|
+
if (fromOverride) {
|
|
135
|
+
return fromOverride;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const ekPath = getEnterpriseKnowledgePath(appName);
|
|
139
|
+
const intPath = getIntegrationPath(appName);
|
|
140
|
+
return resolveFromExistingPaths(
|
|
141
|
+
ekPath,
|
|
142
|
+
intPath,
|
|
143
|
+
isExistingDirectory(ekPath),
|
|
144
|
+
isExistingDirectory(intPath),
|
|
145
|
+
explicitKind,
|
|
146
|
+
appName
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Absolute path for external / Enterprise Knowledge anchor files.
|
|
152
|
+
* @param {string} appName
|
|
153
|
+
* @param {Object} [options]
|
|
154
|
+
* @returns {string}
|
|
155
|
+
*/
|
|
156
|
+
function resolveExternalSystemPath(appName, options = {}) {
|
|
157
|
+
return resolveAppWorkspace(appName, options).appPath;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
module.exports = {
|
|
161
|
+
WORKSPACE_INTEGRATION,
|
|
162
|
+
WORKSPACE_ENTERPRISE_KNOWLEDGE,
|
|
163
|
+
SYSTEM_KIND_ENTERPRISE_KNOWLEDGE,
|
|
164
|
+
readSystemKindFromAppDir,
|
|
165
|
+
normalizeWorkspaceOverride,
|
|
166
|
+
resolveAppWorkspace,
|
|
167
|
+
resolveExternalSystemPath
|
|
168
|
+
};
|
|
@@ -228,11 +228,11 @@ async function extractExternalAppConfiguration(appKey, variables, appKeyFromFile
|
|
|
228
228
|
* @returns {Object} Webapp configuration
|
|
229
229
|
*/
|
|
230
230
|
function extractWebappConfiguration(variables, appKeyFromFile, displayName, description, options) {
|
|
231
|
-
const appType = variables.
|
|
231
|
+
const appType = variables.app?.type || 'webapp';
|
|
232
232
|
const registryMode = variables.image?.registryMode || 'external';
|
|
233
233
|
const port = options.port ?? getContainerPort(variables);
|
|
234
234
|
const localPort = port;
|
|
235
|
-
const language = variables.build?.language || 'typescript';
|
|
235
|
+
const language = variables.build?.language || variables.app?.language || 'typescript';
|
|
236
236
|
const image = buildImageReference(variables, appKeyFromFile);
|
|
237
237
|
const url = variables.app?.url || variables.deployment?.dataplaneUrl || variables.deployment?.appUrl || null;
|
|
238
238
|
|
|
@@ -252,7 +252,8 @@ function extractWebappConfiguration(variables, appKeyFromFile, displayName, desc
|
|
|
252
252
|
|
|
253
253
|
async function extractAppConfiguration(variables, appKey, options) {
|
|
254
254
|
const appKeyFromFile = variables.app?.key || appKey;
|
|
255
|
-
const displayName =
|
|
255
|
+
const displayName =
|
|
256
|
+
variables.app?.displayName || variables.app?.name || options.name || appKey;
|
|
256
257
|
const description = variables.app?.description || '';
|
|
257
258
|
|
|
258
259
|
if (variables.app?.type === 'external') {
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-slot authentications[] helpers for env.template repair (454.11).
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview KV env names and paths per authentication usage slot
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
const { getAuthCredentialTemplate } = require('./authentication-shape');
|
|
10
|
+
const { isPlatformCatalogKvRef, isLegacyKvValue } = require('./platform-kv-ref');
|
|
11
|
+
const {
|
|
12
|
+
kvEnvKeyToPath,
|
|
13
|
+
securityKeyToVar,
|
|
14
|
+
systemKeyToKvPrefix
|
|
15
|
+
} = require('./credential-secrets-env');
|
|
16
|
+
const { getKvPathSegmentForSecurityKey } = require('./credential-secrets-env-kv');
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @param {string} slotKey
|
|
20
|
+
* @returns {string}
|
|
21
|
+
*/
|
|
22
|
+
function slotKeyToEnvSegment(slotKey) {
|
|
23
|
+
if (!slotKey || slotKey === 'default') {
|
|
24
|
+
return '';
|
|
25
|
+
}
|
|
26
|
+
return `_${String(slotKey).replace(/-/g, '_').toUpperCase()}`;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @param {string} prefix
|
|
31
|
+
* @param {string} slotKey
|
|
32
|
+
* @param {string} securityKey
|
|
33
|
+
* @returns {string}
|
|
34
|
+
*/
|
|
35
|
+
function buildSlotEnvName(prefix, slotKey, securityKey) {
|
|
36
|
+
return `KV_${prefix}${slotKeyToEnvSegment(slotKey)}_${securityKeyToVar(securityKey)}`;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @param {string} systemKey
|
|
41
|
+
* @param {string} slotKey
|
|
42
|
+
* @param {string} securityKey
|
|
43
|
+
* @returns {string|null}
|
|
44
|
+
*/
|
|
45
|
+
function buildSlotKvPath(systemKey, slotKey, securityKey) {
|
|
46
|
+
const segment = getKvPathSegmentForSecurityKey(securityKey);
|
|
47
|
+
if (!segment) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
if (slotKey && slotKey !== 'default') {
|
|
51
|
+
return `kv://${systemKey}/${slotKey}/${segment}`;
|
|
52
|
+
}
|
|
53
|
+
return `kv://${systemKey}/${segment}`;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @param {Array} effective
|
|
58
|
+
* @param {Set<string>} seenNames
|
|
59
|
+
* @param {string} systemKey
|
|
60
|
+
* @param {string} prefix
|
|
61
|
+
* @param {object} authBlock
|
|
62
|
+
* @param {string} slotKey
|
|
63
|
+
*/
|
|
64
|
+
function addSecurityKeysFromAuthBlock(
|
|
65
|
+
effective,
|
|
66
|
+
seenNames,
|
|
67
|
+
systemKey,
|
|
68
|
+
prefix,
|
|
69
|
+
authBlock,
|
|
70
|
+
slotKey
|
|
71
|
+
) {
|
|
72
|
+
const credential = getAuthCredentialTemplate(authBlock);
|
|
73
|
+
const security = credential?.security ?? authBlock?.security;
|
|
74
|
+
if (!security || typeof security !== 'object') {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
for (const key of Object.keys(security)) {
|
|
78
|
+
const securityVal = security[key];
|
|
79
|
+
if (typeof securityVal === 'string' && isPlatformCatalogKvRef(securityVal)) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const envName = buildSlotEnvName(prefix, slotKey, key);
|
|
83
|
+
if (seenNames.has(envName)) {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const pathVal =
|
|
87
|
+
kvEnvKeyToPath(envName, systemKey) || buildSlotKvPath(systemKey, slotKey, key);
|
|
88
|
+
if (!pathVal) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
effective.push({
|
|
92
|
+
name: envName,
|
|
93
|
+
value: pathVal.replace(/^kv:\/\//, ''),
|
|
94
|
+
location: 'keyvault'
|
|
95
|
+
});
|
|
96
|
+
seenNames.add(envName);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @param {Array} effective
|
|
102
|
+
* @param {object} systemParsed
|
|
103
|
+
* @param {string} prefix
|
|
104
|
+
* @param {Set<string>} seenNames
|
|
105
|
+
* @param {string} systemKey
|
|
106
|
+
*/
|
|
107
|
+
function addFromAuthenticationsArray(effective, systemParsed, prefix, seenNames, systemKey) {
|
|
108
|
+
const rows = systemParsed.authentications;
|
|
109
|
+
if (!Array.isArray(rows) || rows.length === 0) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
for (const row of rows) {
|
|
113
|
+
if (!row || typeof row !== 'object') {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const slotKey = typeof row.key === 'string' && row.key.trim() ? row.key.trim() : 'default';
|
|
117
|
+
addSecurityKeysFromAuthBlock(effective, seenNames, systemKey, prefix, row, slotKey);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* @param {object} system
|
|
123
|
+
* @returns {Array<{name: string, value: string, usage?: string}>}
|
|
124
|
+
*/
|
|
125
|
+
function buildAuthSecureVarsFromAllSlots(system) {
|
|
126
|
+
const systemKey = system?.key || 'external-system';
|
|
127
|
+
const prefix = systemKeyToKvPrefix(systemKey);
|
|
128
|
+
if (!prefix) {
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
const effective = [];
|
|
132
|
+
const seenNames = new Set();
|
|
133
|
+
addFromAuthenticationsArray(effective, system, prefix, seenNames, systemKey);
|
|
134
|
+
if (effective.length > 0) {
|
|
135
|
+
const rows = Array.isArray(system.authentications) ? system.authentications : [];
|
|
136
|
+
return effective.map((entry) => {
|
|
137
|
+
const suffix = entry.name.slice(`KV_${prefix}`.length);
|
|
138
|
+
const slot = rows.find((row) => {
|
|
139
|
+
const seg = slotKeyToEnvSegment(row?.key || 'default');
|
|
140
|
+
return seg && suffix.startsWith(`${seg}_`);
|
|
141
|
+
});
|
|
142
|
+
let value = entry.value;
|
|
143
|
+
if (entry.location === 'keyvault' && value && !String(value).startsWith('kv://')) {
|
|
144
|
+
value = `kv://${value}`;
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
...entry,
|
|
148
|
+
value,
|
|
149
|
+
usage: slot?.usage || 'api'
|
|
150
|
+
};
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return [];
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* @param {object} security
|
|
158
|
+
* @param {string} prefix
|
|
159
|
+
* @param {string} systemKey
|
|
160
|
+
* @param {string} slotKey
|
|
161
|
+
* @param {string[]} changes
|
|
162
|
+
* @returns {boolean}
|
|
163
|
+
*/
|
|
164
|
+
function normalizeAuthSlotSecurity(security, prefix, systemKey, slotKey, changes) {
|
|
165
|
+
let updated = false;
|
|
166
|
+
for (const key of Object.keys(security)) {
|
|
167
|
+
const val = security[key];
|
|
168
|
+
if (typeof val !== 'string' || !isLegacyKvValue(val)) {
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
const envName = buildSlotEnvName(prefix, slotKey, key);
|
|
172
|
+
const pathVal = kvEnvKeyToPath(envName, systemKey) || buildSlotKvPath(systemKey, slotKey, key);
|
|
173
|
+
if (pathVal) {
|
|
174
|
+
security[key] = pathVal;
|
|
175
|
+
changes.push(
|
|
176
|
+
`authentications[${slotKey}].security.${key}: normalized to path-style ${pathVal}`
|
|
177
|
+
);
|
|
178
|
+
updated = true;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return updated;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* @param {object} systemParsed
|
|
186
|
+
* @param {string} systemKey
|
|
187
|
+
* @param {string[]} changes
|
|
188
|
+
* @returns {boolean}
|
|
189
|
+
*/
|
|
190
|
+
function normalizeAuthenticationsSecurity(systemParsed, systemKey, changes) {
|
|
191
|
+
const prefix = systemKeyToKvPrefix(systemKey);
|
|
192
|
+
if (!prefix) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
const rows = systemParsed.authentications;
|
|
196
|
+
if (!Array.isArray(rows) || rows.length === 0) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
let updated = false;
|
|
200
|
+
for (const row of rows) {
|
|
201
|
+
if (!row || typeof row !== 'object') {
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
const slotKey = typeof row.key === 'string' && row.key.trim() ? row.key.trim() : 'default';
|
|
205
|
+
const credential = getAuthCredentialTemplate(row);
|
|
206
|
+
const security = credential?.security ?? row.security;
|
|
207
|
+
if (security && typeof security === 'object') {
|
|
208
|
+
updated =
|
|
209
|
+
normalizeAuthSlotSecurity(security, prefix, systemKey, slotKey, changes) || updated;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return updated;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
module.exports = {
|
|
216
|
+
addFromAuthenticationsArray,
|
|
217
|
+
buildAuthSecureVarsFromAllSlots,
|
|
218
|
+
buildSlotEnvName,
|
|
219
|
+
buildSlotKvPath,
|
|
220
|
+
normalizeAuthenticationsSecurity,
|
|
221
|
+
slotKeyToEnvSegment
|
|
222
|
+
};
|
|
@@ -1,33 +1,85 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview Detect skip-
|
|
2
|
+
* @fileoverview Detect skip-manifest-publish from Commander options (--no-publish).
|
|
3
3
|
* @author AI Fabrix Team
|
|
4
|
-
* @version
|
|
4
|
+
* @version 2.0.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
'use strict';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* True when
|
|
11
|
-
*
|
|
10
|
+
* True when `node` looks like a Commander command (or a test double), not a plain opts bag.
|
|
11
|
+
*
|
|
12
|
+
* @param {*} node
|
|
13
|
+
* @returns {boolean}
|
|
14
|
+
*/
|
|
15
|
+
function isCommanderLike(node) {
|
|
16
|
+
if (!node || typeof node !== 'object') {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
return (
|
|
20
|
+
Array.isArray(node.rawArgs) ||
|
|
21
|
+
typeof node.opts === 'function' ||
|
|
22
|
+
(Object.prototype.hasOwnProperty.call(node, 'parent') &&
|
|
23
|
+
(node.parent === null ||
|
|
24
|
+
node.parent === undefined ||
|
|
25
|
+
typeof node.parent === 'object'))
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Collect argv-like arrays from a Commander command and its parents.
|
|
31
|
+
* Subcommand `rawArgs` is often empty; the flag lives on the root command.
|
|
32
|
+
* Safely no-ops for null/undefined or plain options objects (not Command-like).
|
|
33
|
+
*
|
|
34
|
+
* @param {import('commander').Command|null|undefined} cmd
|
|
35
|
+
* @returns {string[]}
|
|
36
|
+
*/
|
|
37
|
+
function collectCommanderRawArgs(cmd) {
|
|
38
|
+
if (!isCommanderLike(cmd)) {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
const chunks = [];
|
|
42
|
+
const seen = new Set();
|
|
43
|
+
let current = cmd;
|
|
44
|
+
while (isCommanderLike(current)) {
|
|
45
|
+
if (seen.has(current)) {
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
seen.add(current);
|
|
49
|
+
if (Array.isArray(current.rawArgs) && current.rawArgs.length > 0) {
|
|
50
|
+
chunks.push(...current.rawArgs);
|
|
51
|
+
}
|
|
52
|
+
current = current.parent;
|
|
53
|
+
}
|
|
54
|
+
return chunks;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* True when the user passed `--no-publish` or set `noPublish: true` (programmatic).
|
|
59
|
+
*
|
|
60
|
+
* Commander maps `.option('--no-publish', …)` to `publish: false` (default `true`),
|
|
61
|
+
* not `noPublish: true`. Detect that shape as well as programmatic `noPublish`.
|
|
12
62
|
*
|
|
13
63
|
* @param {Object|null|undefined} options - Commander-parsed options
|
|
14
64
|
* @param {import('commander').Command} [cmd] - Commander command (for rawArgs fallback)
|
|
15
65
|
* @returns {boolean}
|
|
16
66
|
*/
|
|
17
|
-
function
|
|
67
|
+
function cliOptsSkipPublish(options, cmd) {
|
|
18
68
|
if (!options || typeof options !== 'object') {
|
|
19
69
|
return false;
|
|
20
70
|
}
|
|
21
|
-
if (options.
|
|
71
|
+
if (options.noPublish === true) {
|
|
22
72
|
return true;
|
|
23
73
|
}
|
|
24
|
-
|
|
74
|
+
// Commander `--no-X` → property `X` defaults true; flag sets it false
|
|
75
|
+
if (options.publish === false) {
|
|
25
76
|
return true;
|
|
26
77
|
}
|
|
27
|
-
|
|
28
|
-
return raw.includes('--no-sync');
|
|
78
|
+
return collectCommanderRawArgs(cmd).includes('--no-publish');
|
|
29
79
|
}
|
|
30
80
|
|
|
31
81
|
module.exports = {
|
|
32
|
-
|
|
82
|
+
cliOptsSkipPublish,
|
|
83
|
+
collectCommanderRawArgs,
|
|
84
|
+
isCommanderLike
|
|
33
85
|
};
|
package/lib/utils/cli-utils.js
CHANGED
|
@@ -219,9 +219,14 @@ function formatAzureError(errorMsg) {
|
|
|
219
219
|
if (errorMsg.includes('Docker build failed') || errorMsg.includes('Build failed: Docker')) {
|
|
220
220
|
return null;
|
|
221
221
|
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
222
|
+
const lowerMsg = String(errorMsg || '').toLowerCase();
|
|
223
|
+
const hasAcrDomain = /\b[a-z0-9.-]+\.azurecr\.io\b/i.test(errorMsg);
|
|
224
|
+
const hasAcrKeyword = /\bacr\b/.test(lowerMsg);
|
|
225
|
+
const hasAuthAndRegistryContext =
|
|
226
|
+
/\bauthenticate\b/.test(lowerMsg) &&
|
|
227
|
+
(/\bregistry\b/.test(lowerMsg) || /\bcontainer\b/.test(lowerMsg));
|
|
228
|
+
// Only match ACR-specific authentication errors, not general authentication failures.
|
|
229
|
+
if (hasAcrKeyword || hasAcrDomain || hasAuthAndRegistryContext) {
|
|
225
230
|
return [
|
|
226
231
|
' Azure Container Registry authentication failed.',
|
|
227
232
|
' Run: az acr login --name <registry-name>',
|
|
@@ -336,6 +341,10 @@ function tryFormatErrorWithFormatters(errorMsg) {
|
|
|
336
341
|
}
|
|
337
342
|
|
|
338
343
|
function formatError(error) {
|
|
344
|
+
if (error && error.gateFailure === true) {
|
|
345
|
+
return [` ${error.message || 'Deploy gate failed'}`];
|
|
346
|
+
}
|
|
347
|
+
|
|
339
348
|
// If error has formatted message (from API error handler), use it directly
|
|
340
349
|
if (error.formatted) {
|
|
341
350
|
return formatFormattedError(error.formatted);
|
|
@@ -410,6 +419,9 @@ function isAuthenticationError(error) {
|
|
|
410
419
|
* @param {string} command - Command that failed
|
|
411
420
|
*/
|
|
412
421
|
function handleCommandError(error, command) {
|
|
422
|
+
if (error && error.compactGateAbortLogged === true) {
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
413
425
|
const errorMessages = formatError(error);
|
|
414
426
|
const skipDoctor = isMissingSecretsErrorMessage(error && error.message);
|
|
415
427
|
logError(command, errorMessages, { skipDoctor });
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI workspace helpers (456.5) — auto-detect only; `--workspace` flag removed in 155.0.
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview Path options for external / Enterprise Knowledge anchors
|
|
5
|
+
* @author AI Fabrix Team
|
|
6
|
+
* @version 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @param {Object} [_cliOptions]
|
|
13
|
+
* @returns {{}}
|
|
14
|
+
*/
|
|
15
|
+
function workspaceDetectionOptions(_cliOptions = {}) {
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @returns {null}
|
|
21
|
+
*/
|
|
22
|
+
function workspaceOptionDefinition() {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
module.exports = {
|
|
27
|
+
workspaceDetectionOptions,
|
|
28
|
+
workspaceOptionDefinition
|
|
29
|
+
};
|