@aifabrix/builder 2.53.1 → 2.55.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/README.md +8 -0
- package/bin/aifabrix.js +2 -2
- package/lib/agent-kit/apply-ops.js +82 -0
- package/lib/agent-kit/checksums.js +28 -0
- package/lib/agent-kit/classify.js +113 -0
- package/lib/agent-kit/claude-shim.js +61 -0
- package/lib/agent-kit/constants.js +55 -0
- package/lib/agent-kit/file-list.js +103 -0
- package/lib/agent-kit/host-approve.js +130 -0
- package/lib/agent-kit/hosting/github.js +63 -0
- package/lib/agent-kit/hosts.js +71 -0
- package/lib/agent-kit/init.js +319 -0
- package/lib/agent-kit/kit-root.js +17 -0
- package/lib/agent-kit/managed-section.js +79 -0
- package/lib/agent-kit/package-load.js +45 -0
- package/lib/agent-kit/plan-ops.js +69 -0
- package/lib/agent-kit/remote-prompts.js +239 -0
- package/lib/agent-kit/render-host-markdown.js +40 -0
- package/lib/agent-kit/repo-guard.js +47 -0
- package/lib/agent-kit/report.js +107 -0
- package/lib/agent-kit/run.js +82 -0
- package/lib/agent-kit/scm/git.js +122 -0
- package/lib/agent-kit/state-file.js +83 -0
- package/lib/agent-kit/status.js +50 -0
- package/lib/agent-kit/v1-detect.js +81 -0
- package/lib/agent-kit/validate-kit.js +87 -0
- package/lib/agent-kit/workspace-name.js +40 -0
- package/lib/agent-kit/workspace-skeleton.js +103 -0
- package/lib/api/assistants.api.js +8 -5
- package/lib/api/channel-identity.api.js +41 -0
- package/lib/api/evidence-authoring.api.js +5 -1
- package/lib/api/evidence.api.js +2 -0
- package/lib/api/role-assistant-test-pack.api.js +86 -0
- package/lib/api/types/evidence.types.js +2 -0
- package/lib/api/work-search.api.js +163 -0
- package/lib/api/work.api.js +19 -12
- package/lib/app/list-external-systems.js +2 -1
- package/lib/app/show-display.js +33 -6
- package/lib/app/show.js +25 -2
- package/lib/channels/add-channel.js +164 -126
- package/lib/channels/approval-guides/chatgpt.js +14 -18
- package/lib/channels/approval-guides/claude.js +29 -0
- package/lib/channels/approval-guides/index.js +88 -22
- package/lib/channels/approval-guides/mcp-client.js +27 -0
- package/lib/channels/approval-guides/microsoft-copilot.js +52 -3
- package/lib/channels/approval-guides/slack.js +10 -10
- package/lib/channels/approval-guides/teams-bot.js +8 -12
- package/lib/channels/channel-add-continuations.js +91 -0
- package/lib/channels/channel-add-ensure.js +124 -27
- package/lib/channels/channel-add-existing.js +160 -28
- package/lib/channels/channel-add-failure.js +61 -0
- package/lib/channels/channel-add-remaining.js +492 -0
- package/lib/channels/channel-add-tty.js +190 -0
- package/lib/channels/channel-add-wizard-config.js +138 -0
- package/lib/channels/channel-add-wizard.js +250 -0
- package/lib/channels/channel-artifact-generator.js +27 -13
- package/lib/channels/channel-cardinality.js +83 -0
- package/lib/channels/channel-catalog-icon.js +45 -0
- package/lib/channels/channel-cli-instructions.js +75 -0
- package/lib/channels/channel-configuration-map.js +213 -0
- package/lib/channels/channel-credential.js +11 -14
- package/lib/channels/channel-definition-project.js +101 -0
- package/lib/channels/channel-definition-registry.js +154 -0
- package/lib/channels/channel-definition-status.js +115 -0
- package/lib/channels/channel-description.js +60 -2
- package/lib/channels/channel-discovery.js +16 -2
- package/lib/channels/channel-external-system.js +86 -9
- package/lib/channels/channel-install-envelope-actions.js +88 -0
- package/lib/channels/channel-install-envelope-microsoft.js +155 -0
- package/lib/channels/channel-install-envelope.js +358 -0
- package/lib/channels/channel-install-help-md.js +172 -0
- package/lib/channels/channel-install-http-payload.js +62 -0
- package/lib/channels/channel-install-inventory.js +115 -0
- package/lib/channels/channel-install-profiles.js +90 -0
- package/lib/channels/channel-instance-collision.js +118 -0
- package/lib/channels/channel-instance-key.js +100 -0
- package/lib/channels/channel-instance-materialize.js +240 -0
- package/lib/channels/channel-integration-generator.js +18 -9
- package/lib/channels/channel-integration-template.js +101 -22
- package/lib/channels/channel-inventory-fetch.js +79 -0
- package/lib/channels/channel-oauth-preflight.js +104 -0
- package/lib/channels/channel-package-version.js +76 -0
- package/lib/channels/channel-predefined-client.js +154 -0
- package/lib/channels/channel-probe.js +7 -2
- package/lib/channels/channel-runtime-resolver.js +194 -72
- package/lib/channels/channel-status-display.js +86 -16
- package/lib/channels/channel-targets.js +132 -92
- package/lib/channels/chatgpt-callback.js +318 -0
- package/lib/channels/chatgpt-channel-add.js +229 -0
- package/lib/channels/chatgpt-preflight.js +396 -0
- package/lib/channels/chatgpt-runtime-contract.js +17 -0
- package/lib/channels/chatgpt-setup-values.js +124 -0
- package/lib/channels/claude-callback.js +67 -0
- package/lib/channels/claude-channel-add.js +254 -0
- package/lib/channels/claude-runtime-contract.js +40 -0
- package/lib/channels/claude-runtime.js +58 -0
- package/lib/channels/claude-setup-values.js +92 -0
- package/lib/channels/mcp-client/config-merge.js +148 -0
- package/lib/channels/mcp-client/ensure-client.js +231 -0
- package/lib/channels/mcp-client/paths.js +53 -0
- package/lib/channels/mcp-client/profiles.js +122 -0
- package/lib/channels/mcp-client/redirect-uris.js +99 -0
- package/lib/channels/mcp-client/runtime.js +59 -0
- package/lib/channels/mcp-client-channel-add.js +186 -0
- package/lib/channels/microsoft-copilot-channel-add.js +117 -7
- package/lib/channels/microsoft-copilot-entra-identifier-uris.js +187 -0
- package/lib/channels/microsoft-copilot-entra-sso-form.js +106 -18
- package/lib/channels/microsoft-copilot-entra-sso.js +31 -2
- package/lib/channels/microsoft-copilot-package-prior.js +107 -0
- package/lib/channels/microsoft-copilot-package.js +29 -28
- package/lib/channels/microsoft-provisioning/a365.js +80 -0
- package/lib/channels/microsoft-provisioning/auth-config.js +240 -0
- package/lib/channels/microsoft-provisioning/auth.js +179 -0
- package/lib/channels/microsoft-provisioning/cli.js +71 -0
- package/lib/channels/microsoft-provisioning/constants.js +75 -0
- package/lib/channels/microsoft-provisioning/errors.js +117 -0
- package/lib/channels/microsoft-provisioning/index.js +55 -0
- package/lib/channels/microsoft-provisioning/install-atk.js +158 -0
- package/lib/channels/microsoft-provisioning/install-teams.js +115 -0
- package/lib/channels/microsoft-provisioning/login-portal-device.js +236 -0
- package/lib/channels/microsoft-provisioning/login-portal-parse.js +71 -0
- package/lib/channels/microsoft-provisioning/login-portal-teams.js +193 -0
- package/lib/channels/microsoft-provisioning/login-portal.js +230 -0
- package/lib/channels/microsoft-provisioning/persist.js +110 -0
- package/lib/channels/microsoft-provisioning/teams-bot-args.js +119 -0
- package/lib/channels/microsoft-provisioning/teams-bot-controller.js +123 -0
- package/lib/channels/microsoft-provisioning/teams-bot-parse.js +134 -0
- package/lib/channels/microsoft-provisioning/teams-bot-persist.js +113 -0
- package/lib/channels/microsoft-provisioning/teams-bot-provision.js +234 -0
- package/lib/channels/microsoft-provisioning/teams-bot-secrets.js +45 -0
- package/lib/channels/microsoft-provisioning/teams-cli.js +82 -0
- package/lib/channels/runtime-tool-catalog.js +5 -2
- package/lib/channels/slack-channel-add-portal.js +130 -0
- package/lib/channels/slack-channel-add-tty-auth.js +95 -0
- package/lib/channels/slack-channel-add.js +311 -0
- package/lib/channels/slack-mcp-callback.js +51 -0
- package/lib/channels/slack-mcp-runtime.js +156 -0
- package/lib/channels/slack-provisioning/apps.js +181 -0
- package/lib/channels/slack-provisioning/auth-store.js +110 -0
- package/lib/channels/slack-provisioning/auth-ticket.js +185 -0
- package/lib/channels/slack-provisioning/auth.js +115 -0
- package/lib/channels/slack-provisioning/callbacks.js +41 -0
- package/lib/channels/slack-provisioning/cli.js +226 -0
- package/lib/channels/slack-provisioning/constants.js +37 -0
- package/lib/channels/slack-provisioning/credentials.js +169 -0
- package/lib/channels/slack-provisioning/curl-shim.js +132 -0
- package/lib/channels/slack-provisioning/developer-install.js +118 -0
- package/lib/channels/slack-provisioning/env-file.js +120 -0
- package/lib/channels/slack-provisioning/errors.js +47 -0
- package/lib/channels/slack-provisioning/go-ca-bundle.js +137 -0
- package/lib/channels/slack-provisioning/index.js +250 -0
- package/lib/channels/slack-provisioning/install-cli.js +335 -0
- package/lib/channels/slack-provisioning/manifest.js +89 -0
- package/lib/channels/slack-provisioning/oauth-lock.js +33 -0
- package/lib/channels/slack-provisioning/offer-cli.js +113 -0
- package/lib/channels/slack-provisioning/onboard-members.js +122 -0
- package/lib/channels/slack-provisioning/onboard.js +89 -0
- package/lib/channels/slack-provisioning/persist.js +95 -0
- package/lib/channels/slack-provisioning/remaining-urls.js +158 -0
- package/lib/channels/slack-provisioning/with-curl-on-path.js +53 -0
- package/lib/channels/teams-bot-channel-add.js +94 -0
- package/lib/channels/vendor-dataplane-url.js +249 -0
- package/lib/cli/index.js +4 -0
- package/lib/cli/setup-certification-commands.js +2 -2
- package/lib/cli/setup-certification.help.js +5 -1
- package/lib/cli/setup-external-system-help.js +2 -0
- package/lib/cli/setup-external-system.js +1 -1
- package/lib/commands/agent-kit-help.js +79 -0
- package/lib/commands/agent-kit.js +346 -0
- package/lib/commands/channel-add-help.js +366 -0
- package/lib/commands/channel-add-setup.js +162 -80
- package/lib/commands/channel-configure.js +118 -0
- package/lib/commands/channel.js +10 -1
- package/lib/commands/datasource-capability-relate-cli.js +5 -4
- package/lib/commands/governance-upload-external.js +6 -3
- package/lib/commands/lifecycle-command-action.js +2 -5
- package/lib/commands/lifecycle-external.js +93 -21
- package/lib/commands/repair-auth-apply.js +1 -1
- package/lib/commands/repair-datasource-key-skip.js +39 -0
- package/lib/commands/repair-datasource-keys.js +24 -12
- package/lib/commands/repair-datasource-test-payload.js +4 -2
- package/lib/commands/repair-datasource-webhooks-sync-bridge.js +23 -2
- package/lib/commands/repair-datasource.js +3 -0
- package/lib/commands/repair-external-run.js +59 -25
- package/lib/commands/repair-openapi-rest-runtime.js +127 -0
- package/lib/commands/repair-orchestration-tag-merge.js +339 -0
- package/lib/commands/repair-rbac-catalog-defaults.js +96 -0
- package/lib/commands/repair-rbac-platform-preset.js +26 -15
- package/lib/commands/repair-rbac-reader-roles.js +8 -21
- package/lib/commands/repair-rbac.js +26 -44
- package/lib/commands/repair-system-permissions.js +24 -22
- package/lib/commands/role-assistant-copy-output.js +61 -0
- package/lib/commands/role-assistant-copy.js +155 -0
- package/lib/commands/role-assistant-test-output.js +22 -9
- package/lib/commands/role-assistant-test-result-rows.js +42 -0
- package/lib/commands/role-assistant.js +150 -43
- package/lib/commands/search.js +143 -0
- package/lib/commands/test-e2e-external.js +148 -21
- package/lib/commands/test-trust-external.js +7 -5
- package/lib/commands/upload-credential-push-log.js +2 -1
- package/lib/commands/upload-publish-context.js +1 -1
- package/lib/commands/upload-role-assistant-shell.js +124 -0
- package/lib/commands/upload-sidecar-followups.js +10 -4
- package/lib/commands/upload.js +18 -3
- package/lib/commands/verify-operations-skip-e2e.js +131 -0
- package/lib/commands/verify-operations-step-plan.js +6 -33
- package/lib/commands/verify-operations-steps.js +3 -1
- package/lib/core/secrets-docker-env.js +4 -1
- package/lib/core/secrets-env-content.js +17 -3
- package/lib/datasource/capability/capability-manifest.js +0 -3
- package/lib/datasource/capability/copy-test-payload.js +3 -0
- package/lib/datasource/capability/relate-operations.js +28 -10
- package/lib/datasource/capability/run-capability-relate.js +48 -25
- package/lib/datasource/datasource-identifier.js +13 -5
- package/lib/deployment/deployer-poll-run.js +117 -35
- package/lib/external-system/deploy-dataplane-published.js +70 -0
- package/lib/external-system/deploy-helpers.js +26 -1
- package/lib/external-system/deploy.js +22 -8
- package/lib/external-system/download-helpers.js +29 -2
- package/lib/external-system/download-role-assistant.js +109 -4
- package/lib/external-system/download.js +46 -30
- package/lib/external-system/sync-deploy-manifest.js +3 -2
- package/lib/external-system/upload-identity.js +42 -0
- package/lib/generator/index.js +19 -15
- package/lib/generator/split.js +13 -2
- package/lib/generator/wizard-datasource-key.js +54 -0
- package/lib/generator/wizard.js +55 -54
- package/lib/integration-definition/apply-datasource-keys.js +75 -0
- package/lib/integration-definition/apply-relationships.js +195 -0
- package/lib/integration-definition/apply-static-enterprise.js +229 -0
- package/lib/integration-definition/apply-system-file.js +71 -0
- package/lib/integration-definition/apply-test-endpoint.js +89 -0
- package/lib/integration-definition/apply-viewpoint-defaults.js +157 -0
- package/lib/integration-definition/apply.js +78 -59
- package/lib/integration-definition/enrich-openapi-operations.js +36 -10
- package/lib/integration-definition/enrich-openapi-pick.js +87 -0
- package/lib/lifecycle/role-assistant-governance.js +181 -0
- package/lib/lifecycle/scenario-upload.js +181 -30
- package/lib/programmatic/builder-api-cors.js +143 -0
- package/lib/programmatic/builder-api-request.js +6 -0
- package/lib/programmatic/builder-api-route-dispatch.js +56 -42
- package/lib/programmatic/builder-api-server.js +8 -1
- package/lib/programmatic/capability-registry.js +55 -0
- package/lib/programmatic/channel-install-help-resolve.js +359 -0
- package/lib/programmatic/channel-install-session.js +218 -0
- package/lib/programmatic/help-content/channel-onboarding.md +2 -0
- package/lib/programmatic/help-content/cip-overview.md +3 -1
- package/lib/programmatic/http-raw-response.js +62 -0
- package/lib/programmatic/index.js +2 -0
- package/lib/programmatic/openapi-apply-result-schemas.js +8 -0
- package/lib/programmatic/openapi-channel-install-bindings.js +179 -0
- package/lib/programmatic/openapi-channel-install-schemas.js +289 -0
- package/lib/programmatic/openapi-component-schemas.js +19 -1
- package/lib/programmatic/openapi-description-enricher.js +3 -1
- package/lib/programmatic/openapi-descriptions.js +80 -3
- package/lib/programmatic/openapi-envelope-examples.js +124 -0
- package/lib/programmatic/openapi-operation-bindings.js +9 -1
- package/lib/programmatic/openapi-request-schemas.js +5 -0
- package/lib/programmatic/openapi-schema-descriptions-channel.js +319 -0
- package/lib/programmatic/openapi-schema-descriptions-operations.js +19 -0
- package/lib/programmatic/openapi-spec.js +13 -8
- package/lib/programmatic/platform-rbac-catalog.js +36 -18
- package/lib/programmatic/request-timeout.js +3 -0
- package/lib/programmatic/route-handler-map.js +58 -1
- package/lib/programmatic/route-handlers-context.js +2 -1
- package/lib/programmatic/run-auth-permissions.js +54 -0
- package/lib/programmatic/run-channel-catalog.js +238 -0
- package/lib/programmatic/run-channel-install-artifacts.js +137 -0
- package/lib/programmatic/run-channel-install-copilot.js +353 -0
- package/lib/programmatic/run-channel-install-options.js +236 -0
- package/lib/programmatic/run-channel-install-teams-bot.js +204 -0
- package/lib/programmatic/run-channel-install.js +346 -0
- package/lib/programmatic/run-channel-package.js +87 -7
- package/lib/programmatic/run-download.js +41 -0
- package/lib/programmatic/workspace-context.js +2 -0
- package/lib/protection/auth-context.js +3 -1
- package/lib/protection/protection-display.js +3 -2
- package/lib/protection/report-exit.js +50 -0
- package/lib/protection/run-commands.js +2 -0
- package/lib/role-assistant/evidence-sync.js +4 -2
- package/lib/role-assistant/evidence-validation-issues.js +51 -0
- package/lib/role-assistant/knowledge-sync.js +10 -4
- package/lib/role-assistant/package-validate.js +175 -0
- package/lib/role-assistant/settings.js +49 -2
- package/lib/role-assistant/test-case-assertion-row.js +36 -0
- package/lib/role-assistant/test-case-copy-bind.js +77 -0
- package/lib/role-assistant/test-case-copy-expected.js +127 -0
- package/lib/role-assistant/test-case-copy-from-work.js +90 -0
- package/lib/role-assistant/test-case-copy-interactions.js +67 -0
- package/lib/role-assistant/test-case-copy.js +119 -0
- package/lib/role-assistant/test-case-expected-catalog.js +135 -0
- package/lib/role-assistant/test-case-validate.js +88 -0
- package/lib/role-assistant/test-cases-bid.js +117 -4
- package/lib/role-assistant/test-cases-evaluate.js +159 -24
- package/lib/role-assistant/test-cases-evidence.js +175 -0
- package/lib/role-assistant/test-cases-honesty.js +155 -6
- package/lib/role-assistant/test-cases-lifecycle.js +291 -0
- package/lib/role-assistant/test-cases-search-graph.js +122 -0
- package/lib/role-assistant/test-cases-search.js +247 -0
- package/lib/role-assistant/test-cases.js +71 -172
- package/lib/role-assistant/test-pack-map.js +180 -0
- package/lib/role-assistant/test-pack-sync.js +187 -0
- package/lib/role-assistant/test-runner-debug.js +54 -0
- package/lib/role-assistant/test-runner-respond-body.js +36 -0
- package/lib/role-assistant/test-runner-search.js +164 -0
- package/lib/role-assistant/test-runner-start-payload.js +63 -10
- package/lib/role-assistant/test-runner-workhub-answers.js +45 -16
- package/lib/role-assistant/test-runner-workhub-helpers.js +40 -2
- package/lib/role-assistant/test-runner-workhub-soft.js +9 -3
- package/lib/role-assistant/test-runner-workhub.js +74 -32
- package/lib/role-assistant/test-runner.js +66 -11
- package/lib/schema/external-datasource.schema.json +146 -21
- package/lib/schema/external-system.schema.json +177 -2
- package/lib/schema/mcp-client-profile.schema.json +103 -0
- package/lib/schema/role-assistant-test-case.schema.json +408 -0
- package/lib/search/dataplane-context.js +23 -0
- package/lib/search/search-args.js +211 -0
- package/lib/search/search-display.js +238 -0
- package/lib/search/search-errors.js +50 -0
- package/lib/search/search-prompts.js +119 -0
- package/lib/search/search-roles.js +85 -0
- package/lib/search/search-run.js +241 -0
- package/lib/search/search-skills.js +198 -0
- package/lib/utils/app-path-resolve.js +4 -0
- package/lib/utils/authentication-env-template.js +44 -6
- package/lib/utils/authentication-slot-show.js +153 -0
- package/lib/utils/credential-display.js +43 -1
- package/lib/utils/credential-secrets-env.js +6 -1
- package/lib/utils/env-copy.js +19 -7
- package/lib/utils/external-env-template.js +20 -2
- package/lib/utils/external-system-readiness-compact-blocks.js +5 -1
- package/lib/utils/external-system-readiness-compact-display.js +30 -1
- package/lib/utils/external-system-validators.js +2 -1
- package/lib/utils/help-builder.js +3 -1
- package/lib/utils/paths.js +18 -1
- package/lib/utils/platform-shell-package.js +69 -0
- package/lib/utils/port-resolver.js +50 -1
- package/lib/utils/rewrite-name-flag.js +20 -0
- package/lib/utils/role-assistant-paths.js +13 -10
- package/lib/utils/schema-loader.js +37 -0
- package/lib/utils/schema-resolver.js +11 -1
- package/lib/utils/secrets-helpers.js +12 -21
- package/lib/utils/token-manager.js +10 -5
- package/lib/validation/validate-external-file.js +5 -1
- package/lib/validation/validate.js +41 -0
- package/package.json +1 -1
- package/templates/README.md +1 -1
- package/templates/agent-kit/adapters/claude/nested.CLAUDE.md +1 -0
- package/templates/agent-kit/adapters/claude/root.CLAUDE.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-0-plan.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-1-validate.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-2-build.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-3-push.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-biz-1-validate.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-biz-2-build.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-biz-3-prove.md +5 -0
- package/templates/agent-kit/agent-kit.yaml +45 -0
- package/templates/agent-kit/instructions/AGENTKIT.md +83 -0
- package/templates/agent-kit/instructions/integration.AGENTS.md +25 -0
- package/templates/agent-kit/instructions/role-assistant.AGENTS.md +22 -0
- package/templates/agent-kit/instructions/root.AGENTS.md +37 -0
- package/templates/agent-kit/parity-inventory.yaml +188 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/SKILL.md +58 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/references/contract-checklist.md +40 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/references/delivery-gates.md +54 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/references/production-safety.md +35 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/scripts/reserved-system-key.js +19 -0
- package/templates/agent-kit/skills/aifabrix-plan/SKILL.md +51 -0
- package/templates/agent-kit/skills/aifabrix-plan/references/challenge-checklist.md +108 -0
- package/templates/agent-kit/skills/aifabrix-plan/references/interaction.md +34 -0
- package/templates/agent-kit/skills/aifabrix-plan/references/plan-template.md +182 -0
- package/templates/agent-kit/skills/aifabrix-prove/SKILL.md +50 -0
- package/templates/agent-kit/skills/aifabrix-prove/references/demo-template.md +65 -0
- package/templates/agent-kit/skills/aifabrix-prove/references/evidence-lifecycle.md +68 -0
- package/templates/agent-kit/skills/aifabrix-prove/references/learning-template.md +66 -0
- package/templates/agent-kit/skills/aifabrix-role-assistant/SKILL.md +42 -0
- package/templates/agent-kit/skills/aifabrix-role-assistant/references/package-boundary.md +21 -0
- package/templates/agent-kit/skills/shared/hosts.md +78 -0
- package/templates/agent-kit/workspace/.cursor/plans/README.md +22 -0
- package/templates/agent-kit/workspace/LICENSE.mit +21 -0
- package/templates/agent-kit/workspace/README.md +89 -0
- package/templates/applications/builder-api/Dockerfile +3 -1
- package/templates/applications/builder-api/env.template +7 -0
- package/templates/applications/dataplane/application.yaml +6 -5
- package/templates/applications/dataplane/env.template +2 -2
- package/templates/applications/dataplane/rbac.yaml +35 -2
- package/templates/applications/keycloak/Dockerfile +30 -4
- package/templates/applications/keycloak/application.yaml +2 -2
- package/templates/applications/keycloak/cimd-lenient-parse/AbstractClientIdMetadataDocumentExecutor.java +896 -0
- package/templates/applications/keycloak/cimd-lenient-parse/SOURCE.md +19 -0
- package/templates/applications/keycloak/env.template +3 -0
- package/templates/applications/miso-controller/application.yaml +1 -2
- package/templates/applications/miso-controller/env.template +10 -9
- package/templates/channels/README.md +5 -5
- package/templates/channels/chatgpt/TROUBLESHOOTING.md +51 -0
- package/templates/channels/chatgpt/channel.json +59 -0
- package/templates/channels/chatgpt/icon.svg +1 -0
- package/templates/channels/chatgpt/install.template.md.hbs +20 -95
- package/templates/channels/chatgpt/integration/README.md +1 -1
- package/templates/channels/chatgpt/integration/application.json +2 -2
- package/templates/channels/chatgpt/integration/chatgpt-system.json +49 -4
- package/templates/channels/chatgpt/integration/env.template +2 -4
- package/templates/channels/chatgpt/integration/rbac.json +13 -0
- package/templates/channels/claude/TROUBLESHOOTING.md +44 -0
- package/templates/channels/claude/channel.json +59 -0
- package/templates/channels/claude/icon.svg +1 -0
- package/templates/channels/claude/install.template.md.hbs +22 -0
- package/templates/channels/claude/integration/README.md +14 -0
- package/templates/channels/claude/integration/application.json +15 -0
- package/templates/channels/claude/integration/claude-system.json +59 -0
- package/templates/channels/claude/integration/env.template +2 -0
- package/templates/channels/claude/integration/rbac.json +13 -0
- package/templates/channels/claude/manifest.template.json.hbs +40 -0
- package/templates/channels/mcp-client/channel.json +72 -0
- package/templates/channels/mcp-client/icon.svg +1 -0
- package/templates/channels/mcp-client/install.template.md.hbs +24 -0
- package/templates/channels/mcp-client/integration/README.md +13 -0
- package/templates/channels/mcp-client/integration/application.json +15 -0
- package/templates/channels/mcp-client/integration/env.template +2 -0
- package/templates/channels/mcp-client/integration/mcp-client-system.json +72 -0
- package/templates/channels/mcp-client/integration/rbac.json +13 -0
- package/templates/channels/mcp-client/manifest.template.json.hbs +41 -0
- package/templates/channels/mcp-client/profiles/cursor.json +26 -0
- package/templates/channels/mcp-client/profiles/github-copilot.json +29 -0
- package/templates/channels/mcp-client/profiles/vscode.json +29 -0
- package/templates/channels/microsoft-copilot/channel.json +73 -0
- package/templates/channels/microsoft-copilot/declarative-agent.template.json.hbs +8 -4
- package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +65 -5
- package/templates/channels/microsoft-copilot/icon.svg +1 -0
- package/templates/channels/microsoft-copilot/install.template.md.hbs +9 -9
- package/templates/channels/microsoft-copilot/integration/README.md +1 -1
- package/templates/channels/microsoft-copilot/integration/application.json +2 -2
- package/templates/channels/microsoft-copilot/integration/env.template +3 -6
- package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +63 -4
- package/templates/channels/microsoft-copilot/integration/rbac.json +13 -0
- package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +5 -5
- package/templates/channels/slack/channel.json +234 -0
- package/templates/channels/slack/icon.svg +1 -0
- package/templates/channels/slack/install.template.md.hbs +45 -28
- package/templates/channels/slack/integration/README.md +245 -22
- package/templates/channels/slack/integration/application.json +44 -7
- package/templates/channels/slack/integration/env.template +15 -6
- package/templates/channels/slack/integration/openapi/openapi.json +126 -0
- package/templates/channels/slack/integration/rbac.json +84 -0
- package/templates/channels/slack/integration/slack-datasource-commands.json +154 -0
- package/templates/channels/slack/integration/slack-datasource-conversations.json +28 -3
- package/templates/channels/slack/integration/slack-datasource-events.json +154 -0
- package/templates/channels/slack/integration/slack-datasource-interactive.json +154 -0
- package/templates/channels/slack/integration/slack-datasource-messages.json +40 -2
- package/templates/channels/slack/integration/slack-system.json +161 -72
- package/templates/channels/slack/manifest.template.json.hbs +10 -4
- package/templates/channels/teams-bot/channel.json +162 -0
- package/templates/channels/teams-bot/icon.svg +1 -0
- package/templates/channels/teams-bot/install.template.md.hbs +12 -13
- package/templates/channels/teams-bot/integration/README.md +5 -4
- package/templates/channels/teams-bot/integration/application.json +6 -4
- package/templates/channels/teams-bot/integration/env.template +5 -4
- package/templates/channels/teams-bot/integration/openapi/openapi.json +68 -0
- package/templates/channels/teams-bot/integration/rbac.json +21 -0
- package/templates/channels/teams-bot/integration/teams-bot-datasource-activities.json +154 -0
- package/templates/channels/teams-bot/integration/teams-bot-system.json +128 -23
- package/templates/channels/web-embed/channel.json +60 -0
- package/templates/channels/web-embed/install.template.md.hbs +1 -1
- package/templates/channels/web-embed/integration/README.md +2 -2
- package/templates/channels/web-embed/integration/application.json +2 -2
- package/templates/channels/web-embed/integration/env.template +1 -1
- package/templates/channels/web-embed/integration/rbac.json +13 -0
- package/templates/channels/web-embed/integration/web-embed-system.json +50 -4
- package/templates/python/docker-compose.hbs +14 -0
- package/templates/typescript/docker-compose.hbs +14 -0
|
@@ -9,9 +9,15 @@
|
|
|
9
9
|
'use strict';
|
|
10
10
|
|
|
11
11
|
const path = require('path');
|
|
12
|
-
const {
|
|
12
|
+
const {
|
|
13
|
+
assertChannelTargetInstallable,
|
|
14
|
+
getDefaultChannelDescription
|
|
15
|
+
} = require('./channel-targets');
|
|
16
|
+
const { deriveChannelInstanceKey } = require('./channel-instance-key');
|
|
13
17
|
const { resolveAppDescription } = require('./channel-description');
|
|
14
18
|
const { resolveChannelRuntimeValues } = require('./channel-runtime-resolver');
|
|
19
|
+
const { vendorFacingUrlsFromCtx } = require('./vendor-dataplane-url');
|
|
20
|
+
const { applySlackPackageVersion } = require('./channel-package-version');
|
|
15
21
|
const { generateChannelArtifact } = require('./channel-artifact-generator');
|
|
16
22
|
const { fetchRuntimeLayerBToolNames } = require('./runtime-tool-catalog');
|
|
17
23
|
const { loadChannelPackageContext } = require('./channel-discovery');
|
|
@@ -36,21 +42,30 @@ const { runChannelProbe } = require('./channel-probe');
|
|
|
36
42
|
const { resolveChannelAuthContext } = require('./channel-auth-context');
|
|
37
43
|
const { ensureChannelCredential } = require('./channel-credential');
|
|
38
44
|
const {
|
|
39
|
-
|
|
45
|
+
buildLiveInstallApprovalGuide,
|
|
40
46
|
resolveApprovalPortalUrl
|
|
41
47
|
} = require('./channel-approval-guide');
|
|
42
48
|
const {
|
|
43
49
|
normalizeBaseChannelName,
|
|
44
50
|
resolveChannelDisplayName
|
|
45
51
|
} = require('./channel-display-name');
|
|
46
|
-
const {
|
|
52
|
+
const { printLiveChannelCanonicalTty } = require('./channel-add-remaining');
|
|
47
53
|
const { ensureChannelReadyForAdd } = require('./channel-add-ensure');
|
|
48
|
-
const { showExistingChannelStatus } = require('./channel-add-existing');
|
|
54
|
+
const { liveInstallTtyCtx, showExistingChannelStatus, shouldReturnSkippedChannel } = require('./channel-add-existing');
|
|
49
55
|
const {
|
|
50
56
|
assertMicrosoftCopilotOauthReference,
|
|
51
57
|
assertMicrosoftCopilotOauthReferenceBeforeForce,
|
|
52
58
|
loadMicrosoftCopilotEntraContext
|
|
53
59
|
} = require('./microsoft-copilot-channel-add');
|
|
60
|
+
const {
|
|
61
|
+
maybeAssertMcpClientProfile
|
|
62
|
+
} = require('./mcp-client-channel-add');
|
|
63
|
+
const {
|
|
64
|
+
runChannelAddPreflights,
|
|
65
|
+
runChannelAddContinuations
|
|
66
|
+
} = require('./channel-add-continuations');
|
|
67
|
+
const { maybeProvisionSlackChannel, applySlackOnboardToCtx } = require('./slack-channel-add');
|
|
68
|
+
const { maybeProvisionTeamsBotChannel } = require('./teams-bot-channel-add');
|
|
54
69
|
|
|
55
70
|
/**
|
|
56
71
|
* @param {typeof import('./channel-targets').CHANNEL_TARGETS[string]} target
|
|
@@ -66,22 +81,6 @@ function resolveInstallStatus(target, channelExt, dryRun) {
|
|
|
66
81
|
return 'installed';
|
|
67
82
|
}
|
|
68
83
|
|
|
69
|
-
/**
|
|
70
|
-
* @param {Object|null} validation
|
|
71
|
-
* @returns {Object|null}
|
|
72
|
-
*/
|
|
73
|
-
function toValidationDisplay(validation) {
|
|
74
|
-
if (!validation) return null;
|
|
75
|
-
return {
|
|
76
|
-
callbackReachable: validation.callbackReachable,
|
|
77
|
-
credentialValid: validation.credentialValid,
|
|
78
|
-
assistantCatalogReachable: validation.assistantCatalogReachable,
|
|
79
|
-
inboundVerification: Object.values(validation.inboundVerification).every(Boolean),
|
|
80
|
-
probeTiers: validation.probeTiers || null,
|
|
81
|
-
runtimeChecks: validation.runtimeChecks || null
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
|
|
85
84
|
/**
|
|
86
85
|
* @param {string} channelTarget
|
|
87
86
|
* @param {Object} artifactParams
|
|
@@ -102,6 +101,26 @@ function generateArtifactWithAudit(channelTarget, artifactParams) {
|
|
|
102
101
|
}
|
|
103
102
|
}
|
|
104
103
|
|
|
104
|
+
/**
|
|
105
|
+
* @param {string} channelTarget
|
|
106
|
+
* @param {Object} packageContext
|
|
107
|
+
* @param {Object} ctx
|
|
108
|
+
* @returns {Promise<string[]>}
|
|
109
|
+
*/
|
|
110
|
+
async function resolveInstallLayerBToolNames(channelTarget, packageContext, ctx) {
|
|
111
|
+
const usesLayerB = channelTarget === 'chatgpt'
|
|
112
|
+
|| channelTarget === 'microsoft-copilot'
|
|
113
|
+
|| channelTarget === 'mcp-client'
|
|
114
|
+
|| channelTarget === 'claude';
|
|
115
|
+
if (!usesLayerB) {
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
if (packageContext?.governedToolNames?.length > 0) {
|
|
119
|
+
return packageContext.governedToolNames;
|
|
120
|
+
}
|
|
121
|
+
return fetchRuntimeLayerBToolNames(ctx.dataplaneUrl, ctx.authConfig, channelTarget);
|
|
122
|
+
}
|
|
123
|
+
|
|
105
124
|
/**
|
|
106
125
|
* @param {Object} ctx
|
|
107
126
|
* @param {string} channelTarget
|
|
@@ -113,7 +132,7 @@ function generateArtifactWithAudit(channelTarget, artifactParams) {
|
|
|
113
132
|
async function patchConfigWithAudit(ctx, channelTarget, channelBlock, status, artifactHash) {
|
|
114
133
|
try {
|
|
115
134
|
await patchChannelExtension(
|
|
116
|
-
{
|
|
135
|
+
{ ...ctx, channelTarget },
|
|
117
136
|
channelBlock
|
|
118
137
|
);
|
|
119
138
|
auditConfigPatched(channelTarget, { status, artifactHash });
|
|
@@ -156,18 +175,20 @@ async function maybeRunProbe(ctx, channelBlock, channelTarget, probe) {
|
|
|
156
175
|
* @returns {Promise<{ target: Object, name: string, baseName: string, description: string, ctx: Object, existing: Object|null }>}
|
|
157
176
|
*/
|
|
158
177
|
async function prepareChannelContext(channelTarget, options) {
|
|
159
|
-
const target =
|
|
160
|
-
if (target.experimental) {
|
|
161
|
-
throw new Error(
|
|
162
|
-
`Channel target "${channelTarget}" is experimental. Confirm product requirement before use.`
|
|
163
|
-
);
|
|
164
|
-
}
|
|
178
|
+
const target = assertChannelTargetInstallable(channelTarget, options);
|
|
165
179
|
if (!options.name || typeof options.name !== 'string' || !options.name.trim()) {
|
|
166
180
|
throw new Error('--name is required for channel add');
|
|
167
181
|
}
|
|
168
182
|
|
|
169
183
|
const baseName = normalizeBaseChannelName(options.name);
|
|
170
|
-
const ctx =
|
|
184
|
+
const ctx =
|
|
185
|
+
options.authContext && typeof options.authContext === 'object'
|
|
186
|
+
? options.authContext
|
|
187
|
+
: await resolveChannelAuthContext(channelTarget, {
|
|
188
|
+
silent: options.verbose !== true
|
|
189
|
+
});
|
|
190
|
+
ctx.instanceSystemKey = options.systemKey;
|
|
191
|
+
ctx.projectRoot = options.projectRoot;
|
|
171
192
|
const name = resolveChannelDisplayName(baseName, ctx.environment);
|
|
172
193
|
const rawDescription =
|
|
173
194
|
options.description && String(options.description).trim()
|
|
@@ -176,9 +197,9 @@ async function prepareChannelContext(channelTarget, options) {
|
|
|
176
197
|
const description = resolveAppDescription(channelTarget, rawDescription);
|
|
177
198
|
|
|
178
199
|
const system = await fetchCommunicationSystem({
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
channelTarget
|
|
200
|
+
...ctx,
|
|
201
|
+
channelTarget,
|
|
202
|
+
allowMissing: channelTarget === 'slack'
|
|
182
203
|
});
|
|
183
204
|
const existing = getExistingChannelExtension(system);
|
|
184
205
|
return { target, name, baseName, description, ctx, existing };
|
|
@@ -189,58 +210,42 @@ async function prepareChannelContext(channelTarget, options) {
|
|
|
189
210
|
* @returns {Promise<Object>}
|
|
190
211
|
*/
|
|
191
212
|
async function completeLiveInstall(params) {
|
|
192
|
-
const { ctx, channelTarget, channelBlock, status, artifact, target,
|
|
193
|
-
|
|
213
|
+
const { ctx, channelTarget, channelBlock, status, artifact, target, options } = params;
|
|
194
214
|
await ensureChannelCredential({
|
|
195
215
|
ctx,
|
|
196
216
|
channelTarget,
|
|
197
217
|
target,
|
|
198
218
|
force: options.force === true
|
|
199
219
|
});
|
|
200
|
-
|
|
201
220
|
await patchConfigWithAudit(ctx, channelTarget, channelBlock, status, artifact.artifactHash);
|
|
202
|
-
|
|
203
|
-
const projectRoot = options.projectRoot || process.cwd();
|
|
204
|
-
const approvalGuide =
|
|
205
|
-
status === 'approvalRequired'
|
|
206
|
-
? buildChannelApprovalGuide(channelTarget, {
|
|
207
|
-
projectRoot,
|
|
208
|
-
name,
|
|
209
|
-
baseName,
|
|
210
|
-
artifactPath: artifact.outputPath,
|
|
211
|
-
dataplaneBaseUrl: ctx.dataplaneUrl,
|
|
212
|
-
environment: ctx.environment || options.environment || 'dev'
|
|
213
|
-
})
|
|
214
|
-
: null;
|
|
221
|
+
const approvalGuide = buildLiveInstallApprovalGuide(params);
|
|
215
222
|
if (approvalGuide?.portalUrl) {
|
|
216
223
|
auditApprovalRequired(channelTarget, { approvalUrl: approvalGuide.portalUrl });
|
|
217
224
|
}
|
|
218
|
-
|
|
219
225
|
const validation = await maybeRunProbe(ctx, channelBlock, channelTarget, options.probe);
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
return { channelBlock, artifact, validation, approvalGuide };
|
|
226
|
+
const slack = params.slackProvision || null;
|
|
227
|
+
const teamsBot = params.teamsBotProvision || null;
|
|
228
|
+
let ttyCtx = liveInstallTtyCtx(ctx, slack, teamsBot);
|
|
229
|
+
if (channelTarget === 'slack') {
|
|
230
|
+
ttyCtx = await applySlackOnboardToCtx(ttyCtx, options);
|
|
231
|
+
}
|
|
232
|
+
if (options.quiet !== true) {
|
|
233
|
+
printLiveChannelCanonicalTty({
|
|
234
|
+
channelTarget,
|
|
235
|
+
ctx: ttyCtx,
|
|
236
|
+
options,
|
|
237
|
+
runtimeValues: params.runtimeValues
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
channelBlock,
|
|
242
|
+
artifact,
|
|
243
|
+
validation,
|
|
244
|
+
approvalGuide,
|
|
245
|
+
slackProvision: slack,
|
|
246
|
+
teamsBotProvision: teamsBot,
|
|
247
|
+
runtimeValues: params.runtimeValues
|
|
248
|
+
};
|
|
244
249
|
}
|
|
245
250
|
|
|
246
251
|
/**
|
|
@@ -248,26 +253,24 @@ async function completeLiveInstall(params) {
|
|
|
248
253
|
* @returns {{ dryRun: true, channelBlock: Object, artifact: Object }}
|
|
249
254
|
*/
|
|
250
255
|
function finishDryRunInstall(params) {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
256
|
+
if (params.options && params.options.quiet !== true) {
|
|
257
|
+
printLiveChannelCanonicalTty({
|
|
258
|
+
channelTarget: params.channelTarget,
|
|
259
|
+
ctx: {
|
|
260
|
+
dataplaneUrl: params.runtimeValues && params.runtimeValues.dataplaneBaseUrl
|
|
261
|
+
},
|
|
262
|
+
options: params.options || { dryRun: true },
|
|
263
|
+
runtimeValues: params.runtimeValues
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
return {
|
|
267
|
+
dryRun: true,
|
|
268
|
+
channelBlock: params.channelBlock,
|
|
269
|
+
artifact: params.artifact,
|
|
270
|
+
runtimeValues: params.runtimeValues
|
|
271
|
+
};
|
|
265
272
|
}
|
|
266
273
|
|
|
267
|
-
/**
|
|
268
|
-
* @param {Object} params
|
|
269
|
-
* @returns {Promise<{ artifact: Object, channelBlock: Object, status: string }>}
|
|
270
|
-
*/
|
|
271
274
|
/**
|
|
272
275
|
* @param {Object|null} packageContext
|
|
273
276
|
* @param {Object} options
|
|
@@ -286,7 +289,9 @@ function brandingIconOrOption(packageContext, options, key) {
|
|
|
286
289
|
|
|
287
290
|
async function resolvePackageContextForInstall(params) {
|
|
288
291
|
const { channelTarget, options, name, description, ctx } = params;
|
|
289
|
-
const packagingTargets = new Set([
|
|
292
|
+
const packagingTargets = new Set([
|
|
293
|
+
'chatgpt', 'microsoft-copilot', 'slack', 'teams-bot', 'mcp-client', 'claude'
|
|
294
|
+
]);
|
|
290
295
|
if (!packagingTargets.has(channelTarget)) {
|
|
291
296
|
return null;
|
|
292
297
|
}
|
|
@@ -325,52 +330,66 @@ async function resolvePackageContextForInstall(params) {
|
|
|
325
330
|
};
|
|
326
331
|
}
|
|
327
332
|
|
|
328
|
-
async function
|
|
329
|
-
const { channelTarget, options,
|
|
330
|
-
const packageContext = await resolvePackageContextForInstall(params);
|
|
331
|
-
let runtimeToolNames = [];
|
|
332
|
-
if (channelTarget === 'chatgpt' || channelTarget === 'microsoft-copilot') {
|
|
333
|
-
runtimeToolNames =
|
|
334
|
-
packageContext?.governedToolNames?.length > 0
|
|
335
|
-
? packageContext.governedToolNames
|
|
336
|
-
: await fetchRuntimeLayerBToolNames(ctx.dataplaneUrl, ctx.authConfig, channelTarget);
|
|
337
|
-
}
|
|
333
|
+
async function resolveInstallRuntimeValues(params, packageContext, runtimeToolNames) {
|
|
334
|
+
const { channelTarget, options, existing, name, baseName, description, ctx } = params;
|
|
338
335
|
let entraProvider = null;
|
|
339
336
|
let entraIdentityProvider = null;
|
|
340
337
|
if (channelTarget === 'microsoft-copilot') {
|
|
341
338
|
({ entraProvider, entraIdentityProvider } = await loadMicrosoftCopilotEntraContext(ctx));
|
|
342
339
|
}
|
|
343
|
-
|
|
344
|
-
|
|
340
|
+
applySlackPackageVersion(channelTarget, options, existing);
|
|
341
|
+
const vendor = vendorFacingUrlsFromCtx(ctx);
|
|
342
|
+
return resolveChannelRuntimeValues({
|
|
343
|
+
dataplaneBaseUrl: vendor.dataplaneBaseUrl,
|
|
344
|
+
controllerUrl: vendor.controllerUrl,
|
|
345
345
|
channelTarget,
|
|
346
|
+
instanceSystemKey: options.systemKey,
|
|
346
347
|
appName: name,
|
|
347
348
|
baseName,
|
|
348
349
|
environment: ctx.environment,
|
|
349
350
|
appDescription: description,
|
|
350
351
|
icon: options.icon,
|
|
351
352
|
commandPrefix: options.commandPrefix,
|
|
353
|
+
enableMcpServer: options.enableMcpServer,
|
|
352
354
|
layerBToolNames: runtimeToolNames,
|
|
353
355
|
packageContext,
|
|
354
356
|
entraProvider,
|
|
355
357
|
entraIdentityProvider,
|
|
356
358
|
oauthPluginVaultReferenceId: options.oauthPluginVaultReferenceId,
|
|
359
|
+
packageVersion: options.packageVersion,
|
|
357
360
|
scopes: options.scopes,
|
|
358
361
|
iconColorPath: brandingIconOrOption(packageContext, options, 'iconColorPath'),
|
|
359
|
-
iconOutlinePath: brandingIconOrOption(packageContext, options, 'iconOutlinePath')
|
|
362
|
+
iconOutlinePath: brandingIconOrOption(packageContext, options, 'iconOutlinePath'),
|
|
363
|
+
mcpClientProfile:
|
|
364
|
+
channelTarget === 'mcp-client' ? maybeAssertMcpClientProfile(channelTarget, options) : undefined
|
|
360
365
|
});
|
|
361
|
-
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
async function buildInstallArtifacts(params) {
|
|
369
|
+
const { channelTarget, options, target, existing, name, baseName, description } = params;
|
|
370
|
+
const packageContext = await resolvePackageContextForInstall(params);
|
|
371
|
+
const runtimeToolNames = await resolveInstallLayerBToolNames(channelTarget, packageContext, params.ctx);
|
|
372
|
+
const runtimeValues = await resolveInstallRuntimeValues(params, packageContext, runtimeToolNames);
|
|
362
373
|
const artifact = generateArtifactWithAudit(channelTarget, {
|
|
363
|
-
projectRoot,
|
|
374
|
+
projectRoot: options.projectRoot || process.cwd(),
|
|
364
375
|
channelTarget,
|
|
365
376
|
runtimeValues,
|
|
366
377
|
dryRun: options.dryRun === true
|
|
367
378
|
});
|
|
368
379
|
const status = resolveInstallStatus(target, existing, options.dryRun === true);
|
|
369
380
|
const channelBlock = buildChannelExtensionBlock(
|
|
370
|
-
{
|
|
381
|
+
{
|
|
382
|
+
name,
|
|
383
|
+
baseName,
|
|
384
|
+
description,
|
|
385
|
+
status,
|
|
386
|
+
artifactHash: artifact.artifactHash,
|
|
387
|
+
commandPrefix: runtimeValues.commandPrefix,
|
|
388
|
+
packageVersion: runtimeValues.packageVersion
|
|
389
|
+
},
|
|
371
390
|
target
|
|
372
391
|
);
|
|
373
|
-
return { artifact, channelBlock, status };
|
|
392
|
+
return { artifact, channelBlock, status, runtimeValues };
|
|
374
393
|
}
|
|
375
394
|
|
|
376
395
|
/**
|
|
@@ -379,34 +398,40 @@ async function buildInstallArtifacts(params) {
|
|
|
379
398
|
* @returns {Object}
|
|
380
399
|
*/
|
|
381
400
|
function assertChannelAddOptions(channelTarget, options) {
|
|
382
|
-
const target =
|
|
383
|
-
if (target.experimental) {
|
|
384
|
-
throw new Error(
|
|
385
|
-
`Channel target "${channelTarget}" is experimental. Confirm product requirement before use.`
|
|
386
|
-
);
|
|
387
|
-
}
|
|
401
|
+
const target = assertChannelTargetInstallable(channelTarget, options);
|
|
388
402
|
if (!options.name || typeof options.name !== 'string' || !options.name.trim()) {
|
|
389
403
|
throw new Error('--name is required for channel add');
|
|
390
404
|
}
|
|
405
|
+
options.systemKey = deriveChannelInstanceKey(channelTarget, options.name, options.systemKey);
|
|
391
406
|
return target;
|
|
392
407
|
}
|
|
393
408
|
|
|
394
409
|
/**
|
|
395
410
|
* @param {string} channelTarget
|
|
396
411
|
* @param {Object} options
|
|
397
|
-
* @returns {Promise<
|
|
412
|
+
* @returns {Promise<void>}
|
|
398
413
|
*/
|
|
399
|
-
async function
|
|
400
|
-
|
|
414
|
+
async function prepareAddChannelGuards(channelTarget, options) {
|
|
415
|
+
maybeAssertMcpClientProfile(channelTarget, options);
|
|
401
416
|
if (channelTarget === 'microsoft-copilot' && options.force === true) {
|
|
402
417
|
await assertMicrosoftCopilotOauthReferenceBeforeForce(options);
|
|
403
418
|
}
|
|
404
419
|
await ensureChannelReadyForAdd(channelTarget, options);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* @param {string} channelTarget
|
|
424
|
+
* @param {Object} options
|
|
425
|
+
* @returns {Promise<Object>}
|
|
426
|
+
*/
|
|
427
|
+
async function runAddChannel(channelTarget, options = {}) {
|
|
428
|
+
const target = assertChannelAddOptions(channelTarget, options);
|
|
429
|
+
await prepareAddChannelGuards(channelTarget, options);
|
|
405
430
|
const { name, baseName, description, ctx, existing } = await prepareChannelContext(
|
|
406
431
|
channelTarget,
|
|
407
432
|
options
|
|
408
433
|
);
|
|
409
|
-
const skipped = showExistingChannelStatus({
|
|
434
|
+
const skipped = await showExistingChannelStatus({
|
|
410
435
|
existing,
|
|
411
436
|
options,
|
|
412
437
|
channelTarget,
|
|
@@ -414,11 +439,13 @@ async function runAddChannel(channelTarget, options = {}) {
|
|
|
414
439
|
baseName,
|
|
415
440
|
ctx
|
|
416
441
|
});
|
|
417
|
-
if (skipped)
|
|
442
|
+
if (shouldReturnSkippedChannel(channelTarget, options, skipped)) {
|
|
443
|
+
return skipped;
|
|
444
|
+
}
|
|
418
445
|
if (channelTarget === 'microsoft-copilot') {
|
|
419
446
|
await assertMicrosoftCopilotOauthReference({ options, ctx, name, baseName, description });
|
|
420
447
|
}
|
|
421
|
-
const
|
|
448
|
+
const built = await buildInstallArtifacts({
|
|
422
449
|
channelTarget,
|
|
423
450
|
options,
|
|
424
451
|
target,
|
|
@@ -429,21 +456,32 @@ async function runAddChannel(channelTarget, options = {}) {
|
|
|
429
456
|
ctx
|
|
430
457
|
});
|
|
431
458
|
if (options.dryRun) {
|
|
432
|
-
return finishDryRunInstall({ channelTarget, name, baseName, target,
|
|
459
|
+
return finishDryRunInstall({ channelTarget, name, baseName, target, options, ...built });
|
|
433
460
|
}
|
|
434
|
-
return
|
|
461
|
+
return runLiveChannelInstall({
|
|
435
462
|
ctx,
|
|
436
463
|
channelTarget,
|
|
437
|
-
|
|
438
|
-
status,
|
|
439
|
-
artifact,
|
|
464
|
+
options,
|
|
440
465
|
target,
|
|
441
466
|
name,
|
|
442
467
|
baseName,
|
|
443
|
-
|
|
468
|
+
...built
|
|
444
469
|
});
|
|
445
470
|
}
|
|
446
471
|
|
|
472
|
+
/**
|
|
473
|
+
* @param {Object} params
|
|
474
|
+
* @returns {Promise<Object>}
|
|
475
|
+
*/
|
|
476
|
+
async function runLiveChannelInstall(params) {
|
|
477
|
+
await runChannelAddPreflights(params);
|
|
478
|
+
const slackProvision = await maybeProvisionSlackChannel(params);
|
|
479
|
+
const teamsBotProvision = await maybeProvisionTeamsBotChannel(params);
|
|
480
|
+
const result = await completeLiveInstall({ ...params, slackProvision, teamsBotProvision });
|
|
481
|
+
await runChannelAddContinuations(params);
|
|
482
|
+
return result;
|
|
483
|
+
}
|
|
484
|
+
|
|
447
485
|
/**
|
|
448
486
|
* @param {string} channelTarget
|
|
449
487
|
* @param {Object} options
|
|
@@ -1,35 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ChatGPT
|
|
2
|
+
* ChatGPT remaining workspace steps (customer-facing).
|
|
3
3
|
*
|
|
4
|
-
* @fileoverview
|
|
4
|
+
* @fileoverview Short ChatGPT Apps create/publish steps — no protocol dump
|
|
5
5
|
* @author AI Fabrix Team
|
|
6
|
-
* @version 1.
|
|
6
|
+
* @version 1.3.0
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
'use strict';
|
|
10
10
|
|
|
11
|
-
const {
|
|
11
|
+
const { CHATGPT_APPS_CREATE_URL } = require('../chatgpt-runtime-contract');
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* @param {Object} ctx
|
|
15
|
-
* @returns {{ portalUrl: string, steps: string[] }}
|
|
15
|
+
* @returns {{ portalUrl: string, heading: string, credentialPortalUrl: null, steps: string[] }}
|
|
16
16
|
*/
|
|
17
17
|
function buildChatGptApprovalGuide(ctx) {
|
|
18
|
+
const name = ctx.appName || ctx.name || '';
|
|
19
|
+
const serverUrl = ctx.mcpUrl || '';
|
|
18
20
|
return {
|
|
19
|
-
portalUrl:
|
|
21
|
+
portalUrl: CHATGPT_APPS_CREATE_URL,
|
|
22
|
+
heading: 'Create the ChatGPT app',
|
|
23
|
+
credentialPortalUrl: null,
|
|
20
24
|
steps: [
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
'
|
|
24
|
-
'
|
|
25
|
-
'Scan tools, complete OAuth if prompted, review discovered governed tools, then save the app as a draft.',
|
|
26
|
-
formatCredentialPortalStep(
|
|
27
|
-
ctx,
|
|
28
|
-
`${ctx.credentialKey || 'channel'} credential references (not secrets to paste into ChatGPT)`
|
|
29
|
-
),
|
|
30
|
-
'Test representative workflows, then publish the app and configure workspace access and action controls.',
|
|
31
|
-
`After ChatGPT lists the app as active, re-run: ${ctx.resumeCommand}`,
|
|
32
|
-
'Optional: use --probe for AI Fabrix-side Runtime checks; ChatGPT Scan tools / OAuth / publication remain workspace-admin responsibilities.'
|
|
25
|
+
`Open ${CHATGPT_APPS_CREATE_URL}`,
|
|
26
|
+
`Create the app with Name: ${name}; Server URL: ${serverUrl}; Authentication: OAuth. Add the logo now — ChatGPT does not let you change it after create.`,
|
|
27
|
+
'If ChatGPT shows a callback URL that is not already registered: aifabrix channel configure chatgpt --callback-url "<callback-url>"',
|
|
28
|
+
'Publish and connect the app.'
|
|
33
29
|
]
|
|
34
30
|
};
|
|
35
31
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude remaining workspace steps (customer-facing).
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview Short Claude connector Name, Server URL, and OAuth steps — no protocol dump
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
const { CLAUDE_CONNECTORS_URL } = require('../claude-runtime-contract');
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @param {Object} ctx
|
|
13
|
+
* @returns {{ portalUrl: string, heading: string, credentialPortalUrl: null, steps: string[] }}
|
|
14
|
+
*/
|
|
15
|
+
function buildClaudeApprovalGuide(ctx) {
|
|
16
|
+
const name = ctx.appName || ctx.name || '';
|
|
17
|
+
const serverUrl = ctx.mcpUrl || '';
|
|
18
|
+
return {
|
|
19
|
+
portalUrl: CLAUDE_CONNECTORS_URL,
|
|
20
|
+
heading: 'Add the Claude custom connector',
|
|
21
|
+
credentialPortalUrl: null,
|
|
22
|
+
steps: [
|
|
23
|
+
`Open ${CLAUDE_CONNECTORS_URL}`,
|
|
24
|
+
`Add a custom connector with Name: ${name}; Server URL: ${serverUrl}; Authentication: OAuth.`
|
|
25
|
+
]
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
module.exports = { buildClaudeApprovalGuide };
|