@bevel-software/platform-core-backend 0.34.0 → 0.36.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-guide/access-control.md +146 -300
- package/agent-guide/conventions.md +23 -25
- package/agent-guide/directory-structure.md +72 -120
- package/agent-guide/drafts-and-change-requests.md +92 -0
- package/agent-guide/for-git-users.md +47 -0
- package/agent-guide/glossary.md +36 -0
- package/agent-guide/how-agents-find-things.md +49 -0
- package/agent-guide/html-views.md +16 -11
- package/agent-guide/new-knowledge-base.md +9 -8
- package/agent-guide/onboarding.md +111 -0
- package/agent-guide/skills.md +67 -42
- package/agent-guide/start-here.md +66 -0
- package/agent-guide/tool-manuals.md +133 -154
- package/agent-guide/tools.md +67 -0
- package/agent-guide/where-a-new-file-goes.md +45 -28
- package/dist/core/catalog-cache-invalidation.d.ts +2 -2
- package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
- package/dist/core/compose-embed.d.ts +2 -2
- package/dist/core/compose-embed.d.ts.map +1 -1
- package/dist/core/compose-embed.js +1 -1
- package/dist/core/compose-embed.js.map +1 -1
- package/dist/core/core-ports.d.ts +19 -4
- package/dist/core/core-ports.d.ts.map +1 -1
- package/dist/core/core-ports.js.map +1 -1
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +27 -25
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +25 -13
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +75 -60
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +4 -4
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +5 -5
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core-config.d.ts +2 -2
- package/dist/core-config.js +3 -3
- package/dist/core-config.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.interface.d.ts +22 -0
- package/dist/modules/access/access-control.interface.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +3 -1
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +76 -1
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access-declarations.d.ts +2 -2
- package/dist/modules/access/access-declarations.d.ts.map +1 -1
- package/dist/modules/access/access-declarations.js +2 -2
- package/dist/modules/access/access-declarations.js.map +1 -1
- package/dist/modules/access/access-mutation.service.d.ts +2 -2
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
- package/dist/modules/access/access-mutation.service.js +2 -2
- package/dist/modules/access/access-mutation.service.js.map +1 -1
- package/dist/modules/access/access-requests.routes.d.ts +2 -2
- package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
- package/dist/modules/access/access-requests.routes.js +5 -5
- package/dist/modules/access/access-requests.routes.js.map +1 -1
- package/dist/modules/access/access-requests.service.d.ts +2 -2
- package/dist/modules/access/access-requests.service.d.ts.map +1 -1
- package/dist/modules/access/access-requests.service.js +11 -11
- package/dist/modules/access/access-requests.service.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts +2 -2
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +32 -13
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/admin-locked-commit.d.ts +5 -5
- package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
- package/dist/modules/access/admin-locked-commit.js +7 -7
- package/dist/modules/access/admin-locked-commit.js.map +1 -1
- package/dist/modules/access/admin-route-helpers.d.ts +1 -1
- package/dist/modules/access/admin-route-helpers.js +5 -5
- package/dist/modules/access/admin-route-helpers.js.map +1 -1
- package/dist/modules/access/change-read-gate.d.ts +1 -1
- package/dist/modules/access/change-read-gate.js +1 -1
- package/dist/modules/access/groups-admin.service.d.ts +7 -7
- package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.service.js +6 -6
- package/dist/modules/access/groups-admin.service.js.map +1 -1
- package/dist/modules/access/index.d.ts +1 -1
- package/dist/modules/access/index.d.ts.map +1 -1
- package/dist/modules/access/reference-scan.d.ts +1 -1
- package/dist/modules/access/roles-admin.service.d.ts +7 -7
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
- package/dist/modules/access/roles-admin.service.js +8 -8
- package/dist/modules/access/roles-admin.service.js.map +1 -1
- package/dist/modules/access/synced-groups-committer.d.ts +4 -4
- package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-committer.js +7 -7
- package/dist/modules/access/synced-groups-committer.js.map +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts +6 -6
- package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
- package/dist/modules/access/user-access-removal.service.js +4 -4
- package/dist/modules/access/user-access-removal.service.js.map +1 -1
- package/dist/modules/access-model/access-errors.d.ts +4 -4
- package/dist/modules/access-model/access-errors.d.ts.map +1 -1
- package/dist/modules/access-model/access-errors.js +4 -4
- package/dist/modules/access-model/access-errors.js.map +1 -1
- package/dist/modules/access-model/access-grammar.d.ts +1 -1
- package/dist/modules/access-model/access-grammar.js +4 -4
- package/dist/modules/access-model/change-gate.d.ts +1 -1
- package/dist/modules/access-model/change-gate.js +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts +4 -4
- package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.js +4 -4
- package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.d.ts +63 -18
- package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.js +144 -30
- package/dist/modules/agent-guide/agent-guide.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.d.ts +6 -2
- package/dist/modules/agent-guide/agent-guide.tools.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.js +45 -31
- package/dist/modules/agent-guide/agent-guide.tools.js.map +1 -1
- package/dist/modules/agent-guide/guide-budget.d.ts +51 -0
- package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -0
- package/dist/modules/agent-guide/guide-budget.js +71 -0
- package/dist/modules/agent-guide/guide-budget.js.map +1 -0
- package/dist/modules/agent-guide/index.d.ts +2 -1
- package/dist/modules/agent-guide/index.d.ts.map +1 -1
- package/dist/modules/agent-guide/index.js +2 -1
- package/dist/modules/agent-guide/index.js.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +12 -5
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.js +13 -6
- package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
- package/dist/modules/agent-instructions/compose.d.ts +15 -8
- package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
- package/dist/modules/agent-instructions/compose.js +28 -10
- package/dist/modules/agent-instructions/compose.js.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.d.ts +14 -6
- package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.js +60 -18
- package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
- package/dist/modules/auth/account-erasure.service.d.ts +36 -7
- package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
- package/dist/modules/auth/account-erasure.service.js +30 -10
- package/dist/modules/auth/account-erasure.service.js.map +1 -1
- package/dist/modules/auth/account-hooks.d.ts +20 -0
- package/dist/modules/auth/account-hooks.d.ts.map +1 -1
- package/dist/modules/auth/account-hooks.js +10 -0
- package/dist/modules/auth/account-hooks.js.map +1 -1
- package/dist/modules/auth/account-switch-lock.js +2 -2
- package/dist/modules/auth/account-switch-lock.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts +7 -2
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +23 -4
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +1 -1
- package/dist/modules/auth/auth.service.js +4 -4
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/index.d.ts +1 -0
- package/dist/modules/auth/index.d.ts.map +1 -1
- package/dist/modules/code-mode/code-mode.tool.js +2 -2
- package/dist/modules/code-mode/code-mode.tool.js.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.d.ts +0 -12
- package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.js +1 -38
- package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
- package/dist/modules/database/core-schema.js +2 -2
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/diff/diff.routes.d.ts +3 -3
- package/dist/modules/diff/diff.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.js +7 -7
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/embed/embed.routes.js +1 -1
- package/dist/modules/embed/embed.routes.js.map +1 -1
- package/dist/modules/embed/embed.service.d.ts +4 -4
- package/dist/modules/embed/embed.service.d.ts.map +1 -1
- package/dist/modules/embed/embed.service.js +18 -18
- package/dist/modules/embed/embed.service.js.map +1 -1
- package/dist/modules/kb-fs/branch-name.js +8 -8
- package/dist/modules/kb-fs/branch-name.js.map +1 -1
- package/dist/modules/kb-fs/file-change-notifier.d.ts +2 -2
- package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -9
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +27 -27
- package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/repo-path.js +5 -5
- package/dist/modules/kb-fs/repo-path.js.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
- package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.js +2 -2
- package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
- package/dist/modules/kb-sync/index.d.ts +1 -1
- package/dist/modules/kb-sync/index.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js +10 -10
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +11 -4
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +80 -53
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
- package/dist/modules/onboarding/onboarding.routes.js +2 -2
- package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.d.ts +4 -4
- package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.js +4 -4
- package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.js +7 -7
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
- package/dist/modules/plugins/join-requests.service.d.ts +3 -3
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +5 -5
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.js +1 -1
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +2 -2
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +8 -8
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +87 -2
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js +635 -74
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +3 -2
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js +2 -1
- package/dist/modules/secrets-vault/index.js.map +1 -1
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +205 -11
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.contract.js +27 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +206 -45
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
- package/dist/modules/settings/connection-check.js +1 -1
- package/dist/modules/settings/connection-check.js.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +1 -1
- package/dist/modules/settings/git-root-folders.js +1 -1
- package/dist/modules/settings/git-root-folders.js.map +1 -1
- package/dist/modules/settings/oidc-check.d.ts.map +1 -1
- package/dist/modules/settings/oidc-check.js +5 -17
- package/dist/modules/settings/oidc-check.js.map +1 -1
- package/dist/modules/settings/setup.routes.d.ts +1 -1
- package/dist/modules/settings/setup.routes.js +1 -1
- package/dist/modules/skills/pending-skills.service.d.ts +3 -3
- package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
- package/dist/modules/skills/pending-skills.service.js +4 -4
- package/dist/modules/skills/pending-skills.service.js.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +5 -5
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
- package/dist/modules/skills/skills.tools.js +1 -1
- package/dist/modules/skills/skills.tools.js.map +1 -1
- package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +2 -2
- package/dist/modules/tool-helpers/tool-context.js.map +1 -1
- package/dist/modules/tool-helpers/tool-def.js +1 -1
- package/dist/modules/tool-helpers/tool-def.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +2 -2
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.d.ts +7 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.js +69 -38
- package/dist/modules/tool-manuals/mcp-json-discovery.js.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
- package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
- package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +70 -3
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +18 -8
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +166 -49
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +11 -2
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +66 -24
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
- package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
- package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +53 -49
- package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
- package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
- package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-hooks.js.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
- package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
- package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
- package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
- package/dist/modules/version-control/event-bus.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
- package/dist/modules/version-control/event-bus.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
- package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
- package/dist/modules/version-control/events-delivery.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
- package/dist/modules/version-control/events.routes.d.ts.map +1 -0
- package/dist/modules/version-control/events.routes.js.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
- package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
- package/dist/modules/version-control/file-lock.service.js.map +1 -0
- package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
- package/dist/modules/version-control/git/change-request-link.js.map +1 -0
- package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
- package/dist/modules/version-control/git/git-version.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.d.ts +8 -8
- package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.js +53 -53
- package/dist/modules/version-control/git/git.service.js.map +1 -0
- package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
- package/dist/modules/version-control/git/merge-commit.js.map +1 -0
- package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
- package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
- package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
- package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
- package/dist/modules/version-control/index.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/index.js +3 -2
- package/dist/modules/version-control/index.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
- package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
- package/dist/modules/version-control/pending-commits.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
- package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
- package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
- package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
- package/dist/modules/version-control/read-on-branch.js.map +1 -0
- package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
- package/dist/modules/version-control/recovery-bot.js.map +1 -0
- package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
- package/dist/modules/version-control/sanitize-error.js.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +4 -4
- package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +3 -3
- package/dist/modules/version-control/version-control-hooks.js.map +1 -0
- package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
- package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
- package/dist/modules/version-control/version-control.routes.js.map +1 -0
- package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -31
- package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +89 -94
- package/dist/modules/version-control/version-control.service.js.map +1 -0
- package/dist/modules/workspace/agent-access.gate.d.ts +6 -6
- package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
- package/dist/modules/workspace/agent-access.gate.js +2 -2
- package/dist/modules/workspace/agent-access.gate.js.map +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
- package/dist/modules/workspace/git-internals.middleware.js +2 -2
- package/dist/modules/workspace/kb-repository.js +1 -1
- package/dist/modules/workspace/kb-repository.js.map +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-git.js +1 -1
- package/dist/modules/workspace/startup/kb-git.js.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
- package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.js +8 -5
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
- package/dist/modules/workspace/workspace-tmp.js +3 -3
- package/dist/modules/workspace/workspace-tmp.js.map +1 -1
- package/dist/modules/workspace/workspace.routes.d.ts +4 -4
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +22 -22
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +6 -6
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +11 -11
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +5 -3
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +85 -30
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/shared/canonical-file-identity.d.ts +2 -2
- package/dist/shared/canonical-file-identity.js +5 -5
- package/dist/shared/canonical-file-identity.js.map +1 -1
- package/dist/shared/domain-errors.d.ts +39 -39
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +44 -44
- package/dist/shared/domain-errors.js.map +1 -1
- package/dist/shared/git.contract.d.ts +1 -1
- package/dist/shared/git.contract.js +1 -1
- package/dist/shared/http-errors.d.ts +3 -3
- package/dist/shared/http-errors.d.ts.map +1 -1
- package/dist/shared/http-errors.js +1 -1
- package/dist/shared/http-errors.js.map +1 -1
- package/dist/shared/oauth-token-error.d.ts +23 -0
- package/dist/shared/oauth-token-error.d.ts.map +1 -0
- package/dist/shared/oauth-token-error.js +47 -0
- package/dist/shared/oauth-token-error.js.map +1 -0
- package/dist/shared/pending-proposals.d.ts +3 -3
- package/dist/shared/pending-proposals.d.ts.map +1 -1
- package/dist/shared/pending-proposals.js +2 -2
- package/dist/shared/pending-proposals.js.map +1 -1
- package/dist/shared/read-capped.d.ts +19 -0
- package/dist/shared/read-capped.d.ts.map +1 -0
- package/dist/shared/read-capped.js +45 -0
- package/dist/shared/read-capped.js.map +1 -0
- package/dist/tenancy/static-tenant-source.js +1 -1
- package/dist/tenancy/static-tenant-source.js.map +1 -1
- package/migrations/0012_agent_audit.sql +40 -40
- package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
- package/migrations/meta/0012_snapshot.json +2246 -2246
- package/migrations/meta/0013_snapshot.json +2258 -2258
- package/package.json +5 -4
- package/src/__tests__/account-admin.ts +27 -0
- package/src/__tests__/hexis-catalog.ts +144 -0
- package/src/__tests__/kb-context.ts +30 -30
- package/src/__tests__/kb-layout-config.test.ts +21 -0
- package/src/__tests__/open-change-gate.ts +1 -1
- package/src/__tests__/real-disk.ts +21 -0
- package/src/__tests__/tokens.ts +19 -0
- package/src/__tests__/tool-handler.ts +15 -0
- package/src/__tests__/tool-manuals.ts +32 -0
- package/src/__tests__/tool-wiring.ts +31 -0
- package/src/__tests__/workspace-service.ts +1 -1
- package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
- package/src/core/__tests__/compose-embed.test.ts +1 -1
- package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
- package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
- package/src/core/__tests__/gated-boot.test.ts +2 -2
- package/src/core/__tests__/lifecycle.test.ts +9 -9
- package/src/core/__tests__/oauth-sign-in-real-file.test.ts +179 -0
- package/src/core/catalog-cache-invalidation.ts +2 -2
- package/src/core/compose-embed.ts +3 -3
- package/src/core/core-ports.ts +19 -4
- package/src/core/create-core-server.ts +40 -26
- package/src/core/create-core-services.ts +92 -66
- package/src/core/lifecycle.ts +9 -9
- package/src/core-config.ts +3 -3
- package/src/index.ts +5 -5
- package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
- package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
- package/src/modules/access/__tests__/access-requests.routes.test.ts +20 -20
- package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
- package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +54 -14
- package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
- package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
- package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
- package/src/modules/access/__tests__/groups-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/holder-changes.test.ts +127 -0
- package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
- package/src/modules/access/__tests__/roles-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/roles-capabilities.test.ts +19 -19
- package/src/modules/access/__tests__/roles.routes.test.ts +6 -6
- package/src/modules/access/__tests__/synced-groups-committer.test.ts +13 -13
- package/src/modules/access/__tests__/user-access-removal.service.test.ts +29 -29
- package/src/modules/access/access-control.interface.ts +26 -0
- package/src/modules/access/access-control.service.ts +93 -1
- package/src/modules/access/access-declarations.ts +2 -2
- package/src/modules/access/access-mutation.service.ts +2 -2
- package/src/modules/access/access-requests.routes.ts +7 -7
- package/src/modules/access/access-requests.service.ts +13 -13
- package/src/modules/access/access.routes.ts +34 -15
- package/src/modules/access/admin-locked-commit.ts +11 -11
- package/src/modules/access/admin-route-helpers.ts +5 -5
- package/src/modules/access/change-read-gate.ts +1 -1
- package/src/modules/access/groups-admin.service.ts +7 -7
- package/src/modules/access/index.ts +1 -1
- package/src/modules/access/reference-scan.ts +1 -1
- package/src/modules/access/roles-admin.service.ts +9 -9
- package/src/modules/access/synced-groups-committer.ts +11 -11
- package/src/modules/access/user-access-removal.service.ts +7 -7
- package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
- package/src/modules/access-model/access-errors.ts +4 -4
- package/src/modules/access-model/access-grammar.ts +4 -4
- package/src/modules/access-model/change-gate.ts +1 -1
- package/src/modules/access-model/roles-yaml-guard.ts +4 -4
- package/src/modules/agent-guide/__tests__/agent-guide.test.ts +98 -29
- package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +39 -12
- package/src/modules/agent-guide/__tests__/guide-budget.test.ts +95 -0
- package/src/modules/agent-guide/__tests__/guide-eval.test.ts +182 -0
- package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +263 -0
- package/src/modules/agent-guide/__tests__/tool-surface.json +514 -0
- package/src/modules/agent-guide/__tests__/tool-surface.test.ts +75 -0
- package/src/modules/agent-guide/agent-guide.tools.ts +49 -31
- package/src/modules/agent-guide/agent-guide.ts +165 -32
- package/src/modules/agent-guide/guide-budget.ts +77 -0
- package/src/modules/agent-guide/index.ts +12 -0
- package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
- package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
- package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +117 -11
- package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
- package/src/modules/agent-instructions/compose.ts +28 -9
- package/src/modules/agent-instructions/shared-file-rules.ts +62 -18
- package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
- package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
- package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
- package/src/modules/audit/event-classifier.ts +155 -155
- package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
- package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
- package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
- package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
- package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
- package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
- package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
- package/src/modules/auth/account-erasure.service.ts +27 -9
- package/src/modules/auth/account-hooks.ts +34 -0
- package/src/modules/auth/account-switch-lock.ts +2 -2
- package/src/modules/auth/account.routes.ts +23 -5
- package/src/modules/auth/auth.service.ts +4 -4
- package/src/modules/auth/index.ts +1 -0
- package/src/modules/code-mode/code-mode.tool.ts +2 -2
- package/src/modules/connection-probe/__tests__/connection-probe.service.test.ts +5 -24
- package/src/modules/connection-probe/connection-probe.service.ts +1 -34
- package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
- package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
- package/src/modules/database/core-schema.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
- package/src/modules/diff/diff.routes.ts +8 -8
- package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
- package/src/modules/embed/__tests__/embed.service.test.ts +42 -42
- package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
- package/src/modules/embed/embed.routes.ts +1 -1
- package/src/modules/embed/embed.service.ts +17 -17
- package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
- package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +260 -260
- package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +34 -34
- package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
- package/src/modules/kb-fs/branch-name.ts +8 -8
- package/src/modules/kb-fs/file-change-notifier.ts +2 -2
- package/src/modules/kb-fs/locking-filesystem.ts +30 -30
- package/src/modules/kb-fs/repo-path.ts +5 -5
- package/src/modules/kb-fs/tmp-ref.ts +3 -3
- package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
- package/src/modules/kb-sync/index.ts +1 -1
- package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
- package/src/modules/kb-sync/kb-sync.service.ts +9 -9
- package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
- package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
- package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
- package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
- package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
- package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
- package/src/modules/mcp/mcp.service.ts +93 -62
- package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +55 -55
- package/src/modules/onboarding/onboarding.contract.ts +1 -1
- package/src/modules/onboarding/onboarding.routes.ts +2 -2
- package/src/modules/onboarding/starter-pack.service.ts +6 -6
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
- package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
- package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
- package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
- package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
- package/src/modules/plugins/__tests__/plugins.routes.test.ts +25 -25
- package/src/modules/plugins/join-request-jobs.service.ts +10 -10
- package/src/modules/plugins/join-requests.service.ts +4 -4
- package/src/modules/plugins/plugin-rename.service.ts +1 -1
- package/src/modules/plugins/plugins.routes.ts +9 -9
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +458 -4
- package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
- package/src/modules/secrets-vault/__tests__/oauth-live-declaration.route.test.ts +218 -0
- package/src/modules/secrets-vault/__tests__/oauth-return-to.route.test.ts +39 -6
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +728 -118
- package/src/modules/secrets-vault/index.ts +8 -1
- package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
- package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
- package/src/modules/secrets-vault/secrets-vault.contract.ts +213 -11
- package/src/modules/secrets-vault/secrets-vault.routes.ts +244 -45
- package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
- package/src/modules/settings/connection-check.ts +1 -1
- package/src/modules/settings/deployment-settings.service.ts +1 -1
- package/src/modules/settings/git-root-folders.ts +1 -1
- package/src/modules/settings/oidc-check.ts +5 -18
- package/src/modules/settings/setup.routes.ts +1 -1
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
- package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
- package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
- package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
- package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
- package/src/modules/skills/pending-skills.service.ts +3 -3
- package/src/modules/skills/skill-access-requests.routes.ts +7 -7
- package/src/modules/skills/skills.tools.ts +1 -1
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +22 -14
- package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
- package/src/modules/tool-helpers/__tests__/route-tool-schemas.catalog.test.ts +38 -0
- package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
- package/src/modules/tool-helpers/tool-context.ts +6 -6
- package/src/modules/tool-helpers/tool-def.ts +1 -1
- package/src/modules/tool-helpers/tool-handler.ts +2 -2
- package/src/modules/tool-helpers/tool.contract.ts +4 -4
- package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
- package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.mcp-oauth.test.ts +197 -11
- package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +132 -6
- package/src/modules/tool-manuals/mcp-json-discovery.ts +73 -34
- package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
- package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
- package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
- package/src/modules/tool-manuals/tool-manuals.contract.ts +63 -3
- package/src/modules/tool-manuals/tool-manuals.service.ts +191 -51
- package/src/modules/tool-manuals/tool-manuals.tools.ts +93 -28
- package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
- package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
- package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +12 -119
- package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
- package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
- package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
- package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
- package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
- package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
- package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.fork-point-file.test.ts → version-control/__tests__/version-control.routes.fork-point-file.test.ts} +19 -19
- package/src/modules/{workflow/__tests__/workflow.routes.history-read-gate.test.ts → version-control/__tests__/version-control.routes.history-read-gate.test.ts} +13 -13
- package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.open-change-request.test.ts → version-control/__tests__/version-control.routes.open-change-request.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.branch-in-use.test.ts → version-control/__tests__/version-control.service.branch-in-use.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts → version-control/__tests__/version-control.service.deleted-branch-sweep.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +97 -99
- package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
- package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +42 -42
- package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.pg.test.ts → version-control/__tests__/version-control.service.update-change-request.pg.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.test.ts → version-control/__tests__/version-control.service.update-change-request.test.ts} +11 -11
- package/src/modules/{workflow/__tests__/workflow.service.update-from-target.test.ts → version-control/__tests__/version-control.service.update-from-target.test.ts} +22 -22
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
- package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
- package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
- package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +52 -48
- package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
- package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
- package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
- package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
- package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
- package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
- package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +20 -20
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/git.service.ts +57 -57
- package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
- package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
- package/src/modules/{workflow → version-control}/index.ts +6 -5
- package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
- package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
- package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
- package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +3 -3
- package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
- package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +92 -97
- package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
- package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
- package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
- package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
- package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
- package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
- package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
- package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
- package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +12 -14
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +182 -75
- package/src/modules/workspace/agent-access.gate.ts +6 -6
- package/src/modules/workspace/git-internals.middleware.ts +2 -2
- package/src/modules/workspace/kb-repository.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
- package/src/modules/workspace/startup/kb-git.ts +1 -1
- package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
- package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
- package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
- package/src/modules/workspace/startup/steps/template-source.ts +21 -6
- package/src/modules/workspace/workspace-tmp.ts +4 -4
- package/src/modules/workspace/workspace.routes.ts +26 -26
- package/src/modules/workspace/workspace.service.ts +11 -11
- package/src/modules/workspace/workspace.tools.ts +90 -30
- package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
- package/src/shared/__tests__/http-errors.test.ts +4 -4
- package/src/shared/__tests__/read-capped.test.ts +68 -0
- package/src/shared/canonical-file-identity.ts +5 -5
- package/src/shared/domain-errors.ts +44 -44
- package/src/shared/git.contract.ts +1 -1
- package/src/shared/http-errors.ts +3 -3
- package/src/shared/kb-context.ts +130 -130
- package/src/shared/oauth-token-error.ts +46 -0
- package/src/shared/pending-proposals.ts +4 -4
- package/src/shared/read-capped.ts +40 -0
- package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
- package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
- package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
- package/src/tenancy/index.ts +35 -35
- package/src/tenancy/static-tenant-source.ts +1 -1
- package/src/tenancy/tenant-host.ts +261 -261
- package/src/tenancy/tenant-runtime.ts +208 -208
- package/src/tenancy/tenant-source.contract.ts +59 -59
- package/agent-guide/finding-things.md +0 -7
- package/agent-guide/introduction.md +0 -27
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
- package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/change-request-hooks.js.map +0 -1
- package/dist/modules/workflow/event-bus.d.ts.map +0 -1
- package/dist/modules/workflow/event-bus.js.map +0 -1
- package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
- package/dist/modules/workflow/events-delivery.js.map +0 -1
- package/dist/modules/workflow/events.routes.d.ts.map +0 -1
- package/dist/modules/workflow/events.routes.js.map +0 -1
- package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
- package/dist/modules/workflow/file-lock.service.js.map +0 -1
- package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
- package/dist/modules/workflow/git/change-request-link.js.map +0 -1
- package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
- package/dist/modules/workflow/git/git-version.js.map +0 -1
- package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/git.service.js.map +0 -1
- package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
- package/dist/modules/workflow/git/merge-commit.js.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
- package/dist/modules/workflow/index.d.ts.map +0 -1
- package/dist/modules/workflow/index.js.map +0 -1
- package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.service.js.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
- package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
- package/dist/modules/workflow/read-on-branch.js.map +0 -1
- package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
- package/dist/modules/workflow/recovery-bot.js.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
- package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
- package/dist/modules/workflow/sanitize-error.js.map +0 -1
- package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/workflow-hooks.js.map +0 -1
- package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.routes.js.map +0 -1
- package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.service.js.map +0 -1
- package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
- /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
- /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
- /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
- /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
- /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
- /package/src/modules/{workflow → version-control}/sanitize-error.ts +0 -0
|
@@ -23,7 +23,7 @@ import type {
|
|
|
23
23
|
import { isFolderPlaceholder } from '@bevel-software/platform-shared';
|
|
24
24
|
import { mergeCommitMessageNames } from './merge-commit.js';
|
|
25
25
|
import type { WorkspaceService } from '../../workspace/index.js';
|
|
26
|
-
import type {
|
|
26
|
+
import type { VersionControlHooks, CommitValidationContext } from '../version-control-hooks.js';
|
|
27
27
|
import type { IAccessControl } from '../../access/index.js';
|
|
28
28
|
import { AccessDeniedError } from '../../access-model/index.js';
|
|
29
29
|
import { WorkspaceIdMutex, type WorkspaceMutex, assertInsideRepo, cloneTrackingConfigArgs, SAFE_IMPLICIT_FETCH_ARGS, readRefSha } from '../../kb-fs/index.js';
|
|
@@ -42,8 +42,8 @@ import {
|
|
|
42
42
|
AppliedChangeMismatchError,
|
|
43
43
|
BranchAuthorshipError,
|
|
44
44
|
BranchDeleteRefusedError,
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
VersionControlDomainError,
|
|
46
|
+
VersionControlValidationError,
|
|
47
47
|
ProtectedBranchError,
|
|
48
48
|
PullRebaseConflictError,
|
|
49
49
|
RemoteBranchGoneError,
|
|
@@ -69,7 +69,7 @@ const crLog = logger('cr');
|
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
/**
|
|
72
|
-
* Fallback committer identity. Every
|
|
72
|
+
* Fallback committer identity. Every version-control commit overrides the author via
|
|
73
73
|
* `--author=…` so the real human shows up in `git log`; this is just the
|
|
74
74
|
* committer git records need. Mirrors the value `WorkspaceService` stamps on
|
|
75
75
|
* each clone — set again where an operation must not depend on that ambient
|
|
@@ -149,13 +149,13 @@ function buildDefaultCommitSummary(repoRelativePath: string): string {
|
|
|
149
149
|
|
|
150
150
|
function assertValidAuthor(user: AuthUser): void {
|
|
151
151
|
if (!user.name || !user.email) {
|
|
152
|
-
throw new
|
|
152
|
+
throw new VersionControlValidationError('commit author name and email are required');
|
|
153
153
|
}
|
|
154
154
|
if (/[\r\n<>]/.test(user.name)) {
|
|
155
|
-
throw new
|
|
155
|
+
throw new VersionControlValidationError('commit author name contains invalid characters');
|
|
156
156
|
}
|
|
157
157
|
if (/[\r\n<>\s]/.test(user.email) || !/^[^@\s]+@[^@\s]+$/.test(user.email)) {
|
|
158
|
-
throw new
|
|
158
|
+
throw new VersionControlValidationError('commit author email is not a valid address');
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
161
|
|
|
@@ -317,13 +317,13 @@ export class GitService implements IGitService {
|
|
|
317
317
|
constructor(
|
|
318
318
|
private readonly workspaceService: WorkspaceService,
|
|
319
319
|
/**
|
|
320
|
-
*
|
|
320
|
+
* Version-control lifecycle hooks. This service only consults the ADVISORY
|
|
321
321
|
* `commitValidation` hooks (registered by the enterprise kb module in the
|
|
322
322
|
* composition root — the constructor-injected `IKbValidator` this
|
|
323
323
|
* replaced). No hooks registered = no commit-time validation, which is
|
|
324
324
|
* safe because validation is advisory and never blocks a commit.
|
|
325
325
|
*/
|
|
326
|
-
private readonly hooks:
|
|
326
|
+
private readonly hooks: VersionControlHooks,
|
|
327
327
|
private readonly kb: KbContext,
|
|
328
328
|
// Keyed by the CANONICAL workspace id: a route's Express-decoded `:id`
|
|
329
329
|
// (`alice/feature`) and a tool's `alice%2Ffeature` name one clone, and
|
|
@@ -808,7 +808,7 @@ export class GitService implements IGitService {
|
|
|
808
808
|
const cwd = await this.repoDir(workspaceId);
|
|
809
809
|
const current = await this.currentBranch(cwd);
|
|
810
810
|
if (current === name) {
|
|
811
|
-
throw new
|
|
811
|
+
throw new VersionControlValidationError(
|
|
812
812
|
`Cannot delete "${name}" while it's the checked-out branch.`,
|
|
813
813
|
);
|
|
814
814
|
}
|
|
@@ -824,7 +824,7 @@ export class GitService implements IGitService {
|
|
|
824
824
|
// not just their own — but keep the "refuse if origin still has the
|
|
825
825
|
// ref" safety: a present remote means the branch is still live.
|
|
826
826
|
if (await this.refExists(cwd, `refs/remotes/origin/${name}`)) {
|
|
827
|
-
throw new
|
|
827
|
+
throw new VersionControlValidationError(
|
|
828
828
|
`Branch "${name}" still exists on origin — refusing to auto-prune.`,
|
|
829
829
|
);
|
|
830
830
|
}
|
|
@@ -1008,12 +1008,12 @@ export class GitService implements IGitService {
|
|
|
1008
1008
|
req: ShareChangesRequest,
|
|
1009
1009
|
): Promise<CommitAttribution> {
|
|
1010
1010
|
const subject = req.summary?.trim();
|
|
1011
|
-
if (!subject) throw new
|
|
1011
|
+
if (!subject) throw new VersionControlValidationError('commit summary is required');
|
|
1012
1012
|
if (subject.length > 200) {
|
|
1013
|
-
throw new
|
|
1013
|
+
throw new VersionControlValidationError('commit summary must be ≤ 200 characters');
|
|
1014
1014
|
}
|
|
1015
1015
|
if (subject.includes('\n')) {
|
|
1016
|
-
throw new
|
|
1016
|
+
throw new VersionControlValidationError('commit summary must be a single line');
|
|
1017
1017
|
}
|
|
1018
1018
|
assertValidAuthor(user);
|
|
1019
1019
|
|
|
@@ -1033,12 +1033,12 @@ export class GitService implements IGitService {
|
|
|
1033
1033
|
]);
|
|
1034
1034
|
const touched = parsePorcelainZ(porcelain);
|
|
1035
1035
|
if (touched.length === 0) {
|
|
1036
|
-
throw new
|
|
1036
|
+
throw new VersionControlValidationError('No pending changes to commit', {
|
|
1037
1037
|
kind: 'no-pending-changes',
|
|
1038
1038
|
});
|
|
1039
1039
|
}
|
|
1040
1040
|
if (touched.length > 1) {
|
|
1041
|
-
throw new
|
|
1041
|
+
throw new VersionControlValidationError(
|
|
1042
1042
|
`Each change must affect exactly one file. ${touched.length} files are currently pending: ${touched.join(', ')}. Commit them one at a time.`,
|
|
1043
1043
|
{ kind: 'too-many-files-dirty', paths: touched },
|
|
1044
1044
|
);
|
|
@@ -1206,7 +1206,7 @@ export class GitService implements IGitService {
|
|
|
1206
1206
|
// **No access check at commit time.** Per the "disk is the source of
|
|
1207
1207
|
// truth" rule, by the time content is on disk it must not be rejected.
|
|
1208
1208
|
// The permission check that used to live here now runs at lock
|
|
1209
|
-
// acquisition (see `
|
|
1209
|
+
// acquisition (see `VersionControlService.acquireLock`'s
|
|
1210
1210
|
// `assertCanWriteAtPath`), so a user can't even start editing a file
|
|
1211
1211
|
// they lack write permission on — they never reach this commit. The
|
|
1212
1212
|
// legacy gate could destroy a user's edits when access changed
|
|
@@ -1235,10 +1235,10 @@ export class GitService implements IGitService {
|
|
|
1235
1235
|
|
|
1236
1236
|
const subject = summary?.trim() || buildDefaultCommitSummary(repoRelativePath);
|
|
1237
1237
|
if (subject.length > 200) {
|
|
1238
|
-
throw new
|
|
1238
|
+
throw new VersionControlValidationError('commit summary must be ≤ 200 characters');
|
|
1239
1239
|
}
|
|
1240
1240
|
if (subject.includes('\n')) {
|
|
1241
|
-
throw new
|
|
1241
|
+
throw new VersionControlValidationError('commit summary must be a single line');
|
|
1242
1242
|
}
|
|
1243
1243
|
|
|
1244
1244
|
await this.git(cwd, [
|
|
@@ -1292,9 +1292,9 @@ export class GitService implements IGitService {
|
|
|
1292
1292
|
): Promise<CommitAttribution | null> {
|
|
1293
1293
|
assertValidAuthor(user);
|
|
1294
1294
|
const subject = summary?.trim();
|
|
1295
|
-
if (!subject) throw new
|
|
1296
|
-
if (subject.length > 200) throw new
|
|
1297
|
-
if (subject.includes('\n')) throw new
|
|
1295
|
+
if (!subject) throw new VersionControlValidationError('commit summary is required');
|
|
1296
|
+
if (subject.length > 200) throw new VersionControlValidationError('commit summary must be ≤ 200 characters');
|
|
1297
|
+
if (subject.includes('\n')) throw new VersionControlValidationError('commit summary must be a single line');
|
|
1298
1298
|
|
|
1299
1299
|
return this.mutex.run(workspaceId, async () => {
|
|
1300
1300
|
const cwd = await this.repoDir(workspaceId);
|
|
@@ -1480,7 +1480,7 @@ export class GitService implements IGitService {
|
|
|
1480
1480
|
}
|
|
1481
1481
|
}
|
|
1482
1482
|
|
|
1483
|
-
// `forcePush` method removed. The
|
|
1483
|
+
// `forcePush` method removed. The version-control layer no longer auto-force-pushes
|
|
1484
1484
|
// as a recovery — when the cooperative `pull --rebase` + retry can't
|
|
1485
1485
|
// reconcile, we throw `PushNeedsAgentResolutionError` and hand off to the
|
|
1486
1486
|
// agent. The agent has git + gh CLI access and can choose to run a raw
|
|
@@ -1493,7 +1493,7 @@ export class GitService implements IGitService {
|
|
|
1493
1493
|
|
|
1494
1494
|
/**
|
|
1495
1495
|
* Attempt a local merge of `origin/<targetBranch>` into the currently-
|
|
1496
|
-
* checked-out branch. Used by the
|
|
1496
|
+
* checked-out branch. Used by the version-control module to auto-merge target →
|
|
1497
1497
|
* source when a change request is opened or refreshed (PLAN §1).
|
|
1498
1498
|
*
|
|
1499
1499
|
* Two outcomes:
|
|
@@ -1564,7 +1564,7 @@ export class GitService implements IGitService {
|
|
|
1564
1564
|
assertValidBranchName(fromBranch);
|
|
1565
1565
|
assertValidAuthor(user);
|
|
1566
1566
|
if (/\n\s*\n/.test(opts.subject)) {
|
|
1567
|
-
throw new
|
|
1567
|
+
throw new VersionControlValidationError('merge commit subject must be a single paragraph');
|
|
1568
1568
|
}
|
|
1569
1569
|
// Every resolution names a repository path; which of them are conflicted
|
|
1570
1570
|
// is only known inside the merge, where they are matched exactly.
|
|
@@ -1579,12 +1579,12 @@ export class GitService implements IGitService {
|
|
|
1579
1579
|
const p = this.stripRepoPrefix(r.path);
|
|
1580
1580
|
const ways = [r.content !== undefined, r.choose !== undefined].filter(Boolean).length;
|
|
1581
1581
|
if (ways !== 1) {
|
|
1582
|
-
throw new
|
|
1582
|
+
throw new VersionControlValidationError(`resolution for "${p}": give either \`content\` or \`choose\`, not ${ways === 0 ? 'neither' : 'both'}`);
|
|
1583
1583
|
}
|
|
1584
1584
|
if (r.choose !== undefined && !['ours', 'theirs', 'delete'].includes(r.choose)) {
|
|
1585
|
-
throw new
|
|
1585
|
+
throw new VersionControlValidationError(`resolution for "${p}": \`choose\` is \`ours\`, \`theirs\` or \`delete\``);
|
|
1586
1586
|
}
|
|
1587
|
-
if (resolutions.has(p)) throw new
|
|
1587
|
+
if (resolutions.has(p)) throw new VersionControlValidationError(`"${p}" is resolved twice`);
|
|
1588
1588
|
resolutions.set(p, { ...r, path: p });
|
|
1589
1589
|
}
|
|
1590
1590
|
return this.mutex.run(workspaceId, async () =>
|
|
@@ -1616,7 +1616,7 @@ export class GitService implements IGitService {
|
|
|
1616
1616
|
*
|
|
1617
1617
|
* `publish` runs over the merge commit inside this same reservation, so no
|
|
1618
1618
|
* save or sync can land between the commit and its push; it is the
|
|
1619
|
-
* caller's push policy (the
|
|
1619
|
+
* caller's push policy (the version-control service's `pushWithRecovery`: one replay onto
|
|
1620
1620
|
* the moved branch with the merge kept, `--rebase-merges`, then the typed
|
|
1621
1621
|
* hand-off) over this checkout's own unlocked moves.
|
|
1622
1622
|
*/
|
|
@@ -1653,14 +1653,14 @@ export class GitService implements IGitService {
|
|
|
1653
1653
|
if (opts.guardCheckout) {
|
|
1654
1654
|
const checkedOut = await this.currentBranch(cwd);
|
|
1655
1655
|
if (checkedOut !== branch) {
|
|
1656
|
-
throw new
|
|
1656
|
+
throw new VersionControlValidationError(`the workspace is on "${checkedOut}", not on "${branch}"`);
|
|
1657
1657
|
}
|
|
1658
1658
|
// A merge rewrites tracked files. Edits still on their way to a commit
|
|
1659
1659
|
// (a save the worker has not landed) would be swept into the merge
|
|
1660
1660
|
// commit under this user's name, or lost under the merge's version.
|
|
1661
1661
|
const { stdout: dirty } = await this.git(cwd, ['status', '--porcelain=v1', '-z']);
|
|
1662
1662
|
if (parsePorcelainZ(dirty).length > 0) {
|
|
1663
|
-
throw new
|
|
1663
|
+
throw new VersionControlDomainError(
|
|
1664
1664
|
`"${branch}" has edits that are not committed yet. Try again once they are saved.`,
|
|
1665
1665
|
409,
|
|
1666
1666
|
{ kind: 'branch-busy', branch },
|
|
@@ -1687,8 +1687,8 @@ export class GitService implements IGitService {
|
|
|
1687
1687
|
// A merge with nothing to settle leaves no resolution a place to go: one
|
|
1688
1688
|
// supplied anyway names a path that is not conflicted, and is refused as
|
|
1689
1689
|
// such rather than dropped on the floor behind a published merge.
|
|
1690
|
-
const noConflictsFor = ():
|
|
1691
|
-
new
|
|
1690
|
+
const noConflictsFor = (): VersionControlValidationError =>
|
|
1691
|
+
new VersionControlValidationError(
|
|
1692
1692
|
`nothing conflicted, so nothing is resolved here: ${[...opts.resolutions.keys()].join(', ')}.`,
|
|
1693
1693
|
{ kind: 'not-conflicted', paths: [...opts.resolutions.keys()] },
|
|
1694
1694
|
);
|
|
@@ -1723,7 +1723,7 @@ export class GitService implements IGitService {
|
|
|
1723
1723
|
// locks. Refused whole, before any resolution is applied — naming
|
|
1724
1724
|
// the caller's own paths only, never the conflicted set (which the
|
|
1725
1725
|
// caller is told of, cut to what they may read, by the answer).
|
|
1726
|
-
throw new
|
|
1726
|
+
throw new VersionControlValidationError(
|
|
1727
1727
|
`not conflicted, so not resolved here: ${stray.join(', ')}.`,
|
|
1728
1728
|
{ kind: 'not-conflicted', paths: stray },
|
|
1729
1729
|
);
|
|
@@ -1901,7 +1901,7 @@ export class GitService implements IGitService {
|
|
|
1901
1901
|
// the way that is a link is refused, and a path that is itself a link is
|
|
1902
1902
|
// replaced as a path (the link removed first), never written through.
|
|
1903
1903
|
if ((await linkedAncestor(cwd, path.dirname(file))) !== null) {
|
|
1904
|
-
throw new
|
|
1904
|
+
throw new VersionControlValidationError(`"${r.path}" is reached through a link, so it is not resolved here`);
|
|
1905
1905
|
}
|
|
1906
1906
|
if (r.content !== undefined) {
|
|
1907
1907
|
if ((await lstatOrNull(file))?.isSymbolicLink()) await fs.unlink(file);
|
|
@@ -2029,7 +2029,7 @@ export class GitService implements IGitService {
|
|
|
2029
2029
|
// `mergeCommitSubject` already flattens the title it builds from; this is the
|
|
2030
2030
|
// guard that keeps any other caller from reintroducing the break.
|
|
2031
2031
|
if (/\n\s*\n/.test(commit.subject)) {
|
|
2032
|
-
throw new
|
|
2032
|
+
throw new VersionControlValidationError('merge commit subject must be a single paragraph');
|
|
2033
2033
|
}
|
|
2034
2034
|
const MAX_ATTEMPTS = 3;
|
|
2035
2035
|
return this.mutex.run(baseWorkspaceId, async () => {
|
|
@@ -2044,7 +2044,7 @@ export class GitService implements IGitService {
|
|
|
2044
2044
|
const { stdout: dirty } = await this.git(cwd, ['status', '--porcelain=v1', '-z']);
|
|
2045
2045
|
const unpushed = await this.hasUnpushedCommitsAt(cwd);
|
|
2046
2046
|
if (parsePorcelainZ(dirty).length > 0 || unpushed) {
|
|
2047
|
-
throw new
|
|
2047
|
+
throw new VersionControlDomainError(
|
|
2048
2048
|
`"${targetBranch}" has edits that are not shared yet. Try the merge again once they are saved.`,
|
|
2049
2049
|
409,
|
|
2050
2050
|
{ kind: 'merge-target-busy', targetBranch },
|
|
@@ -2453,7 +2453,7 @@ export class GitService implements IGitService {
|
|
|
2453
2453
|
|
|
2454
2454
|
/**
|
|
2455
2455
|
* Rebase the checked-out branch onto `remoteRef`, turning a content
|
|
2456
|
-
* conflict into the typed error the
|
|
2456
|
+
* conflict into the typed error the version-control layer queues recovery for.
|
|
2457
2457
|
* Shared by `pull` and `syncFromRemote` so the two cannot drift.
|
|
2458
2458
|
*/
|
|
2459
2459
|
private async rebaseOntoRemote(
|
|
@@ -2535,7 +2535,7 @@ export class GitService implements IGitService {
|
|
|
2535
2535
|
abortSucceeded = false;
|
|
2536
2536
|
});
|
|
2537
2537
|
if (abortSucceeded && conflictedPaths.length > 0) {
|
|
2538
|
-
// Typed so the
|
|
2538
|
+
// Typed so the version-control layer can queue background recovery — this
|
|
2539
2539
|
// divergence never resolves on its own (every retry pull hits the
|
|
2540
2540
|
// same conflict) and the unpushed local commits are someone's saved
|
|
2541
2541
|
// content stuck violating save=share.
|
|
@@ -3029,7 +3029,7 @@ export class GitService implements IGitService {
|
|
|
3029
3029
|
// Only the genuinely empty separator lines are skipped.
|
|
3030
3030
|
const touched = nameLine.endsWith('\r') ? nameLine.slice(0, -1) : nameLine;
|
|
3031
3031
|
if (touched && touched !== repoRelativePath) {
|
|
3032
|
-
throw new
|
|
3032
|
+
throw new VersionControlValidationError(
|
|
3033
3033
|
`"${relativePath}" is a directory at that point in history — history is served per file`,
|
|
3034
3034
|
);
|
|
3035
3035
|
}
|
|
@@ -3064,7 +3064,7 @@ export class GitService implements IGitService {
|
|
|
3064
3064
|
): Promise<string> {
|
|
3065
3065
|
assertValidRelativePath(relativePath);
|
|
3066
3066
|
if (!/^[a-f0-9]{7,40}$/i.test(sha)) {
|
|
3067
|
-
throw new
|
|
3067
|
+
throw new VersionControlValidationError('invalid commit sha');
|
|
3068
3068
|
}
|
|
3069
3069
|
const repoRelativePath = this.stripRepoPrefix(relativePath);
|
|
3070
3070
|
return this.mutex.run(workspaceId, async () => {
|
|
@@ -3119,7 +3119,7 @@ export class GitService implements IGitService {
|
|
|
3119
3119
|
): Promise<{ baseline: string | null; current: string | null }> {
|
|
3120
3120
|
assertValidRelativePath(relativePath);
|
|
3121
3121
|
if (!/^[a-f0-9]{7,40}$/i.test(sha)) {
|
|
3122
|
-
throw new
|
|
3122
|
+
throw new VersionControlValidationError('invalid commit sha');
|
|
3123
3123
|
}
|
|
3124
3124
|
const repoRelativePath = this.stripRepoPrefix(relativePath);
|
|
3125
3125
|
return this.mutex.run(workspaceId, async () => {
|
|
@@ -3160,7 +3160,7 @@ export class GitService implements IGitService {
|
|
|
3160
3160
|
assertValidBranchName(fromBranch);
|
|
3161
3161
|
assertValidBranchName(toBranch);
|
|
3162
3162
|
if (fromBranch === toBranch) {
|
|
3163
|
-
throw new
|
|
3163
|
+
throw new VersionControlValidationError('from and to branches must differ');
|
|
3164
3164
|
}
|
|
3165
3165
|
const repoRelativePath = this.stripRepoPrefix(relativePath);
|
|
3166
3166
|
return this.mutex.run(workspaceId, async () => {
|
|
@@ -3291,7 +3291,7 @@ export class GitService implements IGitService {
|
|
|
3291
3291
|
if (opts.at) {
|
|
3292
3292
|
for (const sha of [opts.at.baseSha, opts.at.headSha]) {
|
|
3293
3293
|
if (!/^[0-9a-f]{40,64}$/.test(sha)) {
|
|
3294
|
-
throw new
|
|
3294
|
+
throw new VersionControlValidationError(`invalid commit sha: ${sha}`);
|
|
3295
3295
|
}
|
|
3296
3296
|
}
|
|
3297
3297
|
}
|
|
@@ -3411,7 +3411,7 @@ export class GitService implements IGitService {
|
|
|
3411
3411
|
* side for a merge commit, and for a squashed or fast-forwarded commit it is
|
|
3412
3412
|
* simply the commit before — the same answer either way.
|
|
3413
3413
|
*
|
|
3414
|
-
* Throws `
|
|
3414
|
+
* Throws `VersionControlValidationError` whenever the recorded commit cannot be
|
|
3415
3415
|
* PROVEN to be this request's own merge commit — see
|
|
3416
3416
|
* {@link appliedChangeShas}. Every caller reads that as "the file set could
|
|
3417
3417
|
* not be resolved" and falls back to its own fail-closed answer, which is what
|
|
@@ -3424,7 +3424,7 @@ export class GitService implements IGitService {
|
|
|
3424
3424
|
): Promise<{ baseSha: string; headSha: string }> {
|
|
3425
3425
|
const { mergeSha, number } = applied;
|
|
3426
3426
|
if (!/^[0-9a-f]{40,64}$/.test(mergeSha)) {
|
|
3427
|
-
throw new
|
|
3427
|
+
throw new VersionControlValidationError(`invalid commit sha: ${mergeSha}`);
|
|
3428
3428
|
}
|
|
3429
3429
|
const revParse = async (rev: string): Promise<string | null> => {
|
|
3430
3430
|
try {
|
|
@@ -3447,7 +3447,7 @@ export class GitService implements IGitService {
|
|
|
3447
3447
|
// or a message that does not name the request) never becomes it, and is
|
|
3448
3448
|
// reported as a mismatch the caller may remember.
|
|
3449
3449
|
if (!(await revParse(`${mergeSha}^{commit}`))) {
|
|
3450
|
-
throw new
|
|
3450
|
+
throw new VersionControlValidationError(
|
|
3451
3451
|
`commit ${mergeSha} is not in this clone, so change request #${number} cannot be read from it yet`,
|
|
3452
3452
|
);
|
|
3453
3453
|
}
|
|
@@ -3612,7 +3612,7 @@ export class GitService implements IGitService {
|
|
|
3612
3612
|
// concurrent `fetch --prune origin` (`ensureRemotesFetched` and
|
|
3613
3613
|
// `fetchPrRefs` both run outside this mutex, deliberately) can drop a
|
|
3614
3614
|
// remote-tracking ref between the two, and re-resolving inside the mutex
|
|
3615
|
-
// would then throw `
|
|
3615
|
+
// would then throw `VersionControlValidationError` — which `touchedPathsFor`
|
|
3616
3616
|
// swallows into an empty touched-path set, i.e. exactly the change
|
|
3617
3617
|
// request missing from its own author's tree that the skip is guarded
|
|
3618
3618
|
// against. The commits stay readable whatever happens to the ref names.
|
|
@@ -3792,7 +3792,7 @@ export class GitService implements IGitService {
|
|
|
3792
3792
|
): Promise<{ mergeBaseSha: string | null; behind: boolean }> {
|
|
3793
3793
|
for (const sha of [at.baseSha, at.headSha]) {
|
|
3794
3794
|
if (!/^[0-9a-f]{40,64}$/.test(sha)) {
|
|
3795
|
-
throw new
|
|
3795
|
+
throw new VersionControlValidationError(`invalid commit sha: ${sha}`);
|
|
3796
3796
|
}
|
|
3797
3797
|
}
|
|
3798
3798
|
const cwd = await this.repoDir(workspaceId);
|
|
@@ -3835,7 +3835,7 @@ export class GitService implements IGitService {
|
|
|
3835
3835
|
): Promise<string[]> {
|
|
3836
3836
|
for (const sha of [fromSha, toSha]) {
|
|
3837
3837
|
if (!/^[0-9a-f]{40,64}$/.test(sha)) {
|
|
3838
|
-
throw new
|
|
3838
|
+
throw new VersionControlValidationError(`invalid commit sha: ${sha}`);
|
|
3839
3839
|
}
|
|
3840
3840
|
}
|
|
3841
3841
|
const cwd = await this.repoDir(workspaceId);
|
|
@@ -3866,7 +3866,7 @@ export class GitService implements IGitService {
|
|
|
3866
3866
|
assertValidBranchName(baseBranch);
|
|
3867
3867
|
assertValidRelativePath(relativePath);
|
|
3868
3868
|
if (!/^[0-9a-f]{40,64}$/.test(sha)) {
|
|
3869
|
-
throw new
|
|
3869
|
+
throw new VersionControlValidationError(`invalid commit sha: ${sha}`);
|
|
3870
3870
|
}
|
|
3871
3871
|
const repoRelativePath = this.stripRepoPrefix(relativePath);
|
|
3872
3872
|
return this.mutex.run(workspaceId, async () => {
|
|
@@ -3876,7 +3876,7 @@ export class GitService implements IGitService {
|
|
|
3876
3876
|
await this.git(cwd, ['merge-base', '--is-ancestor', sha, baseRef]);
|
|
3877
3877
|
} catch (err) {
|
|
3878
3878
|
if ((err as { exitCode?: number }).exitCode === 1) {
|
|
3879
|
-
throw new
|
|
3879
|
+
throw new VersionControlDomainError(
|
|
3880
3880
|
`That commit is not part of "${baseBranch}" — it is not this request's fork point.`,
|
|
3881
3881
|
404,
|
|
3882
3882
|
);
|
|
@@ -4086,7 +4086,7 @@ export class GitService implements IGitService {
|
|
|
4086
4086
|
try {
|
|
4087
4087
|
return await this.publishedPrEnds(cwd, baseBranch, headBranch);
|
|
4088
4088
|
} catch (err) {
|
|
4089
|
-
if (err instanceof
|
|
4089
|
+
if (err instanceof VersionControlValidationError) return null;
|
|
4090
4090
|
throw err;
|
|
4091
4091
|
}
|
|
4092
4092
|
}
|
|
@@ -4143,7 +4143,7 @@ export class GitService implements IGitService {
|
|
|
4143
4143
|
if (!(err instanceof GitRunError) || err.timedOut || err.exitCode !== 1) throw err;
|
|
4144
4144
|
}
|
|
4145
4145
|
}
|
|
4146
|
-
throw new
|
|
4146
|
+
throw new VersionControlValidationError(`unknown branch: ${branch}`);
|
|
4147
4147
|
}
|
|
4148
4148
|
|
|
4149
4149
|
/**
|
|
@@ -4182,7 +4182,7 @@ export class GitService implements IGitService {
|
|
|
4182
4182
|
// Try the next candidate.
|
|
4183
4183
|
}
|
|
4184
4184
|
}
|
|
4185
|
-
throw new
|
|
4185
|
+
throw new VersionControlValidationError(`unknown branch: ${branch}`);
|
|
4186
4186
|
}
|
|
4187
4187
|
|
|
4188
4188
|
// ── internals ──────────────────────────────────────────────────────────
|
|
@@ -4341,7 +4341,7 @@ export class GitService implements IGitService {
|
|
|
4341
4341
|
throw err;
|
|
4342
4342
|
}
|
|
4343
4343
|
if (kind === 'tree') {
|
|
4344
|
-
throw new
|
|
4344
|
+
throw new VersionControlValidationError(
|
|
4345
4345
|
`"${displayPath}" is a directory at that point in history — history is served per file`,
|
|
4346
4346
|
);
|
|
4347
4347
|
}
|
|
@@ -4497,7 +4497,7 @@ export class GitService implements IGitService {
|
|
|
4497
4497
|
): Promise<{ bytes: Buffer; blobId: string } | null> {
|
|
4498
4498
|
assertValidRelativePath(relativePath);
|
|
4499
4499
|
if (!/^[a-f0-9]{7,40}$/i.test(sha)) {
|
|
4500
|
-
throw new
|
|
4500
|
+
throw new VersionControlValidationError('invalid commit sha');
|
|
4501
4501
|
}
|
|
4502
4502
|
const repoRelativePath = this.stripRepoPrefix(relativePath);
|
|
4503
4503
|
return this.mutex.run(workspaceId, async () => {
|
|
@@ -65,7 +65,7 @@ const MAX_OUTPUT_BYTES = 64 * 1024 * 1024;
|
|
|
65
65
|
* The environment every invocation runs under, laid OVER whatever the caller
|
|
66
66
|
* supplied so that none of it can be unset per call. Only what is safe for
|
|
67
67
|
* EVERY caller belongs here. `GIT_LITERAL_PATHSPECS` does not: it is the
|
|
68
|
-
*
|
|
68
|
+
* version-control service's answer to raw user paths, and the startup runner spells
|
|
69
69
|
* its literal paths with `:(literal)` magic, which that setting would disable
|
|
70
70
|
* — so each of them sets its own, per call.
|
|
71
71
|
*
|
|
@@ -19,7 +19,7 @@ import { changeRequests } from '../../database/index.js';
|
|
|
19
19
|
import type { WorkspaceService } from '../../workspace/index.js';
|
|
20
20
|
import type { IAccessControl } from '../../access/index.js';
|
|
21
21
|
import { AccessUnreadableError } from '../../access-model/index.js';
|
|
22
|
-
import { AppliedChangeMismatchError,
|
|
22
|
+
import { AppliedChangeMismatchError, VersionControlValidationError } from '../../../shared/domain-errors.js';
|
|
23
23
|
import { canonicalEmail, hashEmail } from '../../../shared/email-identity.js';
|
|
24
24
|
import { changeRequestLink, changeRequestLinkBase } from './change-request-link.js';
|
|
25
25
|
|
|
@@ -141,9 +141,9 @@ export function changeSourceFor(row: {
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
/**
|
|
144
|
-
* The slice of the review
|
|
144
|
+
* The slice of the change-request-review service this module needs to compose detail
|
|
145
145
|
* responses. Kept narrow (just what `getPrDetail` stitches in) so the PR
|
|
146
|
-
* service doesn't depend on the full
|
|
146
|
+
* service doesn't depend on the full version-control interface — and so the circular
|
|
147
147
|
* relationship in the composition root is explicit and minimal.
|
|
148
148
|
*/
|
|
149
149
|
export interface PrDetailEnricher {
|
|
@@ -183,7 +183,7 @@ export interface PrDetailEnricher {
|
|
|
183
183
|
* The durable facts (pairing, title/body, author, state) live in the row; the
|
|
184
184
|
* head/base SHAs, file list, and diffs are derived live from git so a new commit
|
|
185
185
|
* or force-push is always reflected. Per-file approvals and the merge gate
|
|
186
|
-
* are stitched in from the review
|
|
186
|
+
* are stitched in from the change-request-review service (also DB-backed).
|
|
187
187
|
*/
|
|
188
188
|
export class PullRequestService implements IPullRequestService {
|
|
189
189
|
/**
|
|
@@ -223,9 +223,9 @@ export class PullRequestService implements IPullRequestService {
|
|
|
223
223
|
>();
|
|
224
224
|
|
|
225
225
|
/**
|
|
226
|
-
* Optional — set by the composition root after
|
|
226
|
+
* Optional — set by the composition root after ChangeRequestReviewService exists.
|
|
227
227
|
* Setter-based wiring (not constructor) because PullRequestService is itself
|
|
228
|
-
* a dependency of
|
|
228
|
+
* a dependency of ChangeRequestReviewService's routes, and we want both to live
|
|
229
229
|
* in the same container without a forward-declaration dance.
|
|
230
230
|
*/
|
|
231
231
|
private detailEnricher: PrDetailEnricher | null = null;
|
|
@@ -354,7 +354,7 @@ export class PullRequestService implements IPullRequestService {
|
|
|
354
354
|
// to shout about — it is this row's turn to be fetched, and the next list
|
|
355
355
|
// read answers it. Warning per request on that would be the log flood the
|
|
356
356
|
// network flood came with.
|
|
357
|
-
if (err instanceof
|
|
357
|
+
if (err instanceof VersionControlValidationError) {
|
|
358
358
|
log.debug(`${what} could not resolve ${where}; answering no touched paths:`, { err });
|
|
359
359
|
} else {
|
|
360
360
|
log.warn(`${what} failed for ${where}:`, { err });
|
|
@@ -610,7 +610,7 @@ export class PullRequestService implements IPullRequestService {
|
|
|
610
610
|
|
|
611
611
|
async getPr(prNumber: number): Promise<PullRequestSummary | null> {
|
|
612
612
|
if (!Number.isInteger(prNumber) || prNumber <= 0) {
|
|
613
|
-
throw new
|
|
613
|
+
throw new VersionControlValidationError('PR number must be a positive integer');
|
|
614
614
|
}
|
|
615
615
|
const row = await this.findRow(prNumber);
|
|
616
616
|
if (!row) return null;
|
|
@@ -677,7 +677,7 @@ export class PullRequestService implements IPullRequestService {
|
|
|
677
677
|
opts: { fresh?: boolean; workspaceId?: string; viewerEmail?: string; patches?: boolean } = {},
|
|
678
678
|
): Promise<PullRequestDetail | null> {
|
|
679
679
|
if (!Number.isInteger(prNumber) || prNumber <= 0) {
|
|
680
|
-
throw new
|
|
680
|
+
throw new VersionControlValidationError('PR number must be a positive integer');
|
|
681
681
|
}
|
|
682
682
|
const generation = this.cacheGeneration;
|
|
683
683
|
const row = await this.findRow(prNumber);
|
|
@@ -798,7 +798,7 @@ export class PullRequestService implements IPullRequestService {
|
|
|
798
798
|
// a branch not yet published or a clone not yet caught up, and presenting
|
|
799
799
|
// a live proposal as one that changes nothing would tell a reviewer the
|
|
800
800
|
// opposite of the truth.
|
|
801
|
-
if (!(err instanceof
|
|
801
|
+
if (!(err instanceof VersionControlValidationError) || row.state === 'open') throw err;
|
|
802
802
|
log.warn(
|
|
803
803
|
`change request #${prNumber} is ${row.state} and can no longer be diffed; answering from its row alone:`,
|
|
804
804
|
{ err },
|
|
@@ -835,7 +835,7 @@ export class PullRequestService implements IPullRequestService {
|
|
|
835
835
|
})),
|
|
836
836
|
);
|
|
837
837
|
|
|
838
|
-
// Approvals come from our own DB via the review
|
|
838
|
+
// Approvals come from our own DB via the change-request-review service. The
|
|
839
839
|
// enricher is optional — if it isn't wired yet (startup ordering, isolated
|
|
840
840
|
// tests) we return an empty list rather than blocking the fetch.
|
|
841
841
|
const approvals = this.detailEnricher
|
|
@@ -953,7 +953,7 @@ export class PullRequestService implements IPullRequestService {
|
|
|
953
953
|
viewerIsAuthor,
|
|
954
954
|
viewerCanDelete,
|
|
955
955
|
// Who may close a request may also change what it asks: the same
|
|
956
|
-
// grants, so the same predicate (`
|
|
956
|
+
// grants, so the same predicate (`VersionControlService.updateChangeRequest`
|
|
957
957
|
// enforces it).
|
|
958
958
|
viewerCanEdit: viewerCanCancel,
|
|
959
959
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* What the
|
|
2
|
+
* What the version-control module offers the other modules: the addresses of its
|
|
3
3
|
* change requests, so a module that lands a proposal can hand back a link
|
|
4
4
|
* built by the one rule — rather than each spelling the route for itself;
|
|
5
5
|
* and the live-event surface — the bus, the events route, and the delivery
|
|
@@ -7,14 +7,15 @@
|
|
|
7
7
|
* the composition root.
|
|
8
8
|
*/
|
|
9
9
|
export { CHANGE_REQUEST_URL_NOTE, changeRequestLink, changeRequestLinkBase } from './git/change-request-link.js';
|
|
10
|
-
export {
|
|
10
|
+
export { VersionControlEventBus } from './event-bus.js';
|
|
11
11
|
export { createEventsRoutes } from './events.routes.js';
|
|
12
|
+
export { createVersionControlRoutes } from './version-control.routes.js';
|
|
12
13
|
export { EventDelivery, createEventAccess } from './events-delivery.js';
|
|
13
14
|
export type { ChangeRequestFacts, EventAccess, EventViewer, IEventDelivery } from './events-delivery.js';
|
|
14
15
|
// Reached by other modules; exported here so they stop importing the files.
|
|
15
16
|
export { NodeGitRunner } from './git/node-git-runner.js';
|
|
16
17
|
export { RECOVERY_BOT_EMAIL } from './recovery-bot.js';
|
|
17
|
-
export type {
|
|
18
|
+
export type { IChangeRequestReviewService } from './change-request-review/change-request-review.interface.js';
|
|
18
19
|
export { sanitizeError } from './sanitize-error.js';
|
|
19
|
-
export type {
|
|
20
|
-
export type {
|
|
20
|
+
export type { VersionControlHooks } from './version-control-hooks.js';
|
|
21
|
+
export type { VersionControlService } from './version-control.service.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Persistent queue of "files written to disk but not yet committed to git."
|
|
3
3
|
*
|
|
4
|
-
* Decouples the lock-release path from git work: `
|
|
4
|
+
* Decouples the lock-release path from git work: `VersionControlService.releaseLock`
|
|
5
5
|
* enqueues a row and returns immediately; the background `PendingCommitsWorker`
|
|
6
6
|
* drains rows by running `commitFile + push`. Persistence is the point — a
|
|
7
7
|
* process crash mid-commit (the bug class that stranded the `GTM/Uploads/*.docx`
|
|
@@ -510,7 +510,7 @@ export class PendingCommitsService {
|
|
|
510
510
|
* `needs_attention` row deliberately does NOT count: its ladder has
|
|
511
511
|
* escalated to a human and nothing will retry it, so a caller asking
|
|
512
512
|
* "is my landed-but-unpushed commit going to be published?" must hear no.
|
|
513
|
-
* Backs `
|
|
513
|
+
* Backs `IVersionControlService.hasQueuedCommit` (the synced-groups committer's
|
|
514
514
|
* armed-retry proof) and the coordination-release discard guard.
|
|
515
515
|
*/
|
|
516
516
|
async hasLiveRowFor(rawWorkspaceId: string, branch: string, path: string): Promise<boolean> {
|
|
@@ -49,10 +49,10 @@ import {
|
|
|
49
49
|
canonicalWorkspaceId,
|
|
50
50
|
} from './pending-commits.service.js';
|
|
51
51
|
import { sanitizeError } from './sanitize-error.js';
|
|
52
|
-
import {
|
|
52
|
+
import { VersionControlDomainError } from '../../shared/domain-errors.js';
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
|
-
* Where the worker escalates terminal failures — the narrow,
|
|
55
|
+
* Where the worker escalates terminal failures — the narrow, version-control-owned
|
|
56
56
|
* slice of whatever notice sink the app provides. The enterprise app passes
|
|
57
57
|
* its feedback service (structurally compatible: its `send` accepts a wider
|
|
58
58
|
* source union); a core-only deployment can pass
|
|
@@ -134,11 +134,11 @@ export interface RecoveryAgentRunner {
|
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
/**
|
|
137
|
-
*
|
|
138
|
-
* `
|
|
137
|
+
* Version-control surface the worker depends on. A subset of the real
|
|
138
|
+
* `VersionControlService` — pulled behind an interface so tests can stub the
|
|
139
139
|
* commit/push pipeline without spinning up a real git workspace.
|
|
140
140
|
*/
|
|
141
|
-
export interface
|
|
141
|
+
export interface VersionControlCommitDriver {
|
|
142
142
|
/**
|
|
143
143
|
* Commit whatever's currently on disk for `path`, then push the branch.
|
|
144
144
|
* Uses `pushWithRecovery` semantics internally (cooperative pull-rebase
|
|
@@ -167,7 +167,7 @@ export interface WorkspaceProvider {
|
|
|
167
167
|
|
|
168
168
|
export interface PendingCommitsWorkerDeps {
|
|
169
169
|
service: PendingCommitsService;
|
|
170
|
-
|
|
170
|
+
versionControl: VersionControlCommitDriver;
|
|
171
171
|
recoveryAgent: RecoveryAgentRunner;
|
|
172
172
|
feedback: ISystemNoticeSink;
|
|
173
173
|
workspaces: WorkspaceProvider;
|
|
@@ -361,7 +361,7 @@ export class PendingCommitsWorker {
|
|
|
361
361
|
name: row.authorName,
|
|
362
362
|
};
|
|
363
363
|
try {
|
|
364
|
-
await this.deps.
|
|
364
|
+
await this.deps.versionControl.runPendingCommit(row.workspaceId, row.branch, row.path, user, {
|
|
365
365
|
skipValidation: opts?.skipValidation,
|
|
366
366
|
});
|
|
367
367
|
await this.deps.service.markSucceeded(row.id);
|
|
@@ -467,7 +467,7 @@ export class PendingCommitsWorker {
|
|
|
467
467
|
* it on every attempt.
|
|
468
468
|
*/
|
|
469
469
|
function pathOutsideRepoCorrection(err: unknown): string | null {
|
|
470
|
-
if (!(err instanceof
|
|
470
|
+
if (!(err instanceof VersionControlDomainError) || err.payload?.kind !== 'path-outside-repo') return null;
|
|
471
471
|
const corrected = err.payload.corrected;
|
|
472
472
|
return typeof corrected === 'string' && corrected.length > 0 ? corrected : '(see error)';
|
|
473
473
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IAccessControl } from '../access/index.js';
|
|
2
|
-
import {
|
|
2
|
+
import { VersionControlDomainError } from '../../shared/domain-errors.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Which of `paths` `userEmail` may read at `origin/<base>`, as a membership
|
|
@@ -48,7 +48,7 @@ export async function readableAtCommits(
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
/** The refusal `readableAtCommits` answers false with, as every caller words it: the branch named, never the commit. */
|
|
51
|
-
export class ReadOnBranchDeniedError extends
|
|
51
|
+
export class ReadOnBranchDeniedError extends VersionControlDomainError {
|
|
52
52
|
constructor(displayPath: string, branch: string) {
|
|
53
53
|
super(`You don't have permission to read "${displayPath}" on "${branch}".`, 403, {
|
|
54
54
|
kind: 'read-denied',
|