@bevel-software/platform-core-backend 0.34.0 → 0.36.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-guide/access-control.md +146 -300
- package/agent-guide/conventions.md +23 -25
- package/agent-guide/directory-structure.md +72 -120
- package/agent-guide/drafts-and-change-requests.md +92 -0
- package/agent-guide/for-git-users.md +47 -0
- package/agent-guide/glossary.md +36 -0
- package/agent-guide/how-agents-find-things.md +49 -0
- package/agent-guide/html-views.md +16 -11
- package/agent-guide/new-knowledge-base.md +9 -8
- package/agent-guide/onboarding.md +111 -0
- package/agent-guide/skills.md +67 -42
- package/agent-guide/start-here.md +66 -0
- package/agent-guide/tool-manuals.md +133 -154
- package/agent-guide/tools.md +67 -0
- package/agent-guide/where-a-new-file-goes.md +45 -28
- package/dist/core/catalog-cache-invalidation.d.ts +2 -2
- package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
- package/dist/core/compose-embed.d.ts +2 -2
- package/dist/core/compose-embed.d.ts.map +1 -1
- package/dist/core/compose-embed.js +1 -1
- package/dist/core/compose-embed.js.map +1 -1
- package/dist/core/core-ports.d.ts +19 -4
- package/dist/core/core-ports.d.ts.map +1 -1
- package/dist/core/core-ports.js.map +1 -1
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +27 -25
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +25 -13
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +75 -60
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +4 -4
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +5 -5
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core-config.d.ts +2 -2
- package/dist/core-config.js +3 -3
- package/dist/core-config.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.interface.d.ts +22 -0
- package/dist/modules/access/access-control.interface.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +3 -1
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +76 -1
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access-declarations.d.ts +2 -2
- package/dist/modules/access/access-declarations.d.ts.map +1 -1
- package/dist/modules/access/access-declarations.js +2 -2
- package/dist/modules/access/access-declarations.js.map +1 -1
- package/dist/modules/access/access-mutation.service.d.ts +2 -2
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
- package/dist/modules/access/access-mutation.service.js +2 -2
- package/dist/modules/access/access-mutation.service.js.map +1 -1
- package/dist/modules/access/access-requests.routes.d.ts +2 -2
- package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
- package/dist/modules/access/access-requests.routes.js +5 -5
- package/dist/modules/access/access-requests.routes.js.map +1 -1
- package/dist/modules/access/access-requests.service.d.ts +2 -2
- package/dist/modules/access/access-requests.service.d.ts.map +1 -1
- package/dist/modules/access/access-requests.service.js +11 -11
- package/dist/modules/access/access-requests.service.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts +2 -2
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +32 -13
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/admin-locked-commit.d.ts +5 -5
- package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
- package/dist/modules/access/admin-locked-commit.js +7 -7
- package/dist/modules/access/admin-locked-commit.js.map +1 -1
- package/dist/modules/access/admin-route-helpers.d.ts +1 -1
- package/dist/modules/access/admin-route-helpers.js +5 -5
- package/dist/modules/access/admin-route-helpers.js.map +1 -1
- package/dist/modules/access/change-read-gate.d.ts +1 -1
- package/dist/modules/access/change-read-gate.js +1 -1
- package/dist/modules/access/groups-admin.service.d.ts +7 -7
- package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.service.js +6 -6
- package/dist/modules/access/groups-admin.service.js.map +1 -1
- package/dist/modules/access/index.d.ts +1 -1
- package/dist/modules/access/index.d.ts.map +1 -1
- package/dist/modules/access/reference-scan.d.ts +1 -1
- package/dist/modules/access/roles-admin.service.d.ts +7 -7
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
- package/dist/modules/access/roles-admin.service.js +8 -8
- package/dist/modules/access/roles-admin.service.js.map +1 -1
- package/dist/modules/access/synced-groups-committer.d.ts +4 -4
- package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-committer.js +7 -7
- package/dist/modules/access/synced-groups-committer.js.map +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts +6 -6
- package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
- package/dist/modules/access/user-access-removal.service.js +4 -4
- package/dist/modules/access/user-access-removal.service.js.map +1 -1
- package/dist/modules/access-model/access-errors.d.ts +4 -4
- package/dist/modules/access-model/access-errors.d.ts.map +1 -1
- package/dist/modules/access-model/access-errors.js +4 -4
- package/dist/modules/access-model/access-errors.js.map +1 -1
- package/dist/modules/access-model/access-grammar.d.ts +1 -1
- package/dist/modules/access-model/access-grammar.js +4 -4
- package/dist/modules/access-model/change-gate.d.ts +1 -1
- package/dist/modules/access-model/change-gate.js +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts +4 -4
- package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.js +4 -4
- package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.d.ts +63 -18
- package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.js +144 -30
- package/dist/modules/agent-guide/agent-guide.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.d.ts +6 -2
- package/dist/modules/agent-guide/agent-guide.tools.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.js +45 -31
- package/dist/modules/agent-guide/agent-guide.tools.js.map +1 -1
- package/dist/modules/agent-guide/guide-budget.d.ts +51 -0
- package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -0
- package/dist/modules/agent-guide/guide-budget.js +71 -0
- package/dist/modules/agent-guide/guide-budget.js.map +1 -0
- package/dist/modules/agent-guide/index.d.ts +2 -1
- package/dist/modules/agent-guide/index.d.ts.map +1 -1
- package/dist/modules/agent-guide/index.js +2 -1
- package/dist/modules/agent-guide/index.js.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +12 -5
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.js +13 -6
- package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
- package/dist/modules/agent-instructions/compose.d.ts +15 -8
- package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
- package/dist/modules/agent-instructions/compose.js +28 -10
- package/dist/modules/agent-instructions/compose.js.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.d.ts +14 -6
- package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.js +60 -18
- package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
- package/dist/modules/auth/account-erasure.service.d.ts +36 -7
- package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
- package/dist/modules/auth/account-erasure.service.js +30 -10
- package/dist/modules/auth/account-erasure.service.js.map +1 -1
- package/dist/modules/auth/account-hooks.d.ts +20 -0
- package/dist/modules/auth/account-hooks.d.ts.map +1 -1
- package/dist/modules/auth/account-hooks.js +10 -0
- package/dist/modules/auth/account-hooks.js.map +1 -1
- package/dist/modules/auth/account-switch-lock.js +2 -2
- package/dist/modules/auth/account-switch-lock.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts +7 -2
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +23 -4
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +1 -1
- package/dist/modules/auth/auth.service.js +4 -4
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/index.d.ts +1 -0
- package/dist/modules/auth/index.d.ts.map +1 -1
- package/dist/modules/code-mode/code-mode.tool.js +2 -2
- package/dist/modules/code-mode/code-mode.tool.js.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.d.ts +0 -12
- package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.js +1 -38
- package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
- package/dist/modules/database/core-schema.js +2 -2
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/diff/diff.routes.d.ts +3 -3
- package/dist/modules/diff/diff.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.js +7 -7
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/embed/embed.routes.js +1 -1
- package/dist/modules/embed/embed.routes.js.map +1 -1
- package/dist/modules/embed/embed.service.d.ts +4 -4
- package/dist/modules/embed/embed.service.d.ts.map +1 -1
- package/dist/modules/embed/embed.service.js +18 -18
- package/dist/modules/embed/embed.service.js.map +1 -1
- package/dist/modules/kb-fs/branch-name.js +8 -8
- package/dist/modules/kb-fs/branch-name.js.map +1 -1
- package/dist/modules/kb-fs/file-change-notifier.d.ts +2 -2
- package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -9
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +27 -27
- package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/repo-path.js +5 -5
- package/dist/modules/kb-fs/repo-path.js.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
- package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.js +2 -2
- package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
- package/dist/modules/kb-sync/index.d.ts +1 -1
- package/dist/modules/kb-sync/index.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js +10 -10
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +11 -4
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +80 -53
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
- package/dist/modules/onboarding/onboarding.routes.js +2 -2
- package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.d.ts +4 -4
- package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.js +4 -4
- package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.js +7 -7
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
- package/dist/modules/plugins/join-requests.service.d.ts +3 -3
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +5 -5
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.js +1 -1
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +2 -2
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +8 -8
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +87 -2
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js +635 -74
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +3 -2
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js +2 -1
- package/dist/modules/secrets-vault/index.js.map +1 -1
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +205 -11
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.contract.js +27 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +206 -45
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
- package/dist/modules/settings/connection-check.js +1 -1
- package/dist/modules/settings/connection-check.js.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +1 -1
- package/dist/modules/settings/git-root-folders.js +1 -1
- package/dist/modules/settings/git-root-folders.js.map +1 -1
- package/dist/modules/settings/oidc-check.d.ts.map +1 -1
- package/dist/modules/settings/oidc-check.js +5 -17
- package/dist/modules/settings/oidc-check.js.map +1 -1
- package/dist/modules/settings/setup.routes.d.ts +1 -1
- package/dist/modules/settings/setup.routes.js +1 -1
- package/dist/modules/skills/pending-skills.service.d.ts +3 -3
- package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
- package/dist/modules/skills/pending-skills.service.js +4 -4
- package/dist/modules/skills/pending-skills.service.js.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +5 -5
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
- package/dist/modules/skills/skills.tools.js +1 -1
- package/dist/modules/skills/skills.tools.js.map +1 -1
- package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +2 -2
- package/dist/modules/tool-helpers/tool-context.js.map +1 -1
- package/dist/modules/tool-helpers/tool-def.js +1 -1
- package/dist/modules/tool-helpers/tool-def.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +2 -2
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.d.ts +7 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.js +69 -38
- package/dist/modules/tool-manuals/mcp-json-discovery.js.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
- package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
- package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +70 -3
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +18 -8
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +166 -49
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +11 -2
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +66 -24
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
- package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
- package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +53 -49
- package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
- package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
- package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-hooks.js.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
- package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
- package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
- package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
- package/dist/modules/version-control/event-bus.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
- package/dist/modules/version-control/event-bus.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
- package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
- package/dist/modules/version-control/events-delivery.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
- package/dist/modules/version-control/events.routes.d.ts.map +1 -0
- package/dist/modules/version-control/events.routes.js.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
- package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
- package/dist/modules/version-control/file-lock.service.js.map +1 -0
- package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
- package/dist/modules/version-control/git/change-request-link.js.map +1 -0
- package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
- package/dist/modules/version-control/git/git-version.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.d.ts +8 -8
- package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.js +53 -53
- package/dist/modules/version-control/git/git.service.js.map +1 -0
- package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
- package/dist/modules/version-control/git/merge-commit.js.map +1 -0
- package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
- package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
- package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
- package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
- package/dist/modules/version-control/index.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/index.js +3 -2
- package/dist/modules/version-control/index.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
- package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
- package/dist/modules/version-control/pending-commits.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
- package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
- package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
- package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
- package/dist/modules/version-control/read-on-branch.js.map +1 -0
- package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
- package/dist/modules/version-control/recovery-bot.js.map +1 -0
- package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
- package/dist/modules/version-control/sanitize-error.js.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +4 -4
- package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +3 -3
- package/dist/modules/version-control/version-control-hooks.js.map +1 -0
- package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
- package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
- package/dist/modules/version-control/version-control.routes.js.map +1 -0
- package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -31
- package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +89 -94
- package/dist/modules/version-control/version-control.service.js.map +1 -0
- package/dist/modules/workspace/agent-access.gate.d.ts +6 -6
- package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
- package/dist/modules/workspace/agent-access.gate.js +2 -2
- package/dist/modules/workspace/agent-access.gate.js.map +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
- package/dist/modules/workspace/git-internals.middleware.js +2 -2
- package/dist/modules/workspace/kb-repository.js +1 -1
- package/dist/modules/workspace/kb-repository.js.map +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-git.js +1 -1
- package/dist/modules/workspace/startup/kb-git.js.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
- package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.js +8 -5
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
- package/dist/modules/workspace/workspace-tmp.js +3 -3
- package/dist/modules/workspace/workspace-tmp.js.map +1 -1
- package/dist/modules/workspace/workspace.routes.d.ts +4 -4
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +22 -22
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +6 -6
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +11 -11
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +5 -3
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +85 -30
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/shared/canonical-file-identity.d.ts +2 -2
- package/dist/shared/canonical-file-identity.js +5 -5
- package/dist/shared/canonical-file-identity.js.map +1 -1
- package/dist/shared/domain-errors.d.ts +39 -39
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +44 -44
- package/dist/shared/domain-errors.js.map +1 -1
- package/dist/shared/git.contract.d.ts +1 -1
- package/dist/shared/git.contract.js +1 -1
- package/dist/shared/http-errors.d.ts +3 -3
- package/dist/shared/http-errors.d.ts.map +1 -1
- package/dist/shared/http-errors.js +1 -1
- package/dist/shared/http-errors.js.map +1 -1
- package/dist/shared/oauth-token-error.d.ts +23 -0
- package/dist/shared/oauth-token-error.d.ts.map +1 -0
- package/dist/shared/oauth-token-error.js +47 -0
- package/dist/shared/oauth-token-error.js.map +1 -0
- package/dist/shared/pending-proposals.d.ts +3 -3
- package/dist/shared/pending-proposals.d.ts.map +1 -1
- package/dist/shared/pending-proposals.js +2 -2
- package/dist/shared/pending-proposals.js.map +1 -1
- package/dist/shared/read-capped.d.ts +19 -0
- package/dist/shared/read-capped.d.ts.map +1 -0
- package/dist/shared/read-capped.js +45 -0
- package/dist/shared/read-capped.js.map +1 -0
- package/dist/tenancy/static-tenant-source.js +1 -1
- package/dist/tenancy/static-tenant-source.js.map +1 -1
- package/migrations/0012_agent_audit.sql +40 -40
- package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
- package/migrations/meta/0012_snapshot.json +2246 -2246
- package/migrations/meta/0013_snapshot.json +2258 -2258
- package/package.json +5 -4
- package/src/__tests__/account-admin.ts +27 -0
- package/src/__tests__/hexis-catalog.ts +144 -0
- package/src/__tests__/kb-context.ts +30 -30
- package/src/__tests__/kb-layout-config.test.ts +21 -0
- package/src/__tests__/open-change-gate.ts +1 -1
- package/src/__tests__/real-disk.ts +21 -0
- package/src/__tests__/tokens.ts +19 -0
- package/src/__tests__/tool-handler.ts +15 -0
- package/src/__tests__/tool-manuals.ts +32 -0
- package/src/__tests__/tool-wiring.ts +31 -0
- package/src/__tests__/workspace-service.ts +1 -1
- package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
- package/src/core/__tests__/compose-embed.test.ts +1 -1
- package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
- package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
- package/src/core/__tests__/gated-boot.test.ts +2 -2
- package/src/core/__tests__/lifecycle.test.ts +9 -9
- package/src/core/__tests__/oauth-sign-in-real-file.test.ts +179 -0
- package/src/core/catalog-cache-invalidation.ts +2 -2
- package/src/core/compose-embed.ts +3 -3
- package/src/core/core-ports.ts +19 -4
- package/src/core/create-core-server.ts +40 -26
- package/src/core/create-core-services.ts +92 -66
- package/src/core/lifecycle.ts +9 -9
- package/src/core-config.ts +3 -3
- package/src/index.ts +5 -5
- package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
- package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
- package/src/modules/access/__tests__/access-requests.routes.test.ts +20 -20
- package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
- package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +54 -14
- package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
- package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
- package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
- package/src/modules/access/__tests__/groups-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/holder-changes.test.ts +127 -0
- package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
- package/src/modules/access/__tests__/roles-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/roles-capabilities.test.ts +19 -19
- package/src/modules/access/__tests__/roles.routes.test.ts +6 -6
- package/src/modules/access/__tests__/synced-groups-committer.test.ts +13 -13
- package/src/modules/access/__tests__/user-access-removal.service.test.ts +29 -29
- package/src/modules/access/access-control.interface.ts +26 -0
- package/src/modules/access/access-control.service.ts +93 -1
- package/src/modules/access/access-declarations.ts +2 -2
- package/src/modules/access/access-mutation.service.ts +2 -2
- package/src/modules/access/access-requests.routes.ts +7 -7
- package/src/modules/access/access-requests.service.ts +13 -13
- package/src/modules/access/access.routes.ts +34 -15
- package/src/modules/access/admin-locked-commit.ts +11 -11
- package/src/modules/access/admin-route-helpers.ts +5 -5
- package/src/modules/access/change-read-gate.ts +1 -1
- package/src/modules/access/groups-admin.service.ts +7 -7
- package/src/modules/access/index.ts +1 -1
- package/src/modules/access/reference-scan.ts +1 -1
- package/src/modules/access/roles-admin.service.ts +9 -9
- package/src/modules/access/synced-groups-committer.ts +11 -11
- package/src/modules/access/user-access-removal.service.ts +7 -7
- package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
- package/src/modules/access-model/access-errors.ts +4 -4
- package/src/modules/access-model/access-grammar.ts +4 -4
- package/src/modules/access-model/change-gate.ts +1 -1
- package/src/modules/access-model/roles-yaml-guard.ts +4 -4
- package/src/modules/agent-guide/__tests__/agent-guide.test.ts +98 -29
- package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +39 -12
- package/src/modules/agent-guide/__tests__/guide-budget.test.ts +95 -0
- package/src/modules/agent-guide/__tests__/guide-eval.test.ts +182 -0
- package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +263 -0
- package/src/modules/agent-guide/__tests__/tool-surface.json +514 -0
- package/src/modules/agent-guide/__tests__/tool-surface.test.ts +75 -0
- package/src/modules/agent-guide/agent-guide.tools.ts +49 -31
- package/src/modules/agent-guide/agent-guide.ts +165 -32
- package/src/modules/agent-guide/guide-budget.ts +77 -0
- package/src/modules/agent-guide/index.ts +12 -0
- package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
- package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
- package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +117 -11
- package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
- package/src/modules/agent-instructions/compose.ts +28 -9
- package/src/modules/agent-instructions/shared-file-rules.ts +62 -18
- package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
- package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
- package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
- package/src/modules/audit/event-classifier.ts +155 -155
- package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
- package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
- package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
- package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
- package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
- package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
- package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
- package/src/modules/auth/account-erasure.service.ts +27 -9
- package/src/modules/auth/account-hooks.ts +34 -0
- package/src/modules/auth/account-switch-lock.ts +2 -2
- package/src/modules/auth/account.routes.ts +23 -5
- package/src/modules/auth/auth.service.ts +4 -4
- package/src/modules/auth/index.ts +1 -0
- package/src/modules/code-mode/code-mode.tool.ts +2 -2
- package/src/modules/connection-probe/__tests__/connection-probe.service.test.ts +5 -24
- package/src/modules/connection-probe/connection-probe.service.ts +1 -34
- package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
- package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
- package/src/modules/database/core-schema.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
- package/src/modules/diff/diff.routes.ts +8 -8
- package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
- package/src/modules/embed/__tests__/embed.service.test.ts +42 -42
- package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
- package/src/modules/embed/embed.routes.ts +1 -1
- package/src/modules/embed/embed.service.ts +17 -17
- package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
- package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +260 -260
- package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +34 -34
- package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
- package/src/modules/kb-fs/branch-name.ts +8 -8
- package/src/modules/kb-fs/file-change-notifier.ts +2 -2
- package/src/modules/kb-fs/locking-filesystem.ts +30 -30
- package/src/modules/kb-fs/repo-path.ts +5 -5
- package/src/modules/kb-fs/tmp-ref.ts +3 -3
- package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
- package/src/modules/kb-sync/index.ts +1 -1
- package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
- package/src/modules/kb-sync/kb-sync.service.ts +9 -9
- package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
- package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
- package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
- package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
- package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
- package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
- package/src/modules/mcp/mcp.service.ts +93 -62
- package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +55 -55
- package/src/modules/onboarding/onboarding.contract.ts +1 -1
- package/src/modules/onboarding/onboarding.routes.ts +2 -2
- package/src/modules/onboarding/starter-pack.service.ts +6 -6
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
- package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
- package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
- package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
- package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
- package/src/modules/plugins/__tests__/plugins.routes.test.ts +25 -25
- package/src/modules/plugins/join-request-jobs.service.ts +10 -10
- package/src/modules/plugins/join-requests.service.ts +4 -4
- package/src/modules/plugins/plugin-rename.service.ts +1 -1
- package/src/modules/plugins/plugins.routes.ts +9 -9
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +458 -4
- package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
- package/src/modules/secrets-vault/__tests__/oauth-live-declaration.route.test.ts +218 -0
- package/src/modules/secrets-vault/__tests__/oauth-return-to.route.test.ts +39 -6
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +728 -118
- package/src/modules/secrets-vault/index.ts +8 -1
- package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
- package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
- package/src/modules/secrets-vault/secrets-vault.contract.ts +213 -11
- package/src/modules/secrets-vault/secrets-vault.routes.ts +244 -45
- package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
- package/src/modules/settings/connection-check.ts +1 -1
- package/src/modules/settings/deployment-settings.service.ts +1 -1
- package/src/modules/settings/git-root-folders.ts +1 -1
- package/src/modules/settings/oidc-check.ts +5 -18
- package/src/modules/settings/setup.routes.ts +1 -1
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
- package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
- package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
- package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
- package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
- package/src/modules/skills/pending-skills.service.ts +3 -3
- package/src/modules/skills/skill-access-requests.routes.ts +7 -7
- package/src/modules/skills/skills.tools.ts +1 -1
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +22 -14
- package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
- package/src/modules/tool-helpers/__tests__/route-tool-schemas.catalog.test.ts +38 -0
- package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
- package/src/modules/tool-helpers/tool-context.ts +6 -6
- package/src/modules/tool-helpers/tool-def.ts +1 -1
- package/src/modules/tool-helpers/tool-handler.ts +2 -2
- package/src/modules/tool-helpers/tool.contract.ts +4 -4
- package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
- package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.mcp-oauth.test.ts +197 -11
- package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +132 -6
- package/src/modules/tool-manuals/mcp-json-discovery.ts +73 -34
- package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
- package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
- package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
- package/src/modules/tool-manuals/tool-manuals.contract.ts +63 -3
- package/src/modules/tool-manuals/tool-manuals.service.ts +191 -51
- package/src/modules/tool-manuals/tool-manuals.tools.ts +93 -28
- package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
- package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
- package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +12 -119
- package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
- package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
- package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
- package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
- package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
- package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
- package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.fork-point-file.test.ts → version-control/__tests__/version-control.routes.fork-point-file.test.ts} +19 -19
- package/src/modules/{workflow/__tests__/workflow.routes.history-read-gate.test.ts → version-control/__tests__/version-control.routes.history-read-gate.test.ts} +13 -13
- package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.open-change-request.test.ts → version-control/__tests__/version-control.routes.open-change-request.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.branch-in-use.test.ts → version-control/__tests__/version-control.service.branch-in-use.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts → version-control/__tests__/version-control.service.deleted-branch-sweep.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +97 -99
- package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
- package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +42 -42
- package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.pg.test.ts → version-control/__tests__/version-control.service.update-change-request.pg.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.test.ts → version-control/__tests__/version-control.service.update-change-request.test.ts} +11 -11
- package/src/modules/{workflow/__tests__/workflow.service.update-from-target.test.ts → version-control/__tests__/version-control.service.update-from-target.test.ts} +22 -22
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
- package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
- package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
- package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +52 -48
- package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
- package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
- package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
- package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
- package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
- package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
- package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +20 -20
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/git.service.ts +57 -57
- package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
- package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
- package/src/modules/{workflow → version-control}/index.ts +6 -5
- package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
- package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
- package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
- package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +3 -3
- package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
- package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +92 -97
- package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
- package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
- package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
- package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
- package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
- package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
- package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
- package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
- package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +12 -14
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +182 -75
- package/src/modules/workspace/agent-access.gate.ts +6 -6
- package/src/modules/workspace/git-internals.middleware.ts +2 -2
- package/src/modules/workspace/kb-repository.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
- package/src/modules/workspace/startup/kb-git.ts +1 -1
- package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
- package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
- package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
- package/src/modules/workspace/startup/steps/template-source.ts +21 -6
- package/src/modules/workspace/workspace-tmp.ts +4 -4
- package/src/modules/workspace/workspace.routes.ts +26 -26
- package/src/modules/workspace/workspace.service.ts +11 -11
- package/src/modules/workspace/workspace.tools.ts +90 -30
- package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
- package/src/shared/__tests__/http-errors.test.ts +4 -4
- package/src/shared/__tests__/read-capped.test.ts +68 -0
- package/src/shared/canonical-file-identity.ts +5 -5
- package/src/shared/domain-errors.ts +44 -44
- package/src/shared/git.contract.ts +1 -1
- package/src/shared/http-errors.ts +3 -3
- package/src/shared/kb-context.ts +130 -130
- package/src/shared/oauth-token-error.ts +46 -0
- package/src/shared/pending-proposals.ts +4 -4
- package/src/shared/read-capped.ts +40 -0
- package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
- package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
- package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
- package/src/tenancy/index.ts +35 -35
- package/src/tenancy/static-tenant-source.ts +1 -1
- package/src/tenancy/tenant-host.ts +261 -261
- package/src/tenancy/tenant-runtime.ts +208 -208
- package/src/tenancy/tenant-source.contract.ts +59 -59
- package/agent-guide/finding-things.md +0 -7
- package/agent-guide/introduction.md +0 -27
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
- package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/change-request-hooks.js.map +0 -1
- package/dist/modules/workflow/event-bus.d.ts.map +0 -1
- package/dist/modules/workflow/event-bus.js.map +0 -1
- package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
- package/dist/modules/workflow/events-delivery.js.map +0 -1
- package/dist/modules/workflow/events.routes.d.ts.map +0 -1
- package/dist/modules/workflow/events.routes.js.map +0 -1
- package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
- package/dist/modules/workflow/file-lock.service.js.map +0 -1
- package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
- package/dist/modules/workflow/git/change-request-link.js.map +0 -1
- package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
- package/dist/modules/workflow/git/git-version.js.map +0 -1
- package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/git.service.js.map +0 -1
- package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
- package/dist/modules/workflow/git/merge-commit.js.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
- package/dist/modules/workflow/index.d.ts.map +0 -1
- package/dist/modules/workflow/index.js.map +0 -1
- package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.service.js.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
- package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
- package/dist/modules/workflow/read-on-branch.js.map +0 -1
- package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
- package/dist/modules/workflow/recovery-bot.js.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
- package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
- package/dist/modules/workflow/sanitize-error.js.map +0 -1
- package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/workflow-hooks.js.map +0 -1
- package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.routes.js.map +0 -1
- package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.service.js.map +0 -1
- package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
- /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
- /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
- /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
- /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
- /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
- /package/src/modules/{workflow → version-control}/sanitize-error.ts +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { DbSecretsVaultService } from './db-secrets-vault.service.js';
|
|
2
|
+
export { managedSignInErasure } from './managed-sign-in-erasure.js';
|
|
2
3
|
export { McpOAuthDiscoveryService, type McpAuthDiscovery } from './mcp-oauth-discovery.service.js';
|
|
3
4
|
export {
|
|
4
5
|
createSecretsVaultRoutes,
|
|
@@ -13,6 +14,12 @@ export type {
|
|
|
13
14
|
PutStaticSecretInput,
|
|
14
15
|
CreateOAuthSecretInput,
|
|
15
16
|
ForcedRefreshOutcome,
|
|
17
|
+
ManagedSignInRef,
|
|
18
|
+
ManagedSignInCard,
|
|
19
|
+
ManagedSignInPort,
|
|
20
|
+
ManagedTokenRefresher,
|
|
21
|
+
ManagedTokenRevoker,
|
|
22
|
+
DeliveredTokenSet,
|
|
16
23
|
} from './secrets-vault.contract.js';
|
|
17
24
|
export {
|
|
18
25
|
InvalidSecretError,
|
|
@@ -27,4 +34,4 @@ export {
|
|
|
27
34
|
DEFAULT_SECRETS_SCOPE,
|
|
28
35
|
} from './secrets-variable-loader.js';
|
|
29
36
|
// Reached by other modules; exported here so they stop importing the files.
|
|
30
|
-
export { scopesCovered } from './secrets-vault.contract.js';
|
|
37
|
+
export { scopesCovered, userSecretGap, type UserSecretGap } from './secrets-vault.contract.js';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { ISecretsVaultService, ManagedRowsWriter } from './secrets-vault.contract.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The vault's slice of account erasure (an `IErasureParticipant`, see the
|
|
5
|
+
* auth module): a managed sign-in's tokens are told to their provider before
|
|
6
|
+
* the user row goes and the vault rows cascade away with it. Switching an
|
|
7
|
+
* account off reaches the same call through `onAccountDeactivated`; erasing
|
|
8
|
+
* an account that was never switched off would otherwise drop its rows with
|
|
9
|
+
* the grant still live at the provider, which is the one leak the revoker
|
|
10
|
+
* exists to close.
|
|
11
|
+
*
|
|
12
|
+
* Two passes, because a sign-in can land while an erasure runs:
|
|
13
|
+
*
|
|
14
|
+
* - `before`, outside the transaction: revocation is best effort and
|
|
15
|
+
* idempotent (a revoked token is deleted here either way, and a second run
|
|
16
|
+
* finds no managed row). A row the vault could not settle (its tokens kept
|
|
17
|
+
* changing under the revoke) makes the vault throw, and the erasure is
|
|
18
|
+
* refused with it: the account itself is not erased, the rows already
|
|
19
|
+
* revoked and deleted in this pass stay deleted (each was told to its
|
|
20
|
+
* provider first), the admin retries, and the retry finds only what is
|
|
21
|
+
* still to settle.
|
|
22
|
+
* - `inTransaction`, beside the user row's deletion: whatever managed row
|
|
23
|
+
* landed since (a reconnect, a broker handoff) is locked, revoked and
|
|
24
|
+
* deleted in the same transaction, so a handoff arriving after the lock
|
|
25
|
+
* waits and then finds no row, and nothing cascades away unrevoked. A
|
|
26
|
+
* sign-in begun after the lock inserts a row holding a nonce and no grant,
|
|
27
|
+
* which the cascade removes harmlessly.
|
|
28
|
+
*/
|
|
29
|
+
export function managedSignInErasure(vault: Pick<ISecretsVaultService, 'removeManagedRowsOfUser'>): {
|
|
30
|
+
before(target: { userId: string }): Promise<void>;
|
|
31
|
+
inTransaction(tx: ManagedRowsWriter, target: { userId: string }): Promise<void>;
|
|
32
|
+
} {
|
|
33
|
+
return {
|
|
34
|
+
async before(target) {
|
|
35
|
+
await vault.removeManagedRowsOfUser(target.userId);
|
|
36
|
+
},
|
|
37
|
+
async inTransaction(tx, target) {
|
|
38
|
+
await vault.removeManagedRowsOfUser(target.userId, tx);
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
@@ -1,134 +1,134 @@
|
|
|
1
|
-
import { type VariableLoader, VariableLoaderSerializer, Serializer } from '@utcp/sdk';
|
|
2
|
-
import { logger } from '../../shared/logging.js';
|
|
3
|
-
import type { ISecretsVaultService } from './secrets-vault.contract.js';
|
|
4
|
-
|
|
5
|
-
const log = logger('secrets-vault');
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* The `bevel-secrets` UTCP variable loader — the swappable seam that lets any
|
|
9
|
-
* UTCP client resolve `${VAR}` placeholders from the Secrets Vault at tool-call
|
|
10
|
-
* time (lazily, so OAuth tokens are refreshed on demand).
|
|
11
|
-
*
|
|
12
|
-
* UTCP resolves a variable in three tiers (see `DefaultVariableSubstitutor`):
|
|
13
|
-
* `config.variables` (exact) → each `config.load_variables_from` loader's
|
|
14
|
-
* async `get()` → `process.env`. We seed a per-user loader instance here so any
|
|
15
|
-
* tool var not already in `config.variables` (the reserved `API_URL` /
|
|
16
|
-
* `CONNECTION_KEY`) is resolved from this user's secrets.
|
|
17
|
-
*
|
|
18
|
-
* The `UtcpClient.create` path re-validates the whole config through the
|
|
19
|
-
* serializer registry, so a loader can't be handed in as a bare live object — it
|
|
20
|
-
* must round-trip through a registered serializer. We therefore put a plain
|
|
21
|
-
* descriptor `{ variable_loader_type, user_id, scope }` in `load_variables_from`
|
|
22
|
-
* (via {@link bevelSecretsLoaderConfig}) and let the registered serializer
|
|
23
|
-
* rebuild a live loader bound to the vault registered under that scope.
|
|
24
|
-
*
|
|
25
|
-
* ONE VAULT PER SCOPE, NOT PER PROCESS. The serializer registry is UTCP's and
|
|
26
|
-
* process-wide, but a process can host several knowledge bases, each with a
|
|
27
|
-
* vault of its own, and a user id is only unique within one of them. So the
|
|
28
|
-
* descriptor names the scope its vault was registered under, and a loader
|
|
29
|
-
* reads through that vault alone: two knowledge bases whose users both stored
|
|
30
|
-
* `weather_WEATHER_KEY` never see each other's value. A single-tenant
|
|
31
|
-
* deployment registers under {@link DEFAULT_SECRETS_SCOPE} and names nothing.
|
|
32
|
-
* Swapping the vault backend (e.g. to a client's external secret manager) is
|
|
33
|
-
* just a different `ISecretsVaultService` passed to
|
|
34
|
-
* {@link registerBevelSecretsVariableLoader}.
|
|
35
|
-
*/
|
|
36
|
-
export const BEVEL_SECRETS_LOADER_TYPE = 'bevel_secrets';
|
|
37
|
-
|
|
38
|
-
/** The scope a deployment that hosts one knowledge base registers under. */
|
|
39
|
-
export const DEFAULT_SECRETS_SCOPE = 'default';
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* The vaults the reconstructed loaders read through, by scope. A composition
|
|
43
|
-
* root registers its vault before any client is built; a graph that is torn
|
|
44
|
-
* down unregisters it so a stale descriptor resolves nothing.
|
|
45
|
-
*/
|
|
46
|
-
const vaults = new Map<string, ISecretsVaultService>();
|
|
47
|
-
|
|
48
|
-
export class BevelSecretsVariableLoader implements VariableLoader {
|
|
49
|
-
readonly variable_loader_type = BEVEL_SECRETS_LOADER_TYPE;
|
|
50
|
-
readonly user_id: string;
|
|
51
|
-
readonly scope: string;
|
|
52
|
-
// VariableLoader is an open shape; allow arbitrary extra props.
|
|
53
|
-
[key: string]: unknown;
|
|
54
|
-
|
|
55
|
-
constructor(userId: string, scope: string = DEFAULT_SECRETS_SCOPE) {
|
|
56
|
-
this.user_id = userId;
|
|
57
|
-
this.scope = scope;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Resolve `effectiveKey` — the UTCP-namespaced `<manual>_<VAR>` — against the
|
|
62
|
-
* vault VERBATIM. Preserving the manual prefix binds a secret to exactly ONE
|
|
63
|
-
* manual: another manual referencing the same bare `${VAR}` forms a different
|
|
64
|
-
* key and misses. This is the per-manual isolation UTCP's namespacing gives us
|
|
65
|
-
* — we intentionally do NOT strip the prefix, so a malicious `.tool` can't
|
|
66
|
-
* harvest a secret the user configured for a different manual.
|
|
67
|
-
*/
|
|
68
|
-
async get(effectiveKey: string): Promise<string | null> {
|
|
69
|
-
const vault = vaults.get(this.scope);
|
|
70
|
-
if (!vault || !this.user_id) return null;
|
|
71
|
-
try {
|
|
72
|
-
return await vault.resolve(this.user_id, effectiveKey);
|
|
73
|
-
} catch (err) {
|
|
74
|
-
// Log the fault so a backend failure is distinguishable from a merely
|
|
75
|
-
// unset secret (resolve returning null) when troubleshooting.
|
|
76
|
-
log.error(`resolve failed for user=${this.user_id} key=${effectiveKey}:`, { err });
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
class BevelSecretsVariableLoaderSerializer extends Serializer<VariableLoader> {
|
|
83
|
-
toDict(obj: VariableLoader): Record<string, unknown> {
|
|
84
|
-
const loader = obj as BevelSecretsVariableLoader;
|
|
85
|
-
return {
|
|
86
|
-
variable_loader_type: BEVEL_SECRETS_LOADER_TYPE,
|
|
87
|
-
user_id: loader.user_id ?? '',
|
|
88
|
-
scope: loader.scope ?? DEFAULT_SECRETS_SCOPE,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
validateDict(obj: Record<string, unknown>): VariableLoader {
|
|
93
|
-
const userId = typeof obj.user_id === 'string' ? obj.user_id : '';
|
|
94
|
-
const scope = typeof obj.scope === 'string' && obj.scope ? obj.scope : DEFAULT_SECRETS_SCOPE;
|
|
95
|
-
return new BevelSecretsVariableLoader(userId, scope);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// Register the serializer on module load so a `{ variable_loader_type:
|
|
100
|
-
// 'bevel_secrets' }` descriptor round-trips through `UtcpClient.create` as soon
|
|
101
|
-
// as this module is imported — independent of whether a vault has been bound
|
|
102
|
-
// yet. Until `registerBevelSecretsVariableLoader` binds a vault, loaders simply
|
|
103
|
-
// resolve to null (no secrets available), so `create` never throws for lack of
|
|
104
|
-
// registration. Idempotent (safe under tsx hot-reload).
|
|
105
|
-
VariableLoaderSerializer.registerVariableLoader(
|
|
106
|
-
BEVEL_SECRETS_LOADER_TYPE,
|
|
107
|
-
new BevelSecretsVariableLoaderSerializer(),
|
|
108
|
-
true,
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Bind the vault the loaders of `scope` read through. Called once per
|
|
113
|
-
* knowledge base at composition time; before it runs, loaders of that scope
|
|
114
|
-
* resolve to null.
|
|
115
|
-
*/
|
|
116
|
-
export function registerBevelSecretsVariableLoader(
|
|
117
|
-
secretsVault: ISecretsVaultService,
|
|
118
|
-
scope: string = DEFAULT_SECRETS_SCOPE,
|
|
119
|
-
): void {
|
|
120
|
-
vaults.set(scope, secretsVault);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/** Forget a scope's vault — the last step of tearing a knowledge base's graph down. */
|
|
124
|
-
export function unregisterBevelSecretsVariableLoader(scope: string = DEFAULT_SECRETS_SCOPE): void {
|
|
125
|
-
vaults.delete(scope);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* The plain descriptor to place in a `UtcpClientConfig.load_variables_from`
|
|
130
|
-
* for a given user of the knowledge base registered under `scope`.
|
|
131
|
-
*/
|
|
132
|
-
export function bevelSecretsLoaderConfig(userId: string, scope: string = DEFAULT_SECRETS_SCOPE): Record<string, unknown> {
|
|
133
|
-
return { variable_loader_type: BEVEL_SECRETS_LOADER_TYPE, user_id: userId, scope };
|
|
134
|
-
}
|
|
1
|
+
import { type VariableLoader, VariableLoaderSerializer, Serializer } from '@utcp/sdk';
|
|
2
|
+
import { logger } from '../../shared/logging.js';
|
|
3
|
+
import type { ISecretsVaultService } from './secrets-vault.contract.js';
|
|
4
|
+
|
|
5
|
+
const log = logger('secrets-vault');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The `bevel-secrets` UTCP variable loader — the swappable seam that lets any
|
|
9
|
+
* UTCP client resolve `${VAR}` placeholders from the Secrets Vault at tool-call
|
|
10
|
+
* time (lazily, so OAuth tokens are refreshed on demand).
|
|
11
|
+
*
|
|
12
|
+
* UTCP resolves a variable in three tiers (see `DefaultVariableSubstitutor`):
|
|
13
|
+
* `config.variables` (exact) → each `config.load_variables_from` loader's
|
|
14
|
+
* async `get()` → `process.env`. We seed a per-user loader instance here so any
|
|
15
|
+
* tool var not already in `config.variables` (the reserved `API_URL` /
|
|
16
|
+
* `CONNECTION_KEY`) is resolved from this user's secrets.
|
|
17
|
+
*
|
|
18
|
+
* The `UtcpClient.create` path re-validates the whole config through the
|
|
19
|
+
* serializer registry, so a loader can't be handed in as a bare live object — it
|
|
20
|
+
* must round-trip through a registered serializer. We therefore put a plain
|
|
21
|
+
* descriptor `{ variable_loader_type, user_id, scope }` in `load_variables_from`
|
|
22
|
+
* (via {@link bevelSecretsLoaderConfig}) and let the registered serializer
|
|
23
|
+
* rebuild a live loader bound to the vault registered under that scope.
|
|
24
|
+
*
|
|
25
|
+
* ONE VAULT PER SCOPE, NOT PER PROCESS. The serializer registry is UTCP's and
|
|
26
|
+
* process-wide, but a process can host several knowledge bases, each with a
|
|
27
|
+
* vault of its own, and a user id is only unique within one of them. So the
|
|
28
|
+
* descriptor names the scope its vault was registered under, and a loader
|
|
29
|
+
* reads through that vault alone: two knowledge bases whose users both stored
|
|
30
|
+
* `weather_WEATHER_KEY` never see each other's value. A single-tenant
|
|
31
|
+
* deployment registers under {@link DEFAULT_SECRETS_SCOPE} and names nothing.
|
|
32
|
+
* Swapping the vault backend (e.g. to a client's external secret manager) is
|
|
33
|
+
* just a different `ISecretsVaultService` passed to
|
|
34
|
+
* {@link registerBevelSecretsVariableLoader}.
|
|
35
|
+
*/
|
|
36
|
+
export const BEVEL_SECRETS_LOADER_TYPE = 'bevel_secrets';
|
|
37
|
+
|
|
38
|
+
/** The scope a deployment that hosts one knowledge base registers under. */
|
|
39
|
+
export const DEFAULT_SECRETS_SCOPE = 'default';
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The vaults the reconstructed loaders read through, by scope. A composition
|
|
43
|
+
* root registers its vault before any client is built; a graph that is torn
|
|
44
|
+
* down unregisters it so a stale descriptor resolves nothing.
|
|
45
|
+
*/
|
|
46
|
+
const vaults = new Map<string, ISecretsVaultService>();
|
|
47
|
+
|
|
48
|
+
export class BevelSecretsVariableLoader implements VariableLoader {
|
|
49
|
+
readonly variable_loader_type = BEVEL_SECRETS_LOADER_TYPE;
|
|
50
|
+
readonly user_id: string;
|
|
51
|
+
readonly scope: string;
|
|
52
|
+
// VariableLoader is an open shape; allow arbitrary extra props.
|
|
53
|
+
[key: string]: unknown;
|
|
54
|
+
|
|
55
|
+
constructor(userId: string, scope: string = DEFAULT_SECRETS_SCOPE) {
|
|
56
|
+
this.user_id = userId;
|
|
57
|
+
this.scope = scope;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Resolve `effectiveKey` — the UTCP-namespaced `<manual>_<VAR>` — against the
|
|
62
|
+
* vault VERBATIM. Preserving the manual prefix binds a secret to exactly ONE
|
|
63
|
+
* manual: another manual referencing the same bare `${VAR}` forms a different
|
|
64
|
+
* key and misses. This is the per-manual isolation UTCP's namespacing gives us
|
|
65
|
+
* — we intentionally do NOT strip the prefix, so a malicious `.tool` can't
|
|
66
|
+
* harvest a secret the user configured for a different manual.
|
|
67
|
+
*/
|
|
68
|
+
async get(effectiveKey: string): Promise<string | null> {
|
|
69
|
+
const vault = vaults.get(this.scope);
|
|
70
|
+
if (!vault || !this.user_id) return null;
|
|
71
|
+
try {
|
|
72
|
+
return await vault.resolve(this.user_id, effectiveKey);
|
|
73
|
+
} catch (err) {
|
|
74
|
+
// Log the fault so a backend failure is distinguishable from a merely
|
|
75
|
+
// unset secret (resolve returning null) when troubleshooting.
|
|
76
|
+
log.error(`resolve failed for user=${this.user_id} key=${effectiveKey}:`, { err });
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
class BevelSecretsVariableLoaderSerializer extends Serializer<VariableLoader> {
|
|
83
|
+
toDict(obj: VariableLoader): Record<string, unknown> {
|
|
84
|
+
const loader = obj as BevelSecretsVariableLoader;
|
|
85
|
+
return {
|
|
86
|
+
variable_loader_type: BEVEL_SECRETS_LOADER_TYPE,
|
|
87
|
+
user_id: loader.user_id ?? '',
|
|
88
|
+
scope: loader.scope ?? DEFAULT_SECRETS_SCOPE,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
validateDict(obj: Record<string, unknown>): VariableLoader {
|
|
93
|
+
const userId = typeof obj.user_id === 'string' ? obj.user_id : '';
|
|
94
|
+
const scope = typeof obj.scope === 'string' && obj.scope ? obj.scope : DEFAULT_SECRETS_SCOPE;
|
|
95
|
+
return new BevelSecretsVariableLoader(userId, scope);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Register the serializer on module load so a `{ variable_loader_type:
|
|
100
|
+
// 'bevel_secrets' }` descriptor round-trips through `UtcpClient.create` as soon
|
|
101
|
+
// as this module is imported — independent of whether a vault has been bound
|
|
102
|
+
// yet. Until `registerBevelSecretsVariableLoader` binds a vault, loaders simply
|
|
103
|
+
// resolve to null (no secrets available), so `create` never throws for lack of
|
|
104
|
+
// registration. Idempotent (safe under tsx hot-reload).
|
|
105
|
+
VariableLoaderSerializer.registerVariableLoader(
|
|
106
|
+
BEVEL_SECRETS_LOADER_TYPE,
|
|
107
|
+
new BevelSecretsVariableLoaderSerializer(),
|
|
108
|
+
true,
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Bind the vault the loaders of `scope` read through. Called once per
|
|
113
|
+
* knowledge base at composition time; before it runs, loaders of that scope
|
|
114
|
+
* resolve to null.
|
|
115
|
+
*/
|
|
116
|
+
export function registerBevelSecretsVariableLoader(
|
|
117
|
+
secretsVault: ISecretsVaultService,
|
|
118
|
+
scope: string = DEFAULT_SECRETS_SCOPE,
|
|
119
|
+
): void {
|
|
120
|
+
vaults.set(scope, secretsVault);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** Forget a scope's vault — the last step of tearing a knowledge base's graph down. */
|
|
124
|
+
export function unregisterBevelSecretsVariableLoader(scope: string = DEFAULT_SECRETS_SCOPE): void {
|
|
125
|
+
vaults.delete(scope);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* The plain descriptor to place in a `UtcpClientConfig.load_variables_from`
|
|
130
|
+
* for a given user of the knowledge base registered under `scope`.
|
|
131
|
+
*/
|
|
132
|
+
export function bevelSecretsLoaderConfig(userId: string, scope: string = DEFAULT_SECRETS_SCOPE): Record<string, unknown> {
|
|
133
|
+
return { variable_loader_type: BEVEL_SECRETS_LOADER_TYPE, user_id: userId, scope };
|
|
134
|
+
}
|
|
@@ -10,6 +10,14 @@
|
|
|
10
10
|
* the same contract without any change to the loader or the tools.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
+
import type { Database } from '../database/index.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* A drizzle client a caller lends the vault for one operation — its own
|
|
17
|
+
* transaction, usually — so a removal runs under that caller's lock scope.
|
|
18
|
+
*/
|
|
19
|
+
export type ManagedRowsWriter = Pick<Database, 'select' | 'delete'>;
|
|
20
|
+
|
|
13
21
|
export type SecretKind = 'static' | 'oauth';
|
|
14
22
|
|
|
15
23
|
/** A secret as shown in listings — NEVER carries the value or token material. */
|
|
@@ -72,8 +80,36 @@ export interface SecretConfigStatus {
|
|
|
72
80
|
* required scopes have grown.
|
|
73
81
|
*/
|
|
74
82
|
grantedScopes?: string;
|
|
83
|
+
/**
|
|
84
|
+
* For an OAuth-backed SHARED row (a managed connector enabled as a workspace
|
|
85
|
+
* connection): whether an admin has completed the sign-in. `undefined` when
|
|
86
|
+
* the shared row is static or absent — the shared row of an ordinary tool
|
|
87
|
+
* sign-in holds the client secret, never tokens, so this is false there.
|
|
88
|
+
*/
|
|
89
|
+
adminAuthorized?: boolean;
|
|
90
|
+
/** The shared row's granted scopes, when it holds tokens. Same rule as `grantedScopes`. */
|
|
91
|
+
adminGrantedScopes?: string;
|
|
92
|
+
/** The connected account on the caller's row, when the row remembers one. */
|
|
93
|
+
userAccount?: string;
|
|
94
|
+
/** The connected account on the shared row, when it remembers one. */
|
|
95
|
+
adminAccount?: string;
|
|
96
|
+
/**
|
|
97
|
+
* The shared row is an OAuth client of the OWNER's (a `clientId`, no managed
|
|
98
|
+
* mark). For an ordinary sign-in that is simply its registration; for a
|
|
99
|
+
* variable declared managed it means an owner replaced the managed app with
|
|
100
|
+
* the deployment's own, and the ordinary flow applies. `undefined` when the
|
|
101
|
+
* shared row is static or absent.
|
|
102
|
+
*/
|
|
103
|
+
adminBringsOwnApp?: boolean;
|
|
75
104
|
}
|
|
76
105
|
|
|
106
|
+
/**
|
|
107
|
+
* A declared sign-in's public provider configuration, as the tool file reads it:
|
|
108
|
+
* everything but the secret (only the owner's shared row holds it) and the
|
|
109
|
+
* public-client flag (a declared client is confidential by definition).
|
|
110
|
+
*/
|
|
111
|
+
export type DeclaredOAuthProvider = Omit<OAuthProviderConfig, 'clientSecret' | 'publicClient'>;
|
|
112
|
+
|
|
77
113
|
/**
|
|
78
114
|
* How a secret is provisioned — mirrors `ToolVariableScope` in the tool-manuals
|
|
79
115
|
* contract, redeclared here to keep the vault free of a tool-manuals import.
|
|
@@ -83,10 +119,94 @@ export type SecretScope = 'admin' | 'user';
|
|
|
83
119
|
/** Resolves a UTCP-namespaced key (`<manual>_<VAR>`) to its provisioning scope. */
|
|
84
120
|
export type VariableScopeResolver = (key: string) => Promise<SecretScope>;
|
|
85
121
|
|
|
122
|
+
/**
|
|
123
|
+
* A sign-in made through Bevel's managed OAuth app for a connector: the
|
|
124
|
+
* tokens arrived from the broker, and renewing them goes back through it.
|
|
125
|
+
* Redeclared here (the vault takes no import from managed-connectors) in the
|
|
126
|
+
* same way `SecretScope` mirrors the tool-manuals contract.
|
|
127
|
+
*/
|
|
128
|
+
export interface ManagedSignInRef {
|
|
129
|
+
connectorId: string;
|
|
130
|
+
scopeSet: string;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** The token set a broker refresh or handoff delivers — what the vault stores. */
|
|
134
|
+
export interface DeliveredTokenSet {
|
|
135
|
+
access_token: string;
|
|
136
|
+
refresh_token?: string;
|
|
137
|
+
/** Epoch ms; absent when the provider gave no lifetime. */
|
|
138
|
+
expires_at?: number;
|
|
139
|
+
token_type?: string;
|
|
140
|
+
/** Space-delimited scopes granted, or the requested ones when the provider echoed none. */
|
|
141
|
+
scope?: string;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Renews a managed sign-in's tokens through the broker, which holds the
|
|
146
|
+
* managed app's client secret (this deployment never does). Throws
|
|
147
|
+
* {@link SecretOAuthError} with the broker's `providerStatus` on a refusal,
|
|
148
|
+
* so the vault tells a dead grant (400/401 → wipe) from an outage (keep).
|
|
149
|
+
* The vault bounds the call (15 s): a broker that does not answer by then
|
|
150
|
+
* is an outage, the stale token is served, and the next call asks again.
|
|
151
|
+
*/
|
|
152
|
+
export interface ManagedTokenRefresher {
|
|
153
|
+
refresh(ref: ManagedSignInRef, refreshToken: string): Promise<DeliveredTokenSet>;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Tells the provider a managed sign-in's tokens are no longer wanted, where
|
|
158
|
+
* the provider offers a way (Google, HubSpot; Microsoft has none). Best
|
|
159
|
+
* effort: a failure is logged without token material and the local delete
|
|
160
|
+
* proceeds — the tokens are gone from here either way.
|
|
161
|
+
*/
|
|
162
|
+
export interface ManagedTokenRevoker {
|
|
163
|
+
revoke(ref: ManagedSignInRef, tokens: { access_token: string; refresh_token?: string }): Promise<void>;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/** What the Connect page shows for a managed sign-in, from the connector it belongs to. */
|
|
167
|
+
export interface ManagedSignInCard {
|
|
168
|
+
displayName: string;
|
|
169
|
+
/** A lucide icon name. */
|
|
170
|
+
icon: string;
|
|
171
|
+
/** One line: what connecting lets Hexis do. */
|
|
172
|
+
description: string;
|
|
173
|
+
/** Plain-language permissions of the scope set. */
|
|
174
|
+
permissions: string[];
|
|
175
|
+
scopeSetLabel: string;
|
|
176
|
+
dataResidency: string;
|
|
177
|
+
subprocessor: string;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* The distribution's side of a managed sign-in: it knows the connectors
|
|
182
|
+
* (their names, permissions, data notes) and how to open a sign-in through
|
|
183
|
+
* the broker. Core asks it two things and otherwise treats the resulting
|
|
184
|
+
* row like any other OAuth sign-in. Absent, a managed sign-in is listed as
|
|
185
|
+
* waiting on the deployment and cannot be started.
|
|
186
|
+
*/
|
|
187
|
+
export interface ManagedSignInPort {
|
|
188
|
+
/** Whether sign-ins can be started here at all (a broker is configured). */
|
|
189
|
+
available(): boolean;
|
|
190
|
+
/** The card for a sign-in, or null for a connector this distribution does not know. */
|
|
191
|
+
describe(ref: ManagedSignInRef): ManagedSignInCard | null;
|
|
192
|
+
/**
|
|
193
|
+
* Open a sign-in for `key` and answer the provider URL to send the browser
|
|
194
|
+
* to. `userId` null is a workspace (shared) connection, which the route
|
|
195
|
+
* allows only to a writer of the tool. `returnTo` is a same-origin path on
|
|
196
|
+
* this deployment the browser lands on afterwards.
|
|
197
|
+
*/
|
|
198
|
+
start(input: { userId: string | null; key: string; ref: ManagedSignInRef; returnTo: string }): Promise<{ url: string }>;
|
|
199
|
+
}
|
|
200
|
+
|
|
86
201
|
/** Non-secret OAuth provider config the user supplies when registering an oauth secret. */
|
|
87
202
|
export interface OAuthProviderConfig {
|
|
88
203
|
authorizationUrl: string;
|
|
89
204
|
tokenUrl: string;
|
|
205
|
+
/**
|
|
206
|
+
* The OAuth client. A managed sign-in (`managed` set) has none of its own,
|
|
207
|
+
* since the client is the broker's: the vault stores `''` whatever a caller
|
|
208
|
+
* sends. Every other sign-in requires a non-empty value.
|
|
209
|
+
*/
|
|
90
210
|
clientId: string;
|
|
91
211
|
/** Kept out of listings; stored encrypted alongside the tokens. */
|
|
92
212
|
clientSecret?: string;
|
|
@@ -107,6 +227,10 @@ export interface OAuthProviderConfig {
|
|
|
107
227
|
* server's canonical URL).
|
|
108
228
|
*/
|
|
109
229
|
resource?: string;
|
|
230
|
+
/** Set on a managed sign-in: the broker does the round-trip and the refresh. `clientId` is then `''`. */
|
|
231
|
+
managed?: ManagedSignInRef;
|
|
232
|
+
/** The connected account, as the broker reported it (an email, a portal name). Shown on the card. */
|
|
233
|
+
account?: string;
|
|
110
234
|
}
|
|
111
235
|
|
|
112
236
|
export interface CreateOAuthSecretInput {
|
|
@@ -186,8 +310,10 @@ export interface ISecretsVaultService {
|
|
|
186
310
|
/**
|
|
187
311
|
* Set the confidential client secret + provider config for a tool's OAuth-backed
|
|
188
312
|
* variable, on the SHARED row (`user_id NULL`) for `key`. The provider meta is
|
|
189
|
-
* stored ALONGSIDE the secret
|
|
190
|
-
*
|
|
313
|
+
* stored ALONGSIDE the secret as a record of the save; a sign-in follows the
|
|
314
|
+
* declaration as the tool file reads when it starts (`beginToolOAuthByKey`'s
|
|
315
|
+
* `provider`), not this copy. Owner-gated by the route (write access on the
|
|
316
|
+
* `.tool`).
|
|
191
317
|
*/
|
|
192
318
|
putSharedOAuthClientSecret(input: {
|
|
193
319
|
key: string;
|
|
@@ -212,16 +338,26 @@ export interface ISecretsVaultService {
|
|
|
212
338
|
*/
|
|
213
339
|
getSharedOAuthProvider(key: string): Promise<OAuthProviderConfig | null>;
|
|
214
340
|
/**
|
|
215
|
-
* Provision (if needed) the caller's per-user oauth row for `key`
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
*
|
|
341
|
+
* Provision (if needed) the caller's per-user oauth row for `key` and build the
|
|
342
|
+
* consent URL. 409 if the owner hasn't set the client secret. Returns the
|
|
343
|
+
* provisioned row's id (to sign into the callback state) and the consent url.
|
|
344
|
+
*
|
|
345
|
+
* Where the provider configuration comes from depends on who registered the
|
|
346
|
+
* client, and each kind of sign-in has exactly one source:
|
|
347
|
+
* - `provider` given — a DECLARED sign-in: the client id, endpoints, PKCE,
|
|
348
|
+
* resource and authorize params are the declaration as the tool file reads
|
|
349
|
+
* now, handed over by the caller. They are validated as the client-secret
|
|
350
|
+
* save validates them (https, no private or local address) before anything
|
|
351
|
+
* is written or built, and they are what the caller's row records, so the
|
|
352
|
+
* token exchange and later refreshes of this grant use the configuration
|
|
353
|
+
* the consent was given for. The shared row contributes the client secret
|
|
354
|
+
* only, and must hold one.
|
|
355
|
+
* - `provider` absent — a client the platform registered itself (dynamic
|
|
356
|
+
* client registration): nothing in a file describes it, so the shared
|
|
357
|
+
* row's stored configuration is used.
|
|
219
358
|
*
|
|
220
|
-
* `scopes`, when given, are the permissions to REQUEST on the consent screen
|
|
221
|
-
*
|
|
222
|
-
* effect without the owner re-entering the secret. Only the requested scopes
|
|
223
|
-
* follow the tool file; the client id, addresses, and secret are still read from
|
|
224
|
-
* the owner-set shared row. Omitted → the shared row's stored scopes are used.
|
|
359
|
+
* `scopes`, when given, are the permissions to REQUEST on the consent screen
|
|
360
|
+
* (the live tool file's); omitted → the provider configuration's own scopes.
|
|
225
361
|
*/
|
|
226
362
|
beginToolOAuthByKey(input: {
|
|
227
363
|
userId: string;
|
|
@@ -229,8 +365,44 @@ export interface ISecretsVaultService {
|
|
|
229
365
|
redirectUri: string;
|
|
230
366
|
state: string;
|
|
231
367
|
scopes?: string[];
|
|
368
|
+
provider?: DeclaredOAuthProvider;
|
|
232
369
|
}): Promise<{ id: string; url: string }>;
|
|
233
370
|
|
|
371
|
+
// --- Managed sign-ins (tokens arrive from the broker, not from a code exchange here) ---
|
|
372
|
+
/**
|
|
373
|
+
* Open a managed sign-in: write (or keep) the row the handoff will land on,
|
|
374
|
+
* remembering the one-time `nonce` the broker must echo. `userId` null is
|
|
375
|
+
* the SHARED row (a workspace connection). Existing tokens survive, so a
|
|
376
|
+
* reconnect that is abandoned leaves the old connection working.
|
|
377
|
+
*/
|
|
378
|
+
beginManagedConnection(input: {
|
|
379
|
+
userId: string | null;
|
|
380
|
+
key: string;
|
|
381
|
+
provider: OAuthProviderConfig;
|
|
382
|
+
nonce: string;
|
|
383
|
+
}): Promise<void>;
|
|
384
|
+
/**
|
|
385
|
+
* Land the broker's handoff: the row's pending nonce must match (constant
|
|
386
|
+
* time), or the handoff is refused as a replay or a stray. Stores the
|
|
387
|
+
* tokens, clears the nonce, remembers the account.
|
|
388
|
+
*/
|
|
389
|
+
completeManagedConnection(input: {
|
|
390
|
+
userId: string | null;
|
|
391
|
+
key: string;
|
|
392
|
+
nonce: string;
|
|
393
|
+
tokens: DeliveredTokenSet;
|
|
394
|
+
account?: string;
|
|
395
|
+
}): Promise<void>;
|
|
396
|
+
/**
|
|
397
|
+
* Revoke (where the provider allows) and delete every managed sign-in of
|
|
398
|
+
* one user — deprovisioning. With `within`, the same inside the caller's
|
|
399
|
+
* transaction: the rows are locked until it commits, so a sign-in landing
|
|
400
|
+
* meanwhile finds no row (an account erasure runs this beside the user
|
|
401
|
+
* row's deletion). Throws when a row could not be settled, so the caller
|
|
402
|
+
* never believes the person holds nothing.
|
|
403
|
+
*/
|
|
404
|
+
removeManagedRowsOfUser(userId: string, within?: ManagedRowsWriter): Promise<number>;
|
|
405
|
+
|
|
234
406
|
/**
|
|
235
407
|
* Resolve the injectable value for a UTCP variable `key` — the only reader of
|
|
236
408
|
* secret material. `static` → the decrypted value; `oauth` → a fresh access
|
|
@@ -342,6 +514,36 @@ export function scopesCovered(required: string[] | undefined, granted: string |
|
|
|
342
514
|
return missingScopes(required, granted).length === 0;
|
|
343
515
|
}
|
|
344
516
|
|
|
517
|
+
/** Why a caller's own value for a per-user variable is not ready yet; see {@link userSecretGap}. */
|
|
518
|
+
export type UserSecretGap = 'missing' | 'wrong-kind' | 'unauthorized' | 'under-scoped';
|
|
519
|
+
|
|
520
|
+
/**
|
|
521
|
+
* Whether the CALLER's own value for a per-user variable is ready, and if not,
|
|
522
|
+
* why: the one rule the MCP proxy hides a tool by and `list_tool_setup` reports
|
|
523
|
+
* from, so the two cannot disagree. `null` when it is ready.
|
|
524
|
+
*
|
|
525
|
+
* - `missing`: no row at all, so it needs a value or a sign-in.
|
|
526
|
+
* - `wrong-kind`: a row of the OTHER kind than the manual now declares. A
|
|
527
|
+
* `.tool` edited from an OAuth sign-in to a plain key (or back) leaves the
|
|
528
|
+
* old row behind, and serving a token where a key is declared fails
|
|
529
|
+
* opaquely at the provider. The credential has to be set up again.
|
|
530
|
+
* - `unauthorized`: an OAuth row with no token yet: registered, sign-in not
|
|
531
|
+
* completed. Fail closed: anything but a confirmed `true` counts.
|
|
532
|
+
* - `under-scoped`: a token granted fewer scopes than the tool now declares,
|
|
533
|
+
* so the call would fail at the provider; it needs signing in again.
|
|
534
|
+
*/
|
|
535
|
+
export function userSecretGap(
|
|
536
|
+
declared: { oauth: boolean; oauthScopes?: string[] },
|
|
537
|
+
status: Pick<SecretConfigStatus, 'userConfigured' | 'userAuthorized' | 'grantedScopes'> & { userKind?: SecretKind | null } | undefined,
|
|
538
|
+
): UserSecretGap | null {
|
|
539
|
+
if (!status?.userConfigured) return 'missing';
|
|
540
|
+
const declaredKind: SecretKind = declared.oauth ? 'oauth' : 'static';
|
|
541
|
+
if (status.userKind && status.userKind !== declaredKind) return 'wrong-kind';
|
|
542
|
+
if (declared.oauth && status.userAuthorized !== true) return 'unauthorized';
|
|
543
|
+
if (declared.oauth && !scopesCovered(declared.oauthScopes, status.grantedScopes)) return 'under-scoped';
|
|
544
|
+
return null;
|
|
545
|
+
}
|
|
546
|
+
|
|
345
547
|
/**
|
|
346
548
|
* Is the stored row the KIND the manual now declares — i.e. would the thing the
|
|
347
549
|
* UI is about to offer actually work?
|