@aifabrix/builder 2.52.1 → 2.53.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/app/deploy-config.js +3 -2
- package/lib/channels/add-channel.js +11 -41
- package/lib/channels/approval-guides/index.js +3 -0
- package/lib/channels/approval-guides/microsoft-copilot.js +26 -17
- package/lib/channels/channel-add-existing.js +72 -0
- package/lib/channels/channel-runtime-resolver.js +5 -1
- package/lib/channels/channel-status-display.js +30 -3
- package/lib/channels/microsoft-copilot-entra-sso-form.js +73 -2
- package/lib/channels/microsoft-copilot-entra-sso.js +26 -5
- package/lib/channels/microsoft-copilot-limits.js +22 -3
- package/lib/channels/microsoft-copilot-package.js +59 -14
- package/lib/channels/microsoft-copilot-validate.js +40 -10
- package/lib/cli/attach-default-help-examples.js +102 -0
- package/lib/cli/index.js +2 -0
- package/lib/cli/setup-credential-deployment.js +7 -5
- package/lib/cli/setup-utility-validate.js +1 -0
- package/lib/commands/credential-push.js +37 -5
- package/lib/commands/package-score.js +72 -0
- package/lib/commands/role-assistant.js +46 -8
- package/lib/deployment/deployer-poll-run.js +2 -2
- package/lib/deployment/deployer.js +1 -1
- package/lib/deployment/environment.js +2 -2
- package/lib/external-system/deploy.js +11 -21
- package/lib/integration-definition/apply.js +12 -14
- package/lib/integration-definition/enrich-openapi-operations.js +9 -10
- package/lib/lab/package-parity-score.js +417 -0
- package/lib/programmatic/capability-registry.js +1 -0
- package/lib/programmatic/help-content/channel-onboarding.md +35 -0
- package/lib/programmatic/help-content/cip-overview.md +27 -0
- package/lib/programmatic/help-content/connected-system-ui.md +70 -0
- package/lib/programmatic/help-content/dimensions-guide.md +23 -0
- package/lib/programmatic/help-content/enterprise-sync-fabrix.md +123 -0
- package/lib/programmatic/help-content/overview.md +25 -0
- package/lib/programmatic/help-content/subscription-guide.md +27 -0
- package/lib/programmatic/help-content/workflow.md +50 -0
- package/lib/programmatic/openapi-component-schemas.js +1 -0
- package/lib/programmatic/openapi-descriptions.js +6 -0
- package/lib/programmatic/openapi-envelope-examples.js +11 -0
- package/lib/programmatic/openapi-operation-bindings.js +5 -0
- package/lib/programmatic/openapi-request-schemas.js +39 -13
- package/lib/programmatic/openapi-result-schemas.js +30 -0
- package/lib/programmatic/openapi-schema-descriptions-core.js +18 -0
- package/lib/programmatic/openapi-schema-descriptions-operations.js +19 -0
- package/lib/programmatic/persist-supplied-openapi.js +180 -0
- package/lib/programmatic/route-handler-map.js +6 -0
- package/lib/programmatic/run-integration-definition.js +13 -5
- package/lib/role-assistant/evidence-sync.js +55 -7
- package/lib/role-assistant/test-runner-attachments.js +118 -0
- package/lib/role-assistant/test-runner-bid-apply.js +100 -21
- package/lib/role-assistant/test-runner-bid-document.js +1 -1
- package/lib/role-assistant/test-runner-start-payload.js +96 -0
- package/lib/role-assistant/test-runner-workhub-answers.js +11 -7
- package/lib/role-assistant/test-runner-workhub-helpers.js +100 -0
- package/lib/role-assistant/test-runner-workhub-soft.js +86 -0
- package/lib/role-assistant/test-runner-workhub.js +68 -105
- package/lib/role-assistant/test-runner.js +5 -63
- package/lib/role-assistant/test-suite.js +33 -40
- package/lib/schema/external-datasource.schema.json +13 -4
- package/lib/utils/compose-generator.js +10 -1
- package/lib/utils/compose-traefik-extra-routes.js +107 -0
- package/lib/utils/docker-build.js +2 -2
- package/lib/utils/help-builder.js +2 -1
- package/lib/utils/promote-dev-docker-image.js +15 -10
- package/package.json +14 -16
- package/templates/README.md +12 -1
- package/templates/applications/dataplane/application.yaml +8 -1
- package/templates/applications/dataplane/env.template +1 -1
- package/templates/applications/miso-controller/application.yaml +2 -1
- package/templates/applications/miso-controller/rbac.yaml +1 -0
- package/templates/channels/microsoft-copilot/ai-plugin.template.json.hbs +6 -2
- package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +8 -5
- package/templates/channels/microsoft-copilot/fi-fi.template.json.hbs +7 -0
- package/templates/channels/microsoft-copilot/install.template.md.hbs +74 -22
- package/templates/channels/microsoft-copilot/manifest.template.json.hbs +29 -14
- package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +6 -2
- package/templates/python/docker-compose.hbs +36 -0
- package/templates/typescript/docker-compose.hbs +36 -0
- package/.cursor/plans/Archive/157.1-security-quality-violations-by-type.csv +0 -374
- package/.cursor/process/README.md +0 -9
- package/.cursor/rules/anchor-docs.mdc +0 -15
- package/.cursor/rules/assistant-driven-integration-build.mdc +0 -40
- package/.cursor/rules/cli-layout.mdc +0 -81
- package/.cursor/rules/cli-product-neutral.mdc +0 -43
- package/.cursor/rules/deploy-rules/docker-image-ip-policy.mdc +0 -49
- package/.cursor/rules/docs-rules.mdc +0 -32
- package/.cursor/rules/plan-rules/application-lifecycle.mdc +0 -30
- package/.cursor/rules/plan-rules/plan-frontmatter.mdc +0 -35
- package/.cursor/rules/plan-rules/plan-lifecycle.mdc +0 -31
- package/.cursor/rules/plan-rules/plan-validation-gate.mdc +0 -34
- package/.cursor/rules/project-rules.mdc +0 -913
- package/.cursor/skills/README.md +0 -15
- package/.dockerignore +0 -52
- package/.eslintignore +0 -22
- package/.markdownlint.json +0 -14
- package/anchor-docs/README.md +0 -10
- package/anchor-docs/_TEMPLATE +0 -24
- package/babel.config.js +0 -6
- package/bin/builder-api-cleanup.js +0 -26
- package/bin/builder-api-nest.js +0 -10
- package/bin/builder-api-spike.js +0 -19
- package/enterprise-knowledge/README.md +0 -50
- package/enterprise-knowledge/enterprise-integration-lifecycle/README.md +0 -22
- package/enterprise-knowledge/enterprise-integration-lifecycle/application.json +0 -15
- package/enterprise-knowledge/enterprise-integration-lifecycle/deploy.js +0 -69
- package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-deploy.json +0 -52
- package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-system.json +0 -29
- package/enterprise-knowledge/enterprise-integration-lifecycle/env.template +0 -2
- package/integration/README.md +0 -81
- package/integration/github/README.md +0 -53
- package/integration/github/application.json +0 -21
- package/integration/github/deploy.js +0 -72
- package/integration/github/env.template +0 -11
- package/integration/github/github-datasource-issue-comments.json +0 -239
- package/integration/github/github-datasource-issues.json +0 -399
- package/integration/github/github-datasource-repository.json +0 -354
- package/integration/github/github-deploy.json +0 -1202
- package/integration/github/github-system.json +0 -82
- package/integration/hubspot-test/README.md +0 -159
- package/integration/hubspot-test/application.json +0 -54
- package/integration/hubspot-test/companies.json +0 -2048
- package/integration/hubspot-test/create-hubspot.js +0 -523
- package/integration/hubspot-test/env.template +0 -4
- package/integration/hubspot-test/hubspot-test-datasource-company.json +0 -138
- package/integration/hubspot-test/hubspot-test-datasource-contact.json +0 -146
- package/integration/hubspot-test/hubspot-test-datasource-deal.json +0 -146
- package/integration/hubspot-test/hubspot-test-datasource-users.json +0 -76
- package/integration/hubspot-test/hubspot-test-deploy.json +0 -2160
- package/integration/hubspot-test/hubspot-test-system.json +0 -74
- package/integration/hubspot-test/rbac.json +0 -166
- package/integration/hubspot-test/test-artifacts/wizard-hubspot-credential-real.yaml +0 -20
- package/integration/hubspot-test/test-artifacts/wizard-hubspot-env-vars.yaml +0 -9
- package/integration/hubspot-test/test-artifacts/wizard-invalid-add-datasource.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-invalid-app-name.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-invalid-credential-create.yaml +0 -7
- package/integration/hubspot-test/test-artifacts/wizard-invalid-credential-select.yaml +0 -7
- package/integration/hubspot-test/test-artifacts/wizard-invalid-known-platform.yaml +0 -4
- package/integration/hubspot-test/test-artifacts/wizard-invalid-missing-app.yaml +0 -4
- package/integration/hubspot-test/test-artifacts/wizard-invalid-missing-source.yaml +0 -2
- package/integration/hubspot-test/test-artifacts/wizard-invalid-mode.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-invalid-openapi-file.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-invalid-openapi-url.yaml +0 -4
- package/integration/hubspot-test/test-artifacts/wizard-invalid-source.yaml +0 -4
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-array-test.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-key-test.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-path-test.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-test.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-rbac-test.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-rbac-yaml-test.yaml +0 -5
- package/integration/hubspot-test/test-dataplane-down-helpers.js +0 -249
- package/integration/hubspot-test/test-dataplane-down-tests.js +0 -386
- package/integration/hubspot-test/test-dataplane-down.js +0 -209
- package/integration/hubspot-test/test.js +0 -1588
- package/integration/hubspot-test/wizard-hubspot-e2e.yaml +0 -16
- package/integration/hubspot-test/wizard-hubspot-platform.yaml +0 -8
- package/integration/hubspot-test/wizard-hubspot-test-headless.yaml +0 -23
- package/integration/roundtrip-test-local/README.md +0 -143
- package/integration/roundtrip-test-local/application.yaml +0 -13
- package/integration/roundtrip-test-local/env.template +0 -15
- package/integration/roundtrip-test-local/roundtrip-test-local-datasource-roundtrip-test-company.yaml +0 -14
- package/integration/roundtrip-test-local/roundtrip-test-local-deploy.json +0 -61
- package/integration/roundtrip-test-local/roundtrip-test-local-system.yaml +0 -25
- package/integration/roundtrip-test-local2/README.md +0 -143
- package/integration/roundtrip-test-local2/application.yaml +0 -13
- package/integration/roundtrip-test-local2/env.template +0 -15
- package/integration/roundtrip-test-local2/roundtrip-test-local2-datasource-company.yaml +0 -31
- package/integration/roundtrip-test-local2/roundtrip-test-local2-deploy.json +0 -86
- package/integration/roundtrip-test-local2/roundtrip-test-local2-system.yaml +0 -25
- package/integration/test/wizard.yaml +0 -8
- package/jest.config.coverage.js +0 -37
- package/jest.config.default.js +0 -11
- package/jest.config.integration.fixtures.js +0 -22
- package/jest.config.integration.js +0 -33
- package/jest.config.isolated.js +0 -11
- package/jest.config.manual.js +0 -30
- package/jest.global-live-fabrix-hooks.js +0 -36
- package/jest.isolated-projects.js +0 -283
- package/jest.projects.js +0 -79
- package/lib/integration-definition/openapi-enrichment/hubspot-crm-companies.json +0 -205
- package/packages/builder-api/README.md +0 -120
- package/packages/builder-api/package.json +0 -30
- package/packages/builder-api/src/app.module.ts +0 -7
- package/packages/builder-api/src/auth/auth.module.ts +0 -5
- package/packages/builder-api/src/external-system/external-system.module.ts +0 -5
- package/packages/builder-api/src/main.ts +0 -16
- package/packages/builder-api/tsconfig.json +0 -15
- package/scripts/check-builder-api-architecture-grep.js +0 -79
- package/scripts/check-datasource-test-run-schema-sync.js +0 -34
- package/scripts/ci-fix.sh +0 -19
- package/scripts/ci-simulate.sh +0 -19
- package/scripts/diagnose-cli.js +0 -150
- package/scripts/docker_image_content_gate.js +0 -47
- package/scripts/docker_image_content_gate.sh +0 -5
- package/scripts/export-builder-api-evidence.js +0 -262
- package/scripts/install-local.js +0 -490
- package/scripts/lib/builder-api-docker-staging-copy.js +0 -60
- package/scripts/lib/builder-api-docker-staging-core.js +0 -183
- package/scripts/lib/docker-image-content-gate-core.js +0 -166
- package/scripts/lib/plan-actor.js +0 -109
- package/scripts/lib/plan-config.js +0 -20
- package/scripts/lib/plan-gates.js +0 -154
- package/scripts/lib/plan-meta.js +0 -104
- package/scripts/lib/plan-parse.js +0 -162
- package/scripts/lib/plan-prevalidate-gates.js +0 -337
- package/scripts/lib/plan-run-core.js +0 -125
- package/scripts/lib/plan-run-report.js +0 -119
- package/scripts/plan-approve.js +0 -24
- package/scripts/plan-archive.js +0 -49
- package/scripts/plan-run.js +0 -13
- package/scripts/plan-set-actor.js +0 -21
- package/scripts/plan-validate.js +0 -80
- package/scripts/pnpm/af.mjs +0 -125
- package/scripts/pnpm/check-quiet.mjs +0 -32
- package/scripts/pnpm/dev-install.mjs +0 -29
- package/scripts/pnpm/dev-reload.mjs +0 -18
- package/scripts/pnpm/help.mjs +0 -55
- package/scripts/pnpm/lib/dev-reload-core.mjs +0 -189
- package/scripts/pnpm/lib/dev-reload-log-capture.mjs +0 -67
- package/scripts/pnpm/lib/dev-reload-log-utils.mjs +0 -32
- package/scripts/pnpm/lib/resolve-aifabrix-bin.mjs +0 -124
- package/scripts/pnpm/lib/resolve-app-url.mjs +0 -183
- package/scripts/pnpm/lib/spinner.mjs +0 -42
- package/scripts/pnpm-global-remove.js +0 -48
- package/scripts/stage_builder_api_for_docker.js +0 -65
- package/scripts/sync-builder-api-template.js +0 -44
- package/scripts/test-dataplane-bootstrap.js +0 -331
|
@@ -12,24 +12,67 @@ apply for the Runtime MCP delegated scope.
|
|
|
12
12
|
dist/channels/microsoft-copilot/source/manifest.json
|
|
13
13
|
dist/channels/microsoft-copilot/source/declarativeAgent.json
|
|
14
14
|
dist/channels/microsoft-copilot/source/ai-plugin.json
|
|
15
|
+
dist/channels/microsoft-copilot/source/fi-fi.json
|
|
15
16
|
dist/channels/microsoft-copilot/build/appPackage.{{environment}}.zip
|
|
16
17
|
```
|
|
17
18
|
|
|
18
|
-
##
|
|
19
|
+
## Three Microsoft records (do not confuse)
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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).
|
|
21
|
+
| Record | What it is | Typical ID |
|
|
22
|
+
| --- | --- | --- |
|
|
23
|
+
| **Entra app registration** | Protects the Runtime MCP API. **Client (application) ID** from Entra / Keycloak Trust. | Entra Client (application) ID |
|
|
24
|
+
| **Teams Developer Portal app** | Package definition (`manifest.json.id`) and organisation publish request. | Teams app / manifest ID |
|
|
25
|
+
| **Teams admin centre catalogue** | Approval, availability, policy, published state. | Catalogue entry after org publish |
|
|
27
26
|
|
|
28
|
-
|
|
27
|
+
`--oauth-plugin-vault-reference-id` is the **Teams Entra SSO registration / auth-config ID** from Developer Portal Tools → Microsoft Entra SSO. It is **not** the Entra Client (application) ID and **not** a client secret.
|
|
29
28
|
|
|
30
|
-
|
|
29
|
+
Do **not** configure AI Fabrix OAuth client secrets under Connected Systems → Authentication for this Entra SSO flow.
|
|
31
30
|
|
|
32
|
-
|
|
31
|
+
## Package prerequisites (before Import)
|
|
32
|
+
|
|
33
|
+
1. Generate the channel package with `aifabrix channel add microsoft-copilot`.
|
|
34
|
+
2. Configure Microsoft Entra SSO: **Tools → Microsoft Entra SSO client ID registration** (see table below). Copy the generated registration / auth-config ID.
|
|
35
|
+
3. Re-run packaging so `ai-plugin.json` gets `auth.type = OAuthPluginVault` and `auth.reference_id = <auth-config-id>`:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
aifabrix channel add microsoft-copilot --name "{{baseName}}" --oauth-plugin-vault-reference-id "<auth-config-id>"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Keep any `webApplicationInfo` the portal binds for Entra SSO — do not strip it on re-import.
|
|
42
|
+
|
|
43
|
+
Upload **only** the ZIP package. Do not upload individual source files or `channel-microsoft-copilot.json`.
|
|
44
|
+
|
|
45
|
+
## Install and publish
|
|
46
|
+
|
|
47
|
+
1. Open [Teams Developer Portal](https://dev.teams.microsoft.com/).
|
|
48
|
+
2. Click **Import an app** → import `appPackage.{{environment}}.zip`. Preserve the generated stable `manifest.json.id`. Do not create an unrelated new Teams app.
|
|
49
|
+
3. Developer Portal → selected app → **Publish to your org** → Distribute / submit.
|
|
50
|
+
4. Teams admin approves in [Teams admin centre → Manage apps](https://admin.teams.microsoft.com/policies/manage-apps) (Manage apps → search → allow). Expect **Published** / **Unblocked** per organisation policy. Allow several minutes for propagation.
|
|
51
|
+
5. Open **Teams** → **Apps** (**Built for your org**), click **{{appName}}**, **Add** the application, then choose **Open with Copilot**.
|
|
52
|
+
6. In Copilot, click **Show my role assistants** and run the command.
|
|
53
|
+
7. Confirm Runtime MCP and governed tools using this guide, then re-run with `--probe` after organisation publish:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
aifabrix channel add {{channelTarget}} --name "{{baseName}}" --oauth-plugin-vault-reference-id "{{{oauthPluginVaultReferenceId}}}" --probe
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
8. After the app is available under **Built for your org**, re-run:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
aifabrix channel add {{channelTarget}} --name "{{appName}}"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
This is a **tenant-private organisation publish**. Microsoft Store app validation is not the Runtime/MCP functional test for this integration.
|
|
66
|
+
|
|
67
|
+
Do **not** use Developer Portal **Preview in Teams** as the normal organisation installation test (it sideloads and may be blocked by tenant policy).
|
|
68
|
+
|
|
69
|
+
### Optional sideloading for development
|
|
70
|
+
|
|
71
|
+
Use **Upload a custom app** or **Preview in Teams** only if tenant policy permits custom app uploads. Sideloading is **not** required for central organisation publishing. A policy failure such as “Uploading custom apps is not allowed” does **not** mean the organisation-published package is invalid.
|
|
72
|
+
|
|
73
|
+
## Activate languages
|
|
74
|
+
|
|
75
|
+
The package includes `localizationInfo` with **en-us** (default) and **fi-fi** (`fi-fi.json`). After import in Developer Portal, open the app → **Languages** (or localization) and **activate** additional languages you need for the organisation. Re-import an updated ZIP if you regenerate translations.
|
|
33
76
|
|
|
34
77
|
## Runtime connection contract
|
|
35
78
|
|
|
@@ -37,10 +80,11 @@ Do **not** configure AI Fabrix OAuth client secrets in Connected Systems → Aut
|
|
|
37
80
|
- **Remote MCP URL:** `{{{mcpUrl}}}`
|
|
38
81
|
- **Transport:** `{{runtimeTransport}}`
|
|
39
82
|
- **Auth mode:** `{{runtimeAuthMode}}` (Entra SSO / trustedIssuer; controller exchanges the Microsoft user token)
|
|
40
|
-
- **Plugin auth:** `OAuthPluginVault` · Teams auth-config reference id `{{oauthPluginVaultReferenceId}}`
|
|
83
|
+
- **Plugin auth:** `OAuthPluginVault` · Teams auth-config reference id `{{{oauthPluginVaultReferenceId}}}`
|
|
41
84
|
{{#if entraIssuer}}- **Entra issuer (from Trust source):** `{{{entraIssuer}}}`{{/if}}
|
|
42
|
-
- **Delegated scopes:** {{#each scopes}}`{{this}}` {{else}}*(
|
|
43
|
-
- **
|
|
85
|
+
- **Delegated scopes:** {{#if entraSsoScope}}`{{entraSsoScope}}`{{else}}{{#each scopes}}`{{this}}` {{else}}*(set Runtime MCP delegated scopes on Trust source `microsoft-entra-id` `allowedScopes` — not openid/profile alone)*{{/each}}{{/if}}
|
|
86
|
+
- **Package / Runtime ready:** {{#if packageReady}}yes{{else}}no{{#if packageBlocker}} ({{packageBlocker}}){{/if}}{{/if}}
|
|
87
|
+
- **Microsoft publication:** {{#if microsoftPublicationPending}}pending — Developer Portal import → Publish to your org → Teams admin approval{{else}}cleared{{/if}}
|
|
44
88
|
- **Governed tools expected:**
|
|
45
89
|
{{#each layerBToolNames}}
|
|
46
90
|
- `{{this}}`
|
|
@@ -52,6 +96,7 @@ Do **not** configure AI Fabrix OAuth client secrets in Connected Systems → Aut
|
|
|
52
96
|
|
|
53
97
|
- README / install guide: `INSTALL.md`
|
|
54
98
|
- Package ZIP: `build/appPackage.{{environment}}.zip`
|
|
99
|
+
|
|
55
100
|
## Assistant catalog
|
|
56
101
|
|
|
57
102
|
Runtime lists the assistants available to the signed-in user from:
|
|
@@ -60,14 +105,21 @@ Runtime lists the assistants available to the signed-in user from:
|
|
|
60
105
|
|
|
61
106
|
## Probe truthfulness
|
|
62
107
|
|
|
63
|
-
- `builderValidated`
|
|
64
|
-
- `runtimeValidated`
|
|
65
|
-
- `requiresMicrosoftAdmin`
|
|
108
|
+
- `builderValidated` — package files, ZIP structure, hashes, and secret checks passed.
|
|
109
|
+
- `runtimeValidated` — Runtime MCP is reachable and tool-boundary checks passed.
|
|
110
|
+
- `requiresMicrosoftAdmin` — organisation publish / Teams admin approval is still pending. This is **not** a sideload requirement and is separate from package/Runtime readiness.
|
|
66
111
|
|
|
67
|
-
|
|
112
|
+
`--force` regenerates the package artifacts. microsoft-copilot does not create Fabrix oauth2 channel credentials for Entra SSO.
|
|
68
113
|
|
|
69
|
-
|
|
70
|
-
aifabrix channel add {{channelTarget}} --name "{{baseName}}" --oauth-plugin-vault-reference-id "{{oauthPluginVaultReferenceId}}" --probe
|
|
71
|
-
```
|
|
114
|
+
## Delete / remove from the organisation
|
|
72
115
|
|
|
73
|
-
|
|
116
|
+
Use this when replacing the app, cleaning a failed publish, or removing **{{appName}}** entirely. Delete in this order so catalogue and Developer Portal records stay consistent.
|
|
117
|
+
|
|
118
|
+
1. Open [Teams admin centre → Manage apps](https://admin.teams.microsoft.com/policies/manage-apps).
|
|
119
|
+
2. Search for **{{appName}}**, open the app, open the action menu, choose **Delete**, and confirm.
|
|
120
|
+
3. Open [Teams Developer Portal → Apps](https://dev.teams.microsoft.com/apps).
|
|
121
|
+
4. Find the app in the list, open **…** (Actions) → **Delete**, and confirm by typing the app name.
|
|
122
|
+
5. Open [Microsoft Entra SSO client ID registration](https://dev.teams.microsoft.com/tools/entra-configuration).
|
|
123
|
+
6. Find the registration for this channel (same registration / auth-config used as `--oauth-plugin-vault-reference-id`), open **…** (Actions) → **Delete**, and confirm.
|
|
124
|
+
|
|
125
|
+
After Microsoft cleanup, delete local package output if needed (`dist/channels/microsoft-copilot/`) and re-run `aifabrix channel add` with a **new** Entra SSO registration / auth-config ID. Do not reuse a deleted registration id.
|
|
@@ -1,36 +1,51 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "https://developer.microsoft.com/json-schemas/teams/v1.
|
|
3
|
-
"manifestVersion": "1.21",
|
|
2
|
+
"$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.27/MicrosoftTeams.schema.json",
|
|
4
3
|
"version": "{{packageVersion}}",
|
|
4
|
+
"manifestVersion": "1.27",
|
|
5
5
|
"id": "{{packageAppId}}",
|
|
6
6
|
"name": {
|
|
7
7
|
"short": "{{shortName}}",
|
|
8
8
|
"full": "{{fullName}}"
|
|
9
9
|
},
|
|
10
|
-
"description": {
|
|
11
|
-
"short": "{{shortDescription}}",
|
|
12
|
-
"full": "{{fullDescription}}"
|
|
13
|
-
},
|
|
14
10
|
"developer": {
|
|
15
11
|
"name": "AI Fabrix",
|
|
16
12
|
"websiteUrl": "{{{dataplaneBaseUrl}}}",
|
|
17
13
|
"privacyUrl": "{{{dataplaneBaseUrl}}}/privacy",
|
|
18
14
|
"termsOfUseUrl": "{{{dataplaneBaseUrl}}}/terms"
|
|
19
15
|
},
|
|
16
|
+
"description": {
|
|
17
|
+
"short": "{{shortDescription}}",
|
|
18
|
+
"full": "{{fullDescription}}"
|
|
19
|
+
},
|
|
20
20
|
"icons": {
|
|
21
|
-
"
|
|
22
|
-
"
|
|
21
|
+
"outline": "outline.png",
|
|
22
|
+
"color": "color.png"
|
|
23
23
|
},
|
|
24
24
|
"accentColor": "#0F172A",
|
|
25
|
+
"validDomains": [
|
|
26
|
+
"{{runtimeDomain}}"
|
|
27
|
+
],
|
|
28
|
+
{{#if webApplicationInfoId}}
|
|
29
|
+
"webApplicationInfo": {
|
|
30
|
+
"id": "{{webApplicationInfoId}}",
|
|
31
|
+
"resource": "{{{webApplicationInfoResource}}}"
|
|
32
|
+
},
|
|
33
|
+
{{/if}}
|
|
34
|
+
"localizationInfo": {
|
|
35
|
+
"defaultLanguageTag": "en-us",
|
|
36
|
+
"additionalLanguages": [
|
|
37
|
+
{
|
|
38
|
+
"languageTag": "fi-fi",
|
|
39
|
+
"file": "fi-fi.json"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
},
|
|
25
43
|
"copilotAgents": {
|
|
26
44
|
"declarativeAgents": [
|
|
27
45
|
{
|
|
28
|
-
"
|
|
29
|
-
"
|
|
46
|
+
"file": "declarativeAgent.json",
|
|
47
|
+
"id": "{{packageAppId}}-agent"
|
|
30
48
|
}
|
|
31
49
|
]
|
|
32
|
-
}
|
|
33
|
-
"validDomains": [
|
|
34
|
-
"{{runtimeDomain}}"
|
|
35
|
-
]
|
|
50
|
+
}
|
|
36
51
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
microsoft-copilot packaging requires `--oauth-plugin-vault-reference-id` with the Teams Entra SSO auth-config
|
|
1
|
+
microsoft-copilot packaging requires `--oauth-plugin-vault-reference-id` with the Teams Entra SSO **registration / auth-config ID**.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
That value is **not** the Entra Client (application) ID and **not** a client secret.
|
|
4
|
+
|
|
5
|
+
Register Entra SSO in the Teams Developer Portal **before** packaging (no ZIP needed first): paste the values below, Save, copy the registration id, then re-run.
|
|
4
6
|
|
|
5
7
|
{{> entraSsoRegistration}}
|
|
6
8
|
|
|
@@ -9,3 +11,5 @@ Then:
|
|
|
9
11
|
```bash
|
|
10
12
|
aifabrix channel add microsoft-copilot --name "{{baseName}}" --oauth-plugin-vault-reference-id "<Teams-Entra-SSO-registration-id>"
|
|
11
13
|
```
|
|
14
|
+
|
|
15
|
+
Next: Developer Portal → Apps → Import app (`appPackage.<env>.zip`) → Publish to your org → Teams admin centre approval. Sideloading is optional and not the organisation path.
|
|
@@ -39,6 +39,42 @@ services:
|
|
|
39
39
|
- "traefik.http.routers.{{app.key}}.middlewares={{app.key}}-stripprefix"
|
|
40
40
|
{{/if}}
|
|
41
41
|
{{/unless}}
|
|
42
|
+
{{#each traefik.passThroughRouters}}
|
|
43
|
+
{{#if ../traefik.tls}}
|
|
44
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.rule=Host(`{{../traefik.host}}`) && PathPrefix(`{{this.pathPrefix}}`)"
|
|
45
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.entrypoints=websecure"
|
|
46
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.tls=true"
|
|
47
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.service={{../app.key}}"
|
|
48
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.priority=200"
|
|
49
|
+
{{#if ../traefik.certStore}}
|
|
50
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.tls.certstore={{../traefik.certStore}}"
|
|
51
|
+
{{/if}}
|
|
52
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}-http.rule=Host(`{{../traefik.host}}`) && PathPrefix(`{{this.pathPrefix}}`)"
|
|
53
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}-http.entrypoints=web"
|
|
54
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}-http.service={{../app.key}}"
|
|
55
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}-http.priority=200"
|
|
56
|
+
{{else}}
|
|
57
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.rule=Host(`{{../traefik.host}}`) && PathPrefix(`{{this.pathPrefix}}`)"
|
|
58
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.entrypoints=web"
|
|
59
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.service={{../app.key}}"
|
|
60
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.priority=200"
|
|
61
|
+
{{/if}}
|
|
62
|
+
{{/each}}
|
|
63
|
+
{{#unless (eq traefik.path "/")}}
|
|
64
|
+
{{#each traefik.aliasRouters}}
|
|
65
|
+
- "traefik.http.middlewares.{{../app.key}}-alias-{{this.id}}-rw.replacepathregex.regex=^{{this.rewriteSource}}(/.*)?$"
|
|
66
|
+
- "traefik.http.middlewares.{{../app.key}}-alias-{{this.id}}-rw.replacepathregex.replacement={{this.rewriteDest}}$1"
|
|
67
|
+
{{#if this.stripPrimary}}
|
|
68
|
+
- "traefik.http.routers.{{../app.key}}-alias-{{this.id}}.middlewares={{../app.key}}-alias-{{this.id}}-rw,{{../app.key}}-stripprefix"
|
|
69
|
+
{{else}}
|
|
70
|
+
- "traefik.http.routers.{{../app.key}}-alias-{{this.id}}.middlewares={{../app.key}}-alias-{{this.id}}-rw"
|
|
71
|
+
{{/if}}
|
|
72
|
+
- "traefik.http.routers.{{../app.key}}-alias-{{this.id}}.rule=Host(`{{../traefik.host}}`) && PathPrefix(`{{this.pathPrefix}}`)"
|
|
73
|
+
- "traefik.http.routers.{{../app.key}}-alias-{{this.id}}.entrypoints=web"
|
|
74
|
+
- "traefik.http.routers.{{../app.key}}-alias-{{this.id}}.service={{../app.key}}"
|
|
75
|
+
- "traefik.http.routers.{{../app.key}}-alias-{{this.id}}.priority=200"
|
|
76
|
+
{{/each}}
|
|
77
|
+
{{/unless}}
|
|
42
78
|
{{/if}}
|
|
43
79
|
environment:
|
|
44
80
|
- MISO_ENVIRONMENT={{misoEnvironment}}
|
|
@@ -39,6 +39,42 @@ services:
|
|
|
39
39
|
- "traefik.http.routers.{{app.key}}.middlewares={{app.key}}-stripprefix"
|
|
40
40
|
{{/if}}
|
|
41
41
|
{{/unless}}
|
|
42
|
+
{{#each traefik.passThroughRouters}}
|
|
43
|
+
{{#if ../traefik.tls}}
|
|
44
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.rule=Host(`{{../traefik.host}}`) && PathPrefix(`{{this.pathPrefix}}`)"
|
|
45
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.entrypoints=websecure"
|
|
46
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.tls=true"
|
|
47
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.service={{../app.key}}"
|
|
48
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.priority=200"
|
|
49
|
+
{{#if ../traefik.certStore}}
|
|
50
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.tls.certstore={{../traefik.certStore}}"
|
|
51
|
+
{{/if}}
|
|
52
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}-http.rule=Host(`{{../traefik.host}}`) && PathPrefix(`{{this.pathPrefix}}`)"
|
|
53
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}-http.entrypoints=web"
|
|
54
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}-http.service={{../app.key}}"
|
|
55
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}-http.priority=200"
|
|
56
|
+
{{else}}
|
|
57
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.rule=Host(`{{../traefik.host}}`) && PathPrefix(`{{this.pathPrefix}}`)"
|
|
58
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.entrypoints=web"
|
|
59
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.service={{../app.key}}"
|
|
60
|
+
- "traefik.http.routers.{{../app.key}}-pass-{{this.id}}.priority=200"
|
|
61
|
+
{{/if}}
|
|
62
|
+
{{/each}}
|
|
63
|
+
{{#unless (eq traefik.path "/")}}
|
|
64
|
+
{{#each traefik.aliasRouters}}
|
|
65
|
+
- "traefik.http.middlewares.{{../app.key}}-alias-{{this.id}}-rw.replacepathregex.regex=^{{this.rewriteSource}}(/.*)?$"
|
|
66
|
+
- "traefik.http.middlewares.{{../app.key}}-alias-{{this.id}}-rw.replacepathregex.replacement={{this.rewriteDest}}$1"
|
|
67
|
+
{{#if this.stripPrimary}}
|
|
68
|
+
- "traefik.http.routers.{{../app.key}}-alias-{{this.id}}.middlewares={{../app.key}}-alias-{{this.id}}-rw,{{../app.key}}-stripprefix"
|
|
69
|
+
{{else}}
|
|
70
|
+
- "traefik.http.routers.{{../app.key}}-alias-{{this.id}}.middlewares={{../app.key}}-alias-{{this.id}}-rw"
|
|
71
|
+
{{/if}}
|
|
72
|
+
- "traefik.http.routers.{{../app.key}}-alias-{{this.id}}.rule=Host(`{{../traefik.host}}`) && PathPrefix(`{{this.pathPrefix}}`)"
|
|
73
|
+
- "traefik.http.routers.{{../app.key}}-alias-{{this.id}}.entrypoints=web"
|
|
74
|
+
- "traefik.http.routers.{{../app.key}}-alias-{{this.id}}.service={{../app.key}}"
|
|
75
|
+
- "traefik.http.routers.{{../app.key}}-alias-{{this.id}}.priority=200"
|
|
76
|
+
{{/each}}
|
|
77
|
+
{{/unless}}
|
|
42
78
|
{{/if}}
|
|
43
79
|
environment:
|
|
44
80
|
- MISO_ENVIRONMENT={{misoEnvironment}}
|