@bevel-software/platform-core-backend 0.35.0 → 0.36.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-guide/directory-structure.md +1 -1
- package/agent-guide/onboarding.md +111 -0
- package/agent-guide/start-here.md +1 -0
- package/agent-guide/tool-manuals.md +1 -0
- package/dist/core/catalog-cache-invalidation.d.ts +2 -2
- package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
- package/dist/core/compose-embed.d.ts +2 -2
- package/dist/core/compose-embed.d.ts.map +1 -1
- package/dist/core/compose-embed.js +1 -1
- package/dist/core/compose-embed.js.map +1 -1
- package/dist/core/core-ports.d.ts +19 -4
- package/dist/core/core-ports.d.ts.map +1 -1
- package/dist/core/core-ports.js.map +1 -1
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +26 -24
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +19 -13
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +68 -56
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +4 -4
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +5 -5
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core-config.d.ts +2 -2
- package/dist/core-config.js +3 -3
- package/dist/core-config.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.service.js +1 -1
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access-declarations.d.ts +2 -2
- package/dist/modules/access/access-declarations.d.ts.map +1 -1
- package/dist/modules/access/access-declarations.js +2 -2
- package/dist/modules/access/access-declarations.js.map +1 -1
- package/dist/modules/access/access-mutation.service.d.ts +2 -2
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
- package/dist/modules/access/access-mutation.service.js +2 -2
- package/dist/modules/access/access-mutation.service.js.map +1 -1
- package/dist/modules/access/access-requests.routes.d.ts +2 -2
- package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
- package/dist/modules/access/access-requests.routes.js +5 -5
- package/dist/modules/access/access-requests.routes.js.map +1 -1
- package/dist/modules/access/access-requests.service.d.ts +2 -2
- package/dist/modules/access/access-requests.service.d.ts.map +1 -1
- package/dist/modules/access/access-requests.service.js +11 -11
- package/dist/modules/access/access-requests.service.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts +2 -2
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +9 -9
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/admin-locked-commit.d.ts +5 -5
- package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
- package/dist/modules/access/admin-locked-commit.js +7 -7
- package/dist/modules/access/admin-locked-commit.js.map +1 -1
- package/dist/modules/access/admin-route-helpers.d.ts +1 -1
- package/dist/modules/access/admin-route-helpers.js +5 -5
- package/dist/modules/access/admin-route-helpers.js.map +1 -1
- package/dist/modules/access/change-read-gate.d.ts +1 -1
- package/dist/modules/access/change-read-gate.js +1 -1
- package/dist/modules/access/groups-admin.service.d.ts +7 -7
- package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.service.js +6 -6
- package/dist/modules/access/groups-admin.service.js.map +1 -1
- package/dist/modules/access/reference-scan.d.ts +1 -1
- package/dist/modules/access/roles-admin.service.d.ts +7 -7
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
- package/dist/modules/access/roles-admin.service.js +8 -8
- package/dist/modules/access/roles-admin.service.js.map +1 -1
- package/dist/modules/access/synced-groups-committer.d.ts +4 -4
- package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-committer.js +7 -7
- package/dist/modules/access/synced-groups-committer.js.map +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts +6 -6
- package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
- package/dist/modules/access/user-access-removal.service.js +4 -4
- package/dist/modules/access/user-access-removal.service.js.map +1 -1
- package/dist/modules/access-model/access-errors.d.ts +4 -4
- package/dist/modules/access-model/access-errors.d.ts.map +1 -1
- package/dist/modules/access-model/access-errors.js +4 -4
- package/dist/modules/access-model/access-errors.js.map +1 -1
- package/dist/modules/access-model/access-grammar.d.ts +1 -1
- package/dist/modules/access-model/access-grammar.js +4 -4
- package/dist/modules/access-model/change-gate.d.ts +1 -1
- package/dist/modules/access-model/change-gate.js +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts +4 -4
- package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.js +4 -4
- package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.d.ts +19 -14
- package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.js +42 -18
- package/dist/modules/agent-guide/agent-guide.js.map +1 -1
- package/dist/modules/agent-guide/guide-budget.d.ts +5 -2
- package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -1
- package/dist/modules/agent-guide/guide-budget.js +6 -2
- package/dist/modules/agent-guide/guide-budget.js.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +12 -5
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.js +13 -6
- package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
- package/dist/modules/agent-instructions/compose.d.ts +15 -8
- package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
- package/dist/modules/agent-instructions/compose.js +24 -10
- package/dist/modules/agent-instructions/compose.js.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.d.ts +14 -6
- package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.js +51 -11
- package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
- package/dist/modules/auth/account-erasure.service.d.ts +36 -7
- package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
- package/dist/modules/auth/account-erasure.service.js +30 -10
- package/dist/modules/auth/account-erasure.service.js.map +1 -1
- package/dist/modules/auth/account-hooks.d.ts +20 -0
- package/dist/modules/auth/account-hooks.d.ts.map +1 -1
- package/dist/modules/auth/account-hooks.js +10 -0
- package/dist/modules/auth/account-hooks.js.map +1 -1
- package/dist/modules/auth/account-switch-lock.js +2 -2
- package/dist/modules/auth/account-switch-lock.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts +7 -2
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +23 -4
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +1 -1
- package/dist/modules/auth/auth.service.js +4 -4
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/index.d.ts +1 -0
- package/dist/modules/auth/index.d.ts.map +1 -1
- package/dist/modules/database/core-schema.js +2 -2
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/diff/diff.routes.d.ts +3 -3
- package/dist/modules/diff/diff.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.js +7 -7
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/embed/embed.routes.js +1 -1
- package/dist/modules/embed/embed.routes.js.map +1 -1
- package/dist/modules/embed/embed.service.d.ts +4 -4
- package/dist/modules/embed/embed.service.d.ts.map +1 -1
- package/dist/modules/embed/embed.service.js +18 -18
- package/dist/modules/embed/embed.service.js.map +1 -1
- package/dist/modules/kb-fs/branch-name.js +8 -8
- package/dist/modules/kb-fs/branch-name.js.map +1 -1
- package/dist/modules/kb-fs/file-change-notifier.d.ts +2 -2
- package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -9
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +27 -27
- package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/repo-path.js +5 -5
- package/dist/modules/kb-fs/repo-path.js.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
- package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.js +2 -2
- package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
- package/dist/modules/kb-sync/index.d.ts +1 -1
- package/dist/modules/kb-sync/index.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js +10 -10
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +11 -4
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +75 -19
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
- package/dist/modules/onboarding/onboarding.routes.js +2 -2
- package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.d.ts +4 -4
- package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.js +4 -4
- package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.js +7 -7
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
- package/dist/modules/plugins/join-requests.service.d.ts +3 -3
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +5 -5
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.js +1 -1
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +2 -2
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +8 -8
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +77 -2
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js +479 -53
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +2 -1
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js +1 -0
- package/dist/modules/secrets-vault/index.js.map +1 -1
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +152 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +125 -10
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
- package/dist/modules/settings/connection-check.js +1 -1
- package/dist/modules/settings/connection-check.js.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +1 -1
- package/dist/modules/settings/git-root-folders.js +1 -1
- package/dist/modules/settings/git-root-folders.js.map +1 -1
- package/dist/modules/settings/setup.routes.d.ts +1 -1
- package/dist/modules/settings/setup.routes.js +1 -1
- package/dist/modules/skills/pending-skills.service.d.ts +3 -3
- package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
- package/dist/modules/skills/pending-skills.service.js +4 -4
- package/dist/modules/skills/pending-skills.service.js.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +5 -5
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
- package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +2 -2
- package/dist/modules/tool-helpers/tool-context.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +2 -2
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
- package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
- package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +43 -3
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +6 -0
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +51 -5
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -0
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +36 -15
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
- package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
- package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +31 -31
- package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
- package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
- package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-hooks.js.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
- package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
- package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
- package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
- package/dist/modules/version-control/event-bus.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
- package/dist/modules/version-control/event-bus.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
- package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
- package/dist/modules/version-control/events-delivery.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
- package/dist/modules/version-control/events.routes.d.ts.map +1 -0
- package/dist/modules/version-control/events.routes.js.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
- package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
- package/dist/modules/version-control/file-lock.service.js.map +1 -0
- package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
- package/dist/modules/version-control/git/change-request-link.js.map +1 -0
- package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
- package/dist/modules/version-control/git/git-version.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.d.ts +8 -8
- package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.js +53 -53
- package/dist/modules/version-control/git/git.service.js.map +1 -0
- package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
- package/dist/modules/version-control/git/merge-commit.js.map +1 -0
- package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
- package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
- package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
- package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
- package/dist/modules/version-control/index.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/index.js +3 -2
- package/dist/modules/version-control/index.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
- package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
- package/dist/modules/version-control/pending-commits.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
- package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
- package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
- package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
- package/dist/modules/version-control/read-on-branch.js.map +1 -0
- package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
- package/dist/modules/version-control/recovery-bot.js.map +1 -0
- package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
- package/dist/modules/version-control/sanitize-error.js.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +4 -4
- package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +3 -3
- package/dist/modules/version-control/version-control-hooks.js.map +1 -0
- package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
- package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
- package/dist/modules/version-control/version-control.routes.js.map +1 -0
- package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -31
- package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +89 -94
- package/dist/modules/version-control/version-control.service.js.map +1 -0
- package/dist/modules/workspace/agent-access.gate.d.ts +5 -5
- package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
- package/dist/modules/workspace/agent-access.gate.js +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
- package/dist/modules/workspace/git-internals.middleware.js +2 -2
- package/dist/modules/workspace/kb-repository.js +1 -1
- package/dist/modules/workspace/kb-repository.js.map +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-git.js +1 -1
- package/dist/modules/workspace/startup/kb-git.js.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
- package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.js +8 -5
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
- package/dist/modules/workspace/workspace-tmp.js +3 -3
- package/dist/modules/workspace/workspace-tmp.js.map +1 -1
- package/dist/modules/workspace/workspace.routes.d.ts +4 -4
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +22 -22
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +6 -6
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +11 -11
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +2 -1
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +15 -10
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/shared/canonical-file-identity.d.ts +2 -2
- package/dist/shared/canonical-file-identity.js +5 -5
- package/dist/shared/canonical-file-identity.js.map +1 -1
- package/dist/shared/domain-errors.d.ts +39 -39
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +44 -44
- package/dist/shared/domain-errors.js.map +1 -1
- package/dist/shared/git.contract.d.ts +1 -1
- package/dist/shared/git.contract.js +1 -1
- package/dist/shared/http-errors.d.ts +3 -3
- package/dist/shared/http-errors.d.ts.map +1 -1
- package/dist/shared/http-errors.js +1 -1
- package/dist/shared/http-errors.js.map +1 -1
- package/dist/shared/pending-proposals.d.ts +3 -3
- package/dist/shared/pending-proposals.d.ts.map +1 -1
- package/dist/shared/pending-proposals.js +2 -2
- package/dist/shared/pending-proposals.js.map +1 -1
- package/dist/tenancy/static-tenant-source.js +1 -1
- package/dist/tenancy/static-tenant-source.js.map +1 -1
- package/migrations/0012_agent_audit.sql +40 -40
- package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
- package/migrations/meta/0012_snapshot.json +2246 -2246
- package/migrations/meta/0013_snapshot.json +2258 -2258
- package/package.json +4 -4
- package/src/__tests__/account-admin.ts +27 -0
- package/src/__tests__/hexis-catalog.ts +4 -4
- package/src/__tests__/kb-context.ts +30 -30
- package/src/__tests__/kb-layout-config.test.ts +21 -0
- package/src/__tests__/open-change-gate.ts +1 -1
- package/src/__tests__/tool-handler.ts +15 -0
- package/src/__tests__/tool-wiring.ts +10 -4
- package/src/__tests__/workspace-service.ts +1 -1
- package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
- package/src/core/__tests__/compose-embed.test.ts +1 -1
- package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
- package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
- package/src/core/__tests__/gated-boot.test.ts +2 -2
- package/src/core/__tests__/lifecycle.test.ts +9 -9
- package/src/core/catalog-cache-invalidation.ts +2 -2
- package/src/core/compose-embed.ts +3 -3
- package/src/core/core-ports.ts +19 -4
- package/src/core/create-core-server.ts +39 -25
- package/src/core/create-core-services.ts +79 -63
- package/src/core/lifecycle.ts +9 -9
- package/src/core-config.ts +3 -3
- package/src/index.ts +5 -5
- package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
- package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
- package/src/modules/access/__tests__/access-requests.routes.test.ts +20 -20
- package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
- package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +3 -3
- package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
- package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
- package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
- package/src/modules/access/__tests__/groups-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
- package/src/modules/access/__tests__/roles-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/roles-capabilities.test.ts +19 -19
- package/src/modules/access/__tests__/roles.routes.test.ts +6 -6
- package/src/modules/access/__tests__/synced-groups-committer.test.ts +13 -13
- package/src/modules/access/__tests__/user-access-removal.service.test.ts +29 -29
- package/src/modules/access/access-control.service.ts +1 -1
- package/src/modules/access/access-declarations.ts +2 -2
- package/src/modules/access/access-mutation.service.ts +2 -2
- package/src/modules/access/access-requests.routes.ts +7 -7
- package/src/modules/access/access-requests.service.ts +13 -13
- package/src/modules/access/access.routes.ts +11 -11
- package/src/modules/access/admin-locked-commit.ts +11 -11
- package/src/modules/access/admin-route-helpers.ts +5 -5
- package/src/modules/access/change-read-gate.ts +1 -1
- package/src/modules/access/groups-admin.service.ts +7 -7
- package/src/modules/access/reference-scan.ts +1 -1
- package/src/modules/access/roles-admin.service.ts +9 -9
- package/src/modules/access/synced-groups-committer.ts +11 -11
- package/src/modules/access/user-access-removal.service.ts +7 -7
- package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
- package/src/modules/access-model/access-errors.ts +4 -4
- package/src/modules/access-model/access-grammar.ts +4 -4
- package/src/modules/access-model/change-gate.ts +1 -1
- package/src/modules/access-model/roles-yaml-guard.ts +4 -4
- package/src/modules/agent-guide/__tests__/agent-guide.test.ts +19 -4
- package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +1 -1
- package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +2 -2
- package/src/modules/agent-guide/agent-guide.ts +48 -22
- package/src/modules/agent-guide/guide-budget.ts +6 -2
- package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
- package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
- package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +113 -7
- package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
- package/src/modules/agent-instructions/compose.ts +24 -9
- package/src/modules/agent-instructions/shared-file-rules.ts +53 -11
- package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
- package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
- package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
- package/src/modules/audit/event-classifier.ts +155 -155
- package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
- package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
- package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
- package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
- package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
- package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
- package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
- package/src/modules/auth/account-erasure.service.ts +27 -9
- package/src/modules/auth/account-hooks.ts +34 -0
- package/src/modules/auth/account-switch-lock.ts +2 -2
- package/src/modules/auth/account.routes.ts +23 -5
- package/src/modules/auth/auth.service.ts +4 -4
- package/src/modules/auth/index.ts +1 -0
- package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
- package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
- package/src/modules/database/core-schema.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
- package/src/modules/diff/diff.routes.ts +8 -8
- package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
- package/src/modules/embed/__tests__/embed.service.test.ts +42 -42
- package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
- package/src/modules/embed/embed.routes.ts +1 -1
- package/src/modules/embed/embed.service.ts +17 -17
- package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
- package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +260 -260
- package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +34 -34
- package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
- package/src/modules/kb-fs/branch-name.ts +8 -8
- package/src/modules/kb-fs/file-change-notifier.ts +2 -2
- package/src/modules/kb-fs/locking-filesystem.ts +30 -30
- package/src/modules/kb-fs/repo-path.ts +5 -5
- package/src/modules/kb-fs/tmp-ref.ts +3 -3
- package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
- package/src/modules/kb-sync/index.ts +1 -1
- package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
- package/src/modules/kb-sync/kb-sync.service.ts +9 -9
- package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
- package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
- package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
- package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
- package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
- package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
- package/src/modules/mcp/mcp.service.ts +89 -28
- package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +55 -55
- package/src/modules/onboarding/onboarding.contract.ts +1 -1
- package/src/modules/onboarding/onboarding.routes.ts +2 -2
- package/src/modules/onboarding/starter-pack.service.ts +6 -6
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
- package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
- package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
- package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
- package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
- package/src/modules/plugins/__tests__/plugins.routes.test.ts +25 -25
- package/src/modules/plugins/join-request-jobs.service.ts +10 -10
- package/src/modules/plugins/join-requests.service.ts +4 -4
- package/src/modules/plugins/plugin-rename.service.ts +1 -1
- package/src/modules/plugins/plugins.routes.ts +9 -9
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +28 -1
- package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +562 -95
- package/src/modules/secrets-vault/index.ts +7 -0
- package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
- package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
- package/src/modules/secrets-vault/secrets-vault.contract.ts +152 -0
- package/src/modules/secrets-vault/secrets-vault.routes.ts +157 -10
- package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
- package/src/modules/settings/connection-check.ts +1 -1
- package/src/modules/settings/deployment-settings.service.ts +1 -1
- package/src/modules/settings/git-root-folders.ts +1 -1
- package/src/modules/settings/setup.routes.ts +1 -1
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
- package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
- package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
- package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
- package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
- package/src/modules/skills/pending-skills.service.ts +3 -3
- package/src/modules/skills/skill-access-requests.routes.ts +7 -7
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +4 -4
- package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
- package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
- package/src/modules/tool-helpers/tool-context.ts +6 -6
- package/src/modules/tool-helpers/tool-handler.ts +2 -2
- package/src/modules/tool-helpers/tool.contract.ts +4 -4
- package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
- package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +36 -1
- package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
- package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
- package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
- package/src/modules/tool-manuals/tool-manuals.contract.ts +41 -3
- package/src/modules/tool-manuals/tool-manuals.service.ts +53 -5
- package/src/modules/tool-manuals/tool-manuals.tools.ts +41 -15
- package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
- package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
- package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +6 -6
- package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
- package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
- package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
- package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
- package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
- package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
- package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.fork-point-file.test.ts → version-control/__tests__/version-control.routes.fork-point-file.test.ts} +19 -19
- package/src/modules/{workflow/__tests__/workflow.routes.history-read-gate.test.ts → version-control/__tests__/version-control.routes.history-read-gate.test.ts} +13 -13
- package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.open-change-request.test.ts → version-control/__tests__/version-control.routes.open-change-request.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.branch-in-use.test.ts → version-control/__tests__/version-control.service.branch-in-use.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts → version-control/__tests__/version-control.service.deleted-branch-sweep.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +97 -99
- package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
- package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +42 -42
- package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.pg.test.ts → version-control/__tests__/version-control.service.update-change-request.pg.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.test.ts → version-control/__tests__/version-control.service.update-change-request.test.ts} +11 -11
- package/src/modules/{workflow/__tests__/workflow.service.update-from-target.test.ts → version-control/__tests__/version-control.service.update-from-target.test.ts} +22 -22
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
- package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
- package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
- package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +30 -30
- package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
- package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
- package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
- package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
- package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
- package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
- package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +20 -20
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/git.service.ts +57 -57
- package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
- package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
- package/src/modules/{workflow → version-control}/index.ts +6 -5
- package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
- package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
- package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
- package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +3 -3
- package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
- package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +92 -97
- package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
- package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
- package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
- package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
- package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
- package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
- package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
- package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
- package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +5 -5
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +27 -27
- package/src/modules/workspace/agent-access.gate.ts +5 -5
- package/src/modules/workspace/git-internals.middleware.ts +2 -2
- package/src/modules/workspace/kb-repository.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
- package/src/modules/workspace/startup/kb-git.ts +1 -1
- package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
- package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
- package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
- package/src/modules/workspace/startup/steps/template-source.ts +21 -6
- package/src/modules/workspace/workspace-tmp.ts +4 -4
- package/src/modules/workspace/workspace.routes.ts +26 -26
- package/src/modules/workspace/workspace.service.ts +11 -11
- package/src/modules/workspace/workspace.tools.ts +17 -10
- package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
- package/src/shared/__tests__/http-errors.test.ts +4 -4
- package/src/shared/canonical-file-identity.ts +5 -5
- package/src/shared/domain-errors.ts +44 -44
- package/src/shared/git.contract.ts +1 -1
- package/src/shared/http-errors.ts +3 -3
- package/src/shared/kb-context.ts +130 -130
- package/src/shared/pending-proposals.ts +4 -4
- package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
- package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
- package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
- package/src/tenancy/index.ts +35 -35
- package/src/tenancy/static-tenant-source.ts +1 -1
- package/src/tenancy/tenant-host.ts +261 -261
- package/src/tenancy/tenant-runtime.ts +208 -208
- package/src/tenancy/tenant-source.contract.ts +59 -59
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
- package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/change-request-hooks.js.map +0 -1
- package/dist/modules/workflow/event-bus.d.ts.map +0 -1
- package/dist/modules/workflow/event-bus.js.map +0 -1
- package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
- package/dist/modules/workflow/events-delivery.js.map +0 -1
- package/dist/modules/workflow/events.routes.d.ts.map +0 -1
- package/dist/modules/workflow/events.routes.js.map +0 -1
- package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
- package/dist/modules/workflow/file-lock.service.js.map +0 -1
- package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
- package/dist/modules/workflow/git/change-request-link.js.map +0 -1
- package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
- package/dist/modules/workflow/git/git-version.js.map +0 -1
- package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/git.service.js.map +0 -1
- package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
- package/dist/modules/workflow/git/merge-commit.js.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
- package/dist/modules/workflow/index.d.ts.map +0 -1
- package/dist/modules/workflow/index.js.map +0 -1
- package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.service.js.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
- package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
- package/dist/modules/workflow/read-on-branch.js.map +0 -1
- package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
- package/dist/modules/workflow/recovery-bot.js.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
- package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
- package/dist/modules/workflow/sanitize-error.js.map +0 -1
- package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/workflow-hooks.js.map +0 -1
- package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.routes.js.map +0 -1
- package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.service.js.map +0 -1
- package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
- /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
- /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
- /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
- /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
- /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
- /package/src/modules/{workflow → version-control}/sanitize-error.ts +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
-
import type {
|
|
3
|
-
import {
|
|
2
|
+
import type { VersionControlEvent } from '@bevel-software/platform-shared';
|
|
3
|
+
import { VersionControlEventBus } from '../index.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Make a `Subscriber`-compatible spy. Returns the spy + a getter for
|
|
@@ -21,10 +21,10 @@ function makeSubscriber(sessionId: string, userId: string, initialFocus: string
|
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
describe('
|
|
24
|
+
describe('VersionControlEventBus', () => {
|
|
25
25
|
describe('scope filtering', () => {
|
|
26
26
|
it('delivers workspace-scoped events only to sessions focused on that workspace', () => {
|
|
27
|
-
const bus = new
|
|
27
|
+
const bus = new VersionControlEventBus();
|
|
28
28
|
const onA = makeSubscriber('s-a', 'u-1', 'ws-feat');
|
|
29
29
|
const onB = makeSubscriber('s-b', 'u-2', 'ws-other');
|
|
30
30
|
bus.subscribe(onA);
|
|
@@ -51,7 +51,7 @@ describe('WorkflowEventBus', () => {
|
|
|
51
51
|
// branch reached nobody who wasn't standing there, and every such page
|
|
52
52
|
// showed the old picture until a reload.
|
|
53
53
|
it('delivers to a session watching a second workspace alongside its focus', () => {
|
|
54
|
-
const bus = new
|
|
54
|
+
const bus = new VersionControlEventBus();
|
|
55
55
|
const onBranch = makeSubscriber('s-a', 'u-1', 'alice%2Fdraft');
|
|
56
56
|
onBranch.alsoWatch('main');
|
|
57
57
|
const elsewhere = makeSubscriber('s-b', 'u-2', 'bob%2Fdraft');
|
|
@@ -73,7 +73,7 @@ describe('WorkflowEventBus', () => {
|
|
|
73
73
|
});
|
|
74
74
|
|
|
75
75
|
it('still delivers the focused workspace to a session that also watches another', () => {
|
|
76
|
-
const bus = new
|
|
76
|
+
const bus = new VersionControlEventBus();
|
|
77
77
|
const sub = makeSubscriber('s-a', 'u-1', 'alice%2Fdraft');
|
|
78
78
|
sub.alsoWatch('main');
|
|
79
79
|
bus.subscribe(sub);
|
|
@@ -98,14 +98,14 @@ describe('WorkflowEventBus', () => {
|
|
|
98
98
|
// canonicalisation, workspace-scoped events for any branch with a `/`
|
|
99
99
|
// never reach the receiver — the silent bug we hit on
|
|
100
100
|
// `razvan-radulescu/sc`.
|
|
101
|
-
const bus = new
|
|
101
|
+
const bus = new VersionControlEventBus();
|
|
102
102
|
const encodedFocus = makeSubscriber('s-enc', 'u-1', 'razvan-radulescu%2Fsc');
|
|
103
103
|
const decodedFocus = makeSubscriber('s-dec', 'u-2', 'razvan-radulescu/sc');
|
|
104
104
|
bus.subscribe(encodedFocus);
|
|
105
105
|
bus.subscribe(decodedFocus);
|
|
106
106
|
|
|
107
107
|
// Event fired with the DECODED form (mirrors what Express's
|
|
108
|
-
// req.params.id passes into
|
|
108
|
+
// req.params.id passes into version-control methods).
|
|
109
109
|
bus.emit({
|
|
110
110
|
kind: 'lock-released',
|
|
111
111
|
workspaceId: 'razvan-radulescu/sc',
|
|
@@ -128,7 +128,7 @@ describe('WorkflowEventBus', () => {
|
|
|
128
128
|
});
|
|
129
129
|
|
|
130
130
|
it('delivers user-scoped events only to sessions belonging to that user', () => {
|
|
131
|
-
const bus = new
|
|
131
|
+
const bus = new VersionControlEventBus();
|
|
132
132
|
const onAlice = makeSubscriber('s-alice', 'u-alice');
|
|
133
133
|
const onBob = makeSubscriber('s-bob', 'u-bob');
|
|
134
134
|
bus.subscribe(onAlice);
|
|
@@ -141,7 +141,7 @@ describe('WorkflowEventBus', () => {
|
|
|
141
141
|
});
|
|
142
142
|
|
|
143
143
|
it("delivers an agent's tool call only to the person whose agent made it", () => {
|
|
144
|
-
const bus = new
|
|
144
|
+
const bus = new VersionControlEventBus();
|
|
145
145
|
const onAlice = makeSubscriber('s-alice', 'u-alice');
|
|
146
146
|
const onBob = makeSubscriber('s-bob', 'u-bob');
|
|
147
147
|
bus.subscribe(onAlice);
|
|
@@ -160,7 +160,7 @@ describe('WorkflowEventBus', () => {
|
|
|
160
160
|
});
|
|
161
161
|
|
|
162
162
|
it('delivers change-request-merge-failed only to the user who triggered the merge', () => {
|
|
163
|
-
const bus = new
|
|
163
|
+
const bus = new VersionControlEventBus();
|
|
164
164
|
const onAlice = makeSubscriber('s-alice', 'u-alice');
|
|
165
165
|
const onBob = makeSubscriber('s-bob', 'u-bob');
|
|
166
166
|
bus.subscribe(onAlice);
|
|
@@ -179,7 +179,7 @@ describe('WorkflowEventBus', () => {
|
|
|
179
179
|
});
|
|
180
180
|
|
|
181
181
|
it("delivers global events (e.g. change-request-opened) to every subscriber regardless of focus or user", () => {
|
|
182
|
-
const bus = new
|
|
182
|
+
const bus = new VersionControlEventBus();
|
|
183
183
|
const onA = makeSubscriber('s-a', 'u-1', null); // no focus at all
|
|
184
184
|
const onB = makeSubscriber('s-b', 'u-2', 'ws-other');
|
|
185
185
|
bus.subscribe(onA);
|
|
@@ -198,7 +198,7 @@ describe('WorkflowEventBus', () => {
|
|
|
198
198
|
});
|
|
199
199
|
|
|
200
200
|
it("skips workspace events for sessions that haven't set a focus yet", () => {
|
|
201
|
-
const bus = new
|
|
201
|
+
const bus = new VersionControlEventBus();
|
|
202
202
|
const unfocused = makeSubscriber('s-x', 'u-1', null);
|
|
203
203
|
bus.subscribe(unfocused);
|
|
204
204
|
|
|
@@ -215,7 +215,7 @@ describe('WorkflowEventBus', () => {
|
|
|
215
215
|
});
|
|
216
216
|
|
|
217
217
|
it('honours a mid-stream focus change without re-subscribing', () => {
|
|
218
|
-
const bus = new
|
|
218
|
+
const bus = new VersionControlEventBus();
|
|
219
219
|
const sub = makeSubscriber('s-1', 'u-1', 'ws-a');
|
|
220
220
|
bus.subscribe(sub);
|
|
221
221
|
|
|
@@ -234,7 +234,7 @@ describe('WorkflowEventBus', () => {
|
|
|
234
234
|
|
|
235
235
|
describe('envelope', () => {
|
|
236
236
|
it('stamps each event with a monotonic id and an ISO timestamp', () => {
|
|
237
|
-
const bus = new
|
|
237
|
+
const bus = new VersionControlEventBus();
|
|
238
238
|
const e1 = bus.emit({ kind: 'change-request-merged', number: 1 });
|
|
239
239
|
const e2 = bus.emit({ kind: 'change-request-merged', number: 2 });
|
|
240
240
|
expect(e1.id).toBe(1);
|
|
@@ -246,7 +246,7 @@ describe('WorkflowEventBus', () => {
|
|
|
246
246
|
|
|
247
247
|
describe('replay', () => {
|
|
248
248
|
it('returns events strictly after the last-seen id', () => {
|
|
249
|
-
const bus = new
|
|
249
|
+
const bus = new VersionControlEventBus();
|
|
250
250
|
const sub = { userId: 'u-1', getFocusedWorkspaceIds: () => ['ws-a'] };
|
|
251
251
|
bus.emit({ kind: 'lock-released', workspaceId: 'ws-a', branch: 'a', path: '1.md' });
|
|
252
252
|
bus.emit({ kind: 'lock-released', workspaceId: 'ws-a', branch: 'a', path: '2.md' });
|
|
@@ -254,11 +254,11 @@ describe('WorkflowEventBus', () => {
|
|
|
254
254
|
|
|
255
255
|
const tail = bus.replayAfter(1, sub);
|
|
256
256
|
expect(tail).not.toBeNull();
|
|
257
|
-
expect(tail!.map((e) => (e as
|
|
257
|
+
expect(tail!.map((e) => (e as VersionControlEvent & { path?: string }).path)).toEqual(['2.md', '3.md']);
|
|
258
258
|
});
|
|
259
259
|
|
|
260
260
|
it('respects scope filtering on replay (no leak of other workspaces)', () => {
|
|
261
|
-
const bus = new
|
|
261
|
+
const bus = new VersionControlEventBus();
|
|
262
262
|
const sub = { userId: 'u-1', getFocusedWorkspaceIds: () => ['ws-a'] };
|
|
263
263
|
bus.emit({ kind: 'lock-released', workspaceId: 'ws-a', branch: 'a', path: 'a.md' });
|
|
264
264
|
bus.emit({ kind: 'lock-released', workspaceId: 'ws-b', branch: 'b', path: 'b.md' });
|
|
@@ -276,7 +276,7 @@ describe('WorkflowEventBus', () => {
|
|
|
276
276
|
// The bus's BUFFER_CAPACITY is 500 — emit one more than that to
|
|
277
277
|
// force eviction of id 1, then ask to replay after id 0 (which
|
|
278
278
|
// sits BEFORE the now-evicted id 1).
|
|
279
|
-
const bus = new
|
|
279
|
+
const bus = new VersionControlEventBus();
|
|
280
280
|
for (let i = 0; i < 501; i++) {
|
|
281
281
|
bus.emit({ kind: 'change-request-merged', number: i + 1 });
|
|
282
282
|
}
|
|
@@ -298,7 +298,7 @@ describe('WorkflowEventBus', () => {
|
|
|
298
298
|
// entirely different events. Returning `[]` would silently lie.
|
|
299
299
|
// The bus must return `null` so the route emits a `resync` and the
|
|
300
300
|
// client refetches state from scratch.
|
|
301
|
-
const bus = new
|
|
301
|
+
const bus = new VersionControlEventBus();
|
|
302
302
|
const sub = { userId: 'u-1', getFocusedWorkspaceIds: () => [] };
|
|
303
303
|
expect(bus.replayAfter(42, sub)).toBeNull();
|
|
304
304
|
// First-time client (Last-Event-ID === 0) on an empty buffer is
|
|
@@ -313,7 +313,7 @@ describe('WorkflowEventBus', () => {
|
|
|
313
313
|
// the linear `id > lastSeenId` filter would return empty — but the
|
|
314
314
|
// client has actually missed everything in the new id space too.
|
|
315
315
|
// Force a resync so they refetch.
|
|
316
|
-
const bus = new
|
|
316
|
+
const bus = new VersionControlEventBus();
|
|
317
317
|
for (let i = 0; i < 5; i++) {
|
|
318
318
|
bus.emit({ kind: 'change-request-merged', number: i + 1 });
|
|
319
319
|
}
|
|
@@ -329,7 +329,7 @@ describe('WorkflowEventBus', () => {
|
|
|
329
329
|
|
|
330
330
|
describe('subscriber lifecycle', () => {
|
|
331
331
|
it('unsubscribe removes the subscriber from future fan-out', () => {
|
|
332
|
-
const bus = new
|
|
332
|
+
const bus = new VersionControlEventBus();
|
|
333
333
|
const sub = makeSubscriber('s-1', 'u-1', 'ws-a');
|
|
334
334
|
const off = bus.subscribe(sub);
|
|
335
335
|
bus.emit({ kind: 'lock-released', workspaceId: 'ws-a', branch: 'a', path: 'x.md' });
|
|
@@ -340,7 +340,7 @@ describe('WorkflowEventBus', () => {
|
|
|
340
340
|
});
|
|
341
341
|
|
|
342
342
|
it('does not double-emit when a subscriber re-registers with the same sessionId', () => {
|
|
343
|
-
const bus = new
|
|
343
|
+
const bus = new VersionControlEventBus();
|
|
344
344
|
const first = makeSubscriber('s-1', 'u-1', 'ws-a');
|
|
345
345
|
const second = makeSubscriber('s-1', 'u-1', 'ws-a'); // same id
|
|
346
346
|
bus.subscribe(first);
|
|
@@ -355,7 +355,7 @@ describe('WorkflowEventBus', () => {
|
|
|
355
355
|
});
|
|
356
356
|
|
|
357
357
|
it('absorbs handler exceptions so one bad subscriber does not break the fan-out', () => {
|
|
358
|
-
const bus = new
|
|
358
|
+
const bus = new VersionControlEventBus();
|
|
359
359
|
const exploder = makeSubscriber('s-bad', 'u-1', 'ws-a');
|
|
360
360
|
exploder.push.mockImplementation(() => { throw new Error('boom'); });
|
|
361
361
|
const healthy = makeSubscriber('s-good', 'u-2', 'ws-a');
|
|
@@ -369,7 +369,7 @@ describe('WorkflowEventBus', () => {
|
|
|
369
369
|
});
|
|
370
370
|
|
|
371
371
|
it('size() reflects active subscribers', () => {
|
|
372
|
-
const bus = new
|
|
372
|
+
const bus = new VersionControlEventBus();
|
|
373
373
|
expect(bus.size()).toBe(0);
|
|
374
374
|
const off1 = bus.subscribe(makeSubscriber('s-1', 'u-1'));
|
|
375
375
|
const off2 = bus.subscribe(makeSubscriber('s-2', 'u-2'));
|
|
@@ -383,7 +383,7 @@ describe('WorkflowEventBus', () => {
|
|
|
383
383
|
|
|
384
384
|
describe('onEmit — the server-side tap', () => {
|
|
385
385
|
it('sees every event, unfiltered by SSE scope, and unsubscribes cleanly', () => {
|
|
386
|
-
const bus = new
|
|
386
|
+
const bus = new VersionControlEventBus();
|
|
387
387
|
const seen: string[] = [];
|
|
388
388
|
const off = bus.onEmit((e) => seen.push(e.kind));
|
|
389
389
|
// A workspace-scoped event with NO matching SSE session still reaches
|
|
@@ -397,7 +397,7 @@ describe('WorkflowEventBus', () => {
|
|
|
397
397
|
});
|
|
398
398
|
|
|
399
399
|
it('a throwing listener is contained — emit never propagates it', () => {
|
|
400
|
-
const bus = new
|
|
400
|
+
const bus = new VersionControlEventBus();
|
|
401
401
|
const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
|
402
402
|
bus.onEmit(() => {
|
|
403
403
|
throw new Error('bad listener');
|
|
@@ -2,9 +2,9 @@ import type { Server as HttpServer } from 'node:http';
|
|
|
2
2
|
import type { AddressInfo } from 'node:net';
|
|
3
3
|
import express from 'express';
|
|
4
4
|
import { afterEach, describe, expect, it } from 'vitest';
|
|
5
|
-
import type {
|
|
5
|
+
import type { VersionControlEvent, VersionControlEventPayload } from '@bevel-software/platform-shared';
|
|
6
6
|
import {
|
|
7
|
-
|
|
7
|
+
VersionControlEventBus,
|
|
8
8
|
createEventsRoutes,
|
|
9
9
|
EventDelivery,
|
|
10
10
|
createEventAccess,
|
|
@@ -80,7 +80,7 @@ afterEach(() => {
|
|
|
80
80
|
for (const s of servers.splice(0)) s.close();
|
|
81
81
|
});
|
|
82
82
|
|
|
83
|
-
function listen(bus:
|
|
83
|
+
function listen(bus: VersionControlEventBus, access: EventAccess): string {
|
|
84
84
|
const app = express();
|
|
85
85
|
const auth: express.RequestHandler = (req, res, next) => {
|
|
86
86
|
const user = USERS[String(req.headers['x-test-user'])];
|
|
@@ -99,9 +99,9 @@ function listen(bus: WorkflowEventBus, access: EventAccess): string {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
interface Stream {
|
|
102
|
-
events:
|
|
102
|
+
events: VersionControlEvent[];
|
|
103
103
|
/** Resolves once an event matching `pred` has arrived. */
|
|
104
|
-
until: (pred: (e:
|
|
104
|
+
until: (pred: (e: VersionControlEvent) => boolean) => Promise<void>;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
async function open(base: string, user: string, sessionId: string, lastEventId?: number): Promise<Stream> {
|
|
@@ -112,8 +112,8 @@ async function open(base: string, user: string, sessionId: string, lastEventId?:
|
|
|
112
112
|
signal: abort.signal,
|
|
113
113
|
});
|
|
114
114
|
expect(res.status).toBe(200);
|
|
115
|
-
const events:
|
|
116
|
-
const waiters: Array<{ pred: (e:
|
|
115
|
+
const events: VersionControlEvent[] = [];
|
|
116
|
+
const waiters: Array<{ pred: (e: VersionControlEvent) => boolean; resolve: () => void }> = [];
|
|
117
117
|
void (async () => {
|
|
118
118
|
const decoder = new TextDecoder();
|
|
119
119
|
let buf = '';
|
|
@@ -126,7 +126,7 @@ async function open(base: string, user: string, sessionId: string, lastEventId?:
|
|
|
126
126
|
buf = buf.slice(end + 2);
|
|
127
127
|
const data = frame.split('\n').find((l) => l.startsWith('data: '));
|
|
128
128
|
if (!data) continue;
|
|
129
|
-
const event = JSON.parse(data.slice('data: '.length)) as
|
|
129
|
+
const event = JSON.parse(data.slice('data: '.length)) as VersionControlEvent;
|
|
130
130
|
events.push(event);
|
|
131
131
|
for (const w of [...waiters]) {
|
|
132
132
|
if (w.pred(event)) {
|
|
@@ -156,7 +156,7 @@ async function focus(base: string, user: string, sessionId: string): Promise<voi
|
|
|
156
156
|
expect(res.status).toBe(200);
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
const fileChanged = (path: string):
|
|
159
|
+
const fileChanged = (path: string): VersionControlEventPayload => ({
|
|
160
160
|
kind: 'file-changed',
|
|
161
161
|
workspaceId: WS,
|
|
162
162
|
branch: WS,
|
|
@@ -165,7 +165,7 @@ const fileChanged = (path: string): WorkflowEventPayload => ({
|
|
|
165
165
|
byUserId: 'alice',
|
|
166
166
|
byUserName: 'Alice',
|
|
167
167
|
});
|
|
168
|
-
const lockAcquired = (path: string):
|
|
168
|
+
const lockAcquired = (path: string): VersionControlEventPayload => ({
|
|
169
169
|
kind: 'lock-acquired',
|
|
170
170
|
workspaceId: WS,
|
|
171
171
|
branch: WS,
|
|
@@ -173,8 +173,8 @@ const lockAcquired = (path: string): WorkflowEventPayload => ({
|
|
|
173
173
|
holderUserId: 'alice',
|
|
174
174
|
holderName: 'Alice',
|
|
175
175
|
});
|
|
176
|
-
const lockReleased = (path: string):
|
|
177
|
-
const approval = (number: number, path: string):
|
|
176
|
+
const lockReleased = (path: string): VersionControlEventPayload => ({ kind: 'lock-released', workspaceId: WS, branch: WS, path });
|
|
177
|
+
const approval = (number: number, path: string): VersionControlEventPayload => ({
|
|
178
178
|
kind: 'approval-changed',
|
|
179
179
|
number,
|
|
180
180
|
path,
|
|
@@ -182,25 +182,25 @@ const approval = (number: number, path: string): WorkflowEventPayload => ({
|
|
|
182
182
|
approverUserId: 'alice',
|
|
183
183
|
change: 'added',
|
|
184
184
|
});
|
|
185
|
-
const opened = (number: number):
|
|
185
|
+
const opened = (number: number): VersionControlEventPayload => ({
|
|
186
186
|
kind: 'change-request-opened',
|
|
187
187
|
number,
|
|
188
188
|
source: 'alice/draft',
|
|
189
189
|
target: 'main',
|
|
190
190
|
authorIdHash: null,
|
|
191
191
|
});
|
|
192
|
-
const documentUnreadable = (path: string):
|
|
192
|
+
const documentUnreadable = (path: string): VersionControlEventPayload => ({
|
|
193
193
|
kind: 'document-unreadable',
|
|
194
194
|
workspaceId: WS,
|
|
195
195
|
path,
|
|
196
196
|
reason: 'could not be parsed as a PDF (Invalid XRef stream header)',
|
|
197
197
|
});
|
|
198
198
|
/** Something everybody on the workspace may have; once it arrives, everything emitted before it was judged. */
|
|
199
|
-
const SENTINEL:
|
|
200
|
-
const isSentinel = (e:
|
|
199
|
+
const SENTINEL: VersionControlEventPayload = { kind: 'fs-tree-changed', workspaceId: WS, branch: WS };
|
|
200
|
+
const isSentinel = (e: VersionControlEvent) => e.kind === 'fs-tree-changed';
|
|
201
201
|
|
|
202
202
|
/** Emit `payloads`, then the sentinel, and wait for it on every stream. */
|
|
203
|
-
async function emitAndSettle(bus:
|
|
203
|
+
async function emitAndSettle(bus: VersionControlEventBus, payloads: VersionControlEventPayload[], ...on: Stream[]) {
|
|
204
204
|
for (const p of payloads) bus.emit(p);
|
|
205
205
|
const sentinel = bus.emit(SENTINEL);
|
|
206
206
|
await Promise.all(on.map((s) => s.until((e) => e.id === sentinel.id)));
|
|
@@ -210,7 +210,7 @@ const kinds = (s: Stream) => s.events.filter((e) => !isSentinel(e)).map((e) => `
|
|
|
210
210
|
|
|
211
211
|
describe('events route — delivery rule', () => {
|
|
212
212
|
it('a write, a lock and an approval in a folder reach the reader of the folder, not the other person', async () => {
|
|
213
|
-
const bus = new
|
|
213
|
+
const bus = new VersionControlEventBus();
|
|
214
214
|
const base = listen(bus, fakeAccess());
|
|
215
215
|
const alice = await open(base, 'alice', 's-alice');
|
|
216
216
|
const bob = await open(base, 'bob', 's-bob');
|
|
@@ -237,7 +237,7 @@ describe('events route — delivery rule', () => {
|
|
|
237
237
|
// The kind names a path on a workspace, so the structural rule judges it
|
|
238
238
|
// as it judges a write: the same gate the file routes apply, and nothing
|
|
239
239
|
// the rule has to be taught per kind.
|
|
240
|
-
const bus = new
|
|
240
|
+
const bus = new VersionControlEventBus();
|
|
241
241
|
const base = listen(bus, fakeAccess());
|
|
242
242
|
const alice = await open(base, 'alice', 's-alice');
|
|
243
243
|
const bob = await open(base, 'bob', 's-bob');
|
|
@@ -253,7 +253,7 @@ describe('events route — delivery rule', () => {
|
|
|
253
253
|
});
|
|
254
254
|
|
|
255
255
|
it('a person keeps every event for what they may read, unchanged and in order', async () => {
|
|
256
|
-
const bus = new
|
|
256
|
+
const bus = new VersionControlEventBus();
|
|
257
257
|
const base = listen(bus, fakeAccess());
|
|
258
258
|
const bob = await open(base, 'bob', 's-bob');
|
|
259
259
|
await focus(base, 'bob', 's-bob');
|
|
@@ -265,7 +265,7 @@ describe('events route — delivery rule', () => {
|
|
|
265
265
|
});
|
|
266
266
|
|
|
267
267
|
it('a request the person may not see produces no change-request-opened for them; its author always hears of it', async () => {
|
|
268
|
-
const bus = new
|
|
268
|
+
const bus = new VersionControlEventBus();
|
|
269
269
|
const base = listen(bus, fakeAccess());
|
|
270
270
|
const alice = await open(base, 'alice', 's-alice');
|
|
271
271
|
const bob = await open(base, 'bob', 's-bob');
|
|
@@ -289,7 +289,7 @@ describe('events route — delivery rule', () => {
|
|
|
289
289
|
});
|
|
290
290
|
|
|
291
291
|
it('replay after a reconnect obeys the same rule', async () => {
|
|
292
|
-
const bus = new
|
|
292
|
+
const bus = new VersionControlEventBus();
|
|
293
293
|
const base = listen(bus, fakeAccess());
|
|
294
294
|
const before = bus.emit(SENTINEL);
|
|
295
295
|
bus.emit(opened(FINANCE_REQUEST));
|
|
@@ -312,19 +312,19 @@ describe('events route — delivery rule', () => {
|
|
|
312
312
|
});
|
|
313
313
|
|
|
314
314
|
it('the focus list still decides which workspaces a session hears about', async () => {
|
|
315
|
-
const bus = new
|
|
315
|
+
const bus = new VersionControlEventBus();
|
|
316
316
|
const base = listen(bus, fakeAccess());
|
|
317
317
|
const alice = await open(base, 'alice', 's-alice');
|
|
318
318
|
await focus(base, 'alice', 's-alice');
|
|
319
319
|
|
|
320
|
-
bus.emit({ ...fileChanged(PUBLIC), workspaceId: 'elsewhere' } as
|
|
320
|
+
bus.emit({ ...fileChanged(PUBLIC), workspaceId: 'elsewhere' } as VersionControlEventPayload);
|
|
321
321
|
await emitAndSettle(bus, [], alice);
|
|
322
322
|
|
|
323
323
|
expect(kinds(alice)).toEqual([]);
|
|
324
324
|
});
|
|
325
325
|
|
|
326
326
|
it('a grant shows on the next event, without a reconnect', async () => {
|
|
327
|
-
const bus = new
|
|
327
|
+
const bus = new VersionControlEventBus();
|
|
328
328
|
const access = fakeAccess();
|
|
329
329
|
const base = listen(bus, access);
|
|
330
330
|
const bob = await open(base, 'bob', 's-bob');
|
|
@@ -338,7 +338,7 @@ describe('events route — delivery rule', () => {
|
|
|
338
338
|
});
|
|
339
339
|
|
|
340
340
|
it('replay after a reconnect asks again: a revocation since the event was first delivered withholds it', async () => {
|
|
341
|
-
const bus = new
|
|
341
|
+
const bus = new VersionControlEventBus();
|
|
342
342
|
const access = fakeAccess();
|
|
343
343
|
access.grantBob();
|
|
344
344
|
const base = listen(bus, access);
|
|
@@ -367,7 +367,7 @@ describe('events route — delivery rule', () => {
|
|
|
367
367
|
});
|
|
368
368
|
|
|
369
369
|
it("keeps a session's stream in emission order when a later verdict settles first, live and on replay", async () => {
|
|
370
|
-
const bus = new
|
|
370
|
+
const bus = new VersionControlEventBus();
|
|
371
371
|
const base0 = fakeAccess();
|
|
372
372
|
// The verdict on the Finance file takes a while; every other one is immediate.
|
|
373
373
|
const access: EventAccess = {
|
|
@@ -401,7 +401,7 @@ describe('events route — delivery rule', () => {
|
|
|
401
401
|
});
|
|
402
402
|
|
|
403
403
|
it('a request check that fails withholds that approval and that announcement, and nothing after them', async () => {
|
|
404
|
-
const bus = new
|
|
404
|
+
const bus = new VersionControlEventBus();
|
|
405
405
|
const unreadable = () => Promise.reject(new Error('access tree unreadable'));
|
|
406
406
|
const access: EventAccess = { ...fakeAccess(), readableAtTarget: unreadable, readableAtBase: unreadable };
|
|
407
407
|
const base = listen(bus, access);
|
|
@@ -416,7 +416,7 @@ describe('events route — delivery rule', () => {
|
|
|
416
416
|
|
|
417
417
|
it('a lock whose path lacks the knowledge-base/ prefix is judged as the repository path it names', async () => {
|
|
418
418
|
// The real access wiring over a fake access service: Bob may not read `Finance/`.
|
|
419
|
-
const bus = new
|
|
419
|
+
const bus = new VersionControlEventBus();
|
|
420
420
|
const access = createEventAccess({
|
|
421
421
|
accessControl: {
|
|
422
422
|
canRead: async (_ws, email, rel) => email !== USERS.bob!.email || !rel.startsWith('Finance/'),
|
|
@@ -452,7 +452,7 @@ describe('events route — delivery rule', () => {
|
|
|
452
452
|
});
|
|
453
453
|
|
|
454
454
|
it("an agent's tool call reaches its own person through the route, nobody else — an admin included", async () => {
|
|
455
|
-
const bus = new
|
|
455
|
+
const bus = new VersionControlEventBus();
|
|
456
456
|
const base = listen(bus, fakeAccess());
|
|
457
457
|
const alice = await open(base, 'alice', 's-alice');
|
|
458
458
|
const bob = await open(base, 'bob', 's-bob');
|
|
@@ -474,7 +474,7 @@ describe('events route — delivery rule', () => {
|
|
|
474
474
|
});
|
|
475
475
|
|
|
476
476
|
it('fans one event out to 100 sessions through the route, each getting what it may read', async () => {
|
|
477
|
-
const bus = new
|
|
477
|
+
const bus = new VersionControlEventBus();
|
|
478
478
|
const base = listen(bus, fakeAccess());
|
|
479
479
|
const sessions = await Promise.all(
|
|
480
480
|
Array.from({ length: 100 }, async (_, i) => {
|
|
@@ -502,7 +502,7 @@ describe('events route — delivery rule', () => {
|
|
|
502
502
|
});
|
|
503
503
|
|
|
504
504
|
it("git-sync-failed carries git's words only to who may read the root and every conflicted file", async () => {
|
|
505
|
-
const bus = new
|
|
505
|
+
const bus = new VersionControlEventBus();
|
|
506
506
|
const base = listen(bus, fakeAccess());
|
|
507
507
|
const people = ['alice', 'bob', 'carol'] as const;
|
|
508
508
|
const [alice, bob, carol] = await Promise.all(people.map((u) => open(base, u, `s-${u}`)));
|
|
@@ -532,7 +532,7 @@ describe('events route — delivery rule', () => {
|
|
|
532
532
|
});
|
|
533
533
|
|
|
534
534
|
it('git-sync-failed with no conflict keeps its sentence for a root reader and redacts it for the rest', async () => {
|
|
535
|
-
const bus = new
|
|
535
|
+
const bus = new VersionControlEventBus();
|
|
536
536
|
const base = listen(bus, fakeAccess());
|
|
537
537
|
const carol = await open(base, 'carol', 's-carol');
|
|
538
538
|
const bob = await open(base, 'bob', 's-bob');
|
|
@@ -549,8 +549,8 @@ describe('events route — delivery rule', () => {
|
|
|
549
549
|
});
|
|
550
550
|
|
|
551
551
|
describe('EventDelivery', () => {
|
|
552
|
-
const judge = (event:
|
|
553
|
-
const stamp = (p:
|
|
552
|
+
const judge = (event: VersionControlEvent, viewer: EventViewer, access: EventAccess) => new EventDelivery(access).judge(event, viewer);
|
|
553
|
+
const stamp = (p: VersionControlEventPayload, id = 1): VersionControlEvent => ({ id, ts: '2026-10-19T00:00:00.000Z', ...p }) as VersionControlEvent;
|
|
554
554
|
const toolCall = stamp({ kind: 'agent-tool-call', forUserId: 'alice', threadId: 't', tool: 'write_file', summary: `writing ${FINANCE}` });
|
|
555
555
|
|
|
556
556
|
it('agent-tool-call reaches the person whose agent made the call, nobody else', async () => {
|
|
@@ -736,7 +736,7 @@ describe('createEventAccess', () => {
|
|
|
736
736
|
it("reads a request once for one event's whole fan-out, and again for the next", async () => {
|
|
737
737
|
requestReads.length = 0;
|
|
738
738
|
const delivery = new EventDelivery(access);
|
|
739
|
-
const event = { id: 1, ts: '2026-10-21T00:00:00.000Z', ...opened(FINANCE_REQUEST) } as
|
|
739
|
+
const event = { id: 1, ts: '2026-10-21T00:00:00.000Z', ...opened(FINANCE_REQUEST) } as VersionControlEvent;
|
|
740
740
|
const viewers = Array.from({ length: 100 }, (_, i) => ({ userId: `u${i}`, email: `u${i}@example.com` }));
|
|
741
741
|
// Nobody here reads `Finance/` and nobody wrote #7: hidden from all of them.
|
|
742
742
|
expect((await Promise.all(viewers.map((v) => delivery.judge(event, v)))).filter(Boolean)).toHaveLength(0);
|
|
@@ -764,7 +764,7 @@ describe('createEventAccess', () => {
|
|
|
764
764
|
});
|
|
765
765
|
const delivery = new EventDelivery(moved);
|
|
766
766
|
const bob = { userId: 'bob', email: USERS.bob!.email };
|
|
767
|
-
const stampOpened = (n: number) => ({ id: n, ts: '2026-10-21T00:00:00.000Z', ...opened(n) }) as
|
|
767
|
+
const stampOpened = (n: number) => ({ id: n, ts: '2026-10-21T00:00:00.000Z', ...opened(n) }) as VersionControlEvent;
|
|
768
768
|
expect(await delivery.judge(stampOpened(1), bob)).toBeNull();
|
|
769
769
|
expect(await delivery.judge(stampOpened(2), bob)).toBeNull();
|
|
770
770
|
// The control: the same file, not moved, is readable at the base and shows the request.
|
package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts
RENAMED
|
@@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach } from 'vitest';
|
|
|
2
2
|
import type { AuthUser } from '@bevel-software/platform-shared';
|
|
3
3
|
import type { Database } from '../../database/connection.js';
|
|
4
4
|
import { FileLockService } from '../file-lock.service.js';
|
|
5
|
-
import {
|
|
5
|
+
import { VersionControlValidationError } from '../../../shared/domain-errors.js';
|
|
6
6
|
import { makeFakeLockDb, type FakeLockDb } from './fake-file-lock-db.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -82,7 +82,7 @@ describe('FileLockService deletion gate', () => {
|
|
|
82
82
|
await locks.whileNoneAcquired(BRANCH, async () => {
|
|
83
83
|
refused = await locks.acquire(WS, BRANCH, PATH, ALICE).catch((err: unknown) => err);
|
|
84
84
|
});
|
|
85
|
-
expect(refused).toBeInstanceOf(
|
|
85
|
+
expect(refused).toBeInstanceOf(VersionControlValidationError);
|
|
86
86
|
expect(fake.rows()).toHaveLength(0);
|
|
87
87
|
// And grants it again once the deletion is over.
|
|
88
88
|
await expect(locks.acquire(WS, BRANCH, PATH, ALICE)).resolves.toMatchObject({ acquired: true });
|
package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
2
|
import type { AuthUser } from '@bevel-software/platform-shared';
|
|
3
3
|
import { FileLockService } from '../file-lock.service.js';
|
|
4
|
-
import { PathTraversalError,
|
|
4
|
+
import { PathTraversalError, VersionControlValidationError } from '../../../shared/domain-errors.js';
|
|
5
5
|
import { makeFakeLockDb, type FakeLockDb, type LockRow } from './fake-file-lock-db.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -127,12 +127,12 @@ describe('FileLockService coordinates on one canonical path', () => {
|
|
|
127
127
|
*/
|
|
128
128
|
describe('refuses a path the file verbs would refuse', () => {
|
|
129
129
|
const REFUSED: [string, string, new () => Error][] = [
|
|
130
|
-
['climbs out of the workspace', '../etc/passwd',
|
|
131
|
-
['climbs out from inside', 'knowledge-base/../../etc/passwd',
|
|
132
|
-
['launders back inside', 'knowledge-base/x/../y.md',
|
|
133
|
-
['is a bare parent', '..',
|
|
134
|
-
['is the current directory', '.',
|
|
135
|
-
['uses backslashes', 'knowledge-base\\x\\a.md',
|
|
130
|
+
['climbs out of the workspace', '../etc/passwd', VersionControlValidationError],
|
|
131
|
+
['climbs out from inside', 'knowledge-base/../../etc/passwd', VersionControlValidationError],
|
|
132
|
+
['launders back inside', 'knowledge-base/x/../y.md', VersionControlValidationError],
|
|
133
|
+
['is a bare parent', '..', VersionControlValidationError],
|
|
134
|
+
['is the current directory', '.', VersionControlValidationError],
|
|
135
|
+
['uses backslashes', 'knowledge-base\\x\\a.md', VersionControlValidationError],
|
|
136
136
|
['is absolute', '/etc/passwd', PathTraversalError],
|
|
137
137
|
];
|
|
138
138
|
|
|
@@ -209,7 +209,7 @@ describe('FileLockService coordinates on one canonical path', () => {
|
|
|
209
209
|
|
|
210
210
|
it('is not migrated or extended: its holder cannot heartbeat it by its old name', async () => {
|
|
211
211
|
await expect(locks.heartbeat(WS, BRANCH, RAW, ALICE)).rejects.toBeInstanceOf(
|
|
212
|
-
|
|
212
|
+
VersionControlValidationError,
|
|
213
213
|
);
|
|
214
214
|
|
|
215
215
|
// Not rewritten to the canonical key, and the TTL is its own.
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { describe, it, expect, vi } from 'vitest';
|
|
2
2
|
import { testKbContext } from '../../../__tests__/kb-context.js';
|
|
3
|
-
import type {
|
|
3
|
+
import type { VersionControlEvent } from '@bevel-software/platform-shared';
|
|
4
4
|
|
|
5
5
|
import type { GitService } from '../git/git.service.js';
|
|
6
6
|
import type { PullRequestService } from '../git/pull-request.service.js';
|
|
7
|
-
import type {
|
|
7
|
+
import type { IChangeRequestReviewService } from '../change-request-review/change-request-review.interface.js';
|
|
8
8
|
import type { WorkspaceService } from '../../workspace/workspace.service.js';
|
|
9
9
|
import type { IAccessControl } from '../../access/access-control.interface.js';
|
|
10
10
|
import type { FileLockService } from '../file-lock.service.js';
|
|
11
11
|
import type { PendingCommitsService } from '../pending-commits.service.js';
|
|
12
|
-
import type {
|
|
12
|
+
import type { VersionControlEventBus } from '../event-bus.js';
|
|
13
13
|
import type { Database } from '../../database/connection.js';
|
|
14
|
-
import {
|
|
14
|
+
import { VersionControlService } from '../version-control.service.js';
|
|
15
15
|
import { openChangeGate } from '../../../__tests__/open-change-gate.js';
|
|
16
16
|
|
|
17
17
|
/**
|
|
@@ -62,19 +62,19 @@ function makeSvc(
|
|
|
62
62
|
opts: { base?: string; pullTreeChanged?: boolean; mergeThrows?: Error; pullThrows?: Error } = {},
|
|
63
63
|
) {
|
|
64
64
|
const base = opts.base ?? TRUNK;
|
|
65
|
-
const events:
|
|
65
|
+
const events: VersionControlEvent[] = [];
|
|
66
66
|
const bus = {
|
|
67
|
-
emit: vi.fn((payload:
|
|
67
|
+
emit: vi.fn((payload: VersionControlEvent) => {
|
|
68
68
|
events.push(payload);
|
|
69
69
|
return payload;
|
|
70
70
|
}),
|
|
71
|
-
} as unknown as
|
|
71
|
+
} as unknown as VersionControlEventBus;
|
|
72
72
|
|
|
73
|
-
const
|
|
73
|
+
const changeRequestReview = {
|
|
74
74
|
mergePr: opts.mergeThrows
|
|
75
75
|
? vi.fn().mockRejectedValue(opts.mergeThrows)
|
|
76
76
|
: vi.fn().mockResolvedValue({ prNumber: 1, sha: 'merged-sha', mergedAt: 't' }),
|
|
77
|
-
} as unknown as
|
|
77
|
+
} as unknown as IChangeRequestReviewService;
|
|
78
78
|
|
|
79
79
|
const git = {
|
|
80
80
|
fetch: vi.fn().mockResolvedValue(undefined),
|
|
@@ -99,11 +99,11 @@ function makeSvc(
|
|
|
99
99
|
getWorkspacePath: vi.fn(async (id: string) => `/tmp/${id}`),
|
|
100
100
|
} as unknown as WorkspaceService;
|
|
101
101
|
|
|
102
|
-
const svc = new
|
|
102
|
+
const svc = new VersionControlService(
|
|
103
103
|
{} as unknown as Database,
|
|
104
104
|
git,
|
|
105
105
|
prs,
|
|
106
|
-
|
|
106
|
+
changeRequestReview,
|
|
107
107
|
workspaceService,
|
|
108
108
|
noopAccessControl(),
|
|
109
109
|
{ acquire: vi.fn(), release: vi.fn() } as unknown as FileLockService,
|