@bevel-software/platform-core-backend 0.35.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-guide/directory-structure.md +1 -1
- package/agent-guide/onboarding.md +111 -0
- package/agent-guide/start-here.md +1 -0
- package/agent-guide/tool-manuals.md +1 -0
- package/dist/core/catalog-cache-invalidation.d.ts +2 -2
- package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
- package/dist/core/compose-embed.d.ts +2 -2
- package/dist/core/compose-embed.d.ts.map +1 -1
- package/dist/core/compose-embed.js +1 -1
- package/dist/core/compose-embed.js.map +1 -1
- package/dist/core/core-ports.d.ts +19 -4
- package/dist/core/core-ports.d.ts.map +1 -1
- package/dist/core/core-ports.js.map +1 -1
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +26 -24
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +19 -13
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +72 -57
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +4 -4
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +5 -5
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core-config.d.ts +2 -2
- package/dist/core-config.js +3 -3
- package/dist/core-config.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.service.js +1 -1
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access-declarations.d.ts +2 -2
- package/dist/modules/access/access-declarations.d.ts.map +1 -1
- package/dist/modules/access/access-declarations.js +2 -2
- package/dist/modules/access/access-declarations.js.map +1 -1
- package/dist/modules/access/access-mutation.service.d.ts +2 -2
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
- package/dist/modules/access/access-mutation.service.js +2 -2
- package/dist/modules/access/access-mutation.service.js.map +1 -1
- package/dist/modules/access/access-requests.routes.d.ts +2 -2
- package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
- package/dist/modules/access/access-requests.routes.js +5 -5
- package/dist/modules/access/access-requests.routes.js.map +1 -1
- package/dist/modules/access/access-requests.service.d.ts +2 -2
- package/dist/modules/access/access-requests.service.d.ts.map +1 -1
- package/dist/modules/access/access-requests.service.js +11 -11
- package/dist/modules/access/access-requests.service.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts +2 -2
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +9 -9
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/admin-locked-commit.d.ts +5 -5
- package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
- package/dist/modules/access/admin-locked-commit.js +7 -7
- package/dist/modules/access/admin-locked-commit.js.map +1 -1
- package/dist/modules/access/admin-route-helpers.d.ts +1 -1
- package/dist/modules/access/admin-route-helpers.js +5 -5
- package/dist/modules/access/admin-route-helpers.js.map +1 -1
- package/dist/modules/access/change-read-gate.d.ts +1 -1
- package/dist/modules/access/change-read-gate.js +1 -1
- package/dist/modules/access/groups-admin.service.d.ts +7 -7
- package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.service.js +6 -6
- package/dist/modules/access/groups-admin.service.js.map +1 -1
- package/dist/modules/access/reference-scan.d.ts +1 -1
- package/dist/modules/access/roles-admin.service.d.ts +7 -7
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
- package/dist/modules/access/roles-admin.service.js +8 -8
- package/dist/modules/access/roles-admin.service.js.map +1 -1
- package/dist/modules/access/synced-groups-committer.d.ts +4 -4
- package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-committer.js +7 -7
- package/dist/modules/access/synced-groups-committer.js.map +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts +6 -6
- package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
- package/dist/modules/access/user-access-removal.service.js +4 -4
- package/dist/modules/access/user-access-removal.service.js.map +1 -1
- package/dist/modules/access-model/access-errors.d.ts +4 -4
- package/dist/modules/access-model/access-errors.d.ts.map +1 -1
- package/dist/modules/access-model/access-errors.js +4 -4
- package/dist/modules/access-model/access-errors.js.map +1 -1
- package/dist/modules/access-model/access-grammar.d.ts +1 -1
- package/dist/modules/access-model/access-grammar.js +4 -4
- package/dist/modules/access-model/change-gate.d.ts +1 -1
- package/dist/modules/access-model/change-gate.js +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts +4 -4
- package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.js +4 -4
- package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.d.ts +19 -14
- package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.js +42 -18
- package/dist/modules/agent-guide/agent-guide.js.map +1 -1
- package/dist/modules/agent-guide/guide-budget.d.ts +5 -2
- package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -1
- package/dist/modules/agent-guide/guide-budget.js +6 -2
- package/dist/modules/agent-guide/guide-budget.js.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +12 -5
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.js +13 -6
- package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
- package/dist/modules/agent-instructions/compose.d.ts +15 -8
- package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
- package/dist/modules/agent-instructions/compose.js +24 -10
- package/dist/modules/agent-instructions/compose.js.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.d.ts +14 -6
- package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.js +51 -11
- package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
- package/dist/modules/auth/account-erasure.service.d.ts +36 -7
- package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
- package/dist/modules/auth/account-erasure.service.js +30 -10
- package/dist/modules/auth/account-erasure.service.js.map +1 -1
- package/dist/modules/auth/account-hooks.d.ts +20 -0
- package/dist/modules/auth/account-hooks.d.ts.map +1 -1
- package/dist/modules/auth/account-hooks.js +10 -0
- package/dist/modules/auth/account-hooks.js.map +1 -1
- package/dist/modules/auth/account-switch-lock.js +2 -2
- package/dist/modules/auth/account-switch-lock.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts +7 -2
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +23 -4
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +1 -1
- package/dist/modules/auth/auth.service.js +4 -4
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/index.d.ts +1 -0
- package/dist/modules/auth/index.d.ts.map +1 -1
- package/dist/modules/database/connection.d.ts.map +1 -1
- package/dist/modules/database/connection.js +11 -0
- package/dist/modules/database/connection.js.map +1 -1
- package/dist/modules/database/core-schema.js +2 -2
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/diff/diff.routes.d.ts +3 -3
- package/dist/modules/diff/diff.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.js +7 -7
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/embed/embed.routes.js +1 -1
- package/dist/modules/embed/embed.routes.js.map +1 -1
- package/dist/modules/embed/embed.service.d.ts +4 -4
- package/dist/modules/embed/embed.service.d.ts.map +1 -1
- package/dist/modules/embed/embed.service.js +18 -18
- package/dist/modules/embed/embed.service.js.map +1 -1
- package/dist/modules/kb-fs/branch-name.js +8 -8
- package/dist/modules/kb-fs/branch-name.js.map +1 -1
- package/dist/modules/kb-fs/file-change-notifier.d.ts +51 -26
- package/dist/modules/kb-fs/file-change-notifier.d.ts.map +1 -1
- package/dist/modules/kb-fs/file-change-notifier.js +6 -8
- package/dist/modules/kb-fs/file-change-notifier.js.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -16
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +31 -39
- package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/repo-path.js +5 -5
- package/dist/modules/kb-fs/repo-path.js.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
- package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.js +2 -2
- package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
- package/dist/modules/kb-sync/index.d.ts +1 -1
- package/dist/modules/kb-sync/index.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js +10 -10
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +11 -4
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +75 -19
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
- package/dist/modules/onboarding/onboarding.routes.js +2 -2
- package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.d.ts +5 -7
- package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.js +4 -4
- package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.js +7 -7
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
- package/dist/modules/plugins/join-requests.service.d.ts +3 -3
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +5 -5
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.js +1 -1
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +2 -2
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +8 -8
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +77 -2
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js +479 -53
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +2 -1
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js +1 -0
- package/dist/modules/secrets-vault/index.js.map +1 -1
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +152 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +125 -10
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
- package/dist/modules/settings/connection-check.js +1 -1
- package/dist/modules/settings/connection-check.js.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +1 -1
- package/dist/modules/settings/git-root-folders.js +1 -1
- package/dist/modules/settings/git-root-folders.js.map +1 -1
- package/dist/modules/settings/setup.routes.d.ts +1 -1
- package/dist/modules/settings/setup.routes.js +1 -1
- package/dist/modules/skills/pending-skills.service.d.ts +3 -3
- package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
- package/dist/modules/skills/pending-skills.service.js +4 -4
- package/dist/modules/skills/pending-skills.service.js.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +5 -5
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
- package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +2 -2
- package/dist/modules/tool-helpers/tool-context.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +2 -2
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
- package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
- package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +43 -3
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +6 -0
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +51 -5
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -0
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +36 -15
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
- package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
- package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +31 -31
- package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
- package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
- package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-hooks.js.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
- package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
- package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
- package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
- package/dist/modules/version-control/event-bus.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
- package/dist/modules/version-control/event-bus.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
- package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
- package/dist/modules/version-control/events-delivery.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
- package/dist/modules/version-control/events.routes.d.ts.map +1 -0
- package/dist/modules/version-control/events.routes.js.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
- package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
- package/dist/modules/version-control/file-lock.service.js.map +1 -0
- package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
- package/dist/modules/version-control/git/change-request-link.js.map +1 -0
- package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
- package/dist/modules/version-control/git/git-version.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.d.ts +26 -8
- package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.js +106 -55
- package/dist/modules/version-control/git/git.service.js.map +1 -0
- package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
- package/dist/modules/version-control/git/merge-commit.js.map +1 -0
- package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
- package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
- package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
- package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
- package/dist/modules/version-control/index.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/index.js +3 -2
- package/dist/modules/version-control/index.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
- package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
- package/dist/modules/version-control/pending-commits.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
- package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
- package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
- package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
- package/dist/modules/version-control/read-on-branch.js.map +1 -0
- package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
- package/dist/modules/version-control/recovery-bot.js.map +1 -0
- package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
- package/dist/modules/version-control/sanitize-error.js.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +33 -6
- package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +20 -3
- package/dist/modules/version-control/version-control-hooks.js.map +1 -0
- package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
- package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
- package/dist/modules/version-control/version-control.routes.js.map +1 -0
- package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -46
- package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +93 -107
- package/dist/modules/version-control/version-control.service.js.map +1 -0
- package/dist/modules/workspace/agent-access.gate.d.ts +5 -5
- package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
- package/dist/modules/workspace/agent-access.gate.js +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
- package/dist/modules/workspace/git-internals.middleware.js +2 -2
- package/dist/modules/workspace/kb-repository.js +1 -1
- package/dist/modules/workspace/kb-repository.js.map +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-git.js +1 -1
- package/dist/modules/workspace/startup/kb-git.js.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
- package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.js +8 -5
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
- package/dist/modules/workspace/workspace-tmp.js +3 -3
- package/dist/modules/workspace/workspace-tmp.js.map +1 -1
- package/dist/modules/workspace/workspace.routes.d.ts +4 -4
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +22 -22
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +6 -6
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +11 -11
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +2 -1
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +15 -10
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/shared/canonical-file-identity.d.ts +2 -2
- package/dist/shared/canonical-file-identity.js +5 -5
- package/dist/shared/canonical-file-identity.js.map +1 -1
- package/dist/shared/domain-errors.d.ts +39 -39
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +44 -44
- package/dist/shared/domain-errors.js.map +1 -1
- package/dist/shared/fire-and-forget.d.ts +14 -0
- package/dist/shared/fire-and-forget.d.ts.map +1 -0
- package/dist/shared/fire-and-forget.js +23 -0
- package/dist/shared/fire-and-forget.js.map +1 -0
- package/dist/shared/git.contract.d.ts +1 -1
- package/dist/shared/git.contract.js +1 -1
- package/dist/shared/http-errors.d.ts +3 -3
- package/dist/shared/http-errors.d.ts.map +1 -1
- package/dist/shared/http-errors.js +1 -1
- package/dist/shared/http-errors.js.map +1 -1
- package/dist/shared/pending-proposals.d.ts +3 -3
- package/dist/shared/pending-proposals.d.ts.map +1 -1
- package/dist/shared/pending-proposals.js +2 -2
- package/dist/shared/pending-proposals.js.map +1 -1
- package/dist/tenancy/static-tenant-source.js +1 -1
- package/dist/tenancy/static-tenant-source.js.map +1 -1
- package/migrations/0012_agent_audit.sql +40 -40
- package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
- package/migrations/meta/0012_snapshot.json +2246 -2246
- package/migrations/meta/0013_snapshot.json +2258 -2258
- package/package.json +4 -4
- package/src/__tests__/account-admin.ts +27 -0
- package/src/__tests__/capturing-logger.ts +36 -0
- package/src/__tests__/hexis-catalog.ts +4 -4
- package/src/__tests__/kb-context.ts +30 -30
- package/src/__tests__/kb-layout-config.test.ts +21 -0
- package/src/__tests__/open-change-gate.ts +1 -1
- package/src/__tests__/real-access.ts +16 -0
- package/src/__tests__/real-auth.ts +13 -0
- package/src/__tests__/real-readers.ts +27 -0
- package/src/__tests__/real-version-control.ts +22 -0
- package/src/__tests__/tool-handler.ts +15 -0
- package/src/__tests__/tool-wiring.ts +10 -4
- package/src/__tests__/workspace-service.ts +1 -1
- package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
- package/src/core/__tests__/commit-announcements-wired-once.test.ts +53 -0
- package/src/core/__tests__/compose-embed.test.ts +1 -1
- package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
- package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
- package/src/core/__tests__/gated-boot.test.ts +2 -2
- package/src/core/__tests__/lifecycle.test.ts +9 -9
- package/src/core/catalog-cache-invalidation.ts +2 -2
- package/src/core/compose-embed.ts +3 -3
- package/src/core/core-ports.ts +19 -4
- package/src/core/create-core-server.ts +39 -25
- package/src/core/create-core-services.ts +83 -65
- package/src/core/lifecycle.ts +9 -9
- package/src/core-config.ts +3 -3
- package/src/index.ts +5 -5
- package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
- package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
- package/src/modules/access/__tests__/access-requests.routes.test.ts +23 -23
- package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
- package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +3 -3
- package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
- package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
- package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
- package/src/modules/access/__tests__/groups-admin.service.test.ts +44 -44
- package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
- package/src/modules/access/__tests__/roles-admin.service.test.ts +34 -34
- package/src/modules/access/__tests__/roles-capabilities.test.ts +29 -29
- package/src/modules/access/__tests__/roles.routes.test.ts +11 -11
- package/src/modules/access/__tests__/synced-groups-committer.test.ts +14 -14
- package/src/modules/access/__tests__/user-access-removal.service.test.ts +33 -33
- package/src/modules/access/access-control.service.ts +1 -1
- package/src/modules/access/access-declarations.ts +2 -2
- package/src/modules/access/access-mutation.service.ts +2 -2
- package/src/modules/access/access-requests.routes.ts +7 -7
- package/src/modules/access/access-requests.service.ts +13 -13
- package/src/modules/access/access.routes.ts +11 -11
- package/src/modules/access/admin-locked-commit.ts +11 -11
- package/src/modules/access/admin-route-helpers.ts +5 -5
- package/src/modules/access/change-read-gate.ts +1 -1
- package/src/modules/access/groups-admin.service.ts +7 -7
- package/src/modules/access/reference-scan.ts +1 -1
- package/src/modules/access/roles-admin.service.ts +9 -9
- package/src/modules/access/synced-groups-committer.ts +11 -11
- package/src/modules/access/user-access-removal.service.ts +7 -7
- package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
- package/src/modules/access-model/access-errors.ts +4 -4
- package/src/modules/access-model/access-grammar.ts +4 -4
- package/src/modules/access-model/change-gate.ts +1 -1
- package/src/modules/access-model/roles-yaml-guard.ts +4 -4
- package/src/modules/agent-guide/__tests__/agent-guide.test.ts +19 -4
- package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +1 -1
- package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +2 -2
- package/src/modules/agent-guide/agent-guide.ts +48 -22
- package/src/modules/agent-guide/guide-budget.ts +6 -2
- package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
- package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
- package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +113 -7
- package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
- package/src/modules/agent-instructions/compose.ts +24 -9
- package/src/modules/agent-instructions/shared-file-rules.ts +53 -11
- package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
- package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
- package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
- package/src/modules/audit/event-classifier.ts +155 -155
- package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
- package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
- package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
- package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
- package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
- package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
- package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
- package/src/modules/auth/account-erasure.service.ts +27 -9
- package/src/modules/auth/account-hooks.ts +34 -0
- package/src/modules/auth/account-switch-lock.ts +2 -2
- package/src/modules/auth/account.routes.ts +23 -5
- package/src/modules/auth/auth.service.ts +4 -4
- package/src/modules/auth/index.ts +1 -0
- package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
- package/src/modules/database/__tests__/connection.pg.test.ts +55 -0
- package/src/modules/database/__tests__/connection.test.ts +30 -0
- package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
- package/src/modules/database/connection.ts +12 -0
- package/src/modules/database/core-schema.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
- package/src/modules/diff/diff.routes.ts +8 -8
- package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
- package/src/modules/embed/__tests__/embed.service.test.ts +48 -62
- package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
- package/src/modules/embed/embed.routes.ts +1 -1
- package/src/modules/embed/embed.service.ts +17 -17
- package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
- package/src/modules/kb-fs/__tests__/file-change-notifier.test.ts +23 -4
- package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +264 -305
- package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +103 -40
- package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
- package/src/modules/kb-fs/branch-name.ts +8 -8
- package/src/modules/kb-fs/file-change-notifier.ts +55 -32
- package/src/modules/kb-fs/locking-filesystem.ts +34 -48
- package/src/modules/kb-fs/repo-path.ts +5 -5
- package/src/modules/kb-fs/tmp-ref.ts +3 -3
- package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
- package/src/modules/kb-sync/index.ts +1 -1
- package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
- package/src/modules/kb-sync/kb-sync.service.ts +9 -9
- package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
- package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
- package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
- package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
- package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
- package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
- package/src/modules/mcp/mcp.service.ts +89 -28
- package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +59 -59
- package/src/modules/onboarding/onboarding.contract.ts +1 -1
- package/src/modules/onboarding/onboarding.routes.ts +2 -2
- package/src/modules/onboarding/starter-pack.service.ts +7 -9
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
- package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
- package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
- package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
- package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
- package/src/modules/plugins/__tests__/plugin-rename.service.test.ts +46 -21
- package/src/modules/plugins/__tests__/plugins.routes.test.ts +31 -31
- package/src/modules/plugins/join-request-jobs.service.ts +10 -10
- package/src/modules/plugins/join-requests.service.ts +4 -4
- package/src/modules/plugins/plugin-rename.service.ts +1 -1
- package/src/modules/plugins/plugins.routes.ts +9 -9
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +28 -1
- package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +562 -95
- package/src/modules/secrets-vault/index.ts +7 -0
- package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
- package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
- package/src/modules/secrets-vault/secrets-vault.contract.ts +152 -0
- package/src/modules/secrets-vault/secrets-vault.routes.ts +157 -10
- package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
- package/src/modules/settings/connection-check.ts +1 -1
- package/src/modules/settings/deployment-settings.service.ts +1 -1
- package/src/modules/settings/git-root-folders.ts +1 -1
- package/src/modules/settings/setup.routes.ts +1 -1
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
- package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
- package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
- package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
- package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
- package/src/modules/skills/pending-skills.service.ts +3 -3
- package/src/modules/skills/skill-access-requests.routes.ts +7 -7
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +4 -4
- package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
- package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
- package/src/modules/tool-helpers/tool-context.ts +6 -6
- package/src/modules/tool-helpers/tool-handler.ts +2 -2
- package/src/modules/tool-helpers/tool.contract.ts +4 -4
- package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
- package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +36 -1
- package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
- package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
- package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
- package/src/modules/tool-manuals/tool-manuals.contract.ts +41 -3
- package/src/modules/tool-manuals/tool-manuals.service.ts +53 -5
- package/src/modules/tool-manuals/tool-manuals.tools.ts +41 -15
- package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
- package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
- package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +6 -6
- package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
- package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
- package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
- package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
- package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
- package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
- package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.fork-point-file.test.ts → version-control/__tests__/version-control.routes.fork-point-file.test.ts} +19 -19
- package/src/modules/{workflow/__tests__/workflow.routes.history-read-gate.test.ts → version-control/__tests__/version-control.routes.history-read-gate.test.ts} +13 -13
- package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.open-change-request.test.ts → version-control/__tests__/version-control.routes.open-change-request.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.branch-in-use.test.ts → version-control/__tests__/version-control.service.branch-in-use.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts → version-control/__tests__/version-control.service.deleted-branch-sweep.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +100 -102
- package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
- package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +85 -75
- package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.pg.test.ts → version-control/__tests__/version-control.service.update-change-request.pg.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.test.ts → version-control/__tests__/version-control.service.update-change-request.test.ts} +11 -11
- package/src/modules/{workflow/__tests__/workflow.service.update-from-target.test.ts → version-control/__tests__/version-control.service.update-from-target.test.ts} +22 -22
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
- package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
- package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
- package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +30 -30
- package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
- package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
- package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
- package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
- package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
- package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
- package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
- package/src/modules/version-control/git/__tests__/git.service.commitLanded.test.ts +199 -0
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +99 -22
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/git.service.ts +112 -59
- package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
- package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
- package/src/modules/{workflow → version-control}/index.ts +6 -5
- package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
- package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
- package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
- package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +44 -5
- package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
- package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +96 -109
- package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
- package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
- package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
- package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
- package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
- package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
- package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
- package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
- package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +5 -5
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +27 -27
- package/src/modules/workspace/agent-access.gate.ts +5 -5
- package/src/modules/workspace/git-internals.middleware.ts +2 -2
- package/src/modules/workspace/kb-repository.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
- package/src/modules/workspace/startup/kb-git.ts +1 -1
- package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
- package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
- package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
- package/src/modules/workspace/startup/steps/template-source.ts +21 -6
- package/src/modules/workspace/workspace-tmp.ts +4 -4
- package/src/modules/workspace/workspace.routes.ts +26 -26
- package/src/modules/workspace/workspace.service.ts +11 -11
- package/src/modules/workspace/workspace.tools.ts +17 -10
- package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
- package/src/shared/__tests__/fire-and-forget.test.ts +39 -0
- package/src/shared/__tests__/http-errors.test.ts +4 -4
- package/src/shared/canonical-file-identity.ts +5 -5
- package/src/shared/domain-errors.ts +44 -44
- package/src/shared/fire-and-forget.ts +26 -0
- package/src/shared/git.contract.ts +1 -1
- package/src/shared/http-errors.ts +3 -3
- package/src/shared/kb-context.ts +130 -130
- package/src/shared/pending-proposals.ts +4 -4
- package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
- package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
- package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
- package/src/tenancy/index.ts +35 -35
- package/src/tenancy/static-tenant-source.ts +1 -1
- package/src/tenancy/tenant-host.ts +261 -261
- package/src/tenancy/tenant-runtime.ts +208 -208
- package/src/tenancy/tenant-source.contract.ts +59 -59
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
- package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/change-request-hooks.js.map +0 -1
- package/dist/modules/workflow/event-bus.d.ts.map +0 -1
- package/dist/modules/workflow/event-bus.js.map +0 -1
- package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
- package/dist/modules/workflow/events-delivery.js.map +0 -1
- package/dist/modules/workflow/events.routes.d.ts.map +0 -1
- package/dist/modules/workflow/events.routes.js.map +0 -1
- package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
- package/dist/modules/workflow/file-lock.service.js.map +0 -1
- package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
- package/dist/modules/workflow/git/change-request-link.js.map +0 -1
- package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
- package/dist/modules/workflow/git/git-version.js.map +0 -1
- package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/git.service.js.map +0 -1
- package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
- package/dist/modules/workflow/git/merge-commit.js.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
- package/dist/modules/workflow/index.d.ts.map +0 -1
- package/dist/modules/workflow/index.js.map +0 -1
- package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.service.js.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
- package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
- package/dist/modules/workflow/read-on-branch.js.map +0 -1
- package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
- package/dist/modules/workflow/recovery-bot.js.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
- package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
- package/dist/modules/workflow/sanitize-error.js.map +0 -1
- package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/workflow-hooks.js.map +0 -1
- package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.routes.js.map +0 -1
- package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.service.js.map +0 -1
- package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
- /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
- /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
- /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
- /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
- /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
- /package/src/modules/{workflow → version-control}/sanitize-error.ts +0 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bevel-software/platform-core-backend",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Open-source core backend of the Bevel platform: git-backed knowledge workspace,
|
|
3
|
+
"version": "0.37.0",
|
|
4
|
+
"description": "Open-source core backend of the Bevel platform: git-backed knowledge workspace, version control (branches/change requests/locks/SSE), skills, tools, secrets vault, access control and the remote MCP surface.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -55,8 +55,8 @@
|
|
|
55
55
|
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz",
|
|
56
56
|
"yaml": "^2.9.0",
|
|
57
57
|
"zod": "^3.24.0",
|
|
58
|
-
"@bevel-software/platform-mcp-core": "0.
|
|
59
|
-
"@bevel-software/platform-shared": "0.
|
|
58
|
+
"@bevel-software/platform-mcp-core": "0.37.0",
|
|
59
|
+
"@bevel-software/platform-shared": "0.37.0"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@types/adm-zip": "^0.5.8",
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type express from 'express';
|
|
2
|
+
import { AdminAccessService } from '../modules/admin/admin-access.service.js';
|
|
3
|
+
import { createAccountRoutes } from '../modules/auth/account.routes.js';
|
|
4
|
+
import type { IAccessControl } from '../modules/access/index.js';
|
|
5
|
+
import type { WorkspaceService } from '../modules/workspace/index.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The deployment admin check and the account admin routes, composed the way
|
|
9
|
+
* the composition root composes them (`core/create-core-services.ts` and
|
|
10
|
+
* `core/create-core-server.ts`). A module's suite that drives those routes
|
|
11
|
+
* end to end takes them from HERE rather than constructing another module's
|
|
12
|
+
* implementation itself: the admin and auth entries hold their contracts,
|
|
13
|
+
* and the classes and routers behind them are the root's to wire — as
|
|
14
|
+
* `real-disk.ts` stands in for the root for the filesystem.
|
|
15
|
+
*/
|
|
16
|
+
export function realAdminAccess(
|
|
17
|
+
access: IAccessControl,
|
|
18
|
+
workspace: WorkspaceService,
|
|
19
|
+
defaultBranch: string,
|
|
20
|
+
owners: string[],
|
|
21
|
+
): AdminAccessService {
|
|
22
|
+
return new AdminAccessService(access, workspace, defaultBranch, owners);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function realAccountRoutes(...args: Parameters<typeof createAccountRoutes>): express.Router {
|
|
26
|
+
return createAccountRoutes(...args);
|
|
27
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ILogger, LogFields } from '../shared/logger.contract.js';
|
|
2
|
+
|
|
3
|
+
/** One line a capturing logger kept: its level, message, and fields with the child bindings folded in. */
|
|
4
|
+
export interface CapturedLine {
|
|
5
|
+
level: 'debug' | 'info' | 'warn' | 'error';
|
|
6
|
+
message: string;
|
|
7
|
+
fields: LogFields;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A logger that keeps every line instead of printing it — the one capturing
|
|
12
|
+
* implementation a suite installs through `setLogger` (restoring the previous
|
|
13
|
+
* one in `finally`) or hands to code that takes an `ILogger`, when what is
|
|
14
|
+
* logged is the behaviour under test. Children fold their bindings into each
|
|
15
|
+
* line's fields, so `module: 'database'` is asserted like any other field.
|
|
16
|
+
*/
|
|
17
|
+
export function capturingLogger(): { logger: ILogger; lines: CapturedLine[] } {
|
|
18
|
+
const lines: CapturedLine[] = [];
|
|
19
|
+
const make = (bindings: LogFields): ILogger => {
|
|
20
|
+
const line = (level: CapturedLine['level']) => (message: string, fields: LogFields = {}) => {
|
|
21
|
+
// Like the production sink, the child's `module` is the logger's own and
|
|
22
|
+
// a call cannot rename it; every other field a call passes wins.
|
|
23
|
+
const folded: LogFields = { ...bindings, ...fields };
|
|
24
|
+
if (bindings.module !== undefined) folded.module = bindings.module;
|
|
25
|
+
lines.push({ level, message, fields: folded });
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
debug: line('debug'),
|
|
29
|
+
info: line('info'),
|
|
30
|
+
warn: line('warn'),
|
|
31
|
+
error: line('error'),
|
|
32
|
+
child: (more) => make({ ...bindings, ...more }),
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
return { logger: make({}), lines };
|
|
36
|
+
}
|
|
@@ -11,11 +11,11 @@ import { agentGuideSections, registerAgentGuideTool } from '../modules/agent-gui
|
|
|
11
11
|
import {
|
|
12
12
|
RoutineWritePolicyService,
|
|
13
13
|
UuidSessionSink,
|
|
14
|
-
|
|
14
|
+
VersionControlHooks,
|
|
15
15
|
createToolHandlerFactory,
|
|
16
16
|
registerChangeRequestReadTools,
|
|
17
17
|
registerEmbedTools,
|
|
18
|
-
|
|
18
|
+
registerVersionControlTools,
|
|
19
19
|
registerWorkspaceTools,
|
|
20
20
|
} from './tool-wiring.js';
|
|
21
21
|
|
|
@@ -72,7 +72,7 @@ export async function hexisCatalog(
|
|
|
72
72
|
const toolAuth = ((_req, _res, next) => next()) as unknown as ToolAuth;
|
|
73
73
|
const toolHandler = createToolHandlerFactory(unused());
|
|
74
74
|
const kb = testKbContext();
|
|
75
|
-
const gate = { recoveryBotEmail: 'bot@x', hooks: new
|
|
75
|
+
const gate = { recoveryBotEmail: 'bot@x', hooks: new VersionControlHooks(), notes: new ToolDescriptionNotes() };
|
|
76
76
|
|
|
77
77
|
// The change-request readers come first, as the root mounts them: they
|
|
78
78
|
// gate their whole payload on the caller's read access and take the access
|
|
@@ -106,7 +106,7 @@ export async function hexisCatalog(
|
|
|
106
106
|
undefined,
|
|
107
107
|
new RipgrepPatternMatcher(),
|
|
108
108
|
);
|
|
109
|
-
|
|
109
|
+
registerVersionControlTools(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);
|
|
110
110
|
registerPluginsTools(registry, kb);
|
|
111
111
|
registerSkillsTools(registry, router, toolAuth, toolHandler, skills);
|
|
112
112
|
registerToolManualsTools(registry, router, toolAuth, toolHandler, emptyManuals, {
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DEFAULT_KB_LAYOUT,
|
|
3
|
-
resolveBranchModel,
|
|
4
|
-
type BranchModel,
|
|
5
|
-
type KbLayout,
|
|
6
|
-
} from '@bevel-software/platform-shared';
|
|
7
|
-
import { KbContext } from '../shared/kb-context.js';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* The knowledge-base context suites hand to the services they construct: the
|
|
11
|
-
* historical two-branch pair `vitest.config.ts` pins (and `test-setup.ts`
|
|
12
|
-
* mirrors onto the shared bindings, for the fixtures that still spell a
|
|
13
|
-
* branch by its binding), the default layout, and `knowledge-base` as the
|
|
14
|
-
* checkout folder. Override any part for a suite that needs another.
|
|
15
|
-
*/
|
|
16
|
-
export const TEST_BRANCH_MODEL: BranchModel = {
|
|
17
|
-
defaultBranch: 'target-company-state',
|
|
18
|
-
protectedBranches: ['current-company-state', 'target-company-state'],
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
export function testKbContext(
|
|
22
|
-
overrides: { kbDirName?: string; branchModel?: BranchModel | null; layout?: KbLayout } = {},
|
|
23
|
-
): KbContext {
|
|
24
|
-
const model = overrides.branchModel === undefined ? TEST_BRANCH_MODEL : overrides.branchModel;
|
|
25
|
-
return new KbContext(
|
|
26
|
-
overrides.kbDirName ?? 'knowledge-base',
|
|
27
|
-
model === null ? KbContext.branchModelOrUnconfigured({ defaultBranch: '', protectedBranches: [] }) : resolveBranchModel(model),
|
|
28
|
-
overrides.layout ?? DEFAULT_KB_LAYOUT,
|
|
29
|
-
);
|
|
30
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
DEFAULT_KB_LAYOUT,
|
|
3
|
+
resolveBranchModel,
|
|
4
|
+
type BranchModel,
|
|
5
|
+
type KbLayout,
|
|
6
|
+
} from '@bevel-software/platform-shared';
|
|
7
|
+
import { KbContext } from '../shared/kb-context.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The knowledge-base context suites hand to the services they construct: the
|
|
11
|
+
* historical two-branch pair `vitest.config.ts` pins (and `test-setup.ts`
|
|
12
|
+
* mirrors onto the shared bindings, for the fixtures that still spell a
|
|
13
|
+
* branch by its binding), the default layout, and `knowledge-base` as the
|
|
14
|
+
* checkout folder. Override any part for a suite that needs another.
|
|
15
|
+
*/
|
|
16
|
+
export const TEST_BRANCH_MODEL: BranchModel = {
|
|
17
|
+
defaultBranch: 'target-company-state',
|
|
18
|
+
protectedBranches: ['current-company-state', 'target-company-state'],
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export function testKbContext(
|
|
22
|
+
overrides: { kbDirName?: string; branchModel?: BranchModel | null; layout?: KbLayout } = {},
|
|
23
|
+
): KbContext {
|
|
24
|
+
const model = overrides.branchModel === undefined ? TEST_BRANCH_MODEL : overrides.branchModel;
|
|
25
|
+
return new KbContext(
|
|
26
|
+
overrides.kbDirName ?? 'knowledge-base',
|
|
27
|
+
model === null ? KbContext.branchModelOrUnconfigured({ defaultBranch: '', protectedBranches: [] }) : resolveBranchModel(model),
|
|
28
|
+
overrides.layout ?? DEFAULT_KB_LAYOUT,
|
|
29
|
+
);
|
|
30
|
+
}
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
validateKbLayout,
|
|
17
17
|
validateKbRootName,
|
|
18
18
|
normalizeSkillRoot,
|
|
19
|
+
WORKFLOWS_DIR,
|
|
19
20
|
type KbLayout,
|
|
20
21
|
} from '@bevel-software/platform-shared';
|
|
21
22
|
|
|
@@ -71,6 +72,26 @@ describe('KB layout — validation', () => {
|
|
|
71
72
|
).toMatch(/reserved folder name/);
|
|
72
73
|
});
|
|
73
74
|
|
|
75
|
+
test('reserves Data, Agents and Workflows, in any letter case, and names them in the refusal', () => {
|
|
76
|
+
for (const name of ['Data', 'agents', 'Workflows', 'WORKFLOWS']) {
|
|
77
|
+
expect(
|
|
78
|
+
validateKbLayout({ knowledgeBaseDir: 'KnowledgeBase', skillsDir: name, pluginsDir: 'Plugins' }),
|
|
79
|
+
name,
|
|
80
|
+
).toBe(`"${name.toLowerCase()}" is a reserved folder name (Data, Agents, Workflows).`);
|
|
81
|
+
}
|
|
82
|
+
expect(WORKFLOWS_DIR).toBe('Workflows');
|
|
83
|
+
expect([...reservedRootDirNames(DEFAULT_KB_LAYOUT)]).toEqual(
|
|
84
|
+
expect.arrayContaining(['Data', 'Agents', 'Workflows']),
|
|
85
|
+
);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
test('no longer knows Pipelines: not reserved, and free to be a root', () => {
|
|
89
|
+
expect(reservedRootDirNames(DEFAULT_KB_LAYOUT).has('Pipelines')).toBe(false);
|
|
90
|
+
expect(
|
|
91
|
+
validateKbLayout({ knowledgeBaseDir: 'KnowledgeBase', skillsDir: 'Pipelines', pluginsDir: 'Plugins' }),
|
|
92
|
+
).toBeNull();
|
|
93
|
+
});
|
|
94
|
+
|
|
74
95
|
test('renders placeholders without interpreting $-patterns in a folder name', () => {
|
|
75
96
|
expect(
|
|
76
97
|
renderKbLayoutPlaceholders('a {{skillsDir}} b', { knowledgeBaseDir: 'K', skillsDir: 'Sales$&', pluginsDir: 'P' }),
|
|
@@ -2,7 +2,7 @@ import type { IChangeReadGate } from '../modules/access-model/change-gate.js';
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* A read-before-write gate that lets every change through — for tests whose
|
|
5
|
-
* subject is something else. `
|
|
5
|
+
* subject is something else. `VersionControlService` refuses to exist without a
|
|
6
6
|
* gate (see its constructor), so a harness that only exercises branches,
|
|
7
7
|
* change requests or commits passes this one. Never wired in production: the
|
|
8
8
|
* composition root builds the real `ChangeReadGate`.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ITreeWalker } from '../shared/fs.contract.js';
|
|
2
|
+
import type { WorkspaceService } from '../modules/workspace/index.js';
|
|
3
|
+
import { AccessControlService } from '../modules/access/access-control.service.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The access resolver over a real tree, wired the way the composition root
|
|
7
|
+
* wires it (`core/create-core-services.ts`). A module's suite whose
|
|
8
|
+
* assertions are what the real rules answer after its service ran — who may
|
|
9
|
+
* read, who may write — takes it from HERE rather than constructing another
|
|
10
|
+
* module's implementation itself: the service is on no module entry, by
|
|
11
|
+
* design (a module receives `IAccessControl` by injection), and this fixture
|
|
12
|
+
* stands in for the root, as `real-disk.ts` does for the disk.
|
|
13
|
+
*/
|
|
14
|
+
export function realAccessControl(workspace: WorkspaceService, kbDirName: string, disk: ITreeWalker): AccessControlService {
|
|
15
|
+
return new AccessControlService(workspace, kbDirName, disk);
|
|
16
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AuthService } from '../modules/auth/auth.service.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The auth service, constructed the way the composition root constructs it
|
|
5
|
+
* (`core/create-core-services.ts`). A module's suite that drives routes which
|
|
6
|
+
* take the real service — the access routes, which it guards — takes it from
|
|
7
|
+
* HERE rather than constructing another module's implementation itself: the
|
|
8
|
+
* auth entry holds the service's contract and the class behind it is the
|
|
9
|
+
* root's to wire, as `real-disk.ts` stands in for the root for the disk.
|
|
10
|
+
*/
|
|
11
|
+
export function realAuthService(...args: ConstructorParameters<typeof AuthService>): AuthService {
|
|
12
|
+
return new AuthService(...args);
|
|
13
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { FileReaderRegistry } from '../modules/workspace/index.js';
|
|
2
|
+
import { createFileReaderRegistry } from '../modules/workspace/file-readers/file-reader.registry.js';
|
|
3
|
+
import type { DocExtractOutcome, DocExtractService } from '../modules/workspace/file-readers/doc-extract.service.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The file readers, composed the way the composition root composes them
|
|
7
|
+
* (`core/create-core-services.ts`) over a document extractor. A module's suite
|
|
8
|
+
* that reads real files through them takes them from HERE rather than
|
|
9
|
+
* composing another module's internals itself: the registry factory is on no
|
|
10
|
+
* module entry, by design (a module receives the registry by injection), and
|
|
11
|
+
* this fixture stands in for the root, as `real-disk.ts` does for the disk.
|
|
12
|
+
*/
|
|
13
|
+
export function realFileReaders(docExtract: DocExtractService = noDocExtract()): FileReaderRegistry {
|
|
14
|
+
return createFileReaderRegistry(docExtract);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* A document extractor that extracts nothing: a suite that reads no
|
|
19
|
+
* document-format file gets this typed refusal, not a silent empty text.
|
|
20
|
+
*/
|
|
21
|
+
export function noDocExtract(): DocExtractService {
|
|
22
|
+
const extract = async (): Promise<DocExtractOutcome> => ({
|
|
23
|
+
ok: false,
|
|
24
|
+
message: 'this suite reads no document-format file',
|
|
25
|
+
});
|
|
26
|
+
return { extract } satisfies Pick<DocExtractService, 'extract'> as DocExtractService;
|
|
27
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { KbContext } from '../shared/kb-context.js';
|
|
2
|
+
import type { WorkspaceService } from '../modules/workspace/index.js';
|
|
3
|
+
import { GitService } from '../modules/version-control/git/git.service.js';
|
|
4
|
+
import { VersionControlHooks } from '../modules/version-control/version-control-hooks.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The version-control collaborators, wired the way the composition root wires
|
|
8
|
+
* them (`core/create-core-services.ts`): the git service over a workspace and
|
|
9
|
+
* the lifecycle hooks it consults — where every commit it lands is reported
|
|
10
|
+
* (`onCommitLanded`). A module's suite that commits to a real repository
|
|
11
|
+
* takes them from HERE rather than constructing another module's
|
|
12
|
+
* implementation itself: none of them is on a module entry, by design — they
|
|
13
|
+
* arrive by injection — and this fixture stands in for the root, as
|
|
14
|
+
* `real-disk.ts` does for the disk.
|
|
15
|
+
*/
|
|
16
|
+
export function realVersionControlHooks(): VersionControlHooks {
|
|
17
|
+
return new VersionControlHooks();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function realGitService(workspace: WorkspaceService, hooks: VersionControlHooks, kb: KbContext): GitService {
|
|
21
|
+
return new GitService(workspace, hooks, kb);
|
|
22
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createToolHandlerFactory } from '../modules/tool-helpers/tool-handler.js';
|
|
2
|
+
import type { ToolHandlerFactory } from '../modules/tool-helpers/index.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The tool-handler factory, wired the way the composition root wires it
|
|
6
|
+
* (`core/create-core-services.ts`) minus the write-access and branch ports a
|
|
7
|
+
* suite about one tool's answer does not exercise. A module's suite that
|
|
8
|
+
* mounts its tools takes the factory from HERE rather than constructing it
|
|
9
|
+
* from `tool-helpers`' file: the factory is on no module entry (only its type
|
|
10
|
+
* is — a handler factory arrives by injection), and this fixture stands in
|
|
11
|
+
* for the root, as `real-disk.ts` does for the disk.
|
|
12
|
+
*/
|
|
13
|
+
export function toolHandlerFactory(resolve: Parameters<typeof createToolHandlerFactory>[0]): ToolHandlerFactory {
|
|
14
|
+
return createToolHandlerFactory(resolve);
|
|
15
|
+
}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* that builds a tool surface the way `core/create-core-server.ts` does: the
|
|
4
4
|
* handler factory and context resolver, the tool-auth middleware, the two
|
|
5
5
|
* registrars that take their dependencies by hand, the session sink, the
|
|
6
|
-
* routine write policy, the access resolver
|
|
6
|
+
* routine write policy, the access resolver, the version-control hooks, the
|
|
7
|
+
* manual auth middleware and the auth cookie reader, and the MCP routes and service.
|
|
7
8
|
*
|
|
8
9
|
* A module's entry holds its contracts, and a suite asserts through entries.
|
|
9
10
|
* These are not contracts: they are what the root composes, so a suite that
|
|
@@ -16,10 +17,15 @@ export { createToolContextResolver } from '../modules/tool-helpers/tool-context.
|
|
|
16
17
|
export { createToolAuthMiddleware } from '../modules/tool-auth/tool-auth.middleware.js';
|
|
17
18
|
export { InternalTokenService } from '../modules/tool-auth/internal-token.service.js';
|
|
18
19
|
export { registerWorkspaceTools } from '../modules/workspace/workspace.tools.js';
|
|
19
|
-
export {
|
|
20
|
-
export { registerChangeRequestReadTools } from '../modules/
|
|
20
|
+
export { registerVersionControlTools } from '../modules/version-control/agent-tools/version-control.tools.js';
|
|
21
|
+
export { registerChangeRequestReadTools } from '../modules/version-control/agent-tools/change-request-read.tools.js';
|
|
21
22
|
export { registerEmbedTools } from '../modules/embed/embed.tools.js';
|
|
22
23
|
export { UuidSessionSink } from '../modules/workspace/session-sink.js';
|
|
23
24
|
export { RoutineWritePolicyService } from '../modules/workspace/routine-write-policy.js';
|
|
24
25
|
export { AccessControlService, loadActiveGroups } from '../modules/access/access-control.service.js';
|
|
25
|
-
export {
|
|
26
|
+
export { VersionControlHooks, type AgentOperationContext } from '../modules/version-control/version-control-hooks.js';
|
|
27
|
+
export { createManualAuthMiddleware } from '../modules/tool-auth/tool-auth.middleware.js';
|
|
28
|
+
export { readAuthCookie } from '../modules/auth/auth.middleware.js';
|
|
29
|
+
export type { ToolBranchPort } from '../modules/tool-helpers/tool-handler.js';
|
|
30
|
+
export { createMcpRoutes } from '../modules/mcp/mcp.routes.js';
|
|
31
|
+
export { McpService } from '../modules/mcp/mcp.service.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
-
import { NodeGitRunner } from '../modules/
|
|
2
|
+
import { NodeGitRunner } from '../modules/version-control/git/node-git-runner.js';
|
|
3
3
|
import type { IGitRunner } from '../shared/git.contract.js';
|
|
4
4
|
import type { ITreeWalker } from '../shared/fs.contract.js';
|
|
5
5
|
import type { KbContext } from '../shared/kb-context.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describe, it, expect, vi } from 'vitest';
|
|
2
2
|
import { DEFAULT_BRANCH } from '@bevel-software/platform-shared';
|
|
3
3
|
import { FileChangeNotifier } from '../../modules/kb-fs/file-change-notifier.js';
|
|
4
|
-
import {
|
|
4
|
+
import { VersionControlEventBus } from '../../modules/version-control/event-bus.js';
|
|
5
5
|
import { registerCatalogCacheInvalidation } from '../catalog-cache-invalidation.js';
|
|
6
6
|
import { workspaceIdForBranch } from '../../shared/workspace-id.js';
|
|
7
7
|
import { testKbContext } from '../../__tests__/kb-context.js';
|
|
@@ -15,7 +15,7 @@ const USER = {
|
|
|
15
15
|
} as unknown as Parameters<Parameters<FileChangeNotifier['onFilesChanged']>[0]>[0]['byUser'];
|
|
16
16
|
|
|
17
17
|
function setup() {
|
|
18
|
-
const eventBus = new
|
|
18
|
+
const eventBus = new VersionControlEventBus();
|
|
19
19
|
const fileChangeNotifier = new FileChangeNotifier();
|
|
20
20
|
const catalogs = [
|
|
21
21
|
{ invalidate: vi.fn() },
|
|
@@ -132,7 +132,7 @@ describe('registerCatalogCacheInvalidation', () => {
|
|
|
132
132
|
* working-tree write does — NOT as a `change-request-merged` special
|
|
133
133
|
* case. That a pull of the default workspace actually emits this event
|
|
134
134
|
* (only after it resolves, and only when it changed the tree's content) is the emitter's
|
|
135
|
-
* own contract, pinned in
|
|
135
|
+
* own contract, pinned in version-control.service.releaseLock.test.ts under
|
|
136
136
|
* "the tree-change announcement".
|
|
137
137
|
*/
|
|
138
138
|
it('drops the catalogs when the default tree changes (write or post-merge pull alike)', () => {
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A landed commit is announced from ONE place. The git service reports every
|
|
8
|
+
* commit it lands through `VersionControlHooks.commitLanded`; the composition
|
|
9
|
+
* root hands that to the file-change notifier with one registration; nothing
|
|
10
|
+
* else emits on the notifier or calls the hook. A second announcer is how a
|
|
11
|
+
* batch gets announced twice, and a committer that announces on its own is how
|
|
12
|
+
* the next one forgets to — both were real findings on the release that made
|
|
13
|
+
* this rule, so the rule is pinned at the source level.
|
|
14
|
+
*/
|
|
15
|
+
const SRC = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
16
|
+
const ROOT = path.join(SRC, 'core', 'create-core-services.ts');
|
|
17
|
+
|
|
18
|
+
async function shippedSources(dir: string, out: string[] = []): Promise<string[]> {
|
|
19
|
+
for (const entry of await fs.readdir(dir, { withFileTypes: true })) {
|
|
20
|
+
const full = path.join(dir, entry.name);
|
|
21
|
+
if (entry.isDirectory()) {
|
|
22
|
+
if (entry.name !== '__tests__') await shippedSources(full, out);
|
|
23
|
+
} else if (/\.ts$/.test(entry.name) && !/\.test\.ts$/.test(entry.name)) out.push(full);
|
|
24
|
+
}
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async function filesContaining(needle: RegExp): Promise<string[]> {
|
|
29
|
+
const hits: string[] = [];
|
|
30
|
+
for (const file of await shippedSources(SRC)) {
|
|
31
|
+
if (needle.test(await fs.readFile(file, 'utf8'))) hits.push(path.relative(SRC, file).replace(/\\/g, '/'));
|
|
32
|
+
}
|
|
33
|
+
return hits.sort();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
describe('commit announcements are wired once', () => {
|
|
37
|
+
it('the composition root hands the git layer\'s landed commits to the notifier with one registration', async () => {
|
|
38
|
+
const source = await fs.readFile(ROOT, 'utf8');
|
|
39
|
+
const registrations = source.match(/versionControlHooks\.onCommitLanded\(/g) ?? [];
|
|
40
|
+
expect(registrations).toHaveLength(1);
|
|
41
|
+
expect(source).toContain('versionControlHooks.onCommitLanded((change) => fileChangeNotifier.emit(change));');
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('only the git service reports a landed commit, and only the root registers for it', async () => {
|
|
45
|
+
expect(await filesContaining(/\.commitLanded\(/)).toEqual(['modules/version-control/git/git.service.ts']);
|
|
46
|
+
expect(await filesContaining(/\.onCommitLanded\(/)).toEqual(['core/create-core-services.ts']);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('nothing but the root emits on the notifier, and no committer announces on its own', async () => {
|
|
50
|
+
expect(await filesContaining(/fileChangeNotifier\.emit\(|fileChanges\??\.emit\(/)).toEqual(['core/create-core-services.ts']);
|
|
51
|
+
expect(await filesContaining(/announceCommitted|announceReleased/)).toEqual([]);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
@@ -26,7 +26,7 @@ function deps(): EmbedComposition {
|
|
|
26
26
|
},
|
|
27
27
|
accessControl: { canRead: vi.fn(async () => true), canWrite: vi.fn(async () => true) } as never,
|
|
28
28
|
authService: { getUserById: vi.fn(async () => USER), isEmailDomainAllowed: () => true, isActive: async () => true },
|
|
29
|
-
|
|
29
|
+
versionControlService: {} as never,
|
|
30
30
|
gitService: {} as never,
|
|
31
31
|
accountLinks: { getUserId: async () => null, link: async () => undefined, listForUser: async () => [], unlink: async () => true },
|
|
32
32
|
readers: createFileReaderRegistry({ extract } satisfies Pick<DocExtractService, 'extract'> as DocExtractService),
|
|
@@ -13,7 +13,7 @@ import type { ToolContext } from '../../modules/tool-helpers/tool.contract.js';
|
|
|
13
13
|
import type { ToolAuth } from '../../modules/tool-auth/tool-auth.middleware.js';
|
|
14
14
|
import { registerWorkspaceTools } from '../../modules/workspace/workspace.tools.js';
|
|
15
15
|
import { RoutineWritePolicyService } from '../../modules/workspace/routine-write-policy.js';
|
|
16
|
-
import {
|
|
16
|
+
import { VersionControlHooks } from '../../modules/version-control/version-control-hooks.js';
|
|
17
17
|
import { ToolDescriptionNotes } from '../../modules/workspace/agent-access.gate.js';
|
|
18
18
|
import { SpillStore } from '../../modules/workspace/spill-store.js';
|
|
19
19
|
import { RipgrepPatternMatcher } from '../../modules/workspace/index.js';
|
|
@@ -92,7 +92,7 @@ async function startPlatform(extractorOpts: WorkerDocumentExtractorOptions = {})
|
|
|
92
92
|
sessionId,
|
|
93
93
|
abortSignal: signal,
|
|
94
94
|
workspaceService: { getWorkspacePath: async () => tempDir } as never,
|
|
95
|
-
|
|
95
|
+
versionControlService: {} as never,
|
|
96
96
|
events: {} as never,
|
|
97
97
|
getFilesystem: async () => fs,
|
|
98
98
|
});
|
|
@@ -123,7 +123,7 @@ async function startPlatform(extractorOpts: WorkerDocumentExtractorOptions = {})
|
|
|
123
123
|
docExtract,
|
|
124
124
|
allowAll,
|
|
125
125
|
testKbContext({ kbDirName: KB }),
|
|
126
|
-
{ recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new
|
|
126
|
+
{ recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new VersionControlHooks(), notes: new ToolDescriptionNotes() },
|
|
127
127
|
new RoutineWritePolicyService(),
|
|
128
128
|
{} as never,
|
|
129
129
|
undefined,
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Account erasure runs two kinds of slice: core's own (the vault's managed
|
|
8
|
+
* sign-ins, revoked with their provider before the user row and its rows
|
|
9
|
+
* cascade away) and the distribution's, from `CorePorts.erasureParticipants`.
|
|
10
|
+
* The port's array is held by reference so a root may fill it AFTER
|
|
11
|
+
* construction, and core never writes into it: a root that builds a graph
|
|
12
|
+
* over the same array more than once (a tenant brought back after eviction)
|
|
13
|
+
* would otherwise accumulate every past graph's vault slice, each pointing
|
|
14
|
+
* at that graph's closed pool.
|
|
15
|
+
*
|
|
16
|
+
* Read off the source, as `set-aside-root-is-one-place.test.ts` reads it:
|
|
17
|
+
* the composition root cannot be built in a unit test (it wants a database,
|
|
18
|
+
* a git host and a disk), and the invariant is about the TEXT — the service
|
|
19
|
+
* is constructed once, the port's array is passed as it is, core's slice
|
|
20
|
+
* travels beside it, and nothing pushes into or copies the port's array.
|
|
21
|
+
* `AccountErasureService`'s own suite pins what that argument order means.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
const compositionRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../create-core-services.ts');
|
|
25
|
+
|
|
26
|
+
describe('the erasure slices the composition root wires', () => {
|
|
27
|
+
it('passes the port’s array untouched and the vault’s slice beside it, once', async () => {
|
|
28
|
+
const source = await fs.readFile(compositionRoot, 'utf8');
|
|
29
|
+
|
|
30
|
+
const constructions = source.match(/new AccountErasureService\(/g) ?? [];
|
|
31
|
+
expect(constructions).toHaveLength(1);
|
|
32
|
+
|
|
33
|
+
// The one construction: the port's array as the root received it (or an
|
|
34
|
+
// empty one of core's own), then core's slices with the vault's first.
|
|
35
|
+
const call = source.slice(source.indexOf('new AccountErasureService('));
|
|
36
|
+
const args = call.slice(0, call.indexOf(');') + 2);
|
|
37
|
+
expect(args).toMatch(/ports\.erasureParticipants \?\? \[\]/);
|
|
38
|
+
expect(args).toMatch(/\[\s*managedSignInErasure\(secretsVaultService\),?\s*\]/);
|
|
39
|
+
expect(args.indexOf('ports.erasureParticipants')).toBeLessThan(args.indexOf('managedSignInErasure'));
|
|
40
|
+
|
|
41
|
+
// Never written into, never copied: the array a root fills after
|
|
42
|
+
// construction is the array erasure reads, with nothing of core's in it.
|
|
43
|
+
expect(source).not.toMatch(/erasureParticipants\s*\.\s*(push|unshift|splice)\(/);
|
|
44
|
+
expect(source).not.toMatch(/\.\.\.\s*\(?\s*ports\.erasureParticipants/);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
@@ -48,10 +48,10 @@ function bootable(runAll: () => Promise<void>) {
|
|
|
48
48
|
return { stop() {} };
|
|
49
49
|
},
|
|
50
50
|
} as BootableCore['kbStartupRunner'],
|
|
51
|
-
|
|
51
|
+
versionControlService: {
|
|
52
52
|
closeChangeRequestsWithDeletedBranches: async () => 0,
|
|
53
53
|
tidyAfterSweep: async () => ({ closedEmpty: 0, removedLeftovers: 0 }),
|
|
54
|
-
} as BootableCore['
|
|
54
|
+
} as BootableCore['versionControlService'],
|
|
55
55
|
pluginJoinRequestJobs: { startSweeping() {} } as BootableCore['pluginJoinRequestJobs'],
|
|
56
56
|
tmpSweeper: {
|
|
57
57
|
startSweeping() {
|
|
@@ -460,12 +460,12 @@ describe('stopCore', () => {
|
|
|
460
460
|
order.push('startupRetry.stop');
|
|
461
461
|
},
|
|
462
462
|
},
|
|
463
|
-
|
|
463
|
+
versionControlService: {
|
|
464
464
|
stopTidying() {
|
|
465
|
-
order.push('
|
|
465
|
+
order.push('versionControlService.stopTidying');
|
|
466
466
|
},
|
|
467
467
|
async drainTidy() {
|
|
468
|
-
order.push('
|
|
468
|
+
order.push('versionControlService.drainTidy');
|
|
469
469
|
},
|
|
470
470
|
},
|
|
471
471
|
db: {
|
|
@@ -488,10 +488,10 @@ describe('stopCore', () => {
|
|
|
488
488
|
'pluginJoinRequestJobs.stopSweeping',
|
|
489
489
|
'agentUploadStore.stopSweeping',
|
|
490
490
|
'startupRetry.stop',
|
|
491
|
-
'
|
|
491
|
+
'versionControlService.stopTidying',
|
|
492
492
|
'pluginJoinRequestJobs.drain',
|
|
493
493
|
'agentUploadStore.drainSweep',
|
|
494
|
-
'
|
|
494
|
+
'versionControlService.drainTidy',
|
|
495
495
|
'commitWorker.stop',
|
|
496
496
|
'db.end',
|
|
497
497
|
]);
|
|
@@ -550,10 +550,10 @@ describe('stopCore', () => {
|
|
|
550
550
|
expect(g.order).toEqual([
|
|
551
551
|
'pluginJoinRequestJobs.stopSweeping',
|
|
552
552
|
'agentUploadStore.stopSweeping',
|
|
553
|
-
'
|
|
553
|
+
'versionControlService.stopTidying',
|
|
554
554
|
'pluginJoinRequestJobs.drain',
|
|
555
555
|
'agentUploadStore.drainSweep',
|
|
556
|
-
'
|
|
556
|
+
'versionControlService.drainTidy',
|
|
557
557
|
'commitWorker.stop',
|
|
558
558
|
'db.end',
|
|
559
559
|
]);
|
|
@@ -594,10 +594,10 @@ describe('stopCore', () => {
|
|
|
594
594
|
'pluginJoinRequestJobs.stopSweeping',
|
|
595
595
|
'agentUploadStore.stopSweeping',
|
|
596
596
|
'startupRetry.stop',
|
|
597
|
-
'
|
|
597
|
+
'versionControlService.stopTidying',
|
|
598
598
|
'pluginJoinRequestJobs.drain',
|
|
599
599
|
'agentUploadStore.drainSweep',
|
|
600
|
-
'
|
|
600
|
+
'versionControlService.drainTidy',
|
|
601
601
|
'db.end',
|
|
602
602
|
]);
|
|
603
603
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { FileChangeNotifier } from '../modules/kb-fs/file-change-notifier.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { VersionControlEventBus } from '../modules/version-control/event-bus.js';
|
|
3
3
|
import type { KbContext } from '../shared/kb-context.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -23,7 +23,7 @@ export interface InvalidatableCatalog {
|
|
|
23
23
|
* Returns an unsubscribe that detaches all three.
|
|
24
24
|
*/
|
|
25
25
|
export function registerCatalogCacheInvalidation(deps: {
|
|
26
|
-
eventBus:
|
|
26
|
+
eventBus: VersionControlEventBus;
|
|
27
27
|
fileChangeNotifier: FileChangeNotifier;
|
|
28
28
|
/**
|
|
29
29
|
* The KB folder inside the workspace (`paths` are workspace-relative), the
|