@bevel-software/platform-core-backend 0.35.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +72 -57
- 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/connection.d.ts.map +1 -1
- package/dist/modules/database/connection.js +11 -0
- package/dist/modules/database/connection.js.map +1 -1
- package/dist/modules/database/core-schema.js +2 -2
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/diff/diff.routes.d.ts +3 -3
- package/dist/modules/diff/diff.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.js +7 -7
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/embed/embed.routes.js +1 -1
- package/dist/modules/embed/embed.routes.js.map +1 -1
- package/dist/modules/embed/embed.service.d.ts +4 -4
- package/dist/modules/embed/embed.service.d.ts.map +1 -1
- package/dist/modules/embed/embed.service.js +18 -18
- package/dist/modules/embed/embed.service.js.map +1 -1
- package/dist/modules/kb-fs/branch-name.js +8 -8
- package/dist/modules/kb-fs/branch-name.js.map +1 -1
- package/dist/modules/kb-fs/file-change-notifier.d.ts +51 -26
- package/dist/modules/kb-fs/file-change-notifier.d.ts.map +1 -1
- package/dist/modules/kb-fs/file-change-notifier.js +6 -8
- package/dist/modules/kb-fs/file-change-notifier.js.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -16
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +31 -39
- 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 +5 -7
- 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 +26 -8
- package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.js +106 -55
- 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} +33 -6
- 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} +20 -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 -46
- 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} +93 -107
- 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/fire-and-forget.d.ts +14 -0
- package/dist/shared/fire-and-forget.d.ts.map +1 -0
- package/dist/shared/fire-and-forget.js +23 -0
- package/dist/shared/fire-and-forget.js.map +1 -0
- 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__/capturing-logger.ts +36 -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__/real-access.ts +16 -0
- package/src/__tests__/real-auth.ts +13 -0
- package/src/__tests__/real-readers.ts +27 -0
- package/src/__tests__/real-version-control.ts +22 -0
- 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__/commit-announcements-wired-once.test.ts +53 -0
- 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 +83 -65
- 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 +23 -23
- 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 +44 -44
- package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
- package/src/modules/access/__tests__/roles-admin.service.test.ts +34 -34
- package/src/modules/access/__tests__/roles-capabilities.test.ts +29 -29
- package/src/modules/access/__tests__/roles.routes.test.ts +11 -11
- package/src/modules/access/__tests__/synced-groups-committer.test.ts +14 -14
- package/src/modules/access/__tests__/user-access-removal.service.test.ts +33 -33
- 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__/connection.pg.test.ts +55 -0
- package/src/modules/database/__tests__/connection.test.ts +30 -0
- package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
- package/src/modules/database/connection.ts +12 -0
- 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 +48 -62
- 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__/file-change-notifier.test.ts +23 -4
- package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +264 -305
- package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +103 -40
- 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 +55 -32
- package/src/modules/kb-fs/locking-filesystem.ts +34 -48
- 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 +59 -59
- 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 +7 -9
- 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__/plugin-rename.service.test.ts +46 -21
- package/src/modules/plugins/__tests__/plugins.routes.test.ts +31 -31
- 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} +100 -102
- 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} +85 -75
- 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/version-control/git/__tests__/git.service.commitLanded.test.ts +199 -0
- 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 +99 -22
- 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 +112 -59
- 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} +44 -5
- 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} +96 -109
- 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__/fire-and-forget.test.ts +39 -0
- 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/fire-and-forget.ts +26 -0
- 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
|
@@ -3,14 +3,14 @@ import { testKbContext } from '../../../__tests__/kb-context.js';
|
|
|
3
3
|
import type { RemoteSyncPullResult } from '@bevel-software/platform-shared';
|
|
4
4
|
import type { GitService } from '../git/git.service.js';
|
|
5
5
|
import type { PullRequestService } from '../git/pull-request.service.js';
|
|
6
|
-
import type {
|
|
6
|
+
import type { IChangeRequestReviewService } from '../change-request-review/change-request-review.interface.js';
|
|
7
7
|
import type { WorkspaceService } from '../../workspace/workspace.service.js';
|
|
8
8
|
import type { IAccessControl } from '../../access/access-control.interface.js';
|
|
9
9
|
import type { FileLockService } from '../file-lock.service.js';
|
|
10
10
|
import type { PendingCommitsService } from '../pending-commits.service.js';
|
|
11
|
-
import type {
|
|
11
|
+
import type { VersionControlEventBus } from '../event-bus.js';
|
|
12
12
|
import type { Database } from '../../database/connection.js';
|
|
13
|
-
import {
|
|
13
|
+
import { VersionControlService, syncConflictMessage } from '../version-control.service.js';
|
|
14
14
|
import { PullRebaseConflictError, RemoteBranchGoneError } from '../../../shared/domain-errors.js';
|
|
15
15
|
import { openChangeGate } from '../../../__tests__/open-change-gate.js';
|
|
16
16
|
|
|
@@ -28,12 +28,12 @@ function build(opts: { sync: () => Promise<RemoteSyncPullResult> }) {
|
|
|
28
28
|
const git = { syncFromRemote: vi.fn(opts.sync) } as unknown as GitService;
|
|
29
29
|
const prs = { invalidateListCache: vi.fn() } as unknown as PullRequestService;
|
|
30
30
|
const pendingCommits = { enqueueIfAbsent: vi.fn(async () => true) } as unknown as PendingCommitsService;
|
|
31
|
-
const events = { emit: vi.fn() } as unknown as
|
|
32
|
-
const svc = new
|
|
31
|
+
const events = { emit: vi.fn() } as unknown as VersionControlEventBus;
|
|
32
|
+
const svc = new VersionControlService(
|
|
33
33
|
{} as Database,
|
|
34
34
|
git,
|
|
35
35
|
prs,
|
|
36
|
-
{} as
|
|
36
|
+
{} as IChangeRequestReviewService,
|
|
37
37
|
{} as WorkspaceService,
|
|
38
38
|
{} as IAccessControl,
|
|
39
39
|
{} as FileLockService,
|
|
@@ -48,7 +48,7 @@ function build(opts: { sync: () => Promise<RemoteSyncPullResult> }) {
|
|
|
48
48
|
const kinds = (emit: ReturnType<typeof vi.fn>) =>
|
|
49
49
|
emit.mock.calls.map((c) => (c[0] as { kind: string }).kind);
|
|
50
50
|
|
|
51
|
-
describe('
|
|
51
|
+
describe('VersionControlService.syncWorkspaceFromRemote', () => {
|
|
52
52
|
it('content changed: reports updated, announces the tree and each changed file, drops the CR list cache', async () => {
|
|
53
53
|
const { svc, prs, emit } = build({
|
|
54
54
|
sync: async () => ({ ...PULLED, changedPaths: ['Plugins/x/SKILL.md', 'Docs/a.md'] }),
|
|
@@ -246,7 +246,7 @@ describe('WorkflowService.syncWorkspaceFromRemote', () => {
|
|
|
246
246
|
});
|
|
247
247
|
});
|
|
248
248
|
|
|
249
|
-
describe('
|
|
249
|
+
describe('VersionControlService.retireRemoteGoneClone', () => {
|
|
250
250
|
function buildRetire(opts: { cloned: boolean; stillOnOrigin: boolean; bootstrapping?: boolean }) {
|
|
251
251
|
const git = {
|
|
252
252
|
remoteBranchExists: vi.fn(async () => opts.stillOnOrigin),
|
|
@@ -257,8 +257,8 @@ describe('WorkflowService.retireRemoteGoneClone', () => {
|
|
|
257
257
|
isBootstrapInFlight: vi.fn(() => opts.bootstrapping === true),
|
|
258
258
|
deleteWorkspace: vi.fn(async () => {}),
|
|
259
259
|
} as unknown as WorkspaceService;
|
|
260
|
-
const svc = new
|
|
261
|
-
{} as Database, git, {} as PullRequestService, {} as
|
|
260
|
+
const svc = new VersionControlService(
|
|
261
|
+
{} as Database, git, {} as PullRequestService, {} as IChangeRequestReviewService,
|
|
262
262
|
workspaceService, {} as IAccessControl, {} as FileLockService, {} as PendingCommitsService,
|
|
263
263
|
testKbContext(),
|
|
264
264
|
openChangeGate(),
|
|
@@ -317,7 +317,7 @@ describe('WorkflowService.retireRemoteGoneClone', () => {
|
|
|
317
317
|
});
|
|
318
318
|
});
|
|
319
319
|
|
|
320
|
-
describe('
|
|
320
|
+
describe('VersionControlService.retireRemoteGoneClone — what can bring the branch back', () => {
|
|
321
321
|
it('backs off while a clone of the branch is being bootstrapped', async () => {
|
|
322
322
|
const git = { remoteBranchExists: vi.fn(async () => false) } as unknown as GitService;
|
|
323
323
|
const workspaceService = {
|
|
@@ -325,8 +325,8 @@ describe('WorkflowService.retireRemoteGoneClone — what can bring the branch ba
|
|
|
325
325
|
isBootstrapInFlight: vi.fn(() => true),
|
|
326
326
|
deleteWorkspace: vi.fn(async () => {}),
|
|
327
327
|
} as unknown as WorkspaceService;
|
|
328
|
-
const svc = new
|
|
329
|
-
{} as Database, git, {} as PullRequestService, {} as
|
|
328
|
+
const svc = new VersionControlService(
|
|
329
|
+
{} as Database, git, {} as PullRequestService, {} as IChangeRequestReviewService,
|
|
330
330
|
workspaceService, {} as IAccessControl, {} as FileLockService, {} as PendingCommitsService,
|
|
331
331
|
testKbContext(),
|
|
332
332
|
openChangeGate(),
|
|
@@ -354,8 +354,8 @@ describe('WorkflowService.retireRemoteGoneClone — what can bring the branch ba
|
|
|
354
354
|
order.push('retire-deletes');
|
|
355
355
|
}),
|
|
356
356
|
} as unknown as WorkspaceService;
|
|
357
|
-
const svc = new
|
|
358
|
-
{} as Database, git, {} as PullRequestService, {} as
|
|
357
|
+
const svc = new VersionControlService(
|
|
358
|
+
{} as Database, git, {} as PullRequestService, {} as IChangeRequestReviewService,
|
|
359
359
|
workspaceService, {} as IAccessControl, {} as FileLockService, {} as PendingCommitsService,
|
|
360
360
|
testKbContext(),
|
|
361
361
|
openChangeGate(),
|
|
@@ -370,7 +370,7 @@ describe('WorkflowService.retireRemoteGoneClone — what can bring the branch ba
|
|
|
370
370
|
});
|
|
371
371
|
});
|
|
372
372
|
|
|
373
|
-
describe('
|
|
373
|
+
describe('VersionControlService.syncWorkspaceFromRemote — an announcement is owed until delivered', () => {
|
|
374
374
|
it('a retry after a failed announcement delivers it even though HEAD did not move again', async () => {
|
|
375
375
|
let head = 'bbb';
|
|
376
376
|
let pulls = 0;
|
|
@@ -420,7 +420,7 @@ describe('WorkflowService.syncWorkspaceFromRemote — an announcement is owed un
|
|
|
420
420
|
});
|
|
421
421
|
});
|
|
422
422
|
|
|
423
|
-
describe('
|
|
423
|
+
describe('VersionControlService.syncWorkspaceFromRemote — a debt dies with its clone', () => {
|
|
424
424
|
it('an announcement owed to a branch the host deleted is not replayed against a branch recreated under that name', async () => {
|
|
425
425
|
let pulls = 0;
|
|
426
426
|
const { svc, prs, emit } = build({
|
|
@@ -14,10 +14,10 @@ import type { IAccessControl } from '../../access/access-control.interface.js';
|
|
|
14
14
|
import type { WorkspaceService } from '../../workspace/workspace.service.js';
|
|
15
15
|
import type { GitService } from '../git/git.service.js';
|
|
16
16
|
import type { PullRequestService } from '../git/pull-request.service.js';
|
|
17
|
-
import type {
|
|
17
|
+
import type { IChangeRequestReviewService } from '../change-request-review/change-request-review.interface.js';
|
|
18
18
|
import type { FileLockService } from '../file-lock.service.js';
|
|
19
19
|
import type { PendingCommitsService } from '../pending-commits.service.js';
|
|
20
|
-
import {
|
|
20
|
+
import { VersionControlService } from '../version-control.service.js';
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* An edit against a real Postgres with column encryption ON. `title` and
|
|
@@ -30,7 +30,7 @@ const AUTHOR = 'alice@example.com';
|
|
|
30
30
|
const alice: AuthUser = { id: 'u-alice', email: AUTHOR, name: 'Alice' };
|
|
31
31
|
const open: Database[] = [];
|
|
32
32
|
|
|
33
|
-
async function seeded(): Promise<{ svc:
|
|
33
|
+
async function seeded(): Promise<{ svc: VersionControlService; db: Database; number: number }> {
|
|
34
34
|
const db = createDb(await scratchDatabaseUrl('hexis_cr_edit'), { piiKey: KEY });
|
|
35
35
|
open.push(db);
|
|
36
36
|
await runCoreMigrations(db, coreMigrationsDir());
|
|
@@ -56,11 +56,11 @@ async function seeded(): Promise<{ svc: WorkflowService; db: Database; number: n
|
|
|
56
56
|
}),
|
|
57
57
|
invalidateDetailCache: vi.fn(),
|
|
58
58
|
} as unknown as PullRequestService;
|
|
59
|
-
const svc = new
|
|
59
|
+
const svc = new VersionControlService(
|
|
60
60
|
db,
|
|
61
61
|
{} as GitService,
|
|
62
62
|
prs,
|
|
63
|
-
{} as
|
|
63
|
+
{} as IChangeRequestReviewService,
|
|
64
64
|
{} as WorkspaceService,
|
|
65
65
|
{} as IAccessControl,
|
|
66
66
|
{} as FileLockService,
|
|
@@ -71,7 +71,7 @@ async function seeded(): Promise<{ svc: WorkflowService; db: Database; number: n
|
|
|
71
71
|
return { svc, db, number };
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
describe.skipIf(!PG_ADMIN_URL)('
|
|
74
|
+
describe.skipIf(!PG_ADMIN_URL)('VersionControlService.updateChangeRequest on a real, encrypted Postgres', () => {
|
|
75
75
|
afterAll(async () => {
|
|
76
76
|
for (const db of open) await closeDb(db);
|
|
77
77
|
await dropScratchDatabases();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
-
import type { AuthUser,
|
|
2
|
+
import type { AuthUser, VersionControlEventPayload } from '@bevel-software/platform-shared';
|
|
3
3
|
import { testKbContext } from '../../../__tests__/kb-context.js';
|
|
4
4
|
import { openChangeGate } from '../../../__tests__/open-change-gate.js';
|
|
5
5
|
import { hashEmail } from '../../../shared/email-identity.js';
|
|
@@ -8,11 +8,11 @@ import type { IAccessControl } from '../../access/access-control.interface.js';
|
|
|
8
8
|
import type { WorkspaceService } from '../../workspace/workspace.service.js';
|
|
9
9
|
import type { GitService } from '../git/git.service.js';
|
|
10
10
|
import type { PullRequestService } from '../git/pull-request.service.js';
|
|
11
|
-
import type {
|
|
11
|
+
import type { IChangeRequestReviewService } from '../change-request-review/change-request-review.interface.js';
|
|
12
12
|
import type { FileLockService } from '../file-lock.service.js';
|
|
13
13
|
import type { PendingCommitsService } from '../pending-commits.service.js';
|
|
14
|
-
import type {
|
|
15
|
-
import {
|
|
14
|
+
import type { VersionControlEventBus } from '../event-bus.js';
|
|
15
|
+
import { VersionControlService } from '../version-control.service.js';
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Who may change an open request's title and description: its author, or
|
|
@@ -96,14 +96,14 @@ function harness(
|
|
|
96
96
|
getOrCreateForBranch: vi.fn(async (b: string) => ({ id: encodeURIComponent(b) })),
|
|
97
97
|
ensureRemotesFetched: vi.fn(async () => undefined),
|
|
98
98
|
} as unknown as WorkspaceService;
|
|
99
|
-
const emitted:
|
|
100
|
-
const events = { emit: (e:
|
|
99
|
+
const emitted: VersionControlEventPayload[] = [];
|
|
100
|
+
const events = { emit: (e: VersionControlEventPayload) => emitted.push(e) } as unknown as VersionControlEventBus;
|
|
101
101
|
|
|
102
|
-
const svc = new
|
|
102
|
+
const svc = new VersionControlService(
|
|
103
103
|
db as unknown as Database,
|
|
104
104
|
{} as GitService,
|
|
105
105
|
prs,
|
|
106
|
-
{} as
|
|
106
|
+
{} as IChangeRequestReviewService,
|
|
107
107
|
workspaces,
|
|
108
108
|
access,
|
|
109
109
|
{} as FileLockService,
|
|
@@ -115,7 +115,7 @@ function harness(
|
|
|
115
115
|
return { svc, db, tx, written, prs, access, workspaces, emitted };
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
describe('
|
|
118
|
+
describe('VersionControlService.updateChangeRequest — who may edit', () => {
|
|
119
119
|
it('lets the AUTHOR edit without any further grant, and resolves no workspace and reads no access tree', async () => {
|
|
120
120
|
const h = harness({ authorEmail: AUTHOR });
|
|
121
121
|
await h.svc.updateChangeRequest(9, user(AUTHOR), { description: 'P2 - Planned\n\nNew reason.' });
|
|
@@ -250,7 +250,7 @@ describe('WorkflowService.updateChangeRequest — who may edit', () => {
|
|
|
250
250
|
});
|
|
251
251
|
});
|
|
252
252
|
|
|
253
|
-
describe('
|
|
253
|
+
describe('VersionControlService.openChangeRequest — the same ceiling on the description', () => {
|
|
254
254
|
it('refuses a description past 64,000 characters with 400 before touching a workspace', async () => {
|
|
255
255
|
const h = harness({ authorEmail: AUTHOR });
|
|
256
256
|
await expect(
|
|
@@ -265,7 +265,7 @@ describe('WorkflowService.openChangeRequest — the same ceiling on the descript
|
|
|
265
265
|
});
|
|
266
266
|
});
|
|
267
267
|
|
|
268
|
-
describe('
|
|
268
|
+
describe('VersionControlService.updateChangeRequest — what an edit writes', () => {
|
|
269
269
|
it('replaces the body whole — the body is the description and nothing else', async () => {
|
|
270
270
|
const h = harness({ authorEmail: AUTHOR });
|
|
271
271
|
const before = Date.now();
|
|
@@ -3,20 +3,20 @@ import { testKbContext } from '../../../__tests__/kb-context.js';
|
|
|
3
3
|
import type { AuthUser, PullRequestDetail } from '@bevel-software/platform-shared';
|
|
4
4
|
import type { GitService } from '../git/git.service.js';
|
|
5
5
|
import type { PullRequestService } from '../git/pull-request.service.js';
|
|
6
|
-
import type {
|
|
6
|
+
import type { IChangeRequestReviewService } from '../change-request-review/change-request-review.interface.js';
|
|
7
7
|
import type { WorkspaceService } from '../../workspace/workspace.service.js';
|
|
8
8
|
import type { IAccessControl } from '../../access/access-control.interface.js';
|
|
9
9
|
import type { FileLockService } from '../file-lock.service.js';
|
|
10
10
|
import type { PendingCommitsService } from '../pending-commits.service.js';
|
|
11
11
|
import type { Database } from '../../database/connection.js';
|
|
12
|
-
import {
|
|
12
|
+
import { VersionControlService } from '../version-control.service.js';
|
|
13
13
|
import { openChangeGate } from '../../../__tests__/open-change-gate.js';
|
|
14
|
-
import type {
|
|
14
|
+
import type { VersionControlEventBus } from '../event-bus.js';
|
|
15
15
|
import {
|
|
16
16
|
ChangeRequestConflictsError,
|
|
17
17
|
PullRebaseConflictError,
|
|
18
18
|
PushNeedsAgentResolutionError,
|
|
19
|
-
|
|
19
|
+
VersionControlDomainError,
|
|
20
20
|
} from '../../../shared/domain-errors.js';
|
|
21
21
|
|
|
22
22
|
/**
|
|
@@ -118,27 +118,27 @@ function harness(opts: {
|
|
|
118
118
|
.mockResolvedValue(refreshed);
|
|
119
119
|
const prs = { getPrDetail, invalidateDetailCache: vi.fn() };
|
|
120
120
|
const pendingCommits = { enqueueIfAbsent: vi.fn().mockResolvedValue(true) };
|
|
121
|
-
const
|
|
121
|
+
const changeRequestReview = {
|
|
122
122
|
carryApprovalsForward: vi.fn().mockResolvedValue(opts.carried ?? 0),
|
|
123
123
|
};
|
|
124
124
|
const emit = vi.fn();
|
|
125
|
-
const svc = new
|
|
125
|
+
const svc = new VersionControlService(
|
|
126
126
|
{} as unknown as Database,
|
|
127
127
|
git as unknown as GitService,
|
|
128
128
|
prs as unknown as PullRequestService,
|
|
129
|
-
|
|
129
|
+
changeRequestReview as unknown as IChangeRequestReviewService,
|
|
130
130
|
{} as unknown as WorkspaceService,
|
|
131
131
|
{} as unknown as IAccessControl,
|
|
132
132
|
{} as unknown as FileLockService,
|
|
133
133
|
pendingCommits as unknown as PendingCommitsService,
|
|
134
134
|
testKbContext(),
|
|
135
135
|
openChangeGate(),
|
|
136
|
-
{ emit } as unknown as
|
|
136
|
+
{ emit } as unknown as VersionControlEventBus,
|
|
137
137
|
);
|
|
138
|
-
return { svc, git, prs, pendingCommits,
|
|
138
|
+
return { svc, git, prs, pendingCommits, changeRequestReview, refreshed, emit };
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
describe('
|
|
141
|
+
describe('VersionControlService.updateFromTarget', () => {
|
|
142
142
|
it('merges the target into the proposal, pushes, and returns the refreshed detail', async () => {
|
|
143
143
|
const h = harness({ changedPaths: ['Sales/Deal.md'] });
|
|
144
144
|
await expect(h.svc.updateFromTarget(WS, USER, 7)).resolves.toEqual({
|
|
@@ -168,7 +168,7 @@ describe('WorkflowService.updateFromTarget', () => {
|
|
|
168
168
|
const h = harness({ changedPaths: ['Sales/Deal.md'], carried: 2 });
|
|
169
169
|
await h.svc.updateFromTarget(WS, USER, 7);
|
|
170
170
|
expect(h.prs.getPrDetail).toHaveBeenCalledTimes(2);
|
|
171
|
-
const carriedAt = h.
|
|
171
|
+
const carriedAt = h.changeRequestReview.carryApprovalsForward.mock.invocationCallOrder[0];
|
|
172
172
|
const lastReadAt = h.prs.getPrDetail.mock.invocationCallOrder[1];
|
|
173
173
|
expect(carriedAt).toBeLessThan(lastReadAt);
|
|
174
174
|
});
|
|
@@ -186,8 +186,8 @@ describe('WorkflowService.updateFromTarget', () => {
|
|
|
186
186
|
it('refuses a viewer who is neither the author nor able to apply — nothing is merged', async () => {
|
|
187
187
|
const h = harness({ first: detail({ viewerCanUpdate: false }) });
|
|
188
188
|
const err = await h.svc.updateFromTarget(WS, USER, 7).catch((e: unknown) => e);
|
|
189
|
-
expect(err).toBeInstanceOf(
|
|
190
|
-
expect((err as
|
|
189
|
+
expect(err).toBeInstanceOf(VersionControlDomainError);
|
|
190
|
+
expect((err as VersionControlDomainError).status).toBe(403);
|
|
191
191
|
expect(h.git.mergeFromOrigin).not.toHaveBeenCalled();
|
|
192
192
|
expect(h.git.push).not.toHaveBeenCalled();
|
|
193
193
|
});
|
|
@@ -280,7 +280,7 @@ describe('WorkflowService.updateFromTarget', () => {
|
|
|
280
280
|
});
|
|
281
281
|
});
|
|
282
282
|
|
|
283
|
-
describe('
|
|
283
|
+
describe('VersionControlService.updateFromTarget: the approvals the merge did not touch', () => {
|
|
284
284
|
it('carries them onto the new head, before the one detail read that goes back', async () => {
|
|
285
285
|
const h = harness({ changedPaths: ['Sales/Deal.md'], carried: 2 });
|
|
286
286
|
|
|
@@ -292,7 +292,7 @@ describe('WorkflowService.updateFromTarget: the approvals the merge did not touc
|
|
|
292
292
|
// What moved is git's answer between the two heads — never a guess, and
|
|
293
293
|
// never the request's own three-dot diff against the target.
|
|
294
294
|
expect(h.git.pathsChangedBetween).toHaveBeenCalledWith(WS, HEAD, MERGED_HEAD);
|
|
295
|
-
expect(h.
|
|
295
|
+
expect(h.changeRequestReview.carryApprovalsForward).toHaveBeenCalledWith(
|
|
296
296
|
7,
|
|
297
297
|
HEAD,
|
|
298
298
|
MERGED_HEAD,
|
|
@@ -307,7 +307,7 @@ describe('WorkflowService.updateFromTarget: the approvals the merge did not touc
|
|
|
307
307
|
const h = harness({ changedPaths: ['Sales/Deal.md', 'Sales/Terms.md'], carried: 1 });
|
|
308
308
|
const result = await h.svc.updateFromTarget(WS, USER, 7);
|
|
309
309
|
expect(result.updatedPaths).toEqual(['Sales/Deal.md', 'Sales/Terms.md']);
|
|
310
|
-
expect(h.
|
|
310
|
+
expect(h.changeRequestReview.carryApprovalsForward).toHaveBeenCalledWith(
|
|
311
311
|
7,
|
|
312
312
|
HEAD,
|
|
313
313
|
MERGED_HEAD,
|
|
@@ -323,7 +323,7 @@ describe('WorkflowService.updateFromTarget: the approvals the merge did not touc
|
|
|
323
323
|
});
|
|
324
324
|
const result = await h.svc.updateFromTarget(WS, USER, 7);
|
|
325
325
|
expect(h.git.pathsChangedBetween).not.toHaveBeenCalled();
|
|
326
|
-
expect(h.
|
|
326
|
+
expect(h.changeRequestReview.carryApprovalsForward).not.toHaveBeenCalled();
|
|
327
327
|
expect(result.updatedPaths).toEqual([]);
|
|
328
328
|
});
|
|
329
329
|
|
|
@@ -331,7 +331,7 @@ describe('WorkflowService.updateFromTarget: the approvals the merge did not touc
|
|
|
331
331
|
const h = harness({ merge: { kind: 'conflicts', paths: ['Sales/Deal.md'] } });
|
|
332
332
|
await h.svc.updateFromTarget(WS, USER, 7).catch(() => undefined);
|
|
333
333
|
expect(h.git.pathsChangedBetween).not.toHaveBeenCalled();
|
|
334
|
-
expect(h.
|
|
334
|
+
expect(h.changeRequestReview.carryApprovalsForward).not.toHaveBeenCalled();
|
|
335
335
|
});
|
|
336
336
|
|
|
337
337
|
it('carries them from the head the branch is actually ON, not the one the detail read', async () => {
|
|
@@ -348,7 +348,7 @@ describe('WorkflowService.updateFromTarget: the approvals the merge did not touc
|
|
|
348
348
|
// Resolved after the pull and before the merge, from the branch itself.
|
|
349
349
|
expect(h.git.resolvePrShas).toHaveBeenCalledWith(WS, 'current-company-state', 'alice/deal');
|
|
350
350
|
expect(h.git.pathsChangedBetween).toHaveBeenCalledWith(WS, PUSHED, MERGED_HEAD);
|
|
351
|
-
expect(h.
|
|
351
|
+
expect(h.changeRequestReview.carryApprovalsForward).toHaveBeenCalledWith(7, PUSHED, MERGED_HEAD, [
|
|
352
352
|
'Sales/Deal.md',
|
|
353
353
|
]);
|
|
354
354
|
});
|
|
@@ -361,7 +361,7 @@ describe('WorkflowService.updateFromTarget: the approvals the merge did not touc
|
|
|
361
361
|
const h = harness({ resolveError: new Error('no such ref'), carried: 1 });
|
|
362
362
|
await h.svc.updateFromTarget(WS, USER, 7);
|
|
363
363
|
expect(h.git.push).toHaveBeenCalledWith(WS, USER);
|
|
364
|
-
expect(h.
|
|
364
|
+
expect(h.changeRequestReview.carryApprovalsForward).not.toHaveBeenCalled();
|
|
365
365
|
});
|
|
366
366
|
|
|
367
367
|
it('carries nothing when there is no head to compare at all', async () => {
|
|
@@ -380,7 +380,7 @@ describe('WorkflowService.updateFromTarget: the approvals the merge did not touc
|
|
|
380
380
|
});
|
|
381
381
|
expect(h.git.push).toHaveBeenCalledWith(WS, USER);
|
|
382
382
|
expect(h.git.pathsChangedBetween).not.toHaveBeenCalled();
|
|
383
|
-
expect(h.
|
|
383
|
+
expect(h.changeRequestReview.carryApprovalsForward).not.toHaveBeenCalled();
|
|
384
384
|
});
|
|
385
385
|
|
|
386
386
|
it('still returns the up-to-date request when the bookkeeping itself fails', async () => {
|
|
@@ -389,7 +389,7 @@ describe('WorkflowService.updateFromTarget: the approvals the merge did not touc
|
|
|
389
389
|
const h = harness({ changedPathsError: new Error('git exploded') });
|
|
390
390
|
const result = await h.svc.updateFromTarget(WS, USER, 7);
|
|
391
391
|
expect(result).toMatchObject({ number: 7, behind: false });
|
|
392
|
-
expect(h.
|
|
392
|
+
expect(h.changeRequestReview.carryApprovalsForward).not.toHaveBeenCalled();
|
|
393
393
|
// Which files moved is unknown, so every file the request had is named:
|
|
394
394
|
// slow beats a dialog that goes on presenting pre-merge text as current.
|
|
395
395
|
expect(result.updatedPaths).toEqual(['Sales/Deal.md']);
|
|
@@ -154,7 +154,7 @@ const workspaceService = {
|
|
|
154
154
|
|
|
155
155
|
/** The workspace each listing was asked to read in, in order. */
|
|
156
156
|
let listedIn: Array<string | undefined> = [];
|
|
157
|
-
const
|
|
157
|
+
const versionControlService = {
|
|
158
158
|
listChangeRequestsByState: async (states: ChangeRequestState[], opts?: { workspaceId?: string }) => {
|
|
159
159
|
calls.push(['listChangeRequestsByState', [...states].sort()]);
|
|
160
160
|
listedIn.push(opts?.workspaceId);
|
|
@@ -205,7 +205,7 @@ async function start(): Promise<string> {
|
|
|
205
205
|
const resolve = createToolContextResolver({
|
|
206
206
|
authService,
|
|
207
207
|
workspaceService,
|
|
208
|
-
|
|
208
|
+
versionControlService,
|
|
209
209
|
events,
|
|
210
210
|
kbDirName: 'knowledge-base',
|
|
211
211
|
creatorAccess: {
|
|
@@ -299,7 +299,7 @@ describe('the four read tools', () => {
|
|
|
299
299
|
}
|
|
300
300
|
});
|
|
301
301
|
|
|
302
|
-
it('call only reads on the
|
|
302
|
+
it('call only reads on the version-control service', async () => {
|
|
303
303
|
const base = await start();
|
|
304
304
|
summaries = [summary()];
|
|
305
305
|
details.set(12, detail());
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import type { Server as HttpServer } from 'node:http';
|
|
2
2
|
import express from 'express';
|
|
3
3
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
4
|
-
import type {
|
|
4
|
+
import type { IVersionControlService } from '@bevel-software/platform-shared';
|
|
5
5
|
import { testKbContext } from '../../../../__tests__/kb-context.js';
|
|
6
6
|
import { ToolRegistry } from '../../../tool-registry/tool-registry.js';
|
|
7
7
|
import { InternalTokenService } from '../../../tool-auth/internal-token.service.js';
|
|
8
8
|
import { createToolAuthMiddleware } from '../../../tool-auth/tool-auth.middleware.js';
|
|
9
9
|
import { createToolContextResolver } from '../../../tool-helpers/tool-context.js';
|
|
10
10
|
import { createToolHandlerFactory } from '../../../tool-helpers/tool-handler.js';
|
|
11
|
-
import {
|
|
11
|
+
import { VersionControlDomainError } from '../../../../shared/domain-errors.js';
|
|
12
12
|
import type { IAccessControl } from '../../../access/access-control.interface.js';
|
|
13
13
|
import type { AuthService } from '../../../auth/auth.service.js';
|
|
14
14
|
import type { WorkspaceService } from '../../../workspace/workspace.service.js';
|
|
15
|
-
import type {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
15
|
+
import type { VersionControlEventBus } from '../../event-bus.js';
|
|
16
|
+
import { createVersionControlRoutes } from '../../version-control.routes.js';
|
|
17
|
+
import { registerVersionControlTools } from '../version-control.tools.js';
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* The app's `PATCH /api/workflow/change-requests/:number` and the agent's
|
|
21
21
|
* `update_change_request` are one verb: both reach the SAME service method
|
|
22
22
|
* with the same caller and the same fields, and every refusal it makes reaches
|
|
23
23
|
* both callers with the same status and the same words. The rule itself is
|
|
24
|
-
* pinned in `
|
|
24
|
+
* pinned in `version-control.service.update-change-request.test.ts`; this pins that
|
|
25
25
|
* neither surface narrows, widens or rewords it.
|
|
26
26
|
*
|
|
27
27
|
* One answer differs, and on purpose: a request the caller may not READ is
|
|
@@ -46,19 +46,19 @@ const updated = {
|
|
|
46
46
|
touchedNodePaths: ['Docs/a.md'],
|
|
47
47
|
};
|
|
48
48
|
|
|
49
|
-
const
|
|
49
|
+
const versionControlService = {
|
|
50
50
|
updateChangeRequest: async (number: number, user: { id: string; email: string }, input: unknown) => {
|
|
51
51
|
calls.push(['updateChangeRequest', number, user.id, input]);
|
|
52
52
|
return outcome();
|
|
53
53
|
},
|
|
54
|
-
} as unknown as
|
|
54
|
+
} as unknown as IVersionControlService;
|
|
55
55
|
|
|
56
56
|
const authService = { getUserById: async () => CALLER } as unknown as AuthService;
|
|
57
57
|
const workspaceService = {
|
|
58
58
|
getOrCreateForUser: async () => ({ id: 'ws' }),
|
|
59
59
|
findAnyWorkspaceId: async () => 'ws',
|
|
60
60
|
} as unknown as WorkspaceService;
|
|
61
|
-
const events = { emit: () => ({}) } as unknown as
|
|
61
|
+
const events = { emit: () => ({}) } as unknown as VersionControlEventBus;
|
|
62
62
|
const internalToken = new InternalTokenService({ secret: 's' });
|
|
63
63
|
|
|
64
64
|
let httpServer: HttpServer | undefined;
|
|
@@ -76,8 +76,8 @@ async function start(): Promise<string> {
|
|
|
76
76
|
next();
|
|
77
77
|
});
|
|
78
78
|
appRouter.use(
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
createVersionControlRoutes(
|
|
80
|
+
versionControlService,
|
|
81
81
|
workspaceService,
|
|
82
82
|
authService,
|
|
83
83
|
events,
|
|
@@ -96,12 +96,12 @@ async function start(): Promise<string> {
|
|
|
96
96
|
const resolve = createToolContextResolver({
|
|
97
97
|
authService,
|
|
98
98
|
workspaceService,
|
|
99
|
-
|
|
99
|
+
versionControlService,
|
|
100
100
|
events,
|
|
101
101
|
kbDirName: 'knowledge-base',
|
|
102
102
|
creatorAccess: { planForCreate: async () => null, grantInExtractedFile: async () => null, noteAccessFileWritten: () => {} },
|
|
103
103
|
} as never);
|
|
104
|
-
|
|
104
|
+
registerVersionControlTools(registry, toolRouter, toolAuth, createToolHandlerFactory(resolve), testKbContext(), async (_ctx, number) =>
|
|
105
105
|
maySee(number),
|
|
106
106
|
);
|
|
107
107
|
|
|
@@ -186,7 +186,7 @@ describe('update_change_request ⇔ PATCH /workflow/change-requests/:number', ()
|
|
|
186
186
|
[
|
|
187
187
|
'neither the author nor someone who may merge it (403)',
|
|
188
188
|
() => {
|
|
189
|
-
throw new
|
|
189
|
+
throw new VersionControlDomainError(
|
|
190
190
|
"Only the request's author, an admin, or someone who may approve every file it changes can edit its title and description.",
|
|
191
191
|
403,
|
|
192
192
|
);
|
|
@@ -195,7 +195,7 @@ describe('update_change_request ⇔ PATCH /workflow/change-requests/:number', ()
|
|
|
195
195
|
[
|
|
196
196
|
'a merged request (409)',
|
|
197
197
|
() => {
|
|
198
|
-
throw new
|
|
198
|
+
throw new VersionControlDomainError(
|
|
199
199
|
'This change request has already been applied; its title and description can no longer be changed.',
|
|
200
200
|
409,
|
|
201
201
|
);
|
|
@@ -204,7 +204,7 @@ describe('update_change_request ⇔ PATCH /workflow/change-requests/:number', ()
|
|
|
204
204
|
[
|
|
205
205
|
'a closed request (409)',
|
|
206
206
|
() => {
|
|
207
|
-
throw new
|
|
207
|
+
throw new VersionControlDomainError(
|
|
208
208
|
'This change request is closed; its title and description can no longer be changed.',
|
|
209
209
|
409,
|
|
210
210
|
);
|
|
@@ -9,9 +9,9 @@ import { createToolContextResolver } from '../../../tool-helpers/tool-context.js
|
|
|
9
9
|
import { createToolHandlerFactory } from '../../../tool-helpers/tool-handler.js';
|
|
10
10
|
import { createManualRoutes } from '../../../tool-registry/manual.routes.js';
|
|
11
11
|
import { ToolError } from '../../../tool-helpers/index.js';
|
|
12
|
-
import {
|
|
12
|
+
import { VersionControlHooks } from '../../version-control-hooks.js';
|
|
13
13
|
import { ToolDescriptionNotes, type AgentAccessGate } from '../../../workspace/index.js';
|
|
14
|
-
import {
|
|
14
|
+
import { registerVersionControlTools } from '../version-control.tools.js';
|
|
15
15
|
import {
|
|
16
16
|
BranchAuthorshipError,
|
|
17
17
|
BranchDeleteBlockedError,
|
|
@@ -101,7 +101,7 @@ const workspaceService = {
|
|
|
101
101
|
// Repo-global tools resolve any existing clone instead of cloning a named branch.
|
|
102
102
|
findAnyWorkspaceId: async () => 'existing-ws',
|
|
103
103
|
} as never;
|
|
104
|
-
const
|
|
104
|
+
const versionControlService = {
|
|
105
105
|
listBranches: async (ws: string) => {
|
|
106
106
|
calls.push(['listBranches', ws]);
|
|
107
107
|
// A real listing fetches first; mark when that fetch has landed.
|
|
@@ -296,7 +296,7 @@ const accessControl = {
|
|
|
296
296
|
* `Failing/` and records every read it is told of (with the session it was
|
|
297
297
|
* told for); the write hook refuses `Locked/`.
|
|
298
298
|
*/
|
|
299
|
-
const agentHooks = new
|
|
299
|
+
const agentHooks = new VersionControlHooks();
|
|
300
300
|
agentHooks.onAgentRead(async (op) => {
|
|
301
301
|
calls.push(['agentRead', op.branch, op.wsPath, op.sessionId]);
|
|
302
302
|
if (op.wsPath?.includes('Hooked/')) throw new ToolError('Not in this conversation.', 403);
|
|
@@ -317,12 +317,12 @@ async function start(): Promise<string> {
|
|
|
317
317
|
const registry = new ToolRegistry();
|
|
318
318
|
registryRef = registry;
|
|
319
319
|
const toolAuth = createToolAuthMiddleware(externalApiKeyService, internalToken);
|
|
320
|
-
const resolve = createToolContextResolver({ authService, workspaceService,
|
|
320
|
+
const resolve = createToolContextResolver({ authService, workspaceService, versionControlService, events, kbDirName: 'knowledge-base', creatorAccess: { planForCreate: async () => null, grantInExtractedFile: async () => null, noteAccessFileWritten: () => {} } });
|
|
321
321
|
const toolHandler = createToolHandlerFactory(resolve);
|
|
322
322
|
|
|
323
323
|
const router = express.Router();
|
|
324
324
|
// Request #13 is one the caller may not see.
|
|
325
|
-
|
|
325
|
+
registerVersionControlTools(
|
|
326
326
|
registry,
|
|
327
327
|
router,
|
|
328
328
|
toolAuth,
|
|
@@ -361,7 +361,7 @@ afterEach(async () => {
|
|
|
361
361
|
|
|
362
362
|
const writeTok = () => internalToken.mint({ userId: 'user-A' });
|
|
363
363
|
|
|
364
|
-
describe('
|
|
364
|
+
describe('registerVersionControlTools', () => {
|
|
365
365
|
it('commit_change commits as the context user + workspace', async () => {
|
|
366
366
|
const base = await start();
|
|
367
367
|
const res = await post(`${base}/api/agent/tools/commit_change`, writeTok(), { summary: 'fix typo', branch: WS });
|
|
@@ -878,7 +878,7 @@ describe('registerWorkflowTools', () => {
|
|
|
878
878
|
error: '`branch` is required: pass the branch (draft) you are working on.',
|
|
879
879
|
});
|
|
880
880
|
}
|
|
881
|
-
// No
|
|
881
|
+
// No version-control call was made at all — least of all one naming a workspace
|
|
882
882
|
// id built out of the missing value, or a branch forked from it.
|
|
883
883
|
expect(calls).toEqual([]);
|
|
884
884
|
});
|
|
@@ -988,7 +988,7 @@ describe('registerWorkflowTools', () => {
|
|
|
988
988
|
expect((await post(`${base}/api/agent/tools/switch_branch`, 'bevel_key', { branch: 'main' })).status).toBe(403);
|
|
989
989
|
});
|
|
990
990
|
|
|
991
|
-
it('registers
|
|
991
|
+
it('registers version-control tools into the right catalogs (switch_branch internal-only)', async () => {
|
|
992
992
|
const base = await start();
|
|
993
993
|
const fetchManual = async (which: 'utcp' | 'internal/utcp') =>
|
|
994
994
|
((await (await fetch(`${base}/api/agent/${which}`, { headers: { authorization: `Bearer ${writeTok()}` } })).json()) as { tools: { name: string }[] }).tools
|
|
@@ -274,7 +274,7 @@ export function registerChangeRequestReadTools(
|
|
|
274
274
|
// list cannot hide a request the detail would serve — or the reverse —
|
|
275
275
|
// for want of a workspace the other path fell back to.
|
|
276
276
|
const workspaceId = await repoGlobalWorkspaceId(ctx);
|
|
277
|
-
const all = await ctx.
|
|
277
|
+
const all = await ctx.versionControlService.listChangeRequestsByState(statesFor(state), { workspaceId });
|
|
278
278
|
const matching = all.filter(
|
|
279
279
|
(cr) =>
|
|
280
280
|
(head === undefined || cr.branch === head) &&
|
|
@@ -612,7 +612,7 @@ export function changeRequestScope(
|
|
|
612
612
|
opts: { patches: boolean },
|
|
613
613
|
): Promise<ScopedDetail> => {
|
|
614
614
|
const workspaceId = await repoGlobalWorkspaceId(ctx);
|
|
615
|
-
const detail = await ctx.
|
|
615
|
+
const detail = await ctx.versionControlService.getChangeRequestDetail(number, {
|
|
616
616
|
workspaceId,
|
|
617
617
|
viewerEmail: ctx.user.email,
|
|
618
618
|
patches: opts.patches,
|