@bevel-software/platform-core-backend 0.35.0 → 0.36.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-guide/directory-structure.md +1 -1
- package/agent-guide/onboarding.md +111 -0
- package/agent-guide/start-here.md +1 -0
- package/agent-guide/tool-manuals.md +1 -0
- package/dist/core/catalog-cache-invalidation.d.ts +2 -2
- package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
- package/dist/core/compose-embed.d.ts +2 -2
- package/dist/core/compose-embed.d.ts.map +1 -1
- package/dist/core/compose-embed.js +1 -1
- package/dist/core/compose-embed.js.map +1 -1
- package/dist/core/core-ports.d.ts +19 -4
- package/dist/core/core-ports.d.ts.map +1 -1
- package/dist/core/core-ports.js.map +1 -1
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +26 -24
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +19 -13
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +68 -56
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +4 -4
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +5 -5
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core-config.d.ts +2 -2
- package/dist/core-config.js +3 -3
- package/dist/core-config.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.service.js +1 -1
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access-declarations.d.ts +2 -2
- package/dist/modules/access/access-declarations.d.ts.map +1 -1
- package/dist/modules/access/access-declarations.js +2 -2
- package/dist/modules/access/access-declarations.js.map +1 -1
- package/dist/modules/access/access-mutation.service.d.ts +2 -2
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
- package/dist/modules/access/access-mutation.service.js +2 -2
- package/dist/modules/access/access-mutation.service.js.map +1 -1
- package/dist/modules/access/access-requests.routes.d.ts +2 -2
- package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
- package/dist/modules/access/access-requests.routes.js +5 -5
- package/dist/modules/access/access-requests.routes.js.map +1 -1
- package/dist/modules/access/access-requests.service.d.ts +2 -2
- package/dist/modules/access/access-requests.service.d.ts.map +1 -1
- package/dist/modules/access/access-requests.service.js +11 -11
- package/dist/modules/access/access-requests.service.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts +2 -2
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +9 -9
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/admin-locked-commit.d.ts +5 -5
- package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
- package/dist/modules/access/admin-locked-commit.js +7 -7
- package/dist/modules/access/admin-locked-commit.js.map +1 -1
- package/dist/modules/access/admin-route-helpers.d.ts +1 -1
- package/dist/modules/access/admin-route-helpers.js +5 -5
- package/dist/modules/access/admin-route-helpers.js.map +1 -1
- package/dist/modules/access/change-read-gate.d.ts +1 -1
- package/dist/modules/access/change-read-gate.js +1 -1
- package/dist/modules/access/groups-admin.service.d.ts +7 -7
- package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.service.js +6 -6
- package/dist/modules/access/groups-admin.service.js.map +1 -1
- package/dist/modules/access/reference-scan.d.ts +1 -1
- package/dist/modules/access/roles-admin.service.d.ts +7 -7
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
- package/dist/modules/access/roles-admin.service.js +8 -8
- package/dist/modules/access/roles-admin.service.js.map +1 -1
- package/dist/modules/access/synced-groups-committer.d.ts +4 -4
- package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-committer.js +7 -7
- package/dist/modules/access/synced-groups-committer.js.map +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts +6 -6
- package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
- package/dist/modules/access/user-access-removal.service.js +4 -4
- package/dist/modules/access/user-access-removal.service.js.map +1 -1
- package/dist/modules/access-model/access-errors.d.ts +4 -4
- package/dist/modules/access-model/access-errors.d.ts.map +1 -1
- package/dist/modules/access-model/access-errors.js +4 -4
- package/dist/modules/access-model/access-errors.js.map +1 -1
- package/dist/modules/access-model/access-grammar.d.ts +1 -1
- package/dist/modules/access-model/access-grammar.js +4 -4
- package/dist/modules/access-model/change-gate.d.ts +1 -1
- package/dist/modules/access-model/change-gate.js +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts +4 -4
- package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.js +4 -4
- package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.d.ts +19 -14
- package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.js +42 -18
- package/dist/modules/agent-guide/agent-guide.js.map +1 -1
- package/dist/modules/agent-guide/guide-budget.d.ts +5 -2
- package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -1
- package/dist/modules/agent-guide/guide-budget.js +6 -2
- package/dist/modules/agent-guide/guide-budget.js.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +12 -5
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.js +13 -6
- package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
- package/dist/modules/agent-instructions/compose.d.ts +15 -8
- package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
- package/dist/modules/agent-instructions/compose.js +24 -10
- package/dist/modules/agent-instructions/compose.js.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.d.ts +14 -6
- package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.js +51 -11
- package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
- package/dist/modules/auth/account-erasure.service.d.ts +36 -7
- package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
- package/dist/modules/auth/account-erasure.service.js +30 -10
- package/dist/modules/auth/account-erasure.service.js.map +1 -1
- package/dist/modules/auth/account-hooks.d.ts +20 -0
- package/dist/modules/auth/account-hooks.d.ts.map +1 -1
- package/dist/modules/auth/account-hooks.js +10 -0
- package/dist/modules/auth/account-hooks.js.map +1 -1
- package/dist/modules/auth/account-switch-lock.js +2 -2
- package/dist/modules/auth/account-switch-lock.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts +7 -2
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +23 -4
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +1 -1
- package/dist/modules/auth/auth.service.js +4 -4
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/index.d.ts +1 -0
- package/dist/modules/auth/index.d.ts.map +1 -1
- package/dist/modules/database/core-schema.js +2 -2
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/diff/diff.routes.d.ts +3 -3
- package/dist/modules/diff/diff.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.js +7 -7
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/embed/embed.routes.js +1 -1
- package/dist/modules/embed/embed.routes.js.map +1 -1
- package/dist/modules/embed/embed.service.d.ts +4 -4
- package/dist/modules/embed/embed.service.d.ts.map +1 -1
- package/dist/modules/embed/embed.service.js +18 -18
- package/dist/modules/embed/embed.service.js.map +1 -1
- package/dist/modules/kb-fs/branch-name.js +8 -8
- package/dist/modules/kb-fs/branch-name.js.map +1 -1
- package/dist/modules/kb-fs/file-change-notifier.d.ts +2 -2
- package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -9
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +27 -27
- package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/repo-path.js +5 -5
- package/dist/modules/kb-fs/repo-path.js.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
- package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.js +2 -2
- package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
- package/dist/modules/kb-sync/index.d.ts +1 -1
- package/dist/modules/kb-sync/index.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js +10 -10
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +11 -4
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +75 -19
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
- package/dist/modules/onboarding/onboarding.routes.js +2 -2
- package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.d.ts +4 -4
- package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.js +4 -4
- package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.js +7 -7
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
- package/dist/modules/plugins/join-requests.service.d.ts +3 -3
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +5 -5
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.js +1 -1
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +2 -2
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +8 -8
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +77 -2
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js +479 -53
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +2 -1
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js +1 -0
- package/dist/modules/secrets-vault/index.js.map +1 -1
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +152 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +125 -10
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
- package/dist/modules/settings/connection-check.js +1 -1
- package/dist/modules/settings/connection-check.js.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +1 -1
- package/dist/modules/settings/git-root-folders.js +1 -1
- package/dist/modules/settings/git-root-folders.js.map +1 -1
- package/dist/modules/settings/setup.routes.d.ts +1 -1
- package/dist/modules/settings/setup.routes.js +1 -1
- package/dist/modules/skills/pending-skills.service.d.ts +3 -3
- package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
- package/dist/modules/skills/pending-skills.service.js +4 -4
- package/dist/modules/skills/pending-skills.service.js.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +5 -5
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
- package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +2 -2
- package/dist/modules/tool-helpers/tool-context.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +2 -2
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
- package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
- package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +43 -3
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +6 -0
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +51 -5
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -0
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +36 -15
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
- package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
- package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +31 -31
- package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
- package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
- package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-hooks.js.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
- package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
- package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
- package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
- package/dist/modules/version-control/event-bus.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
- package/dist/modules/version-control/event-bus.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
- package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
- package/dist/modules/version-control/events-delivery.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
- package/dist/modules/version-control/events.routes.d.ts.map +1 -0
- package/dist/modules/version-control/events.routes.js.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
- package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
- package/dist/modules/version-control/file-lock.service.js.map +1 -0
- package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
- package/dist/modules/version-control/git/change-request-link.js.map +1 -0
- package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
- package/dist/modules/version-control/git/git-version.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.d.ts +8 -8
- package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.js +53 -53
- package/dist/modules/version-control/git/git.service.js.map +1 -0
- package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
- package/dist/modules/version-control/git/merge-commit.js.map +1 -0
- package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
- package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
- package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
- package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
- package/dist/modules/version-control/index.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/index.js +3 -2
- package/dist/modules/version-control/index.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
- package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
- package/dist/modules/version-control/pending-commits.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
- package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
- package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
- package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
- package/dist/modules/version-control/read-on-branch.js.map +1 -0
- package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
- package/dist/modules/version-control/recovery-bot.js.map +1 -0
- package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
- package/dist/modules/version-control/sanitize-error.js.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +4 -4
- package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +3 -3
- package/dist/modules/version-control/version-control-hooks.js.map +1 -0
- package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
- package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
- package/dist/modules/version-control/version-control.routes.js.map +1 -0
- package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -31
- package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +89 -94
- package/dist/modules/version-control/version-control.service.js.map +1 -0
- package/dist/modules/workspace/agent-access.gate.d.ts +5 -5
- package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
- package/dist/modules/workspace/agent-access.gate.js +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
- package/dist/modules/workspace/git-internals.middleware.js +2 -2
- package/dist/modules/workspace/kb-repository.js +1 -1
- package/dist/modules/workspace/kb-repository.js.map +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-git.js +1 -1
- package/dist/modules/workspace/startup/kb-git.js.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
- package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.js +8 -5
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
- package/dist/modules/workspace/workspace-tmp.js +3 -3
- package/dist/modules/workspace/workspace-tmp.js.map +1 -1
- package/dist/modules/workspace/workspace.routes.d.ts +4 -4
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +22 -22
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +6 -6
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +11 -11
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +2 -1
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +15 -10
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/shared/canonical-file-identity.d.ts +2 -2
- package/dist/shared/canonical-file-identity.js +5 -5
- package/dist/shared/canonical-file-identity.js.map +1 -1
- package/dist/shared/domain-errors.d.ts +39 -39
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +44 -44
- package/dist/shared/domain-errors.js.map +1 -1
- package/dist/shared/git.contract.d.ts +1 -1
- package/dist/shared/git.contract.js +1 -1
- package/dist/shared/http-errors.d.ts +3 -3
- package/dist/shared/http-errors.d.ts.map +1 -1
- package/dist/shared/http-errors.js +1 -1
- package/dist/shared/http-errors.js.map +1 -1
- package/dist/shared/pending-proposals.d.ts +3 -3
- package/dist/shared/pending-proposals.d.ts.map +1 -1
- package/dist/shared/pending-proposals.js +2 -2
- package/dist/shared/pending-proposals.js.map +1 -1
- package/dist/tenancy/static-tenant-source.js +1 -1
- package/dist/tenancy/static-tenant-source.js.map +1 -1
- package/migrations/0012_agent_audit.sql +40 -40
- package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
- package/migrations/meta/0012_snapshot.json +2246 -2246
- package/migrations/meta/0013_snapshot.json +2258 -2258
- package/package.json +4 -4
- package/src/__tests__/account-admin.ts +27 -0
- package/src/__tests__/hexis-catalog.ts +4 -4
- package/src/__tests__/kb-context.ts +30 -30
- package/src/__tests__/kb-layout-config.test.ts +21 -0
- package/src/__tests__/open-change-gate.ts +1 -1
- package/src/__tests__/tool-handler.ts +15 -0
- package/src/__tests__/tool-wiring.ts +10 -4
- package/src/__tests__/workspace-service.ts +1 -1
- package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
- package/src/core/__tests__/compose-embed.test.ts +1 -1
- package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
- package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
- package/src/core/__tests__/gated-boot.test.ts +2 -2
- package/src/core/__tests__/lifecycle.test.ts +9 -9
- package/src/core/catalog-cache-invalidation.ts +2 -2
- package/src/core/compose-embed.ts +3 -3
- package/src/core/core-ports.ts +19 -4
- package/src/core/create-core-server.ts +39 -25
- package/src/core/create-core-services.ts +79 -63
- package/src/core/lifecycle.ts +9 -9
- package/src/core-config.ts +3 -3
- package/src/index.ts +5 -5
- package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
- package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
- package/src/modules/access/__tests__/access-requests.routes.test.ts +20 -20
- package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
- package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +3 -3
- package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
- package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
- package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
- package/src/modules/access/__tests__/groups-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
- package/src/modules/access/__tests__/roles-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/roles-capabilities.test.ts +19 -19
- package/src/modules/access/__tests__/roles.routes.test.ts +6 -6
- package/src/modules/access/__tests__/synced-groups-committer.test.ts +13 -13
- package/src/modules/access/__tests__/user-access-removal.service.test.ts +29 -29
- package/src/modules/access/access-control.service.ts +1 -1
- package/src/modules/access/access-declarations.ts +2 -2
- package/src/modules/access/access-mutation.service.ts +2 -2
- package/src/modules/access/access-requests.routes.ts +7 -7
- package/src/modules/access/access-requests.service.ts +13 -13
- package/src/modules/access/access.routes.ts +11 -11
- package/src/modules/access/admin-locked-commit.ts +11 -11
- package/src/modules/access/admin-route-helpers.ts +5 -5
- package/src/modules/access/change-read-gate.ts +1 -1
- package/src/modules/access/groups-admin.service.ts +7 -7
- package/src/modules/access/reference-scan.ts +1 -1
- package/src/modules/access/roles-admin.service.ts +9 -9
- package/src/modules/access/synced-groups-committer.ts +11 -11
- package/src/modules/access/user-access-removal.service.ts +7 -7
- package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
- package/src/modules/access-model/access-errors.ts +4 -4
- package/src/modules/access-model/access-grammar.ts +4 -4
- package/src/modules/access-model/change-gate.ts +1 -1
- package/src/modules/access-model/roles-yaml-guard.ts +4 -4
- package/src/modules/agent-guide/__tests__/agent-guide.test.ts +19 -4
- package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +1 -1
- package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +2 -2
- package/src/modules/agent-guide/agent-guide.ts +48 -22
- package/src/modules/agent-guide/guide-budget.ts +6 -2
- package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
- package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
- package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +113 -7
- package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
- package/src/modules/agent-instructions/compose.ts +24 -9
- package/src/modules/agent-instructions/shared-file-rules.ts +53 -11
- package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
- package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
- package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
- package/src/modules/audit/event-classifier.ts +155 -155
- package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
- package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
- package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
- package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
- package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
- package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
- package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
- package/src/modules/auth/account-erasure.service.ts +27 -9
- package/src/modules/auth/account-hooks.ts +34 -0
- package/src/modules/auth/account-switch-lock.ts +2 -2
- package/src/modules/auth/account.routes.ts +23 -5
- package/src/modules/auth/auth.service.ts +4 -4
- package/src/modules/auth/index.ts +1 -0
- package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
- package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
- package/src/modules/database/core-schema.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
- package/src/modules/diff/diff.routes.ts +8 -8
- package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
- package/src/modules/embed/__tests__/embed.service.test.ts +42 -42
- package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
- package/src/modules/embed/embed.routes.ts +1 -1
- package/src/modules/embed/embed.service.ts +17 -17
- package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
- package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +260 -260
- package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +34 -34
- package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
- package/src/modules/kb-fs/branch-name.ts +8 -8
- package/src/modules/kb-fs/file-change-notifier.ts +2 -2
- package/src/modules/kb-fs/locking-filesystem.ts +30 -30
- package/src/modules/kb-fs/repo-path.ts +5 -5
- package/src/modules/kb-fs/tmp-ref.ts +3 -3
- package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
- package/src/modules/kb-sync/index.ts +1 -1
- package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
- package/src/modules/kb-sync/kb-sync.service.ts +9 -9
- package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
- package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
- package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
- package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
- package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
- package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
- package/src/modules/mcp/mcp.service.ts +89 -28
- package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +55 -55
- package/src/modules/onboarding/onboarding.contract.ts +1 -1
- package/src/modules/onboarding/onboarding.routes.ts +2 -2
- package/src/modules/onboarding/starter-pack.service.ts +6 -6
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
- package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
- package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
- package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
- package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
- package/src/modules/plugins/__tests__/plugins.routes.test.ts +25 -25
- package/src/modules/plugins/join-request-jobs.service.ts +10 -10
- package/src/modules/plugins/join-requests.service.ts +4 -4
- package/src/modules/plugins/plugin-rename.service.ts +1 -1
- package/src/modules/plugins/plugins.routes.ts +9 -9
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +28 -1
- package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +562 -95
- package/src/modules/secrets-vault/index.ts +7 -0
- package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
- package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
- package/src/modules/secrets-vault/secrets-vault.contract.ts +152 -0
- package/src/modules/secrets-vault/secrets-vault.routes.ts +157 -10
- package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
- package/src/modules/settings/connection-check.ts +1 -1
- package/src/modules/settings/deployment-settings.service.ts +1 -1
- package/src/modules/settings/git-root-folders.ts +1 -1
- package/src/modules/settings/setup.routes.ts +1 -1
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
- package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
- package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
- package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
- package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
- package/src/modules/skills/pending-skills.service.ts +3 -3
- package/src/modules/skills/skill-access-requests.routes.ts +7 -7
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +4 -4
- package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
- package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
- package/src/modules/tool-helpers/tool-context.ts +6 -6
- package/src/modules/tool-helpers/tool-handler.ts +2 -2
- package/src/modules/tool-helpers/tool.contract.ts +4 -4
- package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
- package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +36 -1
- package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
- package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
- package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
- package/src/modules/tool-manuals/tool-manuals.contract.ts +41 -3
- package/src/modules/tool-manuals/tool-manuals.service.ts +53 -5
- package/src/modules/tool-manuals/tool-manuals.tools.ts +41 -15
- package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
- package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
- package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +6 -6
- package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
- package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
- package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
- package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
- package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
- package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
- package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.fork-point-file.test.ts → version-control/__tests__/version-control.routes.fork-point-file.test.ts} +19 -19
- package/src/modules/{workflow/__tests__/workflow.routes.history-read-gate.test.ts → version-control/__tests__/version-control.routes.history-read-gate.test.ts} +13 -13
- package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.open-change-request.test.ts → version-control/__tests__/version-control.routes.open-change-request.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.branch-in-use.test.ts → version-control/__tests__/version-control.service.branch-in-use.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts → version-control/__tests__/version-control.service.deleted-branch-sweep.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +97 -99
- package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
- package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +42 -42
- package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.pg.test.ts → version-control/__tests__/version-control.service.update-change-request.pg.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.test.ts → version-control/__tests__/version-control.service.update-change-request.test.ts} +11 -11
- package/src/modules/{workflow/__tests__/workflow.service.update-from-target.test.ts → version-control/__tests__/version-control.service.update-from-target.test.ts} +22 -22
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
- package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
- package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
- package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +30 -30
- package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
- package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
- package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
- package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
- package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
- package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
- package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +20 -20
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/git.service.ts +57 -57
- package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
- package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
- package/src/modules/{workflow → version-control}/index.ts +6 -5
- package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
- package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
- package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
- package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +3 -3
- package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
- package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +92 -97
- package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
- package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
- package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
- package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
- package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
- package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
- package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
- package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
- package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +5 -5
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +27 -27
- package/src/modules/workspace/agent-access.gate.ts +5 -5
- package/src/modules/workspace/git-internals.middleware.ts +2 -2
- package/src/modules/workspace/kb-repository.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
- package/src/modules/workspace/startup/kb-git.ts +1 -1
- package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
- package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
- package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
- package/src/modules/workspace/startup/steps/template-source.ts +21 -6
- package/src/modules/workspace/workspace-tmp.ts +4 -4
- package/src/modules/workspace/workspace.routes.ts +26 -26
- package/src/modules/workspace/workspace.service.ts +11 -11
- package/src/modules/workspace/workspace.tools.ts +17 -10
- package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
- package/src/shared/__tests__/http-errors.test.ts +4 -4
- package/src/shared/canonical-file-identity.ts +5 -5
- package/src/shared/domain-errors.ts +44 -44
- package/src/shared/git.contract.ts +1 -1
- package/src/shared/http-errors.ts +3 -3
- package/src/shared/kb-context.ts +130 -130
- package/src/shared/pending-proposals.ts +4 -4
- package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
- package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
- package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
- package/src/tenancy/index.ts +35 -35
- package/src/tenancy/static-tenant-source.ts +1 -1
- package/src/tenancy/tenant-host.ts +261 -261
- package/src/tenancy/tenant-runtime.ts +208 -208
- package/src/tenancy/tenant-source.contract.ts +59 -59
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
- package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/change-request-hooks.js.map +0 -1
- package/dist/modules/workflow/event-bus.d.ts.map +0 -1
- package/dist/modules/workflow/event-bus.js.map +0 -1
- package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
- package/dist/modules/workflow/events-delivery.js.map +0 -1
- package/dist/modules/workflow/events.routes.d.ts.map +0 -1
- package/dist/modules/workflow/events.routes.js.map +0 -1
- package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
- package/dist/modules/workflow/file-lock.service.js.map +0 -1
- package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
- package/dist/modules/workflow/git/change-request-link.js.map +0 -1
- package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
- package/dist/modules/workflow/git/git-version.js.map +0 -1
- package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/git.service.js.map +0 -1
- package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
- package/dist/modules/workflow/git/merge-commit.js.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
- package/dist/modules/workflow/index.d.ts.map +0 -1
- package/dist/modules/workflow/index.js.map +0 -1
- package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.service.js.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
- package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
- package/dist/modules/workflow/read-on-branch.js.map +0 -1
- package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
- package/dist/modules/workflow/recovery-bot.js.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
- package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
- package/dist/modules/workflow/sanitize-error.js.map +0 -1
- package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/workflow-hooks.js.map +0 -1
- package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.routes.js.map +0 -1
- package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.service.js.map +0 -1
- package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
- /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
- /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
- /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
- /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
- /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
- /package/src/modules/{workflow → version-control}/sanitize-error.ts +0 -0
|
@@ -12,6 +12,8 @@ import {
|
|
|
12
12
|
configuredAs,
|
|
13
13
|
type DeclaredOAuthProvider,
|
|
14
14
|
type ISecretsVaultService,
|
|
15
|
+
type ManagedSignInPort,
|
|
16
|
+
type SecretConfigStatus,
|
|
15
17
|
} from './secrets-vault.contract.js';
|
|
16
18
|
import type { IToolManualService, ToolManualSummary, ToolVariable } from '../tool-manuals/index.js';
|
|
17
19
|
import type { IConnectionProbeService } from '../connection-probe/index.js';
|
|
@@ -48,6 +50,36 @@ export interface SecretsVaultRoutesDeps {
|
|
|
48
50
|
publicBackendUrl: string;
|
|
49
51
|
/** Public base URL of the SPA — where the OAuth callback lands the browser. */
|
|
50
52
|
publicFrontendUrl: string;
|
|
53
|
+
/**
|
|
54
|
+
* The distribution's managed sign-in port, read per request (the overlay
|
|
55
|
+
* binds it after boot). Absent or null: a managed sign-in is listed as
|
|
56
|
+
* waiting on the deployment, and starting one is refused with that reason.
|
|
57
|
+
*/
|
|
58
|
+
managedSignIns?: () => ManagedSignInPort | null;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The card a managed sign-in renders as on the Connect page, as `/connect/pending`
|
|
63
|
+
* and `/secrets/tools` report it beside the ordinary fields.
|
|
64
|
+
*/
|
|
65
|
+
interface ManagedSignInView {
|
|
66
|
+
connectorId: string;
|
|
67
|
+
scopeSet: string;
|
|
68
|
+
/** Who the connection belongs to: each person, or the workspace. */
|
|
69
|
+
tokenScope: 'user' | 'shared';
|
|
70
|
+
displayName: string;
|
|
71
|
+
icon: string;
|
|
72
|
+
description: string;
|
|
73
|
+
permissions: string[];
|
|
74
|
+
scopeSetLabel: string;
|
|
75
|
+
dataResidency: string;
|
|
76
|
+
subprocessor: string;
|
|
77
|
+
/** The connected account the row remembers, for "Connected as …". */
|
|
78
|
+
account: string | null;
|
|
79
|
+
/** The owner replaced the managed app with the deployment's own (the ordinary flow then applies). */
|
|
80
|
+
ownApp: boolean;
|
|
81
|
+
/** Sign-ins through the broker can be started on this deployment. */
|
|
82
|
+
available: boolean;
|
|
51
83
|
}
|
|
52
84
|
|
|
53
85
|
function redirectUriFor(publicBackendUrl: string): string {
|
|
@@ -66,7 +98,9 @@ function declaredProvider(variable: ToolVariable): DeclaredOAuthProvider | null
|
|
|
66
98
|
return {
|
|
67
99
|
authorizationUrl: oauth.authorizationUrl,
|
|
68
100
|
tokenUrl: oauth.tokenUrl,
|
|
69
|
-
|
|
101
|
+
// A managed sign-in declares no client of its own (the broker's app is
|
|
102
|
+
// the client); the one route that pins a provider requires an owner's.
|
|
103
|
+
clientId: oauth.clientId ?? '',
|
|
70
104
|
scopes: oauth.scopes,
|
|
71
105
|
// Static authorize params (e.g. Google's `access_type=offline`) so the
|
|
72
106
|
// provider returns a refresh token.
|
|
@@ -149,6 +183,36 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
|
|
|
149
183
|
return variable ? { manual, variable } : null;
|
|
150
184
|
}
|
|
151
185
|
|
|
186
|
+
/**
|
|
187
|
+
* The card for a managed sign-in, or null for an ordinary one. Built from
|
|
188
|
+
* the variable (which connector), the port (what the connector is) and
|
|
189
|
+
* the row (whose account, whether an owner brought their own app).
|
|
190
|
+
*/
|
|
191
|
+
function managedView(v: ToolVariable, st: SecretConfigStatus | undefined): ManagedSignInView | null {
|
|
192
|
+
const ref = v.oauth?.managed;
|
|
193
|
+
if (!ref) return null;
|
|
194
|
+
const port = deps.managedSignIns?.() ?? null;
|
|
195
|
+
const card = port?.describe(ref) ?? null;
|
|
196
|
+
const shared = v.scope === 'admin';
|
|
197
|
+
return {
|
|
198
|
+
connectorId: ref.connectorId,
|
|
199
|
+
scopeSet: ref.scopeSet,
|
|
200
|
+
tokenScope: shared ? 'shared' : 'user',
|
|
201
|
+
displayName: card?.displayName ?? v.label ?? ref.connectorId,
|
|
202
|
+
icon: card?.icon ?? 'Plug',
|
|
203
|
+
description: card?.description ?? '',
|
|
204
|
+
permissions: card?.permissions ?? [],
|
|
205
|
+
scopeSetLabel: card?.scopeSetLabel ?? ref.scopeSet,
|
|
206
|
+
dataResidency: card?.dataResidency ?? '',
|
|
207
|
+
subprocessor: card?.subprocessor ?? '',
|
|
208
|
+
account: (shared ? st?.adminAccount : st?.userAccount) ?? null,
|
|
209
|
+
ownApp: st?.adminBringsOwnApp === true,
|
|
210
|
+
// Startable only for a connector this distribution knows: a broker that
|
|
211
|
+
// is up cannot open a sign-in through a connector it has no card for.
|
|
212
|
+
available: port?.available() === true && card !== null,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
152
216
|
router.get('/secrets', async (req, res) => {
|
|
153
217
|
const userId = req.userId;
|
|
154
218
|
if (!userId) return void res.status(401).json({ error: 'Not authenticated' });
|
|
@@ -269,22 +333,31 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
|
|
|
269
333
|
const key = varKey(m.name, v.name);
|
|
270
334
|
const st = statusByKey.get(key);
|
|
271
335
|
const isOAuth = v.oauth != null;
|
|
272
|
-
|
|
336
|
+
// A SHARED sign-in (a managed workspace connection) is authorized
|
|
337
|
+
// when the shared row holds tokens — one connection for everyone.
|
|
338
|
+
const shared = isOAuth && v.scope === 'admin';
|
|
339
|
+
const authorized = isOAuth ? ((shared ? st?.adminAuthorized : st?.userAuthorized) ?? false) : undefined;
|
|
273
340
|
// For an OAuth var: which declared permissions the token doesn't cover,
|
|
274
341
|
// so the panel can say WHAT it works for and what it doesn't. Only
|
|
275
342
|
// meaningful once authorized (an unauthorized var has no token at all).
|
|
276
|
-
const
|
|
343
|
+
const granted = shared ? st?.adminGrantedScopes : st?.grantedScopes;
|
|
344
|
+
const missing = isOAuth && authorized ? missingScopes(v.oauth?.scopes, granted) : [];
|
|
345
|
+
const managed = managedView(v, st);
|
|
277
346
|
return {
|
|
278
347
|
name: v.name,
|
|
279
348
|
scope: v.scope,
|
|
280
349
|
label: v.label ?? null,
|
|
281
350
|
key,
|
|
282
351
|
adminConfigured: st?.adminConfigured ?? false,
|
|
352
|
+
// What the owner's row IS, so a surface can tell a client of the
|
|
353
|
+
// OAuth kind from a key left from when the variable was static.
|
|
354
|
+
adminKind: st?.adminKind ?? null,
|
|
283
355
|
userConfigured: st?.userConfigured ?? false,
|
|
284
356
|
oauth: isOAuth,
|
|
285
357
|
authorized,
|
|
286
358
|
needsReauth: isOAuth && authorized === true && missing.length > 0,
|
|
287
359
|
missingScopes: missing,
|
|
360
|
+
...(managed ? { managed } : {}),
|
|
288
361
|
};
|
|
289
362
|
}),
|
|
290
363
|
})),
|
|
@@ -389,21 +462,35 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
|
|
|
389
462
|
const toolOAuth = manuals.flatMap((m) => {
|
|
390
463
|
const canWrite = canWriteBySlug.get(m.slug) ?? false;
|
|
391
464
|
return (m.variables ?? [])
|
|
392
|
-
|
|
465
|
+
// Every per-user sign-in, plus a managed WORKSPACE connection (the
|
|
466
|
+
// one `admin`-scoped sign-in there is): listed for everyone who can
|
|
467
|
+
// read the tool, since everyone calls through it, with Connect
|
|
468
|
+
// offered to the writers who can make it.
|
|
469
|
+
.filter((v) => v.oauth && (v.scope === 'user' || v.oauth.managed))
|
|
393
470
|
.map((v) => {
|
|
394
471
|
const st = statusByKey.get(varKey(m.name, v.name));
|
|
395
|
-
const
|
|
472
|
+
const managed = managedView(v, st);
|
|
473
|
+
const shared = v.scope === 'admin';
|
|
474
|
+
const authorized = (shared ? st?.adminAuthorized : st?.userAuthorized) ?? false;
|
|
396
475
|
// Signed in, but the token's granted scopes no longer cover what the
|
|
397
476
|
// tool declares → surface as needing re-authorization, not as connected.
|
|
398
477
|
const needsReauth =
|
|
399
|
-
authorized && !scopesCovered(v.oauth?.scopes, st?.grantedScopes);
|
|
478
|
+
authorized && !scopesCovered(v.oauth?.scopes, shared ? st?.adminGrantedScopes : st?.grantedScopes);
|
|
400
479
|
// On an oauth var the ADMIN row is the provider registration — the
|
|
401
480
|
// client secret — without which nobody's Authorize can work. It is a
|
|
402
481
|
// workspace value like any other, so it carries the same flag. It
|
|
403
482
|
// must be an OAUTH row: `beginToolOAuthByKey` refuses a static one,
|
|
404
483
|
// so a shared key left over from before this var was made OAuth
|
|
405
484
|
// would otherwise light up Authorize with nothing behind it.
|
|
406
|
-
|
|
485
|
+
//
|
|
486
|
+
// A MANAGED sign-in needs no registration here — the broker holds
|
|
487
|
+
// it — so it is configured when the deployment can reach a broker,
|
|
488
|
+
// when an owner replaced the managed app with their own, or when a
|
|
489
|
+
// token is already stored (nothing is outstanding for a connection
|
|
490
|
+
// that works, whatever the broker is doing).
|
|
491
|
+
const ownerConfigured = managed
|
|
492
|
+
? managed.ownApp || managed.available || authorized
|
|
493
|
+
: configuredAs('oauth', st?.adminConfigured, st?.adminKind);
|
|
407
494
|
return {
|
|
408
495
|
slug: m.slug,
|
|
409
496
|
varName: v.name,
|
|
@@ -413,7 +500,13 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
|
|
|
413
500
|
authorized,
|
|
414
501
|
needsReauth,
|
|
415
502
|
ownerConfigured,
|
|
416
|
-
|
|
503
|
+
// Not the caller's to do: an ordinary sign-in waiting on a
|
|
504
|
+
// registration the caller may not write, or a managed WORKSPACE
|
|
505
|
+
// connection seen by someone who may not write the tool. A
|
|
506
|
+
// managed personal sign-in is always the caller's own, broker or
|
|
507
|
+
// no broker.
|
|
508
|
+
ownerOnly: managed ? shared && !canWrite : !ownerConfigured && !canWrite,
|
|
509
|
+
...(managed ? { managed, canWrite } : {}),
|
|
417
510
|
};
|
|
418
511
|
});
|
|
419
512
|
});
|
|
@@ -516,10 +609,21 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
|
|
|
516
609
|
const provider = declaredProvider(found.variable);
|
|
517
610
|
if (!provider) return void res.status(422).json({ error: endpointsUnknown(found.manual) });
|
|
518
611
|
const clientSecret = (req.body ?? {}).clientSecret;
|
|
612
|
+
// A managed sign-in names no client of its own; an owner who brings
|
|
613
|
+
// the deployment's own app ("use our own app") supplies its id here
|
|
614
|
+
// with the secret, and the pinned row then runs the ordinary flow:
|
|
615
|
+
// this deployment's redirect URI, a direct token exchange and refresh.
|
|
616
|
+
const ownClientId = typeof (req.body ?? {}).clientId === 'string' ? (req.body.clientId as string).trim() : '';
|
|
617
|
+
const clientId = provider.clientId || ownClientId;
|
|
618
|
+
if (!clientId) {
|
|
619
|
+
return void res.status(422).json({
|
|
620
|
+
error: 'This sign-in goes through the managed connector. To use your own OAuth app instead, send its client id with the secret.',
|
|
621
|
+
});
|
|
622
|
+
}
|
|
519
623
|
await secretsVault.putSharedOAuthClientSecret({
|
|
520
624
|
key: varKey(found.manual.name, found.variable.name),
|
|
521
625
|
clientSecret,
|
|
522
|
-
provider,
|
|
626
|
+
provider: { ...provider, clientId },
|
|
523
627
|
});
|
|
524
628
|
res.status(201).json({ ok: true });
|
|
525
629
|
} catch (err) {
|
|
@@ -566,6 +670,50 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
|
|
|
566
670
|
if (!signIn?.oauth) {
|
|
567
671
|
throw new SecretOAuthError("This tool's owner hasn't finished setting this up");
|
|
568
672
|
}
|
|
673
|
+
const returnTo: unknown = (req.body ?? {}).returnTo;
|
|
674
|
+
// A MANAGED sign-in goes through the broker — unless an owner pinned the
|
|
675
|
+
// deployment's own app on the shared row, in which case the ordinary
|
|
676
|
+
// flow below applies exactly as for a file-declared client. Read from
|
|
677
|
+
// the LIVE declaration like everything else here.
|
|
678
|
+
const ref = signIn.oauth.managed;
|
|
679
|
+
if (ref) {
|
|
680
|
+
const [st] = await secretsVault.statusFor(userId, [key]);
|
|
681
|
+
// An owner's own app runs the ordinary flow, whose tokens land on the
|
|
682
|
+
// caller's own row. A WORKSPACE connection reads the shared row, so
|
|
683
|
+
// the two cannot meet: that combination is refused here rather than
|
|
684
|
+
// signing an owner in to a row nobody reads.
|
|
685
|
+
if (st?.adminBringsOwnApp === true && signIn.scope === 'admin') {
|
|
686
|
+
return void res.status(422).json({
|
|
687
|
+
error: 'A workspace connection cannot use your own OAuth app yet. Remove the client secret to connect it through the managed connector.',
|
|
688
|
+
});
|
|
689
|
+
}
|
|
690
|
+
if (st?.adminBringsOwnApp !== true) {
|
|
691
|
+
const port = deps.managedSignIns?.() ?? null;
|
|
692
|
+
if (!port || !port.available()) {
|
|
693
|
+
return void res.status(409).json({
|
|
694
|
+
error: 'This deployment is not connected to a connector broker yet. Ask your admin to configure it.',
|
|
695
|
+
});
|
|
696
|
+
}
|
|
697
|
+
// The same answer the card gives (`available`): a connector the
|
|
698
|
+
// distribution does not know cannot be started through its broker.
|
|
699
|
+
if (!port.describe(ref)) {
|
|
700
|
+
return void res.status(409).json({
|
|
701
|
+
error: 'This deployment does not offer the connector this sign-in names. Ask your admin.',
|
|
702
|
+
});
|
|
703
|
+
}
|
|
704
|
+
const shared = signIn.scope === 'admin';
|
|
705
|
+
if (shared && !(await accessControl.canWrite(defaultWs(), email, manual.path))) {
|
|
706
|
+
return void res.status(403).json({ error: 'Only a writer of this tool can connect its workspace account.' });
|
|
707
|
+
}
|
|
708
|
+
const { url } = await port.start({
|
|
709
|
+
userId: shared ? null : userId,
|
|
710
|
+
key,
|
|
711
|
+
ref,
|
|
712
|
+
returnTo: isSafeReturnPath(returnTo) ? returnTo : '/connect',
|
|
713
|
+
});
|
|
714
|
+
return void res.json({ url });
|
|
715
|
+
}
|
|
716
|
+
}
|
|
569
717
|
const provider = declared ? declaredProvider(declared) : undefined;
|
|
570
718
|
if (provider === null) return void res.status(422).json({ error: endpointsUnknown(manual) });
|
|
571
719
|
// Provision the caller's oauth row (from the owner-set secret) FIRST — its id
|
|
@@ -587,7 +735,6 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
|
|
|
587
735
|
// the provider, so the state is the only thing it can trust. An absent or
|
|
588
736
|
// unsafe `returnTo` falls back to the legacy `'connect'` marker, which
|
|
589
737
|
// keeps a body-less start byte-identical to what it produced before.
|
|
590
|
-
const returnTo: unknown = (req.body ?? {}).returnTo;
|
|
591
738
|
const state = signState(deps.stateSecret, {
|
|
592
739
|
u: userId,
|
|
593
740
|
i: id,
|
|
@@ -2,7 +2,7 @@ import fs from 'node:fs/promises';
|
|
|
2
2
|
import os from 'node:os';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
5
|
-
import { NodeGitRunner } from '../../
|
|
5
|
+
import { NodeGitRunner } from '../../version-control/git/node-git-runner.js';
|
|
6
6
|
import { ManagedRepository, MANAGED_REPOSITORY_DIR } from '../managed-repository.js';
|
|
7
7
|
import { RepositorySource, type GitHubAppRepository } from '../repository-source.js';
|
|
8
8
|
|
|
@@ -10,7 +10,7 @@ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
|
10
10
|
import { testKbContext } from '../../../__tests__/kb-context.js';
|
|
11
11
|
import { createSetupRoutes } from '../setup.routes.js';
|
|
12
12
|
import { DeploymentSettingsService } from '../deployment-settings.service.js';
|
|
13
|
-
import { NodeGitRunner } from '../../
|
|
13
|
+
import { NodeGitRunner } from '../../version-control/git/node-git-runner.js';
|
|
14
14
|
import { TemplateFilesStep } from '../../workspace/startup/steps/template-files.step.js';
|
|
15
15
|
import { NodeFs } from '../../kb-fs/node-fs.js';
|
|
16
16
|
import { defaultKbTemplateDir } from '../../../assets.js';
|
|
@@ -12,7 +12,7 @@ import { createSetupRoutes } from '../setup.routes.js';
|
|
|
12
12
|
import { DeploymentSettingsService } from '../deployment-settings.service.js';
|
|
13
13
|
import { ManagedRepository } from '../managed-repository.js';
|
|
14
14
|
import { RepositorySource } from '../repository-source.js';
|
|
15
|
-
import { NodeGitRunner } from '../../
|
|
15
|
+
import { NodeGitRunner } from '../../version-control/git/node-git-runner.js';
|
|
16
16
|
import { TemplateFilesStep } from '../../workspace/startup/steps/template-files.step.js';
|
|
17
17
|
import { NodeFs } from '../../kb-fs/node-fs.js';
|
|
18
18
|
import { defaultKbTemplateDir } from '../../../assets.js';
|
|
@@ -6,7 +6,7 @@ import { validateHttpsRemote } from './deployment-settings.service.js';
|
|
|
6
6
|
import { classifyGitFailure } from '../../shared/git-failure.js';
|
|
7
7
|
import { redactSecret, urlQuerySecrets } from '../../shared/redact-secret.js';
|
|
8
8
|
import { GitRunError, type IGitRunner } from '../../shared/git.contract.js';
|
|
9
|
-
import { NodeGitRunner } from '../
|
|
9
|
+
import { NodeGitRunner } from '../version-control/index.js';
|
|
10
10
|
|
|
11
11
|
/** The repository connection a deployment reads and writes its knowledge base with. */
|
|
12
12
|
export interface RepositoryConnection {
|
|
@@ -325,7 +325,7 @@ export const CORE_SETTINGS: SettingDef[] = [
|
|
|
325
325
|
{
|
|
326
326
|
/**
|
|
327
327
|
* Whether the server removes, on its own, the branches merged change
|
|
328
|
-
* requests left behind (`
|
|
328
|
+
* requests left behind (`VersionControlService.retireLeftoverMergedBranches`).
|
|
329
329
|
* On unless set to `false`; a blanked field puts the default back. Read
|
|
330
330
|
* at every round, so it applies without a restart. It covers that cleanup
|
|
331
331
|
* only: the removal of a branch when its change request is merged does
|
|
@@ -4,7 +4,7 @@ import path from 'node:path';
|
|
|
4
4
|
import type { IGitRunner } from '../../shared/git.contract.js';
|
|
5
5
|
import { printable } from '../../shared/printable.js';
|
|
6
6
|
import { logger } from '../../shared/logging.js';
|
|
7
|
-
import { NodeGitRunner } from '../
|
|
7
|
+
import { NodeGitRunner } from '../version-control/index.js';
|
|
8
8
|
import { probeCredentialArgs, probeGitEnv } from './connection-check.js';
|
|
9
9
|
|
|
10
10
|
const log = logger('setup');
|
|
@@ -207,7 +207,7 @@ export function createSetupRoutes(
|
|
|
207
207
|
* What a change of the knowledge-base repository has to decide about, and
|
|
208
208
|
* what to do when the admin decides to close.
|
|
209
209
|
*
|
|
210
|
-
* Injected because the setup routes must stay free of the
|
|
210
|
+
* Injected because the setup routes must stay free of the version-control module —
|
|
211
211
|
* and a minimal mount (tests, a distribution without change requests) simply
|
|
212
212
|
* has none: the default answers "no open requests", so the confirmation
|
|
213
213
|
* offers no choice it cannot honour.
|
|
@@ -11,7 +11,7 @@ import type { ToolContext } from '../../tool-helpers/tool.contract.js';
|
|
|
11
11
|
import type { ToolAuth } from '../../tool-auth/tool-auth.middleware.js';
|
|
12
12
|
import { registerWorkspaceTools } from '../../workspace/workspace.tools.js';
|
|
13
13
|
import { RoutineWritePolicyService } from '../../workspace/routine-write-policy.js';
|
|
14
|
-
import {
|
|
14
|
+
import { VersionControlHooks } from '../../version-control/version-control-hooks.js';
|
|
15
15
|
import { ToolDescriptionNotes } from '../../workspace/agent-access.gate.js';
|
|
16
16
|
import { SpillStore } from '../../workspace/spill-store.js';
|
|
17
17
|
import { DocExtractService, WorkerDocumentExtractor } from '../../workspace/index.js';
|
|
@@ -96,7 +96,7 @@ async function start(): Promise<string> {
|
|
|
96
96
|
sessionId,
|
|
97
97
|
abortSignal: signal,
|
|
98
98
|
workspaceService: {} as never,
|
|
99
|
-
|
|
99
|
+
versionControlService: {} as never,
|
|
100
100
|
events: {} as never,
|
|
101
101
|
getFilesystem: async () => fs,
|
|
102
102
|
});
|
|
@@ -112,7 +112,7 @@ async function start(): Promise<string> {
|
|
|
112
112
|
registerWorkspaceTools(
|
|
113
113
|
registry, router, fakeAuth, toolHandler,
|
|
114
114
|
new SpillStore(join(tmpdir(), 'bevel-test-spills')), new DocExtractService(join(tmpdir(), 'bevel-test-doc-extract'), new WorkerDocumentExtractor()), allowAll, testKbContext({ kbDirName: KB_DIR }),
|
|
115
|
-
{ recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new
|
|
115
|
+
{ recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new VersionControlHooks(), notes: new ToolDescriptionNotes() },
|
|
116
116
|
new RoutineWritePolicyService(),
|
|
117
117
|
{} as never,
|
|
118
118
|
checker,
|
|
@@ -93,7 +93,7 @@ async function start(): Promise<string> {
|
|
|
93
93
|
source: auth.source,
|
|
94
94
|
abortSignal: signal,
|
|
95
95
|
workspaceService: {} as never,
|
|
96
|
-
|
|
96
|
+
versionControlService: {} as never,
|
|
97
97
|
events: {} as never,
|
|
98
98
|
getFilesystem: async () => ({}) as never,
|
|
99
99
|
}) as unknown as ToolContext;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, test, expect } from 'vitest';
|
|
2
|
-
import { DEFAULT_BRANCH, type ChangeRequest, type
|
|
2
|
+
import { DEFAULT_BRANCH, type ChangeRequest, type IVersionControlService } from '@bevel-software/platform-shared';
|
|
3
3
|
import { PendingSkillsService } from '../pending-skills.service.js';
|
|
4
4
|
import { hashEmail } from '../../../shared/email-identity.js';
|
|
5
5
|
import type { WorkspaceService } from '../../workspace/workspace.service.js';
|
|
@@ -74,11 +74,11 @@ function harness(opts: {
|
|
|
74
74
|
listSkills: async () => opts.released ?? [],
|
|
75
75
|
} as unknown as ISkillService;
|
|
76
76
|
|
|
77
|
-
const
|
|
77
|
+
const versionControl = {
|
|
78
78
|
listChangeRequests: async () => opts.crs,
|
|
79
|
-
} as unknown as
|
|
79
|
+
} as unknown as IVersionControlService;
|
|
80
80
|
|
|
81
|
-
return new PendingSkillsService(workspaceService, accessControl, skillService,
|
|
81
|
+
return new PendingSkillsService(workspaceService, accessControl, skillService, versionControl, testKbContext());
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
const ADMIN_WRITES = {
|
|
@@ -197,20 +197,20 @@ describe('PendingSkillsService', () => {
|
|
|
197
197
|
});
|
|
198
198
|
|
|
199
199
|
/**
|
|
200
|
-
* This hangs off the library's list load. A
|
|
200
|
+
* This hangs off the library's list load. A version-control service that cannot
|
|
201
201
|
* answer must cost the reader an empty review shelf, not their whole library.
|
|
202
202
|
*/
|
|
203
203
|
test('degrades to nothing pending when the change requests cannot be listed', async () => {
|
|
204
|
-
const
|
|
204
|
+
const versionControl = {
|
|
205
205
|
listChangeRequests: async () => {
|
|
206
206
|
throw new Error('offline');
|
|
207
207
|
},
|
|
208
|
-
} as unknown as
|
|
208
|
+
} as unknown as IVersionControlService;
|
|
209
209
|
const svc = new PendingSkillsService(
|
|
210
210
|
{} as unknown as WorkspaceService,
|
|
211
211
|
{} as unknown as IAccessControl,
|
|
212
212
|
{ listSkills: async () => [] } as unknown as ISkillService,
|
|
213
|
-
|
|
213
|
+
versionControl,
|
|
214
214
|
testKbContext(),
|
|
215
215
|
);
|
|
216
216
|
await expect(svc.listPendingSkills(AUTHOR)).resolves.toEqual([]);
|
|
@@ -3,7 +3,7 @@ import type { AddressInfo } from 'node:net';
|
|
|
3
3
|
import express from 'express';
|
|
4
4
|
import { describe, it, expect, afterEach, vi } from 'vitest';
|
|
5
5
|
import { DEFAULT_BRANCH, joinBranchFor } from '@bevel-software/platform-shared';
|
|
6
|
-
import type {
|
|
6
|
+
import type { IVersionControlService } from '@bevel-software/platform-shared';
|
|
7
7
|
|
|
8
8
|
import { workspaceIdForBranch } from '../../../shared/workspace-id.js';
|
|
9
9
|
import type { WorkspaceService } from '../../workspace/workspace.service.js';
|
|
@@ -26,8 +26,8 @@ const wsId = workspaceIdForBranch(DEFAULT_BRANCH);
|
|
|
26
26
|
const MIA = { id: 'u-mia', email: 'mia@x.io', name: 'Mia' };
|
|
27
27
|
const FOLDER = 'Skills/Eng/deploy';
|
|
28
28
|
|
|
29
|
-
async function makeHarness(listBranches:
|
|
30
|
-
const
|
|
29
|
+
async function makeHarness(listBranches: IVersionControlService['listBranches']) {
|
|
30
|
+
const versionControl = {
|
|
31
31
|
listChangeRequests: vi.fn(async () => []),
|
|
32
32
|
listBranches: vi.fn(listBranches),
|
|
33
33
|
createBranch: vi.fn(async () => ({ name: 'x', isDefault: false, isProtected: false })),
|
|
@@ -35,7 +35,7 @@ async function makeHarness(listBranches: IWorkflowService['listBranches']) {
|
|
|
35
35
|
commitChanges: vi.fn(async () => null),
|
|
36
36
|
openChangeRequest: vi.fn(async () => ({ number: 42 })),
|
|
37
37
|
getChangeRequestDetail: vi.fn(async () => ({ body: '' })),
|
|
38
|
-
} as unknown as
|
|
38
|
+
} as unknown as IVersionControlService;
|
|
39
39
|
const workspaceService = {
|
|
40
40
|
getOrCreateForBranch: vi.fn(async (branch: string) => ({ id: workspaceIdForBranch(branch) })),
|
|
41
41
|
readFile: vi.fn(async () => '---\n---\nwrite:\n - Eve <eve@x.io>\n'),
|
|
@@ -57,8 +57,8 @@ async function makeHarness(listBranches: IWorkflowService['listBranches']) {
|
|
|
57
57
|
createSkillAccessRequestRoutes({
|
|
58
58
|
skillService,
|
|
59
59
|
accessControl,
|
|
60
|
-
|
|
61
|
-
requests: new AccessRequestsService({
|
|
60
|
+
versionControl,
|
|
61
|
+
requests: new AccessRequestsService({ versionControl, workspaceService, lifecycle: joinRequests, kb }),
|
|
62
62
|
joinRequests,
|
|
63
63
|
kb,
|
|
64
64
|
resolveUser: async () => MIA,
|
|
@@ -68,7 +68,7 @@ async function makeHarness(listBranches: IWorkflowService['listBranches']) {
|
|
|
68
68
|
const s = app.listen(0, () => resolve(s));
|
|
69
69
|
});
|
|
70
70
|
const { port } = server.address() as AddressInfo;
|
|
71
|
-
return { server, url: `http://127.0.0.1:${port}/api/skills/deploy/access-request`,
|
|
71
|
+
return { server, url: `http://127.0.0.1:${port}/api/skills/deploy/access-request`, versionControl, workspaceService };
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
describe('POST /skills/:name/access-request — the branch probe', () => {
|
|
@@ -87,11 +87,11 @@ describe('POST /skills/:name/access-request — the branch probe', () => {
|
|
|
87
87
|
const res = await fetch(h.url, { method: 'POST' });
|
|
88
88
|
expect(res.status).toBe(200);
|
|
89
89
|
expect(await res.json()).toEqual({ ok: true, number: 42 });
|
|
90
|
-
expect(h.
|
|
91
|
-
expect(h.
|
|
90
|
+
expect(h.versionControl.listBranches).toHaveBeenCalledWith(wsId, { freshFetch: true, strictFetch: true });
|
|
91
|
+
expect(h.versionControl.createBranch).toHaveBeenCalledWith(wsId, joinBranchFor(MIA.email, FOLDER), DEFAULT_BRANCH);
|
|
92
92
|
// The whole chain the probe exists to enable: the grant is written AND committed.
|
|
93
93
|
expect(h.workspaceService.writeFile).toHaveBeenCalledTimes(1);
|
|
94
|
-
expect(h.
|
|
94
|
+
expect(h.versionControl.commitChanges).toHaveBeenCalledTimes(1);
|
|
95
95
|
});
|
|
96
96
|
|
|
97
97
|
it('a create that loses the race proceeds once the fresh re-probe shows the branch', async () => {
|
|
@@ -99,26 +99,26 @@ describe('POST /skills/:name/access-request — the branch probe', () => {
|
|
|
99
99
|
// Absent on the first probe, present on the second: someone else cut it in between.
|
|
100
100
|
let probes = 0;
|
|
101
101
|
const h = await makeHarness(async () => (probes++ === 0 ? [] : [{ name: branch, isDefault: false, isProtected: false }]));
|
|
102
|
-
(h.
|
|
102
|
+
(h.versionControl.createBranch as ReturnType<typeof vi.fn>).mockRejectedValueOnce(new Error('already exists'));
|
|
103
103
|
server = h.server;
|
|
104
104
|
const res = await fetch(h.url, { method: 'POST' });
|
|
105
105
|
expect(res.status).toBe(200);
|
|
106
106
|
expect(await res.json()).toEqual({ ok: true, number: 42 });
|
|
107
|
-
expect(h.
|
|
107
|
+
expect(h.versionControl.listBranches).toHaveBeenCalledTimes(2);
|
|
108
108
|
expect(h.workspaceService.writeFile).toHaveBeenCalledTimes(1);
|
|
109
|
-
expect(h.
|
|
109
|
+
expect(h.versionControl.commitChanges).toHaveBeenCalledTimes(1);
|
|
110
110
|
});
|
|
111
111
|
|
|
112
112
|
it('a create that fails with no branch to show for it stops the request — nothing is written on a branch that was not made', async () => {
|
|
113
113
|
vi.spyOn(console, 'error').mockImplementation(() => {});
|
|
114
114
|
const h = await makeHarness(async () => []);
|
|
115
|
-
(h.
|
|
115
|
+
(h.versionControl.createBranch as ReturnType<typeof vi.fn>).mockRejectedValueOnce(new Error('origin refused'));
|
|
116
116
|
server = h.server;
|
|
117
117
|
const res = await fetch(h.url, { method: 'POST' });
|
|
118
118
|
expect(res.status).toBe(500);
|
|
119
|
-
expect(h.
|
|
119
|
+
expect(h.versionControl.listBranches).toHaveBeenCalledTimes(2);
|
|
120
120
|
expect(h.workspaceService.writeFile).not.toHaveBeenCalled();
|
|
121
|
-
expect(h.
|
|
121
|
+
expect(h.versionControl.openChangeRequest).not.toHaveBeenCalled();
|
|
122
122
|
});
|
|
123
123
|
|
|
124
124
|
it('a listing that could not prove anything stops the request before a branch or a byte is written', async () => {
|
|
@@ -129,8 +129,8 @@ describe('POST /skills/:name/access-request — the branch probe', () => {
|
|
|
129
129
|
server = h.server;
|
|
130
130
|
const res = await fetch(h.url, { method: 'POST' });
|
|
131
131
|
expect(res.status).toBe(500);
|
|
132
|
-
expect(h.
|
|
132
|
+
expect(h.versionControl.createBranch).not.toHaveBeenCalled();
|
|
133
133
|
expect(h.workspaceService.writeFile).not.toHaveBeenCalled();
|
|
134
|
-
expect(h.
|
|
134
|
+
expect(h.versionControl.openChangeRequest).not.toHaveBeenCalled();
|
|
135
135
|
});
|
|
136
136
|
});
|
|
@@ -12,8 +12,8 @@ import type { IAccessControl } from '../../access/access-control.interface.js';
|
|
|
12
12
|
import { readFile as fsReadFile } from 'node:fs/promises';
|
|
13
13
|
import { execFile } from 'node:child_process';
|
|
14
14
|
import { promisify } from 'node:util';
|
|
15
|
-
import {
|
|
16
|
-
import { GitService } from '../../
|
|
15
|
+
import { VersionControlHooks } from '../../version-control/version-control-hooks.js';
|
|
16
|
+
import { GitService } from '../../version-control/git/git.service.js';
|
|
17
17
|
import { testKbContext } from '../../../__tests__/kb-context.js';
|
|
18
18
|
|
|
19
19
|
const execFileAsync = promisify(execFile);
|
|
@@ -423,7 +423,7 @@ describe('SkillService', () => {
|
|
|
423
423
|
|
|
424
424
|
const versioned = (access: IAccessControl = allowAll) => {
|
|
425
425
|
const service = svc(access);
|
|
426
|
-
service.setHistory(new GitService(workspaceService, new
|
|
426
|
+
service.setHistory(new GitService(workspaceService, new VersionControlHooks(), testKbContext({ kbDirName: KB_DIR })));
|
|
427
427
|
return service;
|
|
428
428
|
};
|
|
429
429
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { KbLayout,
|
|
1
|
+
import type { KbLayout, IVersionControlService } from '@bevel-software/platform-shared';
|
|
2
2
|
import { type WorkspaceService } from '../workspace/index.js';
|
|
3
3
|
import type { IAccessControl } from '../access/index.js';
|
|
4
4
|
import type { KbContext } from '../../shared/kb-context.js';
|
|
@@ -36,7 +36,7 @@ export class PendingSkillsService implements IPendingSkillService {
|
|
|
36
36
|
private readonly workspaceService: WorkspaceService,
|
|
37
37
|
private readonly accessControl: IAccessControl,
|
|
38
38
|
private readonly skillService: ISkillService,
|
|
39
|
-
private readonly
|
|
39
|
+
private readonly versionControl: IVersionControlService,
|
|
40
40
|
private readonly kb: KbContext,
|
|
41
41
|
) {}
|
|
42
42
|
|
|
@@ -57,7 +57,7 @@ export class PendingSkillsService implements IPendingSkillService {
|
|
|
57
57
|
{
|
|
58
58
|
workspaceService: this.workspaceService,
|
|
59
59
|
accessControl: this.accessControl,
|
|
60
|
-
|
|
60
|
+
versionControl: this.versionControl,
|
|
61
61
|
kb: this.kb,
|
|
62
62
|
},
|
|
63
63
|
userEmail,
|
|
@@ -3,10 +3,10 @@ import { logger } from '../../shared/logging.js';
|
|
|
3
3
|
|
|
4
4
|
const log = logger('skills');
|
|
5
5
|
import '../auth/index.js'; // Express Request.userId / userEmail augmentation
|
|
6
|
-
import type { AuthUser,
|
|
6
|
+
import type { AuthUser, IVersionControlService } from '@bevel-software/platform-shared';
|
|
7
7
|
import type { IAccessControl, IAccessRequests } from '../access/index.js';
|
|
8
8
|
import { folderTarget } from '../access/index.js';
|
|
9
|
-
import {
|
|
9
|
+
import { VersionControlDomainError } from '../../shared/domain-errors.js';
|
|
10
10
|
import { domainErrorBody } from '../../shared/http-errors.js';
|
|
11
11
|
import type { KbContext } from '../../shared/kb-context.js';
|
|
12
12
|
import type { JoinRequestsService } from '../plugins/index.js';
|
|
@@ -34,14 +34,14 @@ import type { ISkillService } from './skills.contract.js';
|
|
|
34
34
|
export function createSkillAccessRequestRoutes(deps: {
|
|
35
35
|
skillService: ISkillService;
|
|
36
36
|
accessControl: IAccessControl;
|
|
37
|
-
|
|
37
|
+
versionControl: IVersionControlService;
|
|
38
38
|
/** Opens an access request — the same opener the Manage access dialog uses, wired by the composition root. */
|
|
39
39
|
requests: IAccessRequests;
|
|
40
40
|
joinRequests: JoinRequestsService;
|
|
41
41
|
kb: KbContext;
|
|
42
42
|
resolveUser: (req: express.Request) => Promise<AuthUser | null>;
|
|
43
43
|
}): express.Router {
|
|
44
|
-
const { skillService, accessControl,
|
|
44
|
+
const { skillService, accessControl, versionControl, requests, joinRequests, kb, resolveUser } = deps;
|
|
45
45
|
const router = express.Router();
|
|
46
46
|
const wsId = () => kb.defaultWorkspaceId();
|
|
47
47
|
const rulesOf = (folder: string) => `${folder}/access.md`;
|
|
@@ -85,7 +85,7 @@ export function createSkillAccessRequestRoutes(deps: {
|
|
|
85
85
|
});
|
|
86
86
|
res.json({ ok: true, number });
|
|
87
87
|
} catch (err) {
|
|
88
|
-
if (err instanceof
|
|
88
|
+
if (err instanceof VersionControlDomainError) {
|
|
89
89
|
res.status(err.status).json(domainErrorBody(err));
|
|
90
90
|
return;
|
|
91
91
|
}
|
|
@@ -113,7 +113,7 @@ export function createSkillAccessRequestRoutes(deps: {
|
|
|
113
113
|
try {
|
|
114
114
|
const ctx = await requireEditor(req, res, () => res.json({ requests: [] }));
|
|
115
115
|
if (!ctx) return;
|
|
116
|
-
const crs = await
|
|
116
|
+
const crs = await versionControl.listChangeRequests();
|
|
117
117
|
res.json({ requests: await joinRequests.list(ctx.folder, folderTarget(ctx.folder), crs, ctx.user) });
|
|
118
118
|
} catch (err) {
|
|
119
119
|
log.error('failed to list access requests:', { err });
|
|
@@ -130,7 +130,7 @@ export function createSkillAccessRequestRoutes(deps: {
|
|
|
130
130
|
res.status(400).json({ error: 'Invalid change request number' });
|
|
131
131
|
return;
|
|
132
132
|
}
|
|
133
|
-
const cr = await
|
|
133
|
+
const cr = await versionControl.getChangeRequest(crNumber);
|
|
134
134
|
if (!cr) {
|
|
135
135
|
res.status(404).json({ error: 'Not found' });
|
|
136
136
|
return;
|