@aifabrix/builder 2.51.1 → 2.52.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/jest.isolated-projects.js +25 -2
  2. package/jest.projects.js +4 -1
  3. package/lib/api/datasources-extended.api.js +8 -8
  4. package/lib/api/keycloak.api.js +92 -0
  5. package/lib/api/token-providers.api.js +77 -0
  6. package/lib/api/types/keycloak.types.js +23 -0
  7. package/lib/api/types/token-providers.types.js +65 -0
  8. package/lib/app/down.js +16 -1
  9. package/lib/app/run-container-start.js +4 -0
  10. package/lib/app/run-deploy-job.js +135 -27
  11. package/lib/app/run-env-compose.js +32 -0
  12. package/lib/app/run-env-recovery.js +35 -0
  13. package/lib/app/run-helpers.js +5 -6
  14. package/lib/app/run.js +11 -3
  15. package/lib/channels/add-channel.js +126 -19
  16. package/lib/channels/approval-guides/chatgpt.js +12 -9
  17. package/lib/channels/approval-guides/microsoft-copilot.js +16 -12
  18. package/lib/channels/channel-add-ensure.js +128 -0
  19. package/lib/channels/channel-artifact-generator.js +11 -1
  20. package/lib/channels/channel-branding.js +94 -0
  21. package/lib/channels/channel-credential.js +8 -0
  22. package/lib/channels/channel-discovery.js +330 -0
  23. package/lib/channels/channel-external-system.js +1 -1
  24. package/lib/channels/channel-runtime-resolver.js +103 -14
  25. package/lib/channels/channel-status-display.js +7 -1
  26. package/lib/channels/channel-targets.js +18 -1
  27. package/lib/channels/chatgpt-runtime-contract.js +1 -1
  28. package/lib/channels/microsoft-copilot-channel-add.js +138 -0
  29. package/lib/channels/microsoft-copilot-entra-sso-form.js +180 -0
  30. package/lib/channels/microsoft-copilot-entra-sso.js +264 -0
  31. package/lib/channels/microsoft-copilot-icons.js +74 -0
  32. package/lib/channels/microsoft-copilot-limits.js +84 -0
  33. package/lib/channels/microsoft-copilot-package.js +130 -49
  34. package/lib/channels/microsoft-copilot-validate.js +197 -0
  35. package/lib/cli/index.js +2 -0
  36. package/lib/cli/infra-guided-footers.js +1 -1
  37. package/lib/cli/infra-guided-public-url-warn.js +55 -0
  38. package/lib/cli/infra-guided.js +78 -62
  39. package/lib/cli/setup-app.help.js +4 -0
  40. package/lib/cli/setup-app.test-commands.js +59 -28
  41. package/lib/cli/setup-external-system.js +50 -12
  42. package/lib/cli/setup-infra.js +31 -4
  43. package/lib/commands/channel-add-setup.js +35 -10
  44. package/lib/commands/channel.js +27 -12
  45. package/lib/commands/deploy-gate-orchestrator.js +3 -2
  46. package/lib/commands/governance-verify-external.js +2 -5
  47. package/lib/commands/integration-definition.js +158 -0
  48. package/lib/commands/lifecycle-external.js +14 -7
  49. package/lib/commands/repair-auth-apply.js +19 -5
  50. package/lib/commands/repair-datasource-sync-operations.js +4 -1
  51. package/lib/commands/role-assistant-test-output.js +200 -0
  52. package/lib/commands/role-assistant.js +131 -114
  53. package/lib/commands/test-governance-external.js +2 -5
  54. package/lib/commands/up-miso.js +61 -24
  55. package/lib/commands/upload-data-sync-finalize.js +20 -3
  56. package/lib/commands/verify-governance-external.js +2 -5
  57. package/lib/commands/verify-operations-external.js +2 -5
  58. package/lib/commands/verify-operations-step-plan.js +31 -0
  59. package/lib/commands/verify-trust-command-action.js +2 -5
  60. package/lib/datasource/capability/capability-resolve.js +15 -5
  61. package/lib/datasource/capability/copy-operations.js +14 -4
  62. package/lib/datasource/datasource-identifier.js +4 -3
  63. package/lib/datasource/integration-context.js +3 -3
  64. package/lib/datasource/resolve-app.js +90 -8
  65. package/lib/datasource/test-e2e.js +2 -2
  66. package/lib/datasource/unified-validation-run-body.js +15 -1
  67. package/lib/datasource/unified-validation-run-resolve.js +2 -2
  68. package/lib/external-system/deploy-helpers.js +9 -5
  69. package/lib/external-system/deploy.js +2 -1
  70. package/lib/external-system/test-system-level.js +21 -3
  71. package/lib/external-system/test.js +4 -4
  72. package/lib/generator/builders.js +9 -15
  73. package/lib/infrastructure/index.js +19 -4
  74. package/lib/integration-definition/apply.js +478 -0
  75. package/lib/integration-definition/canonical-json.js +51 -0
  76. package/lib/integration-definition/emit-suite-bid.js +94 -0
  77. package/lib/integration-definition/enrich-crm-field-mappings.js +240 -0
  78. package/lib/integration-definition/enrich-openapi-operations.js +434 -0
  79. package/lib/integration-definition/from-discovery.js +339 -0
  80. package/lib/integration-definition/hash.js +37 -0
  81. package/lib/integration-definition/index.js +37 -0
  82. package/lib/integration-definition/openapi-enrichment/hubspot-crm-companies.json +205 -0
  83. package/lib/integration-definition/resource-type-catalog.js +59 -0
  84. package/lib/integration-definition/system-kind-enum.js +40 -0
  85. package/lib/integration-definition/validate.js +148 -0
  86. package/lib/programmatic/builder-api-request.js +5 -1
  87. package/lib/programmatic/builder-help-governance.js +3 -2
  88. package/lib/programmatic/capability-registry.js +19 -0
  89. package/lib/programmatic/openapi-component-schemas.js +6 -1
  90. package/lib/programmatic/openapi-descriptions.js +40 -0
  91. package/lib/programmatic/openapi-envelope-examples.js +269 -0
  92. package/lib/programmatic/openapi-operation-bindings.js +45 -0
  93. package/lib/programmatic/openapi-request-schemas.js +14 -0
  94. package/lib/programmatic/openapi-result-schemas-overflow.js +101 -0
  95. package/lib/programmatic/openapi-result-schemas.js +46 -99
  96. package/lib/programmatic/openapi-schema-descriptions-core.js +7 -4
  97. package/lib/programmatic/openapi-schema-descriptions-help.js +1 -1
  98. package/lib/programmatic/openapi-schema-descriptions-operations.js +24 -0
  99. package/lib/programmatic/openapi-schema-helpers.js +9 -9
  100. package/lib/programmatic/openapi-spec.js +11 -1
  101. package/lib/programmatic/orchestration-openapi-meta.js +10 -0
  102. package/lib/programmatic/route-handler-map.js +29 -1
  103. package/lib/programmatic/run-channel-package.js +236 -0
  104. package/lib/programmatic/run-integration-definition.js +69 -0
  105. package/lib/role-assistant/knowledge-markdown-frontmatter.js +75 -0
  106. package/lib/role-assistant/knowledge-sync-logging.js +58 -0
  107. package/lib/role-assistant/knowledge-sync.js +104 -89
  108. package/lib/role-assistant/test-cases-bid.js +155 -0
  109. package/lib/role-assistant/test-cases-evaluate.js +9 -1
  110. package/lib/role-assistant/test-cases-honesty.js +24 -10
  111. package/lib/role-assistant/test-cases.js +28 -0
  112. package/lib/role-assistant/test-runner-bid-apply.js +122 -0
  113. package/lib/role-assistant/test-runner-bid-document.js +278 -0
  114. package/lib/role-assistant/test-runner-workhub-answers.js +289 -46
  115. package/lib/role-assistant/test-runner-workhub.js +121 -25
  116. package/lib/role-assistant/test-suite.js +119 -0
  117. package/lib/schema/application-schema.json +64 -32
  118. package/lib/schema/external-datasource.schema.json +103 -17
  119. package/lib/schema/external-system.schema.json +54 -3
  120. package/lib/schema/infra.parameter.yaml +0 -20
  121. package/lib/schema/integration-definition.schema.json +195 -0
  122. package/lib/utils/authentication-shape.js +6 -0
  123. package/lib/utils/certify-external-workspace.js +40 -0
  124. package/lib/utils/docker-build.js +3 -3
  125. package/lib/utils/docker-run-ephemeral.js +77 -17
  126. package/lib/utils/health-check-public-warn.js +31 -13
  127. package/lib/utils/health-check.js +11 -1
  128. package/lib/utils/help-builder.js +1 -0
  129. package/lib/utils/paths.js +13 -15
  130. package/lib/utils/promote-dev-docker-image.js +97 -18
  131. package/lib/utils/role-assistant-paths.js +76 -14
  132. package/lib/utils/transient-developer-id.js +28 -0
  133. package/lib/utils/upload-sync-options.js +7 -4
  134. package/lib/validation/reserved-system-key-prefixes.js +56 -0
  135. package/lib/validation/validate.js +54 -19
  136. package/package.json +1 -1
  137. package/scripts/pnpm/af.mjs +24 -9
  138. package/scripts/pnpm/help.mjs +1 -1
  139. package/templates/applications/builder-api/application.yaml +3 -3
  140. package/templates/applications/dataplane/application.yaml +5 -5
  141. package/templates/applications/dataplane/env.template +8 -7
  142. package/templates/applications/dataplane/rbac.yaml +10 -10
  143. package/templates/applications/keycloak/application.yaml +2 -2
  144. package/templates/applications/keycloak/env.template +5 -2
  145. package/templates/applications/miso-controller/application.yaml +25 -11
  146. package/templates/applications/miso-controller/env.template +24 -5
  147. package/templates/channels/README.md +11 -1
  148. package/templates/channels/brand/color-192.png +0 -0
  149. package/templates/channels/brand/dark/128.png +0 -0
  150. package/templates/channels/brand/dark/192.png +0 -0
  151. package/templates/channels/brand/dark/256.png +0 -0
  152. package/templates/channels/brand/dark/32.png +0 -0
  153. package/templates/channels/brand/dark/512.png +0 -0
  154. package/templates/channels/brand/dark/64.png +0 -0
  155. package/templates/channels/brand/light/128.png +0 -0
  156. package/templates/channels/brand/light/192.png +0 -0
  157. package/templates/channels/brand/light/256.png +0 -0
  158. package/templates/channels/brand/light/32.png +0 -0
  159. package/templates/channels/brand/light/512.png +0 -0
  160. package/templates/channels/brand/light/64.png +0 -0
  161. package/templates/channels/brand/mono-white/128.png +0 -0
  162. package/templates/channels/brand/mono-white/192.png +0 -0
  163. package/templates/channels/brand/mono-white/256.png +0 -0
  164. package/templates/channels/brand/mono-white/32.png +0 -0
  165. package/templates/channels/brand/mono-white/512.png +0 -0
  166. package/templates/channels/brand/mono-white/64.png +0 -0
  167. package/templates/channels/brand/outline-32.png +0 -0
  168. package/templates/channels/chatgpt/install.template.md.hbs +76 -36
  169. package/templates/channels/chatgpt/integration/README.md +4 -4
  170. package/templates/channels/chatgpt/integration/chatgpt-system.json +1 -16
  171. package/templates/channels/chatgpt/manifest.template.json.hbs +3 -3
  172. package/templates/channels/microsoft-copilot/ai-plugin.template.json.hbs +10 -16
  173. package/templates/channels/microsoft-copilot/declarative-agent.template.json.hbs +5 -3
  174. package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +27 -0
  175. package/templates/channels/microsoft-copilot/install.template.md.hbs +39 -20
  176. package/templates/channels/microsoft-copilot/integration/README.md +2 -3
  177. package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +1 -22
  178. package/templates/channels/microsoft-copilot/manifest.template.json.hbs +7 -7
  179. package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +11 -0
  180. package/templates/channels/slack/install.template.md.hbs +6 -1
  181. package/templates/channels/slack/integration/README.md +2 -4
  182. package/templates/channels/teams-bot/install.template.md.hbs +4 -0
  183. package/templates/channels/teams-bot/integration/README.md +3 -5
  184. package/templates/channels/web-embed/integration/web-embed-system.json +1 -16
  185. package/templates/python/docker-compose.hbs +10 -0
  186. package/templates/typescript/docker-compose.hbs +10 -0
  187. /package/.cursor/plans/{Done → Archive}/157.1-security-quality-violations-by-type.csv +0 -0
@@ -0,0 +1,27 @@
1
+ ## Microsoft Entra SSO registration (Teams Developer Portal)
2
+
3
+ Direct URL:
4
+
5
+ {{{entraSsoRegistrationUrl}}}
6
+
7
+ Open **Tools → Microsoft Entra SSO client ID registration → Register client ID** (or New).
8
+
9
+ ### Values to paste into the form
10
+
11
+ | Field | Value |
12
+ | --- | --- |
13
+ | Registration name | `{{appName}}` |
14
+ | Base URL | {{#if entraSsoBaseUrl}}`{{{entraSsoBaseUrl}}}`{{else}}*(missing — dataplane URL not resolved)*{{/if}} |
15
+ | Restrict usage by organization | My organization only (DEV) |
16
+ | Restrict usage by Teams app | Any Teams app (until the Teams app id is stable) |
17
+ | Client (application) ID | {{#if entraSsoClientId}}`{{entraSsoClientId}}`{{else}}*(missing — Entra SSO enterprise app (client) id from controller Keycloak status `entraIdentityProvider.enterpriseAppId`; complete Entra onboarding if empty)*{{/if}} |
18
+ | Scope | {{#if entraSsoScope}}`{{entraSsoScope}}`{{else}}*(missing — set Runtime MCP delegated scopes on Trust source `microsoft-entra-id` `allowedScopes`; not openid/profile alone)*{{/if}} |
19
+
20
+ ### Related (for your records)
21
+
22
+ {{#if mcpUrl}}- **Remote MCP URL (package):** `{{{mcpUrl}}}`{{/if}}
23
+ {{#if entraIssuer}}- **Entra issuer (Trust source):** `{{{entraIssuer}}}`{{/if}}
24
+ {{#if entraTenantId}}- **Tenant id:** `{{entraTenantId}}`{{/if}}
25
+ {{#if entraEnterpriseAppId}}- **Enterprise app id (Keycloak):** `{{entraEnterpriseAppId}}`{{/if}}
26
+
27
+ After Save, copy the **Microsoft Entra SSO registration ID** (auth config id). That value is `--oauth-plugin-vault-reference-id`.
@@ -2,9 +2,11 @@
2
2
 
3
3
  {{appDescription}}
4
4
 
5
- Environment: **{{environment}}** · Credential key: `{{credentialKey}}`
5
+ Environment: **{{environment}}**
6
6
 
7
- This channel output is a Microsoft 365 Copilot app package:
7
+ This channel uses **Microsoft Entra SSO** (trustedIssuer). Users already signed into
8
+ Microsoft 365 do **not** complete a separate AI Fabrix sign-in. Admin consent may still
9
+ apply for the Runtime MCP delegated scope.
8
10
 
9
11
  ```text
10
12
  dist/channels/microsoft-copilot/source/manifest.json
@@ -13,42 +15,59 @@ dist/channels/microsoft-copilot/source/ai-plugin.json
13
15
  dist/channels/microsoft-copilot/build/appPackage.{{environment}}.zip
14
16
  ```
15
17
 
16
- ## Microsoft admin workflow (manual)
18
+ ## Install in Microsoft Teams
17
19
 
18
- 1. Sign in to [Microsoft 365 admin](https://admin.cloud.microsoft.com/) or Copilot Studio as a tenant admin.
19
- 2. Upload or sideload `appPackage.{{environment}}.zip` to your organization app catalog.
20
- 3. Review the declarative agent + Remote MCP plugin metadata and approve tenant distribution.
21
- 4. Configure workspace authentication and consent according to your Entra/OAuth policy.
22
- 5. Store credential references in AI Fabrix authentication settings: [Authentication settings]({{credentialPortalUrl}})
23
- 6. Assign the app to users/groups and complete first-user sign-in.
20
+ 1. Open Microsoft Teams using your target Microsoft 365 account.
21
+ 2. Select **Apps → Manage your apps**.
22
+ 3. Select **Upload an app → Upload a custom app**.
23
+ 4. Upload `appPackage.{{environment}}.zip`.
24
+ 5. Review the requested permissions and select **Add**.
25
+ 6. Open **{{appName}}** from your installed apps.
26
+ 7. If prompted, complete **Entra / admin consent** for the Runtime MCP resource (not an AI Fabrix OAuth client login).
27
+
28
+ Upload only the ZIP package. Do not upload individual manifest files or `channel-microsoft-copilot.json`.
29
+
30
+ If **Upload a custom app** is unavailable, a Teams administrator must enable custom app uploads for your account in the Teams admin center or deploy the package centrally.
31
+
32
+ Do **not** configure AI Fabrix OAuth client secrets in Connected Systems → Authentication for this flow. Entra SSO uses the Teams OAuthPluginVault auth-config id.
24
33
 
25
34
  ## Runtime connection contract
26
35
 
27
36
  - **Runtime system key:** `{{runtimeSystemKey}}`
28
- - **Remote MCP URL:** `{{mcpUrl}}`
37
+ - **Remote MCP URL:** `{{{mcpUrl}}}`
29
38
  - **Transport:** `{{runtimeTransport}}`
30
- - **Auth mode:** `{{runtimeAuthMode}}`
31
- - **Layer B tools expected:**
39
+ - **Auth mode:** `{{runtimeAuthMode}}` (Entra SSO / trustedIssuer; controller exchanges the Microsoft user token)
40
+ - **Plugin auth:** `OAuthPluginVault` · Teams auth-config reference id `{{oauthPluginVaultReferenceId}}`
41
+ {{#if entraIssuer}}- **Entra issuer (from Trust source):** `{{{entraIssuer}}}`{{/if}}
42
+ - **Delegated scopes:** {{#each scopes}}`{{this}}` {{else}}*(missing — package not install-ready)*{{/each}}
43
+ - **Install ready:** {{#if installReady}}yes{{else}}no{{#if discoveryBlocker}} ({{discoveryBlocker}}){{/if}}{{/if}}
44
+ - **Governed tools expected:**
32
45
  {{#each layerBToolNames}}
33
46
  - `{{this}}`
34
47
  {{/each}}
35
48
 
49
+ {{> entraSsoRegistration}}
50
+
51
+ ## Package links
52
+
53
+ - README / install guide: `INSTALL.md`
54
+ - Package ZIP: `build/appPackage.{{environment}}.zip`
36
55
  ## Assistant catalog
37
56
 
38
- Runtime lists **assistants** available to each user from:
57
+ Runtime lists the assistants available to the signed-in user from:
39
58
 
40
- {{assistantCatalogUrl}}
59
+ {{{assistantCatalogUrl}}}
41
60
 
42
61
  ## Probe truthfulness
43
62
 
44
- - `builderValidated` means package files, ZIP, hashes, and secret checks passed.
45
- - `runtimeValidated` means Runtime MCP is reachable and tool boundary checks pass.
46
- - `requiresMicrosoftAdmin` remains true until tenant upload/approval/assignment is complete.
63
+ - `builderValidated` means package files, ZIP structure, hashes, and secret checks passed.
64
+ - `runtimeValidated` means Runtime MCP is reachable and its tool boundary checks passed.
65
+ - `requiresMicrosoftAdmin` means Microsoft-side installation or approval remains incomplete. A user may install the package directly when their Teams custom-app policy permits it; otherwise, Teams administrator action is required.
47
66
 
48
- ## Validate after admin setup
67
+ ## Validate after Teams installation
49
68
 
50
69
  ```bash
51
- aifabrix channel add {{channelTarget}} --name "{{baseName}}" --probe
70
+ aifabrix channel add {{channelTarget}} --name "{{baseName}}" --oauth-plugin-vault-reference-id "{{oauthPluginVaultReferenceId}}" --probe
52
71
  ```
53
72
 
54
- `--force` regenerates artifacts but does not rotate credentials.
73
+ `--force` regenerates the package artifacts. microsoft-copilot does not create Fabrix oauth2 channel credentials for Entra SSO.
@@ -5,9 +5,8 @@ Generated by `aifabrix channel scaffold microsoft-copilot`.
5
5
  Recommended flow:
6
6
 
7
7
  ```bash
8
- aifabrix upload microsoft-copilot --force
9
8
  aifabrix channel add microsoft-copilot --name "Your Assistant" --probe
10
9
  ```
11
10
 
12
- `channel add` generates package artifacts under
13
- `dist/channels/microsoft-copilot/` for Microsoft 365 tenant admins.
11
+ `channel add` scaffolds (if needed), uploads when missing (always with `--force`), then
12
+ generates package artifacts under `dist/channels/microsoft-copilot/` for Microsoft 365 tenant admins.
@@ -6,28 +6,7 @@
6
6
  "systemKind": "communication",
7
7
  "enabled": true,
8
8
  "authentication": {
9
- "authType": "credential",
10
- "credential": {
11
- "credentialKey": "microsoft-copilot-channel",
12
- "displayName": "Microsoft Copilot package channel",
13
- "method": "oauth2",
14
- "writeOnce": true,
15
- "variables": {
16
- "baseUrl": "https://login.microsoftonline.com",
17
- "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
18
- "tokenUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/token",
19
- "grantType": "authorization_code",
20
- "scope": "openid profile offline_access"
21
- },
22
- "security": {
23
- "clientId": "kv://microsoft-copilot/clientId",
24
- "clientSecret": "kv://microsoft-copilot/clientSecret"
25
- },
26
- "formFields": [
27
- { "name": "clientId", "required": true },
28
- { "name": "clientSecret", "required": true }
29
- ]
30
- }
9
+ "authType": "system"
31
10
  },
32
11
  "configuration": [],
33
12
  "dataSources": [],
@@ -4,18 +4,18 @@
4
4
  "version": "{{packageVersion}}",
5
5
  "id": "{{packageAppId}}",
6
6
  "name": {
7
- "short": "{{baseName}}",
8
- "full": "{{appName}}"
7
+ "short": "{{shortName}}",
8
+ "full": "{{fullName}}"
9
9
  },
10
10
  "description": {
11
- "short": "{{appDescription}}",
12
- "full": "{{appDescription}}"
11
+ "short": "{{shortDescription}}",
12
+ "full": "{{fullDescription}}"
13
13
  },
14
14
  "developer": {
15
15
  "name": "AI Fabrix",
16
- "websiteUrl": "{{dataplaneBaseUrl}}",
17
- "privacyUrl": "{{dataplaneBaseUrl}}/privacy",
18
- "termsOfUseUrl": "{{dataplaneBaseUrl}}/terms"
16
+ "websiteUrl": "{{{dataplaneBaseUrl}}}",
17
+ "privacyUrl": "{{{dataplaneBaseUrl}}}/privacy",
18
+ "termsOfUseUrl": "{{{dataplaneBaseUrl}}}/terms"
19
19
  },
20
20
  "icons": {
21
21
  "color": "color.png",
@@ -0,0 +1,11 @@
1
+ microsoft-copilot packaging requires `--oauth-plugin-vault-reference-id` with the Teams Entra SSO auth-config id.
2
+
3
+ Register Entra SSO in the Teams Developer Portal **before** packaging (no ZIP needed first), paste the values below, Save, then re-run with the registration id.
4
+
5
+ {{> entraSsoRegistration}}
6
+
7
+ Then:
8
+
9
+ ```bash
10
+ aifabrix channel add microsoft-copilot --name "{{baseName}}" --oauth-plugin-vault-reference-id "<Teams-Entra-SSO-registration-id>"
11
+ ```
@@ -17,7 +17,7 @@ One Slack app delivers **Role Assistant** chat, **Work hub** shortcuts, and **do
17
17
  5. Confirm **App Home → Messages tab** is **ON** in the manifest (required for bot DMs and proactive notifications; slash commands work without it).
18
18
  6. Click **Create**, then open **Install App** → **Install to Workspace** and approve.
19
19
  7. Copy **Bot User OAuth Token** and **Signing Secret** from the Slack app settings.
20
- 8. Save **Bot User OAuth Token** and **Signing Secret** in AI Fabrix: [Authentication settings]({{credentialPortalUrl}})
20
+ 8. Save **Bot User OAuth Token** and **Signing Secret** in AI Fabrix: [Authentication settings]({{{credentialPortalUrl}}})
21
21
 
22
22
  ## Platform callback URLs
23
23
 
@@ -32,6 +32,11 @@ Configure these in your Slack app if you edit settings manually. Do not embed se
32
32
  {{#if commandUrl}}
33
33
  - **Slash commands:** {{commandUrl}}
34
34
  {{/if}}
35
+ {{#if oauthCallbackUrl}}
36
+ - **OAuth Redirect URL:** {{oauthCallbackUrl}}
37
+ {{/if}}
38
+
39
+ Paste the **OAuth Redirect URL** into Slack app settings → **OAuth & Permissions** → **Redirect URLs** (required for Add to Slack / OAuth).
35
40
 
36
41
  Register these **V1** slash commands in the manifest (all use the same request URL):
37
42
 
@@ -30,9 +30,7 @@ Registered at `/api/v1/external/systems/slack/`:
30
30
  ## Workflow
31
31
 
32
32
  ```bash
33
- aifabrix channel scaffold slack # or use this folder as SSOT
34
- aifabrix upload slack --force
35
- aifabrix channel add slack --name "Your Assistant"
33
+ aifabrix channel add slack --name "Your Assistant" --probe
36
34
  ```
37
35
 
38
- Publish template changes: `make sync-json` in dataplane → `aifabrix-builder/templates/channels/slack/integration/`.
36
+ Optional low-level: `channel scaffold` / `upload`. Publish template changes: `make sync-json` in dataplane → `aifabrix-builder/templates/channels/slack/integration/`.
@@ -44,6 +44,10 @@ Users message the bot with:
44
44
 
45
45
  Review cards use **Approve**, **Reject**, and **Edit metadata** actions on the **Bot messages** endpoint. Proactive review notifications use the **Notifications** URL.
46
46
 
47
+ ## Authentication
48
+
49
+ Teams bot authentication uses a **Microsoft token**. AI Fabrix controller performs token exchange — generated package and INSTALL files carry public connection specs only (no secrets).
50
+
47
51
  ## Assistant catalog
48
52
 
49
53
  Runtime lists **assistants** available to each user from:
@@ -8,11 +8,9 @@ SSOT for Teams Bot Framework communication channel — **Role Assistants** and *
8
8
  - **Document approval:** `documents`, `document`, `approve`, `help` bot commands; review Adaptive Cards; proactive `/notifications`
9
9
 
10
10
  ```bash
11
- cd aifabrix-dataplane
12
- aifabrix validate teams-bot
13
- aifabrix upload teams-bot --probe
14
- aifabrix deploy teams-bot
15
- aifabrix channel add teams-bot --name "Your Assistant"
11
+ aifabrix channel add teams-bot --name "Your Assistant" --probe
16
12
  ```
17
13
 
14
+ Optional low-level (dataplane fixture tree): `validate` / `upload` / `deploy` before add.
15
+
18
16
  Authentication: oidc — prefilled discovery settings; operators add Microsoft App ID + client secret on Connected Systems → Authentication.
@@ -6,22 +6,7 @@
6
6
  "systemKind": "communication",
7
7
  "enabled": true,
8
8
  "authentication": {
9
- "authType": "credential",
10
- "credential": {
11
- "credentialKey": "web-embed-channel",
12
- "displayName": "Web embed assistant channel",
13
- "method": "apikey",
14
- "writeOnce": true,
15
- "variables": {
16
- "baseUrl": "https://embed.aifabrix.dev"
17
- },
18
- "security": {
19
- "apiKey": "kv://web-embed/apiKey"
20
- },
21
- "formFields": [
22
- { "name": "apiKey", "required": true }
23
- ]
24
- }
9
+ "authType": "system"
25
10
  },
26
11
  "configuration": [],
27
12
  "dataSources": [],
@@ -53,6 +53,10 @@ services:
53
53
  {{/if}}
54
54
  env_file:
55
55
  - {{envFile}}
56
+ {{#if devMountPath}}
57
+ # Bind-mount replaces /app and hides image ENTRYPOINT scripts (e.g. docker-entrypoint.sh).
58
+ entrypoint: []
59
+ {{/if}}
56
60
  {{#if reloadStartCommand}}
57
61
  command: ["sh", "-c", "cd /app && {{{reloadStartCommand}}}"]
58
62
  {{/if}}
@@ -111,6 +115,9 @@ services:
111
115
  - LOCAL_MODE=false
112
116
  env_file:
113
117
  - {{envFile}}
118
+ {{#if devMountPath}}
119
+ entrypoint: []
120
+ {{/if}}
114
121
  command: ["sh", "-c", "cd /app && {{{workerSidecars.worker.command}}}"]
115
122
  networks:
116
123
  - {{networkName}}
@@ -136,6 +143,9 @@ services:
136
143
  - LOCAL_MODE=false
137
144
  env_file:
138
145
  - {{envFile}}
146
+ {{#if devMountPath}}
147
+ entrypoint: []
148
+ {{/if}}
139
149
  command: ["sh", "-c", "cd /app && {{{workerSidecars.beat.command}}}"]
140
150
  networks:
141
151
  - {{networkName}}
@@ -53,6 +53,10 @@ services:
53
53
  {{/if}}
54
54
  env_file:
55
55
  - {{envFile}}
56
+ {{#if devMountPath}}
57
+ # Bind-mount replaces /app and hides image ENTRYPOINT scripts (e.g. docker-entrypoint.sh).
58
+ entrypoint: []
59
+ {{/if}}
56
60
  {{#if reloadStartCommand}}
57
61
  command: ["sh", "-c", "cd /app && {{reloadStartCommand}}"]
58
62
  {{/if}}
@@ -111,6 +115,9 @@ services:
111
115
  - LOCAL_MODE=false
112
116
  env_file:
113
117
  - {{envFile}}
118
+ {{#if devMountPath}}
119
+ entrypoint: []
120
+ {{/if}}
114
121
  command: ["sh", "-c", "cd /app && {{{workerSidecars.worker.command}}}"]
115
122
  networks:
116
123
  - {{networkName}}
@@ -134,6 +141,9 @@ services:
134
141
  - LOCAL_MODE=false
135
142
  env_file:
136
143
  - {{envFile}}
144
+ {{#if devMountPath}}
145
+ entrypoint: []
146
+ {{/if}}
137
147
  command: ["sh", "-c", "cd /app && {{{workerSidecars.beat.command}}}"]
138
148
  networks:
139
149
  - {{networkName}}