@bevel-software/platform-core-backend 0.35.0 → 0.36.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-guide/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 +68 -56
- 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/core-schema.js +2 -2
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/diff/diff.routes.d.ts +3 -3
- package/dist/modules/diff/diff.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.js +7 -7
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/embed/embed.routes.js +1 -1
- package/dist/modules/embed/embed.routes.js.map +1 -1
- package/dist/modules/embed/embed.service.d.ts +4 -4
- package/dist/modules/embed/embed.service.d.ts.map +1 -1
- package/dist/modules/embed/embed.service.js +18 -18
- package/dist/modules/embed/embed.service.js.map +1 -1
- package/dist/modules/kb-fs/branch-name.js +8 -8
- package/dist/modules/kb-fs/branch-name.js.map +1 -1
- package/dist/modules/kb-fs/file-change-notifier.d.ts +2 -2
- package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -9
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +27 -27
- package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/repo-path.js +5 -5
- package/dist/modules/kb-fs/repo-path.js.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
- package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.js +2 -2
- package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
- package/dist/modules/kb-sync/index.d.ts +1 -1
- package/dist/modules/kb-sync/index.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js +10 -10
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +11 -4
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +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 +4 -4
- package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.js +4 -4
- package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.js +7 -7
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
- package/dist/modules/plugins/join-requests.service.d.ts +3 -3
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +5 -5
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.js +1 -1
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +2 -2
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +8 -8
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +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 +8 -8
- package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.js +53 -53
- package/dist/modules/version-control/git/git.service.js.map +1 -0
- package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
- package/dist/modules/version-control/git/merge-commit.js.map +1 -0
- package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
- package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
- package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
- package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
- package/dist/modules/version-control/index.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/index.js +3 -2
- package/dist/modules/version-control/index.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
- package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
- package/dist/modules/version-control/pending-commits.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
- package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
- package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
- package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
- package/dist/modules/version-control/read-on-branch.js.map +1 -0
- package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
- package/dist/modules/version-control/recovery-bot.js.map +1 -0
- package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
- package/dist/modules/version-control/sanitize-error.js.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +4 -4
- package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +3 -3
- package/dist/modules/version-control/version-control-hooks.js.map +1 -0
- package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
- package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
- package/dist/modules/version-control/version-control.routes.js.map +1 -0
- package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -31
- package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +89 -94
- package/dist/modules/version-control/version-control.service.js.map +1 -0
- package/dist/modules/workspace/agent-access.gate.d.ts +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/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__/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__/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__/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 +79 -63
- package/src/core/lifecycle.ts +9 -9
- package/src/core-config.ts +3 -3
- package/src/index.ts +5 -5
- package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
- package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
- package/src/modules/access/__tests__/access-requests.routes.test.ts +20 -20
- package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
- package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +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 +27 -27
- package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
- package/src/modules/access/__tests__/roles-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/roles-capabilities.test.ts +19 -19
- package/src/modules/access/__tests__/roles.routes.test.ts +6 -6
- package/src/modules/access/__tests__/synced-groups-committer.test.ts +13 -13
- package/src/modules/access/__tests__/user-access-removal.service.test.ts +29 -29
- package/src/modules/access/access-control.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__/migrations-unqualified.test.ts +32 -32
- package/src/modules/database/core-schema.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
- package/src/modules/diff/diff.routes.ts +8 -8
- package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
- package/src/modules/embed/__tests__/embed.service.test.ts +42 -42
- package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
- package/src/modules/embed/embed.routes.ts +1 -1
- package/src/modules/embed/embed.service.ts +17 -17
- package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
- package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +260 -260
- package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +34 -34
- package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
- package/src/modules/kb-fs/branch-name.ts +8 -8
- package/src/modules/kb-fs/file-change-notifier.ts +2 -2
- package/src/modules/kb-fs/locking-filesystem.ts +30 -30
- package/src/modules/kb-fs/repo-path.ts +5 -5
- package/src/modules/kb-fs/tmp-ref.ts +3 -3
- package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
- package/src/modules/kb-sync/index.ts +1 -1
- package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
- package/src/modules/kb-sync/kb-sync.service.ts +9 -9
- package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
- package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
- package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
- package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
- package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
- package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
- package/src/modules/mcp/mcp.service.ts +89 -28
- package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +55 -55
- package/src/modules/onboarding/onboarding.contract.ts +1 -1
- package/src/modules/onboarding/onboarding.routes.ts +2 -2
- package/src/modules/onboarding/starter-pack.service.ts +6 -6
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
- package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
- package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
- package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
- package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
- package/src/modules/plugins/__tests__/plugins.routes.test.ts +25 -25
- package/src/modules/plugins/join-request-jobs.service.ts +10 -10
- package/src/modules/plugins/join-requests.service.ts +4 -4
- package/src/modules/plugins/plugin-rename.service.ts +1 -1
- package/src/modules/plugins/plugins.routes.ts +9 -9
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +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} +97 -99
- package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
- package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +42 -42
- package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.pg.test.ts → version-control/__tests__/version-control.service.update-change-request.pg.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.test.ts → version-control/__tests__/version-control.service.update-change-request.test.ts} +11 -11
- package/src/modules/{workflow/__tests__/workflow.service.update-from-target.test.ts → version-control/__tests__/version-control.service.update-from-target.test.ts} +22 -22
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
- package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
- package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
- package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +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/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +20 -20
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/git.service.ts +57 -57
- package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
- package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
- package/src/modules/{workflow → version-control}/index.ts +6 -5
- package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
- package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
- package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
- package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +3 -3
- package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
- package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +92 -97
- package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
- package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
- package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
- package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
- package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
- package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
- package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
- package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
- package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +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__/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/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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describe, expect, it, vi } from 'vitest';
|
|
2
2
|
import type { BranchSyncOutcome } from '@bevel-software/platform-shared';
|
|
3
3
|
import { KbSyncService } from '../kb-sync.service.js';
|
|
4
|
-
import type {
|
|
4
|
+
import type { SyncVersionControlPort, SyncWorkspacePort } from '../kb-sync.interface.js';
|
|
5
5
|
|
|
6
6
|
function deferred<T>() {
|
|
7
7
|
let resolve!: (v: T) => void;
|
|
@@ -24,7 +24,7 @@ function updated(branch: string): BranchSyncOutcome {
|
|
|
24
24
|
describe('KbSyncService', () => {
|
|
25
25
|
it('answers the sync without waiting for the tidy-up after it', async () => {
|
|
26
26
|
let finish = (): void => undefined;
|
|
27
|
-
const
|
|
27
|
+
const versionControl: SyncVersionControlPort = {
|
|
28
28
|
syncWorkspaceFromRemote: vi.fn(async (id: string) => updated(decodeURIComponent(id))),
|
|
29
29
|
closeChangeRequestsWithDeletedBranches: vi.fn(async () => 0),
|
|
30
30
|
// A tidy-up that never ends unless told to — and one that fails.
|
|
@@ -36,36 +36,36 @@ describe('KbSyncService', () => {
|
|
|
36
36
|
.mockRejectedValueOnce(new Error('boom')),
|
|
37
37
|
retireRemoteGoneClone: vi.fn(async () => true),
|
|
38
38
|
};
|
|
39
|
-
const svc = new KbSyncService(
|
|
39
|
+
const svc = new KbSyncService(versionControl, workspaces(['main']));
|
|
40
40
|
await expect(svc.sync({ branches: 'all' })).resolves.toMatchObject({ status: 'synced' });
|
|
41
|
-
expect(
|
|
41
|
+
expect(versionControl.tidyAfterSweep).toHaveBeenCalledTimes(1);
|
|
42
42
|
await expect(svc.sync({ branches: 'all' })).resolves.toMatchObject({ status: 'synced' });
|
|
43
43
|
finish();
|
|
44
44
|
});
|
|
45
45
|
|
|
46
46
|
it('syncs every known clone for an "all" request and reports unknown branches as not cloned', async () => {
|
|
47
|
-
const
|
|
47
|
+
const versionControl: SyncVersionControlPort = {
|
|
48
48
|
syncWorkspaceFromRemote: vi.fn(async (id: string) => updated(decodeURIComponent(id))),
|
|
49
49
|
closeChangeRequestsWithDeletedBranches: vi.fn(async () => 1),
|
|
50
50
|
tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
|
|
51
51
|
retireRemoteGoneClone: vi.fn(async () => true),
|
|
52
52
|
};
|
|
53
|
-
const svc = new KbSyncService(
|
|
53
|
+
const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x']));
|
|
54
54
|
|
|
55
55
|
const all = await svc.sync({ branches: 'all' });
|
|
56
56
|
expect(all.status).toBe('synced');
|
|
57
57
|
expect(all.results.map((r) => r.branch)).toEqual(['main', 'ali/x']);
|
|
58
58
|
expect(all.changeRequests.closedDeletedBranch).toBe(1);
|
|
59
59
|
// Every sweep for deleted branches is followed by the leftover cleanup.
|
|
60
|
-
expect(
|
|
61
|
-
expect(
|
|
60
|
+
expect(versionControl.tidyAfterSweep).toHaveBeenCalledTimes(1);
|
|
61
|
+
expect(versionControl.syncWorkspaceFromRemote).toHaveBeenCalledWith('ali%2Fx');
|
|
62
62
|
|
|
63
63
|
const some = await svc.sync({ branches: ['ali/x', 'juan/other'] });
|
|
64
64
|
expect(some.results).toEqual([updated('ali/x'), { branch: 'juan/other', outcome: 'not-cloned' }]);
|
|
65
65
|
});
|
|
66
66
|
|
|
67
67
|
it('a conflict or an error makes the result partial; the other branches still sync', async () => {
|
|
68
|
-
const
|
|
68
|
+
const versionControl: SyncVersionControlPort = {
|
|
69
69
|
syncWorkspaceFromRemote: vi.fn(async (id: string): Promise<BranchSyncOutcome> =>
|
|
70
70
|
id === 'main'
|
|
71
71
|
? { branch: 'main', outcome: 'conflict', conflictedPaths: ['a.md'], error: 'msg' }
|
|
@@ -75,14 +75,14 @@ describe('KbSyncService', () => {
|
|
|
75
75
|
tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
|
|
76
76
|
retireRemoteGoneClone: vi.fn(async () => true),
|
|
77
77
|
};
|
|
78
|
-
const svc = new KbSyncService(
|
|
78
|
+
const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x']));
|
|
79
79
|
const r = await svc.sync({ branches: 'all' });
|
|
80
80
|
expect(r.status).toBe('partial');
|
|
81
81
|
expect(r.results[1]).toEqual(updated('ali/x'));
|
|
82
82
|
});
|
|
83
83
|
|
|
84
84
|
it('a failing sweep does not fail the sync', async () => {
|
|
85
|
-
const
|
|
85
|
+
const versionControl: SyncVersionControlPort = {
|
|
86
86
|
syncWorkspaceFromRemote: vi.fn(async () => updated('main')),
|
|
87
87
|
closeChangeRequestsWithDeletedBranches: vi.fn(async () => {
|
|
88
88
|
throw new Error('origin down');
|
|
@@ -90,7 +90,7 @@ describe('KbSyncService', () => {
|
|
|
90
90
|
tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
|
|
91
91
|
retireRemoteGoneClone: vi.fn(async () => true),
|
|
92
92
|
};
|
|
93
|
-
const svc = new KbSyncService(
|
|
93
|
+
const svc = new KbSyncService(versionControl, workspaces(['main']));
|
|
94
94
|
const r = await svc.sync({ branches: 'all' });
|
|
95
95
|
expect(r.status).toBe('synced');
|
|
96
96
|
expect(r.changeRequests.closedDeletedBranch).toBe(0);
|
|
@@ -103,7 +103,7 @@ describe('KbSyncService', () => {
|
|
|
103
103
|
// landing after the gate opened.
|
|
104
104
|
const calls: string[][] = [['']];
|
|
105
105
|
let gateOpened = false;
|
|
106
|
-
const
|
|
106
|
+
const versionControl: SyncVersionControlPort = {
|
|
107
107
|
syncWorkspaceFromRemote: vi.fn(async (id: string) => {
|
|
108
108
|
const branch = decodeURIComponent(id);
|
|
109
109
|
if (!gateOpened && branch === 'main') {
|
|
@@ -120,7 +120,7 @@ describe('KbSyncService', () => {
|
|
|
120
120
|
tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
|
|
121
121
|
retireRemoteGoneClone: vi.fn(async () => true),
|
|
122
122
|
};
|
|
123
|
-
const svc = new KbSyncService(
|
|
123
|
+
const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x', 'juan/y']));
|
|
124
124
|
|
|
125
125
|
const first = svc.sync({ branches: ['main'] });
|
|
126
126
|
// Three requests land while the first is parked on `gate`.
|
|
@@ -137,12 +137,12 @@ describe('KbSyncService', () => {
|
|
|
137
137
|
expect(r2.results.map((r) => r.branch)).toEqual(['ali/x']);
|
|
138
138
|
expect(r3.results.map((r) => r.branch)).toEqual(['juan/y']);
|
|
139
139
|
expect(r4.results.map((r) => r.branch)).toEqual(['ali/x']);
|
|
140
|
-
expect(
|
|
140
|
+
expect(versionControl.closeChangeRequestsWithDeletedBranches).toHaveBeenCalledTimes(2);
|
|
141
141
|
});
|
|
142
142
|
|
|
143
143
|
it('an "all" arriving mid-run absorbs the queued branches', async () => {
|
|
144
144
|
const gate = deferred<void>();
|
|
145
|
-
const
|
|
145
|
+
const versionControl: SyncVersionControlPort = {
|
|
146
146
|
syncWorkspaceFromRemote: vi.fn(async (id: string) => {
|
|
147
147
|
if (id === 'main') await gate.promise;
|
|
148
148
|
return updated(decodeURIComponent(id));
|
|
@@ -151,7 +151,7 @@ describe('KbSyncService', () => {
|
|
|
151
151
|
tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
|
|
152
152
|
retireRemoteGoneClone: vi.fn(async () => true),
|
|
153
153
|
};
|
|
154
|
-
const svc = new KbSyncService(
|
|
154
|
+
const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x', 'juan/y']));
|
|
155
155
|
const first = svc.sync({ branches: ['main'] });
|
|
156
156
|
const second = svc.sync({ branches: ['ali/x'] });
|
|
157
157
|
const third = svc.sync({ branches: 'all' });
|
|
@@ -166,14 +166,14 @@ describe('KbSyncService', () => {
|
|
|
166
166
|
|
|
167
167
|
describe('KbSyncService.lastSync', () => {
|
|
168
168
|
it('is null before the first sync, then records when, who and what', async () => {
|
|
169
|
-
const
|
|
169
|
+
const versionControl: SyncVersionControlPort = {
|
|
170
170
|
syncWorkspaceFromRemote: vi.fn(async (id: string) => updated(decodeURIComponent(id))),
|
|
171
171
|
closeChangeRequestsWithDeletedBranches: vi.fn(async () => 0),
|
|
172
172
|
tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
|
|
173
173
|
retireRemoteGoneClone: vi.fn(async () => true),
|
|
174
174
|
};
|
|
175
175
|
let clock = 1_000;
|
|
176
|
-
const svc = new KbSyncService(
|
|
176
|
+
const svc = new KbSyncService(versionControl, workspaces(['main']), () => clock);
|
|
177
177
|
expect(svc.lastSync()).toBeNull();
|
|
178
178
|
|
|
179
179
|
await svc.sync({ branches: 'all', by: 'bearer' });
|
|
@@ -191,7 +191,7 @@ describe('KbSyncService.lastSync', () => {
|
|
|
191
191
|
|
|
192
192
|
it('a coalesced follow-up names everyone who asked for it', async () => {
|
|
193
193
|
const gate = deferred<void>();
|
|
194
|
-
const
|
|
194
|
+
const versionControl: SyncVersionControlPort = {
|
|
195
195
|
syncWorkspaceFromRemote: vi.fn(async (id: string) => {
|
|
196
196
|
if (id === 'main') await gate.promise;
|
|
197
197
|
return updated(decodeURIComponent(id));
|
|
@@ -200,7 +200,7 @@ describe('KbSyncService.lastSync', () => {
|
|
|
200
200
|
tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
|
|
201
201
|
retireRemoteGoneClone: vi.fn(async () => true),
|
|
202
202
|
};
|
|
203
|
-
const svc = new KbSyncService(
|
|
203
|
+
const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x']));
|
|
204
204
|
const first = svc.sync({ branches: ['main'], by: 'bearer' });
|
|
205
205
|
const second = svc.sync({ branches: ['ali/x'], by: 'github-signature' });
|
|
206
206
|
const third = svc.sync({ branches: ['ali/x'], by: 'admin@example.com' });
|
|
@@ -212,7 +212,7 @@ describe('KbSyncService.lastSync', () => {
|
|
|
212
212
|
|
|
213
213
|
describe('KbSyncService — a throwing branch step', () => {
|
|
214
214
|
it('becomes an error outcome; the other branches, the sweep and the record all still happen', async () => {
|
|
215
|
-
const
|
|
215
|
+
const versionControl: SyncVersionControlPort = {
|
|
216
216
|
syncWorkspaceFromRemote: vi.fn(async (id: string) => {
|
|
217
217
|
if (id === 'main') throw new Error('fatal: unable to access https://x:ghp_secret@host/r');
|
|
218
218
|
return updated(decodeURIComponent(id));
|
|
@@ -221,7 +221,7 @@ describe('KbSyncService — a throwing branch step', () => {
|
|
|
221
221
|
tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
|
|
222
222
|
retireRemoteGoneClone: vi.fn(async () => true),
|
|
223
223
|
};
|
|
224
|
-
const svc = new KbSyncService(
|
|
224
|
+
const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x']));
|
|
225
225
|
const r = await svc.sync({ branches: 'all', by: 'bearer' });
|
|
226
226
|
expect(r.status).toBe('partial');
|
|
227
227
|
expect(r.results[0]).toMatchObject({ branch: 'main', outcome: 'error' });
|
|
@@ -233,8 +233,8 @@ describe('KbSyncService — a throwing branch step', () => {
|
|
|
233
233
|
});
|
|
234
234
|
|
|
235
235
|
describe('KbSyncService — clones the host no longer has, and clones that cannot be read', () => {
|
|
236
|
-
it('a remote-gone branch is retired through
|
|
237
|
-
const
|
|
236
|
+
it('a remote-gone branch is retired through version control, counts as clean, and does not stop the others', async () => {
|
|
237
|
+
const versionControl: SyncVersionControlPort = {
|
|
238
238
|
syncWorkspaceFromRemote: vi.fn(async (id: string): Promise<BranchSyncOutcome> =>
|
|
239
239
|
id === 'ali%2Fx' ? { branch: 'ali/x', outcome: 'remote-gone' } : updated(decodeURIComponent(id)),
|
|
240
240
|
),
|
|
@@ -242,16 +242,16 @@ describe('KbSyncService — clones the host no longer has, and clones that canno
|
|
|
242
242
|
tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
|
|
243
243
|
retireRemoteGoneClone: vi.fn(async () => true),
|
|
244
244
|
};
|
|
245
|
-
const svc = new KbSyncService(
|
|
245
|
+
const svc = new KbSyncService(versionControl, workspaces(['ali/x', 'main']));
|
|
246
246
|
const r = await svc.sync({ branches: 'all' });
|
|
247
247
|
expect(r.status).toBe('synced');
|
|
248
248
|
expect(r.results).toEqual([{ branch: 'ali/x', outcome: 'remote-gone' }, updated('main')]);
|
|
249
|
-
expect(
|
|
250
|
-
expect(
|
|
249
|
+
expect(versionControl.retireRemoteGoneClone).toHaveBeenCalledTimes(1);
|
|
250
|
+
expect(versionControl.retireRemoteGoneClone).toHaveBeenCalledWith('ali%2Fx');
|
|
251
251
|
});
|
|
252
252
|
|
|
253
253
|
it('a clone that could not be read is that branch’s error, not everyone’s', async () => {
|
|
254
|
-
const
|
|
254
|
+
const versionControl: SyncVersionControlPort = {
|
|
255
255
|
syncWorkspaceFromRemote: vi.fn(async (id: string) => updated(decodeURIComponent(id))),
|
|
256
256
|
closeChangeRequestsWithDeletedBranches: vi.fn(async () => 0),
|
|
257
257
|
tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
|
|
@@ -263,21 +263,21 @@ describe('KbSyncService — clones the host no longer has, and clones that canno
|
|
|
263
263
|
{ id: 'juan%2Fy', branch: 'juan/y', unreadable: "Could not read this branch's clone: EPERM" },
|
|
264
264
|
],
|
|
265
265
|
};
|
|
266
|
-
const svc = new KbSyncService(
|
|
266
|
+
const svc = new KbSyncService(versionControl, port);
|
|
267
267
|
const r = await svc.sync({ branches: 'all' });
|
|
268
268
|
expect(r.status).toBe('partial');
|
|
269
269
|
expect(r.results).toEqual([
|
|
270
270
|
updated('main'),
|
|
271
271
|
{ branch: 'juan/y', outcome: 'error', error: "Could not read this branch's clone: EPERM" },
|
|
272
272
|
]);
|
|
273
|
-
expect(
|
|
273
|
+
expect(versionControl.syncWorkspaceFromRemote).toHaveBeenCalledTimes(1);
|
|
274
274
|
});
|
|
275
275
|
});
|
|
276
276
|
|
|
277
277
|
describe('KbSyncService — a coalesced caller is judged by its own branches', () => {
|
|
278
278
|
it("branch A's hook is not failed by branch B's conflict in the same follow-up", async () => {
|
|
279
279
|
const gate = deferred<void>();
|
|
280
|
-
const
|
|
280
|
+
const versionControl: SyncVersionControlPort = {
|
|
281
281
|
syncWorkspaceFromRemote: vi.fn(async (id: string): Promise<BranchSyncOutcome> => {
|
|
282
282
|
if (id === 'main') await gate.promise;
|
|
283
283
|
if (id === 'juan%2Fy') return { branch: 'juan/y', outcome: 'conflict', conflictedPaths: ['a.md'], error: 'msg' };
|
|
@@ -287,7 +287,7 @@ describe('KbSyncService — a coalesced caller is judged by its own branches', (
|
|
|
287
287
|
tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
|
|
288
288
|
retireRemoteGoneClone: vi.fn(async () => true),
|
|
289
289
|
};
|
|
290
|
-
const svc = new KbSyncService(
|
|
290
|
+
const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x', 'juan/y']));
|
|
291
291
|
const first = svc.sync({ branches: ['main'] });
|
|
292
292
|
const hookA = svc.sync({ branches: ['ali/x'] });
|
|
293
293
|
const hookB = svc.sync({ branches: ['juan/y'] });
|
|
@@ -306,7 +306,7 @@ describe('KbSyncService — a coalesced caller is judged by its own branches', (
|
|
|
306
306
|
describe('KbSyncService — a waiter keeps the branches it asked for', () => {
|
|
307
307
|
it('a caller that edits its array after queueing changes nothing about its sync or its answer', async () => {
|
|
308
308
|
const gate = deferred<void>();
|
|
309
|
-
const
|
|
309
|
+
const versionControl: SyncVersionControlPort = {
|
|
310
310
|
syncWorkspaceFromRemote: vi.fn(async (id: string) => {
|
|
311
311
|
if (id === 'main') await gate.promise;
|
|
312
312
|
return updated(decodeURIComponent(id));
|
|
@@ -315,7 +315,7 @@ describe('KbSyncService — a waiter keeps the branches it asked for', () => {
|
|
|
315
315
|
tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
|
|
316
316
|
retireRemoteGoneClone: vi.fn(async () => true),
|
|
317
317
|
};
|
|
318
|
-
const svc = new KbSyncService(
|
|
318
|
+
const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x', 'juan/y']));
|
|
319
319
|
const first = svc.sync({ branches: ['main'] });
|
|
320
320
|
const asked = ['ali/x'];
|
|
321
321
|
const waiting = svc.sync({ branches: asked });
|
|
@@ -325,6 +325,6 @@ describe('KbSyncService — a waiter keeps the branches it asked for', () => {
|
|
|
325
325
|
await first;
|
|
326
326
|
const r = await waiting;
|
|
327
327
|
expect(r.results.map((x) => x.branch)).toEqual(['ali/x']);
|
|
328
|
-
expect(
|
|
328
|
+
expect(versionControl.syncWorkspaceFromRemote).not.toHaveBeenCalledWith('juan%2Fy');
|
|
329
329
|
});
|
|
330
330
|
});
|
|
@@ -5,7 +5,7 @@ import type { BranchSyncOutcome } from '@bevel-software/platform-shared';
|
|
|
5
5
|
* Hexis "the repository changed" and Hexis brings the clones it holds up to
|
|
6
6
|
* date. The module owns the HTTP surface, the credential check, the payload
|
|
7
7
|
* parsing and the coalescing; every git operation happens behind the
|
|
8
|
-
*
|
|
8
|
+
* version-control port below, never here.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
/** Which branches a caller asked to sync. `'all'` = every clone Hexis holds. */
|
|
@@ -51,8 +51,8 @@ export interface IKbSyncService {
|
|
|
51
51
|
lastSync(): LastSync | null;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
/** The slice of the
|
|
55
|
-
export interface
|
|
54
|
+
/** The slice of the version-control module a sync drives. */
|
|
55
|
+
export interface SyncVersionControlPort {
|
|
56
56
|
syncWorkspaceFromRemote(workspaceId: string): Promise<BranchSyncOutcome>;
|
|
57
57
|
/**
|
|
58
58
|
* Retire the clone of a branch the host deleted, under the branch-lifecycle
|
|
@@ -2,13 +2,13 @@ import type { BranchSyncOutcome } from '@bevel-software/platform-shared';
|
|
|
2
2
|
import { logger } from '../../shared/logging.js';
|
|
3
3
|
|
|
4
4
|
const log = logger('sync');
|
|
5
|
-
import { sanitizeError } from '../
|
|
5
|
+
import { sanitizeError } from '../version-control/index.js';
|
|
6
6
|
import type {
|
|
7
7
|
IKbSyncService,
|
|
8
8
|
LastSync,
|
|
9
9
|
SyncRequest,
|
|
10
10
|
SyncResult,
|
|
11
|
-
|
|
11
|
+
SyncVersionControlPort,
|
|
12
12
|
SyncWorkspacePort,
|
|
13
13
|
} from './kb-sync.interface.js';
|
|
14
14
|
|
|
@@ -44,7 +44,7 @@ export class KbSyncService implements IKbSyncService {
|
|
|
44
44
|
private last: LastSync | null = null;
|
|
45
45
|
|
|
46
46
|
constructor(
|
|
47
|
-
private readonly
|
|
47
|
+
private readonly versionControl: SyncVersionControlPort,
|
|
48
48
|
private readonly workspaces: SyncWorkspacePort,
|
|
49
49
|
private readonly now: () => number = () => Date.now(),
|
|
50
50
|
) {}
|
|
@@ -152,9 +152,9 @@ export class KbSyncService implements IKbSyncService {
|
|
|
152
152
|
}
|
|
153
153
|
let outcome: BranchSyncOutcome;
|
|
154
154
|
try {
|
|
155
|
-
outcome = await this.
|
|
155
|
+
outcome = await this.versionControl.syncWorkspaceFromRemote(id);
|
|
156
156
|
} catch (err) {
|
|
157
|
-
// The
|
|
157
|
+
// The version-control sync step promises outcomes, not throws — but one broken
|
|
158
158
|
// clone must never take the other branches, the sweep, or every
|
|
159
159
|
// coalesced caller down with it, so the promise is enforced here too.
|
|
160
160
|
const message = sanitizeError(err);
|
|
@@ -165,11 +165,11 @@ export class KbSyncService implements IKbSyncService {
|
|
|
165
165
|
if (outcome.outcome === 'remote-gone') {
|
|
166
166
|
// The host deleted the branch. Left in place, the stale clone would
|
|
167
167
|
// fail its fetch on every following full sync — and a webhook host
|
|
168
|
-
// disables a subscription that keeps failing. The
|
|
168
|
+
// disables a subscription that keeps failing. The version-control service retires it
|
|
169
169
|
// under the branch-lifecycle lock, after asking origin again, so a
|
|
170
170
|
// branch recreated since the pull keeps its clone. Best-effort.
|
|
171
171
|
try {
|
|
172
|
-
const removed = await this.
|
|
172
|
+
const removed = await this.versionControl.retireRemoteGoneClone(id);
|
|
173
173
|
if (removed) log.info(`removed the clone of "${branch}" — deleted on the host`);
|
|
174
174
|
else log.info(`kept the clone of "${branch}" — it is back on the host, or already gone`);
|
|
175
175
|
} catch (err) {
|
|
@@ -183,7 +183,7 @@ export class KbSyncService implements IKbSyncService {
|
|
|
183
183
|
// pointed at it. Best-effort — it fails safe by closing nothing.
|
|
184
184
|
let closedDeletedBranch = 0;
|
|
185
185
|
try {
|
|
186
|
-
closedDeletedBranch = await this.
|
|
186
|
+
closedDeletedBranch = await this.versionControl.closeChangeRequestsWithDeletedBranches();
|
|
187
187
|
} catch (err) {
|
|
188
188
|
log.warn('deleted-branch sweep failed:', { err });
|
|
189
189
|
}
|
|
@@ -192,7 +192,7 @@ export class KbSyncService implements IKbSyncService {
|
|
|
192
192
|
// large repository, and the sync (often a webhook with a short timeout)
|
|
193
193
|
// must not wait on it. It never throws; the catch is for a mock or a
|
|
194
194
|
// future change that does.
|
|
195
|
-
void this.
|
|
195
|
+
void this.versionControl.tidyAfterSweep().catch((err: unknown) => log.warn('post-sync tidy-up failed:', { err }));
|
|
196
196
|
|
|
197
197
|
const result: SyncResult = {
|
|
198
198
|
status: KbSyncService.statusOf(results),
|
|
@@ -9,7 +9,7 @@ import express from 'express';
|
|
|
9
9
|
import type { AuthUser } from '@bevel-software/platform-shared';
|
|
10
10
|
|
|
11
11
|
import { MarketplaceRepoService, type MarketplaceCompiler } from '../marketplace-repo.service.js';
|
|
12
|
-
import { NodeGitRunner } from '../../
|
|
12
|
+
import { NodeGitRunner } from '../../version-control/git/node-git-runner.js';
|
|
13
13
|
import {
|
|
14
14
|
GitHubFacadeCredentialsService,
|
|
15
15
|
GitHubFacade,
|
|
@@ -10,7 +10,7 @@ import type { AuthUser } from '@bevel-software/platform-shared';
|
|
|
10
10
|
|
|
11
11
|
import { MarketplaceRepoService, type MarketplaceCompiler } from '../marketplace-repo.service.js';
|
|
12
12
|
import { createMarketplaceGitRoutes } from '../git-http.routes.js';
|
|
13
|
-
import { NodeGitRunner } from '../../
|
|
13
|
+
import { NodeGitRunner } from '../../version-control/git/node-git-runner.js';
|
|
14
14
|
import type { VirtualTree } from '../../plugins/compile/compile-marketplace.js';
|
|
15
15
|
|
|
16
16
|
const execFileAsync = promisify(execFile);
|
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
flattenDiscoveredTool,
|
|
7
7
|
toCallToolResult,
|
|
8
8
|
toListedTool,
|
|
9
|
-
} from '
|
|
10
|
-
import type { ProxiedTool } from '
|
|
9
|
+
} from '@bevel-software/platform-mcp-core';
|
|
10
|
+
import type { ProxiedTool } from '@bevel-software/platform-mcp-core';
|
|
11
11
|
|
|
12
12
|
function utcpTool(name: string, bodyProps: Record<string, unknown>, required: string[] = []): UtcpTool {
|
|
13
13
|
return {
|
|
@@ -72,8 +72,10 @@ describe('toListedTool', () => {
|
|
|
72
72
|
const listed = toListedTool(proxied({ mcpName: 'gmail_send_email' }));
|
|
73
73
|
expect(listed).toEqual({
|
|
74
74
|
name: 'gmail_send_email',
|
|
75
|
+
title: 'Gmail send email',
|
|
75
76
|
description: 'Call: m.t({})\n\na tool',
|
|
76
77
|
inputSchema: { type: 'object', properties: {} },
|
|
78
|
+
annotations: { readOnlyHint: false },
|
|
77
79
|
});
|
|
78
80
|
});
|
|
79
81
|
|
|
@@ -12,16 +12,15 @@ import { tmpdir } from 'node:os';
|
|
|
12
12
|
import { join } from 'node:path';
|
|
13
13
|
import { createMcpRoutes } from '../mcp.routes.js';
|
|
14
14
|
import { McpService } from '../mcp.service.js';
|
|
15
|
-
import { SpillStore } from '../../workspace/
|
|
16
|
-
import { createManualRoutes } from '../../tool-registry/
|
|
17
|
-
import {
|
|
18
|
-
import { toolDef } from '../../tool-helpers/tool-def.js';
|
|
15
|
+
import { SpillStore } from '../../workspace/index.js';
|
|
16
|
+
import { ToolRegistry, createManualRoutes } from '../../tool-registry/index.js';
|
|
17
|
+
import { toolDef } from '../../tool-helpers/index.js';
|
|
19
18
|
import { DEFAULT_KB_LAYOUT } from '@bevel-software/platform-shared';
|
|
20
19
|
import { platformInstructions } from '../../agent-instructions/index.js';
|
|
21
20
|
import { startFakeDownstreamMcpServer, type FakeDownstreamMcpServer } from './fake-downstream-mcp-server.js';
|
|
22
|
-
import { registerBevelSecretsVariableLoader } from '../../secrets-vault/
|
|
23
|
-
import type { ForcedRefreshOutcome, ISecretsVaultService } from '../../secrets-vault/
|
|
24
|
-
import type { IToolManualService } from '../../tool-manuals/
|
|
21
|
+
import { registerBevelSecretsVariableLoader } from '../../secrets-vault/index.js';
|
|
22
|
+
import type { ForcedRefreshOutcome, ISecretsVaultService } from '../../secrets-vault/index.js';
|
|
23
|
+
import type { IToolManualService } from '../../tool-manuals/index.js';
|
|
25
24
|
import { setLogger } from '../../../shared/logging.js';
|
|
26
25
|
import type { ILogger } from '../../../shared/logger.contract.js';
|
|
27
26
|
import { formatProbeReport, probeFirstCall } from '../first-call-probe.js';
|
|
@@ -117,6 +116,8 @@ interface PlatformOptions {
|
|
|
117
116
|
/** Bind this port — how a "restarted" platform comes back at the same address. */
|
|
118
117
|
port?: number;
|
|
119
118
|
readAgentPreamble?: () => Promise<string | null>;
|
|
119
|
+
/** The default branch the instructions name, read per request as the composition root wires it. */
|
|
120
|
+
defaultBranch?: () => string;
|
|
120
121
|
/** Extra manuals the catalog serves each caller (beyond the KB manual). */
|
|
121
122
|
manualsFor?: (bearer: string) => unknown[];
|
|
122
123
|
poolNow?: () => number;
|
|
@@ -185,6 +186,7 @@ async function startPlatform(opts: PlatformOptions = {}): Promise<Platform> {
|
|
|
185
186
|
spillStore: new SpillStore(join(tmpdir(), 'bevel-test-spills')),
|
|
186
187
|
publicFrontendUrl: 'http://localhost:5173',
|
|
187
188
|
readAgentPreamble: opts.readAgentPreamble,
|
|
189
|
+
defaultBranch: opts.defaultBranch,
|
|
188
190
|
downstreamPool: opts.poolNow ? { now: opts.poolNow } : undefined,
|
|
189
191
|
}, opts.secretsVault, opts.toolManuals);
|
|
190
192
|
const stub = {} as never;
|
|
@@ -487,11 +489,28 @@ describe('agent instructions over the real transport', () => {
|
|
|
487
489
|
it('the initialize result carries the platform text and the preamble body inline', async () => {
|
|
488
490
|
const { baseUrl } = await startPlatform({
|
|
489
491
|
readAgentPreamble: async () => 'Acme builds solar farms.\n\n<!-- private -->Look in Projects/ first.',
|
|
492
|
+
defaultBranch: () => 'target-company-state',
|
|
490
493
|
});
|
|
491
494
|
const { client } = await connectSdkClient(baseUrl);
|
|
492
495
|
const instructions = client.getInstructions();
|
|
493
|
-
expect(instructions).toBe(
|
|
496
|
+
expect(instructions).toBe(
|
|
497
|
+
`${platformInstructions(DEFAULT_KB_LAYOUT, 'target-company-state')}\n\nAcme builds solar farms.\n\nLook in Projects/ first.`,
|
|
498
|
+
);
|
|
494
499
|
expect(instructions).not.toContain('private');
|
|
500
|
+
// The deployment's default branch, by its own name — not `main`.
|
|
501
|
+
expect(instructions).toContain("This knowledge base's default branch is `target-company-state`");
|
|
502
|
+
});
|
|
503
|
+
|
|
504
|
+
it('a default branch renamed between two initializes is the one the second names', async () => {
|
|
505
|
+
let branch = 'target-company-state';
|
|
506
|
+
const { baseUrl } = await startPlatform({ defaultBranch: () => branch });
|
|
507
|
+
const { client: before } = await connectSdkClient(baseUrl);
|
|
508
|
+
branch = 'company-state';
|
|
509
|
+
const { client: after } = await connectSdkClient(baseUrl);
|
|
510
|
+
expect(after.getInstructions()).toContain("This knowledge base's default branch is `company-state`");
|
|
511
|
+
expect(after.getInstructions()).not.toContain('target-company-state');
|
|
512
|
+
// Nothing else moved: the text is the old one with the name swapped.
|
|
513
|
+
expect(after.getInstructions()).toBe(before.getInstructions()!.replaceAll('target-company-state', 'company-state'));
|
|
495
514
|
});
|
|
496
515
|
|
|
497
516
|
it('a later initialize on the SAME process after the file changed carries the new text — read per request', async () => {
|
|
@@ -651,6 +670,7 @@ describe('proxied third-party MCP servers: a rejected token gets one refresh and
|
|
|
651
670
|
} as unknown as ISecretsVaultService;
|
|
652
671
|
registerBevelSecretsVariableLoader(vault);
|
|
653
672
|
const toolManuals = {
|
|
673
|
+
sharedSignInKeysForManual: async () => [],
|
|
654
674
|
userScopedKeysForManual: async (manual: string) =>
|
|
655
675
|
manual === 'notion' ? [{ key: KEY, name: 'ACCESS_TOKEN', label: 'Notion sign-in', oauth: true }] : [],
|
|
656
676
|
} as unknown as IToolManualService;
|
|
@@ -770,6 +790,45 @@ describe('proxied third-party MCP servers: a rejected token gets one refresh and
|
|
|
770
790
|
expect(refreshLines(logs)[0]).toContain('manual=\\"notion\\" user=\\"user-A\\" outcome=rejected');
|
|
771
791
|
});
|
|
772
792
|
|
|
793
|
+
it('a WORKSPACE connection rejected on refresh tells the caller a tool owner has to reconnect it, and does not retry', async () => {
|
|
794
|
+
quiet();
|
|
795
|
+
let valid = 'token-1';
|
|
796
|
+
downstream = await startFakeDownstreamMcpServer({ acceptsToken: (t) => t === valid });
|
|
797
|
+
// The same sign-in, declared as one shared connection: the manual reports
|
|
798
|
+
// it under `sharedSignInKeysForManual`, the vault under the owner's row.
|
|
799
|
+
const state = { token: 'token-1' as string | null, refreshes: 0 };
|
|
800
|
+
const vault = {
|
|
801
|
+
resolve: async (_userId: string, key: string) => (key === KEY ? state.token : null),
|
|
802
|
+
statusFor: async (_userId: string, keys: string[]) =>
|
|
803
|
+
keys.map((key) => ({ key, adminConfigured: true, adminKind: 'oauth', userConfigured: false, adminAuthorized: state.token !== null })),
|
|
804
|
+
forceRefresh: async (_userId: string, key: string) => {
|
|
805
|
+
expect(key).toBe(KEY);
|
|
806
|
+
state.refreshes += 1;
|
|
807
|
+
state.token = null;
|
|
808
|
+
return 'rejected' as const;
|
|
809
|
+
},
|
|
810
|
+
} as unknown as ISecretsVaultService;
|
|
811
|
+
registerBevelSecretsVariableLoader(vault);
|
|
812
|
+
const toolManuals = {
|
|
813
|
+
sharedSignInKeysForManual: async (manual: string) =>
|
|
814
|
+
manual === 'notion' ? [{ key: KEY, name: 'ACCESS_TOKEN', label: 'Notion sign-in' }] : [],
|
|
815
|
+
userScopedKeysForManual: async () => [],
|
|
816
|
+
} as unknown as IToolManualService;
|
|
817
|
+
const { baseUrl } = await startPlatform({ manualsFor: notionManual(downstream), secretsVault: vault, toolManuals });
|
|
818
|
+
const { client } = await connectSdkClient(baseUrl);
|
|
819
|
+
await client.callTool({ name: 'notion_srv_echo', arguments: { text: 'one' } });
|
|
820
|
+
|
|
821
|
+
valid = 'nothing-valid-any-more';
|
|
822
|
+
|
|
823
|
+
const res = await client.callTool({ name: 'notion_srv_echo', arguments: { text: 'two' } });
|
|
824
|
+
expect(res.isError).toBe(true);
|
|
825
|
+
expect(toolText(res)).toContain('The workspace connection for "notion" was rejected by the provider and has been disconnected');
|
|
826
|
+
expect(toolText(res)).toContain('A tool owner has to reconnect it on http://localhost:5173/connect');
|
|
827
|
+
expect(toolText(res)).not.toContain('Your sign-in');
|
|
828
|
+
expect(state.refreshes).toBe(1);
|
|
829
|
+
expect(downstream.executions()).toBe(1); // nothing was retried against a dead workspace grant
|
|
830
|
+
});
|
|
831
|
+
|
|
773
832
|
it('transient refresh failure: the original error comes back, the token is kept, and a later call tries again', async () => {
|
|
774
833
|
quiet();
|
|
775
834
|
let now = 1_000_000;
|
|
@@ -940,6 +999,7 @@ describe('proxied third-party MCP servers: a rejected token gets one refresh and
|
|
|
940
999
|
const { state, vault } = fakeSignIn('token-1', () => 'refreshed');
|
|
941
1000
|
const boom = new Error('catalog read failed\u009b31m\nerror: forged by the manual name\u2028tail');
|
|
942
1001
|
const toolManuals = {
|
|
1002
|
+
sharedSignInKeysForManual: async () => [],
|
|
943
1003
|
userScopedKeysForManual: async (manual: string) => {
|
|
944
1004
|
if (broken) throw boom;
|
|
945
1005
|
return manual === 'notion' ? [{ key: KEY, name: 'ACCESS_TOKEN', label: 'Notion sign-in', oauth: true }] : [];
|
|
@@ -1061,6 +1121,7 @@ describe('proxied third-party MCP servers: a rejected token gets one refresh and
|
|
|
1061
1121
|
} as unknown as ISecretsVaultService;
|
|
1062
1122
|
registerBevelSecretsVariableLoader(withKind);
|
|
1063
1123
|
const toolManuals = {
|
|
1124
|
+
sharedSignInKeysForManual: async () => [],
|
|
1064
1125
|
userScopedKeysForManual: async (manual: string) =>
|
|
1065
1126
|
manual === 'notion' ? [{ key: KEY, name: 'ACCESS_TOKEN', label: 'Notion key', oauth: false }] : [],
|
|
1066
1127
|
} as unknown as IToolManualService;
|