@bevel-software/platform-core-backend 0.20.0 → 0.22.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 +55 -107
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +41 -4
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +183 -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-requests.contract.d.ts +75 -0
- package/dist/modules/access/access-requests.contract.d.ts.map +1 -0
- package/dist/modules/access/access-requests.contract.js +20 -0
- package/dist/modules/access/access-requests.contract.js.map +1 -0
- package/dist/modules/access/access-requests.routes.d.ts +35 -0
- package/dist/modules/access/access-requests.routes.d.ts.map +1 -0
- package/dist/modules/access/access-requests.routes.js +237 -0
- package/dist/modules/access/access-requests.routes.js.map +1 -0
- package/dist/modules/access/access-requests.service.d.ts +123 -0
- package/dist/modules/access/access-requests.service.d.ts.map +1 -0
- package/dist/modules/access/access-requests.service.js +337 -0
- package/dist/modules/access/access-requests.service.js.map +1 -0
- 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/access-model/access-grammar.d.ts +12 -0
- package/dist/modules/access-model/access-grammar.d.ts.map +1 -1
- package/dist/modules/access-model/access-grammar.js +24 -0
- package/dist/modules/access-model/access-grammar.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/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 +45 -2
- package/dist/modules/auth/auth.service.d.ts.map +1 -1
- package/dist/modules/auth/auth.service.js +44 -3
- 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/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/github-app/github-app.client.d.ts +101 -0
- package/dist/modules/github-app/github-app.client.d.ts.map +1 -0
- package/dist/modules/github-app/github-app.client.js +222 -0
- package/dist/modules/github-app/github-app.client.js.map +1 -0
- package/dist/modules/github-app/github-app.connection.d.ts +102 -0
- package/dist/modules/github-app/github-app.connection.d.ts.map +1 -0
- package/dist/modules/github-app/github-app.connection.js +185 -0
- package/dist/modules/github-app/github-app.connection.js.map +1 -0
- package/dist/modules/github-app/github-app.routes.d.ts +59 -0
- package/dist/modules/github-app/github-app.routes.d.ts.map +1 -0
- package/dist/modules/github-app/github-app.routes.js +323 -0
- package/dist/modules/github-app/github-app.routes.js.map +1 -0
- package/dist/modules/github-app/index.d.ts +4 -0
- package/dist/modules/github-app/index.d.ts.map +1 -0
- package/dist/modules/github-app/index.js +4 -0
- package/dist/modules/github-app/index.js.map +1 -0
- 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/remote-url.d.ts +22 -0
- package/dist/modules/kb-fs/remote-url.d.ts.map +1 -0
- package/dist/modules/kb-fs/remote-url.js +35 -0
- package/dist/modules/kb-fs/remote-url.js.map +1 -0
- package/dist/modules/mcp/mcp.service.d.ts +7 -0
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +4 -4
- package/dist/modules/mcp/mcp.service.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-proposals.d.ts +17 -5
- package/dist/modules/plugins/join-proposals.d.ts.map +1 -1
- package/dist/modules/plugins/join-proposals.js +76 -22
- package/dist/modules/plugins/join-proposals.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 +113 -18
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +178 -33
- 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 +48 -17
- 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 +34 -9
- package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +113 -26
- package/dist/modules/settings/deployment-settings.service.js.map +1 -1
- package/dist/modules/settings/managed-repository.d.ts +43 -0
- package/dist/modules/settings/managed-repository.d.ts.map +1 -0
- package/dist/modules/settings/managed-repository.js +60 -0
- package/dist/modules/settings/managed-repository.js.map +1 -0
- package/dist/modules/settings/repository-source.d.ts +128 -0
- package/dist/modules/settings/repository-source.d.ts.map +1 -0
- package/dist/modules/settings/repository-source.js +150 -0
- package/dist/modules/settings/repository-source.js.map +1 -0
- package/dist/modules/settings/setup.routes.d.ts +34 -4
- package/dist/modules/settings/setup.routes.d.ts.map +1 -1
- package/dist/modules/settings/setup.routes.js +198 -18
- 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 +8 -9
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +26 -65
- 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-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +15 -0
- package/dist/modules/tool-helpers/tool-context.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 +47 -11
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
- package/dist/modules/workflow/git/git.service.d.ts +14 -6
- package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/git.service.js +40 -18
- 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 +40 -5
- package/dist/modules/workflow/git/node-git-runner.js.map +1 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts +45 -0
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/pull-request.service.js +99 -0
- package/dist/modules/workflow/git/pull-request.service.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.routes.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.routes.js +3 -1
- package/dist/modules/workflow/workflow.routes.js.map +1 -1
- package/dist/modules/workflow/workflow.service.d.ts +42 -10
- package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.service.js +181 -71
- 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 +70 -7
- package/dist/modules/workspace/startup/kb-startup-runner.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-startup-runner.js +183 -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 +18 -12
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +49 -29
- 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 +48 -20
- 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/domain-errors.d.ts +39 -0
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +55 -0
- package/dist/shared/domain-errors.js.map +1 -1
- package/dist/shared/git.contract.d.ts +62 -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 +6 -6
- package/package.json +3 -3
- 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 +64 -107
- package/src/core/create-core-services.ts +238 -96
- 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-requests.recut.test.ts +134 -0
- package/src/modules/access/__tests__/access-requests.routes.test.ts +610 -0
- 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-requests.contract.ts +93 -0
- package/src/modules/access/access-requests.routes.ts +286 -0
- package/src/modules/access/access-requests.service.ts +420 -0
- 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/access-model/access-grammar.ts +22 -0
- 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/auth/__tests__/account.routes.test.ts +15 -0
- package/src/modules/auth/__tests__/auth.service.test.ts +98 -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 +61 -2
- 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/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/github-app/__tests__/github-app.test.ts +848 -0
- package/src/modules/github-app/github-app.client.ts +268 -0
- package/src/modules/github-app/github-app.connection.ts +204 -0
- package/src/modules/github-app/github-app.routes.ts +359 -0
- package/src/modules/github-app/index.ts +19 -0
- 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/__tests__/remote-url.test.ts +38 -0
- 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/remote-url.ts +35 -0
- package/src/modules/marketplace/__tests__/marketplace-repo.head.test.ts +2 -1
- package/src/modules/mcp/mcp.service.ts +11 -4
- 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-proposals.test.ts +100 -19
- package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +2 -1
- package/src/modules/plugins/__tests__/join-requests.service.test.ts +28 -11
- package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +371 -0
- 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 +12 -3
- 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-proposals.ts +87 -19
- package/src/modules/plugins/join-request-jobs.service.ts +8 -7
- package/src/modules/plugins/join-requests.service.ts +203 -43
- 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 +48 -17
- 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 +24 -11
- package/src/modules/settings/__tests__/git-root-folders.test.ts +2 -1
- package/src/modules/settings/__tests__/repository-source.test.ts +191 -0
- package/src/modules/settings/__tests__/setup.routes.boot-failure.test.ts +2 -1
- package/src/modules/settings/__tests__/setup.routes.git-mode.test.ts +353 -0
- package/src/modules/settings/__tests__/setup.routes.github-app.test.ts +282 -0
- package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +7 -4
- package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +233 -0
- 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 +130 -23
- package/src/modules/settings/managed-repository.ts +68 -0
- package/src/modules/settings/repository-source.ts +197 -0
- package/src/modules/settings/setup.routes.ts +233 -19
- 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 +7 -2
- 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 +29 -79
- package/src/modules/skills/skills.routes.ts +4 -3
- package/src/modules/skills/skills.service.ts +13 -9
- 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-helpers/tool-context.ts +15 -0
- 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 +11 -2
- 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 +187 -35
- 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 +148 -41
- package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +143 -2
- package/src/modules/workflow/agent-tools/workflow.tools.ts +60 -12
- 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 +130 -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/__tests__/pull-request.service.getPrDetail.test.ts +145 -2
- package/src/modules/workflow/git/__tests__/pull-request.service.viewer-can-delete.test.ts +166 -0
- package/src/modules/workflow/git/git.service.ts +49 -17
- package/src/modules/workflow/git/node-git-runner.ts +43 -4
- package/src/modules/workflow/git/pull-request.service.ts +119 -0
- 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.routes.ts +3 -1
- package/src/modules/workflow/workflow.service.ts +201 -76
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -2
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +10 -9
- 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 +45 -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 +237 -10
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +44 -11
- 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 +240 -21
- package/src/modules/workspace/startup/kb-git.ts +15 -22
- package/src/modules/workspace/startup/kb-startup-runner.ts +198 -45
- 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 +47 -28
- package/src/modules/workspace/workspace.tools.ts +56 -20
- package/src/modules/workspace/write-denial.ts +7 -5
- package/src/shared/__tests__/kb-layout.plugin.test.ts +19 -16
- package/src/shared/domain-errors.ts +58 -0
- package/src/shared/git.contract.ts +80 -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
|
@@ -167,6 +167,64 @@ export class PullRebaseConflictError extends WorkflowDomainError {
|
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
+
/**
|
|
171
|
+
* The one sentence a branch-less call is answered with. Names the input and
|
|
172
|
+
* what to pass, and carries NO stringified value of what was actually
|
|
173
|
+
* received: the whole point of this refusal is that the caller sent nothing,
|
|
174
|
+
* and echoing `undefined` back at them is how the branch "undefined" got
|
|
175
|
+
* invented in the first place.
|
|
176
|
+
*/
|
|
177
|
+
export const BRANCH_REQUIRED_MESSAGE =
|
|
178
|
+
'`branch` is required: pass the branch (draft) you are working on.';
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* The caller named no branch — the input is missing, empty, not a string, or
|
|
182
|
+
* one of the stringified absent values (`"undefined"` / `"null"`) that a
|
|
183
|
+
* client produces by interpolating a variable it never set.
|
|
184
|
+
*
|
|
185
|
+
* Refused, never defaulted. A knowledge-base tool's workspace is NEVER implied
|
|
186
|
+
* by the credential (identity-only) — it always comes from this argument — so
|
|
187
|
+
* falling back to the deployment's default branch would make an omitted
|
|
188
|
+
* argument silently act on the protected branch. And it is refused HERE, at
|
|
189
|
+
* the boundary, because everything downstream treats the value as a real
|
|
190
|
+
* branch name: `workspaceIdForBranch` would turn it into a workspace directory
|
|
191
|
+
* literally named `undefined`, and the clone of that "branch" would fail with
|
|
192
|
+
* a story about a branch that never existed.
|
|
193
|
+
*
|
|
194
|
+
* 400 with kind `branch-required`, so a client tells it apart from the 404
|
|
195
|
+
* (no such branch) and the 410 (the branch was deleted) without reading prose.
|
|
196
|
+
*/
|
|
197
|
+
export class BranchRequiredError extends WorkflowDomainError {
|
|
198
|
+
readonly kind = 'branch-required' as const;
|
|
199
|
+
constructor() {
|
|
200
|
+
super(BRANCH_REQUIRED_MESSAGE, 400, { kind: 'branch-required' });
|
|
201
|
+
this.name = 'BranchRequiredError';
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* The stringified absent values. Both are syntactically valid git branch
|
|
207
|
+
* names, so the shape validator (`assertValidBranchName`) accepts them
|
|
208
|
+
* happily — accepting one is exactly the bug this guard exists for. They are
|
|
209
|
+
* refused BY NAME, which is why this check cannot be folded into the shape
|
|
210
|
+
* check however tempting that looks.
|
|
211
|
+
*/
|
|
212
|
+
const STRINGIFIED_ABSENT_VALUES = new Set(['undefined', 'null']);
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Refuse a call that names no branch, before anything downstream can turn the
|
|
216
|
+
* missing value into a directory name, a clone attempt or a log line.
|
|
217
|
+
*
|
|
218
|
+
* Deliberately NOT a shape check: a well-formed name this platform has never
|
|
219
|
+
* seen is a 404 the caller can act on, and a malformed one is a
|
|
220
|
+
* `BranchNameError` from the canonical validator. This answers only "you sent
|
|
221
|
+
* nothing", which is the one case where naming the branch back is impossible.
|
|
222
|
+
*/
|
|
223
|
+
export function assertBranchProvided(branch: unknown): asserts branch is string {
|
|
224
|
+
if (typeof branch !== 'string' || branch.length === 0) throw new BranchRequiredError();
|
|
225
|
+
if (STRINGIFIED_ABSENT_VALUES.has(branch)) throw new BranchRequiredError();
|
|
226
|
+
}
|
|
227
|
+
|
|
170
228
|
/**
|
|
171
229
|
* The platform has never heard of this branch: nothing it has cloned, and
|
|
172
230
|
* nothing any listing of origin's branches has mentioned. Distinct from
|
|
@@ -39,21 +39,86 @@
|
|
|
39
39
|
*/
|
|
40
40
|
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
42
|
+
* The credential git authenticates a knowledge base's remote with: the
|
|
43
|
+
* Basic-auth username the host expects and the token that is its password.
|
|
44
|
+
*
|
|
45
|
+
* A PROVIDER, read at every call, not a value captured at boot: the setup
|
|
46
|
+
* screen can supply a token after the graph is built, and a token rotated in
|
|
47
|
+
* the settings has to be the one the next push carries. The runner puts the
|
|
48
|
+
* token into the child's environment under {@link GIT_TOKEN_ENV}, which is
|
|
49
|
+
* the only place git reads it from (the inline credential helper spells
|
|
50
|
+
* `password=$GITHUB_TOKEN`), so the value never enters argv, a clone's
|
|
51
|
+
* config, or a message that quotes either. Nothing writes it into THIS
|
|
52
|
+
* process's environment: a server hosting several knowledge bases has one
|
|
53
|
+
* environment and several tokens.
|
|
54
|
+
*/
|
|
55
|
+
export interface GitCredentials {
|
|
56
|
+
/**
|
|
57
|
+
* The username sent in the Basic credential: GitHub `x-access-token`,
|
|
58
|
+
* GitLab `oauth2`, Bitbucket `x-token-auth`. Interpolated into the helper
|
|
59
|
+
* snippet, so callers validate it against `[A-Za-z0-9._-]+` before it
|
|
60
|
+
* gets here.
|
|
61
|
+
*/
|
|
62
|
+
username(): string;
|
|
63
|
+
/** The token in effect, or null when the deployment has none configured. */
|
|
64
|
+
token(): string | null;
|
|
65
|
+
/**
|
|
66
|
+
* Make sure {@link token} answers with a credential that is still good,
|
|
67
|
+
* for one that is not fixed: a token a host issues for an hour has to be
|
|
68
|
+
* renewed by asking the host, which `token` cannot do, being read where
|
|
69
|
+
* nothing can wait. The runner awaits this before every call it makes. A
|
|
70
|
+
* failure here is not the call's failure: git runs with the token in
|
|
71
|
+
* hand, and the host says what it thinks of it. Absent for a credential
|
|
72
|
+
* that does not expire.
|
|
73
|
+
*/
|
|
74
|
+
prepare?(): Promise<void>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** The username git is given when a deployment names none. */
|
|
78
|
+
export const DEFAULT_GIT_USERNAME = 'x-access-token';
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The environment variable the child git process reads the token from. The
|
|
82
|
+
* name is historical (the first supported host), and it is the literal every
|
|
83
|
+
* app-stamped credential helper carries, which is what lets a re-stamp find
|
|
84
|
+
* its own helpers in a clone's config and leave an operator's alone.
|
|
85
|
+
*/
|
|
86
|
+
export const GIT_TOKEN_ENV = 'GITHUB_TOKEN';
|
|
87
|
+
|
|
88
|
+
/** No token, the default username: an unauthenticated runner. */
|
|
89
|
+
export const NO_GIT_CREDENTIALS: GitCredentials = Object.freeze({
|
|
90
|
+
username: () => DEFAULT_GIT_USERNAME,
|
|
91
|
+
token: () => null,
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
/** A provider from values or thunks, for a composition root or a test. */
|
|
95
|
+
export function gitCredentials(
|
|
96
|
+
username: string | (() => string) = DEFAULT_GIT_USERNAME,
|
|
97
|
+
token: string | null | (() => string | null) = null,
|
|
98
|
+
): GitCredentials {
|
|
99
|
+
const user = typeof username === 'function' ? username : () => username;
|
|
100
|
+
const secret = typeof token === 'function' ? token : () => token;
|
|
101
|
+
return {
|
|
102
|
+
username: () => user() || DEFAULT_GIT_USERNAME,
|
|
103
|
+
token: () => secret() || null,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Strip a git token out of text on its way into an error, a log line or a
|
|
109
|
+
* response.
|
|
44
110
|
*
|
|
45
111
|
* git puts the remote URL into a great many of its messages, and on a
|
|
46
112
|
* token-authenticated remote that URL carries the credential. Without this, a
|
|
47
113
|
* push failure writes the deployment's token into the container log, the API
|
|
48
114
|
* response, and any change request the recovery agent opens about it.
|
|
49
115
|
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
116
|
+
* The token is the caller's to name (the runner names its own), never read
|
|
117
|
+
* from this process's environment: the environment holds no per-knowledge-
|
|
118
|
+
* base token any more, and a scrub that silently found none there would look
|
|
119
|
+
* like one that worked.
|
|
54
120
|
*/
|
|
55
|
-
export function redactGitToken(text: string): string {
|
|
56
|
-
const token = process.env.GITHUB_TOKEN;
|
|
121
|
+
export function redactGitToken(text: string, token: string | null | undefined): string {
|
|
57
122
|
const scrubbed = token ? text.replaceAll(token, '***') : text;
|
|
58
123
|
// URL userinfo as well: a remote spelled `https://user:pass@host` would
|
|
59
124
|
// otherwise leak `pass` verbatim through every git failure that quotes the
|
|
@@ -165,6 +230,13 @@ export interface IGitRunner {
|
|
|
165
230
|
* constant.
|
|
166
231
|
*/
|
|
167
232
|
readonly defaultTimeoutMs: number;
|
|
233
|
+
/**
|
|
234
|
+
* The credential every call through this runner authenticates with — see
|
|
235
|
+
* {@link GitCredentials}. Exposed so the code that stamps a clone's helper
|
|
236
|
+
* or scrubs a message can ask the same runner it runs git through whether
|
|
237
|
+
* a token is in effect, rather than a second source that could disagree.
|
|
238
|
+
*/
|
|
239
|
+
readonly credentials: GitCredentials;
|
|
168
240
|
run(cwd: string, args: string[], opts: GitRunOptions & { encoding: 'buffer' }): Promise<GitRunResult<Buffer>>;
|
|
169
241
|
run(cwd: string, args: string[], opts?: GitRunOptions & { encoding?: 'utf8' }): Promise<GitRunResult>;
|
|
170
242
|
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import {
|
|
2
|
+
UNCONFIGURED_BRANCH_MODEL,
|
|
3
|
+
isBranchModelConfigured,
|
|
4
|
+
isProtectedBranch,
|
|
5
|
+
resolveBranchModel,
|
|
6
|
+
resolveKbLayout,
|
|
7
|
+
validateBranchModel,
|
|
8
|
+
type BranchModel,
|
|
9
|
+
type BranchModelValue,
|
|
10
|
+
type KbLayout,
|
|
11
|
+
} from '@bevel-software/platform-shared';
|
|
12
|
+
import { workspaceIdForBranch } from './workspace-id.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* What ONE knowledge base is called, on disk and in git: the checkout folder
|
|
16
|
+
* inside each workspace, the branch model (default + protected branches) and
|
|
17
|
+
* the layout (the three renameable roots and the guide's file name).
|
|
18
|
+
*
|
|
19
|
+
* Every service that needs one of these is handed the knowledge base's
|
|
20
|
+
* context at construction and reads it there — never a process-wide value.
|
|
21
|
+
* The shared package's live bindings (`DEFAULT_BRANCH`, `PLUGINS_DIR`, …) are
|
|
22
|
+
* the BROWSER'S copy of the same facts and are forbidden in this package by
|
|
23
|
+
* an ESLint rule: a server hosting several knowledge bases in one process has
|
|
24
|
+
* no single value to put there, and a service that read one would be reading
|
|
25
|
+
* whichever knowledge base configured it last.
|
|
26
|
+
*
|
|
27
|
+
* LIVE, PER INSTANCE. The values are read through getters, not captured, for
|
|
28
|
+
* the same reason the live bindings were: a fresh deployment has no branch
|
|
29
|
+
* model until its setup screen is answered, and the save that completes setup
|
|
30
|
+
* applies one to the running graph — through {@link applyBranchModel} and
|
|
31
|
+
* {@link applyLayout} — so the knowledge-base startup phase that runs in that
|
|
32
|
+
* same request already sees it. Read `defaultBranch` inside a method body;
|
|
33
|
+
* a value copied into a field at construction would be the empty string on
|
|
34
|
+
* exactly those deployments.
|
|
35
|
+
*/
|
|
36
|
+
export class KbContext {
|
|
37
|
+
private model: BranchModelValue;
|
|
38
|
+
private layoutValue: Required<KbLayout>;
|
|
39
|
+
private readonly layoutListeners = new Set<() => void>();
|
|
40
|
+
private readonly branchModelListeners = new Set<() => void>();
|
|
41
|
+
|
|
42
|
+
constructor(
|
|
43
|
+
/** The checkout folder inside each workspace directory (`knowledge-base` by default). */
|
|
44
|
+
readonly kbDirName: string,
|
|
45
|
+
branchModel: BranchModelValue,
|
|
46
|
+
layout: KbLayout,
|
|
47
|
+
) {
|
|
48
|
+
this.model = branchModel;
|
|
49
|
+
this.layoutValue = resolveKbLayout(layout);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The model as a deployment's settings describe it, or the unconfigured one
|
|
54
|
+
* when they describe none yet. UNCONFIGURED IS ALLOWED, and that is the
|
|
55
|
+
* point: a fresh deployment has no branch model, and refusing to build
|
|
56
|
+
* services would take away the setup screen where one gets entered. What
|
|
57
|
+
* reads the model before then is the setup path itself, which does not need
|
|
58
|
+
* it; the setup gate keeps the rest of the app shut until it is set.
|
|
59
|
+
*/
|
|
60
|
+
static branchModelOrUnconfigured(model: BranchModel): BranchModelValue {
|
|
61
|
+
return validateBranchModel(model) ? UNCONFIGURED_BRANCH_MODEL : resolveBranchModel(model);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
get branchModel(): BranchModelValue {
|
|
65
|
+
return this.model;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** The branch users land on and the default propose target; `''` until configured. */
|
|
69
|
+
get defaultBranch(): string {
|
|
70
|
+
return this.model.defaultBranch;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
get protectedBranches(): ReadonlySet<string> {
|
|
74
|
+
return this.model.protectedBranches;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
isProtectedBranch(name: string | null | undefined): boolean {
|
|
78
|
+
return isProtectedBranch(this.model, name);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
isBranchModelConfigured(): boolean {
|
|
82
|
+
return isBranchModelConfigured(this.model);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** The workspace id of the default branch's clone — the released catalog's home. */
|
|
86
|
+
defaultWorkspaceId(): string {
|
|
87
|
+
return workspaceIdForBranch(this.model.defaultBranch);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** The layout in effect: the three roots and the guide's file name, every name trimmed. */
|
|
91
|
+
get layout(): Required<KbLayout> {
|
|
92
|
+
return this.layoutValue;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Apply a branch model to the running graph — the setup-completing save.
|
|
97
|
+
* Validated like every model, so a bad pair is refused rather than applied
|
|
98
|
+
* half-way. Listeners run after the value is in place.
|
|
99
|
+
*/
|
|
100
|
+
applyBranchModel(model: BranchModel): void {
|
|
101
|
+
this.model = resolveBranchModel(model);
|
|
102
|
+
for (const listener of this.branchModelListeners) listener();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Apply a layout to the running graph — the setup-completing save, so the
|
|
107
|
+
* knowledge-base phase that runs in the same request scaffolds the names the
|
|
108
|
+
* admin just chose. Throws on an invalid one. Listeners run after the value
|
|
109
|
+
* is in place, and only when the layout was accepted.
|
|
110
|
+
*/
|
|
111
|
+
applyLayout(layout: KbLayout): void {
|
|
112
|
+
this.layoutValue = resolveKbLayout(layout);
|
|
113
|
+
for (const listener of this.layoutListeners) listener();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Be told when {@link applyLayout} runs — for the few things that cannot
|
|
118
|
+
* read the layout at the moment they are used: a value BUILT ONCE and handed
|
|
119
|
+
* to something that keeps it, such as the tool catalog's descriptions, which
|
|
120
|
+
* are validated into frozen defs at registration and then served from a map.
|
|
121
|
+
*/
|
|
122
|
+
onLayoutApplied(listener: () => void): void {
|
|
123
|
+
this.layoutListeners.add(listener);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** Be told when {@link applyBranchModel} runs. */
|
|
127
|
+
onBranchModelApplied(listener: () => void): void {
|
|
128
|
+
this.branchModelListeners.add(listener);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -1,32 +1,42 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { DEFAULT_KB_LAYOUT } from '@bevel-software/platform-shared';
|
|
2
3
|
import { ontologyOf } from './kb-layout.js';
|
|
3
4
|
|
|
5
|
+
/** `ontologyOf` under the default layout, which is what these cases are written against. */
|
|
6
|
+
const ont = (path: string, kbDirName?: string) => ontologyOf(path, DEFAULT_KB_LAYOUT, kbDirName);
|
|
7
|
+
|
|
4
8
|
describe('ontologyOf', () => {
|
|
9
|
+
it('classifies under the knowledge-base root the layout names, not the default one', () => {
|
|
10
|
+
const layout = { ...DEFAULT_KB_LAYOUT, knowledgeBaseDir: 'docs' };
|
|
11
|
+
expect(ontologyOf('docs/Product/Knowledge/Foo.md', layout)).toBe('docs/Product');
|
|
12
|
+
expect(ontologyOf('KnowledgeBase/Product/Knowledge/Foo.md', layout)).toBeNull();
|
|
13
|
+
});
|
|
14
|
+
|
|
5
15
|
it('resolves a named ontology under Knowledge', () => {
|
|
6
|
-
expect(
|
|
16
|
+
expect(ont('KnowledgeBase/Product/Knowledge/Foo.md')).toBe('KnowledgeBase/Product');
|
|
7
17
|
});
|
|
8
18
|
|
|
9
19
|
it('resolves a named ontology under NodeTypes', () => {
|
|
10
|
-
expect(
|
|
20
|
+
expect(ont('KnowledgeBase/Product/NodeTypes/Process.md')).toBe('KnowledgeBase/Product');
|
|
11
21
|
});
|
|
12
22
|
|
|
13
23
|
it('is space-safe in the ontology name', () => {
|
|
14
|
-
expect(
|
|
24
|
+
expect(ont('KnowledgeBase/IT Architecture/NodeTypes/ServiceCommitment.md')).toBe(
|
|
15
25
|
'KnowledgeBase/IT Architecture',
|
|
16
26
|
);
|
|
17
27
|
});
|
|
18
28
|
|
|
19
29
|
it('treats a nested ontology directory as the full prefix before the marker', () => {
|
|
20
|
-
expect(
|
|
30
|
+
expect(ont('KnowledgeBase/Plugin/Sub/Knowledge/x.md')).toBe('KnowledgeBase/Plugin/Sub');
|
|
21
31
|
});
|
|
22
32
|
|
|
23
33
|
it('returns null when the marker sits directly under KnowledgeBase/', () => {
|
|
24
|
-
expect(
|
|
25
|
-
expect(
|
|
34
|
+
expect(ont('KnowledgeBase/Knowledge/Foo.md')).toBeNull();
|
|
35
|
+
expect(ont('KnowledgeBase/NodeTypes/T.md')).toBeNull();
|
|
26
36
|
});
|
|
27
37
|
|
|
28
38
|
it('returns null for root-level Knowledge (not under KnowledgeBase/)', () => {
|
|
29
|
-
expect(
|
|
39
|
+
expect(ont('Knowledge/Foo.md')).toBeNull();
|
|
30
40
|
});
|
|
31
41
|
|
|
32
42
|
it('returns null for Data/ ontologies (deliberate session-ontology exemption)', () => {
|
|
@@ -35,54 +45,54 @@ describe('ontologyOf', () => {
|
|
|
35
45
|
// Data paths as neutral — pipeline agents read knowledge and write data
|
|
36
46
|
// in one session (owner decision 2026-07-27). See the `ontologyOf`
|
|
37
47
|
// docstring; this is not drift.
|
|
38
|
-
expect(
|
|
39
|
-
expect(
|
|
48
|
+
expect(ont('Data/Ops/Knowledge/x.md')).toBeNull();
|
|
49
|
+
expect(ont('Data/Ops/NodeTypes/Ticket.md')).toBeNull();
|
|
40
50
|
// KnowledgeBase paths still classify as before.
|
|
41
|
-
expect(
|
|
51
|
+
expect(ont('KnowledgeBase/Ops/Knowledge/x.md')).toBe('KnowledgeBase/Ops');
|
|
42
52
|
});
|
|
43
53
|
|
|
44
54
|
it('returns null for Plugins and root config (neutral)', () => {
|
|
45
|
-
expect(
|
|
46
|
-
expect(
|
|
47
|
-
expect(
|
|
55
|
+
expect(ont('Plugins/some-skill/SKILL.md')).toBeNull();
|
|
56
|
+
expect(ont('access.md')).toBeNull();
|
|
57
|
+
expect(ont('roles.yaml')).toBeNull();
|
|
48
58
|
});
|
|
49
59
|
|
|
50
60
|
it('returns null for an ontology path with no marker segment', () => {
|
|
51
|
-
expect(
|
|
61
|
+
expect(ont('KnowledgeBase/Product/Uploads/diagram.png')).toBeNull();
|
|
52
62
|
});
|
|
53
63
|
|
|
54
64
|
it('does not match substring lookalikes (segment equality)', () => {
|
|
55
|
-
expect(
|
|
56
|
-
expect(
|
|
65
|
+
expect(ont('KnowledgeBase/Product/Knowledge-notes.md')).toBeNull();
|
|
66
|
+
expect(ont('KnowledgeBase/Product/KnowledgeBase/x.md')).toBeNull();
|
|
57
67
|
});
|
|
58
68
|
|
|
59
69
|
it('strips a kbDirName prefix (normalized and un-normalized)', () => {
|
|
60
|
-
expect(
|
|
70
|
+
expect(ont('knowledge-base/KnowledgeBase/Product/Knowledge/Foo.md', 'knowledge-base')).toBe(
|
|
61
71
|
'KnowledgeBase/Product',
|
|
62
72
|
);
|
|
63
|
-
expect(
|
|
73
|
+
expect(ont('./knowledge-base/KnowledgeBase/GTM/NodeTypes/T.md', 'knowledge-base/')).toBe(
|
|
64
74
|
'KnowledgeBase/GTM',
|
|
65
75
|
);
|
|
66
76
|
});
|
|
67
77
|
|
|
68
78
|
it('normalizes backslashes and leading/trailing slashes', () => {
|
|
69
|
-
expect(
|
|
70
|
-
expect(
|
|
79
|
+
expect(ont('/KnowledgeBase/Product/Knowledge/Foo.md/')).toBe('KnowledgeBase/Product');
|
|
80
|
+
expect(ont('KnowledgeBase\\Product\\Knowledge\\Foo.md')).toBe('KnowledgeBase/Product');
|
|
71
81
|
});
|
|
72
82
|
|
|
73
83
|
it('canonicalizes inner . and .. segments to the same ontology', () => {
|
|
74
|
-
expect(
|
|
75
|
-
expect(
|
|
76
|
-
expect(
|
|
84
|
+
expect(ont('KnowledgeBase/Product/./Knowledge/Foo.md')).toBe('KnowledgeBase/Product');
|
|
85
|
+
expect(ont('KnowledgeBase/Product/Sub/../Knowledge/Foo.md')).toBe('KnowledgeBase/Product');
|
|
86
|
+
expect(ont('KnowledgeBase/Platform/../Product/Knowledge/Foo.md')).toBe('KnowledgeBase/Product');
|
|
77
87
|
// `..` also collapses inside the stripped kbDirName prefix.
|
|
78
|
-
expect(
|
|
88
|
+
expect(ont('knowledge-base/x/../KnowledgeBase/GTM/NodeTypes/T.md', 'knowledge-base')).toBe(
|
|
79
89
|
'KnowledgeBase/GTM',
|
|
80
90
|
);
|
|
81
91
|
});
|
|
82
92
|
|
|
83
93
|
it('returns null for empty or root paths', () => {
|
|
84
|
-
expect(
|
|
85
|
-
expect(
|
|
86
|
-
expect(
|
|
94
|
+
expect(ont('')).toBeNull();
|
|
95
|
+
expect(ont('KnowledgeBase')).toBeNull();
|
|
96
|
+
expect(ont('KnowledgeBase/Product')).toBeNull();
|
|
87
97
|
});
|
|
88
98
|
});
|
package/src/shared/kb-layout.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ONTOLOGY_MARKERS, type KbLayout, type Ontology } from '@bevel-software/platform-shared';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Resolve which named ontology a KB path belongs to — the backend-side
|
|
@@ -81,13 +81,14 @@ function toSegments(path: string, kbDirName?: string): string[] {
|
|
|
81
81
|
* `Knowledge-notes.md` are never treated as markers; space-safe; pure (no IO).
|
|
82
82
|
*
|
|
83
83
|
* @param path repo-root-relative POSIX path (may carry a `kbDirName` prefix)
|
|
84
|
+
* @param layout the knowledge base's layout — names its `KnowledgeBase/` root
|
|
84
85
|
* @param kbDirName optional on-disk clone folder prefix to strip first
|
|
85
86
|
*/
|
|
86
|
-
export function ontologyOf(path: string, kbDirName?: string): Ontology {
|
|
87
|
+
export function ontologyOf(path: string, layout: KbLayout, kbDirName?: string): Ontology {
|
|
87
88
|
const segs = toSegments(path, kbDirName);
|
|
88
89
|
// Must live under the dedicated KnowledgeBase/ container, with at least one
|
|
89
90
|
// ontology-name segment and a marker after it (so length >= 3).
|
|
90
|
-
if (segs.length < 3 || segs[0] !==
|
|
91
|
+
if (segs.length < 3 || segs[0] !== layout.knowledgeBaseDir) return null;
|
|
91
92
|
// The ontology id is the prefix before the first marker segment. Require at
|
|
92
93
|
// least one name segment between `KnowledgeBase/` and the marker, so a marker
|
|
93
94
|
// sitting directly under `KnowledgeBase/` (`KnowledgeBase/Knowledge/...`) is
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { ChangeRequest, IWorkflowService } from '@bevel-software/platform-shared';
|
|
2
2
|
import type { WorkspaceService } from '../modules/workspace/workspace.service.js';
|
|
3
|
-
import {
|
|
3
|
+
import type { KbContext } from './kb-context.js';
|
|
4
4
|
import type { IAccessControl } from '../modules/access/access-control.interface.js';
|
|
5
5
|
import { canonicalEmail, hashEmail } from './email-identity.js';
|
|
6
6
|
import { printable } from './printable.js';
|
|
@@ -34,6 +34,8 @@ export interface ProposalSources {
|
|
|
34
34
|
workspaceService: Pick<WorkspaceService, 'ensureRemotesFetched' | 'readFileAtRef'>;
|
|
35
35
|
accessControl: Pick<IAccessControl, 'canWriteBatch'>;
|
|
36
36
|
workflow: Pick<IWorkflowService, 'listChangeRequests'>;
|
|
37
|
+
/** Which branch is the released one, and its clone. */
|
|
38
|
+
kb: Pick<KbContext, 'defaultBranch' | 'defaultWorkspaceId'>;
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
/** One file an open change request proposes, already read at that request's branch. */
|
|
@@ -78,8 +80,9 @@ export async function visibleProposedFiles(
|
|
|
78
80
|
// access tree that decides who may review — so a request targeting some
|
|
79
81
|
// other branch is not a proposal these surfaces can speak about: merging it
|
|
80
82
|
// puts nothing in the catalog, and the card would never resolve.
|
|
83
|
+
const defaultBranch = sources.kb.defaultBranch;
|
|
81
84
|
crs = (await sources.workflow.listChangeRequests()).filter(
|
|
82
|
-
(c) => c.state === 'open' && c.base ===
|
|
85
|
+
(c) => c.state === 'open' && c.base === defaultBranch,
|
|
83
86
|
);
|
|
84
87
|
} catch {
|
|
85
88
|
return [];
|
|
@@ -91,7 +94,7 @@ export async function visibleProposedFiles(
|
|
|
91
94
|
);
|
|
92
95
|
if (candidates.length === 0) return [];
|
|
93
96
|
|
|
94
|
-
const wsId =
|
|
97
|
+
const wsId = sources.kb.defaultWorkspaceId();
|
|
95
98
|
const authorHash = hashEmail(email);
|
|
96
99
|
|
|
97
100
|
// One access load for every candidate, resolved on the DEFAULT branch — see
|
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
* presigned remote keeps its credential.
|
|
7
7
|
*
|
|
8
8
|
* "The token in effect" is every place one can come from: each environment
|
|
9
|
-
* spelling `CoreConfig` accepts (
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
9
|
+
* spelling `CoreConfig` accepts (the operator's, process-wide), plus whatever
|
|
10
|
+
* the caller knows about — the knowledge base's own token as its git runner
|
|
11
|
+
* carries it, a token a request brought along, or a remote's query values
|
|
12
|
+
* ({@link urlQuerySecrets}). Longest first, so a secret that contains another
|
|
13
|
+
* is not half-scrubbed.
|
|
14
14
|
*
|
|
15
15
|
* Shared, not a module's own: the KB startup phase and the setup routes both
|
|
16
16
|
* log git's words, and one scrub is the only way they cannot disagree about
|