@bevel-software/platform-core-backend 0.19.0 → 0.21.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/dist/core/catalog-cache-invalidation.d.ts +7 -2
- package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
- package/dist/core/catalog-cache-invalidation.js +8 -9
- package/dist/core/catalog-cache-invalidation.js.map +1 -1
- package/dist/core/core-ports.d.ts +19 -0
- package/dist/core/core-ports.d.ts.map +1 -1
- package/dist/core/core-ports.js.map +1 -1
- package/dist/core/create-core-server.d.ts +2 -0
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +45 -105
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +33 -5
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +146 -82
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +74 -28
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +157 -20
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core/public-config.d.ts +5 -1
- package/dist/core/public-config.d.ts.map +1 -1
- package/dist/core/public-config.js +7 -5
- package/dist/core/public-config.js.map +1 -1
- package/dist/core-config.d.ts +95 -1
- package/dist/core-config.d.ts.map +1 -1
- package/dist/core-config.js +24 -8
- package/dist/core-config.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +18 -1
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +19 -8
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts +2 -1
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +10 -10
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/change-read-gate.d.ts +6 -3
- package/dist/modules/access/change-read-gate.d.ts.map +1 -1
- package/dist/modules/access/change-read-gate.js +9 -6
- package/dist/modules/access/change-read-gate.js.map +1 -1
- package/dist/modules/access/creator-access.d.ts +4 -2
- package/dist/modules/access/creator-access.d.ts.map +1 -1
- package/dist/modules/access/creator-access.js +7 -4
- package/dist/modules/access/creator-access.js.map +1 -1
- package/dist/modules/agent-instructions/read-preamble.d.ts +2 -1
- package/dist/modules/agent-instructions/read-preamble.d.ts.map +1 -1
- package/dist/modules/agent-instructions/read-preamble.js +6 -9
- package/dist/modules/agent-instructions/read-preamble.js.map +1 -1
- package/dist/modules/audit/agent-audit.service.d.ts +54 -0
- package/dist/modules/audit/agent-audit.service.d.ts.map +1 -0
- package/dist/modules/audit/agent-audit.service.js +290 -0
- package/dist/modules/audit/agent-audit.service.js.map +1 -0
- package/dist/modules/audit/agent-rest-audit.middleware.d.ts +40 -0
- package/dist/modules/audit/agent-rest-audit.middleware.d.ts.map +1 -0
- package/dist/modules/audit/agent-rest-audit.middleware.js +75 -0
- package/dist/modules/audit/agent-rest-audit.middleware.js.map +1 -0
- package/dist/modules/audit/audit.contract.d.ts +145 -0
- package/dist/modules/audit/audit.contract.d.ts.map +1 -0
- package/dist/modules/audit/audit.contract.js +35 -0
- package/dist/modules/audit/audit.contract.js.map +1 -0
- package/dist/modules/audit/audit.routes.d.ts +21 -0
- package/dist/modules/audit/audit.routes.d.ts.map +1 -0
- package/dist/modules/audit/audit.routes.js +157 -0
- package/dist/modules/audit/audit.routes.js.map +1 -0
- package/dist/modules/audit/event-classifier.d.ts +52 -0
- package/dist/modules/audit/event-classifier.d.ts.map +1 -0
- package/dist/modules/audit/event-classifier.js +123 -0
- package/dist/modules/audit/event-classifier.js.map +1 -0
- package/dist/modules/audit/index.d.ts +7 -0
- package/dist/modules/audit/index.d.ts.map +1 -0
- package/dist/modules/audit/index.js +7 -0
- package/dist/modules/audit/index.js.map +1 -0
- package/dist/modules/audit/request-audit.d.ts +57 -0
- package/dist/modules/audit/request-audit.d.ts.map +1 -0
- package/dist/modules/audit/request-audit.js +117 -0
- package/dist/modules/audit/request-audit.js.map +1 -0
- package/dist/modules/auth/account-admission.d.ts +40 -0
- package/dist/modules/auth/account-admission.d.ts.map +1 -0
- package/dist/modules/auth/account-admission.js +17 -0
- package/dist/modules/auth/account-admission.js.map +1 -0
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +4 -1
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +19 -1
- package/dist/modules/auth/auth.service.d.ts.map +1 -1
- package/dist/modules/auth/auth.service.js +33 -1
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/oidc-auth-provider.d.ts.map +1 -1
- package/dist/modules/auth/oidc-auth-provider.js +9 -0
- package/dist/modules/auth/oidc-auth-provider.js.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.d.ts +13 -1
- package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.js +10 -2
- package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
- package/dist/modules/database/advisory-lock.d.ts +17 -0
- package/dist/modules/database/advisory-lock.d.ts.map +1 -1
- package/dist/modules/database/advisory-lock.js +24 -3
- package/dist/modules/database/advisory-lock.js.map +1 -1
- package/dist/modules/database/connection.d.ts +67 -2
- package/dist/modules/database/connection.d.ts.map +1 -1
- package/dist/modules/database/connection.js +118 -12
- package/dist/modules/database/connection.js.map +1 -1
- package/dist/modules/database/core-schema.d.ts +414 -0
- package/dist/modules/database/core-schema.d.ts.map +1 -1
- package/dist/modules/database/core-schema.js +99 -0
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/database/migrate.d.ts +1 -1
- package/dist/modules/database/migrate.d.ts.map +1 -1
- package/dist/modules/database/migrate.js +27 -3
- package/dist/modules/database/migrate.js.map +1 -1
- package/dist/modules/diff/diff.service.d.ts.map +1 -1
- package/dist/modules/diff/diff.service.js +6 -1
- package/dist/modules/diff/diff.service.js.map +1 -1
- package/dist/modules/kb-fs/branch-name.d.ts +0 -1
- package/dist/modules/kb-fs/branch-name.d.ts.map +1 -1
- package/dist/modules/kb-fs/branch-name.js +3 -3
- package/dist/modules/kb-fs/branch-name.js.map +1 -1
- package/dist/modules/kb-fs/clone-config.d.ts +9 -8
- package/dist/modules/kb-fs/clone-config.d.ts.map +1 -1
- package/dist/modules/kb-fs/clone-config.js +14 -12
- package/dist/modules/kb-fs/clone-config.js.map +1 -1
- package/dist/modules/kb-fs/git-guarded-filesystem.d.ts +9 -1
- package/dist/modules/kb-fs/git-guarded-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/git-guarded-filesystem.js +16 -3
- package/dist/modules/kb-fs/git-guarded-filesystem.js.map +1 -1
- package/dist/modules/mcp/mcp-auth.middleware.d.ts +1 -0
- package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -1
- package/dist/modules/mcp/mcp-auth.middleware.js +32 -0
- package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -1
- package/dist/modules/mcp/mcp.routes.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.routes.js +8 -1
- package/dist/modules/mcp/mcp.routes.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +16 -1
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +52 -9
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts +59 -0
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js +180 -8
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
- package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts +4 -4
- package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts.map +1 -1
- package/dist/modules/plugins/compile/marketplace-compiler.service.js +7 -10
- package/dist/modules/plugins/compile/marketplace-compiler.service.js.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.d.ts +4 -1
- package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.js +5 -3
- package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.js.map +1 -1
- package/dist/modules/plugins/discovery/kb-plugin-source.d.ts +6 -1
- package/dist/modules/plugins/discovery/kb-plugin-source.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/kb-plugin-source.js +14 -9
- package/dist/modules/plugins/discovery/kb-plugin-source.js.map +1 -1
- package/dist/modules/plugins/discovery/native.source.d.ts +4 -1
- package/dist/modules/plugins/discovery/native.source.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/native.source.js +4 -2
- package/dist/modules/plugins/discovery/native.source.js.map +1 -1
- package/dist/modules/plugins/index.d.ts +1 -1
- package/dist/modules/plugins/index.d.ts.map +1 -1
- package/dist/modules/plugins/index.js +1 -1
- package/dist/modules/plugins/index.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +3 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.js +6 -6
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
- package/dist/modules/plugins/join-requests.service.d.ts +3 -1
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +9 -8
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-links.d.ts +65 -10
- package/dist/modules/plugins/plugin-links.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-links.js +136 -31
- package/dist/modules/plugins/plugin-links.js.map +1 -1
- package/dist/modules/plugins/plugin-links.service.d.ts +107 -5
- package/dist/modules/plugins/plugin-links.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-links.service.js +151 -21
- package/dist/modules/plugins/plugin-links.service.js.map +1 -1
- package/dist/modules/plugins/plugin-provision.service.d.ts +10 -3
- package/dist/modules/plugins/plugin-provision.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-provision.service.js +33 -26
- package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.d.ts +4 -2
- package/dist/modules/plugins/plugin-rename.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.js +10 -12
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +3 -0
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +45 -15
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/plugins/plugins.service.d.ts +4 -4
- package/dist/modules/plugins/plugins.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.service.js +7 -10
- package/dist/modules/plugins/plugins.service.js.map +1 -1
- package/dist/modules/plugins/teams.routes.d.ts +4 -1
- package/dist/modules/plugins/teams.routes.d.ts.map +1 -1
- package/dist/modules/plugins/teams.routes.js +11 -9
- package/dist/modules/plugins/teams.routes.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +1 -1
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js +1 -1
- package/dist/modules/secrets-vault/index.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-variable-loader.d.ts +29 -11
- package/dist/modules/secrets-vault/secrets-variable-loader.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-variable-loader.js +46 -21
- package/dist/modules/secrets-vault/secrets-variable-loader.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +3 -0
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +4 -6
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
- package/dist/modules/settings/deployment-settings.service.d.ts +22 -10
- package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +52 -28
- package/dist/modules/settings/deployment-settings.service.js.map +1 -1
- package/dist/modules/settings/setup.routes.d.ts +9 -2
- package/dist/modules/settings/setup.routes.d.ts.map +1 -1
- package/dist/modules/settings/setup.routes.js +20 -14
- package/dist/modules/settings/setup.routes.js.map +1 -1
- package/dist/modules/skills/allowed-tools-check.d.ts +4 -3
- package/dist/modules/skills/allowed-tools-check.d.ts.map +1 -1
- package/dist/modules/skills/allowed-tools-check.js +8 -8
- package/dist/modules/skills/allowed-tools-check.js.map +1 -1
- package/dist/modules/skills/pending-skills.service.d.ts +3 -1
- package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
- package/dist/modules/skills/pending-skills.service.js +9 -6
- package/dist/modules/skills/pending-skills.service.js.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +6 -6
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
- package/dist/modules/skills/skills.routes.d.ts +4 -1
- package/dist/modules/skills/skills.routes.d.ts.map +1 -1
- package/dist/modules/skills/skills.routes.js +4 -4
- package/dist/modules/skills/skills.routes.js.map +1 -1
- package/dist/modules/skills/skills.service.d.ts +4 -2
- package/dist/modules/skills/skills.service.d.ts.map +1 -1
- package/dist/modules/skills/skills.service.js +13 -11
- package/dist/modules/skills/skills.service.js.map +1 -1
- package/dist/modules/tool-auth/external-api-key.interface.d.ts +21 -5
- package/dist/modules/tool-auth/external-api-key.interface.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.interface.js.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.d.ts +1 -0
- package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.js +22 -9
- package/dist/modules/tool-auth/external-api-key.service.js.map +1 -1
- package/dist/modules/tool-auth/internal-token.service.d.ts +10 -0
- package/dist/modules/tool-auth/internal-token.service.d.ts.map +1 -1
- package/dist/modules/tool-auth/internal-token.service.js +1 -0
- package/dist/modules/tool-auth/internal-token.service.js.map +1 -1
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts +8 -0
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -1
- package/dist/modules/tool-auth/tool-auth.middleware.js +9 -1
- package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.d.ts +2 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.js +6 -5
- package/dist/modules/tool-manuals/mcp-json-discovery.js.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts +4 -2
- package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js +12 -10
- package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.js +19 -16
- package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.d.ts +4 -2
- package/dist/modules/tool-manuals/tool-delete.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js +14 -12
- package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts +3 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.js +7 -7
- package/dist/modules/tool-manuals/tool-manuals.routes.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +4 -2
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +15 -12
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -0
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +4 -6
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts +3 -2
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js +9 -9
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
- package/dist/modules/workflow/git/git.service.d.ts +11 -5
- package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/git.service.js +23 -14
- package/dist/modules/workflow/git/git.service.js.map +1 -1
- package/dist/modules/workflow/git/node-git-runner.d.ts +26 -2
- package/dist/modules/workflow/git/node-git-runner.d.ts.map +1 -1
- package/dist/modules/workflow/git/node-git-runner.js +35 -5
- package/dist/modules/workflow/git/node-git-runner.js.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js +9 -4
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -1
- package/dist/modules/workflow/session-ontology.service.d.ts +6 -1
- package/dist/modules/workflow/session-ontology.service.d.ts.map +1 -1
- package/dist/modules/workflow/session-ontology.service.js +6 -2
- package/dist/modules/workflow/session-ontology.service.js.map +1 -1
- package/dist/modules/workflow/workflow.service.d.ts +8 -3
- package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.service.js +33 -23
- package/dist/modules/workflow/workflow.service.js.map +1 -1
- package/dist/modules/workspace/session-ontology.gate.d.ts +3 -1
- package/dist/modules/workspace/session-ontology.gate.d.ts.map +1 -1
- package/dist/modules/workspace/session-ontology.gate.js +3 -3
- package/dist/modules/workspace/session-ontology.gate.js.map +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts +4 -3
- package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-git.js +15 -13
- package/dist/modules/workspace/startup/kb-git.js.map +1 -1
- package/dist/modules/workspace/startup/kb-startup-runner.d.ts +5 -8
- package/dist/modules/workspace/startup/kb-startup-runner.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-startup-runner.js +35 -38
- package/dist/modules/workspace/startup/kb-startup-runner.js.map +1 -1
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.d.ts +7 -1
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js +23 -16
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/personal-spaces.step.d.ts +7 -1
- package/dist/modules/workspace/startup/steps/personal-spaces.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/personal-spaces.step.js +12 -5
- package/dist/modules/workspace/startup/steps/personal-spaces.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/plugin-display-names.step.d.ts +7 -1
- package/dist/modules/workspace/startup/steps/plugin-display-names.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/plugin-display-names.step.js +12 -5
- package/dist/modules/workspace/startup/steps/plugin-display-names.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/plugin-manifests.step.d.ts +7 -1
- package/dist/modules/workspace/startup/steps/plugin-manifests.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/plugin-manifests.step.js +12 -5
- package/dist/modules/workspace/startup/steps/plugin-manifests.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts +4 -1
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +14 -11
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +17 -3
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.js +36 -30
- package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.d.ts +6 -1
- package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.js +10 -6
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
- package/dist/modules/workspace/workspace.routes.d.ts +2 -1
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +8 -7
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +26 -12
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +41 -28
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +2 -1
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +69 -31
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/modules/workspace/write-denial.d.ts +3 -2
- package/dist/modules/workspace/write-denial.d.ts.map +1 -1
- package/dist/modules/workspace/write-denial.js +6 -5
- package/dist/modules/workspace/write-denial.js.map +1 -1
- package/dist/shared/git-internals.d.ts +7 -1
- package/dist/shared/git-internals.d.ts.map +1 -1
- package/dist/shared/git-internals.js +67 -9
- package/dist/shared/git-internals.js.map +1 -1
- package/dist/shared/git.contract.d.ts +52 -7
- package/dist/shared/git.contract.d.ts.map +1 -1
- package/dist/shared/git.contract.js +30 -8
- package/dist/shared/git.contract.js.map +1 -1
- package/dist/shared/kb-context.d.ts +76 -0
- package/dist/shared/kb-context.d.ts.map +1 -0
- package/dist/shared/kb-context.js +108 -0
- package/dist/shared/kb-context.js.map +1 -0
- package/dist/shared/kb-layout.d.ts +3 -2
- package/dist/shared/kb-layout.d.ts.map +1 -1
- package/dist/shared/kb-layout.js +4 -3
- package/dist/shared/kb-layout.js.map +1 -1
- package/dist/shared/kb-layout.test.js +35 -27
- package/dist/shared/kb-layout.test.js.map +1 -1
- package/dist/shared/pending-proposals.d.ts +4 -1
- package/dist/shared/pending-proposals.d.ts.map +1 -1
- package/dist/shared/pending-proposals.js +3 -4
- package/dist/shared/pending-proposals.js.map +1 -1
- package/dist/shared/redact-secret.d.ts +5 -5
- package/dist/shared/redact-secret.js +5 -5
- package/dist/tenancy/index.d.ts +13 -0
- package/dist/tenancy/index.d.ts.map +1 -0
- package/dist/tenancy/index.js +13 -0
- package/dist/tenancy/index.js.map +1 -0
- package/dist/tenancy/static-tenant-source.d.ts +98 -0
- package/dist/tenancy/static-tenant-source.d.ts.map +1 -0
- package/dist/tenancy/static-tenant-source.js +220 -0
- package/dist/tenancy/static-tenant-source.js.map +1 -0
- package/dist/tenancy/tenant-host.d.ts +80 -0
- package/dist/tenancy/tenant-host.d.ts.map +1 -0
- package/dist/tenancy/tenant-host.js +217 -0
- package/dist/tenancy/tenant-host.js.map +1 -0
- package/dist/tenancy/tenant-runtime.d.ts +91 -0
- package/dist/tenancy/tenant-runtime.d.ts.map +1 -0
- package/dist/tenancy/tenant-runtime.js +174 -0
- package/dist/tenancy/tenant-runtime.js.map +1 -0
- package/dist/tenancy/tenant-secrets.d.ts +24 -0
- package/dist/tenancy/tenant-secrets.d.ts.map +1 -0
- package/dist/tenancy/tenant-secrets.js +30 -0
- package/dist/tenancy/tenant-secrets.js.map +1 -0
- package/dist/tenancy/tenant-source.contract.d.ts +45 -0
- package/dist/tenancy/tenant-source.contract.d.ts.map +1 -0
- package/dist/tenancy/tenant-source.contract.js +21 -0
- package/dist/tenancy/tenant-source.contract.js.map +1 -0
- package/migrations/0000_core_init.sql +14 -14
- package/migrations/0003_deployment_settings.sql +1 -1
- package/migrations/0005_github_facade.sql +1 -1
- package/migrations/0012_agent_audit.sql +41 -0
- package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -0
- package/migrations/meta/0012_snapshot.json +2247 -0
- package/migrations/meta/0013_snapshot.json +2259 -0
- package/migrations/meta/_journal.json +14 -0
- package/package.json +4 -4
- package/src/__tests__/branch-model.test.ts +7 -6
- package/src/__tests__/kb-context.ts +30 -0
- package/src/__tests__/kb-layout-config.test.ts +35 -30
- package/src/core/__tests__/catalog-cache-invalidation.test.ts +2 -1
- package/src/core/__tests__/lifecycle.test.ts +78 -1
- package/src/core/__tests__/public-config.test.ts +5 -1
- package/src/core/catalog-cache-invalidation.ts +16 -11
- package/src/core/core-ports.ts +19 -0
- package/src/core/create-core-server.ts +55 -106
- package/src/core/create-core-services.ts +193 -95
- package/src/core/lifecycle.ts +214 -29
- package/src/core/public-config.ts +8 -5
- package/src/core-config.ts +107 -8
- package/src/index.ts +25 -2
- package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +2 -1
- package/src/modules/access/__tests__/access.routes.batch.test.ts +2 -1
- package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +2 -1
- package/src/modules/access/__tests__/access.routes.group-grant.test.ts +2 -1
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +2 -1
- package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +2 -1
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +2 -1
- package/src/modules/access/__tests__/access.routes.revoke.test.ts +2 -1
- package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +2 -1
- package/src/modules/access/__tests__/change-read-gate.test.ts +13 -11
- package/src/modules/access/__tests__/creator-access.test.ts +3 -2
- package/src/modules/access/__tests__/roles.routes.test.ts +2 -1
- package/src/modules/access/access-control.service.ts +20 -6
- package/src/modules/access/access.routes.ts +10 -13
- package/src/modules/access/change-read-gate.ts +10 -4
- package/src/modules/access/creator-access.ts +7 -2
- package/src/modules/agent-instructions/__tests__/read-preamble.test.ts +13 -12
- package/src/modules/agent-instructions/read-preamble.ts +10 -12
- package/src/modules/audit/__tests__/agent-audit.service.test.ts +370 -0
- package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -0
- package/src/modules/audit/__tests__/audit.routes.test.ts +201 -0
- package/src/modules/audit/__tests__/event-classifier.test.ts +121 -0
- package/src/modules/audit/agent-audit.service.ts +316 -0
- package/src/modules/audit/agent-rest-audit.middleware.ts +83 -0
- package/src/modules/audit/audit.contract.ts +164 -0
- package/src/modules/audit/audit.routes.ts +168 -0
- package/src/modules/audit/event-classifier.ts +155 -0
- package/src/modules/audit/index.ts +14 -0
- package/src/modules/audit/request-audit.ts +141 -0
- package/src/modules/auth/__tests__/account.routes.test.ts +15 -0
- package/src/modules/auth/__tests__/auth.service.test.ts +60 -0
- package/src/modules/auth/account-admission.ts +44 -0
- package/src/modules/auth/account.routes.ts +4 -1
- package/src/modules/auth/auth.service.ts +33 -1
- package/src/modules/auth/oidc-auth-provider.ts +9 -0
- package/src/modules/connection-probe/connection-probe.service.ts +7 -1
- package/src/modules/database/__tests__/advisory-lock.test.ts +23 -1
- package/src/modules/database/__tests__/connection.test.ts +98 -0
- package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -0
- package/src/modules/database/advisory-lock.ts +28 -4
- package/src/modules/database/connection.ts +143 -13
- package/src/modules/database/core-schema.ts +104 -0
- package/src/modules/database/migrate.ts +48 -14
- package/src/modules/diff/__tests__/diff.service.seed-atomicity.test.ts +2 -1
- package/src/modules/diff/__tests__/diff.service.test.ts +2 -1
- package/src/modules/diff/diff.service.ts +6 -1
- package/src/modules/kb-fs/__tests__/branch-name.test.ts +6 -6
- package/src/modules/kb-fs/__tests__/clone-config.test.ts +24 -20
- package/src/modules/kb-fs/branch-name.ts +3 -3
- package/src/modules/kb-fs/clone-config.ts +15 -12
- package/src/modules/kb-fs/git-guarded-filesystem.ts +16 -3
- package/src/modules/marketplace/__tests__/marketplace-repo.head.test.ts +2 -1
- package/src/modules/mcp/__tests__/bevel-oauth-provider.test.ts +183 -13
- package/src/modules/mcp/__tests__/mcp-auth.middleware.test.ts +60 -2
- package/src/modules/mcp/__tests__/mcp.routes.local-token.test.ts +24 -4
- package/src/modules/mcp/__tests__/mcp.routes.stateless.test.ts +1 -1
- package/src/modules/mcp/__tests__/mcp.service.test.ts +120 -3
- package/src/modules/mcp/mcp-auth.middleware.ts +31 -0
- package/src/modules/mcp/mcp.routes.ts +11 -1
- package/src/modules/mcp/mcp.service.ts +73 -8
- package/src/modules/mcp/oauth/bevel-oauth-provider.ts +184 -6
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +12 -11
- package/src/modules/plugins/__tests__/bundle-dialect.test.ts +2 -1
- package/src/modules/plugins/__tests__/compile-marketplace.test.ts +6 -4
- package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +2 -1
- package/src/modules/plugins/__tests__/join-requests.service.test.ts +2 -1
- package/src/modules/plugins/__tests__/plugin-creation-display-name.test.ts +4 -3
- package/src/modules/plugins/__tests__/plugin-index.service.test.ts +6 -4
- package/src/modules/plugins/__tests__/plugin-links.service.test.ts +220 -5
- package/src/modules/plugins/__tests__/plugin-provision.service.test.ts +3 -1
- package/src/modules/plugins/__tests__/plugin-rename.service.test.ts +7 -6
- package/src/modules/plugins/__tests__/plugins.routes.test.ts +11 -2
- package/src/modules/plugins/__tests__/teams.routes.test.ts +2 -1
- package/src/modules/plugins/compile/marketplace-compiler.service.ts +7 -9
- package/src/modules/plugins/discovery/__tests__/kb-plugin-source.test.ts +20 -16
- package/src/modules/plugins/discovery/bundle-dialect/bundle.source.ts +9 -2
- package/src/modules/plugins/discovery/kb-plugin-source.ts +15 -8
- package/src/modules/plugins/discovery/native.source.ts +4 -1
- package/src/modules/plugins/index.ts +1 -1
- package/src/modules/plugins/join-request-jobs.service.ts +8 -7
- package/src/modules/plugins/join-requests.service.ts +7 -7
- package/src/modules/plugins/plugin-links.service.ts +192 -19
- package/src/modules/plugins/plugin-links.ts +147 -27
- package/src/modules/plugins/plugin-provision.service.ts +54 -27
- package/src/modules/plugins/plugin-rename.service.ts +10 -10
- package/src/modules/plugins/plugins.routes.ts +45 -15
- package/src/modules/plugins/plugins.service.ts +7 -11
- package/src/modules/plugins/teams.routes.ts +16 -8
- package/src/modules/secrets-vault/__tests__/connect-pending.route.test.ts +7 -0
- package/src/modules/secrets-vault/__tests__/secrets-variable-loader.test.ts +40 -0
- package/src/modules/secrets-vault/__tests__/tool-owner-gate.route.test.ts +2 -0
- package/src/modules/secrets-vault/index.ts +2 -0
- package/src/modules/secrets-vault/secrets-variable-loader.ts +51 -21
- package/src/modules/secrets-vault/secrets-vault.routes.ts +7 -6
- package/src/modules/settings/__tests__/deployment-settings.service.test.ts +59 -11
- package/src/modules/settings/__tests__/git-root-folders.test.ts +2 -1
- package/src/modules/settings/__tests__/setup.routes.boot-failure.test.ts +2 -1
- package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +7 -4
- package/src/modules/settings/__tests__/setup.routes.oidc.test.ts +2 -0
- package/src/modules/settings/__tests__/setup.routes.sync-status.test.ts +2 -0
- package/src/modules/settings/__tests__/setup.routes.test.ts +33 -52
- package/src/modules/settings/deployment-settings.service.ts +68 -28
- package/src/modules/settings/setup.routes.ts +26 -16
- package/src/modules/skills/__tests__/allowed-tools-check.test.ts +11 -10
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +4 -3
- package/src/modules/skills/__tests__/pending-skills.service.test.ts +3 -1
- package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +2 -1
- package/src/modules/skills/__tests__/skills.routes.warnings.test.ts +2 -1
- package/src/modules/skills/__tests__/skills.service.test.ts +3 -2
- package/src/modules/skills/allowed-tools-check.ts +7 -6
- package/src/modules/skills/pending-skills.service.ts +9 -8
- package/src/modules/skills/skill-access-requests.routes.ts +7 -7
- package/src/modules/skills/skills.routes.ts +4 -3
- package/src/modules/skills/skills.service.ts +13 -9
- package/src/modules/tool-auth/__tests__/external-api-key.service.test.ts +29 -8
- package/src/modules/tool-auth/__tests__/internal-token.service.test.ts +6 -0
- package/src/modules/tool-auth/external-api-key.interface.ts +22 -5
- package/src/modules/tool-auth/external-api-key.service.ts +25 -8
- package/src/modules/tool-auth/internal-token.service.ts +11 -0
- package/src/modules/tool-auth/tool-auth.middleware.ts +17 -1
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +3 -2
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +3 -2
- package/src/modules/tool-manuals/__tests__/mcp-json-discovery.test.ts +17 -12
- package/src/modules/tool-manuals/__tests__/mcp-server-edit.service.test.ts +2 -1
- package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +4 -1
- package/src/modules/tool-manuals/__tests__/tool-delete.service.test.ts +2 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.archive.route.test.ts +2 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.cli.test.ts +5 -4
- package/src/modules/tool-manuals/__tests__/tool-manuals.detail.route.test.ts +2 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.invalid.routes.test.ts +4 -2
- package/src/modules/tool-manuals/__tests__/tool-manuals.invalid.test.ts +13 -5
- package/src/modules/tool-manuals/__tests__/tool-manuals.mcp-oauth.test.ts +2 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +9 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.service.test.ts +3 -2
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +2 -0
- package/src/modules/tool-manuals/mcp-json-discovery.ts +6 -4
- package/src/modules/tool-manuals/mcp-server-edit.service.ts +13 -11
- package/src/modules/tool-manuals/pending-tools.service.ts +19 -16
- package/src/modules/tool-manuals/tool-delete.service.ts +13 -10
- package/src/modules/tool-manuals/tool-manuals.routes.ts +10 -8
- package/src/modules/tool-manuals/tool-manuals.service.ts +15 -13
- package/src/modules/tool-manuals/tool-manuals.tools.ts +7 -6
- package/src/modules/workflow/__tests__/apply-failure.test.ts +2 -1
- package/src/modules/workflow/__tests__/merge-announces-tree.test.ts +14 -26
- package/src/modules/workflow/__tests__/preserve-roles-yaml.test.ts +2 -1
- package/src/modules/workflow/__tests__/session-ontology.service.test.ts +3 -2
- package/src/modules/workflow/__tests__/workflow.routes.lock-path.test.ts +2 -1
- package/src/modules/workflow/__tests__/workflow.service.branch-in-use.test.ts +3 -10
- package/src/modules/workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts +2 -1
- package/src/modules/workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts +3 -10
- package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +28 -27
- package/src/modules/workflow/__tests__/workflow.service.folder-proposals.test.ts +2 -1
- package/src/modules/workflow/__tests__/workflow.service.platform-restore.test.ts +2 -1
- package/src/modules/workflow/__tests__/workflow.service.read-gate.test.ts +3 -2
- package/src/modules/workflow/__tests__/workflow.service.releaseLock.test.ts +2 -1
- package/src/modules/workflow/__tests__/workflow.service.sync.test.ts +5 -4
- package/src/modules/workflow/__tests__/workflow.service.update-from-target.test.ts +2 -1
- package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +2 -1
- package/src/modules/workflow/agent-tools/workflow.tools.ts +11 -9
- package/src/modules/workflow/git/__tests__/git.service.accessGating.test.ts +5 -4
- package/src/modules/workflow/git/__tests__/git.service.changedFilesForPr.test.ts +12 -11
- package/src/modules/workflow/git/__tests__/git.service.commitChanges.test.ts +9 -8
- package/src/modules/workflow/git/__tests__/git.service.commitFile.strayPath.test.ts +8 -7
- package/src/modules/workflow/git/__tests__/git.service.commitFile.test.ts +6 -5
- package/src/modules/workflow/git/__tests__/git.service.createBranch.test.ts +3 -2
- package/src/modules/workflow/git/__tests__/git.service.deleteBranch.test.ts +3 -2
- package/src/modules/workflow/git/__tests__/git.service.diffFileAtCommit.test.ts +7 -6
- package/src/modules/workflow/git/__tests__/git.service.diffFileBetweenBranches.test.ts +16 -15
- package/src/modules/workflow/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -2
- package/src/modules/workflow/git/__tests__/git.service.forkPoint.test.ts +2 -1
- package/src/modules/workflow/git/__tests__/git.service.history-guards.test.ts +2 -1
- package/src/modules/workflow/git/__tests__/git.service.list-branches.test.ts +10 -9
- package/src/modules/workflow/git/__tests__/git.service.listTrackedFiles.test.ts +2 -1
- package/src/modules/workflow/git/__tests__/git.service.logForFile.test.ts +6 -5
- package/src/modules/workflow/git/__tests__/git.service.mergeChangeRequest.test.ts +9 -8
- package/src/modules/workflow/git/__tests__/git.service.pendingChanges.test.ts +2 -1
- package/src/modules/workflow/git/__tests__/git.service.postMergePull.test.ts +4 -3
- package/src/modules/workflow/git/__tests__/git.service.pull.test.ts +9 -8
- package/src/modules/workflow/git/__tests__/git.service.readFileAtRef.test.ts +2 -1
- package/src/modules/workflow/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -1
- package/src/modules/workflow/git/__tests__/git.service.status.test.ts +4 -3
- package/src/modules/workflow/git/__tests__/git.service.syncFromRemote.test.ts +8 -7
- package/src/modules/workflow/git/__tests__/node-git-runner.test.ts +41 -3
- package/src/modules/workflow/git/git.service.ts +24 -13
- package/src/modules/workflow/git/node-git-runner.ts +37 -4
- package/src/modules/workflow/review-workflow/review-workflow.service.ts +9 -6
- package/src/modules/workflow/session-ontology.service.ts +7 -2
- package/src/modules/workflow/workflow.service.ts +31 -24
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -2
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +144 -52
- package/src/modules/workspace/__tests__/session-ontology.gate.test.ts +4 -2
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +3 -2
- package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +2 -1
- package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +2 -1
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +2 -1
- package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +2 -1
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +2 -1
- package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +2 -1
- package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +5 -4
- package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +2 -1
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +2 -1
- package/src/modules/workspace/__tests__/workspace.service.ensure-remotes-fetched.test.ts +2 -2
- package/src/modules/workspace/__tests__/workspace.service.list-cloned.test.ts +6 -5
- package/src/modules/workspace/__tests__/workspace.service.move-never-overwrites.test.ts +2 -1
- package/src/modules/workspace/__tests__/workspace.service.read-filter.test.ts +2 -1
- package/src/modules/workspace/__tests__/workspace.service.test.ts +84 -50
- package/src/modules/workspace/__tests__/workspace.service.unknown-branch.test.ts +2 -1
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +10 -7
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +4 -3
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +9 -8
- package/src/modules/workspace/__tests__/write-denial.test.ts +5 -4
- package/src/modules/workspace/session-ontology.gate.ts +6 -4
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +6 -2
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +29 -21
- package/src/modules/workspace/startup/kb-git.ts +15 -22
- package/src/modules/workspace/startup/kb-startup-runner.ts +40 -46
- package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +104 -98
- package/src/modules/workspace/startup/steps/groups-to-plugins.step.ts +24 -16
- package/src/modules/workspace/startup/steps/personal-spaces.step.ts +14 -5
- package/src/modules/workspace/startup/steps/plugin-display-names.step.ts +13 -5
- package/src/modules/workspace/startup/steps/plugin-manifests.step.ts +14 -5
- package/src/modules/workspace/startup/steps/seed-tree.ts +11 -9
- package/src/modules/workspace/startup/steps/template-files.step.ts +43 -34
- package/src/modules/workspace/startup/steps/template-source.ts +8 -5
- package/src/modules/workspace/workspace.routes.ts +8 -7
- package/src/modules/workspace/workspace.service.ts +39 -27
- package/src/modules/workspace/workspace.tools.ts +68 -31
- package/src/modules/workspace/write-denial.ts +7 -5
- package/src/shared/__tests__/git-internals.test.ts +41 -0
- package/src/shared/__tests__/kb-layout.plugin.test.ts +19 -16
- package/src/shared/git-internals.ts +61 -6
- package/src/shared/git.contract.ts +70 -8
- package/src/shared/kb-context.ts +130 -0
- package/src/shared/kb-layout.test.ts +37 -27
- package/src/shared/kb-layout.ts +4 -3
- package/src/shared/pending-proposals.ts +7 -4
- package/src/shared/redact-secret.ts +5 -5
- package/src/tenancy/__tests__/static-tenant-source.test.ts +177 -0
- package/src/tenancy/__tests__/tenant-host.test.ts +372 -0
- package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -0
- package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -0
- package/src/tenancy/index.ts +35 -0
- package/src/tenancy/static-tenant-source.ts +296 -0
- package/src/tenancy/tenant-host.ts +261 -0
- package/src/tenancy/tenant-runtime.ts +208 -0
- package/src/tenancy/tenant-secrets.ts +41 -0
- package/src/tenancy/tenant-source.contract.ts +59 -0
- package/dist/modules/access/access-errors.d.ts +0 -34
- package/dist/modules/access/access-errors.d.ts.map +0 -1
- package/dist/modules/access/access-errors.js +0 -40
- package/dist/modules/access/access-errors.js.map +0 -1
- package/dist/modules/access/access-splice.d.ts +0 -140
- package/dist/modules/access/access-splice.d.ts.map +0 -1
- package/dist/modules/access/access-splice.js +0 -389
- package/dist/modules/access/access-splice.js.map +0 -1
- package/dist/modules/access/group-files.d.ts +0 -83
- package/dist/modules/access/group-files.d.ts.map +0 -1
- package/dist/modules/access/group-files.js +0 -167
- package/dist/modules/access/group-files.js.map +0 -1
- package/dist/modules/access/kb-read-filter.d.ts +0 -41
- package/dist/modules/access/kb-read-filter.d.ts.map +0 -1
- package/dist/modules/access/kb-read-filter.js +0 -60
- package/dist/modules/access/kb-read-filter.js.map +0 -1
- package/dist/modules/access/render-roles-yaml.d.ts +0 -22
- package/dist/modules/access/render-roles-yaml.d.ts.map +0 -1
- package/dist/modules/access/render-roles-yaml.js +0 -56
- package/dist/modules/access/render-roles-yaml.js.map +0 -1
- package/dist/modules/access/roles-yaml-guard.d.ts +0 -56
- package/dist/modules/access/roles-yaml-guard.d.ts.map +0 -1
- package/dist/modules/access/roles-yaml-guard.js +0 -79
- package/dist/modules/access/roles-yaml-guard.js.map +0 -1
- package/dist/modules/diff/diff-paths.d.ts +0 -2
- package/dist/modules/diff/diff-paths.d.ts.map +0 -1
- package/dist/modules/diff/diff-paths.js +0 -9
- package/dist/modules/diff/diff-paths.js.map +0 -1
- package/dist/modules/groups/group-provision.service.d.ts +0 -130
- package/dist/modules/groups/group-provision.service.d.ts.map +0 -1
- package/dist/modules/groups/group-provision.service.js +0 -288
- package/dist/modules/groups/group-provision.service.js.map +0 -1
- package/dist/modules/groups/groups.contract.d.ts +0 -106
- package/dist/modules/groups/groups.contract.d.ts.map +0 -1
- package/dist/modules/groups/groups.contract.js +0 -36
- package/dist/modules/groups/groups.contract.js.map +0 -1
- package/dist/modules/groups/groups.routes.d.ts +0 -42
- package/dist/modules/groups/groups.routes.d.ts.map +0 -1
- package/dist/modules/groups/groups.routes.js +0 -379
- package/dist/modules/groups/groups.routes.js.map +0 -1
- package/dist/modules/groups/groups.service.d.ts +0 -60
- package/dist/modules/groups/groups.service.d.ts.map +0 -1
- package/dist/modules/groups/groups.service.js +0 -172
- package/dist/modules/groups/groups.service.js.map +0 -1
- package/dist/modules/groups/index.d.ts +0 -7
- package/dist/modules/groups/index.d.ts.map +0 -1
- package/dist/modules/groups/index.js +0 -6
- package/dist/modules/groups/index.js.map +0 -1
- package/dist/modules/groups/join-proposals.d.ts +0 -53
- package/dist/modules/groups/join-proposals.d.ts.map +0 -1
- package/dist/modules/groups/join-proposals.js +0 -67
- package/dist/modules/groups/join-proposals.js.map +0 -1
- package/dist/modules/groups/join-requests.service.d.ts +0 -81
- package/dist/modules/groups/join-requests.service.d.ts.map +0 -1
- package/dist/modules/groups/join-requests.service.js +0 -135
- package/dist/modules/groups/join-requests.service.js.map +0 -1
- package/dist/modules/mcp/mcp-session-store.d.ts +0 -74
- package/dist/modules/mcp/mcp-session-store.d.ts.map +0 -1
- package/dist/modules/mcp/mcp-session-store.js +0 -131
- package/dist/modules/mcp/mcp-session-store.js.map +0 -1
- package/dist/modules/workflow/file-change-notifier.d.ts +0 -38
- package/dist/modules/workflow/file-change-notifier.d.ts.map +0 -1
- package/dist/modules/workflow/file-change-notifier.js +0 -22
- package/dist/modules/workflow/file-change-notifier.js.map +0 -1
- package/dist/modules/workflow/git/branch-name.d.ts +0 -10
- package/dist/modules/workflow/git/branch-name.d.ts.map +0 -1
- package/dist/modules/workflow/git/branch-name.js +0 -76
- package/dist/modules/workflow/git/branch-name.js.map +0 -1
- package/dist/modules/workflow/git/clone-config.d.ts +0 -61
- package/dist/modules/workflow/git/clone-config.d.ts.map +0 -1
- package/dist/modules/workflow/git/clone-config.js +0 -69
- package/dist/modules/workflow/git/clone-config.js.map +0 -1
- package/dist/modules/workflow/git/mutex.d.ts +0 -11
- package/dist/modules/workflow/git/mutex.d.ts.map +0 -1
- package/dist/modules/workflow/git/mutex.js +0 -23
- package/dist/modules/workflow/git/mutex.js.map +0 -1
- package/dist/modules/workflow/locking-filesystem.d.ts +0 -137
- package/dist/modules/workflow/locking-filesystem.d.ts.map +0 -1
- package/dist/modules/workflow/locking-filesystem.js +0 -553
- package/dist/modules/workflow/locking-filesystem.js.map +0 -1
- package/dist/modules/workflow/read-only-filesystem.d.ts +0 -24
- package/dist/modules/workflow/read-only-filesystem.d.ts.map +0 -1
- package/dist/modules/workflow/read-only-filesystem.js +0 -39
- package/dist/modules/workflow/read-only-filesystem.js.map +0 -1
- package/dist/modules/workflow/workflow.errors.d.ts +0 -197
- package/dist/modules/workflow/workflow.errors.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.errors.js +0 -298
- package/dist/modules/workflow/workflow.errors.js.map +0 -1
- package/dist/modules/workspace/bevel-ignore.d.ts +0 -30
- package/dist/modules/workspace/bevel-ignore.d.ts.map +0 -1
- package/dist/modules/workspace/bevel-ignore.js +0 -61
- package/dist/modules/workspace/bevel-ignore.js.map +0 -1
- package/dist/modules/workspace/kb-seed.interface.d.ts +0 -36
- package/dist/modules/workspace/kb-seed.interface.d.ts.map +0 -1
- package/dist/modules/workspace/kb-seed.interface.js +0 -2
- package/dist/modules/workspace/kb-seed.interface.js.map +0 -1
- package/dist/modules/workspace/kb-seed.service.d.ts +0 -125
- package/dist/modules/workspace/kb-seed.service.d.ts.map +0 -1
- package/dist/modules/workspace/kb-seed.service.js +0 -535
- package/dist/modules/workspace/kb-seed.service.js.map +0 -1
- package/dist/modules/workspace/plugins-migration.d.ts +0 -50
- package/dist/modules/workspace/plugins-migration.d.ts.map +0 -1
- package/dist/modules/workspace/plugins-migration.js +0 -379
- package/dist/modules/workspace/plugins-migration.js.map +0 -1
- package/dist/shared/fs-errors.d.ts +0 -8
- package/dist/shared/fs-errors.d.ts.map +0 -1
- package/dist/shared/fs-errors.js +0 -11
- package/dist/shared/fs-errors.js.map +0 -1
- package/dist/shared/fs-walk.d.ts +0 -23
- package/dist/shared/fs-walk.d.ts.map +0 -1
- package/dist/shared/fs-walk.js +0 -42
- package/dist/shared/fs-walk.js.map +0 -1
- package/dist/shared/hash-email.d.ts +0 -11
- package/dist/shared/hash-email.d.ts.map +0 -1
- package/dist/shared/hash-email.js +0 -14
- package/dist/shared/hash-email.js.map +0 -1
- package/dist/shared/kb-walk.d.ts +0 -52
- package/dist/shared/kb-walk.d.ts.map +0 -1
- package/dist/shared/kb-walk.js +0 -76
- package/dist/shared/kb-walk.js.map +0 -1
|
@@ -2,14 +2,16 @@ import path from 'node:path';
|
|
|
2
2
|
import { logger } from '../shared/logging.js';
|
|
3
3
|
import type { AuthProviderPlugin } from '../modules/auth/auth.routes.js';
|
|
4
4
|
import type { AuthUser } from '@bevel-software/platform-shared';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
} from '
|
|
12
|
-
import {
|
|
5
|
+
// The browser-side live bindings, imported here and nowhere else in this
|
|
6
|
+
// package: `mirrorSharedBindings` below keeps them in step with `kb` for an
|
|
7
|
+
// overlay that still reads them. Core's own modules read only `KbContext`.
|
|
8
|
+
// eslint-disable-next-line no-restricted-imports
|
|
9
|
+
import { configureBranchModel, configureKbLayout } from '@bevel-software/platform-shared';
|
|
10
|
+
import type { TenantConfig } from '../core-config.js';
|
|
11
|
+
import { sql } from 'drizzle-orm';
|
|
12
|
+
import { DEFAULT_DB_SCHEMA, assertSearchPath } from '../modules/database/connection.js';
|
|
13
|
+
import { DEFAULT_SECRETS_SCOPE } from '../modules/secrets-vault/secrets-variable-loader.js';
|
|
14
|
+
import { KbContext } from '../shared/kb-context.js';
|
|
13
15
|
import { getDb, type Database } from '../modules/database/connection.js';
|
|
14
16
|
import { runCoreMigrations } from '../modules/database/migrate.js';
|
|
15
17
|
import { coreMigrationsDir } from '../assets.js';
|
|
@@ -28,7 +30,7 @@ import { KbSyncService } from '../modules/kb-sync/kb-sync.service.js';
|
|
|
28
30
|
import { NodeFs } from '../modules/kb-fs/node-fs.js';
|
|
29
31
|
import { assertKbDirNameFree } from '../modules/kb-fs/repo-path.js';
|
|
30
32
|
import type { IFsProbe, ITreeWalker } from '../shared/fs.contract.js';
|
|
31
|
-
import type
|
|
33
|
+
import { gitCredentials, type IGitRunner } from '../shared/git.contract.js';
|
|
32
34
|
import { AdvisoryLease, AdvisoryLock } from '../modules/database/advisory-lock.js';
|
|
33
35
|
import { holdCommitWorkerLease, withStartupTask, type LeaseLoopHandle } from './lifecycle.js';
|
|
34
36
|
|
|
@@ -130,6 +132,7 @@ import {
|
|
|
130
132
|
} from '../modules/tool-auth/tool-auth.middleware.js';
|
|
131
133
|
import { unmeteredLlmUsage, type ILlmUsageMeter } from '../modules/tool-auth/llm-usage-meter.js';
|
|
132
134
|
import { McpService } from '../modules/mcp/mcp.service.js';
|
|
135
|
+
import { AgentAuditService, retentionDaysFrom } from '../modules/audit/agent-audit.service.js';
|
|
133
136
|
import { readAgentPreamble, type AgentPreambleReader } from '../modules/agent-instructions/index.js';
|
|
134
137
|
import { createMcpAuthMiddleware } from '../modules/mcp/mcp-auth.middleware.js';
|
|
135
138
|
import { BevelOAuthProvider } from '../modules/mcp/oauth/bevel-oauth-provider.js';
|
|
@@ -154,7 +157,7 @@ import { registerCatalogCacheInvalidation } from './catalog-cache-invalidation.j
|
|
|
154
157
|
* core services to construct). See {@link CorePorts} for the pattern.
|
|
155
158
|
*/
|
|
156
159
|
export interface CoreServices {
|
|
157
|
-
config:
|
|
160
|
+
config: TenantConfig;
|
|
158
161
|
db: Database;
|
|
159
162
|
/**
|
|
160
163
|
* Reading the disk without locks — the one tree walk and the one path
|
|
@@ -183,6 +186,20 @@ export interface CoreServices {
|
|
|
183
186
|
* first-time setup completion — and never again while the process serves.
|
|
184
187
|
*/
|
|
185
188
|
kbStartupRunner: KbStartupRunner;
|
|
189
|
+
/**
|
|
190
|
+
* The startup phase's retry when the boot survived an unreachable remote
|
|
191
|
+
* — set by `startCore`, stopped by `stopCore` (see `core/lifecycle.ts`);
|
|
192
|
+
* null while nothing is asking.
|
|
193
|
+
*/
|
|
194
|
+
startupRetry: { stop(): void } | null;
|
|
195
|
+
/**
|
|
196
|
+
* What tells this graph's locks, migration ledger and secrets scope apart
|
|
197
|
+
* from another graph's in the same process and database: the schema name,
|
|
198
|
+
* or `''` for the default schema (the single-tenant ids).
|
|
199
|
+
*/
|
|
200
|
+
tenantKey: string;
|
|
201
|
+
/** The scope this graph's vault is registered under with the UTCP variable loader. */
|
|
202
|
+
secretsScope: string;
|
|
186
203
|
spillStore: SpillStore;
|
|
187
204
|
docExtractService: DocExtractService;
|
|
188
205
|
accessControl: AccessControlService;
|
|
@@ -263,12 +280,20 @@ export interface CoreServices {
|
|
|
263
280
|
updateCheckService: UpdateCheckService;
|
|
264
281
|
/** Deployment settings, env-first — the KB remote resolves through these. */
|
|
265
282
|
settings: DeploymentSettingsService;
|
|
283
|
+
/**
|
|
284
|
+
* The knowledge base as this composition names it: the checkout folder,
|
|
285
|
+
* the branch model and the layout — the one object every core service reads
|
|
286
|
+
* those from (see `shared/kb-context.ts`). The setup-completing save applies
|
|
287
|
+
* the branch model and the layout to it, so an overlay reads the answer in
|
|
288
|
+
* effect here rather than from the shared package's live bindings.
|
|
289
|
+
*/
|
|
290
|
+
kb: KbContext;
|
|
266
291
|
/**
|
|
267
292
|
* The knowledge-base directory name IN EFFECT — environment first, then the
|
|
268
293
|
* stored setting, then the default. Published here because `config.kbDirName`
|
|
269
294
|
* is only the environment's half of that answer: reading it directly gives
|
|
270
295
|
* the empty string on any deployment configured through the setup screen, and
|
|
271
|
-
* every path built from it would be wrong.
|
|
296
|
+
* every path built from it would be wrong. The same value as `kb.kbDirName`.
|
|
272
297
|
*/
|
|
273
298
|
kbDirName: string;
|
|
274
299
|
secretsVaultService: DbSecretsVaultService;
|
|
@@ -284,6 +309,8 @@ export interface CoreServices {
|
|
|
284
309
|
* advertise the same pointer the auth middleware does.
|
|
285
310
|
*/
|
|
286
311
|
mcpResourceMetadataUrl: string;
|
|
312
|
+
/** The Audit log: what every connected agent and key called, and the revoke of an agent's grant. */
|
|
313
|
+
agentAuditService: AgentAuditService;
|
|
287
314
|
toolRegistry: ToolRegistry;
|
|
288
315
|
toolAuthMiddleware: ReturnType<typeof createToolAuthMiddleware>;
|
|
289
316
|
manualAuthMiddleware: ReturnType<typeof createManualAuthMiddleware>;
|
|
@@ -298,14 +325,28 @@ export interface CoreServices {
|
|
|
298
325
|
}
|
|
299
326
|
|
|
300
327
|
export async function createCoreServices(
|
|
301
|
-
config:
|
|
328
|
+
config: TenantConfig,
|
|
302
329
|
ports: CorePorts = {},
|
|
303
330
|
): Promise<CoreServices> {
|
|
304
331
|
// Fail fast on a runtime whose git is too old for `--no-write-fetch-head`
|
|
305
332
|
// (see `git-version.ts`): every clone, fetch and refresh below depends on it,
|
|
306
333
|
// so an unsupported binary is better surfaced here than at the first merge.
|
|
307
334
|
await assertGitVersion();
|
|
308
|
-
|
|
335
|
+
// What tells this knowledge base's locks, migration ledger and secrets
|
|
336
|
+
// loader apart from another's in the same process and database. Empty for
|
|
337
|
+
// the default schema, so a single-tenant deployment keeps the lock ids and
|
|
338
|
+
// the ledger it always had.
|
|
339
|
+
const tenantKey = config.dbSchema === DEFAULT_DB_SCHEMA ? '' : config.dbSchema;
|
|
340
|
+
const db = getDb(config.databaseUrl, { schema: config.dbSchema });
|
|
341
|
+
// A schema of its own is created on first use, so a tenant's first
|
|
342
|
+
// activation needs nothing done by hand; `public` always exists. Then the
|
|
343
|
+
// server is asked whether the connections really search that schema: a
|
|
344
|
+
// pooler that dropped the startup parameter would otherwise land every
|
|
345
|
+
// tenant's tables in `public`, silently — see `assertSearchPath`.
|
|
346
|
+
if (tenantKey) {
|
|
347
|
+
await db.execute(sql.raw(`create schema if not exists "${config.dbSchema}"`));
|
|
348
|
+
await assertSearchPath(db, config.dbSchema);
|
|
349
|
+
}
|
|
309
350
|
// Migrations must run BEFORE any service that reads or writes a managed
|
|
310
351
|
// table. `PendingCommitsService.startupReconcile` (called later in this
|
|
311
352
|
// function) hits `pending_commits` — on a fresh DB, deferring migrations to
|
|
@@ -322,40 +363,13 @@ export async function createCoreServices(
|
|
|
322
363
|
// is resolved through them, and a fresh install has none of it in the
|
|
323
364
|
// environment. `load()` is env-first, so an existing deployment sees exactly
|
|
324
365
|
// what it saw before — a stored row only answers where a variable is silent.
|
|
325
|
-
const settings = new DeploymentSettingsService(db, config.secretsEncKey);
|
|
366
|
+
const settings = new DeploymentSettingsService(db, config.secretsEncKey, undefined, { env: config.settingsEnv });
|
|
326
367
|
await settings.load();
|
|
327
368
|
|
|
328
|
-
/**
|
|
329
|
-
* The branch model, before anything reads it. It used to be applied at import
|
|
330
|
-
* time from the environment, which is what forced the frontend to bake it
|
|
331
|
-
* into its bundle; it now comes through the settings store like the rest of
|
|
332
|
-
* the deployment's configuration (environment first, as always).
|
|
333
|
-
*
|
|
334
|
-
* UNCONFIGURED IS ALLOWED, and that is the point: a fresh deployment has no
|
|
335
|
-
* branch model, and refusing to boot would take away the setup screen where
|
|
336
|
-
* one gets entered. What reads it before then is the setup path itself, which
|
|
337
|
-
* does not need it — the bootstrap admin is recognised without a workspace.
|
|
338
|
-
* `isComplete` keeps the rest of the app behind the gate until it is set, and
|
|
339
|
-
* the setting is restart-to-apply because services take the value at
|
|
340
|
-
* construction.
|
|
341
|
-
*/
|
|
342
|
-
const branchModel = {
|
|
343
|
-
defaultBranch: settings.resolve('defaultBranch'),
|
|
344
|
-
protectedBranches: settings.resolve('protectedBranches'),
|
|
345
|
-
};
|
|
346
|
-
if (!validateBranchModel(branchModel)) configureBranchModel(branchModel);
|
|
347
369
|
// The layout variables that were retired this release, folded into their
|
|
348
370
|
// saved settings before anything reads the layout — so the boot that imports
|
|
349
371
|
// them also RUNS on the imported names rather than on the defaults.
|
|
350
372
|
await settings.importLegacyLayoutEnv();
|
|
351
|
-
// The KB layout — the three renameable roots and the agent guide's file name
|
|
352
|
-
// — applied the same way and at the same moment, before any service captures
|
|
353
|
-
// one of them. Unlike the branch model it always resolves (every name has a
|
|
354
|
-
// default), so an invalid value is a real misconfiguration and stops the boot.
|
|
355
|
-
configureKbLayout(settings.resolveKbLayout());
|
|
356
|
-
// A token supplied through the setup screen has to reach the credential
|
|
357
|
-
// helper, which reads `$GITHUB_TOKEN` at call time.
|
|
358
|
-
settings.syncGitTokenEnv();
|
|
359
373
|
|
|
360
374
|
// `kbDirName` is read ONCE and threaded into a dozen services as a plain
|
|
361
375
|
// string, which is why changing it needs a restart (the setting says so).
|
|
@@ -367,19 +381,73 @@ export async function createCoreServices(
|
|
|
367
381
|
// unnameable. Both are operator settings, so the collision is refused here,
|
|
368
382
|
// by name, before any service captures either.
|
|
369
383
|
assertKbDirNameFree(kbDirName, settings.resolveKbLayout());
|
|
384
|
+
/**
|
|
385
|
+
* The knowledge base's context — the checkout folder, the branch model and
|
|
386
|
+
* the layout — built before any service, and handed to each one that reads
|
|
387
|
+
* a name from it (see `shared/kb-context.ts`). The values come through the
|
|
388
|
+
* settings store like the rest of the deployment's configuration
|
|
389
|
+
* (environment first, as always).
|
|
390
|
+
*
|
|
391
|
+
* The branch model: UNCONFIGURED IS ALLOWED, and that is the point. A fresh
|
|
392
|
+
* deployment has no branch model, and refusing to boot would take away the
|
|
393
|
+
* setup screen where one gets entered. What reads it before then is the
|
|
394
|
+
* setup path itself, which does not need it — the bootstrap admin is
|
|
395
|
+
* recognised without a workspace. `isComplete` keeps the rest of the app
|
|
396
|
+
* behind the gate until it is set, and the save that completes setup applies
|
|
397
|
+
* it to this very object, which every service reads at use rather than
|
|
398
|
+
* capturing at construction.
|
|
399
|
+
*
|
|
400
|
+
* The layout — the three renameable roots and the agent guide's file name —
|
|
401
|
+
* always resolves (every name has a default), so an invalid value is a real
|
|
402
|
+
* misconfiguration and stops the boot.
|
|
403
|
+
*/
|
|
404
|
+
const kb = new KbContext(
|
|
405
|
+
kbDirName,
|
|
406
|
+
KbContext.branchModelOrUnconfigured({
|
|
407
|
+
defaultBranch: settings.resolve('defaultBranch'),
|
|
408
|
+
protectedBranches: settings.resolve('protectedBranches'),
|
|
409
|
+
}),
|
|
410
|
+
settings.resolveKbLayout(),
|
|
411
|
+
);
|
|
412
|
+
// The shared package's process-wide live bindings, kept in step with `kb`
|
|
413
|
+
// for an overlay that still reads them — now, and again when the setup-
|
|
414
|
+
// completing save applies a model or a layout. Nothing in this package
|
|
415
|
+
// reads them; a host serving several knowledge bases turns this off.
|
|
416
|
+
if (ports.mirrorSharedBindings !== false) {
|
|
417
|
+
const mirrorBranchModel = () => {
|
|
418
|
+
if (kb.isBranchModelConfigured()) {
|
|
419
|
+
configureBranchModel({ defaultBranch: kb.defaultBranch, protectedBranches: [...kb.protectedBranches] });
|
|
420
|
+
}
|
|
421
|
+
};
|
|
422
|
+
const mirrorLayout = () => configureKbLayout(kb.layout);
|
|
423
|
+
mirrorBranchModel();
|
|
424
|
+
mirrorLayout();
|
|
425
|
+
kb.onBranchModelApplied(mirrorBranchModel);
|
|
426
|
+
kb.onLayoutApplied(mirrorLayout);
|
|
427
|
+
}
|
|
370
428
|
// The disk: one walk, one probe, for every reader below.
|
|
371
429
|
const disk = new NodeFs();
|
|
430
|
+
// What git authenticates with, read on every call: the username and token
|
|
431
|
+
// the setup screen stored, or the environment's. Environment first for the
|
|
432
|
+
// token, as for every setting (`resolve` is env-first); the legacy
|
|
433
|
+
// `GITHUB_TOKEN` / `GH_TOKEN` spellings only through `config`, since the
|
|
434
|
+
// settings catalogue knows `GIT_TOKEN` alone. Handed to the runner, which
|
|
435
|
+
// puts the token into each child's environment — never into this
|
|
436
|
+
// process's, which several knowledge bases may share.
|
|
437
|
+
const gitCredentialsInEffect = gitCredentials(
|
|
438
|
+
() => settings.resolve('gitUsername') || config.gitUsername,
|
|
439
|
+
() => settings.resolve('gitToken') || config.gitToken || null,
|
|
440
|
+
);
|
|
372
441
|
// How git is run, for every module that runs it: one environment, one buffer
|
|
373
442
|
// ceiling, one error shape, and — the reason it exists — one deadline, so a
|
|
374
443
|
// git that never returns cannot hold a workspace (and with it the commit
|
|
375
444
|
// queue) open indefinitely. See `shared/git.contract.ts`.
|
|
376
|
-
const gitRunner = new NodeGitRunner(config.gitTimeoutMs);
|
|
445
|
+
const gitRunner = new NodeGitRunner(config.gitTimeoutMs, gitCredentialsInEffect);
|
|
377
446
|
const workspaceService = new WorkspaceService(
|
|
378
447
|
config.workspacesRoot,
|
|
379
448
|
() => settings.resolve('kbRepoUrl'),
|
|
380
|
-
|
|
449
|
+
kb,
|
|
381
450
|
disk,
|
|
382
|
-
() => settings.resolve('gitUsername') || 'x-access-token',
|
|
383
451
|
gitRunner,
|
|
384
452
|
);
|
|
385
453
|
// The KB startup phase: every seeding, scaffolding and migration concern,
|
|
@@ -397,18 +465,18 @@ export async function createCoreServices(
|
|
|
397
465
|
// read-only, needs no remote, and must be said even on a deployment whose
|
|
398
466
|
// setup never finished — so `noteBesideCheckout` runs once from the server
|
|
399
467
|
// builder, ahead of this gated phase.)
|
|
400
|
-
new GroupsToPluginsStep(disk),
|
|
401
|
-
new PluginManifestsStep(disk),
|
|
468
|
+
new GroupsToPluginsStep(disk, kb),
|
|
469
|
+
new PluginManifestsStep(disk, kb),
|
|
402
470
|
// After the manifests step: a folder that only just got its manifest got
|
|
403
471
|
// one the renderer wrote, which already carries the display name — the
|
|
404
472
|
// backfill then has nothing to do for it. Ordered the other way, the
|
|
405
473
|
// backfill would walk a tree still missing those manifests.
|
|
406
|
-
new PluginDisplayNamesStep(disk),
|
|
407
|
-
new PersonalSpacesStep(disk),
|
|
474
|
+
new PluginDisplayNamesStep(disk, kb),
|
|
475
|
+
new PersonalSpacesStep(disk, kb),
|
|
408
476
|
// A getter, not a value: the step is built here, while the process may
|
|
409
477
|
// still hold the defaults, and the save that completes first-run setup
|
|
410
478
|
// applies the admin's answer afterwards.
|
|
411
|
-
new TemplateFilesStep(disk, extraDirs, () => settings.resolveAgentsFileLink()),
|
|
479
|
+
new TemplateFilesStep(disk, kb, extraDirs, () => settings.resolveAgentsFileLink()),
|
|
412
480
|
new RolesYamlStep(disk, [config.adminEmail]),
|
|
413
481
|
...(ports.kbStartupSteps ?? []),
|
|
414
482
|
];
|
|
@@ -417,18 +485,16 @@ export async function createCoreServices(
|
|
|
417
485
|
// setup screen after this object exists, and the setup-completion run is
|
|
418
486
|
// the first thing that needs them.
|
|
419
487
|
kbRepoUrl: () => settings.resolve('kbRepoUrl'),
|
|
420
|
-
gitUsername: () => settings.resolve('gitUsername') || 'x-access-token',
|
|
421
|
-
gitToken: () => settings.resolve('gitToken'),
|
|
422
488
|
workspacesRoot: config.workspacesRoot,
|
|
423
489
|
kbDirName,
|
|
424
490
|
templateDir: config.kbTemplateDir,
|
|
425
|
-
defaultBranch: () =>
|
|
426
|
-
protectedBranches: () => [...
|
|
491
|
+
defaultBranch: () => kb.defaultBranch,
|
|
492
|
+
protectedBranches: () => [...kb.protectedBranches],
|
|
427
493
|
// The deployment owner is the initial Admin of a freshly seeded KB — the
|
|
428
494
|
// same answer `SEED_ADMIN_EMAILS` used to ask for a second time.
|
|
429
495
|
seedAdminEmails: [config.adminEmail],
|
|
430
496
|
steps: kbStartupSteps,
|
|
431
|
-
buildSeedTree: buildSeedTree(disk, config.kbTemplateDir, extraDirs, [config.adminEmail]),
|
|
497
|
+
buildSeedTree: buildSeedTree(disk, config.kbTemplateDir, extraDirs, [config.adminEmail], kb),
|
|
432
498
|
gitRunner,
|
|
433
499
|
});
|
|
434
500
|
// Shared, workspace-independent store for oversized `call_tool_chain` results,
|
|
@@ -449,49 +515,50 @@ export async function createCoreServices(
|
|
|
449
515
|
disk,
|
|
450
516
|
[config.adminEmail],
|
|
451
517
|
gitRunner,
|
|
518
|
+
kb,
|
|
452
519
|
);
|
|
453
520
|
// Creator read-grant on creation: read is default-deny and the roots grant
|
|
454
521
|
// it to nobody, so every surface that starts a new folder at a root (human
|
|
455
522
|
// routes, agent tools, upload apply) consults this planner to keep the new
|
|
456
523
|
// folder visible to its creator.
|
|
457
|
-
const creatorAccess = new CreatorAccessService(workspaceService, accessControl,
|
|
524
|
+
const creatorAccess = new CreatorAccessService(workspaceService, accessControl, kb, disk);
|
|
458
525
|
// Read-before-write: the gate every lock acquire asks, on every branch —
|
|
459
526
|
// nothing is created, changed or removed where its author cannot read,
|
|
460
527
|
// except that new folder at a root (see `access-model/change-gate.ts`).
|
|
461
|
-
const changeGate = new ChangeReadGate(workspaceService, accessControl,
|
|
528
|
+
const changeGate = new ChangeReadGate(workspaceService, accessControl, kb, disk);
|
|
462
529
|
|
|
463
530
|
// Ontology-session boundary: records each agent run's touched ontologies and
|
|
464
531
|
// blocks writes once a run has crossed ontologies. Postgres-backed so the
|
|
465
532
|
// boundary survives a restart.
|
|
466
|
-
const sessionOntologyService = new SessionOntologyService(db);
|
|
533
|
+
const sessionOntologyService = new SessionOntologyService(db, kb);
|
|
467
534
|
// Per-run write restriction (by file extension). Shared by the workspace tool
|
|
468
535
|
// surface (which enforces it) and the routine runner (which sets it for
|
|
469
536
|
// dashboard-only `watchlist_check` runs). In-memory: a restriction lives only for
|
|
470
537
|
// one run, unlike the Postgres-backed ontology touched-set above.
|
|
471
538
|
const routineWritePolicy = new RoutineWritePolicyService();
|
|
472
539
|
// Skills: discovered from the default-branch workspace only (global catalog).
|
|
473
|
-
const skillService = new SkillService(workspaceService, accessControl,
|
|
540
|
+
const skillService = new SkillService(workspaceService, accessControl, kb, disk);
|
|
474
541
|
// Tool manuals: user-authored `*.tool` files under `Plugins/` in the default
|
|
475
542
|
// branch — access-controlled like Skills, served to external agents via
|
|
476
543
|
// `GET /api/agent/all-tools` and registered on the MCP proxy's UTCP client.
|
|
477
544
|
// Where plugins come from: one walk of the plugins root that reads every
|
|
478
545
|
// plugin folder in whichever file shape it carries (see
|
|
479
546
|
// modules/plugins/discovery). Nothing to configure, nothing to document.
|
|
480
|
-
const pluginSource = new KbPluginSource(disk);
|
|
481
|
-
const toolManualService = new ToolManualService(workspaceService, accessControl,
|
|
547
|
+
const pluginSource = new KbPluginSource(disk, kb);
|
|
548
|
+
const toolManualService = new ToolManualService(workspaceService, accessControl, kb, disk, pluginSource);
|
|
482
549
|
// Plugins: the folders under `Plugins/` that carry a
|
|
483
550
|
// team's skills AND the tools they need. Enumerated for EVERY authenticated
|
|
484
551
|
// caller — a plugin they cannot read still exists for them, as a locked one —
|
|
485
552
|
// with the counts read off the two catalogs above rather than a second scan.
|
|
486
553
|
// The link index resolves manifests against the released catalog, and the
|
|
487
554
|
// plugin index counts through it (inline + linked), so it comes first.
|
|
488
|
-
const pluginLinkIndex = new PluginLinkIndex(workspaceService, skillService, accessControl,
|
|
555
|
+
const pluginLinkIndex = new PluginLinkIndex(workspaceService, skillService, accessControl, kb, pluginSource);
|
|
489
556
|
const pluginIndexService = new PluginIndexService(
|
|
490
557
|
workspaceService,
|
|
491
558
|
accessControl,
|
|
492
559
|
skillService,
|
|
493
560
|
toolManualService,
|
|
494
|
-
|
|
561
|
+
kb,
|
|
495
562
|
pluginSource,
|
|
496
563
|
Date.now,
|
|
497
564
|
pluginLinkIndex,
|
|
@@ -501,13 +568,17 @@ export async function createCoreServices(
|
|
|
501
568
|
// PullRequestService no longer depends on it for attribution.)
|
|
502
569
|
// The allow-list is resolved, not read off the environment: it is settable
|
|
503
570
|
// from the setup screen alongside the SSO configuration it guards.
|
|
504
|
-
const authService = new AuthService(
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
571
|
+
const authService = new AuthService(
|
|
572
|
+
db,
|
|
573
|
+
{
|
|
574
|
+
jwtSecret: config.jwtSecret,
|
|
575
|
+
adminEmail: config.adminEmail,
|
|
576
|
+
adminPassword: config.adminPassword,
|
|
577
|
+
allowedEmailDomains: parseDomainList(settings.resolve('allowedEmailDomains')),
|
|
578
|
+
loginPasswordEnabled: config.loginPasswordEnabled,
|
|
579
|
+
},
|
|
580
|
+
ports.accountAdmission,
|
|
581
|
+
);
|
|
511
582
|
const authMiddleware = createAuthMiddleware(authService);
|
|
512
583
|
|
|
513
584
|
// Shared mutex so git and diff operations on the same workspace serialize
|
|
@@ -523,7 +594,7 @@ export async function createCoreServices(
|
|
|
523
594
|
const gitService = new GitService(
|
|
524
595
|
workspaceService,
|
|
525
596
|
workflowHooks,
|
|
526
|
-
|
|
597
|
+
kb,
|
|
527
598
|
workspaceMutex,
|
|
528
599
|
accessControl,
|
|
529
600
|
gitRunner,
|
|
@@ -608,7 +679,7 @@ export async function createCoreServices(
|
|
|
608
679
|
accessControl,
|
|
609
680
|
fileLockService,
|
|
610
681
|
pendingCommitsService,
|
|
611
|
-
|
|
682
|
+
kb,
|
|
612
683
|
changeGate,
|
|
613
684
|
eventBus,
|
|
614
685
|
fileChangeNotifier,
|
|
@@ -622,7 +693,7 @@ export async function createCoreServices(
|
|
|
622
693
|
// (the request's branch vs the default branch), so it holds no state — it
|
|
623
694
|
// only needs to read files at refs and to close a request whose proposals
|
|
624
695
|
// have all landed.
|
|
625
|
-
const joinRequestsService = new JoinRequestsService(workspaceService, workflowService);
|
|
696
|
+
const joinRequestsService = new JoinRequestsService(workspaceService, workflowService, kb);
|
|
626
697
|
// The OTHER half of a join request: the row the subscribe endpoint writes
|
|
627
698
|
// before it answers, and the branch/clone/commit/push/change-request work
|
|
628
699
|
// that runs against it afterwards. The row is what lets the click be
|
|
@@ -631,7 +702,7 @@ export async function createCoreServices(
|
|
|
631
702
|
const pluginJoinRequestJobs = new PluginJoinRequestJobs(new DbJoinRequestStore(db), {
|
|
632
703
|
workflow: workflowService,
|
|
633
704
|
workspaceService,
|
|
634
|
-
|
|
705
|
+
kb,
|
|
635
706
|
// A record keys on the plugin's primary FOLDER below the root, which the
|
|
636
707
|
// catalog is the only thing that can turn back into a path and a name
|
|
637
708
|
// people read. Null once nothing answers to the key — a deleted plugin,
|
|
@@ -663,7 +734,7 @@ export async function createCoreServices(
|
|
|
663
734
|
accessControl,
|
|
664
735
|
skillService,
|
|
665
736
|
pluginLinkIndex,
|
|
666
|
-
|
|
737
|
+
kb,
|
|
667
738
|
eventBus,
|
|
668
739
|
() => pluginIndexService.invalidate(),
|
|
669
740
|
);
|
|
@@ -675,7 +746,7 @@ export async function createCoreServices(
|
|
|
675
746
|
accessControl,
|
|
676
747
|
pluginSource,
|
|
677
748
|
disk,
|
|
678
|
-
|
|
749
|
+
kb,
|
|
679
750
|
eventBus,
|
|
680
751
|
() => {
|
|
681
752
|
pluginIndexService.invalidate();
|
|
@@ -689,7 +760,7 @@ export async function createCoreServices(
|
|
|
689
760
|
accessControl,
|
|
690
761
|
skillService,
|
|
691
762
|
pluginLinkIndex,
|
|
692
|
-
|
|
763
|
+
kb,
|
|
693
764
|
{
|
|
694
765
|
name: 'hexis',
|
|
695
766
|
owner: 'Hexis',
|
|
@@ -724,7 +795,7 @@ export async function createCoreServices(
|
|
|
724
795
|
workflowService,
|
|
725
796
|
accessControl,
|
|
726
797
|
toolManualService,
|
|
727
|
-
|
|
798
|
+
kb,
|
|
728
799
|
disk,
|
|
729
800
|
);
|
|
730
801
|
|
|
@@ -736,7 +807,7 @@ export async function createCoreServices(
|
|
|
736
807
|
workspaceService,
|
|
737
808
|
workflowService,
|
|
738
809
|
accessControl,
|
|
739
|
-
|
|
810
|
+
kb,
|
|
740
811
|
eventBus,
|
|
741
812
|
pluginSource,
|
|
742
813
|
disk,
|
|
@@ -752,6 +823,7 @@ export async function createCoreServices(
|
|
|
752
823
|
accessControl,
|
|
753
824
|
skillService,
|
|
754
825
|
workflowService,
|
|
826
|
+
kb,
|
|
755
827
|
);
|
|
756
828
|
|
|
757
829
|
// The same missing half, for tools: a `.tool` manual or an `mcp.json` server
|
|
@@ -763,6 +835,7 @@ export async function createCoreServices(
|
|
|
763
835
|
accessControl,
|
|
764
836
|
toolManualService,
|
|
765
837
|
workflowService,
|
|
838
|
+
kb,
|
|
766
839
|
);
|
|
767
840
|
|
|
768
841
|
// Catalog freshness: the skill / tool-manual / plugin-index caches all scan
|
|
@@ -774,7 +847,7 @@ export async function createCoreServices(
|
|
|
774
847
|
registerCatalogCacheInvalidation({
|
|
775
848
|
eventBus,
|
|
776
849
|
fileChangeNotifier,
|
|
777
|
-
|
|
850
|
+
kb,
|
|
778
851
|
catalogs: [toolManualService, skillService, pluginIndexService, pluginLinkIndex],
|
|
779
852
|
accessControl,
|
|
780
853
|
});
|
|
@@ -784,7 +857,7 @@ export async function createCoreServices(
|
|
|
784
857
|
const adminAccess = new AdminAccessService(
|
|
785
858
|
accessControl,
|
|
786
859
|
workspaceService,
|
|
787
|
-
() =>
|
|
860
|
+
() => kb.defaultBranch,
|
|
788
861
|
// The deployment owner administers accounts/roles even before the KB's
|
|
789
862
|
// roles.yaml lists them, and whatever the sign-in method — this list is
|
|
790
863
|
// consulted before any roles.yaml lookup, so it holds for SSO too.
|
|
@@ -815,8 +888,11 @@ export async function createCoreServices(
|
|
|
815
888
|
(key) => toolManualService.scopeOfVariable(key),
|
|
816
889
|
);
|
|
817
890
|
// Register the `bevel-secrets` UTCP variable loader against this vault so any
|
|
818
|
-
// UTCP client can resolve `${VAR}` from the caller's secrets at tool-call
|
|
819
|
-
|
|
891
|
+
// UTCP client can resolve `${VAR}` from the caller's secrets at tool-call
|
|
892
|
+
// time — under this knowledge base's scope, since the loader registry is
|
|
893
|
+
// UTCP's and process-wide while the vault is this graph's.
|
|
894
|
+
const secretsScope = tenantKey ? `${config.tenantId}/${config.dbSchema}` : DEFAULT_SECRETS_SCOPE;
|
|
895
|
+
registerBevelSecretsVariableLoader(secretsVaultService, secretsScope);
|
|
820
896
|
|
|
821
897
|
// Deleting ONE tool from its page — the owner's verb, the other end of the
|
|
822
898
|
// promise that made them the owner. Built here because it is the one service
|
|
@@ -832,7 +908,7 @@ export async function createCoreServices(
|
|
|
832
908
|
pluginIndexService,
|
|
833
909
|
pluginSource,
|
|
834
910
|
secretsVaultService,
|
|
835
|
-
|
|
911
|
+
kb,
|
|
836
912
|
disk,
|
|
837
913
|
);
|
|
838
914
|
|
|
@@ -842,7 +918,7 @@ export async function createCoreServices(
|
|
|
842
918
|
// call, the vault to resolve the credential to call it with. Holds no state
|
|
843
919
|
// and takes no `db`: a verdict is returned to the caller that asked for it and
|
|
844
920
|
// never outlives their page (see `ProbeVerdict`).
|
|
845
|
-
const connectionProbeService = new ConnectionProbeService(toolManualService, secretsVaultService);
|
|
921
|
+
const connectionProbeService = new ConnectionProbeService(toolManualService, secretsVaultService, secretsScope);
|
|
846
922
|
|
|
847
923
|
// Zero-config OAuth for bare `type: mcp` `.tool`s: when the remote server
|
|
848
924
|
// demands OAuth (MCP authorization spec), discover its authorization server,
|
|
@@ -914,13 +990,20 @@ export async function createCoreServices(
|
|
|
914
990
|
// for readers, and the preamble is a broadcast). One reader, two consumers:
|
|
915
991
|
// the proxy below composes in-process per request; the agent-facing route
|
|
916
992
|
// serves the same composition to the local bridge and the frontend card.
|
|
917
|
-
const readPreamble: AgentPreambleReader = () => readAgentPreamble(workspaceService,
|
|
993
|
+
const readPreamble: AgentPreambleReader = () => readAgentPreamble(workspaceService, kb, disk);
|
|
994
|
+
// The Audit log. Records through the proxy below (every call an external
|
|
995
|
+
// agent makes), reads keys through the key service so their shape is
|
|
996
|
+
// defined once, and prunes past the retention setting — read per sweep, so
|
|
997
|
+
// a change on the Deployment page applies without a restart.
|
|
998
|
+
const agentAuditService = new AgentAuditService(db, externalApiKeyService, () =>
|
|
999
|
+
retentionDaysFrom(settings.resolve('auditRetentionDays')),
|
|
1000
|
+
);
|
|
918
1001
|
const mcpService = new McpService(
|
|
919
1002
|
{
|
|
920
1003
|
// Loopback to our own REST tool surface — 127.0.0.1 (not localhost) to pin
|
|
921
1004
|
// IPv4 and dodge resolver ambiguity. The proxy authenticates each call with
|
|
922
1005
|
// the caller's own connection key.
|
|
923
|
-
loopbackBaseUrl: `http://127.0.0.1:${config.port}`,
|
|
1006
|
+
loopbackBaseUrl: config.loopbackBaseUrl ?? `http://127.0.0.1:${config.port}`,
|
|
924
1007
|
// Manual namespace + UTCP variable prefix (KNOWLEDGE_BASE_API_URL / …).
|
|
925
1008
|
manualName: 'KNOWLEDGE_BASE',
|
|
926
1009
|
// Oversized chain results spill here too — an external MCP caller has no
|
|
@@ -929,6 +1012,7 @@ export async function createCoreServices(
|
|
|
929
1012
|
// For the needs-authorization setup link surfaced to external agents.
|
|
930
1013
|
publicFrontendUrl: config.publicFrontendUrl,
|
|
931
1014
|
readAgentPreamble: readPreamble,
|
|
1015
|
+
secretsScope,
|
|
932
1016
|
},
|
|
933
1017
|
// Pre-dispatch per-user credential check: the vault answers "has this caller
|
|
934
1018
|
// set it?" and the manual catalog answers "which user-scoped vars does this
|
|
@@ -942,6 +1026,8 @@ export async function createCoreServices(
|
|
|
942
1026
|
// provider is constructed just below (it needs nothing from McpService;
|
|
943
1027
|
// the binding is only dereferenced at call time, long after boot).
|
|
944
1028
|
(bearer) => mcpOAuthProvider.revokeByAccessToken(bearer),
|
|
1029
|
+
// Every attributable call lands in the Audit log through this.
|
|
1030
|
+
agentAuditService,
|
|
945
1031
|
);
|
|
946
1032
|
// A changed secret invalidates what the proxy built from the old value for
|
|
947
1033
|
// that user (null = shared secret → everyone): remembered manual failures,
|
|
@@ -1048,12 +1134,6 @@ export async function createCoreServices(
|
|
|
1048
1134
|
},
|
|
1049
1135
|
});
|
|
1050
1136
|
const leased = withStartupTask(pendingCommitsWorker, reconcileQueue);
|
|
1051
|
-
// Not `start()`: the worker runs only while this process holds the
|
|
1052
|
-
// commit-worker lease. On a redeploy the outgoing container still holds it,
|
|
1053
|
-
// so this one serves requests and declines to drain until that one exits;
|
|
1054
|
-
// then it takes the lease and starts. Two processes draining one shared
|
|
1055
|
-
// clone volume is the failure this prevents — see `core/lifecycle.ts`.
|
|
1056
|
-
const commitWorker = holdCommitWorkerLease(new AdvisoryLease(db, AdvisoryLock.CommitWorker), leased);
|
|
1057
1137
|
|
|
1058
1138
|
// SSO providers. The array REFERENCE is shared with the caller's port — an
|
|
1059
1139
|
// overlay pushes its own plugins into it after construction (they mount when
|
|
@@ -1100,7 +1180,7 @@ export async function createCoreServices(
|
|
|
1100
1180
|
eventBus,
|
|
1101
1181
|
kbDirName,
|
|
1102
1182
|
bot,
|
|
1103
|
-
defaultBranchOf: () =>
|
|
1183
|
+
defaultBranchOf: () => kb.defaultBranch,
|
|
1104
1184
|
}),
|
|
1105
1185
|
debounceMs: opts?.debounceMs,
|
|
1106
1186
|
log: opts?.log ?? ((message) => logger('directory-sync').warn(message)),
|
|
@@ -1114,7 +1194,7 @@ export async function createCoreServices(
|
|
|
1114
1194
|
workflowService,
|
|
1115
1195
|
accessControl,
|
|
1116
1196
|
kbDirName,
|
|
1117
|
-
() =>
|
|
1197
|
+
() => kb.defaultBranch,
|
|
1118
1198
|
eventBus,
|
|
1119
1199
|
);
|
|
1120
1200
|
// Account deletion's optional half: the erased address out of roles.yaml,
|
|
@@ -1126,22 +1206,39 @@ export async function createCoreServices(
|
|
|
1126
1206
|
accessControl,
|
|
1127
1207
|
disk,
|
|
1128
1208
|
kbDirName,
|
|
1129
|
-
() =>
|
|
1209
|
+
() => kb.defaultBranch,
|
|
1130
1210
|
eventBus,
|
|
1131
1211
|
[config.adminEmail],
|
|
1132
1212
|
);
|
|
1133
1213
|
|
|
1214
|
+
// THE LAST THING STARTED, once everything above is built: the lease loop
|
|
1215
|
+
// is the one piece of this function that keeps running on its own, and a
|
|
1216
|
+
// throw anywhere after it would leave a loop holding — or forever asking
|
|
1217
|
+
// for — this knowledge base's lock with no graph to stop it. Single-tenant
|
|
1218
|
+
// never noticed (the process exited with the throw); a host that retries
|
|
1219
|
+
// an activation would. Not `start()`: the worker runs only while this
|
|
1220
|
+
// process holds the commit-worker lease. On a redeploy the outgoing
|
|
1221
|
+
// container still holds it, so this one serves requests and declines to
|
|
1222
|
+
// drain until that one exits; then it takes the lease and starts. Two
|
|
1223
|
+
// processes draining one shared clone volume is the failure this prevents
|
|
1224
|
+
// — see `core/lifecycle.ts`.
|
|
1225
|
+
const commitWorker = holdCommitWorkerLease(new AdvisoryLease(db, AdvisoryLock.CommitWorker, { tenantKey }), leased);
|
|
1226
|
+
|
|
1134
1227
|
return {
|
|
1135
1228
|
config,
|
|
1136
1229
|
db,
|
|
1137
1230
|
gitRunner,
|
|
1138
1231
|
commitWorker,
|
|
1232
|
+
startupRetry: null,
|
|
1233
|
+
tenantKey,
|
|
1234
|
+
secretsScope,
|
|
1139
1235
|
disk,
|
|
1140
1236
|
mcpServerEditService,
|
|
1141
1237
|
toolDeleteService,
|
|
1142
1238
|
workspaceService,
|
|
1143
1239
|
kbStartupRunner,
|
|
1144
1240
|
settings,
|
|
1241
|
+
kb,
|
|
1145
1242
|
kbDirName,
|
|
1146
1243
|
spillStore,
|
|
1147
1244
|
docExtractService,
|
|
@@ -1194,6 +1291,7 @@ export async function createCoreServices(
|
|
|
1194
1291
|
mcpAuthMiddleware,
|
|
1195
1292
|
mcpOAuthProvider,
|
|
1196
1293
|
mcpResourceMetadataUrl,
|
|
1294
|
+
agentAuditService,
|
|
1197
1295
|
toolRegistry,
|
|
1198
1296
|
toolAuthMiddleware,
|
|
1199
1297
|
manualAuthMiddleware,
|