@bevel-software/platform-core-backend 0.35.0 → 0.36.1
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/agent-guide/directory-structure.md +1 -1
- package/agent-guide/onboarding.md +111 -0
- package/agent-guide/start-here.md +1 -0
- package/agent-guide/tool-manuals.md +1 -0
- package/dist/core/catalog-cache-invalidation.d.ts +2 -2
- package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
- package/dist/core/compose-embed.d.ts +2 -2
- package/dist/core/compose-embed.d.ts.map +1 -1
- package/dist/core/compose-embed.js +1 -1
- package/dist/core/compose-embed.js.map +1 -1
- package/dist/core/core-ports.d.ts +19 -4
- 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.map +1 -1
- package/dist/core/create-core-server.js +26 -24
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +19 -13
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +68 -56
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +4 -4
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +5 -5
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core-config.d.ts +2 -2
- package/dist/core-config.js +3 -3
- package/dist/core-config.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.service.js +1 -1
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access-declarations.d.ts +2 -2
- package/dist/modules/access/access-declarations.d.ts.map +1 -1
- package/dist/modules/access/access-declarations.js +2 -2
- package/dist/modules/access/access-declarations.js.map +1 -1
- package/dist/modules/access/access-mutation.service.d.ts +2 -2
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
- package/dist/modules/access/access-mutation.service.js +2 -2
- package/dist/modules/access/access-mutation.service.js.map +1 -1
- package/dist/modules/access/access-requests.routes.d.ts +2 -2
- package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
- package/dist/modules/access/access-requests.routes.js +5 -5
- package/dist/modules/access/access-requests.routes.js.map +1 -1
- package/dist/modules/access/access-requests.service.d.ts +2 -2
- package/dist/modules/access/access-requests.service.d.ts.map +1 -1
- package/dist/modules/access/access-requests.service.js +11 -11
- package/dist/modules/access/access-requests.service.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts +2 -2
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +9 -9
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/admin-locked-commit.d.ts +5 -5
- package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
- package/dist/modules/access/admin-locked-commit.js +7 -7
- package/dist/modules/access/admin-locked-commit.js.map +1 -1
- package/dist/modules/access/admin-route-helpers.d.ts +1 -1
- package/dist/modules/access/admin-route-helpers.js +5 -5
- package/dist/modules/access/admin-route-helpers.js.map +1 -1
- package/dist/modules/access/change-read-gate.d.ts +1 -1
- package/dist/modules/access/change-read-gate.js +1 -1
- package/dist/modules/access/groups-admin.service.d.ts +7 -7
- package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.service.js +6 -6
- package/dist/modules/access/groups-admin.service.js.map +1 -1
- package/dist/modules/access/reference-scan.d.ts +1 -1
- package/dist/modules/access/roles-admin.service.d.ts +7 -7
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
- package/dist/modules/access/roles-admin.service.js +8 -8
- package/dist/modules/access/roles-admin.service.js.map +1 -1
- package/dist/modules/access/synced-groups-committer.d.ts +4 -4
- package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-committer.js +7 -7
- package/dist/modules/access/synced-groups-committer.js.map +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts +6 -6
- package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
- package/dist/modules/access/user-access-removal.service.js +4 -4
- package/dist/modules/access/user-access-removal.service.js.map +1 -1
- package/dist/modules/access-model/access-errors.d.ts +4 -4
- package/dist/modules/access-model/access-errors.d.ts.map +1 -1
- package/dist/modules/access-model/access-errors.js +4 -4
- package/dist/modules/access-model/access-errors.js.map +1 -1
- package/dist/modules/access-model/access-grammar.d.ts +1 -1
- package/dist/modules/access-model/access-grammar.js +4 -4
- package/dist/modules/access-model/change-gate.d.ts +1 -1
- package/dist/modules/access-model/change-gate.js +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts +4 -4
- package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.js +4 -4
- package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.d.ts +19 -14
- package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.js +42 -18
- package/dist/modules/agent-guide/agent-guide.js.map +1 -1
- package/dist/modules/agent-guide/guide-budget.d.ts +5 -2
- package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -1
- package/dist/modules/agent-guide/guide-budget.js +6 -2
- package/dist/modules/agent-guide/guide-budget.js.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +12 -5
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.js +13 -6
- package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
- package/dist/modules/agent-instructions/compose.d.ts +15 -8
- package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
- package/dist/modules/agent-instructions/compose.js +24 -10
- package/dist/modules/agent-instructions/compose.js.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.d.ts +14 -6
- package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.js +51 -11
- package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
- package/dist/modules/auth/account-erasure.service.d.ts +36 -7
- package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
- package/dist/modules/auth/account-erasure.service.js +30 -10
- package/dist/modules/auth/account-erasure.service.js.map +1 -1
- package/dist/modules/auth/account-hooks.d.ts +20 -0
- package/dist/modules/auth/account-hooks.d.ts.map +1 -1
- package/dist/modules/auth/account-hooks.js +10 -0
- package/dist/modules/auth/account-hooks.js.map +1 -1
- package/dist/modules/auth/account-switch-lock.js +2 -2
- package/dist/modules/auth/account-switch-lock.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts +7 -2
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +23 -4
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +1 -1
- package/dist/modules/auth/auth.service.js +4 -4
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/index.d.ts +1 -0
- package/dist/modules/auth/index.d.ts.map +1 -1
- package/dist/modules/database/core-schema.js +2 -2
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/diff/diff.routes.d.ts +3 -3
- package/dist/modules/diff/diff.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.js +7 -7
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/embed/embed.routes.js +1 -1
- package/dist/modules/embed/embed.routes.js.map +1 -1
- package/dist/modules/embed/embed.service.d.ts +4 -4
- package/dist/modules/embed/embed.service.d.ts.map +1 -1
- package/dist/modules/embed/embed.service.js +18 -18
- package/dist/modules/embed/embed.service.js.map +1 -1
- package/dist/modules/kb-fs/branch-name.js +8 -8
- package/dist/modules/kb-fs/branch-name.js.map +1 -1
- package/dist/modules/kb-fs/file-change-notifier.d.ts +2 -2
- package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -9
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +27 -27
- package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/repo-path.js +5 -5
- package/dist/modules/kb-fs/repo-path.js.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
- package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.js +2 -2
- package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
- package/dist/modules/kb-sync/index.d.ts +1 -1
- package/dist/modules/kb-sync/index.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js +10 -10
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +11 -4
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +75 -19
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
- package/dist/modules/onboarding/onboarding.routes.js +2 -2
- package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.d.ts +4 -4
- package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.js +4 -4
- package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.js +7 -7
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
- package/dist/modules/plugins/join-requests.service.d.ts +3 -3
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +5 -5
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.js +1 -1
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +2 -2
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +8 -8
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +77 -2
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js +479 -53
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +2 -1
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js +1 -0
- package/dist/modules/secrets-vault/index.js.map +1 -1
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +152 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +125 -10
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
- package/dist/modules/settings/connection-check.js +1 -1
- package/dist/modules/settings/connection-check.js.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +1 -1
- package/dist/modules/settings/git-root-folders.js +1 -1
- package/dist/modules/settings/git-root-folders.js.map +1 -1
- package/dist/modules/settings/setup.routes.d.ts +1 -1
- package/dist/modules/settings/setup.routes.js +1 -1
- package/dist/modules/skills/pending-skills.service.d.ts +3 -3
- package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
- package/dist/modules/skills/pending-skills.service.js +4 -4
- package/dist/modules/skills/pending-skills.service.js.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +5 -5
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
- package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +2 -2
- package/dist/modules/tool-helpers/tool-context.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +2 -2
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
- package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
- package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +43 -3
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +6 -0
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +51 -5
- 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 +36 -15
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
- package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
- package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +31 -31
- package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
- package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
- package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-hooks.js.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
- package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
- package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
- package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
- package/dist/modules/version-control/event-bus.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
- package/dist/modules/version-control/event-bus.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
- package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
- package/dist/modules/version-control/events-delivery.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
- package/dist/modules/version-control/events.routes.d.ts.map +1 -0
- package/dist/modules/version-control/events.routes.js.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
- package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
- package/dist/modules/version-control/file-lock.service.js.map +1 -0
- package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
- package/dist/modules/version-control/git/change-request-link.js.map +1 -0
- package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
- package/dist/modules/version-control/git/git-version.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.d.ts +8 -8
- package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.js +53 -53
- package/dist/modules/version-control/git/git.service.js.map +1 -0
- package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
- package/dist/modules/version-control/git/merge-commit.js.map +1 -0
- package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
- package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
- package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
- package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
- package/dist/modules/version-control/index.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/index.js +3 -2
- package/dist/modules/version-control/index.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
- package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
- package/dist/modules/version-control/pending-commits.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
- package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
- package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
- package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
- package/dist/modules/version-control/read-on-branch.js.map +1 -0
- package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
- package/dist/modules/version-control/recovery-bot.js.map +1 -0
- package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
- package/dist/modules/version-control/sanitize-error.js.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +4 -4
- package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +3 -3
- package/dist/modules/version-control/version-control-hooks.js.map +1 -0
- package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
- package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
- package/dist/modules/version-control/version-control.routes.js.map +1 -0
- package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -31
- package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +89 -94
- package/dist/modules/version-control/version-control.service.js.map +1 -0
- package/dist/modules/workspace/agent-access.gate.d.ts +5 -5
- package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
- package/dist/modules/workspace/agent-access.gate.js +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
- package/dist/modules/workspace/git-internals.middleware.js +2 -2
- package/dist/modules/workspace/kb-repository.js +1 -1
- package/dist/modules/workspace/kb-repository.js.map +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-git.js +1 -1
- package/dist/modules/workspace/startup/kb-git.js.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
- package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.js +8 -5
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
- package/dist/modules/workspace/workspace-tmp.js +3 -3
- package/dist/modules/workspace/workspace-tmp.js.map +1 -1
- package/dist/modules/workspace/workspace.routes.d.ts +4 -4
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +22 -22
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +6 -6
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +11 -11
- 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 +15 -10
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/shared/canonical-file-identity.d.ts +2 -2
- package/dist/shared/canonical-file-identity.js +5 -5
- package/dist/shared/canonical-file-identity.js.map +1 -1
- package/dist/shared/domain-errors.d.ts +39 -39
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +44 -44
- package/dist/shared/domain-errors.js.map +1 -1
- package/dist/shared/git.contract.d.ts +1 -1
- package/dist/shared/git.contract.js +1 -1
- package/dist/shared/http-errors.d.ts +3 -3
- package/dist/shared/http-errors.d.ts.map +1 -1
- package/dist/shared/http-errors.js +1 -1
- package/dist/shared/http-errors.js.map +1 -1
- package/dist/shared/pending-proposals.d.ts +3 -3
- package/dist/shared/pending-proposals.d.ts.map +1 -1
- package/dist/shared/pending-proposals.js +2 -2
- package/dist/shared/pending-proposals.js.map +1 -1
- package/dist/tenancy/static-tenant-source.js +1 -1
- package/dist/tenancy/static-tenant-source.js.map +1 -1
- package/migrations/0012_agent_audit.sql +40 -40
- package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
- package/migrations/meta/0012_snapshot.json +2246 -2246
- package/migrations/meta/0013_snapshot.json +2258 -2258
- package/package.json +4 -4
- package/src/__tests__/account-admin.ts +27 -0
- package/src/__tests__/hexis-catalog.ts +4 -4
- package/src/__tests__/kb-context.ts +30 -30
- package/src/__tests__/kb-layout-config.test.ts +21 -0
- package/src/__tests__/open-change-gate.ts +1 -1
- package/src/__tests__/tool-handler.ts +15 -0
- package/src/__tests__/tool-wiring.ts +10 -4
- package/src/__tests__/workspace-service.ts +1 -1
- package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
- package/src/core/__tests__/compose-embed.test.ts +1 -1
- package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
- package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
- package/src/core/__tests__/gated-boot.test.ts +2 -2
- package/src/core/__tests__/lifecycle.test.ts +9 -9
- package/src/core/catalog-cache-invalidation.ts +2 -2
- package/src/core/compose-embed.ts +3 -3
- package/src/core/core-ports.ts +19 -4
- package/src/core/create-core-server.ts +39 -25
- package/src/core/create-core-services.ts +79 -63
- package/src/core/lifecycle.ts +9 -9
- package/src/core-config.ts +3 -3
- package/src/index.ts +5 -5
- package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
- package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
- package/src/modules/access/__tests__/access-requests.routes.test.ts +20 -20
- package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
- package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +3 -3
- package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
- package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
- package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
- package/src/modules/access/__tests__/groups-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
- package/src/modules/access/__tests__/roles-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/roles-capabilities.test.ts +19 -19
- package/src/modules/access/__tests__/roles.routes.test.ts +6 -6
- package/src/modules/access/__tests__/synced-groups-committer.test.ts +13 -13
- package/src/modules/access/__tests__/user-access-removal.service.test.ts +29 -29
- package/src/modules/access/access-control.service.ts +1 -1
- package/src/modules/access/access-declarations.ts +2 -2
- package/src/modules/access/access-mutation.service.ts +2 -2
- package/src/modules/access/access-requests.routes.ts +7 -7
- package/src/modules/access/access-requests.service.ts +13 -13
- package/src/modules/access/access.routes.ts +11 -11
- package/src/modules/access/admin-locked-commit.ts +11 -11
- package/src/modules/access/admin-route-helpers.ts +5 -5
- package/src/modules/access/change-read-gate.ts +1 -1
- package/src/modules/access/groups-admin.service.ts +7 -7
- package/src/modules/access/reference-scan.ts +1 -1
- package/src/modules/access/roles-admin.service.ts +9 -9
- package/src/modules/access/synced-groups-committer.ts +11 -11
- package/src/modules/access/user-access-removal.service.ts +7 -7
- package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
- package/src/modules/access-model/access-errors.ts +4 -4
- package/src/modules/access-model/access-grammar.ts +4 -4
- package/src/modules/access-model/change-gate.ts +1 -1
- package/src/modules/access-model/roles-yaml-guard.ts +4 -4
- package/src/modules/agent-guide/__tests__/agent-guide.test.ts +19 -4
- package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +1 -1
- package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +2 -2
- package/src/modules/agent-guide/agent-guide.ts +48 -22
- package/src/modules/agent-guide/guide-budget.ts +6 -2
- package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
- package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
- package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +113 -7
- package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
- package/src/modules/agent-instructions/compose.ts +24 -9
- package/src/modules/agent-instructions/shared-file-rules.ts +53 -11
- package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
- package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
- package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
- package/src/modules/audit/event-classifier.ts +155 -155
- package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
- package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
- package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
- package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
- package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
- package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
- package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
- package/src/modules/auth/account-erasure.service.ts +27 -9
- package/src/modules/auth/account-hooks.ts +34 -0
- package/src/modules/auth/account-switch-lock.ts +2 -2
- package/src/modules/auth/account.routes.ts +23 -5
- package/src/modules/auth/auth.service.ts +4 -4
- package/src/modules/auth/index.ts +1 -0
- package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
- package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
- package/src/modules/database/core-schema.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
- package/src/modules/diff/diff.routes.ts +8 -8
- package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
- package/src/modules/embed/__tests__/embed.service.test.ts +42 -42
- package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
- package/src/modules/embed/embed.routes.ts +1 -1
- package/src/modules/embed/embed.service.ts +17 -17
- package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
- package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +260 -260
- package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +34 -34
- package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
- package/src/modules/kb-fs/branch-name.ts +8 -8
- package/src/modules/kb-fs/file-change-notifier.ts +2 -2
- package/src/modules/kb-fs/locking-filesystem.ts +30 -30
- package/src/modules/kb-fs/repo-path.ts +5 -5
- package/src/modules/kb-fs/tmp-ref.ts +3 -3
- package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
- package/src/modules/kb-sync/index.ts +1 -1
- package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
- package/src/modules/kb-sync/kb-sync.service.ts +9 -9
- package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
- package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
- package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
- package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
- package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
- package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
- package/src/modules/mcp/mcp.service.ts +89 -28
- package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +55 -55
- package/src/modules/onboarding/onboarding.contract.ts +1 -1
- package/src/modules/onboarding/onboarding.routes.ts +2 -2
- package/src/modules/onboarding/starter-pack.service.ts +6 -6
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
- package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
- package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
- package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
- package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
- package/src/modules/plugins/__tests__/plugins.routes.test.ts +25 -25
- package/src/modules/plugins/join-request-jobs.service.ts +10 -10
- package/src/modules/plugins/join-requests.service.ts +4 -4
- package/src/modules/plugins/plugin-rename.service.ts +1 -1
- package/src/modules/plugins/plugins.routes.ts +9 -9
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +28 -1
- package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +562 -95
- package/src/modules/secrets-vault/index.ts +7 -0
- package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
- package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
- package/src/modules/secrets-vault/secrets-vault.contract.ts +152 -0
- package/src/modules/secrets-vault/secrets-vault.routes.ts +157 -10
- package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
- package/src/modules/settings/connection-check.ts +1 -1
- package/src/modules/settings/deployment-settings.service.ts +1 -1
- package/src/modules/settings/git-root-folders.ts +1 -1
- package/src/modules/settings/setup.routes.ts +1 -1
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
- package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
- package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
- package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
- package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
- package/src/modules/skills/pending-skills.service.ts +3 -3
- package/src/modules/skills/skill-access-requests.routes.ts +7 -7
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +4 -4
- package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
- package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
- package/src/modules/tool-helpers/tool-context.ts +6 -6
- package/src/modules/tool-helpers/tool-handler.ts +2 -2
- package/src/modules/tool-helpers/tool.contract.ts +4 -4
- package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
- package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +36 -1
- package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
- package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
- package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
- package/src/modules/tool-manuals/tool-manuals.contract.ts +41 -3
- package/src/modules/tool-manuals/tool-manuals.service.ts +53 -5
- package/src/modules/tool-manuals/tool-manuals.tools.ts +41 -15
- package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
- package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
- package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +6 -6
- package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
- package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
- package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
- package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
- package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
- package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
- package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.fork-point-file.test.ts → version-control/__tests__/version-control.routes.fork-point-file.test.ts} +19 -19
- package/src/modules/{workflow/__tests__/workflow.routes.history-read-gate.test.ts → version-control/__tests__/version-control.routes.history-read-gate.test.ts} +13 -13
- package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.open-change-request.test.ts → version-control/__tests__/version-control.routes.open-change-request.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.branch-in-use.test.ts → version-control/__tests__/version-control.service.branch-in-use.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts → version-control/__tests__/version-control.service.deleted-branch-sweep.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +97 -99
- package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
- package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +42 -42
- package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.pg.test.ts → version-control/__tests__/version-control.service.update-change-request.pg.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.test.ts → version-control/__tests__/version-control.service.update-change-request.test.ts} +11 -11
- package/src/modules/{workflow/__tests__/workflow.service.update-from-target.test.ts → version-control/__tests__/version-control.service.update-from-target.test.ts} +22 -22
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
- package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
- package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
- package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +30 -30
- package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
- package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
- package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
- package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
- package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
- package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
- package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +20 -20
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/git.service.ts +57 -57
- package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
- package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
- package/src/modules/{workflow → version-control}/index.ts +6 -5
- package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
- package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
- package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
- package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +3 -3
- package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
- package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +92 -97
- package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
- package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
- package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
- package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
- package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
- package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
- package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
- package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
- package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +5 -5
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +27 -27
- package/src/modules/workspace/agent-access.gate.ts +5 -5
- package/src/modules/workspace/git-internals.middleware.ts +2 -2
- package/src/modules/workspace/kb-repository.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
- package/src/modules/workspace/startup/kb-git.ts +1 -1
- package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
- package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
- package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
- package/src/modules/workspace/startup/steps/template-source.ts +21 -6
- package/src/modules/workspace/workspace-tmp.ts +4 -4
- package/src/modules/workspace/workspace.routes.ts +26 -26
- package/src/modules/workspace/workspace.service.ts +11 -11
- package/src/modules/workspace/workspace.tools.ts +17 -10
- package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
- package/src/shared/__tests__/http-errors.test.ts +4 -4
- package/src/shared/canonical-file-identity.ts +5 -5
- package/src/shared/domain-errors.ts +44 -44
- package/src/shared/git.contract.ts +1 -1
- package/src/shared/http-errors.ts +3 -3
- package/src/shared/kb-context.ts +130 -130
- package/src/shared/pending-proposals.ts +4 -4
- package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
- package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
- package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
- package/src/tenancy/index.ts +35 -35
- package/src/tenancy/static-tenant-source.ts +1 -1
- package/src/tenancy/tenant-host.ts +261 -261
- package/src/tenancy/tenant-runtime.ts +208 -208
- package/src/tenancy/tenant-source.contract.ts +59 -59
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
- package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/change-request-hooks.js.map +0 -1
- package/dist/modules/workflow/event-bus.d.ts.map +0 -1
- package/dist/modules/workflow/event-bus.js.map +0 -1
- package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
- package/dist/modules/workflow/events-delivery.js.map +0 -1
- package/dist/modules/workflow/events.routes.d.ts.map +0 -1
- package/dist/modules/workflow/events.routes.js.map +0 -1
- package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
- package/dist/modules/workflow/file-lock.service.js.map +0 -1
- package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
- package/dist/modules/workflow/git/change-request-link.js.map +0 -1
- package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
- package/dist/modules/workflow/git/git-version.js.map +0 -1
- package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/git.service.js.map +0 -1
- package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
- package/dist/modules/workflow/git/merge-commit.js.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
- package/dist/modules/workflow/index.d.ts.map +0 -1
- package/dist/modules/workflow/index.js.map +0 -1
- package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.service.js.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
- package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
- package/dist/modules/workflow/read-on-branch.js.map +0 -1
- package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
- package/dist/modules/workflow/recovery-bot.js.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
- package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
- package/dist/modules/workflow/sanitize-error.js.map +0 -1
- package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/workflow-hooks.js.map +0 -1
- package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.routes.js.map +0 -1
- package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.service.js.map +0 -1
- package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
- /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
- /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
- /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
- /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
- /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
- /package/src/modules/{workflow → version-control}/sanitize-error.ts +0 -0
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* the time the validator runs. `WorkspaceService.withPathTurn` runs the
|
|
24
24
|
* same check first (via the shared `assertValidRelativePath`) and its
|
|
25
25
|
* `Invalid path: ...` message is what `workspace.routes.sendError` turns
|
|
26
|
-
* into a 400. Same message here, raised as a 400 `
|
|
26
|
+
* into a 400. Same message here, raised as a 400 `VersionControlValidationError`.
|
|
27
27
|
* 2. Containment. `withPathTurn` then resolves the path against the
|
|
28
28
|
* workspace directory and refuses anything landing outside it, which
|
|
29
29
|
* `sendError` turns into a 403. Step 1 has already rejected every `..`,
|
|
@@ -52,13 +52,13 @@
|
|
|
52
52
|
*/
|
|
53
53
|
|
|
54
54
|
import { canonicalRelativePath, validateRelativePath } from '@bevel-software/platform-shared';
|
|
55
|
-
import { PathTraversalError,
|
|
55
|
+
import { PathTraversalError, VersionControlValidationError } from './domain-errors.js';
|
|
56
56
|
|
|
57
57
|
/**
|
|
58
58
|
* The canonical spelling of `targetPath`, or a throw carrying the status the
|
|
59
59
|
* file verbs answer with for that same input.
|
|
60
60
|
*
|
|
61
|
-
* @throws {
|
|
61
|
+
* @throws {VersionControlValidationError} 400, when the path is not a usable
|
|
62
62
|
* workspace-relative path (not a string at all, a `.` or `..` segment, a
|
|
63
63
|
* backslash, empty).
|
|
64
64
|
* @throws {PathTraversalError} 403, when the path resolves outside the
|
|
@@ -74,11 +74,11 @@ export function canonicalFileIdentity(targetPath: string): string {
|
|
|
74
74
|
// answers. The message is the validator's own for a non-string, so the two
|
|
75
75
|
// 400s read identically as well.
|
|
76
76
|
if (typeof targetPath !== 'string') {
|
|
77
|
-
throw new
|
|
77
|
+
throw new VersionControlValidationError('Invalid path: Path is required');
|
|
78
78
|
}
|
|
79
79
|
const canonical = canonicalRelativePath(targetPath);
|
|
80
80
|
const reason = validateRelativePath(canonical);
|
|
81
|
-
if (reason) throw new
|
|
81
|
+
if (reason) throw new VersionControlValidationError(`Invalid path: ${reason}`);
|
|
82
82
|
// `validateRelativePath` ACCEPTS `/workspace/a.md` (its leading empty
|
|
83
83
|
// segment is filtered out, leaving two ordinary segments), so absolute is
|
|
84
84
|
// refused here, on its own terms: a workspace-relative path is never
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* raised by the
|
|
2
|
+
* Version-control domain errors. This is the single source of truth — every error
|
|
3
|
+
* raised by the version-control domain (branches, changes, change requests, access
|
|
4
4
|
* control, locks) lives here. Route handlers shape responses via the
|
|
5
5
|
* `.status` + `.payload` contract on the base class.
|
|
6
6
|
*
|
|
7
|
-
* Lives in `src/shared` (not `modules/
|
|
7
|
+
* Lives in `src/shared` (not `modules/version-control`) because the classes are
|
|
8
8
|
* consumed across module boundaries — access, diff, plugins and workspace all
|
|
9
9
|
* catch or raise them — and `src/shared` is the layer with no module imports.
|
|
10
10
|
* Only a type from `@bevel-software/platform-shared` comes in; nothing else.
|
|
11
11
|
*
|
|
12
|
-
* Naming: classes use
|
|
13
|
-
* abstract base; specific subclasses describe the
|
|
12
|
+
* Naming: classes use version-control vocabulary. `VersionControlDomainError` is the
|
|
13
|
+
* abstract base; specific subclasses describe the version-control concept that
|
|
14
14
|
* went wrong (`BranchNameError`, `ProtectedBranchError`, etc.). Where a
|
|
15
|
-
* concept is purely git mechanics with no
|
|
15
|
+
* concept is purely git mechanics with no version-control analogue
|
|
16
16
|
* (`NoSharedHistoryError`), the name keeps its git flavour because
|
|
17
17
|
* consumers actually need to discriminate on it.
|
|
18
18
|
*/
|
|
@@ -20,25 +20,25 @@
|
|
|
20
20
|
import type { ValidationReport } from '@bevel-software/platform-shared';
|
|
21
21
|
import { sanitizedPath } from './printable.js';
|
|
22
22
|
|
|
23
|
-
export class
|
|
23
|
+
export class VersionControlDomainError extends Error {
|
|
24
24
|
readonly status: number;
|
|
25
25
|
readonly payload?: Record<string, unknown>;
|
|
26
26
|
constructor(message: string, status: number, payload?: Record<string, unknown>) {
|
|
27
27
|
super(message);
|
|
28
|
-
this.name = '
|
|
28
|
+
this.name = 'VersionControlDomainError';
|
|
29
29
|
this.status = status;
|
|
30
30
|
this.payload = payload;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
export class BranchNameError extends
|
|
34
|
+
export class BranchNameError extends VersionControlDomainError {
|
|
35
35
|
constructor(reason: string, readonly branchName: string) {
|
|
36
36
|
super(`Invalid branch name "${branchName}": ${reason}`, 400);
|
|
37
37
|
this.name = 'BranchNameError';
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
export class ProtectedBranchError extends
|
|
41
|
+
export class ProtectedBranchError extends VersionControlDomainError {
|
|
42
42
|
constructor(readonly branchName: string, readonly action: string) {
|
|
43
43
|
super(`Branch "${branchName}" is protected — ${action} is not allowed.`, 403);
|
|
44
44
|
this.name = 'ProtectedBranchError';
|
|
@@ -56,7 +56,7 @@ export class ProtectedBranchError extends WorkflowDomainError {
|
|
|
56
56
|
* the only way for someone else to delete a non-author's branch is to push
|
|
57
57
|
* the delete via git CLI directly.
|
|
58
58
|
*/
|
|
59
|
-
export class BranchAuthorshipError extends
|
|
59
|
+
export class BranchAuthorshipError extends VersionControlDomainError {
|
|
60
60
|
readonly kind = 'branch-authorship' as const;
|
|
61
61
|
constructor(readonly branchName: string) {
|
|
62
62
|
super(
|
|
@@ -69,7 +69,7 @@ export class BranchAuthorshipError extends WorkflowDomainError {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
// `DirtyWorkingTreeError` removed: under save=share + per-branch workspaces
|
|
72
|
-
// no operation in the
|
|
72
|
+
// no operation in the version-control can legitimately encounter a dirty working
|
|
73
73
|
// tree. The two former callers (`switchBranch` and `mergeFromOrigin`'s
|
|
74
74
|
// pre-flight) are gone / relaxed; if a dirty tree ever shows up it's an
|
|
75
75
|
// internal bug that gets server-side-logged in `statusInternal`, never
|
|
@@ -83,7 +83,7 @@ export class BranchAuthorshipError extends WorkflowDomainError {
|
|
|
83
83
|
* rebase conflicts.
|
|
84
84
|
*
|
|
85
85
|
* Per the "disk is the source of truth" rule we do NOT auto-force-push
|
|
86
|
-
* from the
|
|
86
|
+
* from the version-control layer (that's a destructive history rewrite that can
|
|
87
87
|
* lose teammate work irrecoverably). Instead we surface this structured
|
|
88
88
|
* error so the frontend can seed an agent prompt — the agent has git + gh
|
|
89
89
|
* CLI access plus the lock-aware write tool, so it can read both sides,
|
|
@@ -101,7 +101,7 @@ export class BranchAuthorshipError extends WorkflowDomainError {
|
|
|
101
101
|
* The payload carries enough context that the prompt builder can phrase
|
|
102
102
|
* the resolution request to the agent without further server round-trips.
|
|
103
103
|
*/
|
|
104
|
-
export class PushNeedsAgentResolutionError extends
|
|
104
|
+
export class PushNeedsAgentResolutionError extends VersionControlDomainError {
|
|
105
105
|
readonly kind = 'push-needs-resolution' as const;
|
|
106
106
|
constructor(
|
|
107
107
|
readonly branch: string,
|
|
@@ -143,7 +143,7 @@ export class PushNeedsAgentResolutionError extends WorkflowDomainError {
|
|
|
143
143
|
* `detail` is the raw git failure, for the server log only; it never enters
|
|
144
144
|
* the message or the payload.
|
|
145
145
|
*/
|
|
146
|
-
export class BranchDeleteRefusedError extends
|
|
146
|
+
export class BranchDeleteRefusedError extends VersionControlDomainError {
|
|
147
147
|
readonly kind = 'branch-delete-refused' as const;
|
|
148
148
|
constructor(readonly branchName: string, readonly detail: string) {
|
|
149
149
|
super(
|
|
@@ -166,7 +166,7 @@ export class BranchDeleteRefusedError extends WorkflowDomainError {
|
|
|
166
166
|
* conflict, and the local commits (someone's saved content, under
|
|
167
167
|
* save=share) stay unshared until the divergence is reconciled. The service
|
|
168
168
|
* layer therefore reacts by queueing a background recovery run (see
|
|
169
|
-
* `
|
|
169
|
+
* `VersionControlService.updateFromRemote`); this error tells the caller what
|
|
170
170
|
* happened and which paths are contested.
|
|
171
171
|
*
|
|
172
172
|
* 409 like the other conflict errors — the operation needs the divergence
|
|
@@ -174,7 +174,7 @@ export class BranchDeleteRefusedError extends WorkflowDomainError {
|
|
|
174
174
|
* credential-redacted by `GitService.git`) is kept OFF the payload; it's for
|
|
175
175
|
* server logs and the recovery pipeline, not the client.
|
|
176
176
|
*/
|
|
177
|
-
export class PullRebaseConflictError extends
|
|
177
|
+
export class PullRebaseConflictError extends VersionControlDomainError {
|
|
178
178
|
readonly kind = 'pull-rebase-conflict' as const;
|
|
179
179
|
constructor(
|
|
180
180
|
readonly branch: string,
|
|
@@ -223,7 +223,7 @@ export const BRANCH_REQUIRED_MESSAGE =
|
|
|
223
223
|
* 400 with kind `branch-required`, so a client tells it apart from the 404
|
|
224
224
|
* (no such branch) and the 410 (the branch was deleted) without reading prose.
|
|
225
225
|
*/
|
|
226
|
-
export class BranchRequiredError extends
|
|
226
|
+
export class BranchRequiredError extends VersionControlDomainError {
|
|
227
227
|
readonly kind = 'branch-required' as const;
|
|
228
228
|
constructor() {
|
|
229
229
|
super(BRANCH_REQUIRED_MESSAGE, 400, { kind: 'branch-required' });
|
|
@@ -273,7 +273,7 @@ export function branchProvided(branch: unknown): branch is string {
|
|
|
273
273
|
* once did. 404, and the message names the branch and nothing else: no git
|
|
274
274
|
* output, no remote URL.
|
|
275
275
|
*/
|
|
276
|
-
export class BranchNotFoundError extends
|
|
276
|
+
export class BranchNotFoundError extends VersionControlDomainError {
|
|
277
277
|
readonly kind = 'branch-not-found' as const;
|
|
278
278
|
constructor(readonly branch: string) {
|
|
279
279
|
super(`There is no branch named ${branch}.`, 404, {
|
|
@@ -291,7 +291,7 @@ export class BranchNotFoundError extends WorkflowDomainError {
|
|
|
291
291
|
* misdescribe the call — the caller did nothing wrong, the deployment is not
|
|
292
292
|
* set up. 503 with kind `default-branch-unset`; passing a branch works.
|
|
293
293
|
*/
|
|
294
|
-
export class DefaultBranchUnsetError extends
|
|
294
|
+
export class DefaultBranchUnsetError extends VersionControlDomainError {
|
|
295
295
|
readonly kind = 'default-branch-unset' as const;
|
|
296
296
|
constructor() {
|
|
297
297
|
super('This deployment has no default branch configured: pass `branch` to name the one to use.', 503, {
|
|
@@ -312,7 +312,7 @@ export class DefaultBranchUnsetError extends WorkflowDomainError {
|
|
|
312
312
|
* `BranchNotFoundError` — see `WorkspaceService.hasHeardOfBranch`. A sync
|
|
313
313
|
* always has the clone in hand, so it is always this one.
|
|
314
314
|
*/
|
|
315
|
-
export class RemoteBranchGoneError extends
|
|
315
|
+
export class RemoteBranchGoneError extends VersionControlDomainError {
|
|
316
316
|
readonly kind = 'remote-branch-gone' as const;
|
|
317
317
|
constructor(readonly branch: string) {
|
|
318
318
|
super(`Branch "${branch}" no longer exists on the remote.`, 410, {
|
|
@@ -345,11 +345,11 @@ export function isMissingRemoteBranchFailure(message: string): boolean {
|
|
|
345
345
|
* `WorkspaceService.assertWithinWorkspace` throws a bare `Error` with this
|
|
346
346
|
* text and `workspace.routes.sendError` maps that text to 403. The lock
|
|
347
347
|
* service raises this instead of a bare `Error`, because `toHttpError` on the
|
|
348
|
-
*
|
|
348
|
+
* version-control routes reads the status off the class and would otherwise call it
|
|
349
349
|
* a 500. Both surfaces then answer identically for the same input. See
|
|
350
350
|
* `canonicalFileIdentity`.
|
|
351
351
|
*/
|
|
352
|
-
export class PathTraversalError extends
|
|
352
|
+
export class PathTraversalError extends VersionControlDomainError {
|
|
353
353
|
readonly kind = 'path-traversal' as const;
|
|
354
354
|
constructor() {
|
|
355
355
|
super('Path traversal detected', 403, { kind: 'path-traversal' });
|
|
@@ -365,7 +365,7 @@ export class PathTraversalError extends WorkflowDomainError {
|
|
|
365
365
|
*/
|
|
366
366
|
export const GIT_INTERNALS_MESSAGE = "That path is inside the repository's internal git data and is not available.";
|
|
367
367
|
|
|
368
|
-
export class GitInternalsError extends
|
|
368
|
+
export class GitInternalsError extends VersionControlDomainError {
|
|
369
369
|
readonly kind = 'git-internals' as const;
|
|
370
370
|
constructor() {
|
|
371
371
|
super(GIT_INTERNALS_MESSAGE, 403, { kind: 'git-internals' });
|
|
@@ -374,15 +374,15 @@ export class GitInternalsError extends WorkflowDomainError {
|
|
|
374
374
|
}
|
|
375
375
|
|
|
376
376
|
/**
|
|
377
|
-
* Generic 400 for
|
|
377
|
+
* Generic 400 for version-control-input validation (malformed branch names, missing
|
|
378
378
|
* fields, etc.). Carries an optional payload so callers can attach typed
|
|
379
379
|
* discriminators (`kind: '...'`) when the frontend needs to switch on the
|
|
380
380
|
* specific failure mode.
|
|
381
381
|
*/
|
|
382
|
-
export class
|
|
382
|
+
export class VersionControlValidationError extends VersionControlDomainError {
|
|
383
383
|
constructor(message: string, payload?: Record<string, unknown>) {
|
|
384
384
|
super(message, 400, payload);
|
|
385
|
-
this.name = '
|
|
385
|
+
this.name = 'VersionControlValidationError';
|
|
386
386
|
}
|
|
387
387
|
}
|
|
388
388
|
|
|
@@ -407,7 +407,7 @@ export type BranchDeleteBlockedReason =
|
|
|
407
407
|
| 'saves-landing'
|
|
408
408
|
| 'state-unconfirmed';
|
|
409
409
|
|
|
410
|
-
export class BranchDeleteBlockedError extends
|
|
410
|
+
export class BranchDeleteBlockedError extends VersionControlDomainError {
|
|
411
411
|
readonly kind = 'branch-delete-blocked' as const;
|
|
412
412
|
constructor(
|
|
413
413
|
readonly reason: BranchDeleteBlockedReason,
|
|
@@ -435,7 +435,7 @@ export class BranchDeleteBlockedError extends WorkflowDomainError {
|
|
|
435
435
|
* because it never mends: a reader may remember it, where a commit the clone
|
|
436
436
|
* merely does not hold yet must be asked for again after the next fetch.
|
|
437
437
|
*/
|
|
438
|
-
export class AppliedChangeMismatchError extends
|
|
438
|
+
export class AppliedChangeMismatchError extends VersionControlValidationError {
|
|
439
439
|
constructor(message: string, payload?: Record<string, unknown>) {
|
|
440
440
|
super(message, payload);
|
|
441
441
|
this.name = 'AppliedChangeMismatchError';
|
|
@@ -473,7 +473,7 @@ export const NOT_FOUND_NEXT_STEP = 'Check the path with list_files.';
|
|
|
473
473
|
* Sanitizing the path and appending the next step in the constructor is what
|
|
474
474
|
* makes those two answers the same answer.
|
|
475
475
|
*/
|
|
476
|
-
export class PathNotFoundError extends
|
|
476
|
+
export class PathNotFoundError extends VersionControlDomainError {
|
|
477
477
|
readonly kind = 'not_found' as const;
|
|
478
478
|
/** The requested path, sanitized — never the path on disk. */
|
|
479
479
|
readonly path: string;
|
|
@@ -512,7 +512,7 @@ export const VERSION_NOT_ON_BRANCH_MESSAGE =
|
|
|
512
512
|
* into an oracle for "does this commit exist in the repository", which is
|
|
513
513
|
* exactly the reading a branch-scoped rule exists to prevent.
|
|
514
514
|
*/
|
|
515
|
-
export class VersionNotOnBranchError extends
|
|
515
|
+
export class VersionNotOnBranchError extends VersionControlDomainError {
|
|
516
516
|
readonly kind = 'version-not-on-branch' as const;
|
|
517
517
|
constructor() {
|
|
518
518
|
super(VERSION_NOT_ON_BRANCH_MESSAGE, 404, { kind: 'version-not-on-branch' });
|
|
@@ -529,7 +529,7 @@ export class VersionNotOnBranchError extends WorkflowDomainError {
|
|
|
529
529
|
* file` prefix its message happens to start with, and a reworded message
|
|
530
530
|
* would silently have turned it into a 500.
|
|
531
531
|
*/
|
|
532
|
-
export class UnreadableArchiveError extends
|
|
532
|
+
export class UnreadableArchiveError extends VersionControlDomainError {
|
|
533
533
|
constructor(reason: string) {
|
|
534
534
|
super(`Could not read zip file: ${reason}`, 422, { kind: 'unreadable-archive' });
|
|
535
535
|
this.name = 'UnreadableArchiveError';
|
|
@@ -542,7 +542,7 @@ export class UnreadableArchiveError extends WorkflowDomainError {
|
|
|
542
542
|
* a structured payload so the frontend's typed-error parser can route into
|
|
543
543
|
* the agent recovery flow.
|
|
544
544
|
*/
|
|
545
|
-
export class NoSharedHistoryError extends
|
|
545
|
+
export class NoSharedHistoryError extends VersionControlDomainError {
|
|
546
546
|
readonly kind = 'no-shared-history' as const;
|
|
547
547
|
constructor(readonly head: string, readonly base: string) {
|
|
548
548
|
super(
|
|
@@ -561,7 +561,7 @@ export class NoSharedHistoryError extends WorkflowDomainError {
|
|
|
561
561
|
* carries the structured report so the UI / agent can render the items
|
|
562
562
|
* the user must fix without re-running the validator.
|
|
563
563
|
*/
|
|
564
|
-
export class ValidationFailedError extends
|
|
564
|
+
export class ValidationFailedError extends VersionControlDomainError {
|
|
565
565
|
readonly validation: ValidationReport;
|
|
566
566
|
constructor(report: ValidationReport) {
|
|
567
567
|
super(
|
|
@@ -581,26 +581,26 @@ export class ValidationFailedError extends WorkflowDomainError {
|
|
|
581
581
|
}
|
|
582
582
|
|
|
583
583
|
/**
|
|
584
|
-
* Method exists on the
|
|
584
|
+
* Method exists on the version-control interface but has no backing implementation
|
|
585
585
|
* yet. 501 so the frontend can light up "coming soon" affordances without
|
|
586
|
-
* confusing them with 5xx infra failures. `feature` is the
|
|
586
|
+
* confusing them with 5xx infra failures. `feature` is the version-control method
|
|
587
587
|
* name; clients switch on it to render targeted copy.
|
|
588
588
|
*/
|
|
589
|
-
export class
|
|
589
|
+
export class NotImplementedVersionControlError extends VersionControlDomainError {
|
|
590
590
|
readonly kind = 'not-implemented' as const;
|
|
591
591
|
constructor(readonly feature: string) {
|
|
592
592
|
super(
|
|
593
|
-
`
|
|
593
|
+
`Version-control feature "${feature}" is not yet implemented in this build.`,
|
|
594
594
|
501,
|
|
595
595
|
{ kind: 'not-implemented', feature },
|
|
596
596
|
);
|
|
597
|
-
this.name = '
|
|
597
|
+
this.name = 'NotImplementedVersionControlError';
|
|
598
598
|
}
|
|
599
599
|
}
|
|
600
600
|
|
|
601
601
|
/**
|
|
602
602
|
* Attempting to reconcile two branches (opening a change request, refreshing
|
|
603
|
-
* one from target, or executing a merge) hit conflicts that the
|
|
603
|
+
* one from target, or executing a merge) hit conflicts that the version-control service
|
|
604
604
|
* cannot auto-resolve. The structured payload carries the list of
|
|
605
605
|
* conflicting paths so the frontend / agent can route into the resolution
|
|
606
606
|
* flow without a second round-trip.
|
|
@@ -609,7 +609,7 @@ export class NotImplementedWorkflowError extends WorkflowDomainError {
|
|
|
609
609
|
* resolving + committing on the source branch) before the operation can
|
|
610
610
|
* succeed — same semantics git itself uses for merge conflicts.
|
|
611
611
|
*/
|
|
612
|
-
export class ChangeRequestConflictsError extends
|
|
612
|
+
export class ChangeRequestConflictsError extends VersionControlDomainError {
|
|
613
613
|
readonly kind = 'change-request-conflicts' as const;
|
|
614
614
|
constructor(
|
|
615
615
|
readonly sourceBranch: string,
|
|
@@ -637,7 +637,7 @@ export class ChangeRequestConflictsError extends WorkflowDomainError {
|
|
|
637
637
|
* waiting for a person to do: merge `sourceBranch` into `targetBranch`.
|
|
638
638
|
* Carries the request's number so the caller can point the person at it.
|
|
639
639
|
*/
|
|
640
|
-
export class OpenChangeRequestBlocksMergeError extends
|
|
640
|
+
export class OpenChangeRequestBlocksMergeError extends VersionControlDomainError {
|
|
641
641
|
readonly kind = 'open-change-request-blocks-merge' as const;
|
|
642
642
|
constructor(
|
|
643
643
|
readonly sourceBranch: string,
|
|
@@ -660,7 +660,7 @@ export class OpenChangeRequestBlocksMergeError extends WorkflowDomainError {
|
|
|
660
660
|
* the existing CR number so the UI / agent can deep-link to it instead of
|
|
661
661
|
* trying to recover.
|
|
662
662
|
*/
|
|
663
|
-
export class DuplicateChangeRequestError extends
|
|
663
|
+
export class DuplicateChangeRequestError extends VersionControlDomainError {
|
|
664
664
|
readonly kind = 'duplicate-change-request' as const;
|
|
665
665
|
constructor(
|
|
666
666
|
readonly sourceBranch: string,
|
|
@@ -690,7 +690,7 @@ export class DuplicateChangeRequestError extends WorkflowDomainError {
|
|
|
690
690
|
* rather than risk landing the CR's version on a protected branch. 502: the
|
|
691
691
|
* failure is an internal git/push hiccup, not the caller's fault.
|
|
692
692
|
*/
|
|
693
|
-
export class RolesYamlPreservationError extends
|
|
693
|
+
export class RolesYamlPreservationError extends VersionControlDomainError {
|
|
694
694
|
readonly kind = 'roles-yaml-preservation-failed' as const;
|
|
695
695
|
/**
|
|
696
696
|
* The underlying git/push failure. Kept OFF the client-facing message (which
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The contract for RUNNING git. Nothing here spawns anything — the one
|
|
3
|
-
* implementation is `NodeGitRunner` in `modules/
|
|
3
|
+
* implementation is `NodeGitRunner` in `modules/version-control/git`, wired once by
|
|
4
4
|
* the composition root and injected into every module that shells out to git,
|
|
5
5
|
* so no module carries an `execFile('git', …)` of its own.
|
|
6
6
|
*
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { VersionControlDomainError } from './domain-errors.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* THE response body for a domain refusal: the error's own message, plus
|
|
@@ -6,7 +6,7 @@ import type { WorkflowDomainError } from './domain-errors.js';
|
|
|
6
6
|
* rather than on the prose.
|
|
7
7
|
*
|
|
8
8
|
* The payload is an open `Record<string, unknown>` and deliberately stays
|
|
9
|
-
* that way — `
|
|
9
|
+
* that way — `VersionControlValidationError` takes one from its caller — so this
|
|
10
10
|
* lists no closed set. The discriminator to reach for is `kind`
|
|
11
11
|
* (`path-traversal`, `unreadable-archive`, `no-shared-history`, …), which
|
|
12
12
|
* most refusals carry; beside it they add whatever context that kind needs
|
|
@@ -30,7 +30,7 @@ import type { WorkflowDomainError } from './domain-errors.js';
|
|
|
30
30
|
* workspace routes surface `AccessConfigError`'s message because an admin
|
|
31
31
|
* has to read it — and those differ on purpose, not by drift.
|
|
32
32
|
*/
|
|
33
|
-
export function domainErrorBody(err:
|
|
33
|
+
export function domainErrorBody(err: VersionControlDomainError): Record<string, unknown> {
|
|
34
34
|
// Payload FIRST, `error` LAST: the message always wins.
|
|
35
35
|
return { ...(err.payload ?? {}), error: err.message };
|
|
36
36
|
}
|
package/src/shared/kb-context.ts
CHANGED
|
@@ -1,130 +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
|
+
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
|
+
}
|