@aifabrix/builder 2.54.1 → 2.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +130 -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 +239 -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/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/list-external-systems.js +2 -1
- 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-certification-commands.js +2 -2
- package/lib/cli/setup-certification.help.js +3 -1
- package/lib/commands/agent-kit-help.js +79 -0
- package/lib/commands/agent-kit.js +346 -0
- package/lib/commands/channel-add-help.js +5 -5
- package/lib/commands/datasource-capability-relate-cli.js +5 -4
- 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 +117 -48
- 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-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/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 +7 -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 +229 -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/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 +137 -30
- package/lib/role-assistant/test-cases-honesty.js +155 -6
- package/lib/role-assistant/test-cases-lifecycle.js +291 -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 +50 -10
- package/lib/schema/external-datasource.schema.json +36 -5
- package/lib/schema/external-system.schema.json +20 -2
- package/lib/schema/role-assistant-test-case.schema.json +408 -0
- 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/authentication-slot-show.js +153 -0
- package/lib/utils/credential-display.js +43 -1
- 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/schema-loader.js +37 -0
- package/lib/validation/validate-external-file.js +5 -1
- package/lib/validation/validate.js +3 -2
- package/package.json +1 -1
- 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 +83 -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 +58 -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 +51 -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 +50 -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 +42 -0
- package/templates/agent-kit/skills/aifabrix-role-assistant/references/package-boundary.md +21 -0
- package/templates/agent-kit/skills/shared/hosts.md +78 -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 -2
- package/templates/applications/dataplane/env.template +1 -1
- package/templates/applications/dataplane/rbac.yaml +28 -0
- package/templates/applications/keycloak/env.template +3 -3
- package/templates/applications/miso-controller/application.yaml +1 -1
- package/templates/applications/miso-controller/env.template +8 -9
- 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. In a terminal here, run `aifabrix auth status`. If you are not authenticated, run `aifabrix login` (the agent cannot log in for you).
|
|
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.56
|
|
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}
|
|
@@ -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.56
|
|
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
|
|
@@ -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.51'
|
|
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).
|
|
@@ -22,9 +22,10 @@
|
|
|
22
22
|
SKIP_FIRST_TIME_SETUP=false
|
|
23
23
|
|
|
24
24
|
# Force onboarding to run even when a controller row already exists (default: unset/false).
|
|
25
|
-
#
|
|
26
|
-
#
|
|
27
|
-
#
|
|
25
|
+
# Prefer SQL/API one-shot: POST /api/v1/controller/force-onboarding (controller:admin) or set
|
|
26
|
+
# controllers.configuration.setup.forceOnboarding=true — no App Service restart required.
|
|
27
|
+
# Env FORCE_ONBOARDING still works as bootstrap-only when you must restart: set true, restart once,
|
|
28
|
+
# then set back to false. This is NOT a Tenant Activation wizard reset (does not clear activation JSON).
|
|
28
29
|
# FORCE_ONBOARDING=true
|
|
29
30
|
|
|
30
31
|
# Optional custom controller key for onboarding (default: miso-controller)
|
|
@@ -127,7 +128,9 @@ REDIS_PERMISSIONS_TTL=900
|
|
|
127
128
|
KEYCLOAK_REALM=aifabrix
|
|
128
129
|
# Public issuer / browser URL (includes /auth when Keycloak uses KC_HTTP_RELATIVE_PATH=/auth).
|
|
129
130
|
KEYCLOAK_SERVER_URL=url://keycloak-public
|
|
130
|
-
# Internal token/JWKS calls
|
|
131
|
+
# Internal token/JWKS calls use url://keycloak-internal.
|
|
132
|
+
# In Traefik/front-door mode, virtual directory mapping supplies relative path semantics.
|
|
133
|
+
# Do not append /auth again when frontDoorRouting is /auth/* — /auth/auth 404s.
|
|
131
134
|
KEYCLOAK_INTERNAL_SERVER_URL=url://keycloak-internal
|
|
132
135
|
# Docker/internal host and port: used when config from DB has localhost (getDockerKeycloakInternalUrl).
|
|
133
136
|
# Resolved from env-config (e.g. KEYCLOAK_HOST=keycloak, KEYCLOAK_PORT=8080 for docker).
|
|
@@ -247,10 +250,6 @@ SKIP_DB_REDEPLOY=true
|
|
|
247
250
|
# Bootstrap (SKIP_FIRST_TIME_SETUP=false) is separate from the activation wizard.
|
|
248
251
|
DEPLOYMENT=database
|
|
249
252
|
|
|
250
|
-
# Dev/test: open /tenant-activation on Platform Apps (last step). Default false.
|
|
251
|
-
# Does not skip server-side TA — use only when env is already activated/deployed.
|
|
252
|
-
TA_SKIP_TO_APP_DEPLOY=false
|
|
253
|
-
|
|
254
253
|
# Dev/test: show TA Entra "Completing setup" countdown (120s cap). Default false.
|
|
255
254
|
# Exposed to UI via GET /api/v1/tenant/status → showTaCountdown (restart controller after change).
|
|
256
255
|
SHOW_TA_COUNT_DOWN=false
|
|
@@ -325,7 +324,7 @@ MORI_PASSWORD=kv://mori-controller-basic-passwordKeyVault
|
|
|
325
324
|
|
|
326
325
|
LOG_TO_FILE=true
|
|
327
326
|
LOG_LEVEL=info
|
|
328
|
-
LOG_FILE_PATH
|
|
327
|
+
LOG_FILE_PATH=/mnt/data/logs
|
|
329
328
|
|
|
330
329
|
# =============================================================================
|
|
331
330
|
# OPENTELEMETRY CONFIGURATION
|
|
@@ -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
|
}
|
|
@@ -160,6 +160,13 @@ services:
|
|
|
160
160
|
{{#if devMountPath}}
|
|
161
161
|
volumes:
|
|
162
162
|
- {{devMountPath}}:/app
|
|
163
|
+
{{#if requiresStorage}}
|
|
164
|
+
{{#if localDataMountPath}}
|
|
165
|
+
- {{localDataMountPath}}:/mnt/data
|
|
166
|
+
{{else}}
|
|
167
|
+
- {{#if (eq devId 0)}}aifabrix_{{app.key}}_data{{else}}aifabrix_dev{{devId}}_{{app.key}}_data{{/if}}:/mnt/data
|
|
168
|
+
{{/if}}
|
|
169
|
+
{{/if}}
|
|
163
170
|
user: "${AIFABRIX_UID:-1000}:${AIFABRIX_GID:-1000}"
|
|
164
171
|
{{/if}}
|
|
165
172
|
depends_on:
|
|
@@ -188,6 +195,13 @@ services:
|
|
|
188
195
|
{{#if devMountPath}}
|
|
189
196
|
volumes:
|
|
190
197
|
- {{devMountPath}}:/app
|
|
198
|
+
{{#if requiresStorage}}
|
|
199
|
+
{{#if localDataMountPath}}
|
|
200
|
+
- {{localDataMountPath}}:/mnt/data
|
|
201
|
+
{{else}}
|
|
202
|
+
- {{#if (eq devId 0)}}aifabrix_{{app.key}}_data{{else}}aifabrix_dev{{devId}}_{{app.key}}_data{{/if}}:/mnt/data
|
|
203
|
+
{{/if}}
|
|
204
|
+
{{/if}}
|
|
191
205
|
user: "${AIFABRIX_UID:-1000}:${AIFABRIX_GID:-1000}"
|
|
192
206
|
{{/if}}
|
|
193
207
|
depends_on:
|
|
@@ -160,6 +160,13 @@ services:
|
|
|
160
160
|
{{#if devMountPath}}
|
|
161
161
|
volumes:
|
|
162
162
|
- {{devMountPath}}:/app
|
|
163
|
+
{{#if requiresStorage}}
|
|
164
|
+
{{#if localDataMountPath}}
|
|
165
|
+
- {{localDataMountPath}}:/mnt/data
|
|
166
|
+
{{else}}
|
|
167
|
+
- {{#if (eq devId 0)}}aifabrix_{{app.key}}_data{{else}}aifabrix_dev{{devId}}_{{app.key}}_data{{/if}}:/mnt/data
|
|
168
|
+
{{/if}}
|
|
169
|
+
{{/if}}
|
|
163
170
|
user: "${AIFABRIX_UID:-1000}:${AIFABRIX_GID:-1000}"
|
|
164
171
|
{{/if}}
|
|
165
172
|
depends_on:
|
|
@@ -186,6 +193,13 @@ services:
|
|
|
186
193
|
{{#if devMountPath}}
|
|
187
194
|
volumes:
|
|
188
195
|
- {{devMountPath}}:/app
|
|
196
|
+
{{#if requiresStorage}}
|
|
197
|
+
{{#if localDataMountPath}}
|
|
198
|
+
- {{localDataMountPath}}:/mnt/data
|
|
199
|
+
{{else}}
|
|
200
|
+
- {{#if (eq devId 0)}}aifabrix_{{app.key}}_data{{else}}aifabrix_dev{{devId}}_{{app.key}}_data{{/if}}:/mnt/data
|
|
201
|
+
{{/if}}
|
|
202
|
+
{{/if}}
|
|
189
203
|
user: "${AIFABRIX_UID:-1000}:${AIFABRIX_GID:-1000}"
|
|
190
204
|
{{/if}}
|
|
191
205
|
depends_on:
|