@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
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import express from 'express';
|
|
2
1
|
import { describe, expect, it } from 'vitest';
|
|
3
2
|
import {
|
|
4
3
|
CALL_TOOL_CHAIN_NAME,
|
|
@@ -9,21 +8,9 @@ import {
|
|
|
9
8
|
splitCallLine,
|
|
10
9
|
} from '@bevel-software/platform-mcp-core';
|
|
11
10
|
import { testKbContext } from '../../../__tests__/kb-context.js';
|
|
12
|
-
import { EXTERNAL_KB_MANUAL_NAME } from '../../tool-manuals/
|
|
13
|
-
import { ToolRegistry } from '../tool-registry.js';
|
|
11
|
+
import { EXTERNAL_KB_MANUAL_NAME } from '../../tool-manuals/index.js';
|
|
14
12
|
import type { UtcpTool } from '../tool.contract.js';
|
|
15
|
-
import {
|
|
16
|
-
import type { ToolAuth } from '../../tool-auth/tool-auth.middleware.js';
|
|
17
|
-
import { registerWorkspaceTools } from '../../workspace/workspace.tools.js';
|
|
18
|
-
import { RipgrepPatternMatcher } from '../../workspace/index.js';
|
|
19
|
-
import { registerWorkflowTools } from '../../workflow/agent-tools/workflow.tools.js';
|
|
20
|
-
import { registerPluginsTools } from '../../plugins/plugins.tools.js';
|
|
21
|
-
import { registerSkillsTools } from '../../skills/skills.tools.js';
|
|
22
|
-
import { registerToolManualsTools } from '../../tool-manuals/tool-manuals.tools.js';
|
|
23
|
-
import { ToolDescriptionNotes } from '../../workspace/agent-access.gate.js';
|
|
24
|
-
import { WorkflowHooks } from '../../workflow/workflow-hooks.js';
|
|
25
|
-
import { UuidSessionSink } from '../../workspace/session-sink.js';
|
|
26
|
-
import { RoutineWritePolicyService } from '../../workspace/routine-write-policy.js';
|
|
13
|
+
import type { registerSkillsTools } from '../../skills/index.js';
|
|
27
14
|
import { CLIENT_SHORT_CUT, TOOL_DESCRIPTION_CAP, clientVisibleLength, firstSentenceEnd } from '../description-length.js';
|
|
28
15
|
import { CAN_WRITE_CLAUSE } from '../../tool-helpers/index.js';
|
|
29
16
|
import {
|
|
@@ -31,9 +18,8 @@ import {
|
|
|
31
18
|
sharedFileRules,
|
|
32
19
|
} from '../../agent-instructions/index.js';
|
|
33
20
|
import { isPlatformFile, platformFilesByDepth } from '@bevel-software/platform-shared';
|
|
34
|
-
import { GET_AGENT_GUIDE_TOOL, GUIDE_FIRST_SENTENCE
|
|
35
|
-
import {
|
|
36
|
-
import { agentGuideSections } from '../../agent-guide/agent-guide.js';
|
|
21
|
+
import { GET_AGENT_GUIDE_TOOL, GUIDE_FIRST_SENTENCE } from '../guide-first.js';
|
|
22
|
+
import { emptySkills, hexisTools, servedMetaTools, unused } from '../../../__tests__/hexis-catalog.js';
|
|
37
23
|
|
|
38
24
|
/**
|
|
39
25
|
* The cap exists because clients cut a long tool description, and they cut it
|
|
@@ -43,104 +29,11 @@ import { agentGuideSections } from '../../agent-guide/agent-guide.js';
|
|
|
43
29
|
* NAMING the tool: the next paragraph someone appends to a description has to
|
|
44
30
|
* answer to this test rather than to an agent's truncated catalog.
|
|
45
31
|
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* is honest about that. Tools PROXIED from connected MCP servers are not
|
|
32
|
+
* The catalog is every registrar Hexis owns, mounted on stand-ins (see
|
|
33
|
+
* `hexis-catalog.ts`). Tools PROXIED from connected MCP servers are not
|
|
49
34
|
* measured — their text is the other server's.
|
|
50
35
|
*/
|
|
51
36
|
|
|
52
|
-
/** Dependencies the registrars take but never touch while they are only building defs. */
|
|
53
|
-
const unused = <T,>(): T => ({}) as T;
|
|
54
|
-
|
|
55
|
-
/** A `.tool` catalog with nothing in it: the shortest honest answer for a listing. */
|
|
56
|
-
const emptyManuals = {
|
|
57
|
-
listLocalOnly: async () => [],
|
|
58
|
-
listAll: async () => [],
|
|
59
|
-
list: async () => [],
|
|
60
|
-
listInvalid: async () => [],
|
|
61
|
-
} as unknown as Parameters<typeof registerToolManualsTools>[4];
|
|
62
|
-
|
|
63
|
-
/** A skill catalog with nothing in it — the per-user skill line is then one fixed sentence. */
|
|
64
|
-
const emptySkills = { listSkills: async () => [] } as unknown as Parameters<typeof registerSkillsTools>[4];
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* The meta-tools as the hosted endpoint builds them (`mcp.service.ts`):
|
|
68
|
-
* examples written against the namespace it registers the knowledge-base tools
|
|
69
|
-
* under and against the catalog it serves, and the chain without the rules it
|
|
70
|
-
* states only in the shared places. So the chain description measured here
|
|
71
|
-
* carries the worked call a client is really sent, which is its longest form.
|
|
72
|
-
*/
|
|
73
|
-
function servedMetaTools(external: readonly UtcpTool[]) {
|
|
74
|
-
return codeModeMetaTools(
|
|
75
|
-
EXTERNAL_KB_MANUAL_NAME,
|
|
76
|
-
external.map((t) => ({ utcpName: `${EXTERNAL_KB_MANUAL_NAME}.${t.name}`, inputSchema: t.inputs })),
|
|
77
|
-
{ sharedRulesPointer: '' },
|
|
78
|
-
// As the hosted endpoint serves them: opening with the guide-first
|
|
79
|
-
// sentence, through the one helper the endpoint itself uses.
|
|
80
|
-
).map((t) => ({ ...t, description: guideFirstDescription(t.description) }));
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/** Every tool Hexis itself registers, on both surfaces, deduplicated by name. */
|
|
84
|
-
async function hexisTools(skills: Parameters<typeof registerSkillsTools>[4] = emptySkills): Promise<UtcpTool[]> {
|
|
85
|
-
const registry = new ToolRegistry();
|
|
86
|
-
const router = express.Router();
|
|
87
|
-
const toolAuth = ((_req, _res, next) => next()) as unknown as ToolAuth;
|
|
88
|
-
const toolHandler = createToolHandlerFactory(unused());
|
|
89
|
-
const kb = testKbContext();
|
|
90
|
-
const gate = { recoveryBotEmail: 'bot@x', hooks: new WorkflowHooks(), notes: new ToolDescriptionNotes() };
|
|
91
|
-
|
|
92
|
-
registerWorkspaceTools(
|
|
93
|
-
registry,
|
|
94
|
-
router,
|
|
95
|
-
toolAuth,
|
|
96
|
-
toolHandler,
|
|
97
|
-
unused(),
|
|
98
|
-
unused(),
|
|
99
|
-
unused(),
|
|
100
|
-
kb,
|
|
101
|
-
gate,
|
|
102
|
-
new RoutineWritePolicyService(),
|
|
103
|
-
new UuidSessionSink(),
|
|
104
|
-
undefined,
|
|
105
|
-
undefined,
|
|
106
|
-
// The two upload tools are mounted only when a store is supplied, and
|
|
107
|
-
// every real composition supplies one: without it they would be the two
|
|
108
|
-
// descriptions this suite never measured.
|
|
109
|
-
unused(),
|
|
110
|
-
// The guide reader, not needed to build defs; then the download store,
|
|
111
|
-
// mounted on the same terms as the upload one.
|
|
112
|
-
undefined,
|
|
113
|
-
unused(),
|
|
114
|
-
// Starter packs and the tree walk, not needed; then the grep matcher,
|
|
115
|
-
// mounted on the same terms (it spawns no worker until a search runs).
|
|
116
|
-
undefined,
|
|
117
|
-
undefined,
|
|
118
|
-
new RipgrepPatternMatcher(),
|
|
119
|
-
);
|
|
120
|
-
registerWorkflowTools(registry, router, toolAuth, toolHandler, kb, async () => true, { canRead: async () => true, canReadAtRef: async () => true, canReadBatch: async () => new Map(), canReadBatchAtRef: async () => new Map(), canWrite: async () => true } as never, { recoveryBotEmail: 'recovery@x', hooks: { runAgentRead: async () => undefined }, notes: { onChange: () => undefined } } as never);
|
|
121
|
-
registerPluginsTools(registry, kb);
|
|
122
|
-
registerSkillsTools(registry, router, toolAuth, toolHandler, skills);
|
|
123
|
-
registerToolManualsTools(registry, router, toolAuth, toolHandler, emptyManuals, {
|
|
124
|
-
accessControl: unused(),
|
|
125
|
-
variableStatus: unused(),
|
|
126
|
-
kb,
|
|
127
|
-
});
|
|
128
|
-
// The guide's own tool, with the platform's sections: the one description
|
|
129
|
-
// that lists the sections is measured with the list it really carries.
|
|
130
|
-
registerAgentGuideTool(registry, router, toolAuth, toolHandler, () => agentGuideSections(kb.layout));
|
|
131
|
-
|
|
132
|
-
const byName = new Map<string, UtcpTool>();
|
|
133
|
-
// The meta-tools as a client is served them (`mcp.service.ts` opens each
|
|
134
|
-
// with the guide-first sentence at the mount), so the catalog measured here
|
|
135
|
-
// is the catalog that goes out rather than the bare constant.
|
|
136
|
-
const external = (await registry.listExternal()) as UtcpTool[];
|
|
137
|
-
const metaTools = servedMetaTools(external);
|
|
138
|
-
for (const tool of [...(await registry.listInternal()), ...external, ...metaTools]) {
|
|
139
|
-
byName.set(tool.name, tool as UtcpTool);
|
|
140
|
-
}
|
|
141
|
-
return [...byName.values()];
|
|
142
|
-
}
|
|
143
|
-
|
|
144
37
|
describe('no Hexis tool description is long enough to be cut', () => {
|
|
145
38
|
it(`keeps every description a client is handed within ${TOOL_DESCRIPTION_CAP} characters`, async () => {
|
|
146
39
|
const over = (await hexisTools())
|
|
@@ -237,7 +130,7 @@ describe('no Hexis tool description is long enough to be cut', () => {
|
|
|
237
130
|
// purpose, and this assertion is what keeps that a stated fact rather than
|
|
238
131
|
// an oversight: if it ever reaches the catalog, the cap test above measures
|
|
239
132
|
// it like everything else.
|
|
240
|
-
const { createCallToolChainTool } = await import('../../code-mode/
|
|
133
|
+
const { createCallToolChainTool } = await import('../../code-mode/index.js');
|
|
241
134
|
const mastraTool = createCallToolChainTool(unused(), unused(), EXTERNAL_KB_MANUAL_NAME) as unknown as {
|
|
242
135
|
description: string;
|
|
243
136
|
};
|
|
@@ -325,14 +218,14 @@ describe('the shared rules describe the tools they name', () => {
|
|
|
325
218
|
// The opener is only honest if the rules it points at are THERE. These
|
|
326
219
|
// two were paragraphs of the chain's description; they moved, whole, and a
|
|
327
220
|
// description that kept them as well would be the long one a client cuts.
|
|
328
|
-
const rule = sharedFileRules(testKbContext().layout).find((r) => r.id === 'tool-chain')!;
|
|
221
|
+
const rule = sharedFileRules(testKbContext().layout, testKbContext().defaultBranch).find((r) => r.id === 'tool-chain')!;
|
|
329
222
|
expect(rule.body).toContain(CHAIN_FAILURES_RULE);
|
|
330
223
|
expect(rule.body).toContain(CHAIN_LARGE_RESULTS_RULE);
|
|
331
224
|
const served = (await hexisTools()).find((t) => t.name === CALL_TOOL_CHAIN_NAME)!;
|
|
332
225
|
expect(served.description).not.toContain(CHAIN_FAILURES_RULE);
|
|
333
226
|
expect(served.description).not.toContain(CHAIN_LARGE_RESULTS_RULE);
|
|
334
227
|
// What a chained read does to an image was already one of the shared rules.
|
|
335
|
-
const content = sharedFileRules(testKbContext().layout).find((r) => r.id === 'content-kinds')!;
|
|
228
|
+
const content = sharedFileRules(testKbContext().layout, testKbContext().defaultBranch).find((r) => r.id === 'content-kinds')!;
|
|
336
229
|
expect(content.body).toContain('image_omitted');
|
|
337
230
|
});
|
|
338
231
|
|
|
@@ -351,7 +244,7 @@ describe('the shared rules describe the tools they name', () => {
|
|
|
351
244
|
// rejects: `delete_file` has no `dryRun`, so an agent told to preflight a
|
|
352
245
|
// single-file delete gets a validation error on the safe call and learns to
|
|
353
246
|
// skip it. Read off the schemas rather than asserted by hand.
|
|
354
|
-
const rule = sharedFileRules(testKbContext().layout).find((r) => r.id === 'dry-run-confirm')!;
|
|
247
|
+
const rule = sharedFileRules(testKbContext().layout, testKbContext().defaultBranch).find((r) => r.id === 'dry-run-confirm')!;
|
|
355
248
|
const tools = await hexisTools();
|
|
356
249
|
// `toolDef` wraps a tool's own inputs under `body`, which is the schema a
|
|
357
250
|
// client validates against — so that is where the argument either is or is not.
|
|
@@ -379,7 +272,7 @@ describe('the shared rules describe the tools they name', () => {
|
|
|
379
272
|
});
|
|
380
273
|
|
|
381
274
|
it('gives each platform file the depth it actually counts at', () => {
|
|
382
|
-
const rule = sharedFileRules(testKbContext().layout).find((r) => r.id === 'managed-items')!;
|
|
275
|
+
const rule = sharedFileRules(testKbContext().layout, testKbContext().defaultBranch).find((r) => r.id === 'managed-items')!;
|
|
383
276
|
const { anyDepth, rootOnly } = platformFilesByDepth(testKbContext().layout);
|
|
384
277
|
// The split is the half of the rule a list of names leaves out, and
|
|
385
278
|
// `isPlatformFile` is the predicate the prose has to match.
|
|
@@ -390,7 +283,7 @@ describe('the shared rules describe the tools they name', () => {
|
|
|
390
283
|
});
|
|
391
284
|
|
|
392
285
|
it('says what unzip extracts, rather than that it takes any bytes', () => {
|
|
393
|
-
const rule = sharedFileRules(testKbContext().layout).find((r) => r.id === 'content-kinds')!;
|
|
286
|
+
const rule = sharedFileRules(testKbContext().layout, testKbContext().defaultBranch).find((r) => r.id === 'content-kinds')!;
|
|
394
287
|
// `unzip` refuses anything but a `.zip` (`workspace.service.ts`: "Only .zip
|
|
395
288
|
// files can be extracted"), so the byte-tool clause must not sweep it in.
|
|
396
289
|
expect(rule.body).toContain('unzip extracts the entries of a `.zip`');
|
|
@@ -5,7 +5,7 @@ import type { AddressInfo } from 'node:net';
|
|
|
5
5
|
import express from 'express';
|
|
6
6
|
import { describe, it, expect, afterEach, vi } from 'vitest';
|
|
7
7
|
import { testKbContext } from '../../../__tests__/kb-context.js';
|
|
8
|
-
import type { AuthUser, FileApprovalState,
|
|
8
|
+
import type { AuthUser, FileApprovalState, IVersionControlService, VersionControlEvent } from '@bevel-software/platform-shared';
|
|
9
9
|
import type { IAccessControl } from '../../access/access-control.interface.js';
|
|
10
10
|
import type { AuthService } from '../../auth/auth.service.js';
|
|
11
11
|
import type { WorkspaceService } from '../../workspace/workspace.service.js';
|
|
@@ -13,18 +13,18 @@ import type { Database } from '../../database/connection.js';
|
|
|
13
13
|
import type { GitService } from '../git/git.service.js';
|
|
14
14
|
import type { PullRequestService } from '../git/pull-request.service.js';
|
|
15
15
|
import { PullRequestService as RealPullRequestService } from '../git/pull-request.service.js';
|
|
16
|
-
import type {
|
|
17
|
-
import {
|
|
16
|
+
import type { IChangeRequestReviewService } from '../change-request-review/change-request-review.interface.js';
|
|
17
|
+
import { ChangeRequestReviewService } from '../change-request-review/change-request-review.service.js';
|
|
18
18
|
import type { FileLockService } from '../file-lock.service.js';
|
|
19
19
|
import type { PendingCommitsService } from '../pending-commits.service.js';
|
|
20
|
-
import {
|
|
20
|
+
import { VersionControlEventBus } from '../event-bus.js';
|
|
21
21
|
import type { SQL } from 'drizzle-orm';
|
|
22
22
|
import { PgDialect } from 'drizzle-orm/pg-core';
|
|
23
23
|
import { changeRequests } from '../../database/schema.js';
|
|
24
24
|
import { coreMigrationsDir } from '../../../assets.js';
|
|
25
|
-
import {
|
|
26
|
-
import { APPLY_FAILURE_REASON_WITHHELD,
|
|
27
|
-
import {
|
|
25
|
+
import { VersionControlService } from '../version-control.service.js';
|
|
26
|
+
import { APPLY_FAILURE_REASON_WITHHELD, createVersionControlRoutes } from '../version-control.routes.js';
|
|
27
|
+
import { VersionControlDomainError, VersionControlValidationError } from '../../../shared/domain-errors.js';
|
|
28
28
|
import { openChangeGate } from '../../../__tests__/open-change-gate.js';
|
|
29
29
|
|
|
30
30
|
/**
|
|
@@ -43,8 +43,8 @@ const ADMIN: AuthUser = { id: 'u-admin', email: 'admin@example.com', name: 'Ada
|
|
|
43
43
|
interface RouteHarness {
|
|
44
44
|
server: Server;
|
|
45
45
|
baseUrl: string;
|
|
46
|
-
emitted:
|
|
47
|
-
|
|
46
|
+
emitted: VersionControlEvent[];
|
|
47
|
+
versionControl: {
|
|
48
48
|
getChangeRequestDetail: ReturnType<typeof vi.fn>;
|
|
49
49
|
mergeChangeRequest: ReturnType<typeof vi.fn>;
|
|
50
50
|
beginApplyAttempt: ReturnType<typeof vi.fn>;
|
|
@@ -60,9 +60,9 @@ async function routeHarness(
|
|
|
60
60
|
canReadBatch?: (paths: string[]) => Promise<Map<string, boolean>>;
|
|
61
61
|
} = {},
|
|
62
62
|
): Promise<RouteHarness> {
|
|
63
|
-
const emitted:
|
|
63
|
+
const emitted: VersionControlEvent[] = [];
|
|
64
64
|
const canReadBatch = opts.canReadBatch ?? (async (paths: string[]) => new Map(paths.map((p) => [p, true])));
|
|
65
|
-
const
|
|
65
|
+
const versionControl = {
|
|
66
66
|
getChangeRequestDetail: vi.fn(async () => ({
|
|
67
67
|
headSha: 'h',
|
|
68
68
|
approvals: [],
|
|
@@ -84,11 +84,11 @@ async function routeHarness(
|
|
|
84
84
|
});
|
|
85
85
|
app.use(
|
|
86
86
|
'/api',
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
createVersionControlRoutes(
|
|
88
|
+
versionControl as unknown as IVersionControlService,
|
|
89
89
|
{ getOrCreateForUser: vi.fn(async () => ({ id: 'ws-admin' })) } as unknown as WorkspaceService,
|
|
90
90
|
{ getUserById: vi.fn(async () => ADMIN) } as unknown as AuthService,
|
|
91
|
-
{ emit: (e:
|
|
91
|
+
{ emit: (e: VersionControlEvent) => emitted.push(e) } as unknown as VersionControlEventBus,
|
|
92
92
|
{
|
|
93
93
|
canReadBatch: async (_ws: string, _email: string, paths: string[]) => canReadBatch(paths),
|
|
94
94
|
} as unknown as IAccessControl,
|
|
@@ -99,7 +99,7 @@ async function routeHarness(
|
|
|
99
99
|
const s = app.listen(0, () => resolve(s));
|
|
100
100
|
});
|
|
101
101
|
const addr = server.address() as AddressInfo;
|
|
102
|
-
return { server, baseUrl: `http://127.0.0.1:${addr.port}`, emitted,
|
|
102
|
+
return { server, baseUrl: `http://127.0.0.1:${addr.port}`, emitted, versionControl };
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
const closeServer = (s: Server) =>
|
|
@@ -123,22 +123,22 @@ describe('POST /workflow/change-requests/:n/merge — a failed apply reaches eve
|
|
|
123
123
|
h = await routeHarness(async () => {
|
|
124
124
|
// The gate's own `MergeBlockedError` shape: a 422 carrying the reasons it
|
|
125
125
|
// still waits on. Its message is what the route reports.
|
|
126
|
-
throw new
|
|
126
|
+
throw new VersionControlDomainError('Merge gate rejected: Waiting on approval for Plugins/x/SKILL.md', 422, {
|
|
127
127
|
mergeBlockedReasons: ['Waiting on approval for Plugins/x/SKILL.md'],
|
|
128
128
|
});
|
|
129
129
|
});
|
|
130
130
|
const res = await post(h.baseUrl);
|
|
131
131
|
expect(res.status).toBe(202);
|
|
132
132
|
|
|
133
|
-
await vi.waitFor(() => expect(h!.
|
|
134
|
-
expect(h.
|
|
133
|
+
await vi.waitFor(() => expect(h!.versionControl.recordApplyFailure).toHaveBeenCalled());
|
|
134
|
+
expect(h.versionControl.recordApplyFailure).toHaveBeenCalledWith(
|
|
135
135
|
7,
|
|
136
136
|
{ reason: expect.stringContaining('Waiting on approval'), kind: 'gate', at: expect.any(Date) },
|
|
137
137
|
ADMIN,
|
|
138
138
|
1,
|
|
139
139
|
);
|
|
140
140
|
// The clicker's event and the persisted refusal name the same instant.
|
|
141
|
-
const [, { at }] = h.
|
|
141
|
+
const [, { at }] = h.versionControl.recordApplyFailure.mock.calls[0] as [number, { at: Date }];
|
|
142
142
|
// The clicker's own answer is unchanged.
|
|
143
143
|
expect(h.emitted).toContainEqual(
|
|
144
144
|
expect.objectContaining({
|
|
@@ -153,16 +153,16 @@ describe('POST /workflow/change-requests/:n/merge — a failed apply reaches eve
|
|
|
153
153
|
it("the clicker's own answer is scoped like the stored one: a clicker who cannot read the files gets no reason", async () => {
|
|
154
154
|
h = await routeHarness(
|
|
155
155
|
async () => {
|
|
156
|
-
throw new
|
|
156
|
+
throw new VersionControlValidationError('Waiting on approval for Plugins/x/SKILL.md');
|
|
157
157
|
},
|
|
158
158
|
{ canReadBatch: async (paths) => new Map(paths.map((p) => [p, false])) },
|
|
159
159
|
);
|
|
160
160
|
await post(h.baseUrl);
|
|
161
|
-
await vi.waitFor(() => expect(h!.
|
|
161
|
+
await vi.waitFor(() => expect(h!.versionControl.recordApplyFailure).toHaveBeenCalled());
|
|
162
162
|
const answer = h.emitted.find((e) => e.kind === 'change-request-merge-failed') as { reason: string };
|
|
163
163
|
expect(answer.reason).toBe(APPLY_FAILURE_REASON_WITHHELD);
|
|
164
164
|
// The raw reason is still what is stored, for the viewers who may read it.
|
|
165
|
-
expect(h.
|
|
165
|
+
expect(h.versionControl.recordApplyFailure).toHaveBeenCalledWith(
|
|
166
166
|
7,
|
|
167
167
|
expect.objectContaining({ reason: expect.stringContaining('Plugins/x/SKILL.md') }),
|
|
168
168
|
ADMIN,
|
|
@@ -173,7 +173,7 @@ describe('POST /workflow/change-requests/:n/merge — a failed apply reaches eve
|
|
|
173
173
|
it("a request with no resolved touched paths withholds the clicker's reason too", async () => {
|
|
174
174
|
h = await routeHarness(
|
|
175
175
|
async () => {
|
|
176
|
-
throw new
|
|
176
|
+
throw new VersionControlValidationError('Waiting on approval for Plugins/x/SKILL.md');
|
|
177
177
|
},
|
|
178
178
|
{ touchedNodePaths: [] },
|
|
179
179
|
);
|
|
@@ -187,7 +187,7 @@ describe('POST /workflow/change-requests/:n/merge — a failed apply reaches eve
|
|
|
187
187
|
|
|
188
188
|
it('a refusal of the caller reaches the caller alone and erases nobody\'s verdict', async () => {
|
|
189
189
|
h = await routeHarness(async () => {
|
|
190
|
-
throw new
|
|
190
|
+
throw new VersionControlDomainError('Only admins can merge with bypass.', 403);
|
|
191
191
|
});
|
|
192
192
|
await post(h.baseUrl);
|
|
193
193
|
await vi.waitFor(() =>
|
|
@@ -195,16 +195,16 @@ describe('POST /workflow/change-requests/:n/merge — a failed apply reaches eve
|
|
|
195
195
|
expect.objectContaining({ kind: 'change-request-merge-failed', forUserId: ADMIN.id }),
|
|
196
196
|
),
|
|
197
197
|
);
|
|
198
|
-
expect(h.
|
|
198
|
+
expect(h.versionControl.recordApplyFailure).not.toHaveBeenCalled();
|
|
199
199
|
});
|
|
200
200
|
|
|
201
201
|
it('any other refusal is persisted as an error, which an approval does not answer', async () => {
|
|
202
202
|
h = await routeHarness(async () => {
|
|
203
|
-
throw new
|
|
203
|
+
throw new VersionControlDomainError('Merge failed: push rejected', 502);
|
|
204
204
|
});
|
|
205
205
|
await post(h.baseUrl);
|
|
206
|
-
await vi.waitFor(() => expect(h!.
|
|
207
|
-
expect(h.
|
|
206
|
+
await vi.waitFor(() => expect(h!.versionControl.recordApplyFailure).toHaveBeenCalled());
|
|
207
|
+
expect(h.versionControl.recordApplyFailure).toHaveBeenCalledWith(
|
|
208
208
|
7,
|
|
209
209
|
expect.objectContaining({ kind: 'error' }),
|
|
210
210
|
ADMIN,
|
|
@@ -215,8 +215,8 @@ describe('POST /workflow/change-requests/:n/merge — a failed apply reaches eve
|
|
|
215
215
|
it('a conflict is persisted as a conflict', async () => {
|
|
216
216
|
h = await routeHarness(async () => ({ kind: 'conflicts-need-resolution', conflictedPaths: ['a.md'] }));
|
|
217
217
|
await post(h.baseUrl);
|
|
218
|
-
await vi.waitFor(() => expect(h!.
|
|
219
|
-
expect(h.
|
|
218
|
+
await vi.waitFor(() => expect(h!.versionControl.recordApplyFailure).toHaveBeenCalled());
|
|
219
|
+
expect(h.versionControl.recordApplyFailure).toHaveBeenCalledWith(
|
|
220
220
|
7,
|
|
221
221
|
expect.objectContaining({ kind: 'conflicts' }),
|
|
222
222
|
ADMIN,
|
|
@@ -238,21 +238,21 @@ describe('POST /workflow/change-requests/:n/merge — a failed apply reaches eve
|
|
|
238
238
|
await done;
|
|
239
239
|
// One macrotask: the route's continuation after `mergeChangeRequest` resolves.
|
|
240
240
|
await new Promise((r) => setImmediate(r));
|
|
241
|
-
expect(h.
|
|
242
|
-
expect(h.
|
|
241
|
+
expect(h.versionControl.mergeChangeRequest).toHaveBeenCalledTimes(1);
|
|
242
|
+
expect(h.versionControl.recordApplyFailure).not.toHaveBeenCalled();
|
|
243
243
|
expect(h.emitted.filter((e) => e.kind === 'change-request-merge-failed')).toEqual([]);
|
|
244
244
|
// The attempt ended, so the service holds no entry for it.
|
|
245
|
-
expect(h.
|
|
245
|
+
expect(h.versionControl.endApplyAttempt).toHaveBeenCalledWith(7, 1);
|
|
246
246
|
});
|
|
247
247
|
|
|
248
248
|
it('a failed attempt ends too, after its refusal is recorded', async () => {
|
|
249
249
|
h = await routeHarness(async () => {
|
|
250
|
-
throw new
|
|
250
|
+
throw new VersionControlValidationError('gate says no');
|
|
251
251
|
});
|
|
252
252
|
await post(h.baseUrl);
|
|
253
|
-
await vi.waitFor(() => expect(h!.
|
|
254
|
-
expect(h.
|
|
255
|
-
h.
|
|
253
|
+
await vi.waitFor(() => expect(h!.versionControl.endApplyAttempt).toHaveBeenCalledWith(7, 1));
|
|
254
|
+
expect(h.versionControl.recordApplyFailure.mock.invocationCallOrder[0]).toBeLessThan(
|
|
255
|
+
h.versionControl.endApplyAttempt.mock.invocationCallOrder[0]!,
|
|
256
256
|
);
|
|
257
257
|
});
|
|
258
258
|
|
|
@@ -260,7 +260,7 @@ describe('POST /workflow/change-requests/:n/merge — a failed apply reaches eve
|
|
|
260
260
|
h = await routeHarness(async () => {
|
|
261
261
|
throw new Error('gate says no');
|
|
262
262
|
});
|
|
263
|
-
h.
|
|
263
|
+
h.versionControl.recordApplyFailure.mockRejectedValue(new Error('db down'));
|
|
264
264
|
await post(h.baseUrl);
|
|
265
265
|
await vi.waitFor(() =>
|
|
266
266
|
expect(h!.emitted).toContainEqual(expect.objectContaining({ kind: 'change-request-merge-failed' })),
|
|
@@ -268,7 +268,7 @@ describe('POST /workflow/change-requests/:n/merge — a failed apply reaches eve
|
|
|
268
268
|
});
|
|
269
269
|
});
|
|
270
270
|
|
|
271
|
-
// ──
|
|
271
|
+
// ── VersionControlService.recordApplyFailure ──────────────────────────────────────
|
|
272
272
|
|
|
273
273
|
function updateDb(openRows = 1) {
|
|
274
274
|
const sets: Record<string, unknown>[] = [];
|
|
@@ -370,27 +370,27 @@ const refusal = (kind: 'gate' | 'conflicts' | 'error', at: Date): Partial<Row> =
|
|
|
370
370
|
function service(
|
|
371
371
|
db: Database,
|
|
372
372
|
emit: (e: unknown) => void,
|
|
373
|
-
|
|
373
|
+
changeRequestReview: Partial<IChangeRequestReviewService> = {},
|
|
374
374
|
deps: { git?: Partial<GitService>; prs?: Record<string, unknown> } = {},
|
|
375
375
|
) {
|
|
376
376
|
const prs = { invalidateDetailCache: vi.fn(), ...deps.prs };
|
|
377
|
-
const svc = new
|
|
377
|
+
const svc = new VersionControlService(
|
|
378
378
|
db,
|
|
379
379
|
(deps.git ?? {}) as GitService,
|
|
380
380
|
prs as unknown as PullRequestService,
|
|
381
|
-
|
|
381
|
+
changeRequestReview as IChangeRequestReviewService,
|
|
382
382
|
{} as WorkspaceService,
|
|
383
383
|
{} as IAccessControl,
|
|
384
384
|
{} as FileLockService,
|
|
385
385
|
{} as PendingCommitsService,
|
|
386
386
|
testKbContext(),
|
|
387
387
|
openChangeGate(),
|
|
388
|
-
{ emit } as unknown as
|
|
388
|
+
{ emit } as unknown as VersionControlEventBus,
|
|
389
389
|
);
|
|
390
390
|
return { svc, prs };
|
|
391
391
|
}
|
|
392
392
|
|
|
393
|
-
describe('
|
|
393
|
+
describe('VersionControlService — the persisted apply refusal', () => {
|
|
394
394
|
it('records the reason, evicts the cached lists, and announces it to everyone without the text', async () => {
|
|
395
395
|
const { db, sets } = updateDb();
|
|
396
396
|
const emitted: unknown[] = [];
|
|
@@ -522,7 +522,7 @@ describe('WorkflowService — the persisted apply refusal', () => {
|
|
|
522
522
|
|
|
523
523
|
describe('change-request-apply-failed on the bus', () => {
|
|
524
524
|
it('reaches every session — the author and other viewers, not only the clicker', () => {
|
|
525
|
-
const bus = new
|
|
525
|
+
const bus = new VersionControlEventBus();
|
|
526
526
|
const sub = (sessionId: string, userId: string) => ({
|
|
527
527
|
sessionId,
|
|
528
528
|
userId,
|
|
@@ -544,11 +544,11 @@ describe('change-request-apply-failed on the bus', () => {
|
|
|
544
544
|
|
|
545
545
|
// ── Read back through the summary ───────────────────────────────────────────
|
|
546
546
|
|
|
547
|
-
describe('
|
|
547
|
+
describe('VersionControlService — a refusal clears when a change makes it obsolete', () => {
|
|
548
548
|
const approveArgs = [7, 'Plugins/x/SKILL.md', ADMIN, [], 'h', 'main', null, 'ws'] as const;
|
|
549
549
|
const EARLIER = new Date(Date.now() - 60_000);
|
|
550
550
|
|
|
551
|
-
/** A gate-bound markdown file's approval state, as the review
|
|
551
|
+
/** A gate-bound markdown file's approval state, as the change-request review returns it. */
|
|
552
552
|
const fileState = (path: string, isApproved: boolean): FileApprovalState => ({
|
|
553
553
|
path,
|
|
554
554
|
eligibleApprovers: { roles: ['Plugin owners'], users: [] },
|
|
@@ -571,7 +571,7 @@ describe('WorkflowService — a refusal clears when a change makes it obsolete',
|
|
|
571
571
|
return approvalsAfter;
|
|
572
572
|
}),
|
|
573
573
|
// The real gate: whether an approval answers the refusal is its verdict.
|
|
574
|
-
evaluateMergeGate: (input) =>
|
|
574
|
+
evaluateMergeGate: (input) => ChangeRequestReviewService.prototype.evaluateMergeGate.call({}, input),
|
|
575
575
|
});
|
|
576
576
|
return { ...store, svc, prs, emitted };
|
|
577
577
|
}
|
|
@@ -695,7 +695,7 @@ describe('WorkflowService — a refusal clears when a change makes it obsolete',
|
|
|
695
695
|
} as unknown as Database;
|
|
696
696
|
const { svc } = service(db, () => {}, {
|
|
697
697
|
approveFile: vi.fn(async () => ALL_APPROVED),
|
|
698
|
-
evaluateMergeGate: (input) =>
|
|
698
|
+
evaluateMergeGate: (input) => ChangeRequestReviewService.prototype.evaluateMergeGate.call({}, input),
|
|
699
699
|
});
|
|
700
700
|
await expect(svc.approveFile(...approveArgs)).resolves.toEqual(ALL_APPROVED);
|
|
701
701
|
});
|
|
@@ -839,7 +839,7 @@ describe('GET change requests — the refusal reason reaches only viewers who ca
|
|
|
839
839
|
touchedNodePaths: opts.touchedNodePaths ?? CR.touchedNodePaths,
|
|
840
840
|
lastApplyFailure: { ...FAILURE },
|
|
841
841
|
};
|
|
842
|
-
const
|
|
842
|
+
const versionControl = {
|
|
843
843
|
listChangeRequests: vi.fn(async () => [cached]),
|
|
844
844
|
listChangeRequestsAuthoredBy: vi.fn(async () => [cached]),
|
|
845
845
|
listChangeRequestsForUser: vi.fn(async () => [cached]),
|
|
@@ -855,11 +855,11 @@ describe('GET change requests — the refusal reason reaches only viewers who ca
|
|
|
855
855
|
});
|
|
856
856
|
app.use(
|
|
857
857
|
'/api',
|
|
858
|
-
|
|
859
|
-
|
|
858
|
+
createVersionControlRoutes(
|
|
859
|
+
versionControl as unknown as IVersionControlService,
|
|
860
860
|
{ getOrCreateForUser: vi.fn(async () => ({ id: 'ws-bo' })) } as unknown as WorkspaceService,
|
|
861
861
|
{ getUserById: vi.fn(async () => BO) } as unknown as AuthService,
|
|
862
|
-
{ emit: () => {} } as unknown as
|
|
862
|
+
{ emit: () => {} } as unknown as VersionControlEventBus,
|
|
863
863
|
{ canReadBatch } as unknown as IAccessControl,
|
|
864
864
|
'knowledge-base',
|
|
865
865
|
),
|
|
@@ -1043,7 +1043,7 @@ describe('migration 0009 — refusals recorded before the kind existed are class
|
|
|
1043
1043
|
|
|
1044
1044
|
it("the prefix it matches is the one the merge gate's refusal actually carries", () => {
|
|
1045
1045
|
const gateSource = readFileSync(
|
|
1046
|
-
path.join(coreMigrationsDir(), '..', 'src/modules/
|
|
1046
|
+
path.join(coreMigrationsDir(), '..', 'src/modules/version-control/change-request-review/change-request-review.service.ts'),
|
|
1047
1047
|
'utf8',
|
|
1048
1048
|
);
|
|
1049
1049
|
const prefix = /LIKE '([^%']*)%' THEN 'gate'/.exec(migration)![1]!;
|