@bevel-software/platform-core-backend 0.34.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/access-control.md +146 -300
- package/agent-guide/conventions.md +23 -25
- package/agent-guide/directory-structure.md +72 -120
- package/agent-guide/drafts-and-change-requests.md +92 -0
- package/agent-guide/for-git-users.md +47 -0
- package/agent-guide/glossary.md +36 -0
- package/agent-guide/how-agents-find-things.md +49 -0
- package/agent-guide/html-views.md +16 -11
- package/agent-guide/new-knowledge-base.md +9 -8
- package/agent-guide/onboarding.md +111 -0
- package/agent-guide/skills.md +67 -42
- package/agent-guide/start-here.md +66 -0
- package/agent-guide/tool-manuals.md +133 -154
- package/agent-guide/tools.md +67 -0
- package/agent-guide/where-a-new-file-goes.md +45 -28
- 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 +27 -25
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +25 -13
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +75 -60
- 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.interface.d.ts +22 -0
- package/dist/modules/access/access-control.interface.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +3 -1
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +76 -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 +32 -13
- 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/index.d.ts +1 -1
- package/dist/modules/access/index.d.ts.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 +63 -18
- package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.js +144 -30
- package/dist/modules/agent-guide/agent-guide.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.d.ts +6 -2
- package/dist/modules/agent-guide/agent-guide.tools.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.js +45 -31
- package/dist/modules/agent-guide/agent-guide.tools.js.map +1 -1
- package/dist/modules/agent-guide/guide-budget.d.ts +51 -0
- package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -0
- package/dist/modules/agent-guide/guide-budget.js +71 -0
- package/dist/modules/agent-guide/guide-budget.js.map +1 -0
- package/dist/modules/agent-guide/index.d.ts +2 -1
- package/dist/modules/agent-guide/index.d.ts.map +1 -1
- package/dist/modules/agent-guide/index.js +2 -1
- package/dist/modules/agent-guide/index.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 +28 -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 +60 -18
- 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/code-mode/code-mode.tool.js +2 -2
- package/dist/modules/code-mode/code-mode.tool.js.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.d.ts +0 -12
- package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.js +1 -38
- package/dist/modules/connection-probe/connection-probe.service.js.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 +80 -53
- 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 +87 -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 +635 -74
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +3 -2
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js +2 -1
- 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 +205 -11
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.contract.js +27 -0
- 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 +206 -45
- 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/oidc-check.d.ts.map +1 -1
- package/dist/modules/settings/oidc-check.js +5 -17
- package/dist/modules/settings/oidc-check.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/skills/skills.tools.js +1 -1
- package/dist/modules/skills/skills.tools.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-def.js +1 -1
- package/dist/modules/tool-helpers/tool-def.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-json-discovery.d.ts +7 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.js +69 -38
- package/dist/modules/tool-manuals/mcp-json-discovery.js.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 +70 -3
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +18 -8
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +166 -49
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +11 -2
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +66 -24
- 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} +53 -49
- 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 +6 -6
- package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
- package/dist/modules/workspace/agent-access.gate.js +2 -2
- package/dist/modules/workspace/agent-access.gate.js.map +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 +5 -3
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +85 -30
- 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/oauth-token-error.d.ts +23 -0
- package/dist/shared/oauth-token-error.d.ts.map +1 -0
- package/dist/shared/oauth-token-error.js +47 -0
- package/dist/shared/oauth-token-error.js.map +1 -0
- 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/shared/read-capped.d.ts +19 -0
- package/dist/shared/read-capped.d.ts.map +1 -0
- package/dist/shared/read-capped.js +45 -0
- package/dist/shared/read-capped.js.map +1 -0
- 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 +5 -4
- package/src/__tests__/account-admin.ts +27 -0
- package/src/__tests__/hexis-catalog.ts +144 -0
- 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__/real-disk.ts +21 -0
- package/src/__tests__/tokens.ts +19 -0
- package/src/__tests__/tool-handler.ts +15 -0
- package/src/__tests__/tool-manuals.ts +32 -0
- package/src/__tests__/tool-wiring.ts +31 -0
- 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/__tests__/oauth-sign-in-real-file.test.ts +179 -0
- 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 +40 -26
- package/src/core/create-core-services.ts +92 -66
- 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 +54 -14
- 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__/holder-changes.test.ts +127 -0
- 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.interface.ts +26 -0
- package/src/modules/access/access-control.service.ts +93 -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 +34 -15
- 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/index.ts +1 -1
- 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 +98 -29
- package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +39 -12
- package/src/modules/agent-guide/__tests__/guide-budget.test.ts +95 -0
- package/src/modules/agent-guide/__tests__/guide-eval.test.ts +182 -0
- package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +263 -0
- package/src/modules/agent-guide/__tests__/tool-surface.json +514 -0
- package/src/modules/agent-guide/__tests__/tool-surface.test.ts +75 -0
- package/src/modules/agent-guide/agent-guide.tools.ts +49 -31
- package/src/modules/agent-guide/agent-guide.ts +165 -32
- package/src/modules/agent-guide/guide-budget.ts +77 -0
- package/src/modules/agent-guide/index.ts +12 -0
- 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 +117 -11
- package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
- package/src/modules/agent-instructions/compose.ts +28 -9
- package/src/modules/agent-instructions/shared-file-rules.ts +62 -18
- 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/code-mode/code-mode.tool.ts +2 -2
- package/src/modules/connection-probe/__tests__/connection-probe.service.test.ts +5 -24
- package/src/modules/connection-probe/connection-probe.service.ts +1 -34
- 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 +93 -62
- 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 +458 -4
- package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
- package/src/modules/secrets-vault/__tests__/oauth-live-declaration.route.test.ts +218 -0
- package/src/modules/secrets-vault/__tests__/oauth-return-to.route.test.ts +39 -6
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +728 -118
- package/src/modules/secrets-vault/index.ts +8 -1
- 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 +213 -11
- package/src/modules/secrets-vault/secrets-vault.routes.ts +244 -45
- 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/oidc-check.ts +5 -18
- 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/skills/skills.tools.ts +1 -1
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +22 -14
- 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__/route-tool-schemas.catalog.test.ts +38 -0
- 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-def.ts +1 -1
- 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.mcp-oauth.test.ts +197 -11
- package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +132 -6
- package/src/modules/tool-manuals/mcp-json-discovery.ts +73 -34
- 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 +63 -3
- package/src/modules/tool-manuals/tool-manuals.service.ts +191 -51
- package/src/modules/tool-manuals/tool-manuals.tools.ts +93 -28
- 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 +12 -119
- 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} +52 -48
- 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 +12 -14
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +182 -75
- package/src/modules/workspace/agent-access.gate.ts +6 -6
- 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 +90 -30
- package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
- package/src/shared/__tests__/http-errors.test.ts +4 -4
- package/src/shared/__tests__/read-capped.test.ts +68 -0
- 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/oauth-token-error.ts +46 -0
- package/src/shared/pending-proposals.ts +4 -4
- package/src/shared/read-capped.ts +40 -0
- 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/agent-guide/finding-things.md +0 -7
- package/agent-guide/introduction.md +0 -27
- 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
|
@@ -20,16 +20,16 @@ import { mergeCommitSubject } from '../git/merge-commit.js';
|
|
|
20
20
|
import { redactSecret } from '../../../shared/redact-secret.js';
|
|
21
21
|
import {
|
|
22
22
|
ChangeRequestConflictsError,
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
VersionControlDomainError,
|
|
24
|
+
VersionControlValidationError,
|
|
25
25
|
} from '../../../shared/domain-errors.js';
|
|
26
26
|
import type { WorkspaceService } from '../../workspace/index.js';
|
|
27
27
|
import { canonicalEmail, hashEmail } from '../../../shared/email-identity.js';
|
|
28
28
|
import type {
|
|
29
|
-
|
|
29
|
+
IChangeRequestReviewService,
|
|
30
30
|
MergeGateInput,
|
|
31
31
|
MergeGateResult,
|
|
32
|
-
} from './review
|
|
32
|
+
} from './change-request-review.interface.js';
|
|
33
33
|
import {
|
|
34
34
|
APPROVAL_LOCK_TIMEOUT_MS,
|
|
35
35
|
isApprovalLockTimeout,
|
|
@@ -67,7 +67,7 @@ function redactTokens(msg: string, token: string | null | undefined): string {
|
|
|
67
67
|
* let go. Retryable BY THE CALLER, and said in words a business user can act
|
|
68
68
|
* on: nothing was written, and trying again is the whole fix.
|
|
69
69
|
*/
|
|
70
|
-
class ApprovalBusyError extends
|
|
70
|
+
class ApprovalBusyError extends VersionControlDomainError {
|
|
71
71
|
constructor() {
|
|
72
72
|
super(
|
|
73
73
|
'This change request is being updated right now — try that again in a moment.',
|
|
@@ -78,7 +78,7 @@ class ApprovalBusyError extends WorkflowDomainError {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
class MergeBlockedError extends
|
|
81
|
+
class MergeBlockedError extends VersionControlDomainError {
|
|
82
82
|
constructor(reasons: string[]) {
|
|
83
83
|
super(`Merge gate rejected: ${reasons.join('; ') || 'unknown'}`, 422, {
|
|
84
84
|
mergeBlockedReasons: reasons,
|
|
@@ -87,14 +87,14 @@ class MergeBlockedError extends WorkflowDomainError {
|
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
class MergeExecutionError extends
|
|
90
|
+
class MergeExecutionError extends VersionControlDomainError {
|
|
91
91
|
constructor(reason: string) {
|
|
92
92
|
super(`Merge failed: ${reason}`, 502);
|
|
93
93
|
this.name = 'MergeExecutionError';
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
class ApprovalAuthError extends
|
|
97
|
+
class ApprovalAuthError extends VersionControlDomainError {
|
|
98
98
|
constructor(reason: 'not-eligible' | 'no-eligible-approvers' | 'path-not-in-pr') {
|
|
99
99
|
const { status, msg } = {
|
|
100
100
|
'not-eligible': { status: 403, msg: "You don't have write access on this file's path" },
|
|
@@ -115,7 +115,7 @@ class ApprovalAuthError extends WorkflowDomainError {
|
|
|
115
115
|
* Signing in again makes a fresh account at the same address, and approvals
|
|
116
116
|
* made then are that new person's.
|
|
117
117
|
*/
|
|
118
|
-
class ApprovalAccountGoneError extends
|
|
118
|
+
class ApprovalAccountGoneError extends VersionControlDomainError {
|
|
119
119
|
constructor() {
|
|
120
120
|
super('This account no longer exists — sign in again to approve.', 401, {
|
|
121
121
|
kind: 'approval-account-erased',
|
|
@@ -124,7 +124,7 @@ class ApprovalAccountGoneError extends WorkflowDomainError {
|
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
class BypassAuthError extends
|
|
127
|
+
class BypassAuthError extends VersionControlDomainError {
|
|
128
128
|
constructor() {
|
|
129
129
|
super(
|
|
130
130
|
"Only admins can merge with bypass. You need write access to roles.yaml on the base branch to skip approval warnings.",
|
|
@@ -134,7 +134,7 @@ class BypassAuthError extends WorkflowDomainError {
|
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
class CancelStateError extends
|
|
137
|
+
class CancelStateError extends VersionControlDomainError {
|
|
138
138
|
constructor(reason: 'already-applied' | 'already-cancelled') {
|
|
139
139
|
const msg =
|
|
140
140
|
reason === 'already-applied'
|
|
@@ -145,7 +145,7 @@ class CancelStateError extends WorkflowDomainError {
|
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
class CancelAuthError extends
|
|
148
|
+
class CancelAuthError extends VersionControlDomainError {
|
|
149
149
|
constructor() {
|
|
150
150
|
super(
|
|
151
151
|
"You can't cancel this change request — that takes being its author, an admin, " +
|
|
@@ -158,7 +158,7 @@ class CancelAuthError extends WorkflowDomainError {
|
|
|
158
158
|
|
|
159
159
|
function assertValidPrNumber(n: number): void {
|
|
160
160
|
if (!Number.isInteger(n) || n <= 0) {
|
|
161
|
-
throw new
|
|
161
|
+
throw new VersionControlValidationError('PR number must be a positive integer');
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
164
|
|
|
@@ -236,13 +236,13 @@ function evaluateGateParts(input: MergeGateInput): { hardReasons: string[]; warn
|
|
|
236
236
|
|
|
237
237
|
function assertValidPath(p: unknown): asserts p is string | undefined {
|
|
238
238
|
if (p === undefined || p === null) return;
|
|
239
|
-
if (typeof p !== 'string') throw new
|
|
240
|
-
if (!p) throw new
|
|
241
|
-
if (p.length > 4096) throw new
|
|
242
|
-
if (p.includes('\0')) throw new
|
|
239
|
+
if (typeof p !== 'string') throw new VersionControlValidationError('path must be a string');
|
|
240
|
+
if (!p) throw new VersionControlValidationError('path, if provided, must be non-empty');
|
|
241
|
+
if (p.length > 4096) throw new VersionControlValidationError('path exceeds 4096 character limit');
|
|
242
|
+
if (p.includes('\0')) throw new VersionControlValidationError('path contains NUL');
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
export class
|
|
245
|
+
export class ChangeRequestReviewService implements IChangeRequestReviewService {
|
|
246
246
|
constructor(
|
|
247
247
|
private readonly db: Database,
|
|
248
248
|
private readonly accessControl: IAccessControl,
|
|
@@ -394,8 +394,8 @@ export class ReviewWorkflowService implements IReviewWorkflowService {
|
|
|
394
394
|
): Promise<FileApprovalState[]> {
|
|
395
395
|
assertValidPrNumber(prNumber);
|
|
396
396
|
assertValidPath(path);
|
|
397
|
-
if (!headSha) throw new
|
|
398
|
-
if (!baseBranch) throw new
|
|
397
|
+
if (!headSha) throw new VersionControlValidationError('head sha is required');
|
|
398
|
+
if (!baseBranch) throw new VersionControlValidationError('base branch is required');
|
|
399
399
|
|
|
400
400
|
if (!files.some((f) => f.path === path)) {
|
|
401
401
|
throw new ApprovalAuthError('path-not-in-pr');
|
|
@@ -513,9 +513,9 @@ export class ReviewWorkflowService implements IReviewWorkflowService {
|
|
|
513
513
|
opts: { bypass?: boolean } = {},
|
|
514
514
|
): Promise<MergePrResult> {
|
|
515
515
|
assertValidPrNumber(prNumber);
|
|
516
|
-
if (!headSha) throw new
|
|
517
|
-
if (!baseBranch) throw new
|
|
518
|
-
if (!workspaceId) throw new
|
|
516
|
+
if (!headSha) throw new VersionControlValidationError('head sha is required');
|
|
517
|
+
if (!baseBranch) throw new VersionControlValidationError('base branch is required');
|
|
518
|
+
if (!workspaceId) throw new VersionControlValidationError('workspace id is required');
|
|
519
519
|
|
|
520
520
|
// Server-side re-validation — never trust the frontend's cached gate.
|
|
521
521
|
// Hard blocks always refuse. Missing approvals refuse unless the caller
|
|
@@ -562,7 +562,7 @@ export class ReviewWorkflowService implements IReviewWorkflowService {
|
|
|
562
562
|
.from(changeRequests)
|
|
563
563
|
.where(eq(changeRequests.number, prNumber))
|
|
564
564
|
.limit(1);
|
|
565
|
-
if (!cr) throw new
|
|
565
|
+
if (!cr) throw new VersionControlValidationError(`Change request #${prNumber} not found`);
|
|
566
566
|
// Re-validate lifecycle against the AUTHORITATIVE row, not the caller's
|
|
567
567
|
// `state` (which only drove the gate). A stale or duplicate request must not
|
|
568
568
|
// re-run the git merge on a CR that's already merged or closed.
|
|
@@ -837,8 +837,8 @@ export class ReviewWorkflowService implements IReviewWorkflowService {
|
|
|
837
837
|
workspaceId: string,
|
|
838
838
|
): Promise<CancelPrResult> {
|
|
839
839
|
assertValidPrNumber(prNumber);
|
|
840
|
-
if (!baseBranch) throw new
|
|
841
|
-
if (!workspaceId) throw new
|
|
840
|
+
if (!baseBranch) throw new VersionControlValidationError('base branch is required');
|
|
841
|
+
if (!workspaceId) throw new VersionControlValidationError('workspace id is required');
|
|
842
842
|
|
|
843
843
|
// Refuse early on terminal states so the gh call only fires for genuinely
|
|
844
844
|
// open PRs. Two distinct 422s — frontend distinguishes "already applied"
|
|
@@ -938,7 +938,7 @@ export class ReviewWorkflowService implements IReviewWorkflowService {
|
|
|
938
938
|
): Promise<number> {
|
|
939
939
|
assertValidPrNumber(prNumber);
|
|
940
940
|
if (!fromHeadSha || !toHeadSha) {
|
|
941
|
-
throw new
|
|
941
|
+
throw new VersionControlValidationError('both head shas are required');
|
|
942
942
|
}
|
|
943
943
|
if (fromHeadSha === toHeadSha) return 0;
|
|
944
944
|
|
|
@@ -1023,7 +1023,7 @@ export class ReviewWorkflowService implements IReviewWorkflowService {
|
|
|
1023
1023
|
): Promise<FileApprovalState[]> {
|
|
1024
1024
|
assertValidPrNumber(prNumber);
|
|
1025
1025
|
assertValidPath(path);
|
|
1026
|
-
if (!headSha) throw new
|
|
1026
|
+
if (!headSha) throw new VersionControlValidationError('head sha is required');
|
|
1027
1027
|
|
|
1028
1028
|
const callerEmail = canonicalEmail(user.email);
|
|
1029
1029
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* In-process event bus that fans
|
|
2
|
+
* In-process event bus that fans version-control state-change events out to
|
|
3
3
|
* subscribed SSE sessions. The shape and scope rules live in
|
|
4
|
-
* `@bevel-software/platform-shared/
|
|
4
|
+
* `@bevel-software/platform-shared/version-control/events.ts` — this module is the runtime that
|
|
5
5
|
* makes them deliverable.
|
|
6
6
|
*
|
|
7
7
|
* **What this owns**
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
import {
|
|
40
40
|
isUserScoped,
|
|
41
41
|
isWorkspaceScoped,
|
|
42
|
-
type
|
|
43
|
-
type
|
|
42
|
+
type VersionControlEvent,
|
|
43
|
+
type VersionControlEventPayload,
|
|
44
44
|
} from '@bevel-software/platform-shared';
|
|
45
45
|
import { logger } from '../../shared/logging.js';
|
|
46
46
|
|
|
@@ -60,7 +60,7 @@ const BUFFER_CAPACITY = 500;
|
|
|
60
60
|
* stamped envelope + payload and SHOULD NOT throw — exceptions are caught
|
|
61
61
|
* and logged so one misbehaving subscriber never blocks fan-out to the rest.
|
|
62
62
|
*/
|
|
63
|
-
export type SubscriberPush = (event:
|
|
63
|
+
export type SubscriberPush = (event: VersionControlEvent) => void;
|
|
64
64
|
|
|
65
65
|
/**
|
|
66
66
|
* Per-session subscription bookkeeping. `getFocusedWorkspaceIds` is a getter
|
|
@@ -96,11 +96,11 @@ function canonicalize(workspaceId: string): string {
|
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
export class
|
|
99
|
+
export class VersionControlEventBus {
|
|
100
100
|
private nextId = 1;
|
|
101
|
-
private readonly buffer:
|
|
101
|
+
private readonly buffer: VersionControlEvent[] = [];
|
|
102
102
|
private readonly subscribers = new Map<string, Subscriber>();
|
|
103
|
-
private readonly emitListeners = new Set<(event:
|
|
103
|
+
private readonly emitListeners = new Set<(event: VersionControlEvent) => void>();
|
|
104
104
|
|
|
105
105
|
/**
|
|
106
106
|
* Server-side tap: called for EVERY emitted event, before the per-session
|
|
@@ -111,7 +111,7 @@ export class WorkflowEventBus {
|
|
|
111
111
|
* Best-effort like SSE dispatch: a throwing listener is logged, never
|
|
112
112
|
* propagated to the emitter. Returns the unsubscribe.
|
|
113
113
|
*/
|
|
114
|
-
onEmit(listener: (event:
|
|
114
|
+
onEmit(listener: (event: VersionControlEvent) => void): () => void {
|
|
115
115
|
this.emitListeners.add(listener);
|
|
116
116
|
return () => this.emitListeners.delete(listener);
|
|
117
117
|
}
|
|
@@ -122,8 +122,8 @@ export class WorkflowEventBus {
|
|
|
122
122
|
* event so callers (e.g. tests, debug logs) can see what was actually
|
|
123
123
|
* delivered.
|
|
124
124
|
*/
|
|
125
|
-
emit(payload:
|
|
126
|
-
const event:
|
|
125
|
+
emit(payload: VersionControlEventPayload): VersionControlEvent {
|
|
126
|
+
const event: VersionControlEvent = {
|
|
127
127
|
id: this.nextId++,
|
|
128
128
|
ts: new Date().toISOString(),
|
|
129
129
|
...payload,
|
|
@@ -165,7 +165,7 @@ export class WorkflowEventBus {
|
|
|
165
165
|
// try/catch covers both the scope check (`matches` reaches into
|
|
166
166
|
// `sub.getFocusedWorkspaceIds()`, which could throw if a bizarre
|
|
167
167
|
// subscriber holds buggy state) and the dispatch itself, so
|
|
168
|
-
//
|
|
168
|
+
// version-control mutations stay successful even if a listener throws.
|
|
169
169
|
// Callers can rely on `emit` never throwing, so they don't need
|
|
170
170
|
// to wrap every emit call site in their own try/catch.
|
|
171
171
|
try {
|
|
@@ -220,7 +220,7 @@ export class WorkflowEventBus {
|
|
|
220
220
|
* is greater than `lastSeenId + 1` (i.e. we evicted events the client
|
|
221
221
|
* needs to see).
|
|
222
222
|
*/
|
|
223
|
-
replayAfter(lastSeenId: number, sub: Pick<Subscriber, 'userId' | 'getFocusedWorkspaceIds'>):
|
|
223
|
+
replayAfter(lastSeenId: number, sub: Pick<Subscriber, 'userId' | 'getFocusedWorkspaceIds'>): VersionControlEvent[] | null {
|
|
224
224
|
// Empty buffer: a client that never saw anything (lastSeenId === 0) has
|
|
225
225
|
// nothing to replay and the empty array is correct. A client that DID
|
|
226
226
|
// see events (lastSeenId > 0) but reached an empty buffer means the
|
|
@@ -262,7 +262,7 @@ export class WorkflowEventBus {
|
|
|
262
262
|
* that hasn't yet POSTed its focus gets no workspace events (correct —
|
|
263
263
|
* we don't know what it cares about).
|
|
264
264
|
*/
|
|
265
|
-
private matches(event:
|
|
265
|
+
private matches(event: VersionControlEvent, sub: Pick<Subscriber, 'userId' | 'getFocusedWorkspaceIds'>): boolean {
|
|
266
266
|
if (isWorkspaceScoped(event)) {
|
|
267
267
|
const watched = sub.getFocusedWorkspaceIds();
|
|
268
268
|
if (watched.length === 0) return false;
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
* Nothing here changes what publishers emit; the rule only reads the event.
|
|
50
50
|
*/
|
|
51
51
|
|
|
52
|
-
import type { ChangeRequest,
|
|
52
|
+
import type { ChangeRequest, VersionControlEvent } from '@bevel-software/platform-shared';
|
|
53
53
|
import { logger } from '../../shared/logging.js';
|
|
54
54
|
import { workspaceIdForBranch } from '../../shared/workspace-id.js';
|
|
55
55
|
import type { IAccessControl } from '../access/index.js';
|
|
@@ -100,14 +100,14 @@ export type ChangeRequestFacts = Pick<ChangeRequest, 'base' | 'authorId' | 'touc
|
|
|
100
100
|
*/
|
|
101
101
|
export interface IEventDelivery {
|
|
102
102
|
/** The event as `viewer` may receive it: itself, a redacted copy, or null. Never rejects. */
|
|
103
|
-
judge(event:
|
|
103
|
+
judge(event: VersionControlEvent, viewer: EventViewer): Promise<VersionControlEvent | null>;
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
/** The deployment's `EventAccess`: the access service the file routes use, read in the server's own checkouts. */
|
|
107
107
|
export function createEventAccess(deps: {
|
|
108
108
|
accessControl: Pick<IAccessControl, 'canRead' | 'canReadBatch' | 'canReadBatchAtRef'>;
|
|
109
109
|
kbDirName: string;
|
|
110
|
-
/** `
|
|
110
|
+
/** `IVersionControlService.getChangeRequest`: the summary the request list judges, files included. */
|
|
111
111
|
getChangeRequest(number: number): Promise<ChangeRequestFacts | null>;
|
|
112
112
|
workspaces: {
|
|
113
113
|
/** Whether the server holds a checkout for `workspaceId` (the branch's own workspace). */
|
|
@@ -172,10 +172,10 @@ export function createEventAccess(deps: {
|
|
|
172
172
|
* null for nothing at all.
|
|
173
173
|
*/
|
|
174
174
|
async function deliveryFor(
|
|
175
|
-
event:
|
|
175
|
+
event: VersionControlEvent,
|
|
176
176
|
viewer: EventViewer,
|
|
177
177
|
access: EventAccess,
|
|
178
|
-
): Promise<
|
|
178
|
+
): Promise<VersionControlEvent | null> {
|
|
179
179
|
const email = viewer.email;
|
|
180
180
|
try {
|
|
181
181
|
switch (event.kind) {
|
|
@@ -217,7 +217,7 @@ async function maySeeRequest(number: number, email: string, access: EventAccess)
|
|
|
217
217
|
return maySeeChangeRequest({ readableFiles, isAuthor: false });
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
-
type GitSyncFailed = Extract<
|
|
220
|
+
type GitSyncFailed = Extract<VersionControlEvent, { kind: 'git-sync-failed' }>;
|
|
221
221
|
|
|
222
222
|
/**
|
|
223
223
|
* Every path the event names is judged: the root, which git's words are about,
|
|
@@ -225,7 +225,7 @@ type GitSyncFailed = Extract<WorkflowEvent, { kind: 'git-sync-failed' }>;
|
|
|
225
225
|
* words go out only when every one of them is readable; otherwise the person
|
|
226
226
|
* keeps the conflicted files they may read and a fixed sentence.
|
|
227
227
|
*/
|
|
228
|
-
async function gitSyncFailedFor(event: GitSyncFailed, email: string, access: EventAccess): Promise<
|
|
228
|
+
async function gitSyncFailedFor(event: GitSyncFailed, email: string, access: EventAccess): Promise<VersionControlEvent> {
|
|
229
229
|
const conflicted = event.conflictedPaths ?? [];
|
|
230
230
|
const [root, ...each] = await Promise.all([
|
|
231
231
|
access.mayReadRepoPath(event.workspaceId, email, ''),
|
|
@@ -235,7 +235,7 @@ async function gitSyncFailedFor(event: GitSyncFailed, email: string, access: Eve
|
|
|
235
235
|
return root && readable.length === conflicted.length ? event : redactGitSyncFailed(event, readable);
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
-
function pathOnWorkspace(event:
|
|
238
|
+
function pathOnWorkspace(event: VersionControlEvent): { workspaceId: string; path: string } | null {
|
|
239
239
|
const e = event as { workspaceId?: unknown; path?: unknown };
|
|
240
240
|
return typeof e.workspaceId === 'string' && typeof e.path === 'string'
|
|
241
241
|
? { workspaceId: e.workspaceId, path: e.path }
|
|
@@ -246,7 +246,7 @@ function pathOnWorkspace(event: WorkflowEvent): { workspaceId: string; path: str
|
|
|
246
246
|
* Same shape, so a client parses it as before: git's words are gone, and of
|
|
247
247
|
* the conflicted files only `readable` remain (none, the key absent).
|
|
248
248
|
*/
|
|
249
|
-
function redactGitSyncFailed(event: GitSyncFailed, readable: string[]):
|
|
249
|
+
function redactGitSyncFailed(event: GitSyncFailed, readable: string[]): VersionControlEvent {
|
|
250
250
|
const redacted: GitSyncFailed = { ...event, reason: GIT_SYNC_FAILED_REDACTED_REASON };
|
|
251
251
|
if (readable.length > 0) redacted.conflictedPaths = readable;
|
|
252
252
|
else delete redacted.conflictedPaths;
|
|
@@ -261,11 +261,11 @@ function redactGitSyncFailed(event: GitSyncFailed, readable: string[]): Workflow
|
|
|
261
261
|
* delivered decides what the replay carries.
|
|
262
262
|
*/
|
|
263
263
|
export class EventDelivery implements IEventDelivery {
|
|
264
|
-
private readonly inFlight = new Map<string, Promise<
|
|
264
|
+
private readonly inFlight = new Map<string, Promise<VersionControlEvent | null>>();
|
|
265
265
|
|
|
266
266
|
constructor(private readonly access: EventAccess) {}
|
|
267
267
|
|
|
268
|
-
judge(event:
|
|
268
|
+
judge(event: VersionControlEvent, viewer: EventViewer): Promise<VersionControlEvent | null> {
|
|
269
269
|
const key = `${event.id}\u0000${event.ts}\u0000${viewer.userId}`;
|
|
270
270
|
const pending = this.inFlight.get(key);
|
|
271
271
|
if (pending) return pending;
|
|
@@ -44,8 +44,8 @@ import { logger } from '../../shared/logging.js';
|
|
|
44
44
|
|
|
45
45
|
const log = logger('events');
|
|
46
46
|
import express from 'express';
|
|
47
|
-
import { type
|
|
48
|
-
import type {
|
|
47
|
+
import { type VersionControlEvent } from '@bevel-software/platform-shared';
|
|
48
|
+
import type { VersionControlEventBus } from './event-bus.js';
|
|
49
49
|
import type { IEventDelivery } from './events-delivery.js';
|
|
50
50
|
import '../auth/index.js'; // Express Request augmentation
|
|
51
51
|
|
|
@@ -104,7 +104,7 @@ interface ActiveSession {
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
export function createEventsRoutes(
|
|
107
|
-
bus:
|
|
107
|
+
bus: VersionControlEventBus,
|
|
108
108
|
authMiddleware: express.RequestHandler,
|
|
109
109
|
delivery: IEventDelivery,
|
|
110
110
|
): express.Router {
|
|
@@ -178,7 +178,7 @@ export function createEventsRoutes(
|
|
|
178
178
|
|
|
179
179
|
// Every event this session hears goes through the delivery rule, in the
|
|
180
180
|
// order it arrived: the verdict is async, the stream must not reorder.
|
|
181
|
-
const push = (event:
|
|
181
|
+
const push = (event: VersionControlEvent): void => {
|
|
182
182
|
if (session.closed) return;
|
|
183
183
|
const verdict = delivery.judge(event, viewer);
|
|
184
184
|
session.queue = session.queue.then(async () => {
|
|
@@ -312,7 +312,7 @@ export function createEventsRoutes(
|
|
|
312
312
|
* Data is a single line of JSON — never embedded newlines, which would
|
|
313
313
|
* break the SSE parser. JSON.stringify guarantees that.
|
|
314
314
|
*/
|
|
315
|
-
function writeSseEvent(res: Response, event:
|
|
315
|
+
function writeSseEvent(res: Response, event: VersionControlEvent): void {
|
|
316
316
|
res.write(`id: ${event.id}\n`);
|
|
317
317
|
res.write(`data: ${JSON.stringify(event)}\n\n`);
|
|
318
318
|
}
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
* writing: a previous-version process never looks at a canonical row, so no
|
|
43
43
|
* check here could make the two contend while both run. They never do — one
|
|
44
44
|
* server process owns the workspaces directory (see `branchLifecycle` in the
|
|
45
|
-
*
|
|
45
|
+
* version-control service; this service's deletion gate is in-process for the same
|
|
46
46
|
* reason), and an upgrade stops the old process before the new one starts.
|
|
47
47
|
*
|
|
48
48
|
* There is no transition handling for rows written under a raw spelling
|
|
@@ -61,7 +61,7 @@ import { and, eq, gt, inArray, lte } from 'drizzle-orm';
|
|
|
61
61
|
import type { Database } from '../database/index.js';
|
|
62
62
|
import { fileLocks } from '../database/index.js';
|
|
63
63
|
import type { AcquireLockResult, AuthUser, FileLock } from '@bevel-software/platform-shared';
|
|
64
|
-
import {
|
|
64
|
+
import { VersionControlValidationError } from '../../shared/domain-errors.js';
|
|
65
65
|
import { canonicalFileIdentity } from '../../shared/canonical-file-identity.js';
|
|
66
66
|
import { branchForWorkspaceId, canonicalWorkspaceId } from '../../shared/workspace-id.js';
|
|
67
67
|
|
|
@@ -152,7 +152,7 @@ export class FileLockService {
|
|
|
152
152
|
*
|
|
153
153
|
* `opts.coordination` stamps the row's `mode` as `'coordination'` — a
|
|
154
154
|
* pure-mutex hold that grants no write authority (see
|
|
155
|
-
* `
|
|
155
|
+
* `IVersionControlService.acquireLock`). The mode is persisted so the version-control
|
|
156
156
|
* service's write paths can refuse to treat the hold as write possession
|
|
157
157
|
* for the row's whole lifetime; a takeover of an expired row re-stamps the
|
|
158
158
|
* mode, so a stale coordination row can't launder a later edit acquire
|
|
@@ -168,7 +168,7 @@ export class FileLockService {
|
|
|
168
168
|
const targetPath = canonicalFileIdentity(rawPath);
|
|
169
169
|
const workspaceId = canonicalWorkspaceId(rawWorkspaceId);
|
|
170
170
|
if (this.closing.has(branch)) {
|
|
171
|
-
throw new
|
|
171
|
+
throw new VersionControlValidationError(`"${branch}" is being deleted, so "${targetPath}" cannot be held for editing.`, {
|
|
172
172
|
kind: 'branch-being-deleted',
|
|
173
173
|
branch,
|
|
174
174
|
path: targetPath,
|
|
@@ -294,7 +294,7 @@ export class FileLockService {
|
|
|
294
294
|
)
|
|
295
295
|
.limit(1);
|
|
296
296
|
if (!holder) {
|
|
297
|
-
throw new
|
|
297
|
+
throw new VersionControlValidationError(
|
|
298
298
|
`Lock contention race on "${targetPath}" — please retry.`,
|
|
299
299
|
{ kind: 'lock-contention-race', branch, path: targetPath },
|
|
300
300
|
);
|
|
@@ -343,7 +343,7 @@ export class FileLockService {
|
|
|
343
343
|
)
|
|
344
344
|
.returning();
|
|
345
345
|
if (!updated) {
|
|
346
|
-
throw new
|
|
346
|
+
throw new VersionControlValidationError(
|
|
347
347
|
`Cannot heartbeat lock on "${targetPath}": not held by you (or no longer exists).`,
|
|
348
348
|
{ kind: 'lock-not-held', branch, path: targetPath },
|
|
349
349
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { execFile } from 'node:child_process';
|
|
2
2
|
import { promisify } from 'node:util';
|
|
3
3
|
import type { WorkspaceService } from '../../../workspace/workspace.service.js';
|
|
4
|
-
import {
|
|
4
|
+
import { VersionControlHooks } from '../../version-control-hooks.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Helpers shared by the GitService integration suites that drive a real git
|
|
@@ -31,8 +31,8 @@ export async function gitOut(cwd: string, args: string[]): Promise<string> {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
/** An empty hooks registry — no commit-time validation, so pulls/merges never block. */
|
|
34
|
-
export function
|
|
35
|
-
return new
|
|
34
|
+
export function stubVersionControlHooks(): VersionControlHooks {
|
|
35
|
+
return new VersionControlHooks();
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
/** Resolves each workspace id to its directory, like the real service does. */
|
package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts
RENAMED
|
@@ -7,7 +7,7 @@ import path from 'node:path';
|
|
|
7
7
|
import os from 'node:os';
|
|
8
8
|
|
|
9
9
|
import type { WorkspaceService } from '../../../workspace/workspace.service.js';
|
|
10
|
-
import {
|
|
10
|
+
import { VersionControlHooks } from '../../version-control-hooks.js';
|
|
11
11
|
import type { IAccessControl } from '../../../access/access-control.interface.js';
|
|
12
12
|
import { GitService } from '../git.service.js';
|
|
13
13
|
import { AccessDeniedError } from '../../../access-model/access-errors.js';
|
|
@@ -140,7 +140,7 @@ async function makeSvc(
|
|
|
140
140
|
const { workspaceDir, repo } = await seedWorkspace(root, workspaceId);
|
|
141
141
|
const svc = new GitService(
|
|
142
142
|
stubWorkspaceService(workspaceId, workspaceDir),
|
|
143
|
-
new
|
|
143
|
+
new VersionControlHooks(),
|
|
144
144
|
testKbContext(),
|
|
145
145
|
undefined,
|
|
146
146
|
ac ?? null,
|
|
@@ -262,7 +262,7 @@ describe('GitService — push gate uses origin/<branch> (not HEAD or working tre
|
|
|
262
262
|
const { ac, calls } = recordingAccessControl();
|
|
263
263
|
const svc = new GitService(
|
|
264
264
|
stubWorkspaceService(workspaceId, workspaceDir),
|
|
265
|
-
new
|
|
265
|
+
new VersionControlHooks(),
|
|
266
266
|
testKbContext(),
|
|
267
267
|
undefined,
|
|
268
268
|
ac,
|
|
@@ -306,7 +306,7 @@ describe('GitService — push gate uses origin/<branch> (not HEAD or working tre
|
|
|
306
306
|
});
|
|
307
307
|
const svc = new GitService(
|
|
308
308
|
stubWorkspaceService(workspaceId, workspaceDir),
|
|
309
|
-
new
|
|
309
|
+
new VersionControlHooks(),
|
|
310
310
|
testKbContext(),
|
|
311
311
|
undefined,
|
|
312
312
|
ac,
|
|
@@ -337,7 +337,7 @@ describe('GitService — push gate uses origin/<branch> (not HEAD or working tre
|
|
|
337
337
|
});
|
|
338
338
|
const svc = new GitService(
|
|
339
339
|
stubWorkspaceService(workspaceId, workspaceDir),
|
|
340
|
-
new
|
|
340
|
+
new VersionControlHooks(),
|
|
341
341
|
testKbContext(),
|
|
342
342
|
undefined,
|
|
343
343
|
ac,
|
package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts
RENAMED
|
@@ -3,9 +3,9 @@ import fs from 'node:fs/promises';
|
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import os from 'node:os';
|
|
5
5
|
import { testKbContext } from '../../../../__tests__/kb-context.js';
|
|
6
|
-
import {
|
|
6
|
+
import { VersionControlHooks } from '../../version-control-hooks.js';
|
|
7
7
|
import { GitService } from '../git.service.js';
|
|
8
|
-
import {
|
|
8
|
+
import { VersionControlValidationError } from '../../../../shared/domain-errors.js';
|
|
9
9
|
import { mergeCommitSubject } from '../merge-commit.js';
|
|
10
10
|
import { runGit, gitOut, stubWorkspaceService } from './git-test-helpers.js';
|
|
11
11
|
|
|
@@ -78,7 +78,7 @@ describe('GitService reading an applied change from its merge commit', () => {
|
|
|
78
78
|
|
|
79
79
|
git = new GitService(
|
|
80
80
|
stubWorkspaceService({ [workspaceId]: path.dirname(repo) }),
|
|
81
|
-
new
|
|
81
|
+
new VersionControlHooks(),
|
|
82
82
|
testKbContext(),
|
|
83
83
|
);
|
|
84
84
|
return { mergeSha, targetBefore, sourceTip };
|
|
@@ -234,7 +234,7 @@ describe('GitService reading an applied change from its merge commit', () => {
|
|
|
234
234
|
() => git.changedPathsAndPairsOfAppliedChange(workspaceId, ref(absent)),
|
|
235
235
|
() => git.appliedChangeShas(workspaceId, ref(absent)),
|
|
236
236
|
]) {
|
|
237
|
-
await expect(call()).rejects.toThrow(
|
|
237
|
+
await expect(call()).rejects.toThrow(VersionControlValidationError);
|
|
238
238
|
}
|
|
239
239
|
});
|
|
240
240
|
|