@bevel-software/platform-core-backend 0.34.0 → 0.36.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-guide/access-control.md +146 -300
- package/agent-guide/conventions.md +23 -25
- package/agent-guide/directory-structure.md +72 -120
- package/agent-guide/drafts-and-change-requests.md +92 -0
- package/agent-guide/for-git-users.md +47 -0
- package/agent-guide/glossary.md +36 -0
- package/agent-guide/how-agents-find-things.md +49 -0
- package/agent-guide/html-views.md +16 -11
- package/agent-guide/new-knowledge-base.md +9 -8
- package/agent-guide/onboarding.md +111 -0
- package/agent-guide/skills.md +67 -42
- package/agent-guide/start-here.md +66 -0
- package/agent-guide/tool-manuals.md +133 -154
- package/agent-guide/tools.md +67 -0
- package/agent-guide/where-a-new-file-goes.md +45 -28
- package/dist/core/catalog-cache-invalidation.d.ts +2 -2
- package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
- package/dist/core/compose-embed.d.ts +2 -2
- package/dist/core/compose-embed.d.ts.map +1 -1
- package/dist/core/compose-embed.js +1 -1
- package/dist/core/compose-embed.js.map +1 -1
- package/dist/core/core-ports.d.ts +19 -4
- package/dist/core/core-ports.d.ts.map +1 -1
- package/dist/core/core-ports.js.map +1 -1
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +27 -25
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +25 -13
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +75 -60
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +4 -4
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +5 -5
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core-config.d.ts +2 -2
- package/dist/core-config.js +3 -3
- package/dist/core-config.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.interface.d.ts +22 -0
- package/dist/modules/access/access-control.interface.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +3 -1
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +76 -1
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access-declarations.d.ts +2 -2
- package/dist/modules/access/access-declarations.d.ts.map +1 -1
- package/dist/modules/access/access-declarations.js +2 -2
- package/dist/modules/access/access-declarations.js.map +1 -1
- package/dist/modules/access/access-mutation.service.d.ts +2 -2
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
- package/dist/modules/access/access-mutation.service.js +2 -2
- package/dist/modules/access/access-mutation.service.js.map +1 -1
- package/dist/modules/access/access-requests.routes.d.ts +2 -2
- package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
- package/dist/modules/access/access-requests.routes.js +5 -5
- package/dist/modules/access/access-requests.routes.js.map +1 -1
- package/dist/modules/access/access-requests.service.d.ts +2 -2
- package/dist/modules/access/access-requests.service.d.ts.map +1 -1
- package/dist/modules/access/access-requests.service.js +11 -11
- package/dist/modules/access/access-requests.service.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts +2 -2
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +32 -13
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/admin-locked-commit.d.ts +5 -5
- package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
- package/dist/modules/access/admin-locked-commit.js +7 -7
- package/dist/modules/access/admin-locked-commit.js.map +1 -1
- package/dist/modules/access/admin-route-helpers.d.ts +1 -1
- package/dist/modules/access/admin-route-helpers.js +5 -5
- package/dist/modules/access/admin-route-helpers.js.map +1 -1
- package/dist/modules/access/change-read-gate.d.ts +1 -1
- package/dist/modules/access/change-read-gate.js +1 -1
- package/dist/modules/access/groups-admin.service.d.ts +7 -7
- package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.service.js +6 -6
- package/dist/modules/access/groups-admin.service.js.map +1 -1
- package/dist/modules/access/index.d.ts +1 -1
- package/dist/modules/access/index.d.ts.map +1 -1
- package/dist/modules/access/reference-scan.d.ts +1 -1
- package/dist/modules/access/roles-admin.service.d.ts +7 -7
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
- package/dist/modules/access/roles-admin.service.js +8 -8
- package/dist/modules/access/roles-admin.service.js.map +1 -1
- package/dist/modules/access/synced-groups-committer.d.ts +4 -4
- package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-committer.js +7 -7
- package/dist/modules/access/synced-groups-committer.js.map +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts +6 -6
- package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
- package/dist/modules/access/user-access-removal.service.js +4 -4
- package/dist/modules/access/user-access-removal.service.js.map +1 -1
- package/dist/modules/access-model/access-errors.d.ts +4 -4
- package/dist/modules/access-model/access-errors.d.ts.map +1 -1
- package/dist/modules/access-model/access-errors.js +4 -4
- package/dist/modules/access-model/access-errors.js.map +1 -1
- package/dist/modules/access-model/access-grammar.d.ts +1 -1
- package/dist/modules/access-model/access-grammar.js +4 -4
- package/dist/modules/access-model/change-gate.d.ts +1 -1
- package/dist/modules/access-model/change-gate.js +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts +4 -4
- package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.js +4 -4
- package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.d.ts +63 -18
- package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.js +144 -30
- package/dist/modules/agent-guide/agent-guide.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.d.ts +6 -2
- package/dist/modules/agent-guide/agent-guide.tools.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.js +45 -31
- package/dist/modules/agent-guide/agent-guide.tools.js.map +1 -1
- package/dist/modules/agent-guide/guide-budget.d.ts +51 -0
- package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -0
- package/dist/modules/agent-guide/guide-budget.js +71 -0
- package/dist/modules/agent-guide/guide-budget.js.map +1 -0
- package/dist/modules/agent-guide/index.d.ts +2 -1
- package/dist/modules/agent-guide/index.d.ts.map +1 -1
- package/dist/modules/agent-guide/index.js +2 -1
- package/dist/modules/agent-guide/index.js.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +12 -5
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.js +13 -6
- package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
- package/dist/modules/agent-instructions/compose.d.ts +15 -8
- package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
- package/dist/modules/agent-instructions/compose.js +28 -10
- package/dist/modules/agent-instructions/compose.js.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.d.ts +14 -6
- package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.js +60 -18
- package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
- package/dist/modules/auth/account-erasure.service.d.ts +36 -7
- package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
- package/dist/modules/auth/account-erasure.service.js +30 -10
- package/dist/modules/auth/account-erasure.service.js.map +1 -1
- package/dist/modules/auth/account-hooks.d.ts +20 -0
- package/dist/modules/auth/account-hooks.d.ts.map +1 -1
- package/dist/modules/auth/account-hooks.js +10 -0
- package/dist/modules/auth/account-hooks.js.map +1 -1
- package/dist/modules/auth/account-switch-lock.js +2 -2
- package/dist/modules/auth/account-switch-lock.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts +7 -2
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +23 -4
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +1 -1
- package/dist/modules/auth/auth.service.js +4 -4
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/index.d.ts +1 -0
- package/dist/modules/auth/index.d.ts.map +1 -1
- package/dist/modules/code-mode/code-mode.tool.js +2 -2
- package/dist/modules/code-mode/code-mode.tool.js.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.d.ts +0 -12
- package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.js +1 -38
- package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
- package/dist/modules/database/core-schema.js +2 -2
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/diff/diff.routes.d.ts +3 -3
- package/dist/modules/diff/diff.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.js +7 -7
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/embed/embed.routes.js +1 -1
- package/dist/modules/embed/embed.routes.js.map +1 -1
- package/dist/modules/embed/embed.service.d.ts +4 -4
- package/dist/modules/embed/embed.service.d.ts.map +1 -1
- package/dist/modules/embed/embed.service.js +18 -18
- package/dist/modules/embed/embed.service.js.map +1 -1
- package/dist/modules/kb-fs/branch-name.js +8 -8
- package/dist/modules/kb-fs/branch-name.js.map +1 -1
- package/dist/modules/kb-fs/file-change-notifier.d.ts +2 -2
- package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -9
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +27 -27
- package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/repo-path.js +5 -5
- package/dist/modules/kb-fs/repo-path.js.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
- package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.js +2 -2
- package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
- package/dist/modules/kb-sync/index.d.ts +1 -1
- package/dist/modules/kb-sync/index.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js +10 -10
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +11 -4
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +80 -53
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
- package/dist/modules/onboarding/onboarding.routes.js +2 -2
- package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.d.ts +4 -4
- package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.js +4 -4
- package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.js +7 -7
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
- package/dist/modules/plugins/join-requests.service.d.ts +3 -3
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +5 -5
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.js +1 -1
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +2 -2
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +8 -8
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +87 -2
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js +635 -74
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +3 -2
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js +2 -1
- package/dist/modules/secrets-vault/index.js.map +1 -1
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +205 -11
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.contract.js +27 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +206 -45
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
- package/dist/modules/settings/connection-check.js +1 -1
- package/dist/modules/settings/connection-check.js.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +1 -1
- package/dist/modules/settings/git-root-folders.js +1 -1
- package/dist/modules/settings/git-root-folders.js.map +1 -1
- package/dist/modules/settings/oidc-check.d.ts.map +1 -1
- package/dist/modules/settings/oidc-check.js +5 -17
- package/dist/modules/settings/oidc-check.js.map +1 -1
- package/dist/modules/settings/setup.routes.d.ts +1 -1
- package/dist/modules/settings/setup.routes.js +1 -1
- package/dist/modules/skills/pending-skills.service.d.ts +3 -3
- package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
- package/dist/modules/skills/pending-skills.service.js +4 -4
- package/dist/modules/skills/pending-skills.service.js.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +5 -5
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
- package/dist/modules/skills/skills.tools.js +1 -1
- package/dist/modules/skills/skills.tools.js.map +1 -1
- package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +2 -2
- package/dist/modules/tool-helpers/tool-context.js.map +1 -1
- package/dist/modules/tool-helpers/tool-def.js +1 -1
- package/dist/modules/tool-helpers/tool-def.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +2 -2
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.d.ts +7 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.js +69 -38
- package/dist/modules/tool-manuals/mcp-json-discovery.js.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
- package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
- package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +70 -3
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +18 -8
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +166 -49
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +11 -2
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +66 -24
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
- package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
- package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +53 -49
- package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
- package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
- package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-hooks.js.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
- package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
- package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
- package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
- package/dist/modules/version-control/event-bus.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
- package/dist/modules/version-control/event-bus.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
- package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
- package/dist/modules/version-control/events-delivery.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
- package/dist/modules/version-control/events.routes.d.ts.map +1 -0
- package/dist/modules/version-control/events.routes.js.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
- package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
- package/dist/modules/version-control/file-lock.service.js.map +1 -0
- package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
- package/dist/modules/version-control/git/change-request-link.js.map +1 -0
- package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
- package/dist/modules/version-control/git/git-version.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.d.ts +8 -8
- package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.js +53 -53
- package/dist/modules/version-control/git/git.service.js.map +1 -0
- package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
- package/dist/modules/version-control/git/merge-commit.js.map +1 -0
- package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
- package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
- package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
- package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
- package/dist/modules/version-control/index.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/index.js +3 -2
- package/dist/modules/version-control/index.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
- package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
- package/dist/modules/version-control/pending-commits.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
- package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
- package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
- package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
- package/dist/modules/version-control/read-on-branch.js.map +1 -0
- package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
- package/dist/modules/version-control/recovery-bot.js.map +1 -0
- package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
- package/dist/modules/version-control/sanitize-error.js.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +4 -4
- package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +3 -3
- package/dist/modules/version-control/version-control-hooks.js.map +1 -0
- package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
- package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
- package/dist/modules/version-control/version-control.routes.js.map +1 -0
- package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -31
- package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +89 -94
- package/dist/modules/version-control/version-control.service.js.map +1 -0
- package/dist/modules/workspace/agent-access.gate.d.ts +6 -6
- package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
- package/dist/modules/workspace/agent-access.gate.js +2 -2
- package/dist/modules/workspace/agent-access.gate.js.map +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
- package/dist/modules/workspace/git-internals.middleware.js +2 -2
- package/dist/modules/workspace/kb-repository.js +1 -1
- package/dist/modules/workspace/kb-repository.js.map +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-git.js +1 -1
- package/dist/modules/workspace/startup/kb-git.js.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
- package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.js +8 -5
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
- package/dist/modules/workspace/workspace-tmp.js +3 -3
- package/dist/modules/workspace/workspace-tmp.js.map +1 -1
- package/dist/modules/workspace/workspace.routes.d.ts +4 -4
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +22 -22
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +6 -6
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +11 -11
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +5 -3
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +85 -30
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/shared/canonical-file-identity.d.ts +2 -2
- package/dist/shared/canonical-file-identity.js +5 -5
- package/dist/shared/canonical-file-identity.js.map +1 -1
- package/dist/shared/domain-errors.d.ts +39 -39
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +44 -44
- package/dist/shared/domain-errors.js.map +1 -1
- package/dist/shared/git.contract.d.ts +1 -1
- package/dist/shared/git.contract.js +1 -1
- package/dist/shared/http-errors.d.ts +3 -3
- package/dist/shared/http-errors.d.ts.map +1 -1
- package/dist/shared/http-errors.js +1 -1
- package/dist/shared/http-errors.js.map +1 -1
- package/dist/shared/oauth-token-error.d.ts +23 -0
- package/dist/shared/oauth-token-error.d.ts.map +1 -0
- package/dist/shared/oauth-token-error.js +47 -0
- package/dist/shared/oauth-token-error.js.map +1 -0
- package/dist/shared/pending-proposals.d.ts +3 -3
- package/dist/shared/pending-proposals.d.ts.map +1 -1
- package/dist/shared/pending-proposals.js +2 -2
- package/dist/shared/pending-proposals.js.map +1 -1
- package/dist/shared/read-capped.d.ts +19 -0
- package/dist/shared/read-capped.d.ts.map +1 -0
- package/dist/shared/read-capped.js +45 -0
- package/dist/shared/read-capped.js.map +1 -0
- package/dist/tenancy/static-tenant-source.js +1 -1
- package/dist/tenancy/static-tenant-source.js.map +1 -1
- package/migrations/0012_agent_audit.sql +40 -40
- package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
- package/migrations/meta/0012_snapshot.json +2246 -2246
- package/migrations/meta/0013_snapshot.json +2258 -2258
- package/package.json +5 -4
- package/src/__tests__/account-admin.ts +27 -0
- package/src/__tests__/hexis-catalog.ts +144 -0
- package/src/__tests__/kb-context.ts +30 -30
- package/src/__tests__/kb-layout-config.test.ts +21 -0
- package/src/__tests__/open-change-gate.ts +1 -1
- package/src/__tests__/real-disk.ts +21 -0
- package/src/__tests__/tokens.ts +19 -0
- package/src/__tests__/tool-handler.ts +15 -0
- package/src/__tests__/tool-manuals.ts +32 -0
- package/src/__tests__/tool-wiring.ts +31 -0
- package/src/__tests__/workspace-service.ts +1 -1
- package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
- package/src/core/__tests__/compose-embed.test.ts +1 -1
- package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
- package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
- package/src/core/__tests__/gated-boot.test.ts +2 -2
- package/src/core/__tests__/lifecycle.test.ts +9 -9
- package/src/core/__tests__/oauth-sign-in-real-file.test.ts +179 -0
- package/src/core/catalog-cache-invalidation.ts +2 -2
- package/src/core/compose-embed.ts +3 -3
- package/src/core/core-ports.ts +19 -4
- package/src/core/create-core-server.ts +40 -26
- package/src/core/create-core-services.ts +92 -66
- package/src/core/lifecycle.ts +9 -9
- package/src/core-config.ts +3 -3
- package/src/index.ts +5 -5
- package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
- package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
- package/src/modules/access/__tests__/access-requests.routes.test.ts +20 -20
- package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
- package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +54 -14
- package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
- package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
- package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
- package/src/modules/access/__tests__/groups-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/holder-changes.test.ts +127 -0
- package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
- package/src/modules/access/__tests__/roles-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/roles-capabilities.test.ts +19 -19
- package/src/modules/access/__tests__/roles.routes.test.ts +6 -6
- package/src/modules/access/__tests__/synced-groups-committer.test.ts +13 -13
- package/src/modules/access/__tests__/user-access-removal.service.test.ts +29 -29
- package/src/modules/access/access-control.interface.ts +26 -0
- package/src/modules/access/access-control.service.ts +93 -1
- package/src/modules/access/access-declarations.ts +2 -2
- package/src/modules/access/access-mutation.service.ts +2 -2
- package/src/modules/access/access-requests.routes.ts +7 -7
- package/src/modules/access/access-requests.service.ts +13 -13
- package/src/modules/access/access.routes.ts +34 -15
- package/src/modules/access/admin-locked-commit.ts +11 -11
- package/src/modules/access/admin-route-helpers.ts +5 -5
- package/src/modules/access/change-read-gate.ts +1 -1
- package/src/modules/access/groups-admin.service.ts +7 -7
- package/src/modules/access/index.ts +1 -1
- package/src/modules/access/reference-scan.ts +1 -1
- package/src/modules/access/roles-admin.service.ts +9 -9
- package/src/modules/access/synced-groups-committer.ts +11 -11
- package/src/modules/access/user-access-removal.service.ts +7 -7
- package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
- package/src/modules/access-model/access-errors.ts +4 -4
- package/src/modules/access-model/access-grammar.ts +4 -4
- package/src/modules/access-model/change-gate.ts +1 -1
- package/src/modules/access-model/roles-yaml-guard.ts +4 -4
- package/src/modules/agent-guide/__tests__/agent-guide.test.ts +98 -29
- package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +39 -12
- package/src/modules/agent-guide/__tests__/guide-budget.test.ts +95 -0
- package/src/modules/agent-guide/__tests__/guide-eval.test.ts +182 -0
- package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +263 -0
- package/src/modules/agent-guide/__tests__/tool-surface.json +514 -0
- package/src/modules/agent-guide/__tests__/tool-surface.test.ts +75 -0
- package/src/modules/agent-guide/agent-guide.tools.ts +49 -31
- package/src/modules/agent-guide/agent-guide.ts +165 -32
- package/src/modules/agent-guide/guide-budget.ts +77 -0
- package/src/modules/agent-guide/index.ts +12 -0
- package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
- package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
- package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +117 -11
- package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
- package/src/modules/agent-instructions/compose.ts +28 -9
- package/src/modules/agent-instructions/shared-file-rules.ts +62 -18
- package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
- package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
- package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
- package/src/modules/audit/event-classifier.ts +155 -155
- package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
- package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
- package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
- package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
- package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
- package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
- package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
- package/src/modules/auth/account-erasure.service.ts +27 -9
- package/src/modules/auth/account-hooks.ts +34 -0
- package/src/modules/auth/account-switch-lock.ts +2 -2
- package/src/modules/auth/account.routes.ts +23 -5
- package/src/modules/auth/auth.service.ts +4 -4
- package/src/modules/auth/index.ts +1 -0
- package/src/modules/code-mode/code-mode.tool.ts +2 -2
- package/src/modules/connection-probe/__tests__/connection-probe.service.test.ts +5 -24
- package/src/modules/connection-probe/connection-probe.service.ts +1 -34
- package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
- package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
- package/src/modules/database/core-schema.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
- package/src/modules/diff/diff.routes.ts +8 -8
- package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
- package/src/modules/embed/__tests__/embed.service.test.ts +42 -42
- package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
- package/src/modules/embed/embed.routes.ts +1 -1
- package/src/modules/embed/embed.service.ts +17 -17
- package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
- package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +260 -260
- package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +34 -34
- package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
- package/src/modules/kb-fs/branch-name.ts +8 -8
- package/src/modules/kb-fs/file-change-notifier.ts +2 -2
- package/src/modules/kb-fs/locking-filesystem.ts +30 -30
- package/src/modules/kb-fs/repo-path.ts +5 -5
- package/src/modules/kb-fs/tmp-ref.ts +3 -3
- package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
- package/src/modules/kb-sync/index.ts +1 -1
- package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
- package/src/modules/kb-sync/kb-sync.service.ts +9 -9
- package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
- package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
- package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
- package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
- package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
- package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
- package/src/modules/mcp/mcp.service.ts +93 -62
- package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +55 -55
- package/src/modules/onboarding/onboarding.contract.ts +1 -1
- package/src/modules/onboarding/onboarding.routes.ts +2 -2
- package/src/modules/onboarding/starter-pack.service.ts +6 -6
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
- package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
- package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
- package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
- package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
- package/src/modules/plugins/__tests__/plugins.routes.test.ts +25 -25
- package/src/modules/plugins/join-request-jobs.service.ts +10 -10
- package/src/modules/plugins/join-requests.service.ts +4 -4
- package/src/modules/plugins/plugin-rename.service.ts +1 -1
- package/src/modules/plugins/plugins.routes.ts +9 -9
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +458 -4
- package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
- package/src/modules/secrets-vault/__tests__/oauth-live-declaration.route.test.ts +218 -0
- package/src/modules/secrets-vault/__tests__/oauth-return-to.route.test.ts +39 -6
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +728 -118
- package/src/modules/secrets-vault/index.ts +8 -1
- package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
- package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
- package/src/modules/secrets-vault/secrets-vault.contract.ts +213 -11
- package/src/modules/secrets-vault/secrets-vault.routes.ts +244 -45
- package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
- package/src/modules/settings/connection-check.ts +1 -1
- package/src/modules/settings/deployment-settings.service.ts +1 -1
- package/src/modules/settings/git-root-folders.ts +1 -1
- package/src/modules/settings/oidc-check.ts +5 -18
- package/src/modules/settings/setup.routes.ts +1 -1
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
- package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
- package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
- package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
- package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
- package/src/modules/skills/pending-skills.service.ts +3 -3
- package/src/modules/skills/skill-access-requests.routes.ts +7 -7
- package/src/modules/skills/skills.tools.ts +1 -1
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +22 -14
- package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
- package/src/modules/tool-helpers/__tests__/route-tool-schemas.catalog.test.ts +38 -0
- package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
- package/src/modules/tool-helpers/tool-context.ts +6 -6
- package/src/modules/tool-helpers/tool-def.ts +1 -1
- package/src/modules/tool-helpers/tool-handler.ts +2 -2
- package/src/modules/tool-helpers/tool.contract.ts +4 -4
- package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
- package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.mcp-oauth.test.ts +197 -11
- package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +132 -6
- package/src/modules/tool-manuals/mcp-json-discovery.ts +73 -34
- package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
- package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
- package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
- package/src/modules/tool-manuals/tool-manuals.contract.ts +63 -3
- package/src/modules/tool-manuals/tool-manuals.service.ts +191 -51
- package/src/modules/tool-manuals/tool-manuals.tools.ts +93 -28
- package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
- package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
- package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +12 -119
- package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
- package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
- package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
- package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
- package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
- package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
- package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.fork-point-file.test.ts → version-control/__tests__/version-control.routes.fork-point-file.test.ts} +19 -19
- package/src/modules/{workflow/__tests__/workflow.routes.history-read-gate.test.ts → version-control/__tests__/version-control.routes.history-read-gate.test.ts} +13 -13
- package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.open-change-request.test.ts → version-control/__tests__/version-control.routes.open-change-request.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.branch-in-use.test.ts → version-control/__tests__/version-control.service.branch-in-use.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts → version-control/__tests__/version-control.service.deleted-branch-sweep.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +97 -99
- package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
- package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +42 -42
- package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.pg.test.ts → version-control/__tests__/version-control.service.update-change-request.pg.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.test.ts → version-control/__tests__/version-control.service.update-change-request.test.ts} +11 -11
- package/src/modules/{workflow/__tests__/workflow.service.update-from-target.test.ts → version-control/__tests__/version-control.service.update-from-target.test.ts} +22 -22
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
- package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
- package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
- package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +52 -48
- package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
- package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
- package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
- package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
- package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
- package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
- package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +20 -20
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/git.service.ts +57 -57
- package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
- package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
- package/src/modules/{workflow → version-control}/index.ts +6 -5
- package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
- package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
- package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
- package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +3 -3
- package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
- package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +92 -97
- package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
- package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
- package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
- package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
- package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
- package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
- package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
- package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
- package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +12 -14
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +182 -75
- package/src/modules/workspace/agent-access.gate.ts +6 -6
- package/src/modules/workspace/git-internals.middleware.ts +2 -2
- package/src/modules/workspace/kb-repository.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
- package/src/modules/workspace/startup/kb-git.ts +1 -1
- package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
- package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
- package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
- package/src/modules/workspace/startup/steps/template-source.ts +21 -6
- package/src/modules/workspace/workspace-tmp.ts +4 -4
- package/src/modules/workspace/workspace.routes.ts +26 -26
- package/src/modules/workspace/workspace.service.ts +11 -11
- package/src/modules/workspace/workspace.tools.ts +90 -30
- package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
- package/src/shared/__tests__/http-errors.test.ts +4 -4
- package/src/shared/__tests__/read-capped.test.ts +68 -0
- package/src/shared/canonical-file-identity.ts +5 -5
- package/src/shared/domain-errors.ts +44 -44
- package/src/shared/git.contract.ts +1 -1
- package/src/shared/http-errors.ts +3 -3
- package/src/shared/kb-context.ts +130 -130
- package/src/shared/oauth-token-error.ts +46 -0
- package/src/shared/pending-proposals.ts +4 -4
- package/src/shared/read-capped.ts +40 -0
- package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
- package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
- package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
- package/src/tenancy/index.ts +35 -35
- package/src/tenancy/static-tenant-source.ts +1 -1
- package/src/tenancy/tenant-host.ts +261 -261
- package/src/tenancy/tenant-runtime.ts +208 -208
- package/src/tenancy/tenant-source.contract.ts +59 -59
- package/agent-guide/finding-things.md +0 -7
- package/agent-guide/introduction.md +0 -27
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
- package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/change-request-hooks.js.map +0 -1
- package/dist/modules/workflow/event-bus.d.ts.map +0 -1
- package/dist/modules/workflow/event-bus.js.map +0 -1
- package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
- package/dist/modules/workflow/events-delivery.js.map +0 -1
- package/dist/modules/workflow/events.routes.d.ts.map +0 -1
- package/dist/modules/workflow/events.routes.js.map +0 -1
- package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
- package/dist/modules/workflow/file-lock.service.js.map +0 -1
- package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
- package/dist/modules/workflow/git/change-request-link.js.map +0 -1
- package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
- package/dist/modules/workflow/git/git-version.js.map +0 -1
- package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/git.service.js.map +0 -1
- package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
- package/dist/modules/workflow/git/merge-commit.js.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
- package/dist/modules/workflow/index.d.ts.map +0 -1
- package/dist/modules/workflow/index.js.map +0 -1
- package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.service.js.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
- package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
- package/dist/modules/workflow/read-on-branch.js.map +0 -1
- package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
- package/dist/modules/workflow/recovery-bot.js.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
- package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
- package/dist/modules/workflow/sanitize-error.js.map +0 -1
- package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/workflow-hooks.js.map +0 -1
- package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.routes.js.map +0 -1
- package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.service.js.map +0 -1
- package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
- /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
- /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
- /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
- /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
- /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
- /package/src/modules/{workflow → version-control}/sanitize-error.ts +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
|
-
import type { AuthUser,
|
|
2
|
+
import type { AuthUser, IVersionControlService } from '@bevel-software/platform-shared';
|
|
3
3
|
import { logger } from '../../shared/logging.js';
|
|
4
4
|
import type { KbContext } from '../../shared/kb-context.js';
|
|
5
5
|
import { branchForWorkspaceId } from '../../shared/workspace-id.js';
|
|
@@ -48,15 +48,15 @@ export function createAccessRequestRoutes(deps: {
|
|
|
48
48
|
accessControl: IAccessControl;
|
|
49
49
|
workspaceService: WorkspaceService;
|
|
50
50
|
authService: AuthService;
|
|
51
|
-
|
|
51
|
+
versionControl: IVersionControlService;
|
|
52
52
|
lifecycle: IAccessRequestLifecycle;
|
|
53
53
|
kb: KbContext;
|
|
54
54
|
}): express.Router {
|
|
55
|
-
const { accessControl, workspaceService, authService,
|
|
55
|
+
const { accessControl, workspaceService, authService, versionControl, lifecycle, kb } = deps;
|
|
56
56
|
const { kbDirName } = kb;
|
|
57
57
|
const router = express.Router({ mergeParams: true });
|
|
58
58
|
const mutation = new AccessMutationService(workspaceService, accessControl, kbDirName);
|
|
59
|
-
const requests = new AccessRequestsService({
|
|
59
|
+
const requests = new AccessRequestsService({ versionControl, workspaceService, lifecycle, kb });
|
|
60
60
|
|
|
61
61
|
async function requireUser(
|
|
62
62
|
req: express.Request,
|
|
@@ -228,7 +228,7 @@ export function createAccessRequestRoutes(deps: {
|
|
|
228
228
|
res.json({ requests: [] });
|
|
229
229
|
return;
|
|
230
230
|
}
|
|
231
|
-
const crs = await
|
|
231
|
+
const crs = await versionControl.listChangeRequests();
|
|
232
232
|
const rows = await lifecycle.list(target.path, target, crs, user);
|
|
233
233
|
// The note is the request's own column, read back per request.
|
|
234
234
|
// Bounded by the open requests on ONE item — a handful at most — and a
|
|
@@ -236,7 +236,7 @@ export function createAccessRequestRoutes(deps: {
|
|
|
236
236
|
// belongs to.
|
|
237
237
|
const withNotes = await Promise.all(
|
|
238
238
|
rows.map(async (row) => {
|
|
239
|
-
const detail = await
|
|
239
|
+
const detail = await versionControl
|
|
240
240
|
.getChangeRequestDetail(row.number, { patches: false })
|
|
241
241
|
.catch(() => null);
|
|
242
242
|
const note = detail?.accessRequest?.note;
|
|
@@ -265,7 +265,7 @@ export function createAccessRequestRoutes(deps: {
|
|
|
265
265
|
res.status(400).json({ error: 'Invalid change request number' });
|
|
266
266
|
return;
|
|
267
267
|
}
|
|
268
|
-
const cr = await
|
|
268
|
+
const cr = await versionControl.getChangeRequest(number);
|
|
269
269
|
if (!cr) {
|
|
270
270
|
res.status(404).json({ error: 'Not found' });
|
|
271
271
|
return;
|
|
@@ -2,7 +2,7 @@ import path from 'node:path';
|
|
|
2
2
|
import {
|
|
3
3
|
joinBranchFor,
|
|
4
4
|
type AuthUser,
|
|
5
|
-
type
|
|
5
|
+
type IVersionControlService,
|
|
6
6
|
} from '@bevel-software/platform-shared';
|
|
7
7
|
import {
|
|
8
8
|
ChangeRequestConflictsError,
|
|
@@ -78,7 +78,7 @@ export function escapeMarkdown(text: string): string {
|
|
|
78
78
|
export class AccessRequestsService {
|
|
79
79
|
constructor(
|
|
80
80
|
private readonly deps: {
|
|
81
|
-
|
|
81
|
+
versionControl: IVersionControlService;
|
|
82
82
|
workspaceService: WorkspaceService;
|
|
83
83
|
lifecycle: IAccessRequestLifecycle;
|
|
84
84
|
kb: Pick<KbContext, 'defaultBranch' | 'defaultWorkspaceId' | 'kbDirName'>;
|
|
@@ -103,7 +103,7 @@ export class AccessRequestsService {
|
|
|
103
103
|
}): Promise<{ number: number; level: RequestLevel }> {
|
|
104
104
|
const { user, target, itemName, level } = input;
|
|
105
105
|
const note = (input.note ?? '').trim();
|
|
106
|
-
const {
|
|
106
|
+
const { versionControl, workspaceService, kb } = this.deps;
|
|
107
107
|
const wsId = kb.defaultWorkspaceId();
|
|
108
108
|
const branch = this.branchFor(user.email, target);
|
|
109
109
|
|
|
@@ -113,7 +113,7 @@ export class AccessRequestsService {
|
|
|
113
113
|
// it is recut below. The branch name already carries the person, so
|
|
114
114
|
// matching it is matching them.
|
|
115
115
|
const openOnBranch = async () =>
|
|
116
|
-
(await
|
|
116
|
+
(await versionControl.listChangeRequests({ fresh: true })).find(
|
|
117
117
|
(cr) => cr.state === 'open' && cr.branch === branch,
|
|
118
118
|
);
|
|
119
119
|
const existing = await openOnBranch();
|
|
@@ -124,7 +124,7 @@ export class AccessRequestsService {
|
|
|
124
124
|
// got there first, and a message is not a contract. STRICT: the list
|
|
125
125
|
// proves absence, and a listing that could not fetch proves nothing.
|
|
126
126
|
const branchExists = async () =>
|
|
127
|
-
(await
|
|
127
|
+
(await versionControl.listBranches(wsId, { freshFetch: true, strictFetch: true })).some(
|
|
128
128
|
(b) => b.name === branch,
|
|
129
129
|
);
|
|
130
130
|
// A branch still standing here belonged to an ANSWERED request: it holds a
|
|
@@ -144,7 +144,7 @@ export class AccessRequestsService {
|
|
|
144
144
|
let present = await branchExists();
|
|
145
145
|
if (present) {
|
|
146
146
|
try {
|
|
147
|
-
await
|
|
147
|
+
await versionControl.deleteBranch(wsId, branch, user);
|
|
148
148
|
// A delete that RETURNED is proof enough; re-probing here would let a
|
|
149
149
|
// ref list that has not caught up talk us out of cutting the branch we
|
|
150
150
|
// just removed, and the proposal would have nowhere to go.
|
|
@@ -165,7 +165,7 @@ export class AccessRequestsService {
|
|
|
165
165
|
}
|
|
166
166
|
if (!present) {
|
|
167
167
|
try {
|
|
168
|
-
await
|
|
168
|
+
await versionControl.createBranch(wsId, branch, kb.defaultBranch);
|
|
169
169
|
} catch (err) {
|
|
170
170
|
if (!(await branchExists())) throw err;
|
|
171
171
|
}
|
|
@@ -195,7 +195,7 @@ export class AccessRequestsService {
|
|
|
195
195
|
});
|
|
196
196
|
if (onBranch !== spliced.text) {
|
|
197
197
|
await workspaceService.writeFile(ws.id, wsRulesPath, spliced.text);
|
|
198
|
-
await
|
|
198
|
+
await versionControl.commitChanges(
|
|
199
199
|
ws.id,
|
|
200
200
|
user,
|
|
201
201
|
`Request ${LEVEL_LABEL[level].toLowerCase()} access to ${itemName}`,
|
|
@@ -206,7 +206,7 @@ export class AccessRequestsService {
|
|
|
206
206
|
// The level and the note are the request's own columns — what the
|
|
207
207
|
// dialog and the editors' banner read back. The description is for the
|
|
208
208
|
// people who read the request, and says the same things in prose.
|
|
209
|
-
const detail = await
|
|
209
|
+
const detail = await versionControl.openChangeRequest(ws.id, user, {
|
|
210
210
|
sourceBranch: branch,
|
|
211
211
|
targetBranch: kb.defaultBranch,
|
|
212
212
|
title: `Access request: ${itemName}`,
|
|
@@ -260,10 +260,10 @@ export class AccessRequestsService {
|
|
|
260
260
|
* claiming a refusal nobody made.
|
|
261
261
|
*/
|
|
262
262
|
async status(user: AuthUser, target: AccessRequestTarget): Promise<AccessRequestStatus> {
|
|
263
|
-
const {
|
|
263
|
+
const { versionControl } = this.deps;
|
|
264
264
|
const branch = this.branchFor(user.email, target);
|
|
265
265
|
|
|
266
|
-
const open = (await
|
|
266
|
+
const open = (await versionControl.listChangeRequests({ fresh: true })).find(
|
|
267
267
|
(cr) => cr.state === 'open' && cr.branch === branch,
|
|
268
268
|
);
|
|
269
269
|
if (open) {
|
|
@@ -272,7 +272,7 @@ export class AccessRequestsService {
|
|
|
272
272
|
|
|
273
273
|
const level = await this.levelAskedOn(branch, target, user.email);
|
|
274
274
|
if (!level) return { state: 'none' };
|
|
275
|
-
const last = await
|
|
275
|
+
const last = await versionControl.latestClosedChangeRequest(user.email, branch);
|
|
276
276
|
return last ? { state: 'not-accepted', level, number: last.number } : { state: 'none' };
|
|
277
277
|
}
|
|
278
278
|
|
|
@@ -288,7 +288,7 @@ export class AccessRequestsService {
|
|
|
288
288
|
* for, and Can edit is the lesser claim.
|
|
289
289
|
*/
|
|
290
290
|
private async levelOf(number: number): Promise<RequestLevel> {
|
|
291
|
-
const detail = await this.deps.
|
|
291
|
+
const detail = await this.deps.versionControl
|
|
292
292
|
.getChangeRequestDetail(number, { patches: false })
|
|
293
293
|
.catch(() => null);
|
|
294
294
|
return detail?.accessRequest?.level ?? 'write';
|
|
@@ -22,8 +22,8 @@ import type { KbContext } from '../../shared/kb-context.js';
|
|
|
22
22
|
import type { ITreeWalker } from '../../shared/fs.contract.js';
|
|
23
23
|
import { branchForWorkspaceId } from '../../shared/workspace-id.js';
|
|
24
24
|
import type { AuthService, IAccountSwitchGuard } from '../auth/index.js';
|
|
25
|
-
import type {
|
|
26
|
-
import {
|
|
25
|
+
import type { VersionControlService, VersionControlEventBus } from '../version-control/index.js';
|
|
26
|
+
import { VersionControlDomainError } from '../../shared/domain-errors.js';
|
|
27
27
|
import { AccessDeniedError } from '../access-model/index.js';
|
|
28
28
|
import {
|
|
29
29
|
AccessMutationService,
|
|
@@ -90,8 +90,8 @@ export function createAccessRoutes(
|
|
|
90
90
|
authService: AuthService,
|
|
91
91
|
/** Auth's switch-off coordination, for the invite's promotion (`ifActive`). */
|
|
92
92
|
switchGuard: IAccountSwitchGuard,
|
|
93
|
-
|
|
94
|
-
eventBus:
|
|
93
|
+
versionControlService: VersionControlService,
|
|
94
|
+
eventBus: VersionControlEventBus,
|
|
95
95
|
db: Database,
|
|
96
96
|
kb: KbContext,
|
|
97
97
|
/** The composition root's walk, for the roles admin's reference scan. */
|
|
@@ -104,7 +104,7 @@ export function createAccessRoutes(
|
|
|
104
104
|
const mutation = new AccessMutationService(workspaceService, accessControl, kbDirName);
|
|
105
105
|
const rolesAdmin = new RolesAdminService(
|
|
106
106
|
workspaceService,
|
|
107
|
-
|
|
107
|
+
versionControlService,
|
|
108
108
|
accessControl,
|
|
109
109
|
disk,
|
|
110
110
|
kbDirName,
|
|
@@ -414,9 +414,20 @@ export function createAccessRoutes(
|
|
|
414
414
|
* nothing is moved.
|
|
415
415
|
*
|
|
416
416
|
* Gated like the sibling `overrides` route rather than the permissive
|
|
417
|
-
* `GET /access`: the caller must resolve read on the thing being moved
|
|
418
|
-
* lists name people, and someone who cannot
|
|
419
|
-
* learning who can
|
|
417
|
+
* `GET /access`: the caller must resolve read on the thing being moved AND
|
|
418
|
+
* on the destination folder. The lists name people, and someone who cannot
|
|
419
|
+
* see a thing has no business learning who can; the `after` lists and the
|
|
420
|
+
* `changes` are the destination folder's rules read back (whom it grants,
|
|
421
|
+
* whom it denies by name), so a folder the caller may not open tells them
|
|
422
|
+
* nothing either.
|
|
423
|
+
*
|
|
424
|
+
* `changes` is who loses and who gains `read` or `write` in the move, as the
|
|
425
|
+
* resolver judges each candidate on both sides
|
|
426
|
+
* (`prospectiveHolderChanges`) — the one answer the move dialog and the
|
|
427
|
+
* agent's `move_file` both show. The two lists are not that answer: they
|
|
428
|
+
* name grants, so a writer leaving a folder everyone reads shows as losing
|
|
429
|
+
* `read` it keeps, and a person the destination denies by name is on
|
|
430
|
+
* neither list.
|
|
420
431
|
*/
|
|
421
432
|
router.get('/workspace/:id/access/prospective', async (req, res) => {
|
|
422
433
|
const user = await requireUser(req, res);
|
|
@@ -445,13 +456,21 @@ export function createAccessRoutes(
|
|
|
445
456
|
res.status(403).json({ error: 'You do not have access to this file.' });
|
|
446
457
|
return;
|
|
447
458
|
}
|
|
459
|
+
if (!(await accessControl.canRead(req.params.id, user.email, toDir))) {
|
|
460
|
+
res.status(403).json({ error: 'You do not have access to this folder.' });
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
448
463
|
|
|
449
464
|
const name = from.slice(from.lastIndexOf('/') + 1);
|
|
450
465
|
const to = toDir ? `${toDir}/${name}` : name;
|
|
451
|
-
const { before, after } = await
|
|
466
|
+
const [{ before, after }, changes] = await Promise.all([
|
|
467
|
+
accessControl.prospectiveHolders(req.params.id, from, to),
|
|
468
|
+
accessControl.prospectiveHolderChanges(req.params.id, from, to),
|
|
469
|
+
]);
|
|
452
470
|
res.json({
|
|
453
471
|
before: { read: holderPrincipals(before.read), write: holderPrincipals(before.write) },
|
|
454
472
|
after: { read: holderPrincipals(after.read), write: holderPrincipals(after.write) },
|
|
473
|
+
changes,
|
|
455
474
|
});
|
|
456
475
|
} catch (err) {
|
|
457
476
|
const { status, body } = toHttpError(err);
|
|
@@ -859,7 +878,7 @@ export function createAccessRoutes(
|
|
|
859
878
|
user: AuthUser,
|
|
860
879
|
op: () => Promise<void>,
|
|
861
880
|
): Promise<void> {
|
|
862
|
-
const existing = await
|
|
881
|
+
const existing = await versionControlService.getLock(workspaceId, branch, wsEditPath);
|
|
863
882
|
if (existing && existing.holderUserId === user.id) {
|
|
864
883
|
// Caller already holds the lock (mid-edit) — write without touching it.
|
|
865
884
|
await op();
|
|
@@ -875,7 +894,7 @@ export function createAccessRoutes(
|
|
|
875
894
|
eventBus.emit({ kind: 'fs-tree-changed', workspaceId, branch });
|
|
876
895
|
return;
|
|
877
896
|
}
|
|
878
|
-
const acquired = await
|
|
897
|
+
const acquired = await versionControlService.acquireLock(workspaceId, branch, wsEditPath, user);
|
|
879
898
|
if (!acquired.acquired) {
|
|
880
899
|
const holder = acquired.lock.holderName || 'another user';
|
|
881
900
|
const err: Error & { status?: number } = new Error(
|
|
@@ -894,16 +913,16 @@ export function createAccessRoutes(
|
|
|
894
913
|
// upload. Every other failure may have left partial bytes, so it keeps
|
|
895
914
|
// the discarding release.
|
|
896
915
|
if (isFolderGovernsRefusal(err)) {
|
|
897
|
-
await
|
|
916
|
+
await versionControlService.releaseLockUntouched(workspaceId, branch, wsEditPath, user);
|
|
898
917
|
} else {
|
|
899
|
-
await
|
|
918
|
+
await versionControlService.releaseLockNoCommit(workspaceId, branch, wsEditPath, user);
|
|
900
919
|
}
|
|
901
920
|
} catch {
|
|
902
921
|
/* best-effort */
|
|
903
922
|
}
|
|
904
923
|
throw err;
|
|
905
924
|
}
|
|
906
|
-
await
|
|
925
|
+
await versionControlService.releaseLock(workspaceId, branch, wsEditPath, user);
|
|
907
926
|
eventBus.emit({ kind: 'fs-tree-changed', workspaceId, branch });
|
|
908
927
|
}
|
|
909
928
|
|
|
@@ -1219,7 +1238,7 @@ export function createAccessRoutes(
|
|
|
1219
1238
|
if (err instanceof AccessDeniedError || err instanceof AccessMutationError) {
|
|
1220
1239
|
logger('access.revoke.denied').warn(
|
|
1221
1240
|
`ws=${workspaceId} byUserId=${user.id} -> ${
|
|
1222
|
-
err instanceof
|
|
1241
|
+
err instanceof VersionControlDomainError ? err.status : 500
|
|
1223
1242
|
}`,
|
|
1224
1243
|
);
|
|
1225
1244
|
}
|
|
@@ -49,19 +49,19 @@ import path from 'node:path';
|
|
|
49
49
|
import { logger } from '../../shared/logging.js';
|
|
50
50
|
|
|
51
51
|
import { type WriteValidator, LockingFilesystem } from '../kb-fs/index.js';
|
|
52
|
-
import type {
|
|
52
|
+
import type { VersionControlDomainError } from '../../shared/domain-errors.js';
|
|
53
53
|
import { PushNeedsAgentResolutionError } from '../../shared/domain-errors.js';
|
|
54
54
|
import { isAbsence } from '../../shared/fs.contract.js';
|
|
55
|
-
import type { AuthUser, IWorkspaceService,
|
|
55
|
+
import type { AuthUser, IWorkspaceService, IVersionControlService } from '@bevel-software/platform-shared';
|
|
56
56
|
|
|
57
57
|
export interface LockedCommitDeps {
|
|
58
58
|
workspaceService: IWorkspaceService;
|
|
59
|
-
|
|
59
|
+
versionControlService: IVersionControlService;
|
|
60
60
|
kbDirName: string;
|
|
61
61
|
/** Live-binding thunk — DEFAULT_BRANCH stays empty until setup. */
|
|
62
62
|
defaultBranchOf: () => string;
|
|
63
63
|
/** Domain-error constructor (RolesAdminError / GroupsAdminError). */
|
|
64
|
-
makeError: (message: string, status: number, payload?: Record<string, unknown>) =>
|
|
64
|
+
makeError: (message: string, status: number, payload?: Record<string, unknown>) => VersionControlDomainError;
|
|
65
65
|
/** Log prefix, e.g. 'roles-admin' / 'groups-admin'. */
|
|
66
66
|
logTag: string;
|
|
67
67
|
/** Contention wording: what is "being edited by <holder>". */
|
|
@@ -133,7 +133,7 @@ export class AdminLockedCommits {
|
|
|
133
133
|
return new LockingFilesystem(
|
|
134
134
|
{ basePath, contained: true },
|
|
135
135
|
{
|
|
136
|
-
|
|
136
|
+
versionControl: this.deps.versionControlService,
|
|
137
137
|
workspaceId,
|
|
138
138
|
branch: this.defaultBranch,
|
|
139
139
|
user: actor,
|
|
@@ -171,7 +171,7 @@ export class AdminLockedCommits {
|
|
|
171
171
|
* module doc for the release semantics.
|
|
172
172
|
*
|
|
173
173
|
* `opts.coordinationFiles` names files locked ONLY to serialize with their
|
|
174
|
-
* writer — `fn` never writes them. They're acquired with the
|
|
174
|
+
* writer — `fn` never writes them. They're acquired with the version-control
|
|
175
175
|
* service's coordination flag (a pure mutex that skips the per-path write
|
|
176
176
|
* gate — required for machine-owned files like `synced-groups.yaml`, which
|
|
177
177
|
* a human actor may not, and need not, write) and always released with
|
|
@@ -197,7 +197,7 @@ export class AdminLockedCommits {
|
|
|
197
197
|
let unrestored: Set<string> | null = null;
|
|
198
198
|
try {
|
|
199
199
|
for (const p of paths) {
|
|
200
|
-
const res = await this.deps.
|
|
200
|
+
const res = await this.deps.versionControlService.acquireLock(
|
|
201
201
|
workspaceId,
|
|
202
202
|
this.defaultBranch,
|
|
203
203
|
p,
|
|
@@ -248,13 +248,13 @@ export class AdminLockedCommits {
|
|
|
248
248
|
// pointless commit whose enqueue failure strands a known-clean
|
|
249
249
|
// lock until TTL. Or known-partial bytes (restore failed —
|
|
250
250
|
// discarding to HEAD beats committing them).
|
|
251
|
-
await this.deps.
|
|
251
|
+
await this.deps.versionControlService.releaseLockNoCommit(workspaceId, this.defaultBranch, h, actor);
|
|
252
252
|
} else {
|
|
253
253
|
// Push-retry (the enqueued commit retries the share), the
|
|
254
254
|
// restored-failure path, and any held path the batch never
|
|
255
255
|
// committed (commit-on-release: a prior holder's still-queued
|
|
256
256
|
// work must be preserved, never discarded).
|
|
257
|
-
await this.deps.
|
|
257
|
+
await this.deps.versionControlService.releaseLock(workspaceId, this.defaultBranch, h, actor);
|
|
258
258
|
}
|
|
259
259
|
} catch (releaseErr) {
|
|
260
260
|
logger(this.deps.logTag).warn(
|
|
@@ -278,7 +278,7 @@ export class AdminLockedCommits {
|
|
|
278
278
|
files: LockedWrite[],
|
|
279
279
|
summary: string,
|
|
280
280
|
): Promise<void> {
|
|
281
|
-
const { workspaceService,
|
|
281
|
+
const { workspaceService, versionControlService, logTag } = this.deps;
|
|
282
282
|
try {
|
|
283
283
|
for (const f of files) {
|
|
284
284
|
if (f.content === null) {
|
|
@@ -293,7 +293,7 @@ export class AdminLockedCommits {
|
|
|
293
293
|
await workspaceService.writeFile(workspaceId, this.wsRel(f.repoRel), f.content);
|
|
294
294
|
}
|
|
295
295
|
}
|
|
296
|
-
await
|
|
296
|
+
await versionControlService.commitChanges(workspaceId, actor, summary, files.map((f) => this.wsRel(f.repoRel)));
|
|
297
297
|
// Commit landed AND pushed — the tree at these paths is clean. Mark
|
|
298
298
|
// them so withFileLocks releases them WITHOUT enqueueing a release
|
|
299
299
|
// commit (see the module doc — an enqueue failure would strand the
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* groups-admin.routes) — one error shape, one input-coercion rule, so the two
|
|
4
4
|
* surfaces can't drift apart again.
|
|
5
5
|
*
|
|
6
|
-
* Error shape: a sub-500 `
|
|
6
|
+
* Error shape: a sub-500 `VersionControlDomainError` renders as its own status +
|
|
7
7
|
* message + payload; everything else — a raw error OR a 500-status domain
|
|
8
8
|
* error (e.g. AccessMutationService wraps unexpected raw errors in a 500
|
|
9
9
|
* AccessMutationError, message included) — is an INTERNAL error: logged
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
import type express from 'express';
|
|
16
16
|
import { logger } from '../../shared/logging.js';
|
|
17
|
-
import {
|
|
17
|
+
import { VersionControlDomainError } from '../../shared/domain-errors.js';
|
|
18
18
|
import { domainErrorBody } from '../../shared/http-errors.js';
|
|
19
19
|
|
|
20
20
|
/** One error shape for every access-family route. */
|
|
@@ -22,11 +22,11 @@ export function toHttpError(
|
|
|
22
22
|
err: unknown,
|
|
23
23
|
logTag: string,
|
|
24
24
|
): { status: number; body: Record<string, unknown> } {
|
|
25
|
-
if (err instanceof
|
|
25
|
+
if (err instanceof VersionControlDomainError && err.status < 500) {
|
|
26
26
|
return { status: err.status, body: domainErrorBody(err) };
|
|
27
27
|
}
|
|
28
28
|
logger(logTag).error('route failure:', { err });
|
|
29
|
-
const status = err instanceof
|
|
29
|
+
const status = err instanceof VersionControlDomainError ? err.status : 500;
|
|
30
30
|
return { status, body: { error: 'Internal error.' } };
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -49,7 +49,7 @@ export function requireNonEmptyString(
|
|
|
49
49
|
opts?: { trim?: boolean },
|
|
50
50
|
): string {
|
|
51
51
|
if (typeof value !== 'string' || value.trim() === '') {
|
|
52
|
-
throw new
|
|
52
|
+
throw new VersionControlDomainError(`${field} must be a non-empty string`, 400);
|
|
53
53
|
}
|
|
54
54
|
return opts?.trim ? value.trim() : value;
|
|
55
55
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Read-before-write: the gate every change passes on its way to the lock
|
|
3
|
-
* (`
|
|
3
|
+
* (`VersionControlService.acquireLock`), on every branch. Contract and rationale in
|
|
4
4
|
* `access-model/change-gate.ts`; this is the service that answers.
|
|
5
5
|
*
|
|
6
6
|
* The verdict is taken against the WORKING TREE, not `HEAD` as the write gate
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
30
|
import { workspaceIdForBranch } from '../../shared/workspace-id.js';
|
|
31
|
-
import type {
|
|
32
|
-
import type { AuthUser, IWorkspaceService,
|
|
33
|
-
import {
|
|
31
|
+
import type { VersionControlEventBus } from '../version-control/index.js';
|
|
32
|
+
import type { AuthUser, IWorkspaceService, IVersionControlService } from '@bevel-software/platform-shared';
|
|
33
|
+
import { VersionControlDomainError } from '../../shared/domain-errors.js';
|
|
34
34
|
import type { ITreeWalker } from '../../shared/fs.contract.js';
|
|
35
35
|
import type { IAccessControl } from './access-control.interface.js';
|
|
36
36
|
import {
|
|
@@ -63,7 +63,7 @@ const ROLES_YAML = 'roles.yaml';
|
|
|
63
63
|
|
|
64
64
|
/** A group mutation that cannot proceed. `payload.kind` distinguishes the
|
|
65
65
|
* mode refusal (`'idp-mode'`) for the UI. */
|
|
66
|
-
export class GroupsAdminError extends
|
|
66
|
+
export class GroupsAdminError extends VersionControlDomainError {
|
|
67
67
|
constructor(message: string, status = 422, payload?: Record<string, unknown>) {
|
|
68
68
|
super(message, status, payload);
|
|
69
69
|
this.name = 'GroupsAdminError';
|
|
@@ -118,18 +118,18 @@ export class GroupsAdminService {
|
|
|
118
118
|
|
|
119
119
|
constructor(
|
|
120
120
|
private readonly workspaceService: IWorkspaceService,
|
|
121
|
-
private readonly
|
|
121
|
+
private readonly versionControlService: IVersionControlService,
|
|
122
122
|
private readonly accessControl: IAccessControl,
|
|
123
123
|
/** The composition root's walk — the one the resolver finds access rules with. */
|
|
124
124
|
disk: ITreeWalker,
|
|
125
125
|
private readonly kbDirName: string,
|
|
126
126
|
/** Live-binding thunk — see RolesAdminService's identical note. */
|
|
127
127
|
private readonly defaultBranchOf: () => string,
|
|
128
|
-
private readonly eventBus?:
|
|
128
|
+
private readonly eventBus?: VersionControlEventBus,
|
|
129
129
|
) {
|
|
130
130
|
this.locked = new AdminLockedCommits({
|
|
131
131
|
workspaceService,
|
|
132
|
-
|
|
132
|
+
versionControlService,
|
|
133
133
|
kbDirName,
|
|
134
134
|
defaultBranchOf,
|
|
135
135
|
makeError: (message, status, payload) => new GroupsAdminError(message, status, payload),
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export type { IAccessControl } from './access-control.interface.js';
|
|
7
7
|
// Reached by other modules; exported here so they stop importing the files.
|
|
8
|
-
export type { AccessDecisionSource, AccessTargetKind } from './access-control.interface.js';
|
|
8
|
+
export type { AccessDecisionSource, AccessTargetKind, HolderChange, HolderChanges } from './access-control.interface.js';
|
|
9
9
|
export { accessMdPathForFolder, fileCarriesAccessRules, governingFolderOf } from './access-mutation.service.js';
|
|
10
10
|
export type { AccessMutationService, IAccessMutation, TargetKind } from './access-mutation.service.js';
|
|
11
11
|
export { folderTarget, rulesFileFor } from './access-requests.contract.js';
|
|
@@ -507,7 +507,7 @@ export function readableReferences(
|
|
|
507
507
|
const SCAN_TTL_MS = 30_000;
|
|
508
508
|
|
|
509
509
|
/**
|
|
510
|
-
* The slice of the
|
|
510
|
+
* The slice of the version-control event bus the scanner taps for cache
|
|
511
511
|
* invalidation. Structural (not the concrete class) so test doubles and the
|
|
512
512
|
* services' optional bus stay compatible.
|
|
513
513
|
*/
|
|
@@ -36,9 +36,9 @@ import { workspaceIdForBranch } from '../../shared/workspace-id.js';
|
|
|
36
36
|
import { logger } from '../../shared/logging.js';
|
|
37
37
|
|
|
38
38
|
const log = logger('roles.recover');
|
|
39
|
-
import type {
|
|
40
|
-
import type { AuthUser, IWorkspaceService,
|
|
41
|
-
import {
|
|
39
|
+
import type { VersionControlEventBus } from '../version-control/index.js';
|
|
40
|
+
import type { AuthUser, IWorkspaceService, IVersionControlService } from '@bevel-software/platform-shared';
|
|
41
|
+
import { VersionControlDomainError } from '../../shared/domain-errors.js';
|
|
42
42
|
import type { ITreeWalker } from '../../shared/fs.contract.js';
|
|
43
43
|
import type { IAccessControl } from './access-control.interface.js';
|
|
44
44
|
import {
|
|
@@ -77,7 +77,7 @@ import { AdminLockedCommits } from './admin-locked-commit.js';
|
|
|
77
77
|
import { KbReferenceScanner, readableReferences } from './reference-scan.js';
|
|
78
78
|
|
|
79
79
|
/** A mutation that cannot proceed (invariant violation, contention, not found). */
|
|
80
|
-
export class RolesAdminError extends
|
|
80
|
+
export class RolesAdminError extends VersionControlDomainError {
|
|
81
81
|
constructor(message: string, status = 422, payload?: Record<string, unknown>) {
|
|
82
82
|
super(message, status, payload);
|
|
83
83
|
this.name = 'RolesAdminError';
|
|
@@ -185,7 +185,7 @@ export class RolesAdminService {
|
|
|
185
185
|
|
|
186
186
|
constructor(
|
|
187
187
|
private readonly workspaceService: IWorkspaceService,
|
|
188
|
-
private readonly
|
|
188
|
+
private readonly versionControlService: IVersionControlService,
|
|
189
189
|
private readonly accessControl: IAccessControl,
|
|
190
190
|
/** The composition root's walk — the one the resolver finds access rules with. */
|
|
191
191
|
disk: ITreeWalker,
|
|
@@ -205,7 +205,7 @@ export class RolesAdminService {
|
|
|
205
205
|
* a roles.yaml / access.md change is an access change, and without this an
|
|
206
206
|
* open tab keeps a now-stale read verdict until a manual reload.
|
|
207
207
|
*/
|
|
208
|
-
private readonly eventBus?:
|
|
208
|
+
private readonly eventBus?: VersionControlEventBus,
|
|
209
209
|
/**
|
|
210
210
|
* This deployment's configured admins (`ADMIN_EMAIL`) — the same list the
|
|
211
211
|
* resolver treats as `deploymentOwners`, so it serves two purposes here:
|
|
@@ -218,7 +218,7 @@ export class RolesAdminService {
|
|
|
218
218
|
) {
|
|
219
219
|
this.locked = new AdminLockedCommits({
|
|
220
220
|
workspaceService,
|
|
221
|
-
|
|
221
|
+
versionControlService,
|
|
222
222
|
kbDirName,
|
|
223
223
|
defaultBranchOf,
|
|
224
224
|
makeError: (message, status, payload) => new RolesAdminError(message, status, payload),
|
|
@@ -293,7 +293,7 @@ export class RolesAdminService {
|
|
|
293
293
|
* error is status-less and would surface as 500).
|
|
294
294
|
*/
|
|
295
295
|
private async assertRolesUnlocked(workspaceId: string, actor: AuthUser): Promise<void> {
|
|
296
|
-
const held = await this.
|
|
296
|
+
const held = await this.versionControlService.getLock(
|
|
297
297
|
workspaceId,
|
|
298
298
|
this.defaultBranch,
|
|
299
299
|
`${this.kbDirName}/${ROLES_YAML}`,
|
|
@@ -422,7 +422,7 @@ export class RolesAdminService {
|
|
|
422
422
|
// the fix never reaches it). Best-effort: if origin is unreachable we fall
|
|
423
423
|
// back to the local state and still attempt the local fix.
|
|
424
424
|
try {
|
|
425
|
-
await this.
|
|
425
|
+
await this.versionControlService.resetToRemote(workspaceId, this.defaultBranch);
|
|
426
426
|
this.accessControl.invalidate(workspaceId);
|
|
427
427
|
} catch (err) {
|
|
428
428
|
log.warn('could not sync with origin before recovery; proceeding with local state:', { err });
|
|
@@ -2,14 +2,14 @@ import path from 'node:path';
|
|
|
2
2
|
import { logger } from '../../shared/logging.js';
|
|
3
3
|
|
|
4
4
|
const log = logger('directory-sync');
|
|
5
|
-
import type { AuthUser,
|
|
5
|
+
import type { AuthUser, IVersionControlService } from '@bevel-software/platform-shared';
|
|
6
6
|
import type { WorkspaceService } from '../workspace/index.js';
|
|
7
7
|
import { workspaceIdForBranch } from '../../shared/workspace-id.js';
|
|
8
8
|
import type { AccessControlService } from './access-control.service.js';
|
|
9
9
|
import { SYNCED_GROUPS_YAML } from '../access-model/index.js';
|
|
10
|
-
import type {
|
|
10
|
+
import type { VersionControlEventBus } from '../version-control/index.js';
|
|
11
11
|
import { LockingFilesystem } from '../kb-fs/index.js';
|
|
12
|
-
import { PushNeedsAgentResolutionError,
|
|
12
|
+
import { PushNeedsAgentResolutionError, VersionControlDomainError } from '../../shared/domain-errors.js';
|
|
13
13
|
import { isAbsence } from '../../shared/fs.contract.js';
|
|
14
14
|
import type { SyncedGroupsWriterDeps } from './synced-groups-writer.js';
|
|
15
15
|
|
|
@@ -27,9 +27,9 @@ import type { SyncedGroupsWriterDeps } from './synced-groups-writer.js';
|
|
|
27
27
|
*/
|
|
28
28
|
export function createSyncedGroupsCommitter(deps: {
|
|
29
29
|
workspaceService: WorkspaceService;
|
|
30
|
-
|
|
30
|
+
versionControlService: IVersionControlService;
|
|
31
31
|
accessControl: AccessControlService;
|
|
32
|
-
eventBus:
|
|
32
|
+
eventBus: VersionControlEventBus;
|
|
33
33
|
kbDirName: string;
|
|
34
34
|
bot: AuthUser;
|
|
35
35
|
/** Thunk — DEFAULT_BRANCH is a live binding that stays empty until setup. */
|
|
@@ -37,7 +37,7 @@ export function createSyncedGroupsCommitter(deps: {
|
|
|
37
37
|
}): Pick<SyncedGroupsWriterDeps, 'readCurrent' | 'persist' | 'onWritten'> {
|
|
38
38
|
const {
|
|
39
39
|
workspaceService,
|
|
40
|
-
|
|
40
|
+
versionControlService,
|
|
41
41
|
accessControl,
|
|
42
42
|
eventBus,
|
|
43
43
|
kbDirName,
|
|
@@ -77,7 +77,7 @@ export function createSyncedGroupsCommitter(deps: {
|
|
|
77
77
|
// roles admin's atomic writes use.
|
|
78
78
|
const fsys = new LockingFilesystem(
|
|
79
79
|
{ basePath, contained: true },
|
|
80
|
-
{
|
|
80
|
+
{ versionControl: versionControlService, workspaceId, branch, user: bot, kbDirName },
|
|
81
81
|
);
|
|
82
82
|
try {
|
|
83
83
|
await fsys.writeFiles(
|
|
@@ -115,19 +115,19 @@ export function createSyncedGroupsCommitter(deps: {
|
|
|
115
115
|
// an operator (or any later write on the branch) pushes it.
|
|
116
116
|
let armed = false;
|
|
117
117
|
try {
|
|
118
|
-
await
|
|
118
|
+
await versionControlService.releaseLock(workspaceId, branch, wsRelPath, bot);
|
|
119
119
|
armed = true;
|
|
120
120
|
} catch (armErr) {
|
|
121
121
|
const lockAlreadyReleased =
|
|
122
|
-
armErr instanceof
|
|
122
|
+
armErr instanceof VersionControlDomainError && armErr.payload?.kind === 'lock-not-held';
|
|
123
123
|
if (lockAlreadyReleased) {
|
|
124
124
|
try {
|
|
125
|
-
armed = await
|
|
125
|
+
armed = await versionControlService.hasQueuedCommit(workspaceId, branch, wsRelPath);
|
|
126
126
|
if (!armed) {
|
|
127
127
|
// The row may already be gone because the worker WON the
|
|
128
128
|
// race: drained it and pushed. A branch with nothing left
|
|
129
129
|
// unpushed cannot be holding our landed commit hostage.
|
|
130
|
-
armed = !(await
|
|
130
|
+
armed = !(await versionControlService.hasUnpushedCommits(workspaceId));
|
|
131
131
|
}
|
|
132
132
|
} catch (queueErr) {
|
|
133
133
|
log.warn('could not verify the pending-commit queue:', { err: queueErr });
|