@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
|
@@ -28,7 +28,7 @@ function stripKbDir(path: string, kbDirName: string): string {
|
|
|
28
28
|
const protectedInline = (kb: Pick<KbContext, 'protectedBranches'>) =>
|
|
29
29
|
[...kb.protectedBranches].map((b) => `\`${b}\``).join(' / ');
|
|
30
30
|
|
|
31
|
-
// Output sub-schemas for the git-aliased
|
|
31
|
+
// Output sub-schemas for the git-aliased version-control payloads (Branch, Change,
|
|
32
32
|
// ChangeRequest, …). Defined once and referenced by the individual tool
|
|
33
33
|
// defs below so each tool still declares its own `outputs`.
|
|
34
34
|
const branchSchema: JsonSchema = {
|
|
@@ -139,15 +139,15 @@ const changeRequestSummarySchema: JsonSchema = {
|
|
|
139
139
|
};
|
|
140
140
|
|
|
141
141
|
/**
|
|
142
|
-
*
|
|
142
|
+
* Version-control domain tools, registered into the central catalog and hosted on the
|
|
143
143
|
* shared tools router — the ONE mechanism: build a self-describing UTCP def,
|
|
144
144
|
* host the endpoint behind `toolAuth` + `toolHandler`, register the def. Each is
|
|
145
|
-
* a thin facade over `
|
|
145
|
+
* a thin facade over `IVersionControlService`; identity + workspace come from the
|
|
146
146
|
* resolved `ToolContext` (so a caller can never address another user/workspace).
|
|
147
147
|
* All are `both` (external agents can drive repo ops directly); the write ones
|
|
148
148
|
* carry the `write` tag so read-scoped callers are refused.
|
|
149
149
|
*/
|
|
150
|
-
export function
|
|
150
|
+
export function registerVersionControlTools(
|
|
151
151
|
registry: IToolRegistry,
|
|
152
152
|
router: Router,
|
|
153
153
|
toolAuth: RequestHandler,
|
|
@@ -202,7 +202,7 @@ export function registerWorkflowTools(
|
|
|
202
202
|
handler: ToolHandler;
|
|
203
203
|
}): void => {
|
|
204
204
|
const path = `/api/agent/tools/${spec.name}`;
|
|
205
|
-
// Every
|
|
205
|
+
// Every version-control tool that takes a branch REQUIRES it — the injected input
|
|
206
206
|
// and a hand-declared one (the fork base, the draft to switch to) alike.
|
|
207
207
|
// A hand-declared one is required by its own schema, which `toolDef`
|
|
208
208
|
// reads as `required` too; the tool handler refuses a call without it.
|
|
@@ -272,16 +272,17 @@ export function registerWorkflowTools(
|
|
|
272
272
|
},
|
|
273
273
|
write: false,
|
|
274
274
|
handler: async (_args, ctx: ToolContext) => ({
|
|
275
|
-
branches: await ctx.
|
|
275
|
+
branches: await ctx.versionControlService.listBranches(await repoGlobalWorkspaceId(ctx)),
|
|
276
276
|
}),
|
|
277
277
|
});
|
|
278
278
|
|
|
279
279
|
mount({
|
|
280
280
|
name: 'commit_change',
|
|
281
281
|
description:
|
|
282
|
-
'
|
|
283
|
-
'
|
|
284
|
-
'listing them; commit them one at a time.
|
|
282
|
+
'Commit, as you, the one file left uncommitted on `branch`, without sharing it. Writes commit and share ' +
|
|
283
|
+
'on their own moments later (`branch_status` lists those still landing); `unzip` leaves its files uncommitted. ' +
|
|
284
|
+
'If several files are uncommitted, returns a structured error listing them; commit them one at a time. ' +
|
|
285
|
+
'Refused on protected branches without write permission.',
|
|
285
286
|
inputs: {
|
|
286
287
|
type: 'object',
|
|
287
288
|
properties: {
|
|
@@ -298,7 +299,7 @@ export function registerWorkflowTools(
|
|
|
298
299
|
},
|
|
299
300
|
write: true,
|
|
300
301
|
handler: async (args, ctx: ToolContext) => ({
|
|
301
|
-
change: await ctx.
|
|
302
|
+
change: await ctx.versionControlService.commitChange(workspaceIdForBranch(args.branch as string), ctx.user, {
|
|
302
303
|
summary: args.summary as string,
|
|
303
304
|
description: typeof args.description === 'string' ? args.description : undefined,
|
|
304
305
|
}),
|
|
@@ -309,7 +310,7 @@ export function registerWorkflowTools(
|
|
|
309
310
|
name: 'save_file',
|
|
310
311
|
description:
|
|
311
312
|
'Schedule the file at <path> for commit + push using whatever bytes are on disk (no content ' +
|
|
312
|
-
'rewrite) — for
|
|
313
|
+
'rewrite) — for files left uncommitted, such as those `unzip` extracts. On lock contention returns ' +
|
|
313
314
|
'`{ saved: false, reason }` rather than throwing. The commit lands asynchronously.',
|
|
314
315
|
inputs: {
|
|
315
316
|
type: 'object',
|
|
@@ -345,11 +346,11 @@ export function registerWorkflowTools(
|
|
|
345
346
|
}
|
|
346
347
|
assertInsideRepo(path, kbDirName);
|
|
347
348
|
const workspaceId = workspaceIdForBranch(branch);
|
|
348
|
-
const acquired = await ctx.
|
|
349
|
+
const acquired = await ctx.versionControlService.acquireLock(workspaceId, branch, path, ctx.user);
|
|
349
350
|
if (!acquired.acquired) {
|
|
350
351
|
return { saved: false, reason: `Locked by ${acquired.lock.holderName ?? 'another user'} — try again later.` };
|
|
351
352
|
}
|
|
352
|
-
await ctx.
|
|
353
|
+
await ctx.versionControlService.releaseLock(workspaceId, branch, path, ctx.user);
|
|
353
354
|
return { saved: true, queued: true };
|
|
354
355
|
},
|
|
355
356
|
});
|
|
@@ -357,8 +358,9 @@ export function registerWorkflowTools(
|
|
|
357
358
|
mount({
|
|
358
359
|
name: 'share_current_branch',
|
|
359
360
|
description:
|
|
360
|
-
'Publish
|
|
361
|
-
'
|
|
361
|
+
'Publish `branch` to the shared remote so teammates and any change request pick up its commits. ' +
|
|
362
|
+
'Writes already share on their own: this is for sharing again after a refused push (`branch_status` shows ' +
|
|
363
|
+
'the branch ahead). Refused on protected branches without write permission.',
|
|
362
364
|
inputs: { type: 'object', properties: {}, additionalProperties: false },
|
|
363
365
|
outputs: {
|
|
364
366
|
type: 'object',
|
|
@@ -367,7 +369,7 @@ export function registerWorkflowTools(
|
|
|
367
369
|
},
|
|
368
370
|
write: true,
|
|
369
371
|
handler: async (args, ctx: ToolContext) => {
|
|
370
|
-
await ctx.
|
|
372
|
+
await ctx.versionControlService.shareCurrentBranch(workspaceIdForBranch(args.branch as string), ctx.user);
|
|
371
373
|
return { shared: true };
|
|
372
374
|
},
|
|
373
375
|
});
|
|
@@ -377,10 +379,11 @@ export function registerWorkflowTools(
|
|
|
377
379
|
description:
|
|
378
380
|
'Create a new unprotected draft named `name`, forked from the existing branch `branch`. The ' +
|
|
379
381
|
`backend rejects protected names (${protectedInline(kb)}) and filesystem-invalid names — surface ` +
|
|
380
|
-
'those errors verbatim.
|
|
381
|
-
'
|
|
382
|
+
'those errors verbatim. Name it `<you>/<kebab-slug>`: `<you>` is the person\'s email before the @, in lower case, ' +
|
|
383
|
+
'with each run of characters other than letters and digits as one `-` (`paul.brandt@` gives `paul-brandt/`). ' +
|
|
384
|
+
'Only that prefix makes the draft theirs, to delete later. Does NOT switch the agent onto the new draft.',
|
|
382
385
|
// `branch` here is the fork BASE — its own meaning — so skip the generic
|
|
383
|
-
// workspace-`branch` injection ("the branch
|
|
386
|
+
// workspace-`branch` injection ("the branch to work on: ... or your draft"),
|
|
384
387
|
// whose wording invites filling in the draft being created instead.
|
|
385
388
|
skipBranch: true,
|
|
386
389
|
// The handler refuses a missing `name` with a message that says what the
|
|
@@ -389,7 +392,7 @@ export function registerWorkflowTools(
|
|
|
389
392
|
inputs: {
|
|
390
393
|
type: 'object',
|
|
391
394
|
properties: {
|
|
392
|
-
name: { type: 'string', minLength: 1, description: 'Name of the draft to create (`<
|
|
395
|
+
name: { type: 'string', minLength: 1, description: 'Name of the draft to create (`<you>/<kebab-slug>` for user drafts, as the description says). Must not exist yet.' },
|
|
393
396
|
branch: { type: 'string', minLength: 1, description: 'Existing branch to fork the new draft from — usually the branch you are currently on.' },
|
|
394
397
|
},
|
|
395
398
|
required: ['name', 'branch'],
|
|
@@ -427,7 +430,7 @@ export function registerWorkflowTools(
|
|
|
427
430
|
);
|
|
428
431
|
}
|
|
429
432
|
return {
|
|
430
|
-
branch: await ctx.
|
|
433
|
+
branch: await ctx.versionControlService.createBranch(workspaceIdForBranch(base), name),
|
|
431
434
|
};
|
|
432
435
|
},
|
|
433
436
|
});
|
|
@@ -437,7 +440,7 @@ export function registerWorkflowTools(
|
|
|
437
440
|
description:
|
|
438
441
|
'Open a change request from a draft branch into a target branch. Auto-merges the latest target ' +
|
|
439
442
|
'into the source first, pushes, then creates the CR. On conflicts returns a ' +
|
|
440
|
-
'`change-request-conflicts` error with affected paths.
|
|
443
|
+
'`change-request-conflicts` error with affected paths. ' +
|
|
441
444
|
'Answers a SUMMARY, not the request\'s content: `url` first (hand it to the user), then `number`, ' +
|
|
442
445
|
'`title`, `state`, `sourceBranch`, `targetBranch`, `approvals` (who must approve each file), ' +
|
|
443
446
|
'`mergeBlockedReasons` (what blocks the merge), and `files` — the changed paths with their kind of ' +
|
|
@@ -475,7 +478,7 @@ export function registerWorkflowTools(
|
|
|
475
478
|
// answer, so nothing below the tool changes.
|
|
476
479
|
handler: async (args, ctx: ToolContext) =>
|
|
477
480
|
summarizeChangeRequest(
|
|
478
|
-
await ctx.
|
|
481
|
+
await ctx.versionControlService.openChangeRequest(workspaceIdForBranch(args.sourceBranch as string), ctx.user, {
|
|
479
482
|
sourceBranch: args.sourceBranch as string,
|
|
480
483
|
targetBranch: args.targetBranch as string,
|
|
481
484
|
title: args.title as string,
|
|
@@ -533,7 +536,7 @@ export function registerWorkflowTools(
|
|
|
533
536
|
if (!(await maySeeChangeRequest(ctx, number))) {
|
|
534
537
|
throw new ToolError(`Change request #${number} not found.`, 404);
|
|
535
538
|
}
|
|
536
|
-
const updated = await ctx.
|
|
539
|
+
const updated = await ctx.versionControlService.updateChangeRequest(number, ctx.user, {
|
|
537
540
|
title,
|
|
538
541
|
description,
|
|
539
542
|
appendDescription,
|
|
@@ -549,12 +552,13 @@ export function registerWorkflowTools(
|
|
|
549
552
|
name: 'merge_branch',
|
|
550
553
|
description:
|
|
551
554
|
'Merge branch `source` into branch `target` as you, and publish `target`. An agent proposes and syncs; ' +
|
|
552
|
-
'a person merges: this
|
|
555
|
+
'a person merges: this never lands a change request. It refuses while a change request from `source` ' +
|
|
553
556
|
'into `target` is open (naming it): ask the user to review it in the app. It refuses ' +
|
|
554
|
-
'when `target` is a protected branch unless you could commit every changed file directly to it
|
|
557
|
+
'when `target` is a protected branch unless you could commit every changed file directly to it (never ' +
|
|
558
|
+
'for a change to `roles.yaml`). ' +
|
|
555
559
|
'SYNC: merging the target into your draft (`source` = the change request\'s target, `target` = your draft) ' +
|
|
556
560
|
'is always allowed, even with the draft\'s request open. ' +
|
|
557
|
-
'Writes are committed asynchronously;
|
|
561
|
+
'Writes are committed asynchronously; it waits up to 20s for those on `source`. ' +
|
|
558
562
|
'Returns `merged` with the merge commit; `nothing-to-merge` with `target`\'s tip when it already holds ' +
|
|
559
563
|
'all of `source`; `pending-commits` (nothing merged) when writes are still committing — retry shortly — ' +
|
|
560
564
|
'or one failed (`needsAttention`: tell the user); or `conflicts-need-resolution` with the conflicting ' +
|
|
@@ -610,7 +614,7 @@ export function registerWorkflowTools(
|
|
|
610
614
|
if (typeof source !== 'string' || source.length === 0 || typeof target !== 'string' || target.length === 0) {
|
|
611
615
|
throw new ToolError('`source` and `target` are required branch names.', 400);
|
|
612
616
|
}
|
|
613
|
-
return { outcome: await ctx.
|
|
617
|
+
return { outcome: await ctx.versionControlService.mergeBranch(ctx.user, source, target) };
|
|
614
618
|
},
|
|
615
619
|
});
|
|
616
620
|
|
|
@@ -618,7 +622,7 @@ export function registerWorkflowTools(
|
|
|
618
622
|
name: 'delete_branch',
|
|
619
623
|
description:
|
|
620
624
|
'Delete branch `name` from the shared repository and the server. Allowed for the ' +
|
|
621
|
-
'branch\'s author (`<
|
|
625
|
+
'branch\'s author (`<you>/…` per `create_branch`, or your own `suggestions/…` bundle) or an Admin. Refuses a ' +
|
|
622
626
|
'protected branch, a name that is not a branch, a branch with saves still landing or a file held ' +
|
|
623
627
|
'(retry once they land). An open change request from or into it that proposes nothing is closed and the ' +
|
|
624
628
|
'delete goes ahead; one that still proposes something refuses it, naming and linking it: its author ' +
|
|
@@ -681,7 +685,7 @@ export function registerWorkflowTools(
|
|
|
681
685
|
kind: 'name-required',
|
|
682
686
|
});
|
|
683
687
|
}
|
|
684
|
-
return ctx.
|
|
688
|
+
return ctx.versionControlService.deleteBranchChecked(ctx.user, name, {
|
|
685
689
|
dryRun: args.dryRun === true,
|
|
686
690
|
discardUnmerged: args.discardUnmerged === true,
|
|
687
691
|
maySee: (number) => maySeeChangeRequest(ctx, number),
|
|
@@ -730,7 +734,7 @@ export function registerWorkflowTools(
|
|
|
730
734
|
// Validate the target exists by listing from any existing clone (every
|
|
731
735
|
// clone tracks all remote refs) — there is no "current" workspace here,
|
|
732
736
|
// and the default branch may not even be on the remote.
|
|
733
|
-
const branches = await ctx.
|
|
737
|
+
const branches = await ctx.versionControlService.listBranches(await repoGlobalWorkspaceId(ctx));
|
|
734
738
|
if (!branches.find((b) => b.name === target)) {
|
|
735
739
|
const known = branches.map((b) => b.name).slice(0, 25).join(', ');
|
|
736
740
|
throw new ToolError(`No draft named "${target}" on this workspace. Known: ${known || '(none)'}.`, 404);
|
|
@@ -753,7 +757,7 @@ export function registerWorkflowTools(
|
|
|
753
757
|
//
|
|
754
758
|
// What the app's History tab, compare view and "update from target" do,
|
|
755
759
|
// as tools: the agent never runs git itself. Each reads through the
|
|
756
|
-
//
|
|
760
|
+
// version-control service's gated methods and takes the per-file read the file
|
|
757
761
|
// itself takes.
|
|
758
762
|
|
|
759
763
|
/** The branch's workspace, made when it is not on disk yet, and its id. */
|
|
@@ -825,7 +829,7 @@ export function registerWorkflowTools(
|
|
|
825
829
|
const workspaceId = await workspaceOf(ctx, branch);
|
|
826
830
|
const rel = await requireRead(ctx, branch, workspaceId, path);
|
|
827
831
|
const limit = typeof args.limit === 'number' ? args.limit : undefined;
|
|
828
|
-
const changes = await ctx.
|
|
832
|
+
const changes = await ctx.versionControlService.listChangesForFile(workspaceId, path, limit);
|
|
829
833
|
return { path: rel, changes };
|
|
830
834
|
},
|
|
831
835
|
});
|
|
@@ -836,13 +840,13 @@ export function registerWorkflowTools(
|
|
|
836
840
|
'One file as it was at a point in history: `at` is a commit (from `list_file_changes`, on `branch`\'s ' +
|
|
837
841
|
'own history) or the name of another branch (its published tip). Answers `content` (null when the ' +
|
|
838
842
|
'file was not there) and `sha`, the commit it was read at; for a commit, also `before`, the file ' +
|
|
839
|
-
'just before that commit. To put an earlier version back, write it with `write_file`. Takes
|
|
840
|
-
'the file
|
|
843
|
+
'just before that commit. To put an earlier version back, write it with `write_file`. Takes your ' +
|
|
844
|
+
'read of the file on `branch` now and, for a branch, also at its tip.',
|
|
841
845
|
inputs: {
|
|
842
846
|
type: 'object',
|
|
843
847
|
properties: {
|
|
844
848
|
path: { type: 'string', minLength: 1, description: 'The file, workspace-relative.' },
|
|
845
|
-
at: { type: 'string', minLength: 1, description: 'A commit sha, or a branch name.' },
|
|
849
|
+
at: { type: 'string', minLength: 1, description: 'A full commit sha (40 or 64 hex characters), or a branch name.' },
|
|
846
850
|
sessionId: SESSION_ID_INPUT,
|
|
847
851
|
},
|
|
848
852
|
required: ['path', 'at'],
|
|
@@ -872,14 +876,14 @@ export function registerWorkflowTools(
|
|
|
872
876
|
// read: the file is this workspace's file.
|
|
873
877
|
const rel = await requireRead(ctx, branch, workspaceId, path);
|
|
874
878
|
if (isCommitSha(at)) {
|
|
875
|
-
const { baseline, current } = await ctx.
|
|
879
|
+
const { baseline, current } = await ctx.versionControlService.fileAtChange(workspaceId, path, at);
|
|
876
880
|
return { path: rel, at, kind: 'commit', sha: at, content: current, before: baseline };
|
|
877
881
|
}
|
|
878
882
|
// Read at the branch's published tip, authorized at that very commit
|
|
879
883
|
// inside the read — before anything is said about the path there,
|
|
880
884
|
// the folder refusal included: the ref is a name a fetch may move
|
|
881
885
|
// between a verdict and a read; the commit is not.
|
|
882
|
-
const read = await ctx.
|
|
886
|
+
const read = await ctx.versionControlService.fileAtBranch(workspaceId, path, at, (commits) => requireReadAtCommits(ctx, workspaceId, rel, commits, at));
|
|
883
887
|
return { path: rel, at, kind: 'branch', sha: read.sha, content: read.content };
|
|
884
888
|
},
|
|
885
889
|
});
|
|
@@ -922,14 +926,14 @@ export function registerWorkflowTools(
|
|
|
922
926
|
const rel = await requireRead(ctx, branch, workspaceId, path);
|
|
923
927
|
if (typeof args.at === 'string' && args.at.length > 0) {
|
|
924
928
|
if (!isCommitSha(args.at)) throw new ToolError('`at` must be a full commit sha.', 400);
|
|
925
|
-
return { path: rel, diff: await ctx.
|
|
929
|
+
return { path: rel, diff: await ctx.versionControlService.showFileAtChange(workspaceId, path, args.at) };
|
|
926
930
|
}
|
|
927
931
|
const from = args.from;
|
|
928
932
|
const to = args.to;
|
|
929
933
|
if (typeof from !== 'string' || from.length === 0 || typeof to !== 'string' || to.length === 0) {
|
|
930
934
|
throw new ToolError('Give `from` and `to` (two branches), or `at` (one commit).', 400);
|
|
931
935
|
}
|
|
932
|
-
const compared = await ctx.
|
|
936
|
+
const compared = await ctx.versionControlService.compareFile(workspaceId, path, from, to, async (sides) => {
|
|
933
937
|
await requireReadAtCommits(ctx, workspaceId, rel, sides.from, from);
|
|
934
938
|
await requireReadAtCommits(ctx, workspaceId, rel, sides.to, to);
|
|
935
939
|
});
|
|
@@ -982,12 +986,12 @@ export function registerWorkflowTools(
|
|
|
982
986
|
// The counts alone wait for the listing: its fetch refreshes the
|
|
983
987
|
// remote-tracking refs they are measured against.
|
|
984
988
|
const [status, [branches, counts], pending, forkBase] = await Promise.all([
|
|
985
|
-
ctx.
|
|
986
|
-
ctx.
|
|
989
|
+
ctx.versionControlService.branchStatus(workspaceId),
|
|
990
|
+
ctx.versionControlService
|
|
987
991
|
.listBranches(workspaceId)
|
|
988
|
-
.then(async (listed) => [listed, await ctx.
|
|
989
|
-
ctx.
|
|
990
|
-
ctx.
|
|
992
|
+
.then(async (listed) => [listed, await ctx.versionControlService.branchCounts(workspaceId)] as const),
|
|
993
|
+
ctx.versionControlService.listPendingChangePaths(workspaceId),
|
|
994
|
+
ctx.versionControlService.resolveForkBase(workspaceId, branch),
|
|
991
995
|
]);
|
|
992
996
|
const info = branches.find((b) => b.name === branch);
|
|
993
997
|
const base = typeof args.base === 'string' && args.base.length > 0 ? args.base : forkBase;
|
|
@@ -995,7 +999,7 @@ export function registerWorkflowTools(
|
|
|
995
999
|
// change-request reads show them (readable at `origin/<base>`), the
|
|
996
1000
|
// uncommitted ones as the workspace's own listing would.
|
|
997
1001
|
const changedAll =
|
|
998
|
-
base && base !== branch ? await ctx.
|
|
1002
|
+
base && base !== branch ? await ctx.versionControlService.changedPathsBetweenBranches(workspaceId, base, branch) : [];
|
|
999
1003
|
const readableChanged = base ? await readableAt(ctx, workspaceId, base, changedAll) : new Set<string>();
|
|
1000
1004
|
const changedPaths = changedAll.filter((p) => readableChanged.has(p));
|
|
1001
1005
|
const pendingRel = pending.map((p) => stripKbDir(p, kbDirName));
|
|
@@ -1173,12 +1177,12 @@ export function registerWorkflowTools(
|
|
|
1173
1177
|
// group), handed to the service to ask before the merge.
|
|
1174
1178
|
const outcome =
|
|
1175
1179
|
resolutions !== undefined
|
|
1176
|
-
? await ctx.
|
|
1180
|
+
? await ctx.versionControlService.updateBranch(workspaceId, ctx.user, {
|
|
1177
1181
|
...(from !== undefined ? { from } : {}),
|
|
1178
1182
|
resolutions,
|
|
1179
1183
|
validateWrite: await ctx.getWriteValidator(branch),
|
|
1180
1184
|
})
|
|
1181
|
-
: await ctx.
|
|
1185
|
+
: await ctx.versionControlService.updateBranch(workspaceId, ctx.user, from !== undefined ? { from } : {});
|
|
1182
1186
|
if (outcome.kind !== 'conflicts') return outcome;
|
|
1183
1187
|
// A conflict answer carries the file on both branches, and a path's
|
|
1184
1188
|
// name is information too: a file the caller may not read on both is
|
|
@@ -9,7 +9,7 @@ export type ChangeRequestPerson = Pick<AuthUser, 'id' | 'email' | 'name'>;
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* A change request was OPENED — by a person in the app or by an agent through
|
|
12
|
-
* its tool, which take the one road (`
|
|
12
|
+
* its tool, which take the one road (`VersionControlService.openChangeRequest`).
|
|
13
13
|
* Raised once per request, after its row exists and its source branch was
|
|
14
14
|
* pushed, or the push was refused: the request exists either way, and the
|
|
15
15
|
* branch's next push carries the commits. Never raised for a request that is
|
|
@@ -12,7 +12,7 @@ const mergeChangeRequestMock = vi.fn(async () => ({
|
|
|
12
12
|
mergeCommit: 'merged-sha',
|
|
13
13
|
}));
|
|
14
14
|
|
|
15
|
-
import {
|
|
15
|
+
import { ChangeRequestReviewService } from '../change-request-review.service.js';
|
|
16
16
|
import { changeRequests } from '../../../database/schema.js';
|
|
17
17
|
import type { Database } from '../../../database/connection.js';
|
|
18
18
|
import type { WorkspaceService } from '../../../workspace/workspace.service.js';
|
|
@@ -182,10 +182,10 @@ function makeService(rows: ApprovalRow[], byPath: EligibilityByPath) {
|
|
|
182
182
|
getOrCreateForBranch: vi.fn(async () => ({ id: 'ws-base' })),
|
|
183
183
|
} as unknown as WorkspaceService;
|
|
184
184
|
const git = { mergeChangeRequest: mergeChangeRequestMock } as unknown as GitService;
|
|
185
|
-
return new
|
|
185
|
+
return new ChangeRequestReviewService(makeDb(rows), makeAccessControl(byPath), workspace, git);
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
-
describe('
|
|
188
|
+
describe('ChangeRequestReviewService.getApprovalStates', () => {
|
|
189
189
|
const HEAD = 'head-sha-1';
|
|
190
190
|
const BASE = 'current-company-state';
|
|
191
191
|
const ALICE_EMAIL = 'alice@bevel.software';
|
|
@@ -751,7 +751,7 @@ describe('merge gate — every file type', () => {
|
|
|
751
751
|
* load. The unreadable case propagates (the caller fails closed, 503); any
|
|
752
752
|
* other lookup failure still degrades to empty eligibility as documented.
|
|
753
753
|
*/
|
|
754
|
-
describe('
|
|
754
|
+
describe('ChangeRequestReviewService.getApprovalStates — unreadable access tree', () => {
|
|
755
755
|
const FILES = [file({ path: 'Knowledge/Foo.md' })];
|
|
756
756
|
function serviceWith(overrides: Partial<IAccessControl>) {
|
|
757
757
|
const workspace = {
|
|
@@ -759,7 +759,7 @@ describe('ReviewWorkflowService.getApprovalStates — unreadable access tree', (
|
|
|
759
759
|
getOrCreateForBranch: vi.fn(async () => ({ id: 'ws-base' })),
|
|
760
760
|
} as unknown as WorkspaceService;
|
|
761
761
|
const git = { mergeChangeRequest: mergeChangeRequestMock } as unknown as GitService;
|
|
762
|
-
return new
|
|
762
|
+
return new ChangeRequestReviewService(makeDb([]), { ...makeAccessControl({}), ...overrides }, workspace, git);
|
|
763
763
|
}
|
|
764
764
|
|
|
765
765
|
it('propagates AccessUnreadableError from the eligibility lookup', async () => {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
2
|
import type { AuthUser } from '@bevel-software/platform-shared';
|
|
3
|
-
import {
|
|
3
|
+
import { ChangeRequestReviewService } from '../change-request-review.service.js';
|
|
4
4
|
import type { Database } from '../../../database/connection.js';
|
|
5
5
|
import type { WorkspaceService } from '../../../workspace/workspace.service.js';
|
|
6
6
|
import type { GitService } from '../../git/git.service.js';
|
|
7
7
|
import type { IAccessControl } from '../../../access/access-control.interface.js';
|
|
8
8
|
import { hashEmail } from '../../../../shared/email-identity.js';
|
|
9
|
-
import {
|
|
9
|
+
import { VersionControlValidationError } from '../../../../shared/domain-errors.js';
|
|
10
10
|
|
|
11
11
|
// Cancel is now a DB state flip (no `gh`): `update(change_requests) … WHERE
|
|
12
12
|
// number = ? AND state = 'open'`. This spy stands in for the update's
|
|
@@ -58,14 +58,14 @@ function makeAccessControl(adminEmails: string[] = []): IAccessControl {
|
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
function makeService(accessControl: IAccessControl):
|
|
61
|
+
function makeService(accessControl: IAccessControl): ChangeRequestReviewService {
|
|
62
62
|
// `ensureRemotesFetched` is best-effort (catches errors); the DB stub above
|
|
63
63
|
// stands in for the state-flip update + the race re-read.
|
|
64
64
|
const workspace = { ensureRemotesFetched: async () => undefined } as unknown as WorkspaceService;
|
|
65
|
-
return new
|
|
65
|
+
return new ChangeRequestReviewService(makeDb(), accessControl, workspace, {} as unknown as GitService);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
describe('
|
|
68
|
+
describe('ChangeRequestReviewService.cancelPr', () => {
|
|
69
69
|
beforeEach(() => {
|
|
70
70
|
updateReturning.mockClear();
|
|
71
71
|
updateReturning.mockResolvedValue([{ id: 'cr-1' }]);
|
|
@@ -145,7 +145,7 @@ describe('ReviewWorkflowService.cancelPr', () => {
|
|
|
145
145
|
for (const bad of [0, -1, 1.5, Number.NaN]) {
|
|
146
146
|
await expect(
|
|
147
147
|
svc.cancelPr(bad, USER, 'open', null, 'current-company-state', 'ws-1'),
|
|
148
|
-
).rejects.toBeInstanceOf(
|
|
148
|
+
).rejects.toBeInstanceOf(VersionControlValidationError);
|
|
149
149
|
}
|
|
150
150
|
});
|
|
151
151
|
|
|
@@ -153,10 +153,10 @@ describe('ReviewWorkflowService.cancelPr', () => {
|
|
|
153
153
|
const svc = makeService(makeAccessControl([USER.email]));
|
|
154
154
|
await expect(
|
|
155
155
|
svc.cancelPr(42, USER, 'open', null, '', 'ws-1'),
|
|
156
|
-
).rejects.toBeInstanceOf(
|
|
156
|
+
).rejects.toBeInstanceOf(VersionControlValidationError);
|
|
157
157
|
await expect(
|
|
158
158
|
svc.cancelPr(42, USER, 'open', null, 'current-company-state', ''),
|
|
159
|
-
).rejects.toBeInstanceOf(
|
|
159
|
+
).rejects.toBeInstanceOf(VersionControlValidationError);
|
|
160
160
|
});
|
|
161
161
|
|
|
162
162
|
it('skips the admin lookup when the author check matches', async () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect, vi } from 'vitest';
|
|
2
2
|
import type { PullRequestFile } from '@bevel-software/platform-shared';
|
|
3
|
-
import {
|
|
3
|
+
import { ChangeRequestReviewService } from '../change-request-review.service.js';
|
|
4
4
|
import type { Database } from '../../../database/connection.js';
|
|
5
5
|
import type { WorkspaceService } from '../../../workspace/workspace.service.js';
|
|
6
6
|
import type { GitService } from '../../git/git.service.js';
|
|
@@ -220,7 +220,7 @@ function makeService(
|
|
|
220
220
|
return fn(tx);
|
|
221
221
|
},
|
|
222
222
|
} as unknown as Database;
|
|
223
|
-
const svc = new
|
|
223
|
+
const svc = new ChangeRequestReviewService(
|
|
224
224
|
db,
|
|
225
225
|
{} as unknown as IAccessControl,
|
|
226
226
|
{} as unknown as WorkspaceService,
|
|
@@ -229,7 +229,7 @@ function makeService(
|
|
|
229
229
|
return { svc, db, stored, selected, inserted, order, locked, lockSql };
|
|
230
230
|
}
|
|
231
231
|
|
|
232
|
-
describe('
|
|
232
|
+
describe('ChangeRequestReviewService.carryApprovalsForward', () => {
|
|
233
233
|
it('re-pins only the approvals the merge did not touch, keeping who approved and when', async () => {
|
|
234
234
|
const h = makeService([
|
|
235
235
|
row('Sales/Deal.md'),
|
|
@@ -355,7 +355,7 @@ describe('ReviewWorkflowService.carryApprovalsForward', () => {
|
|
|
355
355
|
* between the copy's select and its insert stayed pinned to the head the
|
|
356
356
|
* update was replacing and vanished from the request it was made on.
|
|
357
357
|
*/
|
|
358
|
-
describe('
|
|
358
|
+
describe('ChangeRequestReviewService.approveFile: written under the same lock', () => {
|
|
359
359
|
const USER = { id: 'u1', email: 'bob@bevel.software', name: 'Bob' };
|
|
360
360
|
const FILES: PullRequestFile[] = [
|
|
361
361
|
{
|
|
@@ -370,7 +370,7 @@ describe('ReviewWorkflowService.approveFile: written under the same lock', () =>
|
|
|
370
370
|
];
|
|
371
371
|
|
|
372
372
|
const approver = (h: ReturnType<typeof makeService>) =>
|
|
373
|
-
new
|
|
373
|
+
new ChangeRequestReviewService(
|
|
374
374
|
h.db,
|
|
375
375
|
{
|
|
376
376
|
canWriteAtRef: async () => true,
|
|
@@ -493,7 +493,7 @@ describe('a carried approval still counts at the new head', () => {
|
|
|
493
493
|
const h = makeService([row('Sales/Deal.md'), row('Sales/Terms.md')]);
|
|
494
494
|
await h.svc.carryApprovalsForward(PR, OLD_HEAD, NEW_HEAD, ['Sales/Deal.md']);
|
|
495
495
|
|
|
496
|
-
const reader = new
|
|
496
|
+
const reader = new ChangeRequestReviewService(
|
|
497
497
|
{
|
|
498
498
|
select: () => ({ from: () => ({ where: () => Promise.resolve(h.stored) }) }),
|
|
499
499
|
} as unknown as Database,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest';
|
|
2
2
|
import type { SQL } from 'drizzle-orm';
|
|
3
3
|
import { PgDialect } from 'drizzle-orm/pg-core';
|
|
4
|
-
import {
|
|
5
|
-
import type { ApprovalTx } from '../review
|
|
4
|
+
import { ChangeRequestReviewService } from '../change-request-review.service.js';
|
|
5
|
+
import type { ApprovalTx } from '../change-request-review.interface.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* `eraseApprover` is the review
|
|
8
|
+
* `eraseApprover` is the change-request review's half of account erasure: the rows
|
|
9
9
|
* are this module's, the writers that race the rewrite are this module's, so
|
|
10
10
|
* the lock and the statement live here and erasure only hands over its
|
|
11
11
|
* transaction. This pins what that half must do with it — take the
|
|
@@ -62,11 +62,11 @@ function harness() {
|
|
|
62
62
|
};
|
|
63
63
|
// `eraseApprover` touches nothing but the transaction it is given, so the
|
|
64
64
|
// service's own collaborators are never reached.
|
|
65
|
-
const svc = new
|
|
65
|
+
const svc = new ChangeRequestReviewService({} as never, {} as never, {} as never, {} as never);
|
|
66
66
|
return { svc, tx: tx as unknown as ApprovalTx, order, locked, lockSql, sets, wheres };
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
describe('
|
|
69
|
+
describe('ChangeRequestReviewService.eraseApprover', () => {
|
|
70
70
|
it('takes the every-request lock exclusively, bounded, right before the rewrite', async () => {
|
|
71
71
|
const h = harness();
|
|
72
72
|
await h.svc.eraseApprover(h.tx, 'bob@bevel.software', {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest';
|
|
2
2
|
import type { FileApprovalEntry, FileApprovalState, PullRequestState } from '@bevel-software/platform-shared';
|
|
3
|
-
import {
|
|
3
|
+
import { ChangeRequestReviewService } from '../change-request-review.service.js';
|
|
4
4
|
|
|
5
|
-
function makeService():
|
|
5
|
+
function makeService(): ChangeRequestReviewService {
|
|
6
6
|
// evaluateMergeGate is pure — it never touches the DB, access service, or
|
|
7
7
|
// workspace. Constructing with `undefined as any` for unused deps keeps the
|
|
8
8
|
// test focused on the gate logic and avoids pulling in fixture scaffolding.
|
|
9
|
-
return new
|
|
9
|
+
return new ChangeRequestReviewService(undefined as any, undefined as any, undefined as any, undefined as any);
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
const ADMIN_ELIGIBLE = {
|
|
@@ -2,7 +2,7 @@ import { describe, it, expect, vi } from 'vitest';
|
|
|
2
2
|
|
|
3
3
|
import { PgDialect } from 'drizzle-orm/pg-core';
|
|
4
4
|
import type { SQL } from 'drizzle-orm';
|
|
5
|
-
import {
|
|
5
|
+
import { ChangeRequestReviewService } from '../change-request-review.service.js';
|
|
6
6
|
import { changeRequests, prMergeLog } from '../../../database/schema.js';
|
|
7
7
|
import type { Database } from '../../../database/connection.js';
|
|
8
8
|
import type { WorkspaceService } from '../../../workspace/workspace.service.js';
|
|
@@ -159,7 +159,7 @@ function makeService(mergeResult: AppliedMergeResult) {
|
|
|
159
159
|
ensureRemotesFetched: vi.fn(async () => undefined),
|
|
160
160
|
getOrCreateForBranch: vi.fn(async () => ({ id: 'ws-base' })),
|
|
161
161
|
} as unknown as WorkspaceService;
|
|
162
|
-
const svc = new
|
|
162
|
+
const svc = new ChangeRequestReviewService(
|
|
163
163
|
makeDb(captured),
|
|
164
164
|
{} as unknown as IAccessControl,
|
|
165
165
|
workspace,
|
|
@@ -268,7 +268,7 @@ function makeStuckService(
|
|
|
268
268
|
const workspace = {
|
|
269
269
|
getOrCreateForBranch: vi.fn(async () => ({ id: 'ws-base' })),
|
|
270
270
|
} as unknown as WorkspaceService;
|
|
271
|
-
const svc = new
|
|
271
|
+
const svc = new ChangeRequestReviewService(
|
|
272
272
|
makeDb(captured, { rows, casWon, begunLog }),
|
|
273
273
|
{} as unknown as IAccessControl,
|
|
274
274
|
workspace,
|
|
@@ -45,7 +45,7 @@ export interface MergeGateResult {
|
|
|
45
45
|
* merge; everything in this interface is in-app state
|
|
46
46
|
* the team uses to decide whether the merge should fire.
|
|
47
47
|
*/
|
|
48
|
-
export interface
|
|
48
|
+
export interface IChangeRequestReviewService {
|
|
49
49
|
/**
|
|
50
50
|
* Compose the per-file approval state for a PR detail response. Resolves
|
|
51
51
|
* the eligible approver set against **the PR's base branch on origin**
|