@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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { testKbContext } from '../../../../__tests__/kb-context.js';
|
|
2
3
|
import fs from 'node:fs/promises';
|
|
3
4
|
import path from 'node:path';
|
|
4
5
|
import os from 'node:os';
|
|
@@ -81,7 +82,7 @@ describe('GitService.syncFromRemote', () => {
|
|
|
81
82
|
await fs.writeFile(path.join(dir, 'b.md'), 'b\n');
|
|
82
83
|
await fs.rename(path.join(dir, 'old name.md'), path.join(dir, 'new name.md'));
|
|
83
84
|
});
|
|
84
|
-
const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(),
|
|
85
|
+
const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(), testKbContext());
|
|
85
86
|
|
|
86
87
|
const r = await git.syncFromRemote('ws');
|
|
87
88
|
expect(r.before).toBe(before);
|
|
@@ -105,7 +106,7 @@ describe('GitService.syncFromRemote', () => {
|
|
|
105
106
|
await runGit(repo, ['config', 'user.email', 'workspace@bevel.test']);
|
|
106
107
|
await runGit(repo, ['config', 'user.name', 'bevel Workspace']);
|
|
107
108
|
await runGit(repo, ['checkout', '-b', BRANCH]).catch(() => undefined);
|
|
108
|
-
const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(),
|
|
109
|
+
const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(), testKbContext());
|
|
109
110
|
|
|
110
111
|
// Still empty on both sides: nothing to sync, and NOT 'remote gone' — a
|
|
111
112
|
// fresh deployment nobody has pushed to must never have its clone retired.
|
|
@@ -134,7 +135,7 @@ describe('GitService.syncFromRemote', () => {
|
|
|
134
135
|
await runGit(upstream, ['branch', 'ali/x', BRANCH]);
|
|
135
136
|
const { workspaceDir } = await cloneWorkspace(root, upstream, 'ali%2Fx', 'ali/x');
|
|
136
137
|
await runGit(upstream, ['update-ref', '-d', 'refs/heads/ali/x']);
|
|
137
|
-
const git = new GitService(stubWorkspaceService({ 'ali%2Fx': workspaceDir }), stubWorkflowHooks(),
|
|
138
|
+
const git = new GitService(stubWorkspaceService({ 'ali%2Fx': workspaceDir }), stubWorkflowHooks(), testKbContext());
|
|
138
139
|
await expect(git.syncFromRemote('ali%2Fx')).rejects.toBeInstanceOf(RemoteBranchGoneError);
|
|
139
140
|
});
|
|
140
141
|
});
|
|
@@ -163,7 +164,7 @@ describe('GitService.syncFromRemote — the cases git exits 0 on but should not
|
|
|
163
164
|
await pushFromElsewhere(root, upstream, async (dir) => {
|
|
164
165
|
await fs.writeFile(path.join(dir, 'a.md'), 'edited on the host\n');
|
|
165
166
|
});
|
|
166
|
-
const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(),
|
|
167
|
+
const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(), testKbContext());
|
|
167
168
|
|
|
168
169
|
await expect(git.syncFromRemote('ws')).rejects.toMatchObject({
|
|
169
170
|
name: 'PullRebaseConflictError',
|
|
@@ -186,7 +187,7 @@ describe('GitService.syncFromRemote — the cases git exits 0 on but should not
|
|
|
186
187
|
await runGit(repo, ['rm', '-rf', '--cached', '.']).catch(() => undefined);
|
|
187
188
|
await fs.rm(path.join(repo, 'a.md'), { force: true });
|
|
188
189
|
await fs.rm(path.join(repo, 'old name.md'), { force: true });
|
|
189
|
-
const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(),
|
|
190
|
+
const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(), testKbContext());
|
|
190
191
|
await expect(git.syncFromRemote('ws')).rejects.toBeInstanceOf(RemoteBranchGoneError);
|
|
191
192
|
});
|
|
192
193
|
|
|
@@ -194,7 +195,7 @@ describe('GitService.syncFromRemote — the cases git exits 0 on but should not
|
|
|
194
195
|
const upstream = await bareUpstream(root, true);
|
|
195
196
|
await runGit(upstream, ['branch', 'ali/x', BRANCH]);
|
|
196
197
|
const { workspaceDir } = await cloneWorkspace(root, upstream, 'ws');
|
|
197
|
-
const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(),
|
|
198
|
+
const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(), testKbContext());
|
|
198
199
|
expect(await git.remoteBranchExists('ws', 'ali/x')).toBe(true);
|
|
199
200
|
await runGit(upstream, ['update-ref', '-d', 'refs/heads/ali/x']);
|
|
200
201
|
expect(await git.remoteBranchExists('ws', 'ali/x')).toBe(false);
|
|
@@ -241,7 +242,7 @@ describe('GitService.syncFromRemote — an unborn clone that already holds stage
|
|
|
241
242
|
await runGit(seed, ['add', '.']);
|
|
242
243
|
await runGit(seed, ['commit', '-m', 'first']);
|
|
243
244
|
await runGit(seed, ['push', upstream, BRANCH]);
|
|
244
|
-
const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(),
|
|
245
|
+
const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(), testKbContext());
|
|
245
246
|
|
|
246
247
|
await expect(git.syncFromRemote('ws')).rejects.toMatchObject({
|
|
247
248
|
name: 'PullRebaseConflictError',
|
|
@@ -3,7 +3,7 @@ import fs from 'node:fs/promises';
|
|
|
3
3
|
import os from 'node:os';
|
|
4
4
|
import path from 'node:path';
|
|
5
5
|
import { NodeGitRunner } from '../node-git-runner.js';
|
|
6
|
-
import { GitRunError, isGitTimeout } from '../../../../shared/git.contract.js';
|
|
6
|
+
import { GitRunError, gitCredentials, isGitTimeout } from '../../../../shared/git.contract.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* These run REAL git, like the rest of this module's suites: the behaviours
|
|
@@ -94,10 +94,48 @@ describe('NodeGitRunner', () => {
|
|
|
94
94
|
expect(true).toBe(true);
|
|
95
95
|
});
|
|
96
96
|
|
|
97
|
+
/**
|
|
98
|
+
* The helper the runner's callers stamp into a clone, reduced to the one
|
|
99
|
+
* thing under test here: what `$GITHUB_TOKEN` is in the child. `credential
|
|
100
|
+
* fill` runs it through git's own shell and prints what it answered, which
|
|
101
|
+
* is the same path a push takes to its password.
|
|
102
|
+
*/
|
|
103
|
+
const ECHO_TOKEN_HELPER = `!f() { printf '%s\\n' "username=u" "password=\${GITHUB_TOKEN-none}"; }; f`;
|
|
104
|
+
const fill = (runner: NodeGitRunner, env?: NodeJS.ProcessEnv) =>
|
|
105
|
+
runner.run(dir, ['-c', `credential.helper=${ECHO_TOKEN_HELPER}`, 'credential', 'fill'], {
|
|
106
|
+
input: 'protocol=https\nhost=example.test\n\n',
|
|
107
|
+
env,
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it('hands its token to the child, where the helper reads it, and never puts it in argv', async () => {
|
|
111
|
+
const runner = new NodeGitRunner(undefined, gitCredentials('x-access-token', 'ghp_child_secret'));
|
|
112
|
+
const { stdout } = await fill(runner);
|
|
113
|
+
expect(stdout).toContain('password=ghp_child_secret');
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it('drops a token this process inherited: only the credentials in effect reach git', async () => {
|
|
117
|
+
const previous = process.env.GITHUB_TOKEN;
|
|
118
|
+
process.env.GITHUB_TOKEN = 'ghp_stale_in_process_env';
|
|
119
|
+
try {
|
|
120
|
+
const { stdout } = await fill(new NodeGitRunner());
|
|
121
|
+
expect(stdout).toContain('password=none');
|
|
122
|
+
expect(stdout).not.toContain('ghp_stale_in_process_env');
|
|
123
|
+
} finally {
|
|
124
|
+
if (previous === undefined) delete process.env.GITHUB_TOKEN;
|
|
125
|
+
else process.env.GITHUB_TOKEN = previous;
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
it('lets a per-call environment entry win over its own token: the setup probe checks the token it was given', async () => {
|
|
130
|
+
const runner = new NodeGitRunner(undefined, gitCredentials('x-access-token', 'ghp_in_effect'));
|
|
131
|
+
const { stdout } = await fill(runner, { GITHUB_TOKEN: 'ghp_being_checked' });
|
|
132
|
+
expect(stdout).toContain('password=ghp_being_checked');
|
|
133
|
+
});
|
|
134
|
+
|
|
97
135
|
it('keeps the configured git token out of failures', async () => {
|
|
98
|
-
const runner = new NodeGitRunner();
|
|
136
|
+
const runner = new NodeGitRunner(undefined, gitCredentials('x-access-token', 'ghp_secret_value_here'));
|
|
99
137
|
const previous = process.env.GITHUB_TOKEN;
|
|
100
|
-
process.env.GITHUB_TOKEN
|
|
138
|
+
delete process.env.GITHUB_TOKEN;
|
|
101
139
|
try {
|
|
102
140
|
const err = await runner
|
|
103
141
|
.run(dir, ['ls-remote', 'https://x-access-token:ghp_secret_value_here@127.0.0.1:1/r.git'], {
|
|
@@ -26,9 +26,8 @@ import {
|
|
|
26
26
|
assertValidRelativePath,
|
|
27
27
|
isBranchAuthoredBy,
|
|
28
28
|
isOwnSuggestionsBranch,
|
|
29
|
-
isProtectedBranch,
|
|
30
|
-
PROTECTED_BRANCHES,
|
|
31
29
|
} from '../../kb-fs/branch-name.js';
|
|
30
|
+
import type { KbContext } from '../../../shared/kb-context.js';
|
|
32
31
|
import {
|
|
33
32
|
BranchAuthorshipError,
|
|
34
33
|
WorkflowDomainError,
|
|
@@ -42,6 +41,7 @@ import {
|
|
|
42
41
|
GitRunError,
|
|
43
42
|
isGitTimeout,
|
|
44
43
|
redactGitToken,
|
|
44
|
+
type GitCredentials,
|
|
45
45
|
type GitRunOptions,
|
|
46
46
|
type GitRunResult,
|
|
47
47
|
type IGitRunner,
|
|
@@ -296,7 +296,7 @@ export class GitService implements IGitService {
|
|
|
296
296
|
* safe because validation is advisory and never blocks a commit.
|
|
297
297
|
*/
|
|
298
298
|
private readonly hooks: WorkflowHooks,
|
|
299
|
-
private readonly
|
|
299
|
+
private readonly kb: KbContext,
|
|
300
300
|
private readonly mutex: WorkspaceMutex = new WorkspaceMutex(),
|
|
301
301
|
private readonly accessControl: IAccessControl | null = null,
|
|
302
302
|
/**
|
|
@@ -309,6 +309,18 @@ export class GitService implements IGitService {
|
|
|
309
309
|
private readonly gitRunner: IGitRunner = new NodeGitRunner(),
|
|
310
310
|
) {}
|
|
311
311
|
|
|
312
|
+
private get kbDirName(): string {
|
|
313
|
+
return this.kb.kbDirName;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* The credentials the runner authenticates with — for the services above
|
|
318
|
+
* this one that scrub a message git or the host echoed a token into.
|
|
319
|
+
*/
|
|
320
|
+
get credentials(): GitCredentials {
|
|
321
|
+
return this.gitRunner.credentials;
|
|
322
|
+
}
|
|
323
|
+
|
|
312
324
|
/**
|
|
313
325
|
* "Does the pending-commits queue hold rows for this workspace?" — used by
|
|
314
326
|
* `statusInternal` to tell an expected dirty tree (queued saves still
|
|
@@ -552,7 +564,7 @@ export class GitService implements IGitService {
|
|
|
552
564
|
);
|
|
553
565
|
infos[i] = {
|
|
554
566
|
name: row.shortName,
|
|
555
|
-
isProtected: isProtectedBranch(row.shortName),
|
|
567
|
+
isProtected: this.kb.isProtectedBranch(row.shortName),
|
|
556
568
|
ahead,
|
|
557
569
|
behind,
|
|
558
570
|
hasRemote: row.hasRemote,
|
|
@@ -655,7 +667,7 @@ export class GitService implements IGitService {
|
|
|
655
667
|
fromBase?: string,
|
|
656
668
|
): Promise<BranchInfo> {
|
|
657
669
|
assertValidBranchName(name);
|
|
658
|
-
if (isProtectedBranch(name)) {
|
|
670
|
+
if (this.kb.isProtectedBranch(name)) {
|
|
659
671
|
throw new ProtectedBranchError(name, 'creating a protected branch');
|
|
660
672
|
}
|
|
661
673
|
if (fromBase) assertValidBranchName(fromBase);
|
|
@@ -731,7 +743,7 @@ export class GitService implements IGitService {
|
|
|
731
743
|
opts: { onlyIfNoRemote?: boolean; systemCleanup?: boolean } = {},
|
|
732
744
|
): Promise<void> {
|
|
733
745
|
assertValidBranchName(name);
|
|
734
|
-
if (isProtectedBranch(name)) {
|
|
746
|
+
if (this.kb.isProtectedBranch(name)) {
|
|
735
747
|
throw new ProtectedBranchError(name, 'deleting a protected branch');
|
|
736
748
|
}
|
|
737
749
|
return this.mutex.run(workspaceId, async () => {
|
|
@@ -895,7 +907,7 @@ export class GitService implements IGitService {
|
|
|
895
907
|
// boundary. Without this guard, the standard "fork to draft then
|
|
896
908
|
// propose" workflow would 403 for non-admins — they can't write
|
|
897
909
|
// protected, can't write the draft they forked from it either.
|
|
898
|
-
if (isProtectedBranch(branch)) {
|
|
910
|
+
if (this.kb.isProtectedBranch(branch)) {
|
|
899
911
|
// Gate against the access tree as it exists at HEAD — the pre-commit
|
|
900
912
|
// state. Reading from the working tree would let the user broaden
|
|
901
913
|
// their own access by editing access.md alongside the change they're
|
|
@@ -1172,7 +1184,7 @@ export class GitService implements IGitService {
|
|
|
1172
1184
|
// Protected-branch access gate (defence in depth — callers already gate at
|
|
1173
1185
|
// lock-acquire / upload-mint, but this primitive is generic). Gate every
|
|
1174
1186
|
// touched path against the access tree at HEAD, like `commit()`.
|
|
1175
|
-
if (isProtectedBranch(branch)) {
|
|
1187
|
+
if (this.kb.isProtectedBranch(branch)) {
|
|
1176
1188
|
await this.assertCanWriteAtRef(workspaceId, 'HEAD', user.email, touched);
|
|
1177
1189
|
}
|
|
1178
1190
|
|
|
@@ -1292,7 +1304,7 @@ export class GitService implements IGitService {
|
|
|
1292
1304
|
// decided the write is legitimate (unused name, exclusive create);
|
|
1293
1305
|
// gating it here again just refuses every non-admin the product
|
|
1294
1306
|
// promised a plugin to.
|
|
1295
|
-
if (isProtectedBranch(branch) && !opts?.systemAuthorized) {
|
|
1307
|
+
if (this.kb.isProtectedBranch(branch) && !opts?.systemAuthorized) {
|
|
1296
1308
|
const touched = await this.unpushedTouchedPaths(cwd);
|
|
1297
1309
|
await this.assertCanWriteAtRef(
|
|
1298
1310
|
workspaceId,
|
|
@@ -1542,6 +1554,7 @@ export class GitService implements IGitService {
|
|
|
1542
1554
|
throw new Error(
|
|
1543
1555
|
`git merge failed without detectable conflicts: ${redactGitToken(
|
|
1544
1556
|
err instanceof Error ? err.message : String(err),
|
|
1557
|
+
this.credentials.token(),
|
|
1545
1558
|
)}`,
|
|
1546
1559
|
);
|
|
1547
1560
|
}
|
|
@@ -2109,7 +2122,7 @@ export class GitService implements IGitService {
|
|
|
2109
2122
|
return this.mutex.run(workspaceId, async () => {
|
|
2110
2123
|
const cwd = await this.repoDir(workspaceId);
|
|
2111
2124
|
let best: { base: string; ahead: number } | null = null;
|
|
2112
|
-
for (const p of
|
|
2125
|
+
for (const p of this.kb.protectedBranches) {
|
|
2113
2126
|
if (p === branch) continue;
|
|
2114
2127
|
const res = await this.tryAheadBehind(cwd, branch, `origin/${p}`);
|
|
2115
2128
|
if (res && (best === null || res.ahead < best.ahead)) {
|
|
@@ -3133,7 +3146,7 @@ export class GitService implements IGitService {
|
|
|
3133
3146
|
}
|
|
3134
3147
|
|
|
3135
3148
|
let best: { ahead: number; behind: number } | null = null;
|
|
3136
|
-
for (const p of
|
|
3149
|
+
for (const p of this.kb.protectedBranches) {
|
|
3137
3150
|
if (p === shortName) continue;
|
|
3138
3151
|
const res = await this.tryAheadBehind(cwd, ref, `refs/remotes/origin/${p}`);
|
|
3139
3152
|
if (res && (best === null || res.ahead < best.ahead)) best = res;
|
|
@@ -3447,5 +3460,3 @@ export function parseNumstatZ(out: string): NumstatEntry[] {
|
|
|
3447
3460
|
}
|
|
3448
3461
|
return entries;
|
|
3449
3462
|
}
|
|
3450
|
-
|
|
3451
|
-
export { PROTECTED_BRANCHES };
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { spawn, type ChildProcess, type SpawnOptions } from 'node:child_process';
|
|
2
2
|
import {
|
|
3
|
+
GIT_TOKEN_ENV,
|
|
3
4
|
GitRunError,
|
|
5
|
+
NO_GIT_CREDENTIALS,
|
|
4
6
|
redactGitToken,
|
|
7
|
+
type GitCredentials,
|
|
5
8
|
type GitRunOptions,
|
|
6
9
|
type GitRunResult,
|
|
7
10
|
type IGitRunner,
|
|
@@ -212,7 +215,33 @@ function spawnGit(args: string[], options: SpawnOptions & { maxBuffer: number })
|
|
|
212
215
|
* `WorkspaceMutex`'s job and stays the caller's to have done.
|
|
213
216
|
*/
|
|
214
217
|
export class NodeGitRunner implements IGitRunner {
|
|
215
|
-
constructor(
|
|
218
|
+
constructor(
|
|
219
|
+
readonly defaultTimeoutMs: number = DEFAULT_GIT_TIMEOUT_MS,
|
|
220
|
+
/**
|
|
221
|
+
* What every call authenticates with. The token goes into the CHILD's
|
|
222
|
+
* environment only (see {@link childEnv}); a runner built without one
|
|
223
|
+
* runs git unauthenticated, which is what a directly constructed service
|
|
224
|
+
* in a test gets.
|
|
225
|
+
*/
|
|
226
|
+
readonly credentials: GitCredentials = NO_GIT_CREDENTIALS,
|
|
227
|
+
) {}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* The environment one invocation runs under. The token in effect goes in
|
|
231
|
+
* under {@link GIT_TOKEN_ENV}, and a stale one this process inherited from
|
|
232
|
+
* its own environment goes OUT: a server hosting several knowledge bases
|
|
233
|
+
* must never let one knowledge base's git call find another's token, or an
|
|
234
|
+
* operator's, lying in `process.env`. A caller's per-call entry still wins
|
|
235
|
+
* over the provider's (the setup probe runs with the token it is checking,
|
|
236
|
+
* not the one in effect), and the fixed entries win over everything.
|
|
237
|
+
*/
|
|
238
|
+
private childEnv(overrides: NodeJS.ProcessEnv | undefined): NodeJS.ProcessEnv {
|
|
239
|
+
const env: NodeJS.ProcessEnv = { ...process.env };
|
|
240
|
+
delete env[GIT_TOKEN_ENV];
|
|
241
|
+
const token = this.credentials.token();
|
|
242
|
+
if (token) env[GIT_TOKEN_ENV] = token;
|
|
243
|
+
return { ...env, ...overrides, ...FIXED_ENV };
|
|
244
|
+
}
|
|
216
245
|
|
|
217
246
|
run(cwd: string, args: string[], opts: GitRunOptions & { encoding: 'buffer' }): Promise<GitRunResult<Buffer>>;
|
|
218
247
|
run(cwd: string, args: string[], opts?: GitRunOptions & { encoding?: 'utf8' }): Promise<GitRunResult>;
|
|
@@ -224,7 +253,7 @@ export class NodeGitRunner implements IGitRunner {
|
|
|
224
253
|
try {
|
|
225
254
|
const { promise: pending, child } = spawnGit(args, {
|
|
226
255
|
cwd,
|
|
227
|
-
env:
|
|
256
|
+
env: this.childEnv(opts.env),
|
|
228
257
|
maxBuffer: MAX_OUTPUT_BYTES,
|
|
229
258
|
// Makes the child a process-group leader so that `killTree` can signal
|
|
230
259
|
// the transport helpers it spawns, not just git itself. Not on Windows,
|
|
@@ -291,9 +320,13 @@ export class NodeGitRunner implements IGitRunner {
|
|
|
291
320
|
: Buffer.isBuffer(original.stderr)
|
|
292
321
|
? original.stderr.toString()
|
|
293
322
|
: undefined;
|
|
294
|
-
|
|
323
|
+
// Scrubbed with the token THIS runner handed the child, and the one a
|
|
324
|
+
// caller laid over it for the call: both can be echoed back by git.
|
|
325
|
+
const secrets = [this.credentials.token(), opts.env?.[GIT_TOKEN_ENV]];
|
|
326
|
+
const scrub = (text: string): string => secrets.reduce<string>((out, token) => redactGitToken(out, token), text);
|
|
327
|
+
throw new GitRunError(`git ${subcommand} failed: ${scrub(message)}`, {
|
|
295
328
|
exitCode: typeof original.code === 'number' ? original.code : undefined,
|
|
296
|
-
stderr: stderr === undefined ? undefined :
|
|
329
|
+
stderr: stderr === undefined ? undefined : scrub(stderr),
|
|
297
330
|
});
|
|
298
331
|
} finally {
|
|
299
332
|
// Every timer is cleared on every path. The later ones in particular
|
|
@@ -18,6 +18,7 @@ import { changeRequests, prComments, prFileApprovals, prMergeLog, users } from '
|
|
|
18
18
|
import { AccessUnreadableError } from '../../access-model/access-errors.js';
|
|
19
19
|
import type { IAccessControl } from '../../access/access-control.interface.js';
|
|
20
20
|
import type { GitService } from '../git/git.service.js';
|
|
21
|
+
import { redactSecret } from '../../../shared/redact-secret.js';
|
|
21
22
|
import {
|
|
22
23
|
ChangeRequestConflictsError,
|
|
23
24
|
WorkflowDomainError,
|
|
@@ -45,11 +46,13 @@ import {
|
|
|
45
46
|
const MERGE_METHOD = 'merge' as const;
|
|
46
47
|
const EVERYONE_CANONICAL = 'everyone';
|
|
47
48
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
/**
|
|
50
|
+
* Redact a git token from an error string before it is stored: the one the
|
|
51
|
+
* knowledge base's runner authenticates with, plus whatever the environment
|
|
52
|
+
* holds (`redactSecret` names those itself).
|
|
53
|
+
*/
|
|
54
|
+
function redactTokens(msg: string, token: string | null | undefined): string {
|
|
55
|
+
return redactSecret(msg, [token]);
|
|
53
56
|
}
|
|
54
57
|
|
|
55
58
|
class CommentAuthError extends WorkflowDomainError {
|
|
@@ -743,7 +746,7 @@ export class ReviewWorkflowService implements IReviewWorkflowService {
|
|
|
743
746
|
user,
|
|
744
747
|
);
|
|
745
748
|
} catch (err) {
|
|
746
|
-
const redacted = redactTokens(err instanceof Error ? err.message : String(err));
|
|
749
|
+
const redacted = redactTokens(err instanceof Error ? err.message : String(err), this.git.credentials?.token());
|
|
747
750
|
await this.db
|
|
748
751
|
.update(prMergeLog)
|
|
749
752
|
.set({ succeeded: false, completedAt: new Date(), error: redacted })
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
|
|
34
34
|
import { eq, lt } from 'drizzle-orm';
|
|
35
35
|
import { ontologyOf } from '../../shared/kb-layout.js';
|
|
36
|
+
import type { KbContext } from '../../shared/kb-context.js';
|
|
36
37
|
|
|
37
38
|
import type { Database } from '../database/connection.js';
|
|
38
39
|
import { sessionOntologyTouches } from '../database/schema.js';
|
|
@@ -77,7 +78,11 @@ export class SessionOntologyService implements ISessionOntologyService {
|
|
|
77
78
|
*/
|
|
78
79
|
private readonly locks = new WorkspaceMutex();
|
|
79
80
|
|
|
80
|
-
constructor(
|
|
81
|
+
constructor(
|
|
82
|
+
private readonly db: Database,
|
|
83
|
+
/** Names the knowledge-base root a path is classified under; read per call. */
|
|
84
|
+
private readonly kb: Pick<KbContext, 'layout'>,
|
|
85
|
+
) {}
|
|
81
86
|
|
|
82
87
|
/**
|
|
83
88
|
* Resolve `wsPath` to its ontology and evaluate/record the operation. Thin
|
|
@@ -89,7 +94,7 @@ export class SessionOntologyService implements ISessionOntologyService {
|
|
|
89
94
|
isWrite: boolean,
|
|
90
95
|
kbDirName?: string,
|
|
91
96
|
): Promise<OperationDecision> {
|
|
92
|
-
return this.checkOntology(sessionId, ontologyOf(wsPath, kbDirName), isWrite);
|
|
97
|
+
return this.checkOntology(sessionId, ontologyOf(wsPath, this.kb.layout, kbDirName), isWrite);
|
|
93
98
|
}
|
|
94
99
|
|
|
95
100
|
/**
|
|
@@ -57,16 +57,16 @@ import type {
|
|
|
57
57
|
RemoteSyncPullResult,
|
|
58
58
|
} from '@bevel-software/platform-shared';
|
|
59
59
|
import {
|
|
60
|
-
isProtectedBranch,
|
|
61
|
-
DEFAULT_BRANCH,
|
|
62
60
|
isFolderPlaceholder,
|
|
63
61
|
folderPlaceholderPath,
|
|
64
62
|
isPlatformRestoreShape,
|
|
65
63
|
} from '@bevel-software/platform-shared';
|
|
64
|
+
import type { KbContext } from '../../shared/kb-context.js';
|
|
66
65
|
import { and, eq, inArray, isNotNull, isNull, lt, or } from 'drizzle-orm';
|
|
67
66
|
import type { Database } from '../database/connection.js';
|
|
68
67
|
import { changeRequests } from '../database/schema.js';
|
|
69
68
|
import type { GitService } from './git/git.service.js';
|
|
69
|
+
import { redactSecret } from '../../shared/redact-secret.js';
|
|
70
70
|
import type { PullRequestService } from './git/pull-request.service.js';
|
|
71
71
|
import type { IReviewWorkflowService } from './review-workflow/review-workflow.interface.js';
|
|
72
72
|
import type { WorkspaceService } from '../workspace/workspace.service.js';
|
|
@@ -156,12 +156,13 @@ export function syncConflictMessage(branch: string, conflictedPaths: string[]):
|
|
|
156
156
|
/** How many conflicted files the sync-conflict sentence names before "and N more". */
|
|
157
157
|
const SYNC_CONFLICT_FILES_NAMED = 3;
|
|
158
158
|
|
|
159
|
-
/**
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
159
|
+
/**
|
|
160
|
+
* Redact a git token from an error string before surfacing it: the one the
|
|
161
|
+
* knowledge base's runner authenticates with, plus whatever the environment
|
|
162
|
+
* holds (`redactSecret` names those itself).
|
|
163
|
+
*/
|
|
164
|
+
function redactTokens(msg: string, token: string | null | undefined): string {
|
|
165
|
+
return redactSecret(msg, [token]);
|
|
165
166
|
}
|
|
166
167
|
|
|
167
168
|
/**
|
|
@@ -275,6 +276,10 @@ export class WorkflowService implements IWorkflowService {
|
|
|
275
276
|
* implementation detail of the workflow auto-merge story; nothing outside
|
|
276
277
|
* the facade should call it directly.
|
|
277
278
|
*/
|
|
279
|
+
private get kbDirName(): string {
|
|
280
|
+
return this.kb.kbDirName;
|
|
281
|
+
}
|
|
282
|
+
|
|
278
283
|
constructor(
|
|
279
284
|
private readonly db: Database,
|
|
280
285
|
private readonly git: GitService,
|
|
@@ -291,7 +296,7 @@ export class WorkflowService implements IWorkflowService {
|
|
|
291
296
|
* See `lock-decoupling-plan.md` for the full design.
|
|
292
297
|
*/
|
|
293
298
|
private readonly pendingCommits: PendingCommitsService,
|
|
294
|
-
private readonly
|
|
299
|
+
private readonly kb: KbContext,
|
|
295
300
|
/**
|
|
296
301
|
* The read-before-write gate `acquireLock` asks on every branch (see
|
|
297
302
|
* `access-model/change-gate.ts`). Required, and checked at construction:
|
|
@@ -419,7 +424,7 @@ export class WorkflowService implements IWorkflowService {
|
|
|
419
424
|
fn: () => Promise<T>,
|
|
420
425
|
): Promise<T> {
|
|
421
426
|
const keys = [`branch:${source}`];
|
|
422
|
-
if (!isProtectedBranch(target)) keys.push(`branch:${target}`);
|
|
427
|
+
if (!this.kb.isProtectedBranch(target)) keys.push(`branch:${target}`);
|
|
423
428
|
return this.branchLifecycle.runAll(keys, fn);
|
|
424
429
|
}
|
|
425
430
|
|
|
@@ -573,8 +578,9 @@ export class WorkflowService implements IWorkflowService {
|
|
|
573
578
|
*/
|
|
574
579
|
private async pullWorkspace(workspaceId: string): Promise<boolean> {
|
|
575
580
|
const { treeChanged } = await this.git.pull(workspaceId);
|
|
576
|
-
|
|
577
|
-
|
|
581
|
+
const defaultBranch = this.kb.defaultBranch;
|
|
582
|
+
if (treeChanged && branchForWorkspaceId(workspaceId) === defaultBranch) {
|
|
583
|
+
this.events?.emit({ kind: 'fs-tree-changed', workspaceId, branch: defaultBranch });
|
|
578
584
|
return true;
|
|
579
585
|
}
|
|
580
586
|
return false;
|
|
@@ -961,7 +967,7 @@ export class WorkflowService implements IWorkflowService {
|
|
|
961
967
|
// future caller can make that claim by passing a flag.
|
|
962
968
|
if (
|
|
963
969
|
typeof platformRestore?.source === 'string' &&
|
|
964
|
-
isPlatformRestoreShape(toRepoRelative(platformRestore.source), repoRelative) &&
|
|
970
|
+
isPlatformRestoreShape(toRepoRelative(platformRestore.source), repoRelative, this.kb.layout) &&
|
|
965
971
|
(await this.accessControl.canRestorePlatformFile(workspaceId, userEmail, repoRelative))
|
|
966
972
|
) {
|
|
967
973
|
return 'restore';
|
|
@@ -1037,7 +1043,7 @@ export class WorkflowService implements IWorkflowService {
|
|
|
1037
1043
|
// coordination hold as write possession (see those methods).
|
|
1038
1044
|
if (!opts?.coordination) {
|
|
1039
1045
|
let via: 'granted' | 'restore' = 'granted';
|
|
1040
|
-
if (isProtectedBranch(branch)) {
|
|
1046
|
+
if (this.kb.isProtectedBranch(branch)) {
|
|
1041
1047
|
// `assertCanWriteAtPath` throws AccessDeniedError on denial, with the
|
|
1042
1048
|
// eligible-writers payload so the frontend can render a useful refusal.
|
|
1043
1049
|
via = await this.assertCanWriteAtPath(
|
|
@@ -1321,7 +1327,8 @@ export class WorkflowService implements IWorkflowService {
|
|
|
1321
1327
|
branch: string,
|
|
1322
1328
|
targetPath: string,
|
|
1323
1329
|
user: AuthUser,
|
|
1324
|
-
|
|
1330
|
+
/** `summary` overrides the path-derived commit subject; see `commitFile`. */
|
|
1331
|
+
opts?: { systemAuthorized?: boolean; skipValidation?: boolean; summary?: string },
|
|
1325
1332
|
): Promise<void> {
|
|
1326
1333
|
// `skipValidation` is the worker telling us this commit is not the last of
|
|
1327
1334
|
// a burst. The validator is advisory — it parses the whole KB to produce a
|
|
@@ -1332,7 +1339,7 @@ export class WorkflowService implements IWorkflowService {
|
|
|
1332
1339
|
workspaceId,
|
|
1333
1340
|
user,
|
|
1334
1341
|
targetPath,
|
|
1335
|
-
|
|
1342
|
+
opts?.summary,
|
|
1336
1343
|
opts?.skipValidation,
|
|
1337
1344
|
);
|
|
1338
1345
|
if (!change) {
|
|
@@ -1759,7 +1766,7 @@ export class WorkflowService implements IWorkflowService {
|
|
|
1759
1766
|
throw new WorkflowValidationError('source and target branches must differ');
|
|
1760
1767
|
}
|
|
1761
1768
|
if (!input.title?.trim()) throw new WorkflowValidationError('title is required');
|
|
1762
|
-
if (isProtectedBranch(input.sourceBranch)) {
|
|
1769
|
+
if (this.kb.isProtectedBranch(input.sourceBranch)) {
|
|
1763
1770
|
throw new WorkflowValidationError(
|
|
1764
1771
|
`Cannot open a change request *from* a protected branch ("${input.sourceBranch}").`,
|
|
1765
1772
|
{ kind: 'source-is-protected', sourceBranch: input.sourceBranch },
|
|
@@ -1897,7 +1904,7 @@ export class WorkflowService implements IWorkflowService {
|
|
|
1897
1904
|
// up-to-date) auto-merge, and inserts the row.
|
|
1898
1905
|
const rawMsg = err instanceof Error ? err.message : String(err);
|
|
1899
1906
|
throw new WorkflowValidationError(
|
|
1900
|
-
`Failed to open change request: ${redactTokens(rawMsg)}`,
|
|
1907
|
+
`Failed to open change request: ${redactTokens(rawMsg, this.git.credentials?.token())}`,
|
|
1901
1908
|
{ kind: 'open-change-request-failed' },
|
|
1902
1909
|
);
|
|
1903
1910
|
}
|
|
@@ -2851,7 +2858,7 @@ export class WorkflowService implements IWorkflowService {
|
|
|
2851
2858
|
|
|
2852
2859
|
let live: Set<string>;
|
|
2853
2860
|
try {
|
|
2854
|
-
const branches = await this.git.listBranches(
|
|
2861
|
+
const branches = await this.git.listBranches(this.kb.defaultWorkspaceId(), {
|
|
2855
2862
|
freshFetch: true,
|
|
2856
2863
|
// The list is used to PROVE absence, and the listing's normal
|
|
2857
2864
|
// degrade-to-stale behaviour would report every branch created since
|
|
@@ -3166,8 +3173,8 @@ export class WorkflowService implements IWorkflowService {
|
|
|
3166
3173
|
// outright if it disagrees with the request's own base.) The failure the
|
|
3167
3174
|
// pull reports is about OTHER people's commits not arriving, which leaves
|
|
3168
3175
|
// the catalogs no staler than they were.
|
|
3169
|
-
if (!announced && targetWorkspaceId && targetBranch ===
|
|
3170
|
-
this.events?.emit({ kind: 'fs-tree-changed', workspaceId: targetWorkspaceId, branch:
|
|
3176
|
+
if (!announced && targetWorkspaceId && targetBranch === this.kb.defaultBranch) {
|
|
3177
|
+
this.events?.emit({ kind: 'fs-tree-changed', workspaceId: targetWorkspaceId, branch: targetBranch });
|
|
3171
3178
|
}
|
|
3172
3179
|
}
|
|
3173
3180
|
|
|
@@ -3234,7 +3241,7 @@ export class WorkflowService implements IWorkflowService {
|
|
|
3234
3241
|
// change request's merge, nothing strips it here — so its presence
|
|
3235
3242
|
// is what the hook refuses on) and both sides of a rename, since the
|
|
3236
3243
|
// old name is a file this merge deletes.
|
|
3237
|
-
authorize: isProtectedBranch(targetBranch)
|
|
3244
|
+
authorize: this.kb.isProtectedBranch(targetBranch)
|
|
3238
3245
|
? async ({ sha, changedPaths }) => {
|
|
3239
3246
|
if (changedPaths.length === 0) return;
|
|
3240
3247
|
// roles.yaml never changes through a merge. A change request's
|
|
@@ -3445,7 +3452,7 @@ export class WorkflowService implements IWorkflowService {
|
|
|
3445
3452
|
.where(eq(changeRequests.number, number))
|
|
3446
3453
|
.limit(1);
|
|
3447
3454
|
const sourceBranch = rows[0]?.sourceBranch;
|
|
3448
|
-
if (!sourceBranch || isProtectedBranch(sourceBranch)) return;
|
|
3455
|
+
if (!sourceBranch || this.kb.isProtectedBranch(sourceBranch)) return;
|
|
3449
3456
|
// The open-check and the deletion hold the branch's lifecycle lock
|
|
3450
3457
|
// TOGETHER — `openChangeRequest` holds the same lock across its own
|
|
3451
3458
|
// check-then-insert, so a request being opened from this branch either
|
|
@@ -3620,7 +3627,7 @@ export class WorkflowService implements IWorkflowService {
|
|
|
3620
3627
|
return stdout.split('\n').map((s) => s.trim()).filter(Boolean);
|
|
3621
3628
|
} catch (err) {
|
|
3622
3629
|
log.warn('listChangedPathsBetweenBranches failed:', {
|
|
3623
|
-
detail: redactTokens(err instanceof Error ? err.message : String(err)),
|
|
3630
|
+
detail: redactTokens(err instanceof Error ? err.message : String(err), this.git.credentials?.token()),
|
|
3624
3631
|
});
|
|
3625
3632
|
return [];
|
|
3626
3633
|
}
|
|
@@ -4,6 +4,7 @@ import { tmpdir } from 'node:os';
|
|
|
4
4
|
import { dirname, join } from 'node:path';
|
|
5
5
|
import express from 'express';
|
|
6
6
|
import { afterAll, beforeAll, describe, expect, it } from 'vitest';
|
|
7
|
+
import { testKbContext } from '../../../__tests__/kb-context.js';
|
|
7
8
|
import { LocalFilesystem } from '@mastra/core/workspace';
|
|
8
9
|
import { ToolRegistry } from '../../tool-registry/tool-registry.js';
|
|
9
10
|
import { createToolHandlerFactory } from '../../tool-helpers/tool-handler.js';
|
|
@@ -86,8 +87,8 @@ beforeAll(async () => {
|
|
|
86
87
|
new SpillStore(join(tmpdir(), 'bevel-test-spills')),
|
|
87
88
|
new DocExtractService(docCache),
|
|
88
89
|
service,
|
|
89
|
-
KB,
|
|
90
|
-
{ service: {} as never, enabled: false, kbDirName: KB, recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new WorkflowHooks() },
|
|
90
|
+
testKbContext({ kbDirName: KB }),
|
|
91
|
+
{ service: {} as never, enabled: false, kb: testKbContext({ kbDirName: KB }), recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new WorkflowHooks() },
|
|
91
92
|
new RoutineWritePolicyService(),
|
|
92
93
|
{} as never,
|
|
93
94
|
);
|