@aifabrix/builder 2.45.5 → 2.47.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 (355) hide show
  1. package/.cursor/rules/cli-layout.mdc +2 -0
  2. package/.cursor/rules/cli-product-neutral.mdc +43 -0
  3. package/.cursor/rules/project-rules.mdc +1 -0
  4. package/.npmrc.token +1 -0
  5. package/.temp/jest-protection-convert/run-IFN2nv/.protection/hubspot-companies.json +1 -0
  6. package/.temp/jest-protection-convert/run-IvmKLO/.protection/hubspot-companies.yaml +17 -0
  7. package/.temp/jest-protection-convert/run-SdvblF/.protection/hubspot-companies.json +1 -0
  8. package/.temp/jest-protection-convert/run-b51TsW/.protection/hubspot-companies.json +1 -0
  9. package/.temp/jest-protection-convert/run-fiLmb1/.protection/hubspot-companies.json +1 -0
  10. package/.temp/jest-protection-convert/run-qYGHMU/.protection/hubspot-companies.yaml +17 -0
  11. package/.temp/jest-protection-fixtures/hubspot-Mq5re8/hubspot-companies.yaml +17 -0
  12. package/.temp/jest-protection-fixtures/hubspot-f3u4YL/hubspot-companies.yaml +17 -0
  13. package/.temp/jest-protection-fixtures/hubspot-iQtd1O/hubspot-companies.yaml +17 -0
  14. package/.temp/jest-protection-fixtures/hubspot-mdmz5M/hubspot-companies.yaml +17 -0
  15. package/.temp/jest-protection-fixtures/hubspot-qbKYxQ/hubspot-companies.yaml +17 -0
  16. package/.temp/jest-protection-fixtures/hubspot-yzlJy6/hubspot-companies.yaml +17 -0
  17. package/.temp/validation/summary.txt +5 -0
  18. package/README.md +43 -17
  19. package/integration/hubspot-test/test-artifacts/wizard-hubspot-credential-real.yaml +1 -1
  20. package/integration/hubspot-test/test-artifacts/wizard-hubspot-env-vars.yaml +1 -1
  21. package/jest.config.default.js +2 -1
  22. package/jest.config.isolated.js +2 -1
  23. package/jest.global-live-fabrix-hooks.js +36 -0
  24. package/jest.isolated-projects.js +146 -0
  25. package/jest.projects.js +65 -136
  26. package/lib/api/api-response-errors.js +124 -0
  27. package/lib/api/dataplane-health.api.js +19 -7
  28. package/lib/api/governance-scenario-pack.api.js +159 -0
  29. package/lib/api/index.js +43 -3
  30. package/lib/api/lifecycle.api.js +98 -0
  31. package/lib/api/pipeline.api.js +3 -1
  32. package/lib/api/records-bulk.api.js +14 -1
  33. package/lib/api/resource-types.api.js +107 -0
  34. package/lib/api/runtime-configuration.api.js +72 -0
  35. package/lib/api/types/resource-types.types.js +45 -0
  36. package/lib/api/user-groups.api.js +9 -9
  37. package/lib/api/users.api.js +8 -8
  38. package/lib/api/validation-runner.js +3 -1
  39. package/lib/api/wizard.api.js +10 -2
  40. package/lib/app/deploy-config.js +4 -1
  41. package/lib/app/down.js +78 -27
  42. package/lib/app/index.js +2 -2
  43. package/lib/app/push.js +4 -5
  44. package/lib/app/register.js +7 -4
  45. package/lib/app/run-env-compose.js +84 -30
  46. package/lib/app/run-resolve-image.js +2 -1
  47. package/lib/app/run-stop-containers.js +113 -0
  48. package/lib/app/run.js +1 -31
  49. package/lib/app/show-display.js +35 -0
  50. package/lib/app/show.js +32 -1
  51. package/lib/build/index.js +22 -5
  52. package/lib/build/miso-controller-npm-sdk-guard.js +25 -0
  53. package/lib/certification/sync-system-certification.js +13 -6
  54. package/lib/channels/add-channel.js +348 -0
  55. package/lib/channels/channel-artifact-generator.js +141 -0
  56. package/lib/channels/channel-audit.js +101 -0
  57. package/lib/channels/channel-auth-context.js +37 -0
  58. package/lib/channels/channel-credential.js +200 -0
  59. package/lib/channels/channel-display-name.js +64 -0
  60. package/lib/channels/channel-external-system.js +106 -0
  61. package/lib/channels/channel-integration-generator.js +274 -0
  62. package/lib/channels/channel-probe.js +89 -0
  63. package/lib/channels/channel-runtime-resolver.js +152 -0
  64. package/lib/channels/channel-status-display.js +141 -0
  65. package/lib/channels/channel-targets.js +115 -0
  66. package/lib/cli/index.js +20 -4
  67. package/lib/cli/infra-guided-auth.js +109 -0
  68. package/lib/cli/infra-guided.js +84 -81
  69. package/lib/cli/setup-app.help.js +0 -31
  70. package/lib/cli/setup-app.js +82 -5
  71. package/lib/cli/setup-app.test-commands.js +5 -57
  72. package/lib/cli/setup-auth.js +25 -0
  73. package/lib/cli/setup-certification-commands.js +147 -0
  74. package/lib/cli/setup-certification.help.js +141 -0
  75. package/lib/cli/setup-environment.js +19 -2
  76. package/lib/cli/setup-external-system-help.js +62 -0
  77. package/lib/cli/setup-external-system.js +25 -3
  78. package/lib/cli/setup-infra-up-dataplane-action.js +2 -2
  79. package/lib/cli/setup-infra-up-platform-action.js +2 -1
  80. package/lib/cli/setup-infra.js +9 -1
  81. package/lib/cli/setup-platform.js +6 -1
  82. package/lib/cli/setup-secrets.js +33 -1
  83. package/lib/cli/setup-utility-help-after.js +25 -2
  84. package/lib/cli/setup-utility-repair.js +198 -0
  85. package/lib/cli/setup-utility-resolve.js +44 -5
  86. package/lib/cli/setup-utility-validate.js +197 -0
  87. package/lib/cli/setup-utility.js +4 -239
  88. package/lib/commands/app-logs.js +54 -26
  89. package/lib/commands/app.js +41 -0
  90. package/lib/commands/auth-status-client-tokens.js +214 -0
  91. package/lib/commands/auth-status-dataplane-version.js +142 -68
  92. package/lib/commands/auth-status.js +43 -54
  93. package/lib/commands/channel.js +58 -0
  94. package/lib/commands/datasource-test-trust-cli.js +27 -23
  95. package/lib/commands/datasource-unified-test-cli.js +6 -3
  96. package/lib/commands/datasource-unified-test-cli.options.js +5 -1
  97. package/lib/commands/datasource.js +8 -8
  98. package/lib/commands/dev-show-display.js +8 -1
  99. package/lib/commands/governance-cli-shared.js +94 -0
  100. package/lib/commands/governance-command-action.js +132 -0
  101. package/lib/commands/governance-download-external.js +34 -0
  102. package/lib/commands/governance-generate-external.js +71 -0
  103. package/lib/commands/governance-upload-external.js +36 -0
  104. package/lib/commands/governance-verify-external.js +64 -0
  105. package/lib/commands/governance.js +144 -0
  106. package/lib/commands/identity-apply-sync.js +49 -8
  107. package/lib/commands/identity-group-cli.js +66 -26
  108. package/lib/commands/identity-membership-role-cache.js +58 -37
  109. package/lib/commands/identity-shared.js +22 -1
  110. package/lib/commands/identity-user-cli.js +80 -34
  111. package/lib/commands/lifecycle-command-action.js +123 -0
  112. package/lib/commands/lifecycle-external.js +268 -0
  113. package/lib/commands/login.js +11 -2
  114. package/lib/commands/repair-auth-apply.js +153 -0
  115. package/lib/commands/repair-auth-config.js +8 -13
  116. package/lib/commands/repair-changed-files.js +41 -0
  117. package/lib/commands/repair-datasource-com-v2.js +15 -0
  118. package/lib/commands/repair-datasource-keys.js +4 -1
  119. package/lib/commands/repair-datasource-run.js +59 -0
  120. package/lib/commands/repair-datasource-service-contract.js +206 -0
  121. package/lib/commands/repair-datasource-test-payload.js +259 -0
  122. package/lib/commands/repair-datasource.js +49 -64
  123. package/lib/commands/repair-env-template.js +76 -25
  124. package/lib/commands/repair-external-run.js +216 -0
  125. package/lib/commands/repair-openapi-sync.js +49 -4
  126. package/lib/commands/repair-persist.js +4 -0
  127. package/lib/commands/repair-rbac.js +52 -1
  128. package/lib/commands/repair-steps.js +160 -0
  129. package/lib/commands/repair-system-alignment.js +7 -4
  130. package/lib/commands/repair.js +29 -296
  131. package/lib/commands/resource-type.js +371 -0
  132. package/lib/commands/secrets-get.js +184 -0
  133. package/lib/commands/secrets-remove-all.js +3 -1
  134. package/lib/commands/setup-image-refresh.js +146 -0
  135. package/lib/commands/setup-modes.js +158 -162
  136. package/lib/commands/setup-platform-auth.js +76 -0
  137. package/lib/commands/setup-prompts-admin.js +244 -0
  138. package/lib/commands/setup-prompts-platform-mode.js +70 -0
  139. package/lib/commands/setup-prompts-validators.js +36 -0
  140. package/lib/commands/setup-prompts.js +24 -76
  141. package/lib/commands/setup-run-context.js +45 -0
  142. package/lib/commands/setup-spinners.js +39 -0
  143. package/lib/commands/setup.js +27 -5
  144. package/lib/commands/teardown.js +39 -0
  145. package/lib/commands/test-e2e-external.js +24 -8
  146. package/lib/commands/test-governance-external.js +3 -24
  147. package/lib/commands/test-trust-external.js +48 -100
  148. package/lib/commands/up-common.js +57 -13
  149. package/lib/commands/up-dataplane.js +56 -15
  150. package/lib/commands/upload-publish-context.js +75 -0
  151. package/lib/commands/upload-sidecar-followups.js +89 -0
  152. package/lib/commands/upload.js +113 -110
  153. package/lib/commands/verify-governance-combined-external.js +61 -0
  154. package/lib/commands/verify-governance-command-action.js +64 -0
  155. package/lib/commands/verify-governance-db.js +102 -0
  156. package/lib/commands/verify-governance-external.js +77 -0
  157. package/lib/commands/verify-governance-result-builders.js +71 -0
  158. package/lib/commands/verify-operations-command-action.js +68 -0
  159. package/lib/commands/verify-operations-external.js +268 -0
  160. package/lib/commands/verify-operations-persist.js +75 -0
  161. package/lib/commands/verify-operations-step-plan.js +68 -0
  162. package/lib/commands/verify-operations-steps.js +111 -0
  163. package/lib/commands/verify-trust-command-action.js +73 -0
  164. package/lib/commands/verify-trust-external.js +59 -0
  165. package/lib/commands/wizard-config-normalizer.js +43 -23
  166. package/lib/commands/wizard-core.js +2 -0
  167. package/lib/core/admin-password-generator.js +38 -0
  168. package/lib/core/admin-secrets-bundle.js +111 -0
  169. package/lib/core/admin-secrets-env-overlay.js +62 -0
  170. package/lib/core/admin-secrets.js +32 -4
  171. package/lib/core/config-attach-extensions.js +3 -0
  172. package/lib/core/config-platform-controller.js +44 -0
  173. package/lib/core/config-setup-installation-profile.js +42 -0
  174. package/lib/core/config-setup-platform-mode.js +46 -0
  175. package/lib/core/config.js +46 -36
  176. package/lib/core/secrets-admin-env.js +6 -2
  177. package/lib/core/secrets-ensure.js +4 -0
  178. package/lib/core/secrets-env-content.js +54 -48
  179. package/lib/core/secrets-env-write.js +10 -1
  180. package/lib/core/secrets-infra-placeholder-sync.js +2 -0
  181. package/lib/core/setup-installation-profile.js +43 -0
  182. package/lib/core/setup-platform-mode.js +90 -0
  183. package/lib/datasource/agent-trust-debug-log.js +1 -1
  184. package/lib/datasource/agent-trust-run.js +5 -3
  185. package/lib/datasource/audit-evidence-extract-debug.js +30 -18
  186. package/lib/datasource/audit-evidence-extract.js +7 -4
  187. package/lib/datasource/audit-evidence-verify-matrix.js +54 -26
  188. package/lib/datasource/bulk-loader-run-batches.js +15 -3
  189. package/lib/datasource/capability/capability-diff-slice.js +2 -2
  190. package/lib/datasource/capability/capability-manifest.js +254 -0
  191. package/lib/datasource/capability/capability-resolve.js +3 -4
  192. package/lib/datasource/capability/copy-operations.js +5 -3
  193. package/lib/datasource/capability/remove-operations.js +2 -1
  194. package/lib/datasource/capability/run-capability-copy.js +32 -4
  195. package/lib/datasource/capability/run-capability-diff.js +3 -3
  196. package/lib/datasource/capability/run-capability-dimension.js +2 -4
  197. package/lib/datasource/capability/run-capability-edit.js +4 -7
  198. package/lib/datasource/capability/run-capability-relate.js +2 -4
  199. package/lib/datasource/capability/run-capability-remove.js +2 -4
  200. package/lib/datasource/capability/validate-capability-slice.js +2 -1
  201. package/lib/datasource/datasource-identifier.js +2 -1
  202. package/lib/datasource/datasource-load-export-context.js +3 -0
  203. package/lib/datasource/datasource-validate-display.js +1 -1
  204. package/lib/datasource/field-reference-validator.js +24 -3
  205. package/lib/datasource/log-cleaner.js +2 -2
  206. package/lib/datasource/log-viewer.js +8 -8
  207. package/lib/datasource/orphan-profiles-validator.js +98 -0
  208. package/lib/datasource/test-e2e.js +4 -1
  209. package/lib/datasource/unified-validation-run-body.js +3 -1
  210. package/lib/datasource/unified-validation-run.js +5 -2
  211. package/lib/datasource/validate.js +41 -23
  212. package/lib/deployment/environment-poll-status.js +138 -0
  213. package/lib/deployment/environment.js +42 -34
  214. package/lib/external-system/download-helpers.js +87 -0
  215. package/lib/external-system/download.js +78 -138
  216. package/lib/external-system/generator.js +1 -55
  217. package/lib/external-system/integration-auth-context.js +45 -0
  218. package/lib/external-system/test-auth.js +12 -5
  219. package/lib/external-system/test.js +16 -21
  220. package/lib/generator/builders.js +11 -1
  221. package/lib/generator/external-controller-manifest.js +18 -0
  222. package/lib/generator/split.js +3 -1
  223. package/lib/generator/wizard.js +1 -28
  224. package/lib/governance/governance-cli-errors.js +96 -0
  225. package/lib/governance/governance-download-display.js +38 -0
  226. package/lib/governance/governance-run-display.js +215 -25
  227. package/lib/identity/fk-reference.js +65 -0
  228. package/lib/identity/identity-apply-core.js +13 -58
  229. package/lib/identity/identity-apply-phases.js +5 -1
  230. package/lib/identity/identity-display.js +243 -0
  231. package/lib/identity/identity-response-helpers.js +52 -0
  232. package/lib/identity/identity-sync-errors.js +62 -0
  233. package/lib/identity/resolve-user-id.js +129 -0
  234. package/lib/identity/username-default.js +31 -0
  235. package/lib/infrastructure/admin-secrets-apply.js +84 -0
  236. package/lib/infrastructure/admin-secrets-ensure.js +130 -0
  237. package/lib/infrastructure/admin-secrets-resolve.js +95 -0
  238. package/lib/infrastructure/admin-secrets-sync.js +91 -0
  239. package/lib/infrastructure/helpers.js +23 -129
  240. package/lib/infrastructure/index.js +5 -6
  241. package/lib/infrastructure/orphan-infra-docker-teardown.js +11 -5
  242. package/lib/lifecycle/certification-progress.js +231 -0
  243. package/lib/lifecycle/dataplane-ui-url.js +145 -0
  244. package/lib/lifecycle/exit-codes.js +24 -0
  245. package/lib/lifecycle/json-envelope.js +25 -0
  246. package/lib/lifecycle/lifecycle-governance-options.js +51 -0
  247. package/lib/lifecycle/logger-quiet.js +29 -0
  248. package/lib/lifecycle/open-api-published.js +59 -0
  249. package/lib/lifecycle/operations-readiness-metrics.js +101 -0
  250. package/lib/lifecycle/product-model.js +196 -0
  251. package/lib/lifecycle/report-display-trust.js +70 -0
  252. package/lib/lifecycle/report-display.js +472 -0
  253. package/lib/lifecycle/scenario-upload.js +191 -0
  254. package/lib/lifecycle/verify-step-progress.js +87 -0
  255. package/lib/parameters/infra-kv-discovery.js +27 -2
  256. package/lib/protection/auth-context.js +10 -4
  257. package/lib/resolvers/datasource-resolver.js +2 -3
  258. package/lib/resolvers/resource-type-file.js +159 -0
  259. package/lib/schema/application-schema.json +17 -1
  260. package/lib/schema/datasource-test-run.schema.json +89 -6
  261. package/lib/schema/deployment-rules.yaml +2 -1
  262. package/lib/schema/external-datasource.schema.json +2947 -2619
  263. package/lib/schema/external-system.schema.json +1418 -761
  264. package/lib/schema/infra.parameter.yaml +45 -0
  265. package/lib/schema/type/credential-field-registry.json +103 -97
  266. package/lib/schema/type/document-storage.json +9 -5
  267. package/lib/utils/aifabrix-test-runtime-guard.js +125 -0
  268. package/lib/utils/api.js +55 -31
  269. package/lib/utils/app-relative-path-env.js +112 -0
  270. package/lib/utils/app-run-containers.js +25 -2
  271. package/lib/utils/authentication-shape.js +224 -0
  272. package/lib/utils/build-copy.js +36 -5
  273. package/lib/utils/build-resolve-image.js +66 -12
  274. package/lib/utils/celery-companion-apps.js +53 -0
  275. package/lib/utils/cli-secrets-error-format.js +83 -21
  276. package/lib/utils/cli-utils.js +20 -4
  277. package/lib/utils/compose-celery-worker.js +23 -0
  278. package/lib/utils/compose-generate-docker-compose.js +13 -1
  279. package/lib/utils/compose-traefik-ingress-base.js +16 -1
  280. package/lib/utils/config-secrets-path.js +46 -0
  281. package/lib/utils/configuration-env-resolver.js +36 -0
  282. package/lib/utils/controller-url.js +88 -1
  283. package/lib/utils/credential-secrets-env-kv.js +216 -0
  284. package/lib/utils/credential-secrets-env.js +175 -257
  285. package/lib/utils/dataplane-resolver.js +18 -2
  286. package/lib/utils/declarative-url-ports.js +27 -4
  287. package/lib/utils/deployment-auth-mode.js +41 -0
  288. package/lib/utils/developer-volume-id.js +33 -0
  289. package/lib/utils/docker-build.js +1 -4
  290. package/lib/utils/env-copy.js +14 -9
  291. package/lib/utils/env-kv-orphan-lines.js +43 -0
  292. package/lib/utils/error-formatters/network-errors.js +13 -4
  293. package/lib/utils/external-env-template.js +11 -3
  294. package/lib/utils/external-system-readiness-core.js +10 -0
  295. package/lib/utils/external-system-readiness-display.js +80 -23
  296. package/lib/utils/external-system-validators.js +8 -2
  297. package/lib/utils/health-check.js +4 -1
  298. package/lib/utils/help-builder.js +13 -8
  299. package/lib/utils/keycloak-realm-ready.js +101 -0
  300. package/lib/utils/load-cip-capacity-display-config.js +61 -15
  301. package/lib/utils/manifest-source-emit.js +2 -0
  302. package/lib/utils/paths.js +25 -0
  303. package/lib/utils/pipeline-upload-auth-retry.js +82 -0
  304. package/lib/utils/platform-controller-url.js +157 -0
  305. package/lib/utils/platform-kv-ref.js +57 -0
  306. package/lib/utils/postgres-platform-bootstrap.js +199 -0
  307. package/lib/utils/postgres-wipe.js +9 -2
  308. package/lib/utils/resolve-env-mode.js +47 -0
  309. package/lib/utils/runtime-configuration-download.js +189 -0
  310. package/lib/utils/runtime-configuration-values.js +119 -0
  311. package/lib/utils/schema-loader.js +19 -4
  312. package/lib/utils/secrets-generator.js +31 -25
  313. package/lib/utils/secrets-missing-error.js +164 -0
  314. package/lib/utils/service-url-label.js +81 -0
  315. package/lib/utils/setup-quiet-output.js +25 -0
  316. package/lib/utils/template-helpers.js +15 -0
  317. package/lib/utils/token-manager-client-credentials.js +201 -0
  318. package/lib/utils/token-manager-messages.js +8 -0
  319. package/lib/utils/token-manager-refresh.js +12 -2
  320. package/lib/utils/token-manager.js +86 -105
  321. package/lib/utils/upload-pipeline-ui.js +12 -5
  322. package/lib/utils/upload-sync-options.js +42 -0
  323. package/lib/utils/url-declarative-public-base.js +21 -3
  324. package/lib/utils/url-declarative-vdir-inactive-env.js +14 -4
  325. package/lib/utils/validation-poll-ui.js +8 -0
  326. package/lib/utils/validation-run-stage.js +45 -0
  327. package/lib/utils/worker-sidecars.js +142 -0
  328. package/lib/validation/external-manifest-validator.js +2 -0
  329. package/lib/validation/runtime-configuration-rules.js +98 -0
  330. package/lib/validation/validate-display-dimensions.js +154 -0
  331. package/lib/validation/validate-display-sections.js +276 -0
  332. package/lib/validation/validate-display-steps.js +67 -0
  333. package/lib/validation/validate-display.js +24 -402
  334. package/package.json +1 -1
  335. package/templates/applications/dataplane/application.yaml +7 -1
  336. package/templates/applications/dataplane/env.template +50 -14
  337. package/templates/applications/dataplane/rbac.yaml +108 -1
  338. package/templates/applications/miso-controller/application.yaml +2 -2
  339. package/templates/applications/miso-controller/env.template +53 -122
  340. package/templates/applications/miso-controller/rbac.yaml +28 -13
  341. package/templates/channels/chatgpt/install.template.md.hbs +49 -0
  342. package/templates/channels/chatgpt/manifest.template.json.hbs +9 -0
  343. package/templates/channels/microsoft-copilot/install.template.md.hbs +49 -0
  344. package/templates/channels/microsoft-copilot/manifest.template.json.hbs +8 -0
  345. package/templates/channels/slack/install.template.md.hbs +49 -0
  346. package/templates/channels/slack/manifest.template.json.hbs +66 -0
  347. package/templates/channels/teams-bot/install.template.md.hbs +49 -0
  348. package/templates/channels/teams-bot/manifest.template.json.hbs +13 -0
  349. package/templates/channels/web-embed/install.template.md.hbs +49 -0
  350. package/templates/channels/web-embed/manifest.template.json.hbs +8 -0
  351. package/templates/external-system/README.md.hbs +74 -17
  352. package/templates/python/docker-compose.hbs +75 -18
  353. package/templates/typescript/docker-compose.hbs +70 -17
  354. package/lib/commands/test-governance-command-action.js +0 -55
  355. package/lib/commands/test-trust-command-action.js +0 -118
@@ -35,6 +35,16 @@ roles:
35
35
  description: "Read-only access to monitoring, logs, and compliance reports"
36
36
  groups: ["AI-Fabrix-Observers"]
37
37
 
38
+ - name: "AI Fabrix AI Trust Operator"
39
+ value: "aifabrix-ai-trust-operator"
40
+ description: "Run AI Trust access evaluation and explain visibility for governed users"
41
+ groups: ["AI-Fabrix-AI-Trust-Operators"]
42
+
43
+ - name: "AI Fabrix External System Discoverer"
44
+ value: "aifabrix-external-system-discoverer"
45
+ description: "Discover business context for external systems via REST and MCP"
46
+ groups: ["AI-Fabrix-External-System-Discoverers"]
47
+
38
48
  permissions:
39
49
  # Credential management
40
50
  - name: "credential:create"
@@ -281,9 +291,29 @@ permissions:
281
291
  roles: ["aifabrix-platform-admin", "aifabrix-security-admin", "aifabrix-deployment-admin", "aifabrix-compliance-admin", "aifabrix-developer", "aifabrix-observer"]
282
292
  description: "Search records"
283
293
 
294
+ - name: "external-system:discover"
295
+ roles:
296
+ [
297
+ "aifabrix-platform-admin",
298
+ "aifabrix-security-admin",
299
+ "aifabrix-developer",
300
+ "aifabrix-external-system-discoverer",
301
+ ]
302
+ description: "Discover business context (semantics, exposure, enabled governance, tools, validation state) for external systems"
303
+
284
304
  - name: "governance:evaluate"
285
305
  roles: ["aifabrix-platform-admin", "aifabrix-security-admin", "aifabrix-developer"]
286
306
  description: "Run governance scenario acceptance (subject impersonation for ABAC proof)"
307
+
308
+ - name: "ai-trust:evaluate"
309
+ roles:
310
+ [
311
+ "aifabrix-platform-admin",
312
+ "aifabrix-security-admin",
313
+ "aifabrix-developer",
314
+ "aifabrix-ai-trust-operator",
315
+ ]
316
+ description: "Use AI Trust workspace (list systems, sessions, evaluate access, explain visibility)"
287
317
 
288
318
  # IDE simulation operations
289
319
  - name: "dataplane:abac-simulate"
@@ -292,4 +322,81 @@ permissions:
292
322
 
293
323
  - name: "dataplane:rbac-simulate"
294
324
  roles: ["aifabrix-platform-admin", "aifabrix-security-admin", "aifabrix-developer"]
295
- description: "Simulate RBAC policy evaluation in IDE"
325
+ description: "Simulate RBAC policy evaluation in IDE"
326
+
327
+ # Digital Worker activation (438.1)
328
+ - name: "worker:read"
329
+ roles:
330
+ [
331
+ "aifabrix-platform-admin",
332
+ "aifabrix-security-admin",
333
+ "aifabrix-developer",
334
+ "aifabrix-ai-trust-operator",
335
+ ]
336
+ description: "List activatable Digital Workers and user activations"
337
+
338
+ - name: "worker:activate"
339
+ roles:
340
+ [
341
+ "aifabrix-platform-admin",
342
+ "aifabrix-developer",
343
+ "aifabrix-ai-trust-operator",
344
+ ]
345
+ description: "Activate a generated Digital Worker for the current user"
346
+
347
+ - name: "worker:update"
348
+ roles:
349
+ [
350
+ "aifabrix-platform-admin",
351
+ "aifabrix-developer",
352
+ "aifabrix-ai-trust-operator",
353
+ ]
354
+ description: "Update assistantName or preferredChannel on a user activation"
355
+
356
+ - name: "worker:archive"
357
+ roles:
358
+ [
359
+ "aifabrix-platform-admin",
360
+ "aifabrix-developer",
361
+ "aifabrix-ai-trust-operator",
362
+ ]
363
+ description: "Archive a user Digital Worker activation"
364
+
365
+ - name: "worker:approve"
366
+ roles:
367
+ [
368
+ "aifabrix-platform-admin",
369
+ "aifabrix-security-admin",
370
+ "aifabrix-ai-trust-operator",
371
+ ]
372
+ description: "Approve or reject pending worker tasks"
373
+
374
+ - name: "worker:manager-read"
375
+ roles:
376
+ [
377
+ "aifabrix-platform-admin",
378
+ "aifabrix-security-admin",
379
+ "aifabrix-ai-trust-operator",
380
+ ]
381
+ description: "Read manager-scoped workforce impact aggregates (no task detail)"
382
+
383
+ # Workforce subscriptions (436.11 / 438.6)
384
+ - name: "subscription:read"
385
+ roles:
386
+ [
387
+ "aifabrix-platform-admin",
388
+ "aifabrix-security-admin",
389
+ "aifabrix-developer",
390
+ "aifabrix-deployment-admin",
391
+ "aifabrix-observer",
392
+ ]
393
+ description: "List workforce subscriptions and execution audit rows"
394
+
395
+ - name: "subscription:run"
396
+ roles:
397
+ [
398
+ "aifabrix-platform-admin",
399
+ "aifabrix-developer",
400
+ "aifabrix-deployment-admin",
401
+ ]
402
+ description: "Manually run a workforce subscription task"
@@ -23,8 +23,6 @@ port: 3000
23
23
  frontDoorRouting:
24
24
  pattern: /miso/*
25
25
  enabled: true
26
- # Docker url://internal full URLs: http://miso-controller:PORT only (ingress /miso is not on in-container routes).
27
- internalDockerUseOriginOnly: false
28
26
  host: ${DEV_USERNAME}.${REMOTE_HOST}
29
27
  tls: ${TLS_ENABLED}
30
28
 
@@ -54,6 +52,8 @@ authentication:
54
52
  - aifabrix-user
55
53
 
56
54
  # Build Configuration
55
+ # Image policy (442.0): .dockerignore + explicit COPY; final image has dist/ + public/ only.
56
+ # No integration/, .cursor/, builder/, package src/, or markdown except /app/README.md.
57
57
  build:
58
58
  context: ../.. # Docker build context (relative to builder/miso-controller/)
59
59
  dockerfile: builder/miso-controller/Dockerfile # Dockerfile name (relative to project root)
@@ -15,8 +15,10 @@
15
15
  #
16
16
  # =============================================================================
17
17
 
18
- # Skip automatic first-time onboarding (default: false)
19
- # Set to true to disable automatic onboarding on first startup
18
+ # Skip automatic first-time bootstrap on controller startup (default: false).
19
+ # Bootstrap = DB controller row, Keycloak realm/client, admin user, roles (empty DB only).
20
+ # Keep false for normal dev — this is NOT the Azure tenant-activation UI wizard.
21
+ # Set true only for tests that must not mutate Keycloak/DB on startup.
20
22
  SKIP_FIRST_TIME_SETUP=false
21
23
 
22
24
  # Force onboarding to run even when a controller row already exists (default: unset/false).
@@ -43,8 +45,12 @@ ONBOARDING_ADMIN_PASSWORD=kv://miso-controller-admin-passwordKeyVault
43
45
  ONBOARDING_ADMIN_EMAIL=kv://miso-controller-admin-emailKeyVault
44
46
 
45
47
  # Create development environment during onboarding (default: false)
48
+ # Full platform: create miso, dev, tst, and pro during onboarding (default: false)
49
+ # When true, supersedes ONBOARDING_CREATE_DEV_ENV for which extra environments are created
50
+ ONBOARDING_FULL_PLATFORM=false
51
+
46
52
  # Set to true to create both miso and dev environments during onboarding
47
- # When false (default), only the miso environment is created
53
+ # When false (default), only the miso environment is created (ignored when ONBOARDING_FULL_PLATFORM=true)
48
54
  ONBOARDING_CREATE_DEV_ENV=true
49
55
 
50
56
  # =============================================================================
@@ -101,15 +107,16 @@ REDIS_PERMISSIONS_TTL=900
101
107
  # Connects to external Keycloak from aifabrix-setup.
102
108
  #
103
109
  # URL semantics:
104
- # KEYCLOAK_SERVER_URL = Public URL (browser, issuer, OAuth callbacks)
105
- # KEYCLOAK_INTERNAL_SERVER_URL = Internal URL (server-to-Keycloak HTTP only, e.g. Docker)
110
+ # KEYCLOAK_SERVER_URL = Public URL (browser, device-code verification URI for CLI, issuer, OAuth callbacks)
111
+ # KEYCLOAK_INTERNAL_SERVER_URL = Internal URL (controller→Keycloak HTTP in Docker; include /auth when Keycloak uses KC_HTTP_RELATIVE_PATH)
106
112
  #
107
113
  # Usage: Env vars are used for bootstrap/onboarding only. Runtime config comes from DB
108
114
  # (KeycloakConfiguration + Application url/internalUrl). Sync env->DB at startup via
109
115
  # sync-application-urls-from-env.service.
110
116
  #
111
- # NOTE: Do NOT onboard Azure Entra SSO in Keycloak during onboarding (skipAzureEntraSso=true).
112
- # KEYCLOAK_SKIP_AZURE_ENTRA_SSO=false
117
+ # After POST /api/ide/onboarding/entra-id/configure succeeds, controller adds Microsoft Entra IdP to stock Keycloak
118
+ # using the customer enterprise app (AI Fabrix Miso), not the vendor ENTRA_ID_CLIENT_ID app.
119
+ # After configure: Keycloak broker redirect is on the customer enterprise app (AI Fabrix Miso), not ENTRA_ID_CLIENT_ID.
113
120
 
114
121
  KEYCLOAK_REALM=aifabrix
115
122
  # Public issuer / browser URL (includes /auth when Keycloak uses KC_HTTP_RELATIVE_PATH=/auth).
@@ -167,6 +174,25 @@ MISO_CLIENTSECRET=kv://miso-controller-client-secretKeyVault
167
174
  # Unset = use DB only.
168
175
  CONTROLLER_EVALUATION=
169
176
 
177
+ # =============================================================================
178
+ # ENTRA ID ONBOARDING (vendor multi-tenant app — admin consent)
179
+ # =============================================================================
180
+ # AI Fabrix vendor app for TA-1 admin consent and Entra ID configure flows.
181
+ # Same ENTRA_ID_CLIENT_ID / ENTRA_ID_CLIENT_SECRET on every deployment.
182
+ # Customer SSO after configure uses a separate enterprise app (AI Fabrix Miso);
183
+ # Keycloak broker redirect is on that customer app, not ENTRA_ID_CLIENT_ID.
184
+ #
185
+ # ENTRA_ID_CENTRAL_CALLBACK_URI — Web redirect on the vendor app; must point at
186
+ # Mori (e.g. …/entra-id-concent/callback), not the SPA or controller.
187
+ # ENTRA_CALLBACK_STATE_SECRET — Shared HMAC secret (min 16 chars) for OAuth state
188
+ # between controller and Mori callback service; same value on Mori and controller.
189
+ #
190
+ # Delegated Graph (second redirect URI on the same vendor app): see section below.
191
+ ENTRA_CALLBACK_STATE_SECRET=kv://entra-callback-state-secret
192
+ ENTRA_ID_CENTRAL_CALLBACK_URI=kv://entra-callback-uri
193
+ ENTRA_ID_CLIENT_ID=kv://entra-client-idKeyVault
194
+ ENTRA_ID_CLIENT_SECRET=kv://entra-client-secretKeyVault
195
+
170
196
  # =============================================================================
171
197
  # TENANT ACTIVATION (TA-3) — EXISTING LLM CATALOG
172
198
  # =============================================================================
@@ -185,128 +211,27 @@ CONTROLLER_EVALUATION=
185
211
  # =============================================================================
186
212
 
187
213
  AZURE_SUBSCRIPTION_ID=kv://azure-subscription-idKeyVault
188
- AZURE_TENANT_ID=kv://azure-tenant-idKeyVault
214
+ TENANT_ID=kv://azure-tenant-idKeyVault
189
215
  AZURE_SERVICE_NAME=kv://azure-service-nameKeyVault
190
216
  AZURE_CLIENT_ID=kv://azure-client-idKeyVault
191
217
  AZURE_CLIENT_SECRET=kv://azure-client-secretKeyVault
192
218
 
219
+ # When true, environment infrastructure deploy skips the ai.azureOpenAI module (no new Cognitive Services account).
220
+ SKIP_AZURE_OPENAI=false
221
+
222
+ # When true, environment deploy skips Postgres ARM/KV updates if the flexible server already exists (marketplace redeploy).
223
+ SKIP_DB_REDEPLOY=true
224
+
193
225
  # =============================================================================
194
- # DEPLOYMENT TYPE CONFIGURATION
226
+ # DEPLOYMENT TYPE
195
227
  # =============================================================================
196
- # Controls deployment behavior for Azure, mock Azure, local Docker, or database-only deployments
197
- #
198
- # DEPLOYMENT types: azure, azure-mock, local, database
199
- #
200
- # -----------------------------------------------------------------------------
201
- # DEPLOYMENT=azure: Real Azure Operations (Production Mode)
202
- # -----------------------------------------------------------------------------
203
- # - Creates actual Azure resources (App Services, Databases, Key Vaults, etc.)
204
- # - Requires valid Azure credentials (AZURE_SUBSCRIPTION_ID, AZURE_TENANT_ID, etc.)
205
- # - Requires proper Azure RBAC permissions for resource creation
206
- # - Use for: Production deployments, staging environments, integration testing
207
- # - WARNING: This mode will create/modify/delete real Azure resources!
208
- #
209
- # -----------------------------------------------------------------------------
210
- # DEPLOYMENT=azure-mock: Mock Azure Operations (Development/Testing Mode)
211
- # -----------------------------------------------------------------------------
212
- # - Mocks Azure SDK operations (no real resources created)
213
- # - Azure SDK is initialized but operations return mock responses
214
- # - Useful for: Local development, unit testing, CI/CD pipelines
215
- # - No Azure credentials required (but can be set for SDK initialization)
216
- # - Faster than real Azure mode, but still initializes Azure SDK
217
- #
218
- # Example use cases:
219
- # - Testing deployment workflows without creating real resources
220
- # - Local development when you don't have Azure access
221
- # - CI/CD pipelines that need to test deployment logic
222
- #
223
- # -----------------------------------------------------------------------------
224
- # DEPLOYMENT=local: Local Docker Deployment (Localhost Controller)
225
- # -----------------------------------------------------------------------------
226
- # - Does NOT touch Azure at all (completely skips all Azure operations)
227
- # - Deploys applications as Docker containers on localhost (runs "docker run")
228
- # - Works with local PostgreSQL and Redis containers
229
- # - Fastest mode for local development (no Azure SDK overhead)
230
- # - No Azure SDK initialization (reduces startup time)
231
- # - Use for: Local development, testing, rapid iteration
232
- #
233
- # Example use cases:
234
- # - Local development and testing of applications
235
- # - Testing deployment workflows with actual containers
236
- # - Development when Azure SDK is not needed
237
- #
238
- # Requirements (controller must be able to run "docker" successfully):
239
- # - Docker must be installed and running where the controller runs
240
- # - Docker network (e.g. infra-<env>-aifabrix-network) must exist
241
- #
242
- # When miso-controller runs INSIDE a Docker container (e.g. aifabrix up-miso):
243
- # - The controller has no Docker CLI or host daemon by default, so deployments
244
- # will fail with "docker: not found" unless you either:
245
- # (A) Mount the host Docker socket and install Docker CLI in the controller
246
- # image (e.g. -v /var/run/docker.sock:/var/run/docker.sock and docker
247
- # client in the image), or
248
- # (B) Use DEPLOYMENT=database instead and start apps from the host, e.g.:
249
- # "aifabrix up-dataplane" (controller will only update DB; you run
250
- # dataplane/other apps via aifabrix on the host).
251
- # - Recommended when controller is in Docker: DEPLOYMENT=database and start
252
- # dataplane with "aifabrix up-dataplane" (see QUICK-START.md).
253
- #
254
- # -----------------------------------------------------------------------------
255
- # DEPLOYMENT=database: Database-Only Mode (DB Updates Only)
256
- # -----------------------------------------------------------------------------
257
- # - Performs only database operations (deployment/job/application records, RBAC sync)
258
- # - Does NOT run Docker containers (no container startup, health checks, port mapping)
259
- # - Does NOT use Azure SDK (no Azure SDK initialization overhead)
260
- # - Fastest mode for CI/CD pipelines that only need DB state validation
261
- # - Use for: Testing DB workflows, validating RBAC sync, testing deployment records
262
- #
263
- # Example use cases:
264
- # - CI/CD pipelines that validate deployment workflow without containers
265
- # - Testing RBAC sync logic without Docker/Azure dependencies
266
- # - Validating database schema changes and migrations
267
- # - Testing deployment job creation and status updates
268
- # - Fast validation of DB state changes
269
- #
270
- # What happens:
271
- # - Creates deployment job in database
272
- # - Updates deployment status (DEPLOYING → COMPLETED)
273
- # - Updates application record (status, version, repository URL)
274
- # - Syncs roles and permissions (RBAC)
275
- # - Marks deployment as completed
276
- # - Cleans up expired tokens
277
- # - Invalidates role/permission caches
278
- #
279
- # What does NOT happen:
280
- # - No Docker container execution
281
- # - No Azure SDK initialization
282
- # - No container URLs or health check URLs
283
- #
284
- # Requirements:
285
- # - Database connection (DATABASE_URL)
286
- # - No Docker required
287
- # - No Azure credentials required
288
- #
289
- # -----------------------------------------------------------------------------
290
- # Configuration Notes
291
- # -----------------------------------------------------------------------------
292
- # Default: azure (Real Azure) if not set or invalid value
293
- # Case insensitive: 'AZURE', 'azure', 'Azure' all work
294
- # Whitespace is trimmed
295
- #
296
- # Environment-specific recommendations:
297
- # - Production: DEPLOYMENT=azure
298
- # - Staging: DEPLOYMENT=azure
299
- # - Local Development: DEPLOYMENT=azure-mock or DEPLOYMENT=local
300
- # - CI/CD Testing: DEPLOYMENT=azure-mock or DEPLOYMENT=database
301
- # - Local Docker development: DEPLOYMENT=local
302
- # - DB-only validation/testing: DEPLOYMENT=database
303
- #
304
- # When to use each mode:
305
- # - Need to deploy to actual Azure resources? → DEPLOYMENT=azure
306
- # - Need to test deployment logic without creating resources? → DEPLOYMENT=azure-mock
307
- # - Want to run applications locally in Docker? → DEPLOYMENT=local
308
- # - Only need DB updates and RBAC sync (no containers/Azure)? → DEPLOYMENT=database
228
+ # azure — Real Azure resources + tenant activation wizard until completed
229
+ # azure-mock — Mock Azure SDK; dashboard after login (no wizard)
230
+ # local — Controller runs docker deploy; dashboard (no wizard)
231
+ # database — DB/RBAC only, no Docker from controller; dashboard (default dev)
309
232
  #
233
+ # Missing or invalid value defaults to azure (wizard + Azure credentials).
234
+ # Bootstrap (SKIP_FIRST_TIME_SETUP=false) is separate from the activation wizard.
310
235
  DEPLOYMENT=database
311
236
 
312
237
  # =============================================================================
@@ -348,6 +273,12 @@ LICENSE_JWT=DEVELOPMENT
348
273
  # ENTRA_GRAPH_DELEGATED_REDIRECT_URI=https://aifabrix001-mori-web-we.azurewebsites.net/entra-graph-delegated/callback
349
274
  ENTRA_GRAPH_DELEGATED_REDIRECT_URI=
350
275
 
276
+ # Optional delegated Graph scopes for GET …/graph-auth-url (space- or comma-separated).
277
+ # ENTRA_GRAPH_DELEGATED_SCOPES=https://graph.microsoft.com/Application.ReadWrite.All,https://graph.microsoft.com/Group.ReadWrite.All,https://graph.microsoft.com/Synchronization.ReadWrite.All,openid,profile,offline_access
278
+
279
+ # Dev only: log full delegated Graph JWT in general_log_* as delegatedGraphJwt (default off).
280
+ # LOG_GRAPH_TOKEN=true
281
+
351
282
  # =============================================================================
352
283
  # MORI SERVICE CONFIGURATION
353
284
  # =============================================================================
@@ -303,8 +303,23 @@ permissions:
303
303
  roles: ['aifabrix-platform-admin', 'aifabrix-security-admin']
304
304
  description: 'Delete dimensions and dimension values'
305
305
 
306
- # Token Delegation
307
- - name: 'delegation:link'
306
+ # Token Providers
307
+ - name: 'token-provider:read'
308
+ roles:
309
+ [
310
+ 'aifabrix-platform-admin',
311
+ 'aifabrix-security-admin',
312
+ 'aifabrix-deployment-admin',
313
+ 'aifabrix-observer'
314
+ ]
315
+ description: 'View token provider configurations'
316
+
317
+ - name: 'token-provider:write'
318
+ roles: ['aifabrix-platform-admin', 'aifabrix-security-admin']
319
+ description: 'Create, update, and delete token provider configurations'
320
+
321
+ # Provider Grants
322
+ - name: 'provider-grant:link'
308
323
  roles:
309
324
  [
310
325
  'aifabrix-platform-admin',
@@ -312,9 +327,9 @@ permissions:
312
327
  'aifabrix-deployment-admin',
313
328
  'aifabrix-developer'
314
329
  ]
315
- description: 'Link OAuth providers for token delegation'
330
+ description: 'Link OAuth providers for provider grants'
316
331
 
317
- - name: 'delegation:mint'
332
+ - name: 'provider-grant:mint'
318
333
  roles:
319
334
  [
320
335
  'aifabrix-platform-admin',
@@ -322,9 +337,9 @@ permissions:
322
337
  'aifabrix-deployment-admin',
323
338
  'aifabrix-developer'
324
339
  ]
325
- description: 'Mint delegated OAuth tokens for external API calls'
340
+ description: 'Mint OAuth tokens for granted provider access'
326
341
 
327
- - name: 'delegation:read'
342
+ - name: 'provider-grant:read'
328
343
  roles:
329
344
  [
330
345
  'aifabrix-platform-admin',
@@ -333,9 +348,9 @@ permissions:
333
348
  'aifabrix-developer',
334
349
  'aifabrix-observer'
335
350
  ]
336
- description: 'View delegated OAuth credentials'
351
+ description: 'View provider grants'
337
352
 
338
- - name: 'delegation:delete'
353
+ - name: 'provider-grant:delete'
339
354
  roles:
340
355
  [
341
356
  'aifabrix-platform-admin',
@@ -343,15 +358,15 @@ permissions:
343
358
  'aifabrix-deployment-admin',
344
359
  'aifabrix-developer'
345
360
  ]
346
- description: 'Revoke delegated OAuth credentials'
361
+ description: 'Revoke provider grants'
347
362
 
348
- - name: 'delegation:admin:read'
363
+ - name: 'provider-grant:admin:read'
349
364
  roles: ['aifabrix-platform-admin', 'aifabrix-security-admin']
350
- description: 'Administrative read access to all delegated credentials'
365
+ description: 'Administrative read access to all provider grants'
351
366
 
352
- - name: 'delegation:admin:delete'
367
+ - name: 'provider-grant:admin:delete'
353
368
  roles: ['aifabrix-platform-admin', 'aifabrix-security-admin']
354
- description: 'Administrative delete access to all delegated credentials'
369
+ description: 'Administrative delete access to all provider grants'
355
370
 
356
371
  # Onboarding
357
372
  - name: 'onboarding:read'
@@ -0,0 +1,49 @@
1
+ # {{appName}} — assistant channel install
2
+
3
+ {{appDescription}}
4
+
5
+ Environment: **{{environment}}** · Credential key: `{{credentialKey}}`
6
+
7
+ ## Platform callback URLs
8
+
9
+ Configure these in your Slack app, Teams bot registration, or platform admin console. Do not embed secrets in generated files — use AI Fabrix credential storage only.
10
+
11
+ {{#if eventsUrl}}
12
+ - **Events:** {{eventsUrl}}
13
+ {{/if}}
14
+ {{#if interactionUrl}}
15
+ - **Interactivity:** {{interactionUrl}}
16
+ {{/if}}
17
+ {{#if commandUrl}}
18
+ - **Slash commands:** {{commandUrl}}
19
+ {{/if}}
20
+ {{#if oauthCallbackUrl}}
21
+ - **OAuth redirect:** {{oauthCallbackUrl}}
22
+ {{/if}}
23
+ {{#if messagesUrl}}
24
+ - **Bot messages:** {{messagesUrl}}
25
+ {{/if}}
26
+ {{#if notificationsUrl}}
27
+ - **Notifications:** {{notificationsUrl}}
28
+ {{/if}}
29
+ {{#if botConfigUrl}}
30
+ - **Bot config:** {{botConfigUrl}}
31
+ {{/if}}
32
+
33
+ ## Assistant catalog
34
+
35
+ Runtime lists **assistants** available to each user from:
36
+
37
+ {{assistantCatalogUrl}}
38
+
39
+ ## After admin approval
40
+
41
+ ```bash
42
+ aifabrix app add-channel {{channelTarget}} --name "{{baseName}}"
43
+ ```
44
+
45
+ Optional validation:
46
+
47
+ ```bash
48
+ aifabrix app add-channel {{channelTarget}} --name "{{baseName}}" --probe
49
+ ```
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "{{appName}}",
3
+ "description": "{{appDescription}}",
4
+ "credentialKey": "{{credentialKey}}",
5
+ "openapiUrl": "{{openapiUrl}}",
6
+ "mcpUrl": "{{mcpUrl}}",
7
+ "actionsBaseUrl": "{{actionsBaseUrl}}",
8
+ "assistantCatalogUrl": "{{assistantCatalogUrl}}"
9
+ }
@@ -0,0 +1,49 @@
1
+ # {{appName}} — assistant channel install
2
+
3
+ {{appDescription}}
4
+
5
+ Environment: **{{environment}}** · Credential key: `{{credentialKey}}`
6
+
7
+ ## Platform callback URLs
8
+
9
+ Configure these in your Slack app, Teams bot registration, or platform admin console. Do not embed secrets in generated files — use AI Fabrix credential storage only.
10
+
11
+ {{#if eventsUrl}}
12
+ - **Events:** {{eventsUrl}}
13
+ {{/if}}
14
+ {{#if interactionUrl}}
15
+ - **Interactivity:** {{interactionUrl}}
16
+ {{/if}}
17
+ {{#if commandUrl}}
18
+ - **Slash commands:** {{commandUrl}}
19
+ {{/if}}
20
+ {{#if oauthCallbackUrl}}
21
+ - **OAuth redirect:** {{oauthCallbackUrl}}
22
+ {{/if}}
23
+ {{#if messagesUrl}}
24
+ - **Bot messages:** {{messagesUrl}}
25
+ {{/if}}
26
+ {{#if notificationsUrl}}
27
+ - **Notifications:** {{notificationsUrl}}
28
+ {{/if}}
29
+ {{#if botConfigUrl}}
30
+ - **Bot config:** {{botConfigUrl}}
31
+ {{/if}}
32
+
33
+ ## Assistant catalog
34
+
35
+ Runtime lists **assistants** available to each user from:
36
+
37
+ {{assistantCatalogUrl}}
38
+
39
+ ## After admin approval
40
+
41
+ ```bash
42
+ aifabrix app add-channel {{channelTarget}} --name "{{baseName}}"
43
+ ```
44
+
45
+ Optional validation:
46
+
47
+ ```bash
48
+ aifabrix app add-channel {{channelTarget}} --name "{{baseName}}" --probe
49
+ ```
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "{{appName}}",
3
+ "description": "{{appDescription}}",
4
+ "credentialKey": "{{credentialKey}}",
5
+ "openapiUrl": "{{openapiUrl}}",
6
+ "actionsBaseUrl": "{{actionsBaseUrl}}",
7
+ "assistantCatalogUrl": "{{assistantCatalogUrl}}"
8
+ }
@@ -0,0 +1,49 @@
1
+ # {{appName}} — assistant channel install
2
+
3
+ {{appDescription}}
4
+
5
+ Environment: **{{environment}}** · Credential key: `{{credentialKey}}`
6
+
7
+ ## Platform callback URLs
8
+
9
+ Configure these in your Slack app, Teams bot registration, or platform admin console. Do not embed secrets in generated files — use AI Fabrix credential storage only.
10
+
11
+ {{#if eventsUrl}}
12
+ - **Events:** {{eventsUrl}}
13
+ {{/if}}
14
+ {{#if interactionUrl}}
15
+ - **Interactivity:** {{interactionUrl}}
16
+ {{/if}}
17
+ {{#if commandUrl}}
18
+ - **Slash commands:** {{commandUrl}}
19
+ {{/if}}
20
+ {{#if oauthCallbackUrl}}
21
+ - **OAuth redirect:** {{oauthCallbackUrl}}
22
+ {{/if}}
23
+ {{#if messagesUrl}}
24
+ - **Bot messages:** {{messagesUrl}}
25
+ {{/if}}
26
+ {{#if notificationsUrl}}
27
+ - **Notifications:** {{notificationsUrl}}
28
+ {{/if}}
29
+ {{#if botConfigUrl}}
30
+ - **Bot config:** {{botConfigUrl}}
31
+ {{/if}}
32
+
33
+ ## Assistant catalog
34
+
35
+ Runtime lists **assistants** available to each user from:
36
+
37
+ {{assistantCatalogUrl}}
38
+
39
+ ## After admin approval
40
+
41
+ ```bash
42
+ aifabrix app add-channel {{channelTarget}} --name "{{baseName}}"
43
+ ```
44
+
45
+ Optional validation:
46
+
47
+ ```bash
48
+ aifabrix app add-channel {{channelTarget}} --name "{{baseName}}" --probe
49
+ ```