@aifabrix/builder 2.53.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/bin/aifabrix.js +2 -2
- 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/assistants.api.js +8 -5
- package/lib/api/channel-identity.api.js +41 -0
- package/lib/api/evidence-authoring.api.js +5 -1
- package/lib/api/evidence.api.js +2 -0
- package/lib/api/role-assistant-test-pack.api.js +86 -0
- package/lib/api/types/evidence.types.js +2 -0
- package/lib/api/work-search.api.js +163 -0
- 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 +164 -126
- package/lib/channels/approval-guides/chatgpt.js +14 -18
- package/lib/channels/approval-guides/claude.js +29 -0
- package/lib/channels/approval-guides/index.js +88 -22
- package/lib/channels/approval-guides/mcp-client.js +27 -0
- package/lib/channels/approval-guides/microsoft-copilot.js +52 -3
- package/lib/channels/approval-guides/slack.js +10 -10
- package/lib/channels/approval-guides/teams-bot.js +8 -12
- package/lib/channels/channel-add-continuations.js +91 -0
- package/lib/channels/channel-add-ensure.js +124 -27
- package/lib/channels/channel-add-existing.js +160 -28
- package/lib/channels/channel-add-failure.js +61 -0
- package/lib/channels/channel-add-remaining.js +492 -0
- package/lib/channels/channel-add-tty.js +190 -0
- package/lib/channels/channel-add-wizard-config.js +138 -0
- package/lib/channels/channel-add-wizard.js +250 -0
- package/lib/channels/channel-artifact-generator.js +27 -13
- package/lib/channels/channel-cardinality.js +83 -0
- package/lib/channels/channel-catalog-icon.js +45 -0
- package/lib/channels/channel-cli-instructions.js +75 -0
- package/lib/channels/channel-configuration-map.js +213 -0
- package/lib/channels/channel-credential.js +11 -14
- package/lib/channels/channel-definition-project.js +101 -0
- package/lib/channels/channel-definition-registry.js +154 -0
- package/lib/channels/channel-definition-status.js +115 -0
- package/lib/channels/channel-description.js +60 -2
- package/lib/channels/channel-discovery.js +16 -2
- package/lib/channels/channel-external-system.js +86 -9
- package/lib/channels/channel-install-envelope-actions.js +88 -0
- package/lib/channels/channel-install-envelope-microsoft.js +155 -0
- package/lib/channels/channel-install-envelope.js +358 -0
- package/lib/channels/channel-install-help-md.js +172 -0
- package/lib/channels/channel-install-http-payload.js +62 -0
- package/lib/channels/channel-install-inventory.js +115 -0
- package/lib/channels/channel-install-profiles.js +90 -0
- package/lib/channels/channel-instance-collision.js +118 -0
- package/lib/channels/channel-instance-key.js +100 -0
- package/lib/channels/channel-instance-materialize.js +240 -0
- package/lib/channels/channel-integration-generator.js +18 -9
- package/lib/channels/channel-integration-template.js +101 -22
- package/lib/channels/channel-inventory-fetch.js +79 -0
- package/lib/channels/channel-oauth-preflight.js +104 -0
- package/lib/channels/channel-package-version.js +76 -0
- package/lib/channels/channel-predefined-client.js +154 -0
- package/lib/channels/channel-probe.js +7 -2
- package/lib/channels/channel-runtime-resolver.js +194 -72
- package/lib/channels/channel-status-display.js +86 -16
- package/lib/channels/channel-targets.js +132 -92
- package/lib/channels/chatgpt-callback.js +318 -0
- package/lib/channels/chatgpt-channel-add.js +229 -0
- package/lib/channels/chatgpt-preflight.js +396 -0
- package/lib/channels/chatgpt-runtime-contract.js +17 -0
- package/lib/channels/chatgpt-setup-values.js +124 -0
- package/lib/channels/claude-callback.js +67 -0
- package/lib/channels/claude-channel-add.js +254 -0
- package/lib/channels/claude-runtime-contract.js +40 -0
- package/lib/channels/claude-runtime.js +58 -0
- package/lib/channels/claude-setup-values.js +92 -0
- package/lib/channels/mcp-client/config-merge.js +148 -0
- package/lib/channels/mcp-client/ensure-client.js +231 -0
- package/lib/channels/mcp-client/paths.js +53 -0
- package/lib/channels/mcp-client/profiles.js +122 -0
- package/lib/channels/mcp-client/redirect-uris.js +99 -0
- package/lib/channels/mcp-client/runtime.js +59 -0
- package/lib/channels/mcp-client-channel-add.js +186 -0
- package/lib/channels/microsoft-copilot-channel-add.js +117 -7
- package/lib/channels/microsoft-copilot-entra-identifier-uris.js +187 -0
- package/lib/channels/microsoft-copilot-entra-sso-form.js +106 -18
- package/lib/channels/microsoft-copilot-entra-sso.js +31 -2
- package/lib/channels/microsoft-copilot-package-prior.js +107 -0
- package/lib/channels/microsoft-copilot-package.js +29 -28
- package/lib/channels/microsoft-provisioning/a365.js +80 -0
- package/lib/channels/microsoft-provisioning/auth-config.js +240 -0
- package/lib/channels/microsoft-provisioning/auth.js +179 -0
- package/lib/channels/microsoft-provisioning/cli.js +71 -0
- package/lib/channels/microsoft-provisioning/constants.js +75 -0
- package/lib/channels/microsoft-provisioning/errors.js +117 -0
- package/lib/channels/microsoft-provisioning/index.js +55 -0
- package/lib/channels/microsoft-provisioning/install-atk.js +158 -0
- package/lib/channels/microsoft-provisioning/install-teams.js +115 -0
- package/lib/channels/microsoft-provisioning/login-portal-device.js +236 -0
- package/lib/channels/microsoft-provisioning/login-portal-parse.js +71 -0
- package/lib/channels/microsoft-provisioning/login-portal-teams.js +193 -0
- package/lib/channels/microsoft-provisioning/login-portal.js +230 -0
- package/lib/channels/microsoft-provisioning/persist.js +110 -0
- package/lib/channels/microsoft-provisioning/teams-bot-args.js +119 -0
- package/lib/channels/microsoft-provisioning/teams-bot-controller.js +123 -0
- package/lib/channels/microsoft-provisioning/teams-bot-parse.js +134 -0
- package/lib/channels/microsoft-provisioning/teams-bot-persist.js +113 -0
- package/lib/channels/microsoft-provisioning/teams-bot-provision.js +234 -0
- package/lib/channels/microsoft-provisioning/teams-bot-secrets.js +45 -0
- package/lib/channels/microsoft-provisioning/teams-cli.js +82 -0
- package/lib/channels/runtime-tool-catalog.js +5 -2
- package/lib/channels/slack-channel-add-portal.js +130 -0
- package/lib/channels/slack-channel-add-tty-auth.js +95 -0
- package/lib/channels/slack-channel-add.js +311 -0
- package/lib/channels/slack-mcp-callback.js +51 -0
- package/lib/channels/slack-mcp-runtime.js +156 -0
- package/lib/channels/slack-provisioning/apps.js +181 -0
- package/lib/channels/slack-provisioning/auth-store.js +110 -0
- package/lib/channels/slack-provisioning/auth-ticket.js +185 -0
- package/lib/channels/slack-provisioning/auth.js +115 -0
- package/lib/channels/slack-provisioning/callbacks.js +41 -0
- package/lib/channels/slack-provisioning/cli.js +226 -0
- package/lib/channels/slack-provisioning/constants.js +37 -0
- package/lib/channels/slack-provisioning/credentials.js +169 -0
- package/lib/channels/slack-provisioning/curl-shim.js +132 -0
- package/lib/channels/slack-provisioning/developer-install.js +118 -0
- package/lib/channels/slack-provisioning/env-file.js +120 -0
- package/lib/channels/slack-provisioning/errors.js +47 -0
- package/lib/channels/slack-provisioning/go-ca-bundle.js +137 -0
- package/lib/channels/slack-provisioning/index.js +250 -0
- package/lib/channels/slack-provisioning/install-cli.js +335 -0
- package/lib/channels/slack-provisioning/manifest.js +89 -0
- package/lib/channels/slack-provisioning/oauth-lock.js +33 -0
- package/lib/channels/slack-provisioning/offer-cli.js +113 -0
- package/lib/channels/slack-provisioning/onboard-members.js +122 -0
- package/lib/channels/slack-provisioning/onboard.js +89 -0
- package/lib/channels/slack-provisioning/persist.js +95 -0
- package/lib/channels/slack-provisioning/remaining-urls.js +158 -0
- package/lib/channels/slack-provisioning/with-curl-on-path.js +53 -0
- package/lib/channels/teams-bot-channel-add.js +94 -0
- package/lib/channels/vendor-dataplane-url.js +249 -0
- package/lib/cli/index.js +4 -0
- package/lib/cli/setup-certification-commands.js +2 -2
- package/lib/cli/setup-certification.help.js +5 -1
- package/lib/cli/setup-external-system-help.js +2 -0
- package/lib/cli/setup-external-system.js +1 -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 +366 -0
- package/lib/commands/channel-add-setup.js +162 -80
- package/lib/commands/channel-configure.js +118 -0
- package/lib/commands/channel.js +10 -1
- package/lib/commands/datasource-capability-relate-cli.js +5 -4
- package/lib/commands/governance-upload-external.js +6 -3
- package/lib/commands/lifecycle-command-action.js +2 -5
- package/lib/commands/lifecycle-external.js +93 -21
- 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-datasource-test-payload.js +4 -2
- package/lib/commands/repair-datasource-webhooks-sync-bridge.js +23 -2
- package/lib/commands/repair-datasource.js +3 -0
- package/lib/commands/repair-external-run.js +59 -25
- package/lib/commands/repair-openapi-rest-runtime.js +127 -0
- package/lib/commands/repair-orchestration-tag-merge.js +339 -0
- package/lib/commands/repair-rbac-catalog-defaults.js +96 -0
- package/lib/commands/repair-rbac-platform-preset.js +26 -15
- package/lib/commands/repair-rbac-reader-roles.js +8 -21
- package/lib/commands/repair-rbac.js +26 -44
- package/lib/commands/repair-system-permissions.js +24 -22
- 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 +22 -9
- package/lib/commands/role-assistant-test-result-rows.js +42 -0
- package/lib/commands/role-assistant.js +150 -43
- package/lib/commands/search.js +143 -0
- package/lib/commands/test-e2e-external.js +148 -21
- package/lib/commands/test-trust-external.js +7 -5
- package/lib/commands/upload-credential-push-log.js +2 -1
- package/lib/commands/upload-publish-context.js +1 -1
- package/lib/commands/upload-role-assistant-shell.js +124 -0
- package/lib/commands/upload-sidecar-followups.js +10 -4
- package/lib/commands/upload.js +18 -3
- 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/core/secrets-docker-env.js +4 -1
- package/lib/core/secrets-env-content.js +17 -3
- package/lib/datasource/capability/capability-manifest.js +0 -3
- package/lib/datasource/capability/copy-test-payload.js +3 -0
- 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-helpers.js +26 -1
- package/lib/external-system/deploy.js +22 -8
- package/lib/external-system/download-helpers.js +29 -2
- package/lib/external-system/download-role-assistant.js +109 -4
- package/lib/external-system/download.js +46 -30
- package/lib/external-system/sync-deploy-manifest.js +3 -2
- package/lib/external-system/upload-identity.js +42 -0
- package/lib/generator/index.js +19 -15
- package/lib/generator/split.js +13 -2
- 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 +181 -0
- package/lib/lifecycle/scenario-upload.js +181 -30
- package/lib/programmatic/builder-api-cors.js +143 -0
- package/lib/programmatic/builder-api-request.js +6 -0
- package/lib/programmatic/builder-api-route-dispatch.js +56 -42
- package/lib/programmatic/builder-api-server.js +8 -1
- package/lib/programmatic/capability-registry.js +55 -0
- package/lib/programmatic/channel-install-help-resolve.js +359 -0
- package/lib/programmatic/channel-install-session.js +218 -0
- package/lib/programmatic/help-content/channel-onboarding.md +2 -0
- package/lib/programmatic/help-content/cip-overview.md +3 -1
- package/lib/programmatic/http-raw-response.js +62 -0
- package/lib/programmatic/index.js +2 -0
- package/lib/programmatic/openapi-apply-result-schemas.js +8 -0
- package/lib/programmatic/openapi-channel-install-bindings.js +179 -0
- package/lib/programmatic/openapi-channel-install-schemas.js +289 -0
- package/lib/programmatic/openapi-component-schemas.js +19 -1
- package/lib/programmatic/openapi-description-enricher.js +3 -1
- package/lib/programmatic/openapi-descriptions.js +80 -3
- package/lib/programmatic/openapi-envelope-examples.js +124 -0
- package/lib/programmatic/openapi-operation-bindings.js +9 -1
- package/lib/programmatic/openapi-request-schemas.js +5 -0
- package/lib/programmatic/openapi-schema-descriptions-channel.js +319 -0
- package/lib/programmatic/openapi-schema-descriptions-operations.js +19 -0
- package/lib/programmatic/openapi-spec.js +13 -8
- package/lib/programmatic/platform-rbac-catalog.js +36 -18
- package/lib/programmatic/request-timeout.js +3 -0
- package/lib/programmatic/route-handler-map.js +58 -1
- package/lib/programmatic/route-handlers-context.js +2 -1
- package/lib/programmatic/run-auth-permissions.js +54 -0
- package/lib/programmatic/run-channel-catalog.js +238 -0
- package/lib/programmatic/run-channel-install-artifacts.js +137 -0
- package/lib/programmatic/run-channel-install-copilot.js +353 -0
- package/lib/programmatic/run-channel-install-options.js +236 -0
- package/lib/programmatic/run-channel-install-teams-bot.js +204 -0
- package/lib/programmatic/run-channel-install.js +346 -0
- package/lib/programmatic/run-channel-package.js +87 -7
- package/lib/programmatic/run-download.js +41 -0
- package/lib/programmatic/workspace-context.js +2 -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/evidence-sync.js +4 -2
- package/lib/role-assistant/evidence-validation-issues.js +51 -0
- package/lib/role-assistant/knowledge-sync.js +10 -4
- package/lib/role-assistant/package-validate.js +175 -0
- package/lib/role-assistant/settings.js +49 -2
- 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 +159 -24
- package/lib/role-assistant/test-cases-evidence.js +175 -0
- 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 +247 -0
- package/lib/role-assistant/test-cases.js +71 -172
- 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 +164 -0
- 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-helpers.js +40 -2
- package/lib/role-assistant/test-runner-workhub-soft.js +9 -3
- package/lib/role-assistant/test-runner-workhub.js +74 -32
- package/lib/role-assistant/test-runner.js +66 -11
- package/lib/schema/external-datasource.schema.json +146 -21
- package/lib/schema/external-system.schema.json +177 -2
- package/lib/schema/mcp-client-profile.schema.json +103 -0
- 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/app-path-resolve.js +4 -0
- package/lib/utils/authentication-env-template.js +44 -6
- package/lib/utils/authentication-slot-show.js +153 -0
- package/lib/utils/credential-display.js +43 -1
- package/lib/utils/credential-secrets-env.js +6 -1
- package/lib/utils/env-copy.js +19 -7
- package/lib/utils/external-env-template.js +20 -2
- 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/paths.js +18 -1
- package/lib/utils/platform-shell-package.js +69 -0
- package/lib/utils/port-resolver.js +50 -1
- package/lib/utils/rewrite-name-flag.js +20 -0
- package/lib/utils/role-assistant-paths.js +13 -10
- package/lib/utils/schema-loader.js +37 -0
- package/lib/utils/schema-resolver.js +11 -1
- package/lib/utils/secrets-helpers.js +12 -21
- package/lib/utils/token-manager.js +10 -5
- package/lib/validation/validate-external-file.js +5 -1
- package/lib/validation/validate.js +41 -0
- package/package.json +1 -1
- package/templates/README.md +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/builder-api/env.template +7 -0
- package/templates/applications/dataplane/application.yaml +6 -5
- package/templates/applications/dataplane/env.template +2 -2
- package/templates/applications/dataplane/rbac.yaml +35 -2
- package/templates/applications/keycloak/Dockerfile +30 -4
- package/templates/applications/keycloak/application.yaml +2 -2
- package/templates/applications/keycloak/cimd-lenient-parse/AbstractClientIdMetadataDocumentExecutor.java +896 -0
- package/templates/applications/keycloak/cimd-lenient-parse/SOURCE.md +19 -0
- package/templates/applications/keycloak/env.template +3 -0
- package/templates/applications/miso-controller/application.yaml +1 -2
- package/templates/applications/miso-controller/env.template +10 -9
- package/templates/channels/README.md +5 -5
- package/templates/channels/chatgpt/TROUBLESHOOTING.md +51 -0
- package/templates/channels/chatgpt/channel.json +59 -0
- package/templates/channels/chatgpt/icon.svg +1 -0
- package/templates/channels/chatgpt/install.template.md.hbs +20 -95
- package/templates/channels/chatgpt/integration/README.md +1 -1
- package/templates/channels/chatgpt/integration/application.json +2 -2
- package/templates/channels/chatgpt/integration/chatgpt-system.json +49 -4
- package/templates/channels/chatgpt/integration/env.template +2 -4
- package/templates/channels/chatgpt/integration/rbac.json +13 -0
- package/templates/channels/claude/TROUBLESHOOTING.md +44 -0
- package/templates/channels/claude/channel.json +59 -0
- package/templates/channels/claude/icon.svg +1 -0
- package/templates/channels/claude/install.template.md.hbs +22 -0
- package/templates/channels/claude/integration/README.md +14 -0
- package/templates/channels/claude/integration/application.json +15 -0
- package/templates/channels/claude/integration/claude-system.json +59 -0
- package/templates/channels/claude/integration/env.template +2 -0
- package/templates/channels/claude/integration/rbac.json +13 -0
- package/templates/channels/claude/manifest.template.json.hbs +40 -0
- package/templates/channels/mcp-client/channel.json +72 -0
- package/templates/channels/mcp-client/icon.svg +1 -0
- package/templates/channels/mcp-client/install.template.md.hbs +24 -0
- package/templates/channels/mcp-client/integration/README.md +13 -0
- package/templates/channels/mcp-client/integration/application.json +15 -0
- package/templates/channels/mcp-client/integration/env.template +2 -0
- package/templates/channels/mcp-client/integration/mcp-client-system.json +72 -0
- package/templates/channels/mcp-client/integration/rbac.json +13 -0
- package/templates/channels/mcp-client/manifest.template.json.hbs +41 -0
- package/templates/channels/mcp-client/profiles/cursor.json +26 -0
- package/templates/channels/mcp-client/profiles/github-copilot.json +29 -0
- package/templates/channels/mcp-client/profiles/vscode.json +29 -0
- package/templates/channels/microsoft-copilot/channel.json +73 -0
- package/templates/channels/microsoft-copilot/declarative-agent.template.json.hbs +8 -4
- package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +65 -5
- package/templates/channels/microsoft-copilot/icon.svg +1 -0
- package/templates/channels/microsoft-copilot/install.template.md.hbs +9 -9
- package/templates/channels/microsoft-copilot/integration/README.md +1 -1
- package/templates/channels/microsoft-copilot/integration/application.json +2 -2
- package/templates/channels/microsoft-copilot/integration/env.template +3 -6
- package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +63 -4
- package/templates/channels/microsoft-copilot/integration/rbac.json +13 -0
- package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +5 -5
- package/templates/channels/slack/channel.json +234 -0
- package/templates/channels/slack/icon.svg +1 -0
- package/templates/channels/slack/install.template.md.hbs +45 -28
- package/templates/channels/slack/integration/README.md +245 -22
- package/templates/channels/slack/integration/application.json +44 -7
- package/templates/channels/slack/integration/env.template +15 -6
- package/templates/channels/slack/integration/openapi/openapi.json +126 -0
- package/templates/channels/slack/integration/rbac.json +84 -0
- package/templates/channels/slack/integration/slack-datasource-commands.json +154 -0
- package/templates/channels/slack/integration/slack-datasource-conversations.json +28 -3
- package/templates/channels/slack/integration/slack-datasource-events.json +154 -0
- package/templates/channels/slack/integration/slack-datasource-interactive.json +154 -0
- package/templates/channels/slack/integration/slack-datasource-messages.json +40 -2
- package/templates/channels/slack/integration/slack-system.json +161 -72
- package/templates/channels/slack/manifest.template.json.hbs +10 -4
- package/templates/channels/teams-bot/channel.json +162 -0
- package/templates/channels/teams-bot/icon.svg +1 -0
- package/templates/channels/teams-bot/install.template.md.hbs +12 -13
- package/templates/channels/teams-bot/integration/README.md +5 -4
- package/templates/channels/teams-bot/integration/application.json +6 -4
- package/templates/channels/teams-bot/integration/env.template +5 -4
- package/templates/channels/teams-bot/integration/openapi/openapi.json +68 -0
- package/templates/channels/teams-bot/integration/rbac.json +21 -0
- package/templates/channels/teams-bot/integration/teams-bot-datasource-activities.json +154 -0
- package/templates/channels/teams-bot/integration/teams-bot-system.json +128 -23
- package/templates/channels/web-embed/channel.json +60 -0
- package/templates/channels/web-embed/install.template.md.hbs +1 -1
- package/templates/channels/web-embed/integration/README.md +2 -2
- package/templates/channels/web-embed/integration/application.json +2 -2
- package/templates/channels/web-embed/integration/env.template +1 -1
- package/templates/channels/web-embed/integration/rbac.json +13 -0
- package/templates/channels/web-embed/integration/web-embed-system.json +50 -4
- package/templates/python/docker-compose.hbs +14 -0
- package/templates/typescript/docker-compose.hbs +14 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Evidence lifecycle (PoC)
|
|
2
|
+
|
|
3
|
+
## Flow
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
Demo / workshop / prove observations
|
|
7
|
+
→ learning.md (FACT | ASSUMPTION)
|
|
8
|
+
→ evidence/candidates/ (drafts — not consumed)
|
|
9
|
+
→ validate + certify path
|
|
10
|
+
→ governed Evidence (consumable by Role Assistant)
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Directories
|
|
14
|
+
|
|
15
|
+
| Path | Role |
|
|
16
|
+
| --- | --- |
|
|
17
|
+
| `learning/learning.md` | Delivery log only |
|
|
18
|
+
| `evidence/candidates/` | Candidate drafts (English). **Do not** treat as production-like Evidence |
|
|
19
|
+
| `evidence/` (package root, non-candidates) | Only rows ready for the Evidence certification / consume path |
|
|
20
|
+
| `knowledge/` | Reusable **business understanding** from governed content — not operational decision rules |
|
|
21
|
+
|
|
22
|
+
If Builder upload processes every file under `evidence/`, keep candidates **out of** the upload consume set:
|
|
23
|
+
|
|
24
|
+
- Prefer `evidence/candidates/` and document in learning.md that upload must exclude candidates until certified, **or**
|
|
25
|
+
- Keep drafts only under `.temp/cust-biz-2-build/<roleKey>/evidence-candidates/` until promotion.
|
|
26
|
+
|
|
27
|
+
Default convention for this skill: **`evidence/candidates/`** + explicit prove/build note: do not promote; do not claim Runtime consumption.
|
|
28
|
+
|
|
29
|
+
## Candidate draft shape (English)
|
|
30
|
+
|
|
31
|
+
One purpose per file or per row. Trace to scenario ID in `key` / filename / title.
|
|
32
|
+
|
|
33
|
+
Example filename: `FIN-010-cost-centre-authority.json` (array or single object matching platform Evidence row schema when known).
|
|
34
|
+
|
|
35
|
+
Minimum fields to author:
|
|
36
|
+
|
|
37
|
+
- `key` — includes scenario id slug
|
|
38
|
+
- `title` / `description`
|
|
39
|
+
- `when` — business condition
|
|
40
|
+
- `expectedBehavior` — ground in Reality; respect authority; refuse raw dump / cross-partition; safe-stop when insufficient
|
|
41
|
+
- Mark in learning.md: `ASSUMPTION` vs `FACT`-backed
|
|
42
|
+
|
|
43
|
+
## Promotion gate
|
|
44
|
+
|
|
45
|
+
Promote candidate → governed Evidence only when:
|
|
46
|
+
|
|
47
|
+
1. Business intent confirmed (FACT in learning.md)
|
|
48
|
+
2. Happy + safe-stop tests observed for the scenario
|
|
49
|
+
3. Contract validation + certification path for Evidence completed (public Evidence Fabrix / operate-first RA docs)
|
|
50
|
+
4. learning.md records promotion date + commit
|
|
51
|
+
|
|
52
|
+
## Tests
|
|
53
|
+
|
|
54
|
+
For each in-scope scenario ID:
|
|
55
|
+
|
|
56
|
+
| Case | Purpose |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| `*-happy.yaml` | Agreed business outcome under authority |
|
|
59
|
+
| `*-safestop.yaml` | Refusal / missing authority / insufficient information |
|
|
60
|
+
|
|
61
|
+
Prefer `role-assistant/ra-<roleKey>/tests/<suiteId>/` in this customer repo (package SSOT).
|
|
62
|
+
|
|
63
|
+
## Forbidden
|
|
64
|
+
|
|
65
|
+
- Calling workshop acceptance alone “governed Evidence”
|
|
66
|
+
- Hiding process law in Knowledge
|
|
67
|
+
- Uploading candidates as if certified
|
|
68
|
+
- Skipping safe-stop coverage for authority scenarios
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# learning.md template
|
|
2
|
+
|
|
3
|
+
**Path:** `role-assistant/ra-<roleKey>/learning/learning.md`
|
|
4
|
+
|
|
5
|
+
Delivery learning artifact only. Not Runtime Knowledge. Not governed Evidence.
|
|
6
|
+
|
|
7
|
+
## Skeleton
|
|
8
|
+
|
|
9
|
+
```md
|
|
10
|
+
# PoC learning log
|
|
11
|
+
|
|
12
|
+
## Current PoC hypothesis
|
|
13
|
+
- Process:
|
|
14
|
+
- Role (responsibility / capabilities / safe boundaries):
|
|
15
|
+
- Expected decision / value:
|
|
16
|
+
- Connected System:
|
|
17
|
+
- Audience:
|
|
18
|
+
|
|
19
|
+
## Confirmed facts
|
|
20
|
+
| Fact | Source | Date | Owner | Confidence |
|
|
21
|
+
| --- | --- | --- | --- | --- |
|
|
22
|
+
| … | … | … | … | high/med |
|
|
23
|
+
|
|
24
|
+
## Assumptions
|
|
25
|
+
| Assumption | Why needed | Risk if wrong | Scenario IDs |
|
|
26
|
+
| --- | --- | --- | --- |
|
|
27
|
+
| … | … | … | FIN-010 |
|
|
28
|
+
|
|
29
|
+
## Open questions and safe stops
|
|
30
|
+
- Missing authority / data / baseline / policy / capability:
|
|
31
|
+
- Scenario IDs affected:
|
|
32
|
+
|
|
33
|
+
## Scenario map
|
|
34
|
+
| ID | Demo ask (short) | demo.md | Knowledge | Evidence candidate | Tests |
|
|
35
|
+
| --- | --- | --- | --- | --- | --- |
|
|
36
|
+
| FIN-010 | … | y/n | path or — | candidates/… | happy + safestop |
|
|
37
|
+
|
|
38
|
+
## Observations from proof runs
|
|
39
|
+
| Date | Scenario | Commit | Env | Outcome | Gap class | Notes |
|
|
40
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
41
|
+
| … | FIN-010 | abc123 | dev | pass/fail/safestop | none \| product-gap \| missing-customer-fact \| scope-decision | … |
|
|
42
|
+
|
|
43
|
+
## Changes made
|
|
44
|
+
- YYYY-MM-DD — command — what changed and why
|
|
45
|
+
|
|
46
|
+
## Decision for next iteration
|
|
47
|
+
- Build | Prove | Obtain customer decision | Stop
|
|
48
|
+
- Rationale:
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Mandatory updates by command
|
|
52
|
+
|
|
53
|
+
| Command | Sections to update |
|
|
54
|
+
| --- | --- |
|
|
55
|
+
| `/cust-biz-1-validate` | Hypothesis, facts, assumptions, open questions, baseline / prove-ready decision |
|
|
56
|
+
| `/cust-biz-2-build` | Changes made; scenario map (demo / Knowledge / candidates / tests) |
|
|
57
|
+
| `/cust-biz-3-prove` | Observations table; gap class; decision for next iteration |
|
|
58
|
+
|
|
59
|
+
## Gap class (prove)
|
|
60
|
+
|
|
61
|
+
| Value | Meaning |
|
|
62
|
+
| --- | --- |
|
|
63
|
+
| `none` | Result matches intent |
|
|
64
|
+
| `product-gap` | Platform / capability / Evidence contract issue |
|
|
65
|
+
| `missing-customer-fact` | Need customer answer (baseline, policy, owner) |
|
|
66
|
+
| `scope-decision` | In/out of PoC scope — not a defect |
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aifabrix-role-assistant
|
|
3
|
+
description: >
|
|
4
|
+
Download, author, validate, test, or upload a Role Assistant package under
|
|
5
|
+
role-assistant/ra-*. Use for catalog digital workers. Do not use to invent
|
|
6
|
+
Connected System operations or to edit platform product source.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# aifabrix-role-assistant
|
|
10
|
+
|
|
11
|
+
See [package-boundary.md](references/package-boundary.md) and nested `role-assistant/AGENTS.md`.
|
|
12
|
+
Host runtimes (local vs SSH): [hosts.md](../shared/hosts.md).
|
|
13
|
+
|
|
14
|
+
## Preconditions
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
aifabrix auth status
|
|
18
|
+
aifabrix role list --page-size 1000
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Catalog Business Role and an active user binding are prerequisites.
|
|
22
|
+
Connected Systems this assistant needs must be dataplane **published** (deploy, not upload-only).
|
|
23
|
+
|
|
24
|
+
## Workflow
|
|
25
|
+
|
|
26
|
+
1. `aifabrix download <catalogRoleOrRaKey>` before editing an existing assistant.
|
|
27
|
+
2. Author settings, Knowledge, Evidence, tests, and sidecars per current Builder contracts. Read `aifabrix role-assistant --help`.
|
|
28
|
+
3. `aifabrix role-assistant test …` is allowed without local RA publish.
|
|
29
|
+
4. Upload/deploy RA only when the user explicitly asks in this turn.
|
|
30
|
+
5. Report results honestly.
|
|
31
|
+
|
|
32
|
+
## Hard rules
|
|
33
|
+
|
|
34
|
+
- Package key `ra-<catalogRole>` from the catalog — never `ra-<systemKey>-reader`.
|
|
35
|
+
- Candidate Evidence cannot be reported as certified.
|
|
36
|
+
- Missing subscribed CS capability → fail in CS ownership; no RA-local workaround.
|
|
37
|
+
- No hidden authority, actor, or identity injection.
|
|
38
|
+
- Do not convert RA folders with `aifabrix convert`.
|
|
39
|
+
|
|
40
|
+
## Trigger examples
|
|
41
|
+
|
|
42
|
+
- Create or update the Finance Controller Role Assistant
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Role Assistant package boundary
|
|
2
|
+
|
|
3
|
+
Public docs: https://docs.aifabrix.ai/docs/role-assistants
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
integration/<systemKey>/ Connected System
|
|
7
|
+
role-assistant/ra-<roleKey>/ Role Assistant
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Download writes `role-assistant.yaml` and keeps sidecars. It does not write CS files (`application.*`, `*-system.*`, `*-datasource-*`, `env.template`). Delete those leftovers if they reappear.
|
|
11
|
+
|
|
12
|
+
If download also writes `integration/ra-*`, move sidecars into `role-assistant/ra-*`.
|
|
13
|
+
|
|
14
|
+
Generated RA FKs target **CS** datasource keys. Missing RA FK → fix the CS, re-download.
|
|
15
|
+
|
|
16
|
+
Hand-edit leftover CS manifests under `role-assistant/` is forbidden.
|
|
17
|
+
|
|
18
|
+
Do not invent an API key for `authType: system`.
|
|
19
|
+
Do not treat passivated invent packages (`ra-<vendor>-*`) as catalog workers.
|
|
20
|
+
|
|
21
|
+
Operator **Make available** is separate from CS publish.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Coding hosts — local vs SSH
|
|
2
|
+
|
|
3
|
+
Use this workspace from **Cursor**, **Claude Code**, and **Codex**. Skills live in `.agents/skills/`. Invoke `/aifabrix-*` in Cursor and Claude Code, and `$aifabrix-*` in Codex.
|
|
4
|
+
|
|
5
|
+
Install and sign-in steps are in `AGENTKIT.md`. This file is how to **run** each host on a local machine or over SSH.
|
|
6
|
+
|
|
7
|
+
Do not start Claude or Codex in your home directory. `cd` into this git workspace first.
|
|
8
|
+
|
|
9
|
+
## Auto-approve (optional)
|
|
10
|
+
|
|
11
|
+
`aifabrix agent-kit install` can write gitignored host configs so Claude Code and Codex do not prompt for every tool:
|
|
12
|
+
|
|
13
|
+
- Claude Code: `.claude/settings.local.json` (`permissions.defaultMode` = `bypassPermissions`, `allow` = `Bash(aifabrix *)` and `Read(~/**)`)
|
|
14
|
+
- Codex: `.codex/config.toml` (`approval_policy = "never"`, `sandbox_mode = "workspace-write"`)
|
|
15
|
+
|
|
16
|
+
Those files stay in **this workspace**. Claude may **read** files under the developer home (`Read(~/**)`) and run the delivery CLI (`Bash(aifabrix *)`). They do not add sibling folders as extra workspaces, do not grant Write outside this repo, and do not allow every shell command. TTY asks (default yes). `--yes` or a non-TTY / `--json` run writes them. `--skip-approve-all` skips. `--force` overwrites existing local files. Builder never writes `~/.claude` or `~/.codex`.
|
|
17
|
+
|
|
18
|
+
## Cursor
|
|
19
|
+
|
|
20
|
+
**Local.** Open this folder in Cursor. Skills appear as `/aifabrix-plan` and the other `/aifabrix-*` commands.
|
|
21
|
+
|
|
22
|
+
**SSH.** Use Cursor Remote SSH to the machine that holds the repo. The session is the Cursor window — no tmux required. Same `/aifabrix-*` skills.
|
|
23
|
+
|
|
24
|
+
## Claude Code
|
|
25
|
+
|
|
26
|
+
**Local.**
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
cd /path/to/this-workspace
|
|
30
|
+
claude
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Then `/aifabrix-plan` (or another `/aifabrix-*` skill). First run in a project asks you to trust the folder; accept only this workspace.
|
|
34
|
+
|
|
35
|
+
**SSH (keep the session after you disconnect).** tmux holds the process on the remote machine:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
tmux new -s claude -c /path/to/this-workspace
|
|
39
|
+
claude --remote-control
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Detach without killing Claude: `Ctrl-b` then `d`. Reattach: `tmux attach -t claude`.
|
|
43
|
+
|
|
44
|
+
**Phone and web.** `--remote-control` (or `claude remote-control` in server mode) publishes the same session to [claude.ai/code](https://claude.ai/code) and the Claude mobile app (**Code**). Press space in server mode for a QR code. In an interactive session, `/remote-control` or `/mobile`. Requires a Claude Pro/Max/Team login (`claude auth login`), not an API key.
|
|
45
|
+
|
|
46
|
+
Closing SSH does not stop a tmux session. Stopping tmux or the machine does.
|
|
47
|
+
|
|
48
|
+
## Codex
|
|
49
|
+
|
|
50
|
+
**Local.**
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
cd /path/to/this-workspace
|
|
54
|
+
codex
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Then `$aifabrix-plan` (and the other `$aifabrix-*` skills). Codex reads `AGENTS.md`.
|
|
58
|
+
|
|
59
|
+
**SSH (keep the session after you disconnect).**
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
tmux new -s codex -c /path/to/this-workspace
|
|
63
|
+
codex
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Detach: `Ctrl-b` then `d`. Reattach: `tmux attach -t codex`. Codex has no Claude-style phone/web Remote Control; stay in tmux (or reattach later) to see the session.
|
|
67
|
+
|
|
68
|
+
## tmux cheat sheet
|
|
69
|
+
|
|
70
|
+
| Action | Keys / command |
|
|
71
|
+
| --- | --- |
|
|
72
|
+
| New named session | `tmux new -s <name> -c /path/to/this-workspace` |
|
|
73
|
+
| Detach (leave it running) | `Ctrl-b`, then `d` |
|
|
74
|
+
| List sessions | `tmux ls` |
|
|
75
|
+
| Attach | `tmux attach -t <name>` |
|
|
76
|
+
| Kill session | `tmux kill-session -t <name>` |
|
|
77
|
+
|
|
78
|
+
Use separate session names (`claude` vs `codex`) if both run on the same host.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Plans (customer workspace)
|
|
2
|
+
|
|
3
|
+
Delivery plans for Connected Systems in this workspace.
|
|
4
|
+
**Operational limits for a system live in `integration/<systemKey>/README.md`**, not in Agent Kit skills.
|
|
5
|
+
|
|
6
|
+
## Active
|
|
7
|
+
|
|
8
|
+
| Plan | Focus |
|
|
9
|
+
| --- | --- |
|
|
10
|
+
| — | No active delivery plan yet |
|
|
11
|
+
|
|
12
|
+
## Done
|
|
13
|
+
|
|
14
|
+
| Plan | Focus | Archived |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| — | — | — |
|
|
17
|
+
|
|
18
|
+
## Naming
|
|
19
|
+
|
|
20
|
+
- `{N}.{m}-{slug}.plan.md` under `.cursor/plans/`
|
|
21
|
+
- Archive completed plans under `done/` when finished
|
|
22
|
+
- New delivery work from a business specification starts with **`aifabrix-plan`**
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) {{year}} {{copyrightHolder}}
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -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 \
|
|
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 \
|
|
@@ -29,12 +29,19 @@ MISO_CLIENTSECRET=kv://builder-api-client-secretKeyVault
|
|
|
29
29
|
|
|
30
30
|
# Internal: controller API for token validation (supports all miso-controller auth modes)
|
|
31
31
|
MISO_CONTROLLER_URL=url://miso-controller-internal
|
|
32
|
+
# Public: OAuth profile and remaining-step links shown to vendors (not Docker DNS)
|
|
33
|
+
MISO_CONTROLLER_PUBLIC_URL=url://miso-controller-public
|
|
32
34
|
|
|
33
35
|
# Internal: server-to-dataplane API (MCP execute, upload, governance)
|
|
34
36
|
DATAPLANE_URL=url://dataplane-internal
|
|
37
|
+
# Public: Slack/Teams/ChatGPT callbacks, packages, and portal remaining-step URLs
|
|
38
|
+
DATAPLANE_PUBLIC_URL=url://dataplane-public
|
|
35
39
|
|
|
36
40
|
DEFAULT_ENVIRONMENT=dev
|
|
37
41
|
|
|
42
|
+
# Browser Origin allowlist for portal calls (CORS). url:// expands at resolve.
|
|
43
|
+
ALLOWED_ORIGINS=http://localhost:*,url://host-public,url://host-private,url://dataplane-host-public,url://dataplane-host-private
|
|
44
|
+
|
|
38
45
|
# COM-generated Enterprise MCP owner system (normal MCP execute — no dataplane adapter)
|
|
39
46
|
ENTERPRISE_MCP_SYSTEM_KEY=enterprise-integration-lifecycle
|
|
40
47
|
|
|
@@ -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,14 +71,15 @@ 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
|
|
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
|
+
imageRun: exec python -m uvicorn boot.api:app --host 0.0.0.0 --port ${PORT:-3001}
|
|
77
78
|
# Image policy (442.0): explicit Dockerfile COPY; worker/beat via python -m app.core.*
|
|
78
79
|
# integration/ in image: only onboarding-catalog.json keys (+ deploy/application per key).
|
|
79
80
|
worker: true
|
|
80
|
-
imageRunWorker: exec python -m
|
|
81
|
-
imageRunBeat: exec python -m
|
|
81
|
+
imageRunWorker: exec python -m boot.celery_worker
|
|
82
|
+
imageRunBeat: exec python -m boot.celery_beat
|
|
82
83
|
# Optional one-shot before ANY long-running role (api/worker/beat). Run exactly once per
|
|
83
84
|
# aifabrix run / Deployment — never once-per-container. Schema: application-schema build.deployJob.
|
|
84
85
|
# Local: aifabrix run; remote: miso Deployment via miso-azure (not Docker on controller).
|
|
@@ -21,7 +21,7 @@ AIFABRIX_PLATFORM_LANGUAGE=en
|
|
|
21
21
|
# Docker default (no volume): use LOG_FILE_PATH=/app/logs/app.log (directory created in image).
|
|
22
22
|
# Production with persistent logs: use /mnt/data/logs/app.log and mount a volume at /mnt/data.
|
|
23
23
|
LOG_FILE_PATH=/mnt/data/logs/app.log
|
|
24
|
-
# If true, run without
|
|
24
|
+
# If true, run without Celery (single process). Pair with build.worker: false so worker/beat are not started.
|
|
25
25
|
LOCAL_MODE=false
|
|
26
26
|
|
|
27
27
|
# Celery worker process tuning (dataplane-worker container; optional overrides)
|
|
@@ -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
|
|
@@ -50,6 +50,11 @@ roles:
|
|
|
50
50
|
description: "Discover business context for external systems via REST and MCP"
|
|
51
51
|
groups: ["AI-Fabrix-External-System-Discoverers"]
|
|
52
52
|
|
|
53
|
+
- name: "Everyone"
|
|
54
|
+
value: "aifabrix-everyone"
|
|
55
|
+
description: "Authenticated-user consume access for Enterprise LLM and platform search (not a Role Assistant)"
|
|
56
|
+
groups: ["AI-Fabrix-Everyone"]
|
|
57
|
+
|
|
53
58
|
permissions:
|
|
54
59
|
# Credential management
|
|
55
60
|
- name: "credential:create"
|
|
@@ -158,6 +163,34 @@ permissions:
|
|
|
158
163
|
]
|
|
159
164
|
description: "Read the global Resource Type catalog (list/get)"
|
|
160
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
|
+
|
|
161
194
|
# Generic dataplane operations
|
|
162
195
|
- name: "dataplane:read"
|
|
163
196
|
roles: ["aifabrix-platform-admin", "aifabrix-security-admin", "aifabrix-deployment-admin", "aifabrix-compliance-admin", "aifabrix-developer", "aifabrix-observer"]
|
|
@@ -314,11 +347,11 @@ permissions:
|
|
|
314
347
|
|
|
315
348
|
# Search operations
|
|
316
349
|
- name: "document:search"
|
|
317
|
-
roles: ["aifabrix-
|
|
350
|
+
roles: ["aifabrix-everyone"]
|
|
318
351
|
description: "Search documents"
|
|
319
352
|
|
|
320
353
|
- name: "record:search"
|
|
321
|
-
roles: ["aifabrix-
|
|
354
|
+
roles: ["aifabrix-everyone"]
|
|
322
355
|
description: "Search records"
|
|
323
356
|
|
|
324
357
|
- name: "external-system:discover"
|
|
@@ -1,13 +1,39 @@
|
|
|
1
1
|
# Keycloak Identity and Access Management with Custom Themes
|
|
2
|
-
#
|
|
2
|
+
# Official 26.7.2 distro + experimental CIMD. Does not compile Keycloak from source.
|
|
3
|
+
# One class is recompiled against this image's jars:
|
|
4
|
+
# - PR 51235: CIMD parse ignores unknown JSON fields (ChatGPT client.json)
|
|
5
|
+
# - #50362: strip jwt-bearer (and other confidential-only grants) on public CIMD
|
|
6
|
+
# 26.7 advertises token_endpoint_auth_methods_supported "none" for Claude CIMD.
|
|
3
7
|
|
|
4
|
-
FROM quay.io/keycloak/keycloak:26.
|
|
8
|
+
FROM quay.io/keycloak/keycloak:26.7.2 AS keycloak-base
|
|
9
|
+
|
|
10
|
+
FROM eclipse-temurin:21-jdk-jammy AS cimd-patch
|
|
11
|
+
COPY --from=keycloak-base /opt/keycloak/lib/lib/main /opt/kc-jars/main
|
|
12
|
+
COPY --from=keycloak-base /opt/keycloak/lib/lib/boot /opt/kc-jars/boot
|
|
13
|
+
COPY cimd-lenient-parse/AbstractClientIdMetadataDocumentExecutor.java \
|
|
14
|
+
/tmp/src/org/keycloak/protocol/oauth2/cimd/clientpolicy/executor/AbstractClientIdMetadataDocumentExecutor.java
|
|
15
|
+
RUN mkdir -p /tmp/classes \
|
|
16
|
+
&& find /opt/kc-jars -name '*.jar' | paste -sd: - > /tmp/cp.txt \
|
|
17
|
+
&& { \
|
|
18
|
+
echo --release; echo 21; echo -cp; cat /tmp/cp.txt; echo -d; echo /tmp/classes; \
|
|
19
|
+
echo /tmp/src/org/keycloak/protocol/oauth2/cimd/clientpolicy/executor/AbstractClientIdMetadataDocumentExecutor.java; \
|
|
20
|
+
} > /tmp/javac.args \
|
|
21
|
+
&& javac @/tmp/javac.args \
|
|
22
|
+
&& SERVICES_JAR=$(ls /opt/kc-jars/main/org.keycloak.keycloak-services-*.jar) \
|
|
23
|
+
&& cp "$SERVICES_JAR" /tmp/keycloak-services-patched.jar \
|
|
24
|
+
&& jar uf /tmp/keycloak-services-patched.jar -C /tmp/classes .
|
|
25
|
+
|
|
26
|
+
FROM quay.io/keycloak/keycloak:26.7.2
|
|
5
27
|
|
|
6
28
|
# Set working directory
|
|
7
29
|
WORKDIR /opt/keycloak
|
|
8
30
|
|
|
9
31
|
# Copy custom themes from share directory (only if themes/ folder exists)
|
|
10
32
|
USER root
|
|
33
|
+
COPY --from=cimd-patch /tmp/keycloak-services-patched.jar /tmp/keycloak-services-patched.jar
|
|
34
|
+
RUN SERVICES_JAR=$(ls /opt/keycloak/lib/lib/main/org.keycloak.keycloak-services-*.jar) \
|
|
35
|
+
&& cp /tmp/keycloak-services-patched.jar "$SERVICES_JAR" \
|
|
36
|
+
&& rm /tmp/keycloak-services-patched.jar
|
|
11
37
|
# Use a shell script approach: copy themes if it exists, otherwise skip
|
|
12
38
|
# First, copy everything from build context to a staging area
|
|
13
39
|
COPY . /tmp/build-context/
|
|
@@ -24,7 +50,7 @@ RUN if [ -d "/tmp/build-context/themes" ] && [ "$(ls -A /tmp/build-context/theme
|
|
|
24
50
|
# Build Keycloak with health checks enabled (similar to Keycloak 24.0)
|
|
25
51
|
# This enables the /health, /health/live, /health/ready, and /health/started endpoints
|
|
26
52
|
# Expose health endpoints on main HTTP port (like 24.0) instead of management port
|
|
27
|
-
RUN /opt/keycloak/bin/kc.sh build --health-enabled=true --http-management-health-enabled=false
|
|
53
|
+
RUN /opt/keycloak/bin/kc.sh build --health-enabled=true --http-management-health-enabled=false --features=cimd
|
|
28
54
|
|
|
29
55
|
# Switch back to keycloak user
|
|
30
56
|
USER keycloak
|
|
@@ -34,4 +60,4 @@ EXPOSE 8080
|
|
|
34
60
|
|
|
35
61
|
# Default Keycloak command (can be overridden in docker-compose.yaml)
|
|
36
62
|
# Health checks are enabled via the build step above
|
|
37
|
-
CMD ["start-dev"]
|
|
63
|
+
CMD ["start-dev"]
|
|
@@ -4,7 +4,7 @@ app:
|
|
|
4
4
|
displayName: 'AI Fabrix Keycloak'
|
|
5
5
|
description: 'Identity and Access Management'
|
|
6
6
|
type: webapp
|
|
7
|
-
version: '26.
|
|
7
|
+
version: '26.7.2'
|
|
8
8
|
|
|
9
9
|
# Image Configuration
|
|
10
10
|
image:
|
|
@@ -48,7 +48,7 @@ authentication:
|
|
|
48
48
|
|
|
49
49
|
# Build Configuration
|
|
50
50
|
build:
|
|
51
|
-
context:
|
|
51
|
+
context: . # Docker build context: this app dir (CLI copies it to applications-dev-*)
|
|
52
52
|
dockerfile: builder/Dockerfile # Dockerfile name (empty = use template)
|
|
53
53
|
containerPort: 8080 # Container port (different from local port)
|
|
54
54
|
language: typescript # Runtime language for template selection
|