@aifabrix/builder 2.54.1 → 2.55.2
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/README.md +8 -0
- package/lib/agent-kit/apply-ops.js +82 -0
- package/lib/agent-kit/checksums.js +28 -0
- package/lib/agent-kit/classify.js +113 -0
- package/lib/agent-kit/claude-shim.js +61 -0
- package/lib/agent-kit/constants.js +55 -0
- package/lib/agent-kit/file-list.js +103 -0
- package/lib/agent-kit/host-approve.js +172 -0
- package/lib/agent-kit/hosting/github.js +63 -0
- package/lib/agent-kit/hosts.js +71 -0
- package/lib/agent-kit/init.js +319 -0
- package/lib/agent-kit/kit-root.js +17 -0
- package/lib/agent-kit/managed-section.js +79 -0
- package/lib/agent-kit/package-load.js +45 -0
- package/lib/agent-kit/plan-ops.js +69 -0
- package/lib/agent-kit/remote-prompts.js +272 -0
- package/lib/agent-kit/render-host-markdown.js +40 -0
- package/lib/agent-kit/repo-guard.js +47 -0
- package/lib/agent-kit/report.js +107 -0
- package/lib/agent-kit/run.js +82 -0
- package/lib/agent-kit/scm/git.js +122 -0
- package/lib/agent-kit/start.js +310 -0
- package/lib/agent-kit/state-file.js +83 -0
- package/lib/agent-kit/status.js +50 -0
- package/lib/agent-kit/v1-detect.js +81 -0
- package/lib/agent-kit/validate-kit.js +87 -0
- package/lib/agent-kit/workspace-name.js +40 -0
- package/lib/agent-kit/workspace-skeleton.js +103 -0
- package/lib/api/role-assistant-test-pack.api.js +86 -0
- package/lib/api/work-search.api.js +31 -4
- package/lib/api/work.api.js +19 -12
- package/lib/app/deploy.js +7 -4
- package/lib/app/list-external-systems.js +2 -1
- package/lib/app/offer-create-from-template.js +184 -0
- package/lib/app/show-display.js +33 -6
- package/lib/app/show.js +25 -2
- package/lib/channels/add-channel.js +1 -0
- package/lib/channels/approval-guides/claude.js +2 -2
- package/lib/channels/channel-add-failure.js +1 -0
- package/lib/channels/channel-add-remaining.js +15 -9
- package/lib/channels/channel-definition-status.js +115 -0
- package/lib/channels/channel-description.js +2 -1
- package/lib/channels/channel-install-envelope.js +4 -2
- package/lib/channels/channel-integration-generator.js +2 -0
- package/lib/channels/channel-runtime-resolver.js +14 -0
- package/lib/channels/channel-targets.js +31 -5
- package/lib/channels/claude-setup-values.js +4 -1
- package/lib/channels/slack-channel-add.js +59 -6
- package/lib/channels/slack-mcp-callback.js +51 -0
- package/lib/channels/slack-mcp-runtime.js +156 -0
- package/lib/channels/slack-provisioning/install-cli.js +14 -2
- package/lib/channels/slack-provisioning/with-curl-on-path.js +6 -1
- package/lib/cli/index.js +4 -0
- package/lib/cli/setup-app.js +8 -1
- package/lib/cli/setup-auth.js +11 -2
- package/lib/cli/setup-certification-commands.js +2 -2
- package/lib/cli/setup-certification.help.js +3 -1
- package/lib/commands/agent-kit-help.js +149 -0
- package/lib/commands/agent-kit.js +417 -0
- package/lib/commands/auth-status-user.js +99 -0
- package/lib/commands/auth-status.js +14 -4
- package/lib/commands/channel-add-help.js +5 -5
- package/lib/commands/datasource-capability-relate-cli.js +5 -4
- package/lib/commands/datasource-load-export-cli.js +7 -2
- package/lib/commands/datasource-test-trust-cli.js +5 -1
- package/lib/commands/governance-command-action.js +5 -4
- package/lib/commands/identity-membership-role-cache.js +6 -1
- package/lib/commands/lifecycle-command-action.js +16 -15
- package/lib/commands/login-credentials.js +8 -3
- package/lib/commands/login-device.js +14 -5
- package/lib/commands/login.js +14 -1
- package/lib/commands/logout.js +50 -15
- package/lib/commands/repair-auth-apply.js +1 -1
- package/lib/commands/repair-datasource-key-skip.js +39 -0
- package/lib/commands/repair-datasource-keys.js +24 -12
- package/lib/commands/repair-rbac.js +16 -10
- package/lib/commands/role-assistant-copy-output.js +61 -0
- package/lib/commands/role-assistant-copy.js +155 -0
- package/lib/commands/role-assistant-test-output.js +8 -9
- package/lib/commands/role-assistant-test-result-rows.js +42 -0
- package/lib/commands/role-assistant.js +140 -59
- package/lib/commands/search.js +143 -0
- package/lib/commands/test-trust-external.js +7 -5
- package/lib/commands/upload-sidecar-followups.js +4 -1
- package/lib/commands/verify-governance-command-action.js +9 -7
- package/lib/commands/verify-operations-command-action.js +9 -8
- package/lib/commands/verify-operations-skip-e2e.js +131 -0
- package/lib/commands/verify-operations-step-plan.js +6 -33
- package/lib/commands/verify-operations-steps.js +3 -1
- package/lib/commands/verify-trust-command-action.js +6 -5
- package/lib/datasource/capability/relate-operations.js +28 -10
- package/lib/datasource/capability/run-capability-relate.js +48 -25
- package/lib/datasource/datasource-identifier.js +13 -5
- package/lib/deployment/deployer-poll-run.js +117 -35
- package/lib/external-system/deploy-dataplane-published.js +70 -0
- package/lib/external-system/deploy.js +12 -2
- package/lib/external-system/download-role-assistant.js +41 -15
- package/lib/external-system/download.js +8 -3
- package/lib/generator/helpers.js +12 -1
- package/lib/generator/wizard-datasource-key.js +54 -0
- package/lib/generator/wizard.js +55 -54
- package/lib/integration-definition/apply-datasource-keys.js +75 -0
- package/lib/integration-definition/apply-relationships.js +195 -0
- package/lib/integration-definition/apply-static-enterprise.js +232 -0
- package/lib/integration-definition/apply-system-file.js +71 -0
- package/lib/integration-definition/apply-test-endpoint.js +89 -0
- package/lib/integration-definition/apply-viewpoint-defaults.js +157 -0
- package/lib/integration-definition/apply.js +78 -59
- package/lib/integration-definition/enrich-openapi-operations.js +36 -10
- package/lib/integration-definition/enrich-openapi-pick.js +87 -0
- package/lib/lifecycle/role-assistant-governance.js +56 -21
- package/lib/programmatic/capability-registry.js +1 -0
- package/lib/programmatic/index.js +2 -0
- package/lib/programmatic/openapi-apply-result-schemas.js +8 -0
- package/lib/programmatic/openapi-channel-install-schemas.js +4 -1
- package/lib/programmatic/openapi-component-schemas.js +1 -0
- package/lib/programmatic/openapi-descriptions.js +9 -3
- package/lib/programmatic/openapi-envelope-examples.js +7 -0
- package/lib/programmatic/openapi-operation-bindings.js +5 -0
- package/lib/programmatic/openapi-request-schemas.js +5 -0
- package/lib/programmatic/openapi-schema-descriptions-channel.js +8 -5
- package/lib/programmatic/openapi-schema-descriptions-operations.js +19 -0
- package/lib/programmatic/openapi-spec.js +1 -0
- package/lib/programmatic/request-timeout.js +3 -0
- package/lib/programmatic/route-handler-map.js +7 -0
- package/lib/programmatic/run-channel-catalog.js +50 -8
- package/lib/programmatic/run-channel-install-options.js +5 -1
- package/lib/programmatic/run-download.js +41 -0
- package/lib/protection/auth-context.js +3 -1
- package/lib/protection/protection-display.js +3 -2
- package/lib/protection/report-exit.js +50 -0
- package/lib/protection/run-commands.js +2 -0
- package/lib/role-assistant/knowledge-sync-settings-push.js +172 -0
- package/lib/role-assistant/knowledge-sync.js +9 -126
- package/lib/role-assistant/package-validate.js +175 -0
- package/lib/role-assistant/test-case-assertion-row.js +36 -0
- package/lib/role-assistant/test-case-copy-bind.js +77 -0
- package/lib/role-assistant/test-case-copy-expected.js +127 -0
- package/lib/role-assistant/test-case-copy-from-work.js +90 -0
- package/lib/role-assistant/test-case-copy-interactions.js +67 -0
- package/lib/role-assistant/test-case-copy.js +119 -0
- package/lib/role-assistant/test-case-expected-catalog.js +135 -0
- package/lib/role-assistant/test-case-validate.js +88 -0
- package/lib/role-assistant/test-cases-bid.js +117 -4
- package/lib/role-assistant/test-cases-evaluate.js +149 -31
- package/lib/role-assistant/test-cases-evidence.js +44 -5
- package/lib/role-assistant/test-cases-honesty.js +155 -6
- package/lib/role-assistant/test-cases-lifecycle.js +297 -0
- package/lib/role-assistant/test-cases-search-graph.js +122 -0
- package/lib/role-assistant/test-cases-search.js +20 -2
- package/lib/role-assistant/test-cases.js +34 -168
- package/lib/role-assistant/test-pack-map.js +180 -0
- package/lib/role-assistant/test-pack-sync.js +187 -0
- package/lib/role-assistant/test-runner-debug.js +54 -0
- package/lib/role-assistant/test-runner-respond-body.js +36 -0
- package/lib/role-assistant/test-runner-search.js +20 -5
- package/lib/role-assistant/test-runner-start-payload.js +63 -10
- package/lib/role-assistant/test-runner-workhub-answers.js +45 -16
- package/lib/role-assistant/test-runner-workhub.js +45 -21
- package/lib/role-assistant/test-runner.js +53 -10
- package/lib/schema/external-datasource.schema.json +36 -5
- package/lib/schema/external-system.schema.json +20 -2
- package/lib/schema/infra-parameter.schema.json +51 -3
- package/lib/schema/infra.parameter.yaml +476 -40
- package/lib/schema/role-assistant-test-case.schema.json +408 -0
- package/lib/schema/type/document-storage.json +1 -1
- package/lib/search/dataplane-context.js +23 -0
- package/lib/search/search-args.js +211 -0
- package/lib/search/search-display.js +238 -0
- package/lib/search/search-errors.js +50 -0
- package/lib/search/search-prompts.js +119 -0
- package/lib/search/search-roles.js +85 -0
- package/lib/search/search-run.js +241 -0
- package/lib/search/search-skills.js +198 -0
- package/lib/utils/api-required-permissions.js +271 -0
- package/lib/utils/api.js +16 -13
- package/lib/utils/authentication-slot-show.js +153 -0
- package/lib/utils/cli-json-exit.js +41 -0
- package/lib/utils/cli-utils.js +23 -5
- package/lib/utils/controller-url.js +78 -4
- package/lib/utils/credential-display.js +43 -1
- package/lib/utils/deployment-errors.js +15 -0
- package/lib/utils/deployment-validation-helpers.js +4 -1
- package/lib/utils/device-code.js +31 -10
- package/lib/utils/error-formatters/error-parser.js +16 -1
- package/lib/utils/error-formatters/permission-errors.js +19 -5
- package/lib/utils/external-system-readiness-compact-blocks.js +5 -1
- package/lib/utils/external-system-readiness-compact-display.js +30 -1
- package/lib/utils/external-system-validators.js +2 -1
- package/lib/utils/help-builder.js +3 -1
- package/lib/utils/keycloak-realm-ready.js +5 -2
- package/lib/utils/logger.js +1 -0
- package/lib/utils/paths.js +26 -5
- package/lib/utils/schema-loader.js +37 -0
- package/lib/utils/secrets-helpers.js +2 -2
- package/lib/utils/write-stream-and-wait.js +63 -0
- package/lib/validation/validate-external-file.js +5 -1
- package/lib/validation/validate.js +3 -2
- package/package.json +20 -6
- package/templates/agent-kit/adapters/claude/nested.CLAUDE.md +1 -0
- package/templates/agent-kit/adapters/claude/root.CLAUDE.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-0-plan.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-1-validate.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-2-build.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-3-push.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-biz-1-validate.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-biz-2-build.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-biz-3-prove.md +5 -0
- package/templates/agent-kit/agent-kit.yaml +45 -0
- package/templates/agent-kit/instructions/AGENTKIT.md +104 -0
- package/templates/agent-kit/instructions/integration.AGENTS.md +25 -0
- package/templates/agent-kit/instructions/role-assistant.AGENTS.md +22 -0
- package/templates/agent-kit/instructions/root.AGENTS.md +37 -0
- package/templates/agent-kit/parity-inventory.yaml +188 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/SKILL.md +59 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/references/contract-checklist.md +40 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/references/delivery-gates.md +54 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/references/production-safety.md +35 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/scripts/reserved-system-key.js +19 -0
- package/templates/agent-kit/skills/aifabrix-plan/SKILL.md +52 -0
- package/templates/agent-kit/skills/aifabrix-plan/references/challenge-checklist.md +108 -0
- package/templates/agent-kit/skills/aifabrix-plan/references/interaction.md +34 -0
- package/templates/agent-kit/skills/aifabrix-plan/references/plan-template.md +182 -0
- package/templates/agent-kit/skills/aifabrix-prove/SKILL.md +51 -0
- package/templates/agent-kit/skills/aifabrix-prove/references/demo-template.md +65 -0
- package/templates/agent-kit/skills/aifabrix-prove/references/evidence-lifecycle.md +68 -0
- package/templates/agent-kit/skills/aifabrix-prove/references/learning-template.md +66 -0
- package/templates/agent-kit/skills/aifabrix-role-assistant/SKILL.md +43 -0
- package/templates/agent-kit/skills/aifabrix-role-assistant/references/package-boundary.md +21 -0
- package/templates/agent-kit/skills/shared/hosts.md +65 -0
- package/templates/agent-kit/skills/shared/login.md +16 -0
- package/templates/agent-kit/workspace/.cursor/plans/README.md +22 -0
- package/templates/agent-kit/workspace/LICENSE.mit +21 -0
- package/templates/agent-kit/workspace/README.md +89 -0
- package/templates/applications/builder-api/Dockerfile +3 -1
- package/templates/applications/dataplane/application.yaml +2 -3
- package/templates/applications/dataplane/env.template +5 -5
- package/templates/applications/dataplane/rbac.yaml +28 -0
- package/templates/applications/keycloak/env.template +3 -3
- package/templates/applications/miso-controller/application.yaml +21 -2
- package/templates/applications/miso-controller/env.template +96 -25
- package/templates/applications/miso-controller/rbac.yaml +5 -0
- package/templates/channels/claude/TROUBLESHOOTING.md +3 -0
- package/templates/channels/claude/channel.json +1 -1
- package/templates/channels/claude/install.template.md.hbs +1 -0
- package/templates/channels/claude/integration/claude-system.json +1 -1
- package/templates/channels/slack/channel.json +11 -0
- package/templates/channels/slack/install.template.md.hbs +9 -0
- package/templates/channels/slack/integration/slack-system.json +11 -0
- package/templates/channels/slack/manifest.template.json.hbs +6 -3
- package/templates/channels/teams-bot/channel.json +1 -0
- package/templates/python/docker-compose.hbs +14 -0
- package/templates/typescript/docker-compose.hbs +14 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# {{workspaceName}}
|
|
2
|
+
|
|
3
|
+
AI Fabrix **customer delivery workspace** for Connected Systems and Role Assistants.
|
|
4
|
+
|
|
5
|
+
This repository holds **customer packages and data** only. Do not edit platform product source from this workspace.
|
|
6
|
+
|
|
7
|
+
Vendor limits, credentials, designated test subjects, and PII live only in each system’s `integration/<systemKey>/README.md`.
|
|
8
|
+
|
|
9
|
+
## How to start
|
|
10
|
+
|
|
11
|
+
1. Open **this folder** in Cursor, Claude Code, or Codex. Host install and sign-in: **[AGENTKIT.md](./AGENTKIT.md)**.
|
|
12
|
+
2. The agent checks `aifabrix auth status`. If you are not signed in, it asks for the Miso Controller URL and gives you a browser link. You do not need a terminal. Details: **[AGENTKIT.md](./AGENTKIT.md)**.
|
|
13
|
+
3. In chat, either **invoke a skill** or **paste a prompt** from the tables below. Work in order. Wait for the gate (`PLAN_READY`, `READY`, `BUILT`, then `PASS` or `PASS_WITH_SKIPS`) before the next step.
|
|
14
|
+
|
|
15
|
+
### How to use prompts
|
|
16
|
+
|
|
17
|
+
| Host | Invoke a skill | Or type a prompt |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| Cursor | `/aifabrix-plan` (and the other `/aifabrix-*` names) | Paste the sentence from **What to ask** |
|
|
20
|
+
| Claude Code | same `/aifabrix-*` names | same sentences |
|
|
21
|
+
| Codex | `$aifabrix-plan` (and the other `$aifabrix-*` names) | same sentences |
|
|
22
|
+
|
|
23
|
+
You can combine them: invoke the skill, then add the system key or paste a spec. Attach or `@` the specification file when you have one. Replace `<systemKey>` and `<catalogRole>` with real keys. Do not invent `ra-` / `ek-` system keys or `*-reader` roles.
|
|
24
|
+
|
|
25
|
+
### Connected System (integration)
|
|
26
|
+
|
|
27
|
+
| Step | Skill | What to ask (prompt) |
|
|
28
|
+
| --- | --- | --- |
|
|
29
|
+
| Plan | `/aifabrix-plan` | Turn this specification into a delivery plan for `<systemKey>` |
|
|
30
|
+
| Validate and build | `/aifabrix-connected-system` | Validate and build the `<systemKey>` integration |
|
|
31
|
+
| Test and publish | `/aifabrix-connected-system` | Publish and certify this Connected System |
|
|
32
|
+
|
|
33
|
+
Example — plan:
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
/aifabrix-plan
|
|
37
|
+
Turn this specification into a delivery plan for <systemKey>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`aifabrix upload` is a **draft**. Publish is **`aifabrix deploy`**. Secrets stay in `kv://` — never paste values into chat or git.
|
|
41
|
+
|
|
42
|
+
### Role Assistant
|
|
43
|
+
|
|
44
|
+
Do this after the Connected Systems the role needs are **published** (deploy, not upload-only).
|
|
45
|
+
|
|
46
|
+
| Step | Skill | What to ask (prompt) |
|
|
47
|
+
| --- | --- | --- |
|
|
48
|
+
| Author, test, or upload | `/aifabrix-role-assistant` | Create or update the `<catalogRole>` Role Assistant |
|
|
49
|
+
| Prove the business case | `/aifabrix-prove` | Prove this business case and update learning |
|
|
50
|
+
|
|
51
|
+
Example — Role Assistant:
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
/aifabrix-role-assistant
|
|
55
|
+
Create or update the <catalogRole> Role Assistant
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Use a **catalog** role key (`finance-controller`, `cfo`, …). Package folder: `role-assistant/ra-<catalogRole>/`.
|
|
59
|
+
|
|
60
|
+
## Layout
|
|
61
|
+
|
|
62
|
+
```text
|
|
63
|
+
integration/<systemKey>/ Connected System packages (Builder output)
|
|
64
|
+
integration/<systemKey>/data/ Fixtures / source exports
|
|
65
|
+
role-assistant/ra-<roleKey>/ Role Assistant packages
|
|
66
|
+
.agents/skills/ Agent Kit skills (Cursor, Codex, Claude)
|
|
67
|
+
.cursor/plans/ Delivery plans
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
As you add packages, list system keys and catalog roles in this README. Keep operational limits in each `integration/<systemKey>/README.md`.
|
|
71
|
+
|
|
72
|
+
## Agent Kit
|
|
73
|
+
|
|
74
|
+
Install, coding hosts, auto-approve, and CLI auth: **[AGENTKIT.md](./AGENTKIT.md)**.
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
aifabrix agent-kit status
|
|
78
|
+
aifabrix agent-kit validate
|
|
79
|
+
aifabrix agent-kit update
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
`aifabrix agent-kit update` refreshes `AGENTKIT.md`. If this README is missing, install/update creates it. An existing README is never overwritten.
|
|
83
|
+
|
|
84
|
+
## Docs
|
|
85
|
+
|
|
86
|
+
- [Agent Kit](./AGENTKIT.md) — hosts, install, auto-approve, CLI auth
|
|
87
|
+
- [Build AI-ready systems](https://docs.aifabrix.ai/docs/build-ai-ready-systems)
|
|
88
|
+
- [CLI workflow](https://docs.aifabrix.ai/docs/build-ai-ready-systems-validate-test-cli-workflow)
|
|
89
|
+
- [llms.txt](https://docs.aifabrix.ai/llms.txt)
|
|
@@ -13,7 +13,7 @@ ENV NODE_ENV=production \
|
|
|
13
13
|
WORKDIR /app
|
|
14
14
|
|
|
15
15
|
RUN apt-get update \
|
|
16
|
-
&& apt-get install -y --no-install-recommends dumb-init ca-certificates \
|
|
16
|
+
&& apt-get install -y --no-install-recommends dumb-init ca-certificates curl \
|
|
17
17
|
&& rm -rf /var/lib/apt/lists/*
|
|
18
18
|
|
|
19
19
|
COPY package.json package-lock.json ./
|
|
@@ -23,6 +23,8 @@ COPY docker-builder-api-staging/lib ./lib
|
|
|
23
23
|
COPY docker-builder-api-staging/bin/builder-api-spike.js ./bin/builder-api-spike.js
|
|
24
24
|
COPY docker-builder-api-staging/bin/builder-api-cleanup.js ./bin/builder-api-cleanup.js
|
|
25
25
|
COPY docker-builder-api-staging/templates ./templates
|
|
26
|
+
# BID resource-type catalog + help fixtures (staged docs/builder-help only)
|
|
27
|
+
COPY docker-builder-api-staging/docs ./docs
|
|
26
28
|
|
|
27
29
|
RUN addgroup --system appgroup \
|
|
28
30
|
&& adduser --system --ingroup appgroup --home /app appuser \
|
|
@@ -5,7 +5,7 @@ app:
|
|
|
5
5
|
description: "AI Fabrix Dataplane is a secure, in-tenant integration and automation layer that supplies governed, normalized, and explainable enterprise data to AI agents. Using CIP as a declarative standard, it enforces RBAC and ABAC, executes integrations, and exposes trusted data via MCP and OpenAPI."
|
|
6
6
|
type: webapp
|
|
7
7
|
language: python # Explicitly specify Python language
|
|
8
|
-
version: 2.0.
|
|
8
|
+
version: 2.0.65
|
|
9
9
|
# Image Configuration
|
|
10
10
|
# Set tag to match your build (example: aifabrix build dataplane -t 1.0.0).
|
|
11
11
|
# Registry is required so the controller can pull the image (avoids docker-not-found on the controller host).
|
|
@@ -71,7 +71,7 @@ build:
|
|
|
71
71
|
envOutputPath: ../../.env # Copy to repo root for local dev
|
|
72
72
|
language: python # Runtime language for template selection (typescript or python)
|
|
73
73
|
# Dev reload: polling + watch /app/app only (avoids EMFILE on full repo bind-mount). See run_local.py, make af-reload.
|
|
74
|
-
reloadStart: WATCHFILES_FORCE_POLLING=1 uvicorn app.main:app --host 0.0.0.0 --port ${PORT:-3001} --reload --reload-dir /app/app --timeout-graceful-shutdown 15
|
|
74
|
+
reloadStart: WATCHFILES_FORCE_POLLING=1 uvicorn app.main:app --host 0.0.0.0 --port ${PORT:-3001} --reload --reload-dir /app/app --reload-exclude tests --reload-exclude .temp --reload-exclude app-ui --timeout-graceful-shutdown 15
|
|
75
75
|
# Pulled-image local compose (no bind-mount): drives `command` in generated docker-compose. Override for non-standard images (e.g. stub ACR tags).
|
|
76
76
|
# Early ASGI (boot.api) binds PORT before heavy app.main import — Azure App Service warmup.
|
|
77
77
|
imageRun: exec python -m uvicorn boot.api:app --host 0.0.0.0 --port ${PORT:-3001}
|
|
@@ -240,4 +240,3 @@ configuration:
|
|
|
240
240
|
field: text
|
|
241
241
|
label: "Default LLM provider (system key when two or more providers)"
|
|
242
242
|
placeholder: "openai"
|
|
243
|
-
|
|
@@ -30,8 +30,8 @@ LOCAL_MODE=false
|
|
|
30
30
|
# CELERY_WORKER_RUNTIME is set automatically by python -m app.core.celery_worker_main (NullPool per task).
|
|
31
31
|
# CELERY_LOG_LEVEL=info
|
|
32
32
|
|
|
33
|
-
# When API_KEY is set, a matching Bearer token bypasses OAuth2 validation
|
|
34
|
-
# Same kv:// as miso-controller API_KEY
|
|
33
|
+
# When API_KEY is set, a matching Bearer token bypasses OAuth2 validation.
|
|
34
|
+
# Same kv:// as miso-controller API_KEY; Azure may leave this optional key empty.
|
|
35
35
|
API_KEY=kv://miso-controller-secrets-apiKeyVault
|
|
36
36
|
# Comma-separated realm roles attached to API_KEY bypass (JWT realm_access.roles). Default: operator.
|
|
37
37
|
# Dev manual tests (437 governance, enterprise-llm llm.call): use full-access locally; restrict in tst/pro.
|
|
@@ -44,7 +44,7 @@ API_KEY_BYPASS_ROLES=full-access
|
|
|
44
44
|
|
|
45
45
|
# API Configuration
|
|
46
46
|
API_V1_STR=/api/v1
|
|
47
|
-
VERSION=2.0.
|
|
47
|
+
VERSION=2.0.65
|
|
48
48
|
# Minimum supported aifabrix-builder CLI semver (advertised on /health and /api/v1/health; empty = no gate)
|
|
49
49
|
# MIN_BUILDER_CLI_VERSION=2.45.0
|
|
50
50
|
MIN_BUILDER_CLI_VERSION=2.45.5
|
|
@@ -258,7 +258,7 @@ DATAPLANE_PUBLIC_KEY_ID=
|
|
|
258
258
|
CERTIFICATE_PRIVATE_KEY=kv://secrets-certificatePrivateKeyVault
|
|
259
259
|
CERTIFICATE_PUBLIC_KEY=kv://secrets-certificatePublicKeyVault
|
|
260
260
|
# Optional public key identifier for issued certificates; default if unset: dataplane-signing-key
|
|
261
|
-
CERTIFICATE_PUBLIC_KEY_ID=
|
|
261
|
+
CERTIFICATE_PUBLIC_KEY_ID=dataplane-signing-key
|
|
262
262
|
|
|
263
263
|
# =============================================================================
|
|
264
264
|
# VALIDATION ENGINE — YAML CONTRACTS
|
|
@@ -333,4 +333,4 @@ TRUST_AI_EXPOSURE_GATE_ENABLED=false
|
|
|
333
333
|
# app/schemas/json/external-datasource.schema.json metadata.version. Set CERTIFICATION_RULES_VERSION
|
|
334
334
|
# when 346.rules / §17 revisions must invalidate existing certificates without matching rulesVersion.
|
|
335
335
|
CERTIFICATION_DATASOURCE_SCHEMA_VERSION=
|
|
336
|
-
CERTIFICATION_RULES_VERSION=
|
|
336
|
+
CERTIFICATION_RULES_VERSION=
|
|
@@ -163,6 +163,34 @@ permissions:
|
|
|
163
163
|
]
|
|
164
164
|
description: "Read the global Resource Type catalog (list/get)"
|
|
165
165
|
|
|
166
|
+
# Aspect catalog (read-only)
|
|
167
|
+
- name: "aspect:read"
|
|
168
|
+
roles:
|
|
169
|
+
[
|
|
170
|
+
"aifabrix-platform-admin",
|
|
171
|
+
"aifabrix-security-admin",
|
|
172
|
+
"aifabrix-deployment-admin",
|
|
173
|
+
"aifabrix-compliance-admin",
|
|
174
|
+
"aifabrix-developer",
|
|
175
|
+
"aifabrix-observer",
|
|
176
|
+
"aifabrix-ai-trust-operator",
|
|
177
|
+
]
|
|
178
|
+
description: "Read the shared baseline Aspect catalog (list/get)"
|
|
179
|
+
|
|
180
|
+
# Knowledge Type catalog (read-only)
|
|
181
|
+
- name: "knowledge-type:read"
|
|
182
|
+
roles:
|
|
183
|
+
[
|
|
184
|
+
"aifabrix-platform-admin",
|
|
185
|
+
"aifabrix-security-admin",
|
|
186
|
+
"aifabrix-deployment-admin",
|
|
187
|
+
"aifabrix-compliance-admin",
|
|
188
|
+
"aifabrix-developer",
|
|
189
|
+
"aifabrix-observer",
|
|
190
|
+
"aifabrix-ai-trust-operator",
|
|
191
|
+
]
|
|
192
|
+
description: "Read the Dataplane Knowledge Type catalog (list/get)"
|
|
193
|
+
|
|
166
194
|
# Generic dataplane operations
|
|
167
195
|
- name: "dataplane:read"
|
|
168
196
|
roles: ["aifabrix-platform-admin", "aifabrix-security-admin", "aifabrix-deployment-admin", "aifabrix-compliance-admin", "aifabrix-developer", "aifabrix-observer"]
|
|
@@ -55,9 +55,9 @@ KC_HEALTH_ENABLED=true
|
|
|
55
55
|
KC_HTTP_MANAGEMENT_HEALTH_ENABLED=false
|
|
56
56
|
# Single-instance: use local cache so /health/ready passes (avoids Infinispan cluster check)
|
|
57
57
|
KC_CACHE=local
|
|
58
|
-
#
|
|
59
|
-
#
|
|
60
|
-
KC_FEATURES=cimd
|
|
58
|
+
# Runtime features. Include cimd so Keycloak 26.7.2 advertises Client ID Metadata
|
|
59
|
+
# Documents. preview alone triggers a start-time rebuild that drops cimd.
|
|
60
|
+
KC_FEATURES=preview,cimd
|
|
61
61
|
|
|
62
62
|
# =============================================================================
|
|
63
63
|
# DATABASE CONFIGURATION
|
|
@@ -4,7 +4,7 @@ app:
|
|
|
4
4
|
displayName: 'Miso Controller'
|
|
5
5
|
description: 'Miso is the AI Fabrix in-tenant controller and portal layer for securely operating enterprise AI apps inside a customer’s Azure tenant. It provides Entra ID SSO, RBAC, audit logs, environment/app configuration via schemas, and safe secret handling via Key Vault references—ensuring governance, traceability, and predictable UX across portal, SDK, and CLI.'
|
|
6
6
|
type: webapp
|
|
7
|
-
version: '2.0.
|
|
7
|
+
version: '2.0.66'
|
|
8
8
|
# Image Configuration
|
|
9
9
|
# Set tag to match your build (e.g. aifabrix build miso-controller -t 1.0.0 then tag: 1.0.0)
|
|
10
10
|
# Registry is required so the controller can pull the image (avoids "docker: not found" on the controller host).
|
|
@@ -72,10 +72,29 @@ repository:
|
|
|
72
72
|
#
|
|
73
73
|
# NOT included (auto-configured):
|
|
74
74
|
# - DATABASE_URL, REDIS_URL, KEYCLOAK_* → auto-generated during Azure install
|
|
75
|
-
# - MISO_*, AZURE_*, kv:// → credentials and system parameters
|
|
75
|
+
# - Other MISO_*, AZURE_*, kv:// → credentials and system parameters
|
|
76
76
|
# - PORT, NODE_ENV, MISO_ENVIRONMENT → set by deployment target
|
|
77
77
|
|
|
78
78
|
configuration:
|
|
79
|
+
# -------------------------------------------------------------------------
|
|
80
|
+
# Security & browser session
|
|
81
|
+
# -------------------------------------------------------------------------
|
|
82
|
+
- name: MISO_APPLICATION_SECRETS_UI_ENABLED
|
|
83
|
+
category: Security
|
|
84
|
+
portalInput:
|
|
85
|
+
field: select
|
|
86
|
+
label: 'Enable Settings System Secrets tab'
|
|
87
|
+
options:
|
|
88
|
+
- 'false'
|
|
89
|
+
- 'true'
|
|
90
|
+
|
|
91
|
+
- name: AUTH_BROWSER_SESSION_TTL_SECONDS
|
|
92
|
+
category: Security
|
|
93
|
+
portalInput:
|
|
94
|
+
field: text
|
|
95
|
+
label: 'Browser Session Idle Timeout (seconds)'
|
|
96
|
+
placeholder: '1800'
|
|
97
|
+
|
|
79
98
|
# -------------------------------------------------------------------------
|
|
80
99
|
# Operations & Debugging
|
|
81
100
|
# -------------------------------------------------------------------------
|
|
@@ -1,10 +1,24 @@
|
|
|
1
1
|
# Environment Variables Template
|
|
2
2
|
# Use kv:// references for secrets (resolved from secrets.local.yaml)
|
|
3
3
|
# Use ${VAR} for environment-specific values
|
|
4
|
+
#
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# HOW THIS FILE IS ORGANIZED (plan 220.0)
|
|
7
|
+
# =============================================================================
|
|
8
|
+
# One env.template, three documentation blocks. Every variable below is tagged:
|
|
9
|
+
#
|
|
10
|
+
# [always] applies to both hosted onboarding modes and local dev
|
|
11
|
+
# [saasDirect] eSystems-hosted SaaS activation (four-step wizard)
|
|
12
|
+
# [customerOwned] Azure-in-tenant activation (existing TA wizard)
|
|
13
|
+
#
|
|
14
|
+
# ONBOARDING_MODE selects the onboarding step list. It is orthogonal to DEPLOYMENT,
|
|
15
|
+
# which selects Azure SDK vs local execution. There is NO fifth DEPLOYMENT value:
|
|
16
|
+
# eSystems-hosted SaaS still runs DEPLOYMENT=azure. See the DEPLOYMENT TYPE and
|
|
17
|
+
# ONBOARDING MODE sections below.
|
|
4
18
|
|
|
5
19
|
|
|
6
20
|
# =============================================================================
|
|
7
|
-
# FIRST-TIME ONBOARDING CONFIGURATION
|
|
21
|
+
# FIRST-TIME ONBOARDING CONFIGURATION — [always]
|
|
8
22
|
# =============================================================================
|
|
9
23
|
#
|
|
10
24
|
# Onboarding runs automatically when the database has no controller row (empty DB).
|
|
@@ -22,9 +36,10 @@
|
|
|
22
36
|
SKIP_FIRST_TIME_SETUP=false
|
|
23
37
|
|
|
24
38
|
# Force onboarding to run even when a controller row already exists (default: unset/false).
|
|
25
|
-
#
|
|
26
|
-
#
|
|
27
|
-
#
|
|
39
|
+
# Prefer SQL/API one-shot: POST /api/v1/controller/force-onboarding (controller:admin) or set
|
|
40
|
+
# controllers.configuration.setup.forceOnboarding=true — no App Service restart required.
|
|
41
|
+
# Env FORCE_ONBOARDING still works as bootstrap-only when you must restart: set true, restart once,
|
|
42
|
+
# then set back to false. This is NOT a Tenant Activation wizard reset (does not clear activation JSON).
|
|
28
43
|
# FORCE_ONBOARDING=true
|
|
29
44
|
|
|
30
45
|
# Optional custom controller key for onboarding (default: miso-controller)
|
|
@@ -44,17 +59,21 @@ ONBOARDING_ADMIN_PASSWORD=kv://miso-controller-admin-passwordKeyVault
|
|
|
44
59
|
# Optional admin email for onboarding (default: admin@aifabrix.ai)
|
|
45
60
|
ONBOARDING_ADMIN_EMAIL=kv://miso-controller-admin-emailKeyVault
|
|
46
61
|
|
|
47
|
-
# Create development environment during onboarding (default: false)
|
|
62
|
+
# [customerOwned] Create development environment during onboarding (default: false)
|
|
48
63
|
# Full platform: create miso, dev, tst, and pro during onboarding (default: false)
|
|
49
64
|
# When true, supersedes ONBOARDING_CREATE_DEV_ENV for which extra environments are created
|
|
65
|
+
# [saasDirect] Keep false in the customer container — extra environments belong to the
|
|
66
|
+
# eSystems deploy path, not the customer wizard.
|
|
50
67
|
ONBOARDING_FULL_PLATFORM=false
|
|
51
68
|
|
|
52
|
-
# When true, run Azure env deploy for onboarding envs (SDK modules). Default false —
|
|
69
|
+
# [customerOwned] When true, run Azure env deploy for onboarding envs (SDK modules). Default false —
|
|
53
70
|
# Marketplace already provisions infra; TA owns customer env deploy.
|
|
71
|
+
# [saasDirect] Keep false: eSystems already deployed the required runtime services.
|
|
54
72
|
ONBOARDING_CREATE_MISO_ENV=false
|
|
55
73
|
|
|
56
|
-
# Set to true to create both miso and dev environments during onboarding
|
|
74
|
+
# [customerOwned] Set to true to create both miso and dev environments during onboarding
|
|
57
75
|
# When false (default), only the miso environment is created (ignored when ONBOARDING_FULL_PLATFORM=true)
|
|
76
|
+
# [saasDirect] Keep false in the customer container.
|
|
58
77
|
ONBOARDING_CREATE_DEV_ENV=true
|
|
59
78
|
|
|
60
79
|
# =============================================================================
|
|
@@ -127,7 +146,9 @@ REDIS_PERMISSIONS_TTL=900
|
|
|
127
146
|
KEYCLOAK_REALM=aifabrix
|
|
128
147
|
# Public issuer / browser URL (includes /auth when Keycloak uses KC_HTTP_RELATIVE_PATH=/auth).
|
|
129
148
|
KEYCLOAK_SERVER_URL=url://keycloak-public
|
|
130
|
-
# Internal token/JWKS calls
|
|
149
|
+
# Internal token/JWKS calls use url://keycloak-internal.
|
|
150
|
+
# In Traefik/front-door mode, virtual directory mapping supplies relative path semantics.
|
|
151
|
+
# Do not append /auth again when frontDoorRouting is /auth/* — /auth/auth 404s.
|
|
131
152
|
KEYCLOAK_INTERNAL_SERVER_URL=url://keycloak-internal
|
|
132
153
|
# Docker/internal host and port: used when config from DB has localhost (getDockerKeycloakInternalUrl).
|
|
133
154
|
# Resolved from env-config (e.g. KEYCLOAK_HOST=keycloak, KEYCLOAK_PORT=8080 for docker).
|
|
@@ -145,8 +166,19 @@ KEYCLOAK_DEFAULT_PASSWORD=kv://keycloak-default-passwordKeyVault
|
|
|
145
166
|
# Password setup for new local users (plan 209.0)
|
|
146
167
|
# email = send invitation email so the user sets their own password (default)
|
|
147
168
|
# admin-reveal = show a one-time temporary password to the admin (labs / no mail)
|
|
169
|
+
# [saasDirect] MUST be `email` — the customer activates its own administrator account from the
|
|
170
|
+
# Keycloak UPDATE_PASSWORD invitation; eSystems never distributes a password.
|
|
171
|
+
# [customerOwned] `admin-reveal` is allowed only in labs.
|
|
148
172
|
IDENTITY_LOCAL_PASSWORD_MODE=admin-reveal
|
|
149
173
|
|
|
174
|
+
# =============================================================================
|
|
175
|
+
# MANAGED NOTIFICATION EMAIL (Miso -> Mori REST)
|
|
176
|
+
# =============================================================================
|
|
177
|
+
# Both onboarding modes use Mori's AI Fabrix-owned sender. MORI_API_KEY below is the
|
|
178
|
+
# existing installation service key; no notification-specific secret is created.
|
|
179
|
+
NOTIFICATION_BINDING=aifabrixManaged
|
|
180
|
+
MORI_ENVIRONMENT_ID=
|
|
181
|
+
|
|
150
182
|
# Keycloak Events Configuration
|
|
151
183
|
KEYCLOAK_EVENTS_ENABLED=true
|
|
152
184
|
KEYCLOAK_EVENTS_VERIFY_SIGNATURE=true
|
|
@@ -188,8 +220,11 @@ MISO_CLIENTSECRET=kv://miso-controller-client-secretKeyVault
|
|
|
188
220
|
CONTROLLER_EVALUATION=
|
|
189
221
|
|
|
190
222
|
# =============================================================================
|
|
191
|
-
# ENTRA ID ONBOARDING (vendor multi-tenant app — admin consent)
|
|
223
|
+
# ENTRA ID ONBOARDING (vendor multi-tenant app — admin consent) — [always]
|
|
192
224
|
# =============================================================================
|
|
225
|
+
# Kept in the shared block because EITHER mode may install Entra later from the plan 219
|
|
226
|
+
# provider catalogue: Azure hosting does not force Entra, and SaaS may choose it.
|
|
227
|
+
#
|
|
193
228
|
# AI Fabrix vendor app for TA-1 admin consent and Entra ID configure flows.
|
|
194
229
|
# Same ENTRA_ID_CLIENT_ID / ENTRA_ID_CLIENT_SECRET on every deployment.
|
|
195
230
|
# Customer SSO after configure uses a separate enterprise app (AI Fabrix Miso);
|
|
@@ -202,13 +237,16 @@ CONTROLLER_EVALUATION=
|
|
|
202
237
|
#
|
|
203
238
|
# Delegated Graph (second redirect URI on the same vendor app): see section below.
|
|
204
239
|
ENTRA_CALLBACK_STATE_SECRET=kv://entra-callback-state-secret
|
|
205
|
-
ENTRA_ID_CENTRAL_CALLBACK_URI=https://aifabrix-pro-mori
|
|
240
|
+
ENTRA_ID_CENTRAL_CALLBACK_URI=https://aifabrix-pro-miso-mori.azurewebsites.net/entra-id-concent/callback
|
|
206
241
|
ENTRA_ID_CLIENT_ID=kv://entra-client-idKeyVault
|
|
207
242
|
ENTRA_ID_CLIENT_SECRET=kv://entra-client-secretKeyVault
|
|
208
243
|
|
|
209
244
|
# =============================================================================
|
|
210
|
-
# TENANT ACTIVATION (TA-3) — EXISTING LLM CATALOG
|
|
245
|
+
# TENANT ACTIVATION (TA-3) — EXISTING LLM CATALOG — [customerOwned]
|
|
211
246
|
# =============================================================================
|
|
247
|
+
# [saasDirect] Omit this block entirely: the SaaS wizard has no Access Model step and
|
|
248
|
+
# creates no LLM resources.
|
|
249
|
+
#
|
|
212
250
|
# Optional JSON array for GET /api/v1/tenant/existing-llm-configurations (and
|
|
213
251
|
# access-model.existingLlmConfigurations). Merge order: env entries first, then
|
|
214
252
|
# entries derived from saved activation LLM (same id in saved overrides).
|
|
@@ -220,23 +258,32 @@ ENTRA_ID_CLIENT_SECRET=kv://entra-client-secretKeyVault
|
|
|
220
258
|
# EXISTING_LLM_CONFIGURATIONS=
|
|
221
259
|
|
|
222
260
|
# =============================================================================
|
|
223
|
-
# AZURE AD PROVIDER CONFIGURATION
|
|
261
|
+
# AZURE AD PROVIDER CONFIGURATION — [always]
|
|
224
262
|
# =============================================================================
|
|
263
|
+
# [customerOwned] These are the customer subscription credentials collected by the TA wizard.
|
|
264
|
+
# [saasDirect] Present on the eSystems HOST controller so eSystems can deploy the hosted
|
|
265
|
+
# environment. They are never collected from, or shown to, the SaaS customer.
|
|
225
266
|
|
|
226
267
|
AZURE_SUBSCRIPTION_ID=kv://azure-subscription-idKeyVault
|
|
227
268
|
TENANT_ID=kv://azure-tenant-idKeyVault
|
|
228
269
|
AZURE_SERVICE_NAME=kv://azure-service-nameKeyVault
|
|
229
|
-
|
|
230
|
-
|
|
270
|
+
# Azure App Service uses managed identity through DefaultAzureCredential.
|
|
271
|
+
# Optional local service-principal overrides may be supplied in the runtime .env:
|
|
272
|
+
# AZURE_CLIENT_ID=
|
|
273
|
+
# AZURE_CLIENT_SECRET=
|
|
231
274
|
|
|
232
275
|
# When true, environment infrastructure deploy skips the ai.azureOpenAI module (no new Cognitive Services account).
|
|
276
|
+
# [customerOwned] default false — Azure OpenAI is created only when the customer selects it.
|
|
277
|
+
# [saasDirect] leave unset or set true: the minimal SaaS baseline never creates Cognitive Services.
|
|
278
|
+
# When unset, ONBOARDING_MODE=saasDirect already defaults this to true.
|
|
233
279
|
SKIP_AZURE_OPENAI=false
|
|
234
280
|
|
|
235
|
-
# When true, environment deploy skips Postgres ARM/KV updates if the flexible server
|
|
281
|
+
# [customerOwned] When true, environment deploy skips Postgres ARM/KV updates if the flexible server
|
|
282
|
+
# already exists (marketplace redeploy).
|
|
236
283
|
SKIP_DB_REDEPLOY=true
|
|
237
284
|
|
|
238
285
|
# =============================================================================
|
|
239
|
-
# DEPLOYMENT TYPE
|
|
286
|
+
# DEPLOYMENT TYPE — [always]
|
|
240
287
|
# =============================================================================
|
|
241
288
|
# azure — Real Azure resources + tenant activation wizard until completed
|
|
242
289
|
# azure-mock — Mock Azure SDK; dashboard after login (no wizard)
|
|
@@ -245,14 +292,28 @@ SKIP_DB_REDEPLOY=true
|
|
|
245
292
|
#
|
|
246
293
|
# Missing or invalid value defaults to azure (wizard + Azure credentials).
|
|
247
294
|
# Bootstrap (SKIP_FIRST_TIME_SETUP=false) is separate from the activation wizard.
|
|
295
|
+
# NOTE: there is no `saas` value. eSystems-hosted SaaS runs DEPLOYMENT=azure with
|
|
296
|
+
# ONBOARDING_MODE=saasDirect (see next section).
|
|
248
297
|
DEPLOYMENT=database
|
|
249
298
|
|
|
250
|
-
#
|
|
251
|
-
#
|
|
252
|
-
|
|
299
|
+
# =============================================================================
|
|
300
|
+
# ONBOARDING MODE — [always]
|
|
301
|
+
# =============================================================================
|
|
302
|
+
# Orthogonal to DEPLOYMENT (Azure SDK vs local). Selects the onboarding step list
|
|
303
|
+
# served by GET /api/v1/tenant/status and rendered by the wizard stepper.
|
|
304
|
+
#
|
|
305
|
+
# customerOwned = Azure-in-tenant wizard
|
|
306
|
+
# consent → identity → size → access-model → endpoint → validation
|
|
307
|
+
# saasDirect = eSystems-hosted activation
|
|
308
|
+
# consent → identity → endpoint (domain only) → review
|
|
309
|
+
# Omits size, access-model, customer deploy and platform-apps.
|
|
310
|
+
#
|
|
311
|
+
# Unset defaults to customerOwned. An unknown value fails closed with HTTP 400.
|
|
312
|
+
ONBOARDING_MODE=customerOwned
|
|
253
313
|
|
|
254
314
|
# Dev/test: show TA Entra "Completing setup" countdown (120s cap). Default false.
|
|
255
315
|
# Exposed to UI via GET /api/v1/tenant/status → showTaCountdown (restart controller after change).
|
|
316
|
+
# [saasDirect] Omit — there is no TA Entra countdown in the SaaS wizard.
|
|
256
317
|
SHOW_TA_COUNT_DOWN=false
|
|
257
318
|
|
|
258
319
|
# =============================================================================
|
|
@@ -270,15 +331,25 @@ BOOTSTRAP_APPKEYS=dataplane,builder-api
|
|
|
270
331
|
# When false (default), uses local AES-256-GCM encryption with ENCRYPTION_KEY
|
|
271
332
|
KEY_VAULT_ENABLED=false
|
|
272
333
|
|
|
334
|
+
# Show Settings > System Secrets in the portal (runtime feature flag).
|
|
335
|
+
MISO_APPLICATION_SECRETS_UI_ENABLED=false
|
|
336
|
+
|
|
337
|
+
# Sliding browser-session idle timeout (30 minutes).
|
|
338
|
+
AUTH_BROWSER_SESSION_TTL_SECONDS=1800
|
|
339
|
+
|
|
273
340
|
# JWT Configuration (for client token generation)
|
|
274
341
|
JWT_SECRET=kv://miso-controller-jwt-secretKeyVault
|
|
275
342
|
|
|
276
|
-
# When API_KEY is set, a matching Bearer token bypasses OAuth2 validation
|
|
343
|
+
# When API_KEY is set, a matching Bearer token bypasses OAuth2 validation.
|
|
344
|
+
# The key is optional: local environments may set it; Azure may leave it empty.
|
|
277
345
|
API_KEY=kv://miso-controller-secrets-apiKeyVault
|
|
278
346
|
|
|
279
347
|
# =============================================================================
|
|
280
|
-
# LICENSE CONFIGURATION
|
|
348
|
+
# LICENSE CONFIGURATION — [always]
|
|
281
349
|
# =============================================================================
|
|
350
|
+
# [saasDirect] Must use the Mori flow (never DEVELOPMENT): Mori issues and owns the
|
|
351
|
+
# 30-day STANDARD / M trial, and sales later updates the same subscription.
|
|
352
|
+
#
|
|
282
353
|
# Offline JWT license (optional):
|
|
283
354
|
# - If set, controller validates license offline (RS256) without Mori subscription status call.
|
|
284
355
|
# - Value can be literal JWT or kv:// reference.
|
|
@@ -294,8 +365,8 @@ LICENSE_JWT=kv://miso-controller-jwt-licenseKeyVault
|
|
|
294
365
|
# ENTRA ID ONBOARDING (delegated Graph via Mori)
|
|
295
366
|
# =============================================================================
|
|
296
367
|
# Must match a Web redirect URI on the vendor multi-tenant app and Mori’s route
|
|
297
|
-
# …/entra-graph-delegated/callback. Shared pro Mori (CICD):
|
|
298
|
-
ENTRA_GRAPH_DELEGATED_REDIRECT_URI=https://aifabrix-pro-mori
|
|
368
|
+
# …/entra-graph-delegated/callback. Shared pro Mori addon (CICD *-miso-rg):
|
|
369
|
+
ENTRA_GRAPH_DELEGATED_REDIRECT_URI=https://aifabrix-pro-miso-mori.azurewebsites.net/entra-graph-delegated/callback
|
|
299
370
|
|
|
300
371
|
# Optional delegated Graph scopes for GET …/graph-auth-url (space- or comma-separated).
|
|
301
372
|
# 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
|
|
@@ -310,7 +381,7 @@ ENTRA_GRAPH_DELEGATED_REDIRECT_URI=https://aifabrix-pro-mori-web-we.azurewebsite
|
|
|
310
381
|
# only works when a local Mori app is registered and running for this developer.
|
|
311
382
|
# MORI_CALLBACK_API_KEY must be the same secret as Mori MORI_CONTROLLER_CALLBACK_API_KEY
|
|
312
383
|
# (both resolve from kv://mori-callback-api-keyKeyVault — do not generate separate values).
|
|
313
|
-
MORI_BASE_URL=https://aifabrix-pro-mori
|
|
384
|
+
MORI_BASE_URL=https://aifabrix-pro-miso-mori.azurewebsites.net
|
|
314
385
|
MORI_AUTH_METHOD=kv://mori-controller-auth-methodKeyVault
|
|
315
386
|
MORI_CALLBACK_API_KEY=kv://mori-callback-api-keyKeyVault
|
|
316
387
|
MORI_API_KEY=kv://mori-controller-api-keyKeyVault
|
|
@@ -325,7 +396,7 @@ MORI_PASSWORD=kv://mori-controller-basic-passwordKeyVault
|
|
|
325
396
|
|
|
326
397
|
LOG_TO_FILE=true
|
|
327
398
|
LOG_LEVEL=info
|
|
328
|
-
LOG_FILE_PATH
|
|
399
|
+
LOG_FILE_PATH=/mnt/data/logs
|
|
329
400
|
|
|
330
401
|
# =============================================================================
|
|
331
402
|
# OPENTELEMETRY CONFIGURATION
|
|
@@ -34,6 +34,11 @@ roles:
|
|
|
34
34
|
description: 'Read-only access to monitoring, logs, and compliance reports'
|
|
35
35
|
groups: ['AI-Fabrix-Observers']
|
|
36
36
|
|
|
37
|
+
- name: 'AI Fabrix Everyone'
|
|
38
|
+
value: 'aifabrix-everyone'
|
|
39
|
+
description: 'Authenticated-user consume access for Enterprise LLM and platform search (not a Role Assistant)'
|
|
40
|
+
groups: ['AI-Fabrix-Everyone']
|
|
41
|
+
|
|
37
42
|
permissions:
|
|
38
43
|
# Integration clients (Keycloak OIDC clients + control-plane metadata)
|
|
39
44
|
- name: 'integration-client:create'
|
|
@@ -8,6 +8,7 @@ When Claude is activated, AI Fabrix must be self-describing enough that Claude o
|
|
|
8
8
|
|
|
9
9
|
- Name
|
|
10
10
|
- Server URL (Runtime MCP)
|
|
11
|
+
- Authentication: OAuth (the Runtime MCP requires sign-in; Claude’s form defaults to none)
|
|
11
12
|
|
|
12
13
|
Claude then discovers protected-resource metadata, the authorization server, scopes, PKCE `S256`, and client registration. Pre-created `miso-claude` copy-paste is the fallback when discovery does not advertise registration.
|
|
13
14
|
|
|
@@ -24,6 +25,8 @@ Public Anthropic connector auth: https://claude.com/docs/connectors/building/aut
|
|
|
24
25
|
|
|
25
26
|
Claude.ai web, Claude Desktop, Cowork, and mobile use the same account-level custom connector. Remote MCP is brokered by Anthropic, not by a local `claude_desktop_config.json`.
|
|
26
27
|
|
|
28
|
+
The Runtime MCP returns **401** without a user token. In Claude connector settings, Authentication must be **OAuth** (require sign-in). If the connector is saved as “not requiring sign-in”, Claude reports that mismatch (HTTP 401) and an `ofid_…` support reference. Edit the connector, set OAuth, then Connect.
|
|
29
|
+
|
|
27
30
|
## Claude-owned remaining steps
|
|
28
31
|
|
|
29
32
|
Add the custom connector (Owners on Team or Enterprise), authenticate/consent, and enable it. There is no documented Anthropic API for those steps.
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"displayLabel": "Claude",
|
|
51
51
|
"category": "employee-ai",
|
|
52
52
|
"wizardOrder": 32,
|
|
53
|
-
"remainingManualStep": "Add the custom connector (Owners for Team or Enterprise), authenticate, and enable it.",
|
|
53
|
+
"remainingManualStep": "Add the custom connector (Owners for Team or Enterprise), set Authentication to OAuth, authenticate, and enable it.",
|
|
54
54
|
"docsAnchor": "claude",
|
|
55
55
|
"approvalRequired": true,
|
|
56
56
|
"vendorAuthRequired": true
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"displayLabel": "Claude",
|
|
51
51
|
"category": "employee-ai",
|
|
52
52
|
"wizardOrder": 32,
|
|
53
|
-
"remainingManualStep": "Add the custom connector (Owners for Team or Enterprise), authenticate, and enable it.",
|
|
53
|
+
"remainingManualStep": "Add the custom connector (Owners for Team or Enterprise), set Authentication to OAuth, authenticate, and enable it.",
|
|
54
54
|
"docsAnchor": "claude",
|
|
55
55
|
"approvalRequired": true,
|
|
56
56
|
"vendorAuthRequired": true
|
|
@@ -147,6 +147,17 @@
|
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
},
|
|
150
|
+
{
|
|
151
|
+
"name": "ENABLE_MCP_SERVER",
|
|
152
|
+
"value": "false",
|
|
153
|
+
"location": "variable",
|
|
154
|
+
"required": false,
|
|
155
|
+
"portalInput": {
|
|
156
|
+
"field": "select",
|
|
157
|
+
"label": "MCP server",
|
|
158
|
+
"options": ["true", "false"]
|
|
159
|
+
}
|
|
160
|
+
},
|
|
150
161
|
{
|
|
151
162
|
"name": "ENABLE_PROACTIVE_MESSAGING",
|
|
152
163
|
"value": "true",
|
|
@@ -25,6 +25,15 @@ Complete remaining Slack steps in this order:
|
|
|
25
25
|
|
|
26
26
|
`aifabrix channel add` prints the filled URLs for your app. Do not paste client secrets into this file.
|
|
27
27
|
|
|
28
|
+
{{#if enableMcpServer}}
|
|
29
|
+
## MCP server
|
|
30
|
+
|
|
31
|
+
This Slack app is also an MCP client of AI Fabrix Runtime. Connect the **AI Fabrix MCP server** in Slack, then sign in at **AI Fabrix** when Slack asks.
|
|
32
|
+
|
|
33
|
+
The Slack bot token and signing secret stay inbound Events and slash-command auth. They are not the MCP bearer. Do not paste an Integration Client secret into this file.
|
|
34
|
+
|
|
35
|
+
{{/if}}
|
|
36
|
+
|
|
28
37
|
The command may ask **Onboard users?** Yes matches Slack profile email to an existing platform user email and stores the mapping. Unmatched people still use **Link account**. Non-interactive: `--onboard-users` or `--no-onboard-users`. `--force` does not re-onboard unless you pass `--onboard-users` or answer yes again.
|
|
29
38
|
|
|
30
39
|
Optional validation:
|
|
@@ -147,6 +147,17 @@
|
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
},
|
|
150
|
+
{
|
|
151
|
+
"name": "ENABLE_MCP_SERVER",
|
|
152
|
+
"value": "false",
|
|
153
|
+
"location": "variable",
|
|
154
|
+
"required": false,
|
|
155
|
+
"portalInput": {
|
|
156
|
+
"field": "select",
|
|
157
|
+
"label": "MCP server",
|
|
158
|
+
"options": ["true", "false"]
|
|
159
|
+
}
|
|
160
|
+
},
|
|
150
161
|
{
|
|
151
162
|
"name": "ENABLE_PROACTIVE_MESSAGING",
|
|
152
163
|
"value": "true",
|
|
@@ -54,7 +54,8 @@
|
|
|
54
54
|
"im:read",
|
|
55
55
|
"im:write",
|
|
56
56
|
"users:read",
|
|
57
|
-
"users:read.email"
|
|
57
|
+
"users:read.email"{{#if enableMcpServer}},
|
|
58
|
+
"mcp:connect"{{/if}}
|
|
58
59
|
]
|
|
59
60
|
},
|
|
60
61
|
"pkce_enabled": false
|
|
@@ -74,6 +75,8 @@
|
|
|
74
75
|
"org_deploy_enabled": true,
|
|
75
76
|
"socket_mode_enabled": false,
|
|
76
77
|
"token_rotation_enabled": {{slackTokenRotationEnabled}},
|
|
77
|
-
"is_mcp_enabled": false
|
|
78
|
-
}
|
|
78
|
+
"is_mcp_enabled": {{#if enableMcpServer}}true{{else}}false{{/if}}
|
|
79
|
+
}{{#if slackMcpServersJson}},
|
|
80
|
+
"mcp_servers": {{{slackMcpServersJson}}},
|
|
81
|
+
"external_auth_providers": {{{slackExternalAuthJson}}}{{/if}}
|
|
79
82
|
}
|