@aifabrix/builder 2.53.1 → 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.
Files changed (321) hide show
  1. package/bin/aifabrix.js +2 -2
  2. package/lib/api/assistants.api.js +8 -5
  3. package/lib/api/channel-identity.api.js +41 -0
  4. package/lib/api/evidence-authoring.api.js +5 -1
  5. package/lib/api/evidence.api.js +2 -0
  6. package/lib/api/types/evidence.types.js +2 -0
  7. package/lib/api/work-search.api.js +136 -0
  8. package/lib/channels/add-channel.js +163 -126
  9. package/lib/channels/approval-guides/chatgpt.js +14 -18
  10. package/lib/channels/approval-guides/claude.js +29 -0
  11. package/lib/channels/approval-guides/index.js +88 -22
  12. package/lib/channels/approval-guides/mcp-client.js +27 -0
  13. package/lib/channels/approval-guides/microsoft-copilot.js +52 -3
  14. package/lib/channels/approval-guides/slack.js +10 -10
  15. package/lib/channels/approval-guides/teams-bot.js +8 -12
  16. package/lib/channels/channel-add-continuations.js +91 -0
  17. package/lib/channels/channel-add-ensure.js +124 -27
  18. package/lib/channels/channel-add-existing.js +160 -28
  19. package/lib/channels/channel-add-failure.js +60 -0
  20. package/lib/channels/channel-add-remaining.js +486 -0
  21. package/lib/channels/channel-add-tty.js +190 -0
  22. package/lib/channels/channel-add-wizard-config.js +138 -0
  23. package/lib/channels/channel-add-wizard.js +250 -0
  24. package/lib/channels/channel-artifact-generator.js +27 -13
  25. package/lib/channels/channel-cardinality.js +83 -0
  26. package/lib/channels/channel-catalog-icon.js +45 -0
  27. package/lib/channels/channel-cli-instructions.js +75 -0
  28. package/lib/channels/channel-configuration-map.js +213 -0
  29. package/lib/channels/channel-credential.js +11 -14
  30. package/lib/channels/channel-definition-project.js +101 -0
  31. package/lib/channels/channel-definition-registry.js +154 -0
  32. package/lib/channels/channel-description.js +59 -2
  33. package/lib/channels/channel-discovery.js +16 -2
  34. package/lib/channels/channel-external-system.js +86 -9
  35. package/lib/channels/channel-install-envelope-actions.js +88 -0
  36. package/lib/channels/channel-install-envelope-microsoft.js +155 -0
  37. package/lib/channels/channel-install-envelope.js +356 -0
  38. package/lib/channels/channel-install-help-md.js +172 -0
  39. package/lib/channels/channel-install-http-payload.js +62 -0
  40. package/lib/channels/channel-install-inventory.js +115 -0
  41. package/lib/channels/channel-install-profiles.js +90 -0
  42. package/lib/channels/channel-instance-collision.js +118 -0
  43. package/lib/channels/channel-instance-key.js +100 -0
  44. package/lib/channels/channel-instance-materialize.js +240 -0
  45. package/lib/channels/channel-integration-generator.js +16 -9
  46. package/lib/channels/channel-integration-template.js +101 -22
  47. package/lib/channels/channel-inventory-fetch.js +79 -0
  48. package/lib/channels/channel-oauth-preflight.js +104 -0
  49. package/lib/channels/channel-package-version.js +76 -0
  50. package/lib/channels/channel-predefined-client.js +154 -0
  51. package/lib/channels/channel-probe.js +7 -2
  52. package/lib/channels/channel-runtime-resolver.js +180 -72
  53. package/lib/channels/channel-status-display.js +86 -16
  54. package/lib/channels/channel-targets.js +106 -92
  55. package/lib/channels/chatgpt-callback.js +318 -0
  56. package/lib/channels/chatgpt-channel-add.js +229 -0
  57. package/lib/channels/chatgpt-preflight.js +396 -0
  58. package/lib/channels/chatgpt-runtime-contract.js +17 -0
  59. package/lib/channels/chatgpt-setup-values.js +124 -0
  60. package/lib/channels/claude-callback.js +67 -0
  61. package/lib/channels/claude-channel-add.js +254 -0
  62. package/lib/channels/claude-runtime-contract.js +40 -0
  63. package/lib/channels/claude-runtime.js +58 -0
  64. package/lib/channels/claude-setup-values.js +89 -0
  65. package/lib/channels/mcp-client/config-merge.js +148 -0
  66. package/lib/channels/mcp-client/ensure-client.js +231 -0
  67. package/lib/channels/mcp-client/paths.js +53 -0
  68. package/lib/channels/mcp-client/profiles.js +122 -0
  69. package/lib/channels/mcp-client/redirect-uris.js +99 -0
  70. package/lib/channels/mcp-client/runtime.js +59 -0
  71. package/lib/channels/mcp-client-channel-add.js +186 -0
  72. package/lib/channels/microsoft-copilot-channel-add.js +117 -7
  73. package/lib/channels/microsoft-copilot-entra-identifier-uris.js +187 -0
  74. package/lib/channels/microsoft-copilot-entra-sso-form.js +106 -18
  75. package/lib/channels/microsoft-copilot-entra-sso.js +31 -2
  76. package/lib/channels/microsoft-copilot-package-prior.js +107 -0
  77. package/lib/channels/microsoft-copilot-package.js +29 -28
  78. package/lib/channels/microsoft-provisioning/a365.js +80 -0
  79. package/lib/channels/microsoft-provisioning/auth-config.js +240 -0
  80. package/lib/channels/microsoft-provisioning/auth.js +179 -0
  81. package/lib/channels/microsoft-provisioning/cli.js +71 -0
  82. package/lib/channels/microsoft-provisioning/constants.js +75 -0
  83. package/lib/channels/microsoft-provisioning/errors.js +117 -0
  84. package/lib/channels/microsoft-provisioning/index.js +55 -0
  85. package/lib/channels/microsoft-provisioning/install-atk.js +158 -0
  86. package/lib/channels/microsoft-provisioning/install-teams.js +115 -0
  87. package/lib/channels/microsoft-provisioning/login-portal-device.js +236 -0
  88. package/lib/channels/microsoft-provisioning/login-portal-parse.js +71 -0
  89. package/lib/channels/microsoft-provisioning/login-portal-teams.js +193 -0
  90. package/lib/channels/microsoft-provisioning/login-portal.js +230 -0
  91. package/lib/channels/microsoft-provisioning/persist.js +110 -0
  92. package/lib/channels/microsoft-provisioning/teams-bot-args.js +119 -0
  93. package/lib/channels/microsoft-provisioning/teams-bot-controller.js +123 -0
  94. package/lib/channels/microsoft-provisioning/teams-bot-parse.js +134 -0
  95. package/lib/channels/microsoft-provisioning/teams-bot-persist.js +113 -0
  96. package/lib/channels/microsoft-provisioning/teams-bot-provision.js +234 -0
  97. package/lib/channels/microsoft-provisioning/teams-bot-secrets.js +45 -0
  98. package/lib/channels/microsoft-provisioning/teams-cli.js +82 -0
  99. package/lib/channels/runtime-tool-catalog.js +5 -2
  100. package/lib/channels/slack-channel-add-portal.js +130 -0
  101. package/lib/channels/slack-channel-add-tty-auth.js +95 -0
  102. package/lib/channels/slack-channel-add.js +258 -0
  103. package/lib/channels/slack-provisioning/apps.js +181 -0
  104. package/lib/channels/slack-provisioning/auth-store.js +110 -0
  105. package/lib/channels/slack-provisioning/auth-ticket.js +185 -0
  106. package/lib/channels/slack-provisioning/auth.js +115 -0
  107. package/lib/channels/slack-provisioning/callbacks.js +41 -0
  108. package/lib/channels/slack-provisioning/cli.js +226 -0
  109. package/lib/channels/slack-provisioning/constants.js +37 -0
  110. package/lib/channels/slack-provisioning/credentials.js +169 -0
  111. package/lib/channels/slack-provisioning/curl-shim.js +132 -0
  112. package/lib/channels/slack-provisioning/developer-install.js +118 -0
  113. package/lib/channels/slack-provisioning/env-file.js +120 -0
  114. package/lib/channels/slack-provisioning/errors.js +47 -0
  115. package/lib/channels/slack-provisioning/go-ca-bundle.js +137 -0
  116. package/lib/channels/slack-provisioning/index.js +250 -0
  117. package/lib/channels/slack-provisioning/install-cli.js +323 -0
  118. package/lib/channels/slack-provisioning/manifest.js +89 -0
  119. package/lib/channels/slack-provisioning/oauth-lock.js +33 -0
  120. package/lib/channels/slack-provisioning/offer-cli.js +113 -0
  121. package/lib/channels/slack-provisioning/onboard-members.js +122 -0
  122. package/lib/channels/slack-provisioning/onboard.js +89 -0
  123. package/lib/channels/slack-provisioning/persist.js +95 -0
  124. package/lib/channels/slack-provisioning/remaining-urls.js +158 -0
  125. package/lib/channels/slack-provisioning/with-curl-on-path.js +48 -0
  126. package/lib/channels/teams-bot-channel-add.js +94 -0
  127. package/lib/channels/vendor-dataplane-url.js +249 -0
  128. package/lib/cli/setup-certification.help.js +2 -0
  129. package/lib/cli/setup-external-system-help.js +2 -0
  130. package/lib/cli/setup-external-system.js +1 -1
  131. package/lib/commands/channel-add-help.js +366 -0
  132. package/lib/commands/channel-add-setup.js +162 -80
  133. package/lib/commands/channel-configure.js +118 -0
  134. package/lib/commands/channel.js +10 -1
  135. package/lib/commands/governance-upload-external.js +6 -3
  136. package/lib/commands/lifecycle-command-action.js +2 -5
  137. package/lib/commands/lifecycle-external.js +93 -21
  138. package/lib/commands/repair-datasource-test-payload.js +4 -2
  139. package/lib/commands/repair-datasource-webhooks-sync-bridge.js +23 -2
  140. package/lib/commands/repair-datasource.js +3 -0
  141. package/lib/commands/repair-external-run.js +59 -25
  142. package/lib/commands/repair-openapi-rest-runtime.js +127 -0
  143. package/lib/commands/repair-orchestration-tag-merge.js +339 -0
  144. package/lib/commands/repair-rbac-catalog-defaults.js +96 -0
  145. package/lib/commands/repair-rbac-platform-preset.js +26 -15
  146. package/lib/commands/repair-rbac-reader-roles.js +8 -21
  147. package/lib/commands/repair-rbac.js +10 -34
  148. package/lib/commands/repair-system-permissions.js +24 -22
  149. package/lib/commands/role-assistant-test-output.js +14 -0
  150. package/lib/commands/role-assistant.js +59 -21
  151. package/lib/commands/test-e2e-external.js +148 -21
  152. package/lib/commands/upload-credential-push-log.js +2 -1
  153. package/lib/commands/upload-publish-context.js +1 -1
  154. package/lib/commands/upload-role-assistant-shell.js +124 -0
  155. package/lib/commands/upload-sidecar-followups.js +6 -3
  156. package/lib/commands/upload.js +18 -3
  157. package/lib/core/secrets-docker-env.js +4 -1
  158. package/lib/core/secrets-env-content.js +17 -3
  159. package/lib/datasource/capability/capability-manifest.js +0 -3
  160. package/lib/datasource/capability/copy-test-payload.js +3 -0
  161. package/lib/external-system/deploy-helpers.js +26 -1
  162. package/lib/external-system/deploy.js +10 -6
  163. package/lib/external-system/download-helpers.js +29 -2
  164. package/lib/external-system/download-role-assistant.js +83 -4
  165. package/lib/external-system/download.js +40 -30
  166. package/lib/external-system/sync-deploy-manifest.js +3 -2
  167. package/lib/external-system/upload-identity.js +42 -0
  168. package/lib/generator/index.js +19 -15
  169. package/lib/generator/split.js +13 -2
  170. package/lib/lifecycle/role-assistant-governance.js +146 -0
  171. package/lib/lifecycle/scenario-upload.js +181 -30
  172. package/lib/programmatic/builder-api-cors.js +143 -0
  173. package/lib/programmatic/builder-api-request.js +6 -0
  174. package/lib/programmatic/builder-api-route-dispatch.js +56 -42
  175. package/lib/programmatic/builder-api-server.js +8 -1
  176. package/lib/programmatic/capability-registry.js +54 -0
  177. package/lib/programmatic/channel-install-help-resolve.js +359 -0
  178. package/lib/programmatic/channel-install-session.js +218 -0
  179. package/lib/programmatic/help-content/channel-onboarding.md +2 -0
  180. package/lib/programmatic/help-content/cip-overview.md +3 -1
  181. package/lib/programmatic/http-raw-response.js +62 -0
  182. package/lib/programmatic/openapi-channel-install-bindings.js +179 -0
  183. package/lib/programmatic/openapi-channel-install-schemas.js +286 -0
  184. package/lib/programmatic/openapi-component-schemas.js +18 -1
  185. package/lib/programmatic/openapi-description-enricher.js +3 -1
  186. package/lib/programmatic/openapi-descriptions.js +74 -3
  187. package/lib/programmatic/openapi-envelope-examples.js +117 -0
  188. package/lib/programmatic/openapi-operation-bindings.js +4 -1
  189. package/lib/programmatic/openapi-schema-descriptions-channel.js +316 -0
  190. package/lib/programmatic/openapi-spec.js +12 -8
  191. package/lib/programmatic/platform-rbac-catalog.js +36 -18
  192. package/lib/programmatic/route-handler-map.js +51 -1
  193. package/lib/programmatic/route-handlers-context.js +2 -1
  194. package/lib/programmatic/run-auth-permissions.js +54 -0
  195. package/lib/programmatic/run-channel-catalog.js +196 -0
  196. package/lib/programmatic/run-channel-install-artifacts.js +137 -0
  197. package/lib/programmatic/run-channel-install-copilot.js +353 -0
  198. package/lib/programmatic/run-channel-install-options.js +232 -0
  199. package/lib/programmatic/run-channel-install-teams-bot.js +204 -0
  200. package/lib/programmatic/run-channel-install.js +346 -0
  201. package/lib/programmatic/run-channel-package.js +87 -7
  202. package/lib/programmatic/workspace-context.js +2 -0
  203. package/lib/role-assistant/evidence-sync.js +4 -2
  204. package/lib/role-assistant/evidence-validation-issues.js +51 -0
  205. package/lib/role-assistant/knowledge-sync.js +10 -4
  206. package/lib/role-assistant/settings.js +49 -2
  207. package/lib/role-assistant/test-cases-evaluate.js +30 -2
  208. package/lib/role-assistant/test-cases-evidence.js +175 -0
  209. package/lib/role-assistant/test-cases-search.js +229 -0
  210. package/lib/role-assistant/test-cases.js +37 -4
  211. package/lib/role-assistant/test-runner-search.js +149 -0
  212. package/lib/role-assistant/test-runner-workhub-helpers.js +40 -2
  213. package/lib/role-assistant/test-runner-workhub-soft.js +9 -3
  214. package/lib/role-assistant/test-runner-workhub.js +29 -11
  215. package/lib/role-assistant/test-runner.js +16 -1
  216. package/lib/schema/external-datasource.schema.json +112 -18
  217. package/lib/schema/external-system.schema.json +159 -2
  218. package/lib/schema/mcp-client-profile.schema.json +103 -0
  219. package/lib/utils/app-path-resolve.js +4 -0
  220. package/lib/utils/authentication-env-template.js +44 -6
  221. package/lib/utils/credential-secrets-env.js +6 -1
  222. package/lib/utils/env-copy.js +19 -7
  223. package/lib/utils/external-env-template.js +20 -2
  224. package/lib/utils/paths.js +18 -1
  225. package/lib/utils/platform-shell-package.js +69 -0
  226. package/lib/utils/port-resolver.js +50 -1
  227. package/lib/utils/rewrite-name-flag.js +20 -0
  228. package/lib/utils/role-assistant-paths.js +13 -10
  229. package/lib/utils/schema-resolver.js +11 -1
  230. package/lib/utils/secrets-helpers.js +12 -21
  231. package/lib/utils/token-manager.js +10 -5
  232. package/lib/validation/validate.js +40 -0
  233. package/package.json +1 -1
  234. package/templates/README.md +1 -1
  235. package/templates/applications/builder-api/Dockerfile +1 -1
  236. package/templates/applications/builder-api/env.template +7 -0
  237. package/templates/applications/dataplane/application.yaml +6 -5
  238. package/templates/applications/dataplane/env.template +2 -2
  239. package/templates/applications/dataplane/rbac.yaml +7 -2
  240. package/templates/applications/keycloak/Dockerfile +30 -4
  241. package/templates/applications/keycloak/application.yaml +2 -2
  242. package/templates/applications/keycloak/cimd-lenient-parse/AbstractClientIdMetadataDocumentExecutor.java +896 -0
  243. package/templates/applications/keycloak/cimd-lenient-parse/SOURCE.md +19 -0
  244. package/templates/applications/keycloak/env.template +3 -0
  245. package/templates/applications/miso-controller/application.yaml +1 -2
  246. package/templates/applications/miso-controller/env.template +2 -0
  247. package/templates/channels/README.md +5 -5
  248. package/templates/channels/chatgpt/TROUBLESHOOTING.md +51 -0
  249. package/templates/channels/chatgpt/channel.json +59 -0
  250. package/templates/channels/chatgpt/icon.svg +1 -0
  251. package/templates/channels/chatgpt/install.template.md.hbs +20 -95
  252. package/templates/channels/chatgpt/integration/README.md +1 -1
  253. package/templates/channels/chatgpt/integration/application.json +2 -2
  254. package/templates/channels/chatgpt/integration/chatgpt-system.json +49 -4
  255. package/templates/channels/chatgpt/integration/env.template +2 -4
  256. package/templates/channels/chatgpt/integration/rbac.json +13 -0
  257. package/templates/channels/claude/TROUBLESHOOTING.md +41 -0
  258. package/templates/channels/claude/channel.json +59 -0
  259. package/templates/channels/claude/icon.svg +1 -0
  260. package/templates/channels/claude/install.template.md.hbs +21 -0
  261. package/templates/channels/claude/integration/README.md +14 -0
  262. package/templates/channels/claude/integration/application.json +15 -0
  263. package/templates/channels/claude/integration/claude-system.json +59 -0
  264. package/templates/channels/claude/integration/env.template +2 -0
  265. package/templates/channels/claude/integration/rbac.json +13 -0
  266. package/templates/channels/claude/manifest.template.json.hbs +40 -0
  267. package/templates/channels/mcp-client/channel.json +72 -0
  268. package/templates/channels/mcp-client/icon.svg +1 -0
  269. package/templates/channels/mcp-client/install.template.md.hbs +24 -0
  270. package/templates/channels/mcp-client/integration/README.md +13 -0
  271. package/templates/channels/mcp-client/integration/application.json +15 -0
  272. package/templates/channels/mcp-client/integration/env.template +2 -0
  273. package/templates/channels/mcp-client/integration/mcp-client-system.json +72 -0
  274. package/templates/channels/mcp-client/integration/rbac.json +13 -0
  275. package/templates/channels/mcp-client/manifest.template.json.hbs +41 -0
  276. package/templates/channels/mcp-client/profiles/cursor.json +26 -0
  277. package/templates/channels/mcp-client/profiles/github-copilot.json +29 -0
  278. package/templates/channels/mcp-client/profiles/vscode.json +29 -0
  279. package/templates/channels/microsoft-copilot/channel.json +73 -0
  280. package/templates/channels/microsoft-copilot/declarative-agent.template.json.hbs +8 -4
  281. package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +65 -5
  282. package/templates/channels/microsoft-copilot/icon.svg +1 -0
  283. package/templates/channels/microsoft-copilot/install.template.md.hbs +9 -9
  284. package/templates/channels/microsoft-copilot/integration/README.md +1 -1
  285. package/templates/channels/microsoft-copilot/integration/application.json +2 -2
  286. package/templates/channels/microsoft-copilot/integration/env.template +3 -6
  287. package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +63 -4
  288. package/templates/channels/microsoft-copilot/integration/rbac.json +13 -0
  289. package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +5 -5
  290. package/templates/channels/slack/channel.json +223 -0
  291. package/templates/channels/slack/icon.svg +1 -0
  292. package/templates/channels/slack/install.template.md.hbs +36 -28
  293. package/templates/channels/slack/integration/README.md +245 -22
  294. package/templates/channels/slack/integration/application.json +44 -7
  295. package/templates/channels/slack/integration/env.template +15 -6
  296. package/templates/channels/slack/integration/openapi/openapi.json +126 -0
  297. package/templates/channels/slack/integration/rbac.json +84 -0
  298. package/templates/channels/slack/integration/slack-datasource-commands.json +154 -0
  299. package/templates/channels/slack/integration/slack-datasource-conversations.json +28 -3
  300. package/templates/channels/slack/integration/slack-datasource-events.json +154 -0
  301. package/templates/channels/slack/integration/slack-datasource-interactive.json +154 -0
  302. package/templates/channels/slack/integration/slack-datasource-messages.json +40 -2
  303. package/templates/channels/slack/integration/slack-system.json +155 -77
  304. package/templates/channels/slack/manifest.template.json.hbs +5 -2
  305. package/templates/channels/teams-bot/channel.json +161 -0
  306. package/templates/channels/teams-bot/icon.svg +1 -0
  307. package/templates/channels/teams-bot/install.template.md.hbs +12 -13
  308. package/templates/channels/teams-bot/integration/README.md +5 -4
  309. package/templates/channels/teams-bot/integration/application.json +6 -4
  310. package/templates/channels/teams-bot/integration/env.template +5 -4
  311. package/templates/channels/teams-bot/integration/openapi/openapi.json +68 -0
  312. package/templates/channels/teams-bot/integration/rbac.json +21 -0
  313. package/templates/channels/teams-bot/integration/teams-bot-datasource-activities.json +154 -0
  314. package/templates/channels/teams-bot/integration/teams-bot-system.json +128 -23
  315. package/templates/channels/web-embed/channel.json +60 -0
  316. package/templates/channels/web-embed/install.template.md.hbs +1 -1
  317. package/templates/channels/web-embed/integration/README.md +2 -2
  318. package/templates/channels/web-embed/integration/application.json +2 -2
  319. package/templates/channels/web-embed/integration/env.template +1 -1
  320. package/templates/channels/web-embed/integration/rbac.json +13 -0
  321. 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.34'
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 | Publish |
8
- | --- | --- | --- |
9
- | **All channel targets** | `aifabrix-dataplane/integration/<target>/` | `make sync-json` in dataplane (copies manifests; **no** `*-deploy.json`) |
10
- | Targets | `slack`, `teams-bot`, `microsoft-copilot`, `chatgpt`, `web-embed` | See `CHANNEL_INTEGRATION_TARGETS` in dataplane `make/config.mk` |
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
- # {{appName}} — ChatGPT custom MCP app setup
1
+ # {{baseName}} — ChatGPT
2
2
 
3
- {{appDescription}}
3
+ Status: {{#if installReady}}Ready{{else}}Not ready{{/if}}
4
+ {{#unless installReady}}
5
+ Reason: {{discoveryBlockerLabel}}
4
6
 
5
- **Environment:** {{environment}}
6
- **AI Fabrix credential reference:** `{{credentialKey}}`
7
+ Fix the Runtime connection, then run:
7
8
 
8
- > This document and `dist/channels/chatgpt/channel-chatgpt.json` are deployment references for administrators. ChatGPT does not install the JSON file as a plugin archive. ChatGPT connects directly to the remote MCP endpoint and discovers the tools exposed by that server.
9
+ aifabrix channel add chatgpt --name "{{baseName}}"
10
+ {{/unless}}
9
11
 
10
- ## ChatGPT workspace setup
12
+ When ready:
11
13
 
12
- 1. Sign in to the ChatGPT web app as a workspace admin or owner.
13
- 2. Enable Developer mode for custom MCP apps:
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
- ## Runtime connection
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
- Configure the following values in the ChatGPT custom MCP app. Never place access tokens, client secrets, or API keys in generated files.
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
- - **App name:** `{{appName}}`
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
- The `{{credentialKey}}` value is an AI Fabrix credential reference. It is not a secret to paste into ChatGPT.
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,4 +1,4 @@
1
- # ChatGPT custom MCP app channel
1
+ # ChatGPT
2
2
 
3
3
  Generated by `aifabrix channel scaffold chatgpt`.
4
4
 
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "app": {
3
3
  "key": "chatgpt",
4
- "displayName": "ChatGPT custom MCP app channel",
5
- "description": "Assistant communication channel — deploy then channel add",
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 custom MCP app channel",
4
- "description": "Communication external system for ChatGPT custom MCP app onboarding",
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
  }
@@ -1,4 +1,2 @@
1
- # ChatGPT custom MCP app channel credential reference
2
- # aifabrix secret set chatgpt/apiKey "<value>" --shared
3
-
4
- KV_CHATGPT_APIKEY=kv://chatgpt/apiKey
1
+ # ChatGPT
2
+ # OAuth is the Integration Client on External Access — do not store API keys here.
@@ -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
+ }
@@ -0,0 +1,2 @@
1
+ # Claude
2
+ # OAuth is the Integration Client on External Access — do not store API keys here.