@aifabrix/builder 2.53.0 → 2.54.1
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/bin/aifabrix.js +2 -2
- 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/types/evidence.types.js +2 -0
- package/lib/api/work-search.api.js +136 -0
- package/lib/channels/add-channel.js +163 -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 +60 -0
- package/lib/channels/channel-add-remaining.js +486 -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-description.js +59 -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 +356 -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 +16 -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 +180 -72
- package/lib/channels/channel-status-display.js +86 -16
- package/lib/channels/channel-targets.js +106 -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 +89 -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 +258 -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 +323 -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 +48 -0
- package/lib/channels/teams-bot-channel-add.js +94 -0
- package/lib/channels/vendor-dataplane-url.js +249 -0
- package/lib/cli/setup-certification.help.js +2 -0
- package/lib/cli/setup-external-system-help.js +2 -0
- package/lib/cli/setup-external-system.js +1 -1
- 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/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-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 +10 -34
- package/lib/commands/repair-system-permissions.js +24 -22
- package/lib/commands/role-assistant-test-output.js +14 -0
- package/lib/commands/role-assistant.js +59 -21
- package/lib/commands/test-e2e-external.js +148 -21
- 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 +6 -3
- package/lib/commands/upload.js +18 -3
- 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/external-system/deploy-helpers.js +26 -1
- package/lib/external-system/deploy.js +10 -6
- package/lib/external-system/download-helpers.js +29 -2
- package/lib/external-system/download-role-assistant.js +83 -4
- package/lib/external-system/download.js +40 -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/lifecycle/role-assistant-governance.js +146 -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 +54 -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/openapi-channel-install-bindings.js +179 -0
- package/lib/programmatic/openapi-channel-install-schemas.js +286 -0
- package/lib/programmatic/openapi-component-schemas.js +18 -1
- package/lib/programmatic/openapi-description-enricher.js +3 -1
- package/lib/programmatic/openapi-descriptions.js +74 -3
- package/lib/programmatic/openapi-envelope-examples.js +117 -0
- package/lib/programmatic/openapi-operation-bindings.js +4 -1
- package/lib/programmatic/openapi-schema-descriptions-channel.js +316 -0
- package/lib/programmatic/openapi-spec.js +12 -8
- package/lib/programmatic/platform-rbac-catalog.js +36 -18
- package/lib/programmatic/route-handler-map.js +51 -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 +196 -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 +232 -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/workspace-context.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/settings.js +49 -2
- package/lib/role-assistant/test-cases-evaluate.js +30 -2
- package/lib/role-assistant/test-cases-evidence.js +175 -0
- package/lib/role-assistant/test-cases-search.js +229 -0
- package/lib/role-assistant/test-cases.js +37 -4
- package/lib/role-assistant/test-runner-search.js +149 -0
- 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 +29 -11
- package/lib/role-assistant/test-runner.js +16 -1
- package/lib/schema/external-datasource.schema.json +119 -16
- package/lib/schema/external-system.schema.json +159 -2
- package/lib/schema/mcp-client-profile.schema.json +103 -0
- package/lib/utils/app-path-resolve.js +4 -0
- package/lib/utils/authentication-env-template.js +44 -6
- 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/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-resolver.js +11 -1
- package/lib/utils/secrets-helpers.js +12 -21
- package/lib/utils/token-manager.js +10 -5
- package/lib/validation/validate.js +40 -0
- package/package.json +1 -1
- package/templates/README.md +1 -1
- package/templates/applications/builder-api/Dockerfile +1 -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 +7 -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 +2 -0
- 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 +41 -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 +21 -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 +223 -0
- package/templates/channels/slack/icon.svg +1 -0
- package/templates/channels/slack/install.template.md.hbs +36 -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 +155 -77
- package/templates/channels/slack/manifest.template.json.hbs +5 -2
- package/templates/channels/teams-bot/channel.json +161 -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
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# CIMD image patch (Keycloak 26.7.2)
|
|
2
|
+
|
|
3
|
+
This directory is **not** a Keycloak source build. `aifabrix build keycloak` still starts from `quay.io/keycloak/keycloak:26.7.2`. A Docker stage recompiles this one class against that image’s jars and injects it into `org.keycloak.keycloak-services-*.jar` before `kc.sh build`.
|
|
4
|
+
|
|
5
|
+
Upstream file: `services/.../AbstractClientIdMetadataDocumentExecutor.java` @ tag `26.7.2` (Apache 2.0).
|
|
6
|
+
|
|
7
|
+
## Lenient parse (ChatGPT)
|
|
8
|
+
|
|
9
|
+
ChatGPT’s CIMD `client.json` includes extra fields (for example `token_endpoint_auth_methods_supported`) that Keycloak 26.7.x rejects because CIMD parse uses Jackson `FAIL_ON_UNKNOWN_PROPERTIES`.
|
|
10
|
+
|
|
11
|
+
- [keycloak/keycloak#51235](https://github.com/keycloak/keycloak/pull/51235) (open; not in 26.7.2)
|
|
12
|
+
|
|
13
|
+
## Public client + jwt-bearer (Claude hosted)
|
|
14
|
+
|
|
15
|
+
Claude’s CIMD is a public client (`token_endpoint_auth_method: none`) that also lists `urn:ietf:params:oauth:grant-type:jwt-bearer`. Keycloak 26.7.2 then fails authorize with `JWT authorization grant cannot be enabled in a public client` ([#50362](https://github.com/keycloak/keycloak/issues/50362)). Official [PR 50411](https://github.com/keycloak/keycloak/pull/50411) is still a draft and defaults the filter **off**. This image always drops confidential-only grants on public CIMD metadata (RFC 7591 §3.2.1), which is enough for hosted Claude Connect (authorization_code). It does **not** implement public-client JWT Authorization Grant / EMA.
|
|
16
|
+
|
|
17
|
+
26.7.2 already advertises `token_endpoint_auth_methods_supported` `"none"` when `--features=cimd`.
|
|
18
|
+
|
|
19
|
+
Drop this patched class when the consumed `quay.io` tag includes both behaviors.
|
|
@@ -55,6 +55,9 @@ KC_HEALTH_ENABLED=true
|
|
|
55
55
|
KC_HTTP_MANAGEMENT_HEALTH_ENABLED=false
|
|
56
56
|
# Single-instance: use local cache so /health/ready passes (avoids Infinispan cluster check)
|
|
57
57
|
KC_CACHE=local
|
|
58
|
+
# Experimental OAuth Client ID Metadata Document (Keycloak 26.6+). Realm well-known
|
|
59
|
+
# advertises client_id_metadata_document_supported. Rebuild the Keycloak image after change.
|
|
60
|
+
KC_FEATURES=cimd
|
|
58
61
|
|
|
59
62
|
# =============================================================================
|
|
60
63
|
# DATABASE CONFIGURATION
|
|
@@ -4,8 +4,7 @@ app:
|
|
|
4
4
|
displayName: 'Miso Controller'
|
|
5
5
|
description: 'Miso is the AI Fabrix in-tenant controller and portal layer for securely operating enterprise AI apps inside a customer’s Azure tenant. It provides Entra ID SSO, RBAC, audit logs, environment/app configuration via schemas, and safe secret handling via Key Vault references—ensuring governance, traceability, and predictable UX across portal, SDK, and CLI.'
|
|
6
6
|
type: webapp
|
|
7
|
-
version: '2.0.
|
|
8
|
-
|
|
7
|
+
version: '2.0.43'
|
|
9
8
|
# Image Configuration
|
|
10
9
|
# Set tag to match your build (e.g. aifabrix build miso-controller -t 1.0.0 then tag: 1.0.0)
|
|
11
10
|
# Registry is required so the controller can pull the image (avoids "docker: not found" on the controller host).
|
|
@@ -171,6 +171,8 @@ MISO_WEB_SERVER_URL=url://public
|
|
|
171
171
|
MISO_CONTROLLER_URL=url://internal
|
|
172
172
|
MISO_RELATIVE_PATH=url://vdir-public
|
|
173
173
|
ALLOWED_ORIGINS=http://localhost:*,url://host-public,url://host-private,url://dataplane-host-public,url://dataplane-host-private
|
|
174
|
+
# Opt-in: broker/entry/referer under /data keep …/data/auth/callback (do not append /miso). Default off.
|
|
175
|
+
# AUTH_PRESERVE_DATAPLANE_VDIR=true
|
|
174
176
|
|
|
175
177
|
# MISO Environment Configuration (miso, dev, tst, pro)
|
|
176
178
|
MISO_ENVIRONMENT=miso
|
|
@@ -4,14 +4,14 @@ Published copies of communication external-system manifests for `aifabrix channe
|
|
|
4
4
|
|
|
5
5
|
## SSOT
|
|
6
6
|
|
|
7
|
-
| Channel | Master location |
|
|
8
|
-
| --- | --- |
|
|
9
|
-
| **All channel targets** | `aifabrix-
|
|
10
|
-
| Targets | `slack`, `teams-bot`, `microsoft-copilot`, `chatgpt`, `
|
|
7
|
+
| Channel | Master location |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| **All channel targets** | `aifabrix-builder/templates/channels/<target>/` |
|
|
10
|
+
| Targets | `slack`, `teams-bot`, `microsoft-copilot`, `chatgpt`, `claude`, `mcp-client`, `web-embed` |
|
|
11
11
|
|
|
12
12
|
`channel scaffold` copies files from `integration/` subfolder here into the user's `integration/<target>/`, then generates **only** `<target>-deploy.json` via `aifabrix json`.
|
|
13
13
|
|
|
14
|
-
Do **not** hardcode manifests in `lib/channels/*.js`.
|
|
14
|
+
Do **not** hardcode manifests in `lib/channels/*.js`. Dataplane `make sync-json` does **not** overwrite these packages.
|
|
15
15
|
|
|
16
16
|
## Brand icons (`brand/`)
|
|
17
17
|
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# ChatGPT channel — Runtime and OAuth reference
|
|
2
|
+
|
|
3
|
+
Customer `INSTALL.md` is a short status/instruction artifact. This file is the operator/debug reference. Do not copy this content into generated install help.
|
|
4
|
+
|
|
5
|
+
## Desired contract (describe, don't configure)
|
|
6
|
+
|
|
7
|
+
When ChatGPT is activated, AI Fabrix must be self-describing enough that ChatGPT only needs:
|
|
8
|
+
|
|
9
|
+
- Name
|
|
10
|
+
- Server URL (Runtime MCP)
|
|
11
|
+
- Authentication: OAuth
|
|
12
|
+
|
|
13
|
+
ChatGPT then discovers protected-resource metadata, the authorization server, scopes, PKCE `S256`, token-endpoint auth methods, and **client registration**. OpenAI currently prefers **CIMD** (`client_id_metadata_document_supported: true`) and still supports **DCR** (`registration_endpoint`). Pre-created `miso-chatgpt` copy-paste is the fallback when discovery does not advertise registration.
|
|
14
|
+
|
|
15
|
+
Public OpenAI auth: https://developers.openai.com/apps-sdk/build/auth
|
|
16
|
+
|
|
17
|
+
## Runtime MCP
|
|
18
|
+
|
|
19
|
+
- HTTPS Streamable HTTP at the Runtime orchestration MCP URL
|
|
20
|
+
- RFC 9728 protected-resource metadata (Traefik-reachable discovery URL, not a bare origin `/.well-known` 404)
|
|
21
|
+
- `resource` echoed through authorize/token; access token audience must match
|
|
22
|
+
|
|
23
|
+
## Authorization server metadata
|
|
24
|
+
|
|
25
|
+
Advertise:
|
|
26
|
+
|
|
27
|
+
- `authorization_endpoint`, `token_endpoint`
|
|
28
|
+
- `code_challenge_methods_supported`: `S256`
|
|
29
|
+
- `token_endpoint_auth_methods_supported` (CIMD: `none` and/or `private_key_jwt`)
|
|
30
|
+
- `client_id_metadata_document_supported`: `true` (preferred)
|
|
31
|
+
- `registration_endpoint` only if DCR remains required as fallback
|
|
32
|
+
|
|
33
|
+
Skip Microsoft Entra issuers for ChatGPT. Use the customer OAuth issuer.
|
|
34
|
+
|
|
35
|
+
## ChatGPT-owned remaining steps
|
|
36
|
+
|
|
37
|
+
Create with logo (ChatGPT does not let you change the logo after create), risk acknowledgement, Publish, Show in directory, Connect. No AI Fabrix branding SSOT for the ChatGPT logo.
|
|
38
|
+
|
|
39
|
+
## Callbacks
|
|
40
|
+
|
|
41
|
+
With CIMD/DCR, ChatGPT's callback URI is part of client registration. Known hardcoded ChatGPT callback URLs are a compatibility patch for user-defined OAuth clients only.
|
|
42
|
+
|
|
43
|
+
## Client secret
|
|
44
|
+
|
|
45
|
+
Do not rotate on `channel add` or `--force`. Rotate only when ChatGPT still uses a confidential predefined client and the one-time secret is lost:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
aifabrix integration-client rotate-secret --id <id>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Never write secrets into `dist/`, INSTALL, or logs.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"key": "chatgpt",
|
|
3
|
+
"displayName": "ChatGPT",
|
|
4
|
+
"description": "Connect ChatGPT as a custom MCP app for employees.",
|
|
5
|
+
"type": "custom",
|
|
6
|
+
"systemKind": "communication",
|
|
7
|
+
"enabled": true,
|
|
8
|
+
"authentication": {
|
|
9
|
+
"authType": "system"
|
|
10
|
+
},
|
|
11
|
+
"configuration": [
|
|
12
|
+
{
|
|
13
|
+
"name": "CHANNEL_APP_DESCRIPTION",
|
|
14
|
+
"value": "Enterprise AI assistant for employees. Approved assistants, enterprise knowledge, workflows, and governed actions via AI Fabrix.",
|
|
15
|
+
"location": "variable",
|
|
16
|
+
"required": false,
|
|
17
|
+
"portalInput": {
|
|
18
|
+
"field": "textarea",
|
|
19
|
+
"label": "Description",
|
|
20
|
+
"placeholder": "Shown to people who connect this app",
|
|
21
|
+
"validation": {
|
|
22
|
+
"maxLength": 4000
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"dataSources": [],
|
|
28
|
+
"endpointsActive": false,
|
|
29
|
+
"channel": {
|
|
30
|
+
"definitionKey": "chatgpt",
|
|
31
|
+
"provisioning": {
|
|
32
|
+
"mode": "guided"
|
|
33
|
+
},
|
|
34
|
+
"runtimeTarget": {
|
|
35
|
+
"defaultSystemKey": "runtime-orchestration",
|
|
36
|
+
"configurable": true
|
|
37
|
+
},
|
|
38
|
+
"experimental": false,
|
|
39
|
+
"profiles": [],
|
|
40
|
+
"packaging": {
|
|
41
|
+
"channelType": "chatgpt",
|
|
42
|
+
"templateDir": "chatgpt",
|
|
43
|
+
"artifactFileName": "channel-chatgpt.json",
|
|
44
|
+
"artifactFormat": "json",
|
|
45
|
+
"credentialKey": "chatgpt-channel",
|
|
46
|
+
"capabilities": [
|
|
47
|
+
"chat",
|
|
48
|
+
"enterpriseActions"
|
|
49
|
+
],
|
|
50
|
+
"displayLabel": "ChatGPT",
|
|
51
|
+
"category": "employee-ai",
|
|
52
|
+
"wizardOrder": 30,
|
|
53
|
+
"remainingManualStep": "Add the logo when you create the ChatGPT app. You cannot change it later. Then publish and connect.",
|
|
54
|
+
"docsAnchor": "chatgpt",
|
|
55
|
+
"approvalRequired": true,
|
|
56
|
+
"vendorAuthRequired": true
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>OpenAI</title><path d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"/></svg>
|
|
@@ -1,104 +1,29 @@
|
|
|
1
|
-
# {{
|
|
1
|
+
# {{baseName}} — ChatGPT
|
|
2
2
|
|
|
3
|
-
{{
|
|
3
|
+
Status: {{#if installReady}}Ready{{else}}Not ready{{/if}}
|
|
4
|
+
{{#unless installReady}}
|
|
5
|
+
Reason: {{discoveryBlockerLabel}}
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
**AI Fabrix credential reference:** `{{credentialKey}}`
|
|
7
|
+
Fix the Runtime connection, then run:
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
aifabrix channel add chatgpt --name "{{baseName}}"
|
|
10
|
+
{{/unless}}
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
When ready:
|
|
11
13
|
|
|
12
|
-
1.
|
|
13
|
-
|
|
14
|
-
- **Business:** **Workspace settings → Apps → Create**, or **Settings → Apps → Advanced settings**.
|
|
15
|
-
- **Enterprise/Edu:** grant the appropriate Developer mode permission under **Workspace settings → Permissions & roles → Connected data**, then enable it under **Settings → Apps → Advanced settings**.
|
|
16
|
-
3. Open **Settings → Apps → Create** (or the equivalent **Workspace settings → Apps → Create** entry).
|
|
17
|
-
4. Enter the app name `{{appName}}` and the remote MCP URL shown under **Runtime connection** below.
|
|
18
|
-
5. Select **OAuth** as the authentication mechanism. Do not configure a custom API key in ChatGPT; custom API-key authentication is not supported for a remote custom MCP app.
|
|
19
|
-
6. Select **Scan tools**. If prompted, complete the OAuth authorization flow and wait for ChatGPT to finish scanning the Runtime tool list.
|
|
20
|
-
7. Review the discovered tools and create the app as a draft.
|
|
21
|
-
8. Test representative read and write workflows. Confirm that user authorization and action confirmations behave as expected.
|
|
22
|
-
9. Publish the app to the workspace and configure its access and action controls. Only workspace admins or owners can publish it.
|
|
23
|
-
10. After MCP tool names, schemas, annotations, or authentication metadata change, use **Refresh** in the app's action controls and review the changes before enabling them.
|
|
14
|
+
1. Open ChatGPT Apps:
|
|
15
|
+
{{{chatgptAppsCreateUrl}}}
|
|
24
16
|
|
|
25
|
-
|
|
17
|
+
2. Create the app with:
|
|
18
|
+
Name: {{appName}}
|
|
19
|
+
Description: {{appDescription}}
|
|
20
|
+
Server URL: {{{mcpUrl}}}
|
|
21
|
+
Authentication: OAuth
|
|
22
|
+
Logo: add it now. ChatGPT does not let you change the logo after create.
|
|
26
23
|
|
|
27
|
-
|
|
24
|
+
3. If ChatGPT shows a callback URL that is not already registered:
|
|
25
|
+
aifabrix channel configure chatgpt --callback-url "<callback-url>"
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
{{#if mcpUrl}}
|
|
31
|
-
- **Remote MCP URL:** `{{{mcpUrl}}}`
|
|
32
|
-
{{/if}}
|
|
33
|
-
- **Runtime system key:** `{{runtimeSystemKey}}`
|
|
34
|
-
- **Transport:** Streamable HTTP
|
|
35
|
-
- **Authentication:** OAuth 2.1 authorization-code flow with PKCE (`S256`)
|
|
36
|
-
- **AI Fabrix credential reference:** `{{credentialKey}}`
|
|
37
|
-
- **AI Fabrix authentication settings:** [Open authentication settings]({{{credentialPortalUrl}}})
|
|
27
|
+
4. Publish and connect the app.
|
|
38
28
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
## OAuth requirements
|
|
42
|
-
|
|
43
|
-
Before ChatGPT can connect successfully, the MCP deployment must meet all of these requirements:
|
|
44
|
-
|
|
45
|
-
- The MCP endpoint is reachable over public HTTPS with a publicly trusted TLS certificate chain.
|
|
46
|
-
- The MCP server publishes OAuth protected-resource metadata, normally at `/.well-known/oauth-protected-resource`, or points to it in the `WWW-Authenticate` header returned with a `401 Unauthorized` response.
|
|
47
|
-
- The protected-resource document identifies the canonical resource URL, authorization server, and supported scopes.
|
|
48
|
-
- The authorization server publishes OAuth or OpenID Connect discovery metadata.
|
|
49
|
-
- The authorization server supports the authorization-code flow and PKCE with `S256`.
|
|
50
|
-
- The OAuth flow preserves the MCP `resource` parameter, and issued access tokens contain the expected audience and scopes.
|
|
51
|
-
- The redirect URI shown by ChatGPT when the app is created is allowlisted in the authorization server.
|
|
52
|
-
- The MCP server validates every access token's signature, issuer, audience, expiry, and scopes.
|
|
53
|
-
- Each authenticated MCP tool declares an `oauth2` security scheme with the scopes it needs.
|
|
54
|
-
|
|
55
|
-
If this development endpoint is deliberately anonymous, select **No authentication** instead and declare `noauth` on the applicable tools. Do not describe the app as “OAuth or API key”; the selected mechanism must match the behavior advertised by the MCP server.
|
|
56
|
-
|
|
57
|
-
## Expected governed tools
|
|
58
|
-
|
|
59
|
-
ChatGPT should discover the following tools from the live MCP server during **Scan tools**:
|
|
60
|
-
|
|
61
|
-
{{#each layerBToolNames}}
|
|
62
|
-
- `{{this}}`
|
|
63
|
-
{{/each}}
|
|
64
|
-
|
|
65
|
-
{{#if installReady}}Install ready: yes{{else}}Install ready: no{{#if discoveryBlocker}} ({{discoveryBlocker}}){{/if}}{{/if}}
|
|
66
|
-
|
|
67
|
-
The live server response is authoritative. This list is an expected deployment contract from External AI Discovery, not a substitute for MCP tool discovery.
|
|
68
|
-
|
|
69
|
-
## Runtime and Role Assistant boundaries
|
|
70
|
-
|
|
71
|
-
- Runtime resolves assistants dynamically for the current user from `{{{assistantCatalogUrl}}}`.
|
|
72
|
-
- ChatGPT's top-level tool surface remains limited to the governed tools listed above.
|
|
73
|
-
- Evidence authoring remains an internal Business Transformation Assistant capability. It is reached through `ChatGPT → runtime-orchestration → Business Transformation Assistant → internal evidence capabilities` and is not exposed as a top-level ChatGPT tool.
|
|
74
|
-
- One authenticated Runtime connection can support multiple Role Assistants, subject to the current user's authorization.
|
|
75
|
-
|
|
76
|
-
## BTA evidence-authoring proof scenario
|
|
77
|
-
|
|
78
|
-
Use this scenario to verify the ChatGPT → Runtime → BTA path without exposing Evidence commands as top-level ChatGPT tools:
|
|
79
|
-
|
|
80
|
-
1. Ask {{baseName}} to improve an existing Role Assistant from process documentation.
|
|
81
|
-
2. Confirm that {{baseName}} starts or continues Business Transformation Assistant work through Runtime.
|
|
82
|
-
3. Confirm that BTA performs evidence metadata, download, upload, and reasoning operations internally and presents certified proposals.
|
|
83
|
-
4. Approve selected proposals and confirm that activation remains an explicit human action.
|
|
84
|
-
|
|
85
|
-
## AI Fabrix validation
|
|
86
|
-
|
|
87
|
-
Before workspace publication, validate the live Streamable HTTP endpoint with MCP Inspector and confirm that initialization, tool discovery, representative calls, invalid inputs, OAuth challenges, and authorization checks all work.
|
|
88
|
-
|
|
89
|
-
Then run the AI Fabrix probe:
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
aifabrix channel add {{channelTarget}} --name "{{baseName}}" --probe
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
The probe should validate Runtime through the first-party MCP gateway, including governed tool discovery and BTA Evidence-authoring reachability. A successful AI Fabrix probe does not replace ChatGPT's own **Scan tools**, OAuth, and workspace publication checks.
|
|
96
|
-
|
|
97
|
-
Use `--force` only to regenerate artifacts and patch channel metadata. It does not rotate credentials.
|
|
98
|
-
|
|
99
|
-
## Current validation status
|
|
100
|
-
|
|
101
|
-
- Local artifact validation: complete
|
|
102
|
-
- Live Runtime validation: pending
|
|
103
|
-
- ChatGPT workspace tool scan: pending
|
|
104
|
-
- ChatGPT workspace publication: requires a workspace admin or owner
|
|
29
|
+
AI Fabrix validates Runtime and OAuth automatically.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"app": {
|
|
3
3
|
"key": "chatgpt",
|
|
4
|
-
"displayName": "ChatGPT
|
|
5
|
-
"description": "
|
|
4
|
+
"displayName": "ChatGPT",
|
|
5
|
+
"description": "Connect ChatGPT as a custom MCP app for employees.",
|
|
6
6
|
"type": "external"
|
|
7
7
|
},
|
|
8
8
|
"externalIntegration": {
|
|
@@ -1,14 +1,59 @@
|
|
|
1
1
|
{
|
|
2
2
|
"key": "chatgpt",
|
|
3
|
-
"displayName": "ChatGPT
|
|
4
|
-
"description": "
|
|
3
|
+
"displayName": "ChatGPT",
|
|
4
|
+
"description": "Connect ChatGPT as a custom MCP app for employees.",
|
|
5
5
|
"type": "custom",
|
|
6
6
|
"systemKind": "communication",
|
|
7
7
|
"enabled": true,
|
|
8
8
|
"authentication": {
|
|
9
9
|
"authType": "system"
|
|
10
10
|
},
|
|
11
|
-
"configuration": [
|
|
11
|
+
"configuration": [
|
|
12
|
+
{
|
|
13
|
+
"name": "CHANNEL_APP_DESCRIPTION",
|
|
14
|
+
"value": "Enterprise AI assistant for employees. Approved assistants, enterprise knowledge, workflows, and governed actions via AI Fabrix.",
|
|
15
|
+
"location": "variable",
|
|
16
|
+
"required": false,
|
|
17
|
+
"portalInput": {
|
|
18
|
+
"field": "textarea",
|
|
19
|
+
"label": "Description",
|
|
20
|
+
"placeholder": "Shown to people who connect this app",
|
|
21
|
+
"validation": {
|
|
22
|
+
"maxLength": 4000
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
],
|
|
12
27
|
"dataSources": [],
|
|
13
|
-
"endpointsActive": false
|
|
28
|
+
"endpointsActive": false,
|
|
29
|
+
"channel": {
|
|
30
|
+
"definitionKey": "chatgpt",
|
|
31
|
+
"provisioning": {
|
|
32
|
+
"mode": "guided"
|
|
33
|
+
},
|
|
34
|
+
"runtimeTarget": {
|
|
35
|
+
"defaultSystemKey": "runtime-orchestration",
|
|
36
|
+
"configurable": true
|
|
37
|
+
},
|
|
38
|
+
"experimental": false,
|
|
39
|
+
"profiles": [],
|
|
40
|
+
"packaging": {
|
|
41
|
+
"channelType": "chatgpt",
|
|
42
|
+
"templateDir": "chatgpt",
|
|
43
|
+
"artifactFileName": "channel-chatgpt.json",
|
|
44
|
+
"artifactFormat": "json",
|
|
45
|
+
"credentialKey": "chatgpt-channel",
|
|
46
|
+
"capabilities": [
|
|
47
|
+
"chat",
|
|
48
|
+
"enterpriseActions"
|
|
49
|
+
],
|
|
50
|
+
"displayLabel": "ChatGPT",
|
|
51
|
+
"category": "employee-ai",
|
|
52
|
+
"wizardOrder": 30,
|
|
53
|
+
"remainingManualStep": "Add the logo when you create the ChatGPT app. You cannot change it later. Then publish and connect.",
|
|
54
|
+
"docsAnchor": "chatgpt",
|
|
55
|
+
"approvalRequired": true,
|
|
56
|
+
"vendorAuthRequired": true
|
|
57
|
+
}
|
|
58
|
+
}
|
|
14
59
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"roles": [
|
|
3
|
+
{
|
|
4
|
+
"name": "Everyone",
|
|
5
|
+
"value": "aifabrix-everyone",
|
|
6
|
+
"description": "Authenticated-user consume access for Enterprise LLM and platform search (not a Role Assistant)",
|
|
7
|
+
"groups": [
|
|
8
|
+
"AI-Fabrix-Everyone"
|
|
9
|
+
]
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"permissions": []
|
|
13
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Claude channel — Runtime and OAuth reference
|
|
2
|
+
|
|
3
|
+
Customer `INSTALL.md` is a short status/instruction artifact. This file is the operator/debug reference. Do not copy this content into generated install help.
|
|
4
|
+
|
|
5
|
+
## Desired contract (describe, don't configure)
|
|
6
|
+
|
|
7
|
+
When Claude is activated, AI Fabrix must be self-describing enough that Claude only needs:
|
|
8
|
+
|
|
9
|
+
- Name
|
|
10
|
+
- Server URL (Runtime MCP)
|
|
11
|
+
|
|
12
|
+
Claude then discovers protected-resource metadata, the authorization server, scopes, PKCE `S256`, and client registration. Pre-created `miso-claude` copy-paste is the fallback when discovery does not advertise registration.
|
|
13
|
+
|
|
14
|
+
Public Anthropic connector auth: https://claude.com/docs/connectors/building/authentication
|
|
15
|
+
|
|
16
|
+
## Runtime MCP
|
|
17
|
+
|
|
18
|
+
- HTTPS Streamable HTTP at the Runtime orchestration MCP URL
|
|
19
|
+
- RFC 9728 protected-resource metadata
|
|
20
|
+
- `resource` echoed through authorize/token; access token audience must match
|
|
21
|
+
- The MCP URL must be reachable from Anthropic cloud (not localhost)
|
|
22
|
+
|
|
23
|
+
## Hosted Claude surfaces
|
|
24
|
+
|
|
25
|
+
Claude.ai web, Claude Desktop, Cowork, and mobile use the same account-level custom connector. Remote MCP is brokered by Anthropic, not by a local `claude_desktop_config.json`.
|
|
26
|
+
|
|
27
|
+
## Claude-owned remaining steps
|
|
28
|
+
|
|
29
|
+
Add the custom connector (Owners on Team or Enterprise), authenticate/consent, and enable it. There is no documented Anthropic API for those steps.
|
|
30
|
+
|
|
31
|
+
## Callbacks
|
|
32
|
+
|
|
33
|
+
Hosted Claude surfaces use `https://claude.ai/api/mcp/auth_callback`. Register extra HTTPS callbacks with:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
aifabrix channel configure claude --callback-url "<callback-url>"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Client secret
|
|
40
|
+
|
|
41
|
+
Do not rotate on `channel add` or `--force`. Never write secrets into `dist/`, INSTALL, or logs.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"key": "claude",
|
|
3
|
+
"displayName": "Claude",
|
|
4
|
+
"description": "Connect Claude as a custom remote MCP connector for employees.",
|
|
5
|
+
"type": "custom",
|
|
6
|
+
"systemKind": "communication",
|
|
7
|
+
"enabled": true,
|
|
8
|
+
"authentication": {
|
|
9
|
+
"authType": "system"
|
|
10
|
+
},
|
|
11
|
+
"configuration": [
|
|
12
|
+
{
|
|
13
|
+
"name": "CHANNEL_APP_DESCRIPTION",
|
|
14
|
+
"value": "Enterprise AI assistant for employees. Approved assistants, enterprise knowledge, workflows, and governed actions via AI Fabrix.",
|
|
15
|
+
"location": "variable",
|
|
16
|
+
"required": false,
|
|
17
|
+
"portalInput": {
|
|
18
|
+
"field": "textarea",
|
|
19
|
+
"label": "Description",
|
|
20
|
+
"placeholder": "Shown to people who connect this app",
|
|
21
|
+
"validation": {
|
|
22
|
+
"maxLength": 4000
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"dataSources": [],
|
|
28
|
+
"endpointsActive": false,
|
|
29
|
+
"channel": {
|
|
30
|
+
"definitionKey": "claude",
|
|
31
|
+
"provisioning": {
|
|
32
|
+
"mode": "guided"
|
|
33
|
+
},
|
|
34
|
+
"runtimeTarget": {
|
|
35
|
+
"defaultSystemKey": "runtime-orchestration",
|
|
36
|
+
"configurable": true
|
|
37
|
+
},
|
|
38
|
+
"experimental": false,
|
|
39
|
+
"profiles": [],
|
|
40
|
+
"packaging": {
|
|
41
|
+
"channelType": "claude",
|
|
42
|
+
"templateDir": "claude",
|
|
43
|
+
"artifactFileName": "channel-claude.json",
|
|
44
|
+
"artifactFormat": "json",
|
|
45
|
+
"credentialKey": "claude-channel",
|
|
46
|
+
"capabilities": [
|
|
47
|
+
"chat",
|
|
48
|
+
"enterpriseActions"
|
|
49
|
+
],
|
|
50
|
+
"displayLabel": "Claude",
|
|
51
|
+
"category": "employee-ai",
|
|
52
|
+
"wizardOrder": 32,
|
|
53
|
+
"remainingManualStep": "Add the custom connector (Owners for Team or Enterprise), authenticate, and enable it.",
|
|
54
|
+
"docsAnchor": "claude",
|
|
55
|
+
"approvalRequired": true,
|
|
56
|
+
"vendorAuthRequired": true
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Anthropic</title><path d="M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z"/></svg>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# {{baseName}} — Claude
|
|
2
|
+
|
|
3
|
+
Status: {{#if installReady}}Ready{{else}}Not ready{{/if}}
|
|
4
|
+
{{#unless installReady}}
|
|
5
|
+
Reason: {{discoveryBlockerLabel}}
|
|
6
|
+
|
|
7
|
+
Fix the Runtime connection, then run:
|
|
8
|
+
|
|
9
|
+
aifabrix channel add claude --name "{{baseName}}"
|
|
10
|
+
{{/unless}}
|
|
11
|
+
|
|
12
|
+
When ready:
|
|
13
|
+
|
|
14
|
+
1. Open Claude connectors:
|
|
15
|
+
{{{claudeConnectorsUrl}}}
|
|
16
|
+
|
|
17
|
+
2. Add a custom connector with:
|
|
18
|
+
Name: {{appName}}
|
|
19
|
+
Server URL: {{{mcpUrl}}}
|
|
20
|
+
|
|
21
|
+
AI Fabrix validates Runtime and OAuth automatically.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Claude
|
|
2
|
+
|
|
3
|
+
Generated by `aifabrix channel scaffold claude`.
|
|
4
|
+
|
|
5
|
+
Recommended flow:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
aifabrix channel add claude --name "Your Assistant" --probe
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
`channel add` scaffolds (if needed), uploads when missing (always with `--force`), then
|
|
12
|
+
generates `dist/channels/claude/channel-claude.json` and `INSTALL.md`. Those files are
|
|
13
|
+
deployment references for workspace admins: Claude connects to the remote Runtime MCP URL
|
|
14
|
+
(OAuth) and discovers tools; it does not install the JSON as a plugin archive.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"app": {
|
|
3
|
+
"key": "claude",
|
|
4
|
+
"displayName": "Claude",
|
|
5
|
+
"description": "Connect Claude as a custom remote MCP connector for employees.",
|
|
6
|
+
"type": "external"
|
|
7
|
+
},
|
|
8
|
+
"externalIntegration": {
|
|
9
|
+
"schemaBasePath": "./",
|
|
10
|
+
"systems": ["claude-system.json"],
|
|
11
|
+
"dataSources": [],
|
|
12
|
+
"autopublish": true,
|
|
13
|
+
"version": "1.0.0"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"key": "claude",
|
|
3
|
+
"displayName": "Claude",
|
|
4
|
+
"description": "Connect Claude as a custom remote MCP connector for employees.",
|
|
5
|
+
"type": "custom",
|
|
6
|
+
"systemKind": "communication",
|
|
7
|
+
"enabled": true,
|
|
8
|
+
"authentication": {
|
|
9
|
+
"authType": "system"
|
|
10
|
+
},
|
|
11
|
+
"configuration": [
|
|
12
|
+
{
|
|
13
|
+
"name": "CHANNEL_APP_DESCRIPTION",
|
|
14
|
+
"value": "Enterprise AI assistant for employees. Approved assistants, enterprise knowledge, workflows, and governed actions via AI Fabrix.",
|
|
15
|
+
"location": "variable",
|
|
16
|
+
"required": false,
|
|
17
|
+
"portalInput": {
|
|
18
|
+
"field": "textarea",
|
|
19
|
+
"label": "Description",
|
|
20
|
+
"placeholder": "Shown to people who connect this app",
|
|
21
|
+
"validation": {
|
|
22
|
+
"maxLength": 4000
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"dataSources": [],
|
|
28
|
+
"endpointsActive": false,
|
|
29
|
+
"channel": {
|
|
30
|
+
"definitionKey": "claude",
|
|
31
|
+
"provisioning": {
|
|
32
|
+
"mode": "guided"
|
|
33
|
+
},
|
|
34
|
+
"runtimeTarget": {
|
|
35
|
+
"defaultSystemKey": "runtime-orchestration",
|
|
36
|
+
"configurable": true
|
|
37
|
+
},
|
|
38
|
+
"experimental": false,
|
|
39
|
+
"profiles": [],
|
|
40
|
+
"packaging": {
|
|
41
|
+
"channelType": "claude",
|
|
42
|
+
"templateDir": "claude",
|
|
43
|
+
"artifactFileName": "channel-claude.json",
|
|
44
|
+
"artifactFormat": "json",
|
|
45
|
+
"credentialKey": "claude-channel",
|
|
46
|
+
"capabilities": [
|
|
47
|
+
"chat",
|
|
48
|
+
"enterpriseActions"
|
|
49
|
+
],
|
|
50
|
+
"displayLabel": "Claude",
|
|
51
|
+
"category": "employee-ai",
|
|
52
|
+
"wizardOrder": 32,
|
|
53
|
+
"remainingManualStep": "Add the custom connector (Owners for Team or Enterprise), authenticate, and enable it.",
|
|
54
|
+
"docsAnchor": "claude",
|
|
55
|
+
"approvalRequired": true,
|
|
56
|
+
"vendorAuthRequired": true
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|