@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
|
@@ -10,7 +10,7 @@ import { utf8Text } from '../../../shared/utf8-text.js';
|
|
|
10
10
|
import { lstatOrNull } from '../../../shared/rename-no-replace.js';
|
|
11
11
|
import { linkedAncestor } from '../../../shared/no-link-below.js';
|
|
12
12
|
import { assertValidBranchName, assertValidRelativePath, isBranchAuthoredBy, isOwnSuggestionsBranch, } from '../../kb-fs/index.js';
|
|
13
|
-
import { AppliedChangeMismatchError, BranchAuthorshipError, BranchDeleteRefusedError,
|
|
13
|
+
import { AppliedChangeMismatchError, BranchAuthorshipError, BranchDeleteRefusedError, VersionControlDomainError, VersionControlValidationError, ProtectedBranchError, PullRebaseConflictError, RemoteBranchGoneError, VersionNotOnBranchError, isMissingRemoteBranchFailure, } from '../../../shared/domain-errors.js';
|
|
14
14
|
import { GitRunError, assertOneSpecPerLine, redactGitToken, } from '../../../shared/git.contract.js';
|
|
15
15
|
import { NodeGitRunner } from './node-git-runner.js';
|
|
16
16
|
import { printable } from '../../../shared/printable.js';
|
|
@@ -19,7 +19,7 @@ import { sanitizeError } from '../sanitize-error.js';
|
|
|
19
19
|
const log = logger('git');
|
|
20
20
|
const crLog = logger('cr');
|
|
21
21
|
/**
|
|
22
|
-
* Fallback committer identity. Every
|
|
22
|
+
* Fallback committer identity. Every version-control commit overrides the author via
|
|
23
23
|
* `--author=…` so the real human shows up in `git log`; this is just the
|
|
24
24
|
* committer git records need. Mirrors the value `WorkspaceService` stamps on
|
|
25
25
|
* each clone — set again where an operation must not depend on that ambient
|
|
@@ -99,13 +99,13 @@ function buildDefaultCommitSummary(repoRelativePath) {
|
|
|
99
99
|
}
|
|
100
100
|
function assertValidAuthor(user) {
|
|
101
101
|
if (!user.name || !user.email) {
|
|
102
|
-
throw new
|
|
102
|
+
throw new VersionControlValidationError('commit author name and email are required');
|
|
103
103
|
}
|
|
104
104
|
if (/[\r\n<>]/.test(user.name)) {
|
|
105
|
-
throw new
|
|
105
|
+
throw new VersionControlValidationError('commit author name contains invalid characters');
|
|
106
106
|
}
|
|
107
107
|
if (/[\r\n<>\s]/.test(user.email) || !/^[^@\s]+@[^@\s]+$/.test(user.email)) {
|
|
108
|
-
throw new
|
|
108
|
+
throw new VersionControlValidationError('commit author email is not a valid address');
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
/**
|
|
@@ -260,7 +260,7 @@ export class GitService {
|
|
|
260
260
|
static CHANGED_ENTRIES_MAX = 4096;
|
|
261
261
|
constructor(workspaceService,
|
|
262
262
|
/**
|
|
263
|
-
*
|
|
263
|
+
* Version-control lifecycle hooks. This service only consults the ADVISORY
|
|
264
264
|
* `commitValidation` hooks (registered by the enterprise kb module in the
|
|
265
265
|
* composition root — the constructor-injected `IKbValidator` this
|
|
266
266
|
* replaced). No hooks registered = no commit-time validation, which is
|
|
@@ -289,6 +289,34 @@ export class GitService {
|
|
|
289
289
|
get kbDirName() {
|
|
290
290
|
return this.kb.kbDirName;
|
|
291
291
|
}
|
|
292
|
+
/**
|
|
293
|
+
* Every commit this service lands is reported here, once, to the hooks the
|
|
294
|
+
* composition root registered (`VersionControlHooks.onCommitLanded`): a
|
|
295
|
+
* single-file commit, a batch, a merge. Paths go out workspace-relative, as
|
|
296
|
+
* the notifier's contract has them. The hooks run isolated, so a reactor can
|
|
297
|
+
* neither fail nor unwind the commit it hears of. This is the ONE place a
|
|
298
|
+
* commit is announced from — a new way of committing reports here or it is
|
|
299
|
+
* not announced at all, which a test pins.
|
|
300
|
+
*/
|
|
301
|
+
landed(workspaceId, branch, user, repoRelativePaths) {
|
|
302
|
+
this.hooks.commitLanded({
|
|
303
|
+
workspaceId,
|
|
304
|
+
branch,
|
|
305
|
+
paths: repoRelativePaths.map((p) => `${this.kbDirName}/${p}`),
|
|
306
|
+
byUser: user,
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* The files the commit at HEAD changed, repo-relative, read from the commit
|
|
311
|
+
* itself rather than from the status listing that preceded it: every file
|
|
312
|
+
* of a new folder (status shows the folder), both ends of a rename (status
|
|
313
|
+
* shows one entry). A read that fails must not lose the report, so callers
|
|
314
|
+
* fall back to what they knew before the commit.
|
|
315
|
+
*/
|
|
316
|
+
async committedPaths(cwd) {
|
|
317
|
+
const { stdout } = await this.git(cwd, ['diff-tree', '--root', '--no-commit-id', '--name-only', '--no-renames', '-r', '-z', 'HEAD']);
|
|
318
|
+
return stdout.split('\0').filter(Boolean);
|
|
319
|
+
}
|
|
292
320
|
/**
|
|
293
321
|
* The credentials the runner authenticates with — for the services above
|
|
294
322
|
* this one that scrub a message git or the host echoed a token into.
|
|
@@ -705,7 +733,7 @@ export class GitService {
|
|
|
705
733
|
const cwd = await this.repoDir(workspaceId);
|
|
706
734
|
const current = await this.currentBranch(cwd);
|
|
707
735
|
if (current === name) {
|
|
708
|
-
throw new
|
|
736
|
+
throw new VersionControlValidationError(`Cannot delete "${name}" while it's the checked-out branch.`);
|
|
709
737
|
}
|
|
710
738
|
if (opts.systemCleanup) {
|
|
711
739
|
// Internal post-merge retirement (never reachable from a route): the
|
|
@@ -719,7 +747,7 @@ export class GitService {
|
|
|
719
747
|
// not just their own — but keep the "refuse if origin still has the
|
|
720
748
|
// ref" safety: a present remote means the branch is still live.
|
|
721
749
|
if (await this.refExists(cwd, `refs/remotes/origin/${name}`)) {
|
|
722
|
-
throw new
|
|
750
|
+
throw new VersionControlValidationError(`Branch "${name}" still exists on origin — refusing to auto-prune.`);
|
|
723
751
|
}
|
|
724
752
|
}
|
|
725
753
|
else if (!(await this.mayDeleteBranch(workspaceId, name, user))) {
|
|
@@ -892,12 +920,12 @@ export class GitService {
|
|
|
892
920
|
async commit(workspaceId, user, req) {
|
|
893
921
|
const subject = req.summary?.trim();
|
|
894
922
|
if (!subject)
|
|
895
|
-
throw new
|
|
923
|
+
throw new VersionControlValidationError('commit summary is required');
|
|
896
924
|
if (subject.length > 200) {
|
|
897
|
-
throw new
|
|
925
|
+
throw new VersionControlValidationError('commit summary must be ≤ 200 characters');
|
|
898
926
|
}
|
|
899
927
|
if (subject.includes('\n')) {
|
|
900
|
-
throw new
|
|
928
|
+
throw new VersionControlValidationError('commit summary must be a single line');
|
|
901
929
|
}
|
|
902
930
|
assertValidAuthor(user);
|
|
903
931
|
return this.mutex.run(workspaceId, async () => {
|
|
@@ -915,12 +943,12 @@ export class GitService {
|
|
|
915
943
|
]);
|
|
916
944
|
const touched = parsePorcelainZ(porcelain);
|
|
917
945
|
if (touched.length === 0) {
|
|
918
|
-
throw new
|
|
946
|
+
throw new VersionControlValidationError('No pending changes to commit', {
|
|
919
947
|
kind: 'no-pending-changes',
|
|
920
948
|
});
|
|
921
949
|
}
|
|
922
950
|
if (touched.length > 1) {
|
|
923
|
-
throw new
|
|
951
|
+
throw new VersionControlValidationError(`Each change must affect exactly one file. ${touched.length} files are currently pending: ${touched.join(', ')}. Commit them one at a time.`, { kind: 'too-many-files-dirty', paths: touched });
|
|
924
952
|
}
|
|
925
953
|
// Gate by access-control rules — but ONLY on protected branches.
|
|
926
954
|
// Feature/draft branches are free-for-all: anyone can commit anything
|
|
@@ -953,6 +981,10 @@ export class GitService {
|
|
|
953
981
|
args.push('-m', req.description.trim());
|
|
954
982
|
}
|
|
955
983
|
await this.git(cwd, args);
|
|
984
|
+
// The commit exists from here on: reported now, before the attribution
|
|
985
|
+
// read, which can fail without unmaking it — with the files the commit
|
|
986
|
+
// holds, or the status listing if even that read fails.
|
|
987
|
+
this.landed(workspaceId, branch, user, await this.committedPaths(cwd).catch(() => touched));
|
|
956
988
|
const { stdout } = await this.git(cwd, [
|
|
957
989
|
'log',
|
|
958
990
|
'-1',
|
|
@@ -1047,7 +1079,7 @@ export class GitService {
|
|
|
1047
1079
|
// **No access check at commit time.** Per the "disk is the source of
|
|
1048
1080
|
// truth" rule, by the time content is on disk it must not be rejected.
|
|
1049
1081
|
// The permission check that used to live here now runs at lock
|
|
1050
|
-
// acquisition (see `
|
|
1082
|
+
// acquisition (see `VersionControlService.acquireLock`'s
|
|
1051
1083
|
// `assertCanWriteAtPath`), so a user can't even start editing a file
|
|
1052
1084
|
// they lack write permission on — they never reach this commit. The
|
|
1053
1085
|
// legacy gate could destroy a user's edits when access changed
|
|
@@ -1069,16 +1101,20 @@ export class GitService {
|
|
|
1069
1101
|
await this.git(cwd, ['add', '--', repoRelativePath]);
|
|
1070
1102
|
const subject = summary?.trim() || buildDefaultCommitSummary(repoRelativePath);
|
|
1071
1103
|
if (subject.length > 200) {
|
|
1072
|
-
throw new
|
|
1104
|
+
throw new VersionControlValidationError('commit summary must be ≤ 200 characters');
|
|
1073
1105
|
}
|
|
1074
1106
|
if (subject.includes('\n')) {
|
|
1075
|
-
throw new
|
|
1107
|
+
throw new VersionControlValidationError('commit summary must be a single line');
|
|
1076
1108
|
}
|
|
1077
1109
|
await this.git(cwd, [
|
|
1078
1110
|
'commit',
|
|
1079
1111
|
`--author=${user.name} <${user.email}>`,
|
|
1080
1112
|
'-m', subject,
|
|
1081
1113
|
]);
|
|
1114
|
+
// The commit exists from here on: reported now, before the attribution
|
|
1115
|
+
// read, which can fail without unmaking it — with the files the commit
|
|
1116
|
+
// holds (the one path, as it was staged), or that path if the read fails.
|
|
1117
|
+
this.landed(workspaceId, branch, user, await this.committedPaths(cwd).catch(() => [repoRelativePath]));
|
|
1082
1118
|
const { stdout } = await this.git(cwd, [
|
|
1083
1119
|
'log',
|
|
1084
1120
|
'-1',
|
|
@@ -1119,11 +1155,11 @@ export class GitService {
|
|
|
1119
1155
|
assertValidAuthor(user);
|
|
1120
1156
|
const subject = summary?.trim();
|
|
1121
1157
|
if (!subject)
|
|
1122
|
-
throw new
|
|
1158
|
+
throw new VersionControlValidationError('commit summary is required');
|
|
1123
1159
|
if (subject.length > 200)
|
|
1124
|
-
throw new
|
|
1160
|
+
throw new VersionControlValidationError('commit summary must be ≤ 200 characters');
|
|
1125
1161
|
if (subject.includes('\n'))
|
|
1126
|
-
throw new
|
|
1162
|
+
throw new VersionControlValidationError('commit summary must be a single line');
|
|
1127
1163
|
return this.mutex.run(workspaceId, async () => {
|
|
1128
1164
|
const cwd = await this.repoDir(workspaceId);
|
|
1129
1165
|
const branch = await this.currentBranch(cwd);
|
|
@@ -1210,6 +1246,10 @@ export class GitService {
|
|
|
1210
1246
|
// committed" and restore their pre-edit bytes, which here would publish
|
|
1211
1247
|
// a compensating revert of a commit that DID land. The attribution read
|
|
1212
1248
|
// is best-effort; on failure fall back to what we already know.
|
|
1249
|
+
// The commit exists: report it, with the files it holds — both ends of a
|
|
1250
|
+
// rename, every file of a new folder — or the scoped status listing if
|
|
1251
|
+
// that read fails. Neither the read nor the hooks can throw here.
|
|
1252
|
+
this.landed(workspaceId, branch, user, await this.committedPaths(cwd).catch(() => touched));
|
|
1213
1253
|
let sha = '';
|
|
1214
1254
|
let authorName = user.name;
|
|
1215
1255
|
let authorEmail = user.email;
|
|
@@ -1289,7 +1329,7 @@ export class GitService {
|
|
|
1289
1329
|
}
|
|
1290
1330
|
}
|
|
1291
1331
|
}
|
|
1292
|
-
// `forcePush` method removed. The
|
|
1332
|
+
// `forcePush` method removed. The version-control layer no longer auto-force-pushes
|
|
1293
1333
|
// as a recovery — when the cooperative `pull --rebase` + retry can't
|
|
1294
1334
|
// reconcile, we throw `PushNeedsAgentResolutionError` and hand off to the
|
|
1295
1335
|
// agent. The agent has git + gh CLI access and can choose to run a raw
|
|
@@ -1301,7 +1341,7 @@ export class GitService {
|
|
|
1301
1341
|
// automatic-recovery path.
|
|
1302
1342
|
/**
|
|
1303
1343
|
* Attempt a local merge of `origin/<targetBranch>` into the currently-
|
|
1304
|
-
* checked-out branch. Used by the
|
|
1344
|
+
* checked-out branch. Used by the version-control module to auto-merge target →
|
|
1305
1345
|
* source when a change request is opened or refreshed (PLAN §1).
|
|
1306
1346
|
*
|
|
1307
1347
|
* Two outcomes:
|
|
@@ -1350,7 +1390,7 @@ export class GitService {
|
|
|
1350
1390
|
assertValidBranchName(fromBranch);
|
|
1351
1391
|
assertValidAuthor(user);
|
|
1352
1392
|
if (/\n\s*\n/.test(opts.subject)) {
|
|
1353
|
-
throw new
|
|
1393
|
+
throw new VersionControlValidationError('merge commit subject must be a single paragraph');
|
|
1354
1394
|
}
|
|
1355
1395
|
// Every resolution names a repository path; which of them are conflicted
|
|
1356
1396
|
// is only known inside the merge, where they are matched exactly.
|
|
@@ -1365,13 +1405,13 @@ export class GitService {
|
|
|
1365
1405
|
const p = this.stripRepoPrefix(r.path);
|
|
1366
1406
|
const ways = [r.content !== undefined, r.choose !== undefined].filter(Boolean).length;
|
|
1367
1407
|
if (ways !== 1) {
|
|
1368
|
-
throw new
|
|
1408
|
+
throw new VersionControlValidationError(`resolution for "${p}": give either \`content\` or \`choose\`, not ${ways === 0 ? 'neither' : 'both'}`);
|
|
1369
1409
|
}
|
|
1370
1410
|
if (r.choose !== undefined && !['ours', 'theirs', 'delete'].includes(r.choose)) {
|
|
1371
|
-
throw new
|
|
1411
|
+
throw new VersionControlValidationError(`resolution for "${p}": \`choose\` is \`ours\`, \`theirs\` or \`delete\``);
|
|
1372
1412
|
}
|
|
1373
1413
|
if (resolutions.has(p))
|
|
1374
|
-
throw new
|
|
1414
|
+
throw new VersionControlValidationError(`"${p}" is resolved twice`);
|
|
1375
1415
|
resolutions.set(p, { ...r, path: p });
|
|
1376
1416
|
}
|
|
1377
1417
|
return this.mutex.run(workspaceId, async () => this.mergeRefIntoCheckout(workspaceId, await this.repoDir(workspaceId), branch, fromBranch, user, {
|
|
@@ -1400,7 +1440,7 @@ export class GitService {
|
|
|
1400
1440
|
*
|
|
1401
1441
|
* `publish` runs over the merge commit inside this same reservation, so no
|
|
1402
1442
|
* save or sync can land between the commit and its push; it is the
|
|
1403
|
-
* caller's push policy (the
|
|
1443
|
+
* caller's push policy (the version-control service's `pushWithRecovery`: one replay onto
|
|
1404
1444
|
* the moved branch with the merge kept, `--rebase-merges`, then the typed
|
|
1405
1445
|
* hand-off) over this checkout's own unlocked moves.
|
|
1406
1446
|
*/
|
|
@@ -1409,14 +1449,14 @@ export class GitService {
|
|
|
1409
1449
|
if (opts.guardCheckout) {
|
|
1410
1450
|
const checkedOut = await this.currentBranch(cwd);
|
|
1411
1451
|
if (checkedOut !== branch) {
|
|
1412
|
-
throw new
|
|
1452
|
+
throw new VersionControlValidationError(`the workspace is on "${checkedOut}", not on "${branch}"`);
|
|
1413
1453
|
}
|
|
1414
1454
|
// A merge rewrites tracked files. Edits still on their way to a commit
|
|
1415
1455
|
// (a save the worker has not landed) would be swept into the merge
|
|
1416
1456
|
// commit under this user's name, or lost under the merge's version.
|
|
1417
1457
|
const { stdout: dirty } = await this.git(cwd, ['status', '--porcelain=v1', '-z']);
|
|
1418
1458
|
if (parsePorcelainZ(dirty).length > 0) {
|
|
1419
|
-
throw new
|
|
1459
|
+
throw new VersionControlDomainError(`"${branch}" has edits that are not committed yet. Try again once they are saved.`, 409, { kind: 'branch-busy', branch });
|
|
1420
1460
|
}
|
|
1421
1461
|
}
|
|
1422
1462
|
// `git merge`/`git commit` need a committer identity (see `mergeChangeRequest`).
|
|
@@ -1440,7 +1480,7 @@ export class GitService {
|
|
|
1440
1480
|
// A merge with nothing to settle leaves no resolution a place to go: one
|
|
1441
1481
|
// supplied anyway names a path that is not conflicted, and is refused as
|
|
1442
1482
|
// such rather than dropped on the floor behind a published merge.
|
|
1443
|
-
const noConflictsFor = () => new
|
|
1483
|
+
const noConflictsFor = () => new VersionControlValidationError(`nothing conflicted, so nothing is resolved here: ${[...opts.resolutions.keys()].join(', ')}.`, { kind: 'not-conflicted', paths: [...opts.resolutions.keys()] });
|
|
1444
1484
|
// Nothing to merge is a question of ANCESTRY, not of content: a source
|
|
1445
1485
|
// the branch already reaches is merged; one it does not reach is merged
|
|
1446
1486
|
// in even when the two trees are identical, so the branch records that
|
|
@@ -1468,7 +1508,7 @@ export class GitService {
|
|
|
1468
1508
|
// locks. Refused whole, before any resolution is applied — naming
|
|
1469
1509
|
// the caller's own paths only, never the conflicted set (which the
|
|
1470
1510
|
// caller is told of, cut to what they may read, by the answer).
|
|
1471
|
-
throw new
|
|
1511
|
+
throw new VersionControlValidationError(`not conflicted, so not resolved here: ${stray.join(', ')}.`, { kind: 'not-conflicted', paths: stray });
|
|
1472
1512
|
}
|
|
1473
1513
|
const unresolved = conflicted.filter((p) => !opts.resolutions.has(p));
|
|
1474
1514
|
if (unresolved.length > 0) {
|
|
@@ -1547,8 +1587,13 @@ export class GitService {
|
|
|
1547
1587
|
}
|
|
1548
1588
|
/** The merge commit, as `user`, and its publish when asked for. The caller settles a failure. */
|
|
1549
1589
|
async commitMerge(workspaceId, cwd, branch, fromBranch, user, opts, resolvedPaths) {
|
|
1590
|
+
// What this merge brings onto the branch: the index holds the merged tree.
|
|
1591
|
+
// NUL-delimited and with renames as a delete plus an add, so every path is
|
|
1592
|
+
// named verbatim, both ends of a rename included.
|
|
1593
|
+
const { stdout: merged } = await this.git(cwd, ['diff', '--cached', '--name-only', '--no-renames', '-z']);
|
|
1550
1594
|
await this.git(cwd, ['commit', `--author=${user.name} <${user.email}>`, '-m', opts.subject, '-m', opts.body]);
|
|
1551
1595
|
this.accessControl?.invalidate(workspaceId);
|
|
1596
|
+
this.landed(workspaceId, branch, user, merged.split('\0').filter(Boolean));
|
|
1552
1597
|
// The publish runs here, inside the reservation the merge was made in,
|
|
1553
1598
|
// over this checkout's own push and pull-rebase (the merge kept as a
|
|
1554
1599
|
// merge) — the caller's policy, the git layer's moves. Whatever it
|
|
@@ -1640,7 +1685,7 @@ export class GitService {
|
|
|
1640
1685
|
// the way that is a link is refused, and a path that is itself a link is
|
|
1641
1686
|
// replaced as a path (the link removed first), never written through.
|
|
1642
1687
|
if ((await linkedAncestor(cwd, path.dirname(file))) !== null) {
|
|
1643
|
-
throw new
|
|
1688
|
+
throw new VersionControlValidationError(`"${r.path}" is reached through a link, so it is not resolved here`);
|
|
1644
1689
|
}
|
|
1645
1690
|
if (r.content !== undefined) {
|
|
1646
1691
|
if ((await lstatOrNull(file))?.isSymbolicLink())
|
|
@@ -1718,7 +1763,7 @@ export class GitService {
|
|
|
1718
1763
|
// `mergeCommitSubject` already flattens the title it builds from; this is the
|
|
1719
1764
|
// guard that keeps any other caller from reintroducing the break.
|
|
1720
1765
|
if (/\n\s*\n/.test(commit.subject)) {
|
|
1721
|
-
throw new
|
|
1766
|
+
throw new VersionControlValidationError('merge commit subject must be a single paragraph');
|
|
1722
1767
|
}
|
|
1723
1768
|
const MAX_ATTEMPTS = 3;
|
|
1724
1769
|
return this.mutex.run(baseWorkspaceId, async () => {
|
|
@@ -1733,7 +1778,7 @@ export class GitService {
|
|
|
1733
1778
|
const { stdout: dirty } = await this.git(cwd, ['status', '--porcelain=v1', '-z']);
|
|
1734
1779
|
const unpushed = await this.hasUnpushedCommitsAt(cwd);
|
|
1735
1780
|
if (parsePorcelainZ(dirty).length > 0 || unpushed) {
|
|
1736
|
-
throw new
|
|
1781
|
+
throw new VersionControlDomainError(`"${targetBranch}" has edits that are not shared yet. Try the merge again once they are saved.`, 409, { kind: 'merge-target-busy', targetBranch });
|
|
1737
1782
|
}
|
|
1738
1783
|
}
|
|
1739
1784
|
for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt += 1) {
|
|
@@ -1798,8 +1843,10 @@ export class GitService {
|
|
|
1798
1843
|
// finalize the row (a transient database fault between the push and the
|
|
1799
1844
|
// update) has one, and it is the only place its file list survives — so
|
|
1800
1845
|
// it is looked for rather than assumed absent (cubic P2 on #347).
|
|
1801
|
-
|
|
1802
|
-
|
|
1846
|
+
// NUL-delimited and with renames as a delete plus an add, so every path
|
|
1847
|
+
// the merge touches is named verbatim, both ends of a rename included.
|
|
1848
|
+
const { stdout: staged } = await this.git(cwd, ['diff', '--cached', '--name-only', '--no-renames', '-z']);
|
|
1849
|
+
if (staged === '') {
|
|
1803
1850
|
const { stdout: sha } = await this.git(cwd, ['rev-parse', 'HEAD']);
|
|
1804
1851
|
await this.git(cwd, ['merge', '--abort']).catch(() => undefined);
|
|
1805
1852
|
const own = opts.appliedChangeNumber === undefined
|
|
@@ -1816,6 +1863,10 @@ export class GitService {
|
|
|
1816
1863
|
const { stdout: sha } = await this.git(cwd, ['rev-parse', 'HEAD']);
|
|
1817
1864
|
try {
|
|
1818
1865
|
await this.git(cwd, ['push', 'origin', `HEAD:refs/heads/${targetBranch}`]);
|
|
1866
|
+
// This merge commit is provisional until its push lands: a rejected
|
|
1867
|
+
// push resets the checkout and the next attempt commits anew. So it
|
|
1868
|
+
// is reported here, once, for the attempt that landed on the target.
|
|
1869
|
+
this.landed(baseWorkspaceId, targetBranch, user, staged.split('\0').filter(Boolean));
|
|
1819
1870
|
this.accessControl?.invalidate(baseWorkspaceId);
|
|
1820
1871
|
// A commit of this request's own, with the subject the reader verifies.
|
|
1821
1872
|
return { kind: 'merged', sha: sha.trim(), mergeCommit: sha.trim() };
|
|
@@ -2108,7 +2159,7 @@ export class GitService {
|
|
|
2108
2159
|
}
|
|
2109
2160
|
/**
|
|
2110
2161
|
* Rebase the checked-out branch onto `remoteRef`, turning a content
|
|
2111
|
-
* conflict into the typed error the
|
|
2162
|
+
* conflict into the typed error the version-control layer queues recovery for.
|
|
2112
2163
|
* Shared by `pull` and `syncFromRemote` so the two cannot drift.
|
|
2113
2164
|
*/
|
|
2114
2165
|
async rebaseOntoRemote(cwd, branch, remoteRef, opts = {}) {
|
|
@@ -2183,7 +2234,7 @@ export class GitService {
|
|
|
2183
2234
|
abortSucceeded = false;
|
|
2184
2235
|
});
|
|
2185
2236
|
if (abortSucceeded && conflictedPaths.length > 0) {
|
|
2186
|
-
// Typed so the
|
|
2237
|
+
// Typed so the version-control layer can queue background recovery — this
|
|
2187
2238
|
// divergence never resolves on its own (every retry pull hits the
|
|
2188
2239
|
// same conflict) and the unpushed local commits are someone's saved
|
|
2189
2240
|
// content stuck violating save=share.
|
|
@@ -2620,7 +2671,7 @@ export class GitService {
|
|
|
2620
2671
|
// Only the genuinely empty separator lines are skipped.
|
|
2621
2672
|
const touched = nameLine.endsWith('\r') ? nameLine.slice(0, -1) : nameLine;
|
|
2622
2673
|
if (touched && touched !== repoRelativePath) {
|
|
2623
|
-
throw new
|
|
2674
|
+
throw new VersionControlValidationError(`"${relativePath}" is a directory at that point in history — history is served per file`);
|
|
2624
2675
|
}
|
|
2625
2676
|
}
|
|
2626
2677
|
}
|
|
@@ -2648,7 +2699,7 @@ export class GitService {
|
|
|
2648
2699
|
async diffFileAtCommit(workspaceId, relativePath, sha) {
|
|
2649
2700
|
assertValidRelativePath(relativePath);
|
|
2650
2701
|
if (!/^[a-f0-9]{7,40}$/i.test(sha)) {
|
|
2651
|
-
throw new
|
|
2702
|
+
throw new VersionControlValidationError('invalid commit sha');
|
|
2652
2703
|
}
|
|
2653
2704
|
const repoRelativePath = this.stripRepoPrefix(relativePath);
|
|
2654
2705
|
return this.mutex.run(workspaceId, async () => {
|
|
@@ -2696,7 +2747,7 @@ export class GitService {
|
|
|
2696
2747
|
async fileContentsAtCommit(workspaceId, relativePath, sha) {
|
|
2697
2748
|
assertValidRelativePath(relativePath);
|
|
2698
2749
|
if (!/^[a-f0-9]{7,40}$/i.test(sha)) {
|
|
2699
|
-
throw new
|
|
2750
|
+
throw new VersionControlValidationError('invalid commit sha');
|
|
2700
2751
|
}
|
|
2701
2752
|
const repoRelativePath = this.stripRepoPrefix(relativePath);
|
|
2702
2753
|
return this.mutex.run(workspaceId, async () => {
|
|
@@ -2732,7 +2783,7 @@ export class GitService {
|
|
|
2732
2783
|
assertValidBranchName(fromBranch);
|
|
2733
2784
|
assertValidBranchName(toBranch);
|
|
2734
2785
|
if (fromBranch === toBranch) {
|
|
2735
|
-
throw new
|
|
2786
|
+
throw new VersionControlValidationError('from and to branches must differ');
|
|
2736
2787
|
}
|
|
2737
2788
|
const repoRelativePath = this.stripRepoPrefix(relativePath);
|
|
2738
2789
|
return this.mutex.run(workspaceId, async () => {
|
|
@@ -2850,7 +2901,7 @@ export class GitService {
|
|
|
2850
2901
|
if (opts.at) {
|
|
2851
2902
|
for (const sha of [opts.at.baseSha, opts.at.headSha]) {
|
|
2852
2903
|
if (!/^[0-9a-f]{40,64}$/.test(sha)) {
|
|
2853
|
-
throw new
|
|
2904
|
+
throw new VersionControlValidationError(`invalid commit sha: ${sha}`);
|
|
2854
2905
|
}
|
|
2855
2906
|
}
|
|
2856
2907
|
}
|
|
@@ -2963,7 +3014,7 @@ export class GitService {
|
|
|
2963
3014
|
* side for a merge commit, and for a squashed or fast-forwarded commit it is
|
|
2964
3015
|
* simply the commit before — the same answer either way.
|
|
2965
3016
|
*
|
|
2966
|
-
* Throws `
|
|
3017
|
+
* Throws `VersionControlValidationError` whenever the recorded commit cannot be
|
|
2967
3018
|
* PROVEN to be this request's own merge commit — see
|
|
2968
3019
|
* {@link appliedChangeShas}. Every caller reads that as "the file set could
|
|
2969
3020
|
* not be resolved" and falls back to its own fail-closed answer, which is what
|
|
@@ -2973,7 +3024,7 @@ export class GitService {
|
|
|
2973
3024
|
async appliedEnds(cwd, applied) {
|
|
2974
3025
|
const { mergeSha, number } = applied;
|
|
2975
3026
|
if (!/^[0-9a-f]{40,64}$/.test(mergeSha)) {
|
|
2976
|
-
throw new
|
|
3027
|
+
throw new VersionControlValidationError(`invalid commit sha: ${mergeSha}`);
|
|
2977
3028
|
}
|
|
2978
3029
|
const revParse = async (rev) => {
|
|
2979
3030
|
try {
|
|
@@ -2998,7 +3049,7 @@ export class GitService {
|
|
|
2998
3049
|
// or a message that does not name the request) never becomes it, and is
|
|
2999
3050
|
// reported as a mismatch the caller may remember.
|
|
3000
3051
|
if (!(await revParse(`${mergeSha}^{commit}`))) {
|
|
3001
|
-
throw new
|
|
3052
|
+
throw new VersionControlValidationError(`commit ${mergeSha} is not in this clone, so change request #${number} cannot be read from it yet`);
|
|
3002
3053
|
}
|
|
3003
3054
|
// The SECOND parent first, because its absence is the whole P1: a merge
|
|
3004
3055
|
// `--no-ff` always has one, and a commit that does not is not a merge this
|
|
@@ -3125,7 +3176,7 @@ export class GitService {
|
|
|
3125
3176
|
// concurrent `fetch --prune origin` (`ensureRemotesFetched` and
|
|
3126
3177
|
// `fetchPrRefs` both run outside this mutex, deliberately) can drop a
|
|
3127
3178
|
// remote-tracking ref between the two, and re-resolving inside the mutex
|
|
3128
|
-
// would then throw `
|
|
3179
|
+
// would then throw `VersionControlValidationError` — which `touchedPathsFor`
|
|
3129
3180
|
// swallows into an empty touched-path set, i.e. exactly the change
|
|
3130
3181
|
// request missing from its own author's tree that the skip is guarded
|
|
3131
3182
|
// against. The commits stay readable whatever happens to the ref names.
|
|
@@ -3274,7 +3325,7 @@ export class GitService {
|
|
|
3274
3325
|
async forkPointForPr(workspaceId, at) {
|
|
3275
3326
|
for (const sha of [at.baseSha, at.headSha]) {
|
|
3276
3327
|
if (!/^[0-9a-f]{40,64}$/.test(sha)) {
|
|
3277
|
-
throw new
|
|
3328
|
+
throw new VersionControlValidationError(`invalid commit sha: ${sha}`);
|
|
3278
3329
|
}
|
|
3279
3330
|
}
|
|
3280
3331
|
const cwd = await this.repoDir(workspaceId);
|
|
@@ -3314,7 +3365,7 @@ export class GitService {
|
|
|
3314
3365
|
async pathsChangedBetween(workspaceId, fromSha, toSha) {
|
|
3315
3366
|
for (const sha of [fromSha, toSha]) {
|
|
3316
3367
|
if (!/^[0-9a-f]{40,64}$/.test(sha)) {
|
|
3317
|
-
throw new
|
|
3368
|
+
throw new VersionControlValidationError(`invalid commit sha: ${sha}`);
|
|
3318
3369
|
}
|
|
3319
3370
|
}
|
|
3320
3371
|
const cwd = await this.repoDir(workspaceId);
|
|
@@ -3339,7 +3390,7 @@ export class GitService {
|
|
|
3339
3390
|
assertValidBranchName(baseBranch);
|
|
3340
3391
|
assertValidRelativePath(relativePath);
|
|
3341
3392
|
if (!/^[0-9a-f]{40,64}$/.test(sha)) {
|
|
3342
|
-
throw new
|
|
3393
|
+
throw new VersionControlValidationError(`invalid commit sha: ${sha}`);
|
|
3343
3394
|
}
|
|
3344
3395
|
const repoRelativePath = this.stripRepoPrefix(relativePath);
|
|
3345
3396
|
return this.mutex.run(workspaceId, async () => {
|
|
@@ -3350,7 +3401,7 @@ export class GitService {
|
|
|
3350
3401
|
}
|
|
3351
3402
|
catch (err) {
|
|
3352
3403
|
if (err.exitCode === 1) {
|
|
3353
|
-
throw new
|
|
3404
|
+
throw new VersionControlDomainError(`That commit is not part of "${baseBranch}" — it is not this request's fork point.`, 404);
|
|
3354
3405
|
}
|
|
3355
3406
|
throw err;
|
|
3356
3407
|
}
|
|
@@ -3532,7 +3583,7 @@ export class GitService {
|
|
|
3532
3583
|
return await this.publishedPrEnds(cwd, baseBranch, headBranch);
|
|
3533
3584
|
}
|
|
3534
3585
|
catch (err) {
|
|
3535
|
-
if (err instanceof
|
|
3586
|
+
if (err instanceof VersionControlValidationError)
|
|
3536
3587
|
return null;
|
|
3537
3588
|
throw err;
|
|
3538
3589
|
}
|
|
@@ -3584,7 +3635,7 @@ export class GitService {
|
|
|
3584
3635
|
throw err;
|
|
3585
3636
|
}
|
|
3586
3637
|
}
|
|
3587
|
-
throw new
|
|
3638
|
+
throw new VersionControlValidationError(`unknown branch: ${branch}`);
|
|
3588
3639
|
}
|
|
3589
3640
|
/**
|
|
3590
3641
|
* Every commit `branch` resolves to in this repository — its local head
|
|
@@ -3623,7 +3674,7 @@ export class GitService {
|
|
|
3623
3674
|
// Try the next candidate.
|
|
3624
3675
|
}
|
|
3625
3676
|
}
|
|
3626
|
-
throw new
|
|
3677
|
+
throw new VersionControlValidationError(`unknown branch: ${branch}`);
|
|
3627
3678
|
}
|
|
3628
3679
|
// ── internals ──────────────────────────────────────────────────────────
|
|
3629
3680
|
async statusInternal(workspaceId) {
|
|
@@ -3759,7 +3810,7 @@ export class GitService {
|
|
|
3759
3810
|
throw err;
|
|
3760
3811
|
}
|
|
3761
3812
|
if (kind === 'tree') {
|
|
3762
|
-
throw new
|
|
3813
|
+
throw new VersionControlValidationError(`"${displayPath}" is a directory at that point in history — history is served per file`);
|
|
3763
3814
|
}
|
|
3764
3815
|
}
|
|
3765
3816
|
async readFileAtRef(workspaceId, ref, repoRelativePath) {
|
|
@@ -3899,7 +3950,7 @@ export class GitService {
|
|
|
3899
3950
|
async fileBytesAtCommit(workspaceId, relativePath, sha, side) {
|
|
3900
3951
|
assertValidRelativePath(relativePath);
|
|
3901
3952
|
if (!/^[a-f0-9]{7,40}$/i.test(sha)) {
|
|
3902
|
-
throw new
|
|
3953
|
+
throw new VersionControlValidationError('invalid commit sha');
|
|
3903
3954
|
}
|
|
3904
3955
|
const repoRelativePath = this.stripRepoPrefix(relativePath);
|
|
3905
3956
|
return this.mutex.run(workspaceId, async () => {
|