@aifabrix/builder 2.53.1 → 2.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. package/README.md +8 -0
  2. package/bin/aifabrix.js +2 -2
  3. package/lib/agent-kit/apply-ops.js +82 -0
  4. package/lib/agent-kit/checksums.js +28 -0
  5. package/lib/agent-kit/classify.js +113 -0
  6. package/lib/agent-kit/claude-shim.js +61 -0
  7. package/lib/agent-kit/constants.js +55 -0
  8. package/lib/agent-kit/file-list.js +103 -0
  9. package/lib/agent-kit/host-approve.js +130 -0
  10. package/lib/agent-kit/hosting/github.js +63 -0
  11. package/lib/agent-kit/hosts.js +71 -0
  12. package/lib/agent-kit/init.js +319 -0
  13. package/lib/agent-kit/kit-root.js +17 -0
  14. package/lib/agent-kit/managed-section.js +79 -0
  15. package/lib/agent-kit/package-load.js +45 -0
  16. package/lib/agent-kit/plan-ops.js +69 -0
  17. package/lib/agent-kit/remote-prompts.js +239 -0
  18. package/lib/agent-kit/render-host-markdown.js +40 -0
  19. package/lib/agent-kit/repo-guard.js +47 -0
  20. package/lib/agent-kit/report.js +107 -0
  21. package/lib/agent-kit/run.js +82 -0
  22. package/lib/agent-kit/scm/git.js +122 -0
  23. package/lib/agent-kit/state-file.js +83 -0
  24. package/lib/agent-kit/status.js +50 -0
  25. package/lib/agent-kit/v1-detect.js +81 -0
  26. package/lib/agent-kit/validate-kit.js +87 -0
  27. package/lib/agent-kit/workspace-name.js +40 -0
  28. package/lib/agent-kit/workspace-skeleton.js +103 -0
  29. package/lib/api/assistants.api.js +8 -5
  30. package/lib/api/channel-identity.api.js +41 -0
  31. package/lib/api/evidence-authoring.api.js +5 -1
  32. package/lib/api/evidence.api.js +2 -0
  33. package/lib/api/role-assistant-test-pack.api.js +86 -0
  34. package/lib/api/types/evidence.types.js +2 -0
  35. package/lib/api/work-search.api.js +163 -0
  36. package/lib/api/work.api.js +19 -12
  37. package/lib/app/list-external-systems.js +2 -1
  38. package/lib/app/show-display.js +33 -6
  39. package/lib/app/show.js +25 -2
  40. package/lib/channels/add-channel.js +164 -126
  41. package/lib/channels/approval-guides/chatgpt.js +14 -18
  42. package/lib/channels/approval-guides/claude.js +29 -0
  43. package/lib/channels/approval-guides/index.js +88 -22
  44. package/lib/channels/approval-guides/mcp-client.js +27 -0
  45. package/lib/channels/approval-guides/microsoft-copilot.js +52 -3
  46. package/lib/channels/approval-guides/slack.js +10 -10
  47. package/lib/channels/approval-guides/teams-bot.js +8 -12
  48. package/lib/channels/channel-add-continuations.js +91 -0
  49. package/lib/channels/channel-add-ensure.js +124 -27
  50. package/lib/channels/channel-add-existing.js +160 -28
  51. package/lib/channels/channel-add-failure.js +61 -0
  52. package/lib/channels/channel-add-remaining.js +492 -0
  53. package/lib/channels/channel-add-tty.js +190 -0
  54. package/lib/channels/channel-add-wizard-config.js +138 -0
  55. package/lib/channels/channel-add-wizard.js +250 -0
  56. package/lib/channels/channel-artifact-generator.js +27 -13
  57. package/lib/channels/channel-cardinality.js +83 -0
  58. package/lib/channels/channel-catalog-icon.js +45 -0
  59. package/lib/channels/channel-cli-instructions.js +75 -0
  60. package/lib/channels/channel-configuration-map.js +213 -0
  61. package/lib/channels/channel-credential.js +11 -14
  62. package/lib/channels/channel-definition-project.js +101 -0
  63. package/lib/channels/channel-definition-registry.js +154 -0
  64. package/lib/channels/channel-definition-status.js +115 -0
  65. package/lib/channels/channel-description.js +60 -2
  66. package/lib/channels/channel-discovery.js +16 -2
  67. package/lib/channels/channel-external-system.js +86 -9
  68. package/lib/channels/channel-install-envelope-actions.js +88 -0
  69. package/lib/channels/channel-install-envelope-microsoft.js +155 -0
  70. package/lib/channels/channel-install-envelope.js +358 -0
  71. package/lib/channels/channel-install-help-md.js +172 -0
  72. package/lib/channels/channel-install-http-payload.js +62 -0
  73. package/lib/channels/channel-install-inventory.js +115 -0
  74. package/lib/channels/channel-install-profiles.js +90 -0
  75. package/lib/channels/channel-instance-collision.js +118 -0
  76. package/lib/channels/channel-instance-key.js +100 -0
  77. package/lib/channels/channel-instance-materialize.js +240 -0
  78. package/lib/channels/channel-integration-generator.js +18 -9
  79. package/lib/channels/channel-integration-template.js +101 -22
  80. package/lib/channels/channel-inventory-fetch.js +79 -0
  81. package/lib/channels/channel-oauth-preflight.js +104 -0
  82. package/lib/channels/channel-package-version.js +76 -0
  83. package/lib/channels/channel-predefined-client.js +154 -0
  84. package/lib/channels/channel-probe.js +7 -2
  85. package/lib/channels/channel-runtime-resolver.js +194 -72
  86. package/lib/channels/channel-status-display.js +86 -16
  87. package/lib/channels/channel-targets.js +132 -92
  88. package/lib/channels/chatgpt-callback.js +318 -0
  89. package/lib/channels/chatgpt-channel-add.js +229 -0
  90. package/lib/channels/chatgpt-preflight.js +396 -0
  91. package/lib/channels/chatgpt-runtime-contract.js +17 -0
  92. package/lib/channels/chatgpt-setup-values.js +124 -0
  93. package/lib/channels/claude-callback.js +67 -0
  94. package/lib/channels/claude-channel-add.js +254 -0
  95. package/lib/channels/claude-runtime-contract.js +40 -0
  96. package/lib/channels/claude-runtime.js +58 -0
  97. package/lib/channels/claude-setup-values.js +92 -0
  98. package/lib/channels/mcp-client/config-merge.js +148 -0
  99. package/lib/channels/mcp-client/ensure-client.js +231 -0
  100. package/lib/channels/mcp-client/paths.js +53 -0
  101. package/lib/channels/mcp-client/profiles.js +122 -0
  102. package/lib/channels/mcp-client/redirect-uris.js +99 -0
  103. package/lib/channels/mcp-client/runtime.js +59 -0
  104. package/lib/channels/mcp-client-channel-add.js +186 -0
  105. package/lib/channels/microsoft-copilot-channel-add.js +117 -7
  106. package/lib/channels/microsoft-copilot-entra-identifier-uris.js +187 -0
  107. package/lib/channels/microsoft-copilot-entra-sso-form.js +106 -18
  108. package/lib/channels/microsoft-copilot-entra-sso.js +31 -2
  109. package/lib/channels/microsoft-copilot-package-prior.js +107 -0
  110. package/lib/channels/microsoft-copilot-package.js +29 -28
  111. package/lib/channels/microsoft-provisioning/a365.js +80 -0
  112. package/lib/channels/microsoft-provisioning/auth-config.js +240 -0
  113. package/lib/channels/microsoft-provisioning/auth.js +179 -0
  114. package/lib/channels/microsoft-provisioning/cli.js +71 -0
  115. package/lib/channels/microsoft-provisioning/constants.js +75 -0
  116. package/lib/channels/microsoft-provisioning/errors.js +117 -0
  117. package/lib/channels/microsoft-provisioning/index.js +55 -0
  118. package/lib/channels/microsoft-provisioning/install-atk.js +158 -0
  119. package/lib/channels/microsoft-provisioning/install-teams.js +115 -0
  120. package/lib/channels/microsoft-provisioning/login-portal-device.js +236 -0
  121. package/lib/channels/microsoft-provisioning/login-portal-parse.js +71 -0
  122. package/lib/channels/microsoft-provisioning/login-portal-teams.js +193 -0
  123. package/lib/channels/microsoft-provisioning/login-portal.js +230 -0
  124. package/lib/channels/microsoft-provisioning/persist.js +110 -0
  125. package/lib/channels/microsoft-provisioning/teams-bot-args.js +119 -0
  126. package/lib/channels/microsoft-provisioning/teams-bot-controller.js +123 -0
  127. package/lib/channels/microsoft-provisioning/teams-bot-parse.js +134 -0
  128. package/lib/channels/microsoft-provisioning/teams-bot-persist.js +113 -0
  129. package/lib/channels/microsoft-provisioning/teams-bot-provision.js +234 -0
  130. package/lib/channels/microsoft-provisioning/teams-bot-secrets.js +45 -0
  131. package/lib/channels/microsoft-provisioning/teams-cli.js +82 -0
  132. package/lib/channels/runtime-tool-catalog.js +5 -2
  133. package/lib/channels/slack-channel-add-portal.js +130 -0
  134. package/lib/channels/slack-channel-add-tty-auth.js +95 -0
  135. package/lib/channels/slack-channel-add.js +311 -0
  136. package/lib/channels/slack-mcp-callback.js +51 -0
  137. package/lib/channels/slack-mcp-runtime.js +156 -0
  138. package/lib/channels/slack-provisioning/apps.js +181 -0
  139. package/lib/channels/slack-provisioning/auth-store.js +110 -0
  140. package/lib/channels/slack-provisioning/auth-ticket.js +185 -0
  141. package/lib/channels/slack-provisioning/auth.js +115 -0
  142. package/lib/channels/slack-provisioning/callbacks.js +41 -0
  143. package/lib/channels/slack-provisioning/cli.js +226 -0
  144. package/lib/channels/slack-provisioning/constants.js +37 -0
  145. package/lib/channels/slack-provisioning/credentials.js +169 -0
  146. package/lib/channels/slack-provisioning/curl-shim.js +132 -0
  147. package/lib/channels/slack-provisioning/developer-install.js +118 -0
  148. package/lib/channels/slack-provisioning/env-file.js +120 -0
  149. package/lib/channels/slack-provisioning/errors.js +47 -0
  150. package/lib/channels/slack-provisioning/go-ca-bundle.js +137 -0
  151. package/lib/channels/slack-provisioning/index.js +250 -0
  152. package/lib/channels/slack-provisioning/install-cli.js +335 -0
  153. package/lib/channels/slack-provisioning/manifest.js +89 -0
  154. package/lib/channels/slack-provisioning/oauth-lock.js +33 -0
  155. package/lib/channels/slack-provisioning/offer-cli.js +113 -0
  156. package/lib/channels/slack-provisioning/onboard-members.js +122 -0
  157. package/lib/channels/slack-provisioning/onboard.js +89 -0
  158. package/lib/channels/slack-provisioning/persist.js +95 -0
  159. package/lib/channels/slack-provisioning/remaining-urls.js +158 -0
  160. package/lib/channels/slack-provisioning/with-curl-on-path.js +53 -0
  161. package/lib/channels/teams-bot-channel-add.js +94 -0
  162. package/lib/channels/vendor-dataplane-url.js +249 -0
  163. package/lib/cli/index.js +4 -0
  164. package/lib/cli/setup-certification-commands.js +2 -2
  165. package/lib/cli/setup-certification.help.js +5 -1
  166. package/lib/cli/setup-external-system-help.js +2 -0
  167. package/lib/cli/setup-external-system.js +1 -1
  168. package/lib/commands/agent-kit-help.js +79 -0
  169. package/lib/commands/agent-kit.js +346 -0
  170. package/lib/commands/channel-add-help.js +366 -0
  171. package/lib/commands/channel-add-setup.js +162 -80
  172. package/lib/commands/channel-configure.js +118 -0
  173. package/lib/commands/channel.js +10 -1
  174. package/lib/commands/datasource-capability-relate-cli.js +5 -4
  175. package/lib/commands/governance-upload-external.js +6 -3
  176. package/lib/commands/lifecycle-command-action.js +2 -5
  177. package/lib/commands/lifecycle-external.js +93 -21
  178. package/lib/commands/repair-auth-apply.js +1 -1
  179. package/lib/commands/repair-datasource-key-skip.js +39 -0
  180. package/lib/commands/repair-datasource-keys.js +24 -12
  181. package/lib/commands/repair-datasource-test-payload.js +4 -2
  182. package/lib/commands/repair-datasource-webhooks-sync-bridge.js +23 -2
  183. package/lib/commands/repair-datasource.js +3 -0
  184. package/lib/commands/repair-external-run.js +59 -25
  185. package/lib/commands/repair-openapi-rest-runtime.js +127 -0
  186. package/lib/commands/repair-orchestration-tag-merge.js +339 -0
  187. package/lib/commands/repair-rbac-catalog-defaults.js +96 -0
  188. package/lib/commands/repair-rbac-platform-preset.js +26 -15
  189. package/lib/commands/repair-rbac-reader-roles.js +8 -21
  190. package/lib/commands/repair-rbac.js +26 -44
  191. package/lib/commands/repair-system-permissions.js +24 -22
  192. package/lib/commands/role-assistant-copy-output.js +61 -0
  193. package/lib/commands/role-assistant-copy.js +155 -0
  194. package/lib/commands/role-assistant-test-output.js +22 -9
  195. package/lib/commands/role-assistant-test-result-rows.js +42 -0
  196. package/lib/commands/role-assistant.js +150 -43
  197. package/lib/commands/search.js +143 -0
  198. package/lib/commands/test-e2e-external.js +148 -21
  199. package/lib/commands/test-trust-external.js +7 -5
  200. package/lib/commands/upload-credential-push-log.js +2 -1
  201. package/lib/commands/upload-publish-context.js +1 -1
  202. package/lib/commands/upload-role-assistant-shell.js +124 -0
  203. package/lib/commands/upload-sidecar-followups.js +10 -4
  204. package/lib/commands/upload.js +18 -3
  205. package/lib/commands/verify-operations-skip-e2e.js +131 -0
  206. package/lib/commands/verify-operations-step-plan.js +6 -33
  207. package/lib/commands/verify-operations-steps.js +3 -1
  208. package/lib/core/secrets-docker-env.js +4 -1
  209. package/lib/core/secrets-env-content.js +17 -3
  210. package/lib/datasource/capability/capability-manifest.js +0 -3
  211. package/lib/datasource/capability/copy-test-payload.js +3 -0
  212. package/lib/datasource/capability/relate-operations.js +28 -10
  213. package/lib/datasource/capability/run-capability-relate.js +48 -25
  214. package/lib/datasource/datasource-identifier.js +13 -5
  215. package/lib/deployment/deployer-poll-run.js +117 -35
  216. package/lib/external-system/deploy-dataplane-published.js +70 -0
  217. package/lib/external-system/deploy-helpers.js +26 -1
  218. package/lib/external-system/deploy.js +22 -8
  219. package/lib/external-system/download-helpers.js +29 -2
  220. package/lib/external-system/download-role-assistant.js +109 -4
  221. package/lib/external-system/download.js +46 -30
  222. package/lib/external-system/sync-deploy-manifest.js +3 -2
  223. package/lib/external-system/upload-identity.js +42 -0
  224. package/lib/generator/index.js +19 -15
  225. package/lib/generator/split.js +13 -2
  226. package/lib/generator/wizard-datasource-key.js +54 -0
  227. package/lib/generator/wizard.js +55 -54
  228. package/lib/integration-definition/apply-datasource-keys.js +75 -0
  229. package/lib/integration-definition/apply-relationships.js +195 -0
  230. package/lib/integration-definition/apply-static-enterprise.js +229 -0
  231. package/lib/integration-definition/apply-system-file.js +71 -0
  232. package/lib/integration-definition/apply-test-endpoint.js +89 -0
  233. package/lib/integration-definition/apply-viewpoint-defaults.js +157 -0
  234. package/lib/integration-definition/apply.js +78 -59
  235. package/lib/integration-definition/enrich-openapi-operations.js +36 -10
  236. package/lib/integration-definition/enrich-openapi-pick.js +87 -0
  237. package/lib/lifecycle/role-assistant-governance.js +181 -0
  238. package/lib/lifecycle/scenario-upload.js +181 -30
  239. package/lib/programmatic/builder-api-cors.js +143 -0
  240. package/lib/programmatic/builder-api-request.js +6 -0
  241. package/lib/programmatic/builder-api-route-dispatch.js +56 -42
  242. package/lib/programmatic/builder-api-server.js +8 -1
  243. package/lib/programmatic/capability-registry.js +55 -0
  244. package/lib/programmatic/channel-install-help-resolve.js +359 -0
  245. package/lib/programmatic/channel-install-session.js +218 -0
  246. package/lib/programmatic/help-content/channel-onboarding.md +2 -0
  247. package/lib/programmatic/help-content/cip-overview.md +3 -1
  248. package/lib/programmatic/http-raw-response.js +62 -0
  249. package/lib/programmatic/index.js +2 -0
  250. package/lib/programmatic/openapi-apply-result-schemas.js +8 -0
  251. package/lib/programmatic/openapi-channel-install-bindings.js +179 -0
  252. package/lib/programmatic/openapi-channel-install-schemas.js +289 -0
  253. package/lib/programmatic/openapi-component-schemas.js +19 -1
  254. package/lib/programmatic/openapi-description-enricher.js +3 -1
  255. package/lib/programmatic/openapi-descriptions.js +80 -3
  256. package/lib/programmatic/openapi-envelope-examples.js +124 -0
  257. package/lib/programmatic/openapi-operation-bindings.js +9 -1
  258. package/lib/programmatic/openapi-request-schemas.js +5 -0
  259. package/lib/programmatic/openapi-schema-descriptions-channel.js +319 -0
  260. package/lib/programmatic/openapi-schema-descriptions-operations.js +19 -0
  261. package/lib/programmatic/openapi-spec.js +13 -8
  262. package/lib/programmatic/platform-rbac-catalog.js +36 -18
  263. package/lib/programmatic/request-timeout.js +3 -0
  264. package/lib/programmatic/route-handler-map.js +58 -1
  265. package/lib/programmatic/route-handlers-context.js +2 -1
  266. package/lib/programmatic/run-auth-permissions.js +54 -0
  267. package/lib/programmatic/run-channel-catalog.js +238 -0
  268. package/lib/programmatic/run-channel-install-artifacts.js +137 -0
  269. package/lib/programmatic/run-channel-install-copilot.js +353 -0
  270. package/lib/programmatic/run-channel-install-options.js +236 -0
  271. package/lib/programmatic/run-channel-install-teams-bot.js +204 -0
  272. package/lib/programmatic/run-channel-install.js +346 -0
  273. package/lib/programmatic/run-channel-package.js +87 -7
  274. package/lib/programmatic/run-download.js +41 -0
  275. package/lib/programmatic/workspace-context.js +2 -0
  276. package/lib/protection/auth-context.js +3 -1
  277. package/lib/protection/protection-display.js +3 -2
  278. package/lib/protection/report-exit.js +50 -0
  279. package/lib/protection/run-commands.js +2 -0
  280. package/lib/role-assistant/evidence-sync.js +4 -2
  281. package/lib/role-assistant/evidence-validation-issues.js +51 -0
  282. package/lib/role-assistant/knowledge-sync.js +10 -4
  283. package/lib/role-assistant/package-validate.js +175 -0
  284. package/lib/role-assistant/settings.js +49 -2
  285. package/lib/role-assistant/test-case-assertion-row.js +36 -0
  286. package/lib/role-assistant/test-case-copy-bind.js +77 -0
  287. package/lib/role-assistant/test-case-copy-expected.js +127 -0
  288. package/lib/role-assistant/test-case-copy-from-work.js +90 -0
  289. package/lib/role-assistant/test-case-copy-interactions.js +67 -0
  290. package/lib/role-assistant/test-case-copy.js +119 -0
  291. package/lib/role-assistant/test-case-expected-catalog.js +135 -0
  292. package/lib/role-assistant/test-case-validate.js +88 -0
  293. package/lib/role-assistant/test-cases-bid.js +117 -4
  294. package/lib/role-assistant/test-cases-evaluate.js +159 -24
  295. package/lib/role-assistant/test-cases-evidence.js +175 -0
  296. package/lib/role-assistant/test-cases-honesty.js +155 -6
  297. package/lib/role-assistant/test-cases-lifecycle.js +291 -0
  298. package/lib/role-assistant/test-cases-search-graph.js +122 -0
  299. package/lib/role-assistant/test-cases-search.js +247 -0
  300. package/lib/role-assistant/test-cases.js +71 -172
  301. package/lib/role-assistant/test-pack-map.js +180 -0
  302. package/lib/role-assistant/test-pack-sync.js +187 -0
  303. package/lib/role-assistant/test-runner-debug.js +54 -0
  304. package/lib/role-assistant/test-runner-respond-body.js +36 -0
  305. package/lib/role-assistant/test-runner-search.js +164 -0
  306. package/lib/role-assistant/test-runner-start-payload.js +63 -10
  307. package/lib/role-assistant/test-runner-workhub-answers.js +45 -16
  308. package/lib/role-assistant/test-runner-workhub-helpers.js +40 -2
  309. package/lib/role-assistant/test-runner-workhub-soft.js +9 -3
  310. package/lib/role-assistant/test-runner-workhub.js +74 -32
  311. package/lib/role-assistant/test-runner.js +66 -11
  312. package/lib/schema/external-datasource.schema.json +146 -21
  313. package/lib/schema/external-system.schema.json +177 -2
  314. package/lib/schema/mcp-client-profile.schema.json +103 -0
  315. package/lib/schema/role-assistant-test-case.schema.json +408 -0
  316. package/lib/search/dataplane-context.js +23 -0
  317. package/lib/search/search-args.js +211 -0
  318. package/lib/search/search-display.js +238 -0
  319. package/lib/search/search-errors.js +50 -0
  320. package/lib/search/search-prompts.js +119 -0
  321. package/lib/search/search-roles.js +85 -0
  322. package/lib/search/search-run.js +241 -0
  323. package/lib/search/search-skills.js +198 -0
  324. package/lib/utils/app-path-resolve.js +4 -0
  325. package/lib/utils/authentication-env-template.js +44 -6
  326. package/lib/utils/authentication-slot-show.js +153 -0
  327. package/lib/utils/credential-display.js +43 -1
  328. package/lib/utils/credential-secrets-env.js +6 -1
  329. package/lib/utils/env-copy.js +19 -7
  330. package/lib/utils/external-env-template.js +20 -2
  331. package/lib/utils/external-system-readiness-compact-blocks.js +5 -1
  332. package/lib/utils/external-system-readiness-compact-display.js +30 -1
  333. package/lib/utils/external-system-validators.js +2 -1
  334. package/lib/utils/help-builder.js +3 -1
  335. package/lib/utils/paths.js +18 -1
  336. package/lib/utils/platform-shell-package.js +69 -0
  337. package/lib/utils/port-resolver.js +50 -1
  338. package/lib/utils/rewrite-name-flag.js +20 -0
  339. package/lib/utils/role-assistant-paths.js +13 -10
  340. package/lib/utils/schema-loader.js +37 -0
  341. package/lib/utils/schema-resolver.js +11 -1
  342. package/lib/utils/secrets-helpers.js +12 -21
  343. package/lib/utils/token-manager.js +10 -5
  344. package/lib/validation/validate-external-file.js +5 -1
  345. package/lib/validation/validate.js +41 -0
  346. package/package.json +1 -1
  347. package/templates/README.md +1 -1
  348. package/templates/agent-kit/adapters/claude/nested.CLAUDE.md +1 -0
  349. package/templates/agent-kit/adapters/claude/root.CLAUDE.md +5 -0
  350. package/templates/agent-kit/adapters/cursor/commands/cust-0-plan.md +5 -0
  351. package/templates/agent-kit/adapters/cursor/commands/cust-1-validate.md +5 -0
  352. package/templates/agent-kit/adapters/cursor/commands/cust-2-build.md +5 -0
  353. package/templates/agent-kit/adapters/cursor/commands/cust-3-push.md +5 -0
  354. package/templates/agent-kit/adapters/cursor/commands/cust-biz-1-validate.md +5 -0
  355. package/templates/agent-kit/adapters/cursor/commands/cust-biz-2-build.md +5 -0
  356. package/templates/agent-kit/adapters/cursor/commands/cust-biz-3-prove.md +5 -0
  357. package/templates/agent-kit/agent-kit.yaml +45 -0
  358. package/templates/agent-kit/instructions/AGENTKIT.md +83 -0
  359. package/templates/agent-kit/instructions/integration.AGENTS.md +25 -0
  360. package/templates/agent-kit/instructions/role-assistant.AGENTS.md +22 -0
  361. package/templates/agent-kit/instructions/root.AGENTS.md +37 -0
  362. package/templates/agent-kit/parity-inventory.yaml +188 -0
  363. package/templates/agent-kit/skills/aifabrix-connected-system/SKILL.md +58 -0
  364. package/templates/agent-kit/skills/aifabrix-connected-system/references/contract-checklist.md +40 -0
  365. package/templates/agent-kit/skills/aifabrix-connected-system/references/delivery-gates.md +54 -0
  366. package/templates/agent-kit/skills/aifabrix-connected-system/references/production-safety.md +35 -0
  367. package/templates/agent-kit/skills/aifabrix-connected-system/scripts/reserved-system-key.js +19 -0
  368. package/templates/agent-kit/skills/aifabrix-plan/SKILL.md +51 -0
  369. package/templates/agent-kit/skills/aifabrix-plan/references/challenge-checklist.md +108 -0
  370. package/templates/agent-kit/skills/aifabrix-plan/references/interaction.md +34 -0
  371. package/templates/agent-kit/skills/aifabrix-plan/references/plan-template.md +182 -0
  372. package/templates/agent-kit/skills/aifabrix-prove/SKILL.md +50 -0
  373. package/templates/agent-kit/skills/aifabrix-prove/references/demo-template.md +65 -0
  374. package/templates/agent-kit/skills/aifabrix-prove/references/evidence-lifecycle.md +68 -0
  375. package/templates/agent-kit/skills/aifabrix-prove/references/learning-template.md +66 -0
  376. package/templates/agent-kit/skills/aifabrix-role-assistant/SKILL.md +42 -0
  377. package/templates/agent-kit/skills/aifabrix-role-assistant/references/package-boundary.md +21 -0
  378. package/templates/agent-kit/skills/shared/hosts.md +78 -0
  379. package/templates/agent-kit/workspace/.cursor/plans/README.md +22 -0
  380. package/templates/agent-kit/workspace/LICENSE.mit +21 -0
  381. package/templates/agent-kit/workspace/README.md +89 -0
  382. package/templates/applications/builder-api/Dockerfile +3 -1
  383. package/templates/applications/builder-api/env.template +7 -0
  384. package/templates/applications/dataplane/application.yaml +6 -5
  385. package/templates/applications/dataplane/env.template +2 -2
  386. package/templates/applications/dataplane/rbac.yaml +35 -2
  387. package/templates/applications/keycloak/Dockerfile +30 -4
  388. package/templates/applications/keycloak/application.yaml +2 -2
  389. package/templates/applications/keycloak/cimd-lenient-parse/AbstractClientIdMetadataDocumentExecutor.java +896 -0
  390. package/templates/applications/keycloak/cimd-lenient-parse/SOURCE.md +19 -0
  391. package/templates/applications/keycloak/env.template +3 -0
  392. package/templates/applications/miso-controller/application.yaml +1 -2
  393. package/templates/applications/miso-controller/env.template +10 -9
  394. package/templates/channels/README.md +5 -5
  395. package/templates/channels/chatgpt/TROUBLESHOOTING.md +51 -0
  396. package/templates/channels/chatgpt/channel.json +59 -0
  397. package/templates/channels/chatgpt/icon.svg +1 -0
  398. package/templates/channels/chatgpt/install.template.md.hbs +20 -95
  399. package/templates/channels/chatgpt/integration/README.md +1 -1
  400. package/templates/channels/chatgpt/integration/application.json +2 -2
  401. package/templates/channels/chatgpt/integration/chatgpt-system.json +49 -4
  402. package/templates/channels/chatgpt/integration/env.template +2 -4
  403. package/templates/channels/chatgpt/integration/rbac.json +13 -0
  404. package/templates/channels/claude/TROUBLESHOOTING.md +44 -0
  405. package/templates/channels/claude/channel.json +59 -0
  406. package/templates/channels/claude/icon.svg +1 -0
  407. package/templates/channels/claude/install.template.md.hbs +22 -0
  408. package/templates/channels/claude/integration/README.md +14 -0
  409. package/templates/channels/claude/integration/application.json +15 -0
  410. package/templates/channels/claude/integration/claude-system.json +59 -0
  411. package/templates/channels/claude/integration/env.template +2 -0
  412. package/templates/channels/claude/integration/rbac.json +13 -0
  413. package/templates/channels/claude/manifest.template.json.hbs +40 -0
  414. package/templates/channels/mcp-client/channel.json +72 -0
  415. package/templates/channels/mcp-client/icon.svg +1 -0
  416. package/templates/channels/mcp-client/install.template.md.hbs +24 -0
  417. package/templates/channels/mcp-client/integration/README.md +13 -0
  418. package/templates/channels/mcp-client/integration/application.json +15 -0
  419. package/templates/channels/mcp-client/integration/env.template +2 -0
  420. package/templates/channels/mcp-client/integration/mcp-client-system.json +72 -0
  421. package/templates/channels/mcp-client/integration/rbac.json +13 -0
  422. package/templates/channels/mcp-client/manifest.template.json.hbs +41 -0
  423. package/templates/channels/mcp-client/profiles/cursor.json +26 -0
  424. package/templates/channels/mcp-client/profiles/github-copilot.json +29 -0
  425. package/templates/channels/mcp-client/profiles/vscode.json +29 -0
  426. package/templates/channels/microsoft-copilot/channel.json +73 -0
  427. package/templates/channels/microsoft-copilot/declarative-agent.template.json.hbs +8 -4
  428. package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +65 -5
  429. package/templates/channels/microsoft-copilot/icon.svg +1 -0
  430. package/templates/channels/microsoft-copilot/install.template.md.hbs +9 -9
  431. package/templates/channels/microsoft-copilot/integration/README.md +1 -1
  432. package/templates/channels/microsoft-copilot/integration/application.json +2 -2
  433. package/templates/channels/microsoft-copilot/integration/env.template +3 -6
  434. package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +63 -4
  435. package/templates/channels/microsoft-copilot/integration/rbac.json +13 -0
  436. package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +5 -5
  437. package/templates/channels/slack/channel.json +234 -0
  438. package/templates/channels/slack/icon.svg +1 -0
  439. package/templates/channels/slack/install.template.md.hbs +45 -28
  440. package/templates/channels/slack/integration/README.md +245 -22
  441. package/templates/channels/slack/integration/application.json +44 -7
  442. package/templates/channels/slack/integration/env.template +15 -6
  443. package/templates/channels/slack/integration/openapi/openapi.json +126 -0
  444. package/templates/channels/slack/integration/rbac.json +84 -0
  445. package/templates/channels/slack/integration/slack-datasource-commands.json +154 -0
  446. package/templates/channels/slack/integration/slack-datasource-conversations.json +28 -3
  447. package/templates/channels/slack/integration/slack-datasource-events.json +154 -0
  448. package/templates/channels/slack/integration/slack-datasource-interactive.json +154 -0
  449. package/templates/channels/slack/integration/slack-datasource-messages.json +40 -2
  450. package/templates/channels/slack/integration/slack-system.json +161 -72
  451. package/templates/channels/slack/manifest.template.json.hbs +10 -4
  452. package/templates/channels/teams-bot/channel.json +162 -0
  453. package/templates/channels/teams-bot/icon.svg +1 -0
  454. package/templates/channels/teams-bot/install.template.md.hbs +12 -13
  455. package/templates/channels/teams-bot/integration/README.md +5 -4
  456. package/templates/channels/teams-bot/integration/application.json +6 -4
  457. package/templates/channels/teams-bot/integration/env.template +5 -4
  458. package/templates/channels/teams-bot/integration/openapi/openapi.json +68 -0
  459. package/templates/channels/teams-bot/integration/rbac.json +21 -0
  460. package/templates/channels/teams-bot/integration/teams-bot-datasource-activities.json +154 -0
  461. package/templates/channels/teams-bot/integration/teams-bot-system.json +128 -23
  462. package/templates/channels/web-embed/channel.json +60 -0
  463. package/templates/channels/web-embed/install.template.md.hbs +1 -1
  464. package/templates/channels/web-embed/integration/README.md +2 -2
  465. package/templates/channels/web-embed/integration/application.json +2 -2
  466. package/templates/channels/web-embed/integration/env.template +1 -1
  467. package/templates/channels/web-embed/integration/rbac.json +13 -0
  468. package/templates/channels/web-embed/integration/web-embed-system.json +50 -4
  469. package/templates/python/docker-compose.hbs +14 -0
  470. package/templates/typescript/docker-compose.hbs +14 -0
@@ -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
+ # Runtime features. Include cimd so Keycloak 26.7.2 advertises Client ID Metadata
59
+ # Documents. preview alone triggers a start-time rebuild that drops cimd.
60
+ KC_FEATURES=preview,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.51'
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).
@@ -22,9 +22,10 @@
22
22
  SKIP_FIRST_TIME_SETUP=false
23
23
 
24
24
  # Force onboarding to run even when a controller row already exists (default: unset/false).
25
- # Use only when the DB already had a controller so onboarding was skipped and the admin
26
- # user was never created in the aifabrix realm. Set to true, restart controller once,
27
- # then set back to false so onboarding does not re-run on every start.
25
+ # Prefer SQL/API one-shot: POST /api/v1/controller/force-onboarding (controller:admin) or set
26
+ # controllers.configuration.setup.forceOnboarding=true — no App Service restart required.
27
+ # Env FORCE_ONBOARDING still works as bootstrap-only when you must restart: set true, restart once,
28
+ # then set back to false. This is NOT a Tenant Activation wizard reset (does not clear activation JSON).
28
29
  # FORCE_ONBOARDING=true
29
30
 
30
31
  # Optional custom controller key for onboarding (default: miso-controller)
@@ -127,7 +128,9 @@ REDIS_PERMISSIONS_TTL=900
127
128
  KEYCLOAK_REALM=aifabrix
128
129
  # Public issuer / browser URL (includes /auth when Keycloak uses KC_HTTP_RELATIVE_PATH=/auth).
129
130
  KEYCLOAK_SERVER_URL=url://keycloak-public
130
- # Internal token/JWKS calls: url://keycloak-internal (includes /auth when Keycloak uses KC_HTTP_RELATIVE_PATH).
131
+ # Internal token/JWKS calls use url://keycloak-internal.
132
+ # In Traefik/front-door mode, virtual directory mapping supplies relative path semantics.
133
+ # Do not append /auth again when frontDoorRouting is /auth/* — /auth/auth 404s.
131
134
  KEYCLOAK_INTERNAL_SERVER_URL=url://keycloak-internal
132
135
  # Docker/internal host and port: used when config from DB has localhost (getDockerKeycloakInternalUrl).
133
136
  # Resolved from env-config (e.g. KEYCLOAK_HOST=keycloak, KEYCLOAK_PORT=8080 for docker).
@@ -171,6 +174,8 @@ MISO_WEB_SERVER_URL=url://public
171
174
  MISO_CONTROLLER_URL=url://internal
172
175
  MISO_RELATIVE_PATH=url://vdir-public
173
176
  ALLOWED_ORIGINS=http://localhost:*,url://host-public,url://host-private,url://dataplane-host-public,url://dataplane-host-private
177
+ # Opt-in: broker/entry/referer under /data keep …/data/auth/callback (do not append /miso). Default off.
178
+ # AUTH_PRESERVE_DATAPLANE_VDIR=true
174
179
 
175
180
  # MISO Environment Configuration (miso, dev, tst, pro)
176
181
  MISO_ENVIRONMENT=miso
@@ -245,10 +250,6 @@ SKIP_DB_REDEPLOY=true
245
250
  # Bootstrap (SKIP_FIRST_TIME_SETUP=false) is separate from the activation wizard.
246
251
  DEPLOYMENT=database
247
252
 
248
- # Dev/test: open /tenant-activation on Platform Apps (last step). Default false.
249
- # Does not skip server-side TA — use only when env is already activated/deployed.
250
- TA_SKIP_TO_APP_DEPLOY=false
251
-
252
253
  # Dev/test: show TA Entra "Completing setup" countdown (120s cap). Default false.
253
254
  # Exposed to UI via GET /api/v1/tenant/status → showTaCountdown (restart controller after change).
254
255
  SHOW_TA_COUNT_DOWN=false
@@ -323,7 +324,7 @@ MORI_PASSWORD=kv://mori-controller-basic-passwordKeyVault
323
324
 
324
325
  LOG_TO_FILE=true
325
326
  LOG_LEVEL=info
326
- LOG_FILE_PATH=./logs
327
+ LOG_FILE_PATH=/mnt/data/logs
327
328
 
328
329
  # =============================================================================
329
330
  # OPENTELEMETRY CONFIGURATION
@@ -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,44 @@
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
+ - Authentication: OAuth (the Runtime MCP requires sign-in; Claude’s form defaults to none)
12
+
13
+ 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.
14
+
15
+ Public Anthropic connector auth: https://claude.com/docs/connectors/building/authentication
16
+
17
+ ## Runtime MCP
18
+
19
+ - HTTPS Streamable HTTP at the Runtime orchestration MCP URL
20
+ - RFC 9728 protected-resource metadata
21
+ - `resource` echoed through authorize/token; access token audience must match
22
+ - The MCP URL must be reachable from Anthropic cloud (not localhost)
23
+
24
+ ## Hosted Claude surfaces
25
+
26
+ 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`.
27
+
28
+ The Runtime MCP returns **401** without a user token. In Claude connector settings, Authentication must be **OAuth** (require sign-in). If the connector is saved as “not requiring sign-in”, Claude reports that mismatch (HTTP 401) and an `ofid_…` support reference. Edit the connector, set OAuth, then Connect.
29
+
30
+ ## Claude-owned remaining steps
31
+
32
+ Add the custom connector (Owners on Team or Enterprise), authenticate/consent, and enable it. There is no documented Anthropic API for those steps.
33
+
34
+ ## Callbacks
35
+
36
+ Hosted Claude surfaces use `https://claude.ai/api/mcp/auth_callback`. Register extra HTTPS callbacks with:
37
+
38
+ ```bash
39
+ aifabrix channel configure claude --callback-url "<callback-url>"
40
+ ```
41
+
42
+ ## Client secret
43
+
44
+ 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), set Authentication to OAuth, 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,22 @@
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
+ Authentication: OAuth
21
+
22
+ 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
+ }