@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
|
@@ -10,7 +10,10 @@ import {
|
|
|
10
10
|
scopesCovered,
|
|
11
11
|
missingScopes,
|
|
12
12
|
configuredAs,
|
|
13
|
+
type DeclaredOAuthProvider,
|
|
13
14
|
type ISecretsVaultService,
|
|
15
|
+
type ManagedSignInPort,
|
|
16
|
+
type SecretConfigStatus,
|
|
14
17
|
} from './secrets-vault.contract.js';
|
|
15
18
|
import type { IToolManualService, ToolManualSummary, ToolVariable } from '../tool-manuals/index.js';
|
|
16
19
|
import type { IConnectionProbeService } from '../connection-probe/index.js';
|
|
@@ -47,12 +50,76 @@ export interface SecretsVaultRoutesDeps {
|
|
|
47
50
|
publicBackendUrl: string;
|
|
48
51
|
/** Public base URL of the SPA — where the OAuth callback lands the browser. */
|
|
49
52
|
publicFrontendUrl: string;
|
|
53
|
+
/**
|
|
54
|
+
* The distribution's managed sign-in port, read per request (the overlay
|
|
55
|
+
* binds it after boot). Absent or null: a managed sign-in is listed as
|
|
56
|
+
* waiting on the deployment, and starting one is refused with that reason.
|
|
57
|
+
*/
|
|
58
|
+
managedSignIns?: () => ManagedSignInPort | null;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The card a managed sign-in renders as on the Connect page, as `/connect/pending`
|
|
63
|
+
* and `/secrets/tools` report it beside the ordinary fields.
|
|
64
|
+
*/
|
|
65
|
+
interface ManagedSignInView {
|
|
66
|
+
connectorId: string;
|
|
67
|
+
scopeSet: string;
|
|
68
|
+
/** Who the connection belongs to: each person, or the workspace. */
|
|
69
|
+
tokenScope: 'user' | 'shared';
|
|
70
|
+
displayName: string;
|
|
71
|
+
icon: string;
|
|
72
|
+
description: string;
|
|
73
|
+
permissions: string[];
|
|
74
|
+
scopeSetLabel: string;
|
|
75
|
+
dataResidency: string;
|
|
76
|
+
subprocessor: string;
|
|
77
|
+
/** The connected account the row remembers, for "Connected as …". */
|
|
78
|
+
account: string | null;
|
|
79
|
+
/** The owner replaced the managed app with the deployment's own (the ordinary flow then applies). */
|
|
80
|
+
ownApp: boolean;
|
|
81
|
+
/** Sign-ins through the broker can be started on this deployment. */
|
|
82
|
+
available: boolean;
|
|
50
83
|
}
|
|
51
84
|
|
|
52
85
|
function redirectUriFor(publicBackendUrl: string): string {
|
|
53
86
|
return `${publicBackendUrl}/api/secrets/oauth/callback`;
|
|
54
87
|
}
|
|
55
88
|
|
|
89
|
+
/**
|
|
90
|
+
* What of a declared sign-in is its provider configuration — ONE reading, for
|
|
91
|
+
* the client-secret save (which stores it as a record) and the sign-in start
|
|
92
|
+
* (which runs from it). `null` while the declaration has no endpoints: it named
|
|
93
|
+
* only its client id and the server's metadata could not complete it.
|
|
94
|
+
*/
|
|
95
|
+
function declaredProvider(variable: ToolVariable): DeclaredOAuthProvider | null {
|
|
96
|
+
const oauth = variable.oauth;
|
|
97
|
+
if (!oauth?.authorizationUrl || !oauth.tokenUrl) return null;
|
|
98
|
+
return {
|
|
99
|
+
authorizationUrl: oauth.authorizationUrl,
|
|
100
|
+
tokenUrl: oauth.tokenUrl,
|
|
101
|
+
// A managed sign-in declares no client of its own (the broker's app is
|
|
102
|
+
// the client); the one route that pins a provider requires an owner's.
|
|
103
|
+
clientId: oauth.clientId ?? '',
|
|
104
|
+
scopes: oauth.scopes,
|
|
105
|
+
// Static authorize params (e.g. Google's `access_type=offline`) so the
|
|
106
|
+
// provider returns a refresh token.
|
|
107
|
+
authParams: oauth.authParams,
|
|
108
|
+
// PKCE unless the declaration opted out; the resource indicator when the
|
|
109
|
+
// server (or the declaration) names one.
|
|
110
|
+
pkce: oauth.pkce !== false,
|
|
111
|
+
resource: oauth.resource,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Why a declared sign-in has no endpoints — the discovery's own reason when it gave one. */
|
|
116
|
+
function endpointsUnknown(manual: ToolManualSummary): string {
|
|
117
|
+
const why = manual.setup?.reason;
|
|
118
|
+
return why
|
|
119
|
+
? `The sign-in endpoints for this server aren't known yet: ${why}.`
|
|
120
|
+
: "The sign-in endpoints for this server aren't known yet — declare `authorizationUrl` and `tokenUrl` on the sign-in variable.";
|
|
121
|
+
}
|
|
122
|
+
|
|
56
123
|
/**
|
|
57
124
|
* Is this a SAME-ORIGIN path we're willing to bounce the browser back to after a
|
|
58
125
|
* sign-in? The callback builds `${publicFrontendUrl}${dest}#…`, so anything that
|
|
@@ -116,6 +183,36 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
|
|
|
116
183
|
return variable ? { manual, variable } : null;
|
|
117
184
|
}
|
|
118
185
|
|
|
186
|
+
/**
|
|
187
|
+
* The card for a managed sign-in, or null for an ordinary one. Built from
|
|
188
|
+
* the variable (which connector), the port (what the connector is) and
|
|
189
|
+
* the row (whose account, whether an owner brought their own app).
|
|
190
|
+
*/
|
|
191
|
+
function managedView(v: ToolVariable, st: SecretConfigStatus | undefined): ManagedSignInView | null {
|
|
192
|
+
const ref = v.oauth?.managed;
|
|
193
|
+
if (!ref) return null;
|
|
194
|
+
const port = deps.managedSignIns?.() ?? null;
|
|
195
|
+
const card = port?.describe(ref) ?? null;
|
|
196
|
+
const shared = v.scope === 'admin';
|
|
197
|
+
return {
|
|
198
|
+
connectorId: ref.connectorId,
|
|
199
|
+
scopeSet: ref.scopeSet,
|
|
200
|
+
tokenScope: shared ? 'shared' : 'user',
|
|
201
|
+
displayName: card?.displayName ?? v.label ?? ref.connectorId,
|
|
202
|
+
icon: card?.icon ?? 'Plug',
|
|
203
|
+
description: card?.description ?? '',
|
|
204
|
+
permissions: card?.permissions ?? [],
|
|
205
|
+
scopeSetLabel: card?.scopeSetLabel ?? ref.scopeSet,
|
|
206
|
+
dataResidency: card?.dataResidency ?? '',
|
|
207
|
+
subprocessor: card?.subprocessor ?? '',
|
|
208
|
+
account: (shared ? st?.adminAccount : st?.userAccount) ?? null,
|
|
209
|
+
ownApp: st?.adminBringsOwnApp === true,
|
|
210
|
+
// Startable only for a connector this distribution knows: a broker that
|
|
211
|
+
// is up cannot open a sign-in through a connector it has no card for.
|
|
212
|
+
available: port?.available() === true && card !== null,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
119
216
|
router.get('/secrets', async (req, res) => {
|
|
120
217
|
const userId = req.userId;
|
|
121
218
|
if (!userId) return void res.status(401).json({ error: 'Not authenticated' });
|
|
@@ -236,22 +333,31 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
|
|
|
236
333
|
const key = varKey(m.name, v.name);
|
|
237
334
|
const st = statusByKey.get(key);
|
|
238
335
|
const isOAuth = v.oauth != null;
|
|
239
|
-
|
|
336
|
+
// A SHARED sign-in (a managed workspace connection) is authorized
|
|
337
|
+
// when the shared row holds tokens — one connection for everyone.
|
|
338
|
+
const shared = isOAuth && v.scope === 'admin';
|
|
339
|
+
const authorized = isOAuth ? ((shared ? st?.adminAuthorized : st?.userAuthorized) ?? false) : undefined;
|
|
240
340
|
// For an OAuth var: which declared permissions the token doesn't cover,
|
|
241
341
|
// so the panel can say WHAT it works for and what it doesn't. Only
|
|
242
342
|
// meaningful once authorized (an unauthorized var has no token at all).
|
|
243
|
-
const
|
|
343
|
+
const granted = shared ? st?.adminGrantedScopes : st?.grantedScopes;
|
|
344
|
+
const missing = isOAuth && authorized ? missingScopes(v.oauth?.scopes, granted) : [];
|
|
345
|
+
const managed = managedView(v, st);
|
|
244
346
|
return {
|
|
245
347
|
name: v.name,
|
|
246
348
|
scope: v.scope,
|
|
247
349
|
label: v.label ?? null,
|
|
248
350
|
key,
|
|
249
351
|
adminConfigured: st?.adminConfigured ?? false,
|
|
352
|
+
// What the owner's row IS, so a surface can tell a client of the
|
|
353
|
+
// OAuth kind from a key left from when the variable was static.
|
|
354
|
+
adminKind: st?.adminKind ?? null,
|
|
250
355
|
userConfigured: st?.userConfigured ?? false,
|
|
251
356
|
oauth: isOAuth,
|
|
252
357
|
authorized,
|
|
253
358
|
needsReauth: isOAuth && authorized === true && missing.length > 0,
|
|
254
359
|
missingScopes: missing,
|
|
360
|
+
...(managed ? { managed } : {}),
|
|
255
361
|
};
|
|
256
362
|
}),
|
|
257
363
|
})),
|
|
@@ -356,21 +462,35 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
|
|
|
356
462
|
const toolOAuth = manuals.flatMap((m) => {
|
|
357
463
|
const canWrite = canWriteBySlug.get(m.slug) ?? false;
|
|
358
464
|
return (m.variables ?? [])
|
|
359
|
-
|
|
465
|
+
// Every per-user sign-in, plus a managed WORKSPACE connection (the
|
|
466
|
+
// one `admin`-scoped sign-in there is): listed for everyone who can
|
|
467
|
+
// read the tool, since everyone calls through it, with Connect
|
|
468
|
+
// offered to the writers who can make it.
|
|
469
|
+
.filter((v) => v.oauth && (v.scope === 'user' || v.oauth.managed))
|
|
360
470
|
.map((v) => {
|
|
361
471
|
const st = statusByKey.get(varKey(m.name, v.name));
|
|
362
|
-
const
|
|
472
|
+
const managed = managedView(v, st);
|
|
473
|
+
const shared = v.scope === 'admin';
|
|
474
|
+
const authorized = (shared ? st?.adminAuthorized : st?.userAuthorized) ?? false;
|
|
363
475
|
// Signed in, but the token's granted scopes no longer cover what the
|
|
364
476
|
// tool declares → surface as needing re-authorization, not as connected.
|
|
365
477
|
const needsReauth =
|
|
366
|
-
authorized && !scopesCovered(v.oauth?.scopes, st?.grantedScopes);
|
|
478
|
+
authorized && !scopesCovered(v.oauth?.scopes, shared ? st?.adminGrantedScopes : st?.grantedScopes);
|
|
367
479
|
// On an oauth var the ADMIN row is the provider registration — the
|
|
368
480
|
// client secret — without which nobody's Authorize can work. It is a
|
|
369
481
|
// workspace value like any other, so it carries the same flag. It
|
|
370
482
|
// must be an OAUTH row: `beginToolOAuthByKey` refuses a static one,
|
|
371
483
|
// so a shared key left over from before this var was made OAuth
|
|
372
484
|
// would otherwise light up Authorize with nothing behind it.
|
|
373
|
-
|
|
485
|
+
//
|
|
486
|
+
// A MANAGED sign-in needs no registration here — the broker holds
|
|
487
|
+
// it — so it is configured when the deployment can reach a broker,
|
|
488
|
+
// when an owner replaced the managed app with their own, or when a
|
|
489
|
+
// token is already stored (nothing is outstanding for a connection
|
|
490
|
+
// that works, whatever the broker is doing).
|
|
491
|
+
const ownerConfigured = managed
|
|
492
|
+
? managed.ownApp || managed.available || authorized
|
|
493
|
+
: configuredAs('oauth', st?.adminConfigured, st?.adminKind);
|
|
374
494
|
return {
|
|
375
495
|
slug: m.slug,
|
|
376
496
|
varName: v.name,
|
|
@@ -380,7 +500,13 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
|
|
|
380
500
|
authorized,
|
|
381
501
|
needsReauth,
|
|
382
502
|
ownerConfigured,
|
|
383
|
-
|
|
503
|
+
// Not the caller's to do: an ordinary sign-in waiting on a
|
|
504
|
+
// registration the caller may not write, or a managed WORKSPACE
|
|
505
|
+
// connection seen by someone who may not write the tool. A
|
|
506
|
+
// managed personal sign-in is always the caller's own, broker or
|
|
507
|
+
// no broker.
|
|
508
|
+
ownerOnly: managed ? shared && !canWrite : !ownerConfigured && !canWrite,
|
|
509
|
+
...(managed ? { managed, canWrite } : {}),
|
|
384
510
|
};
|
|
385
511
|
});
|
|
386
512
|
});
|
|
@@ -461,8 +587,8 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
|
|
|
461
587
|
|
|
462
588
|
// Set the confidential client secret for a tool's OAuth-backed variable — the
|
|
463
589
|
// ONLY place the secret is provided. Requires WRITE on the `.tool`. The provider
|
|
464
|
-
// config
|
|
465
|
-
//
|
|
590
|
+
// config of the variable's own `oauth` declaration is stored with the secret as
|
|
591
|
+
// a record of the save; a sign-in start reads the declaration afresh.
|
|
466
592
|
router.put('/secrets/tools/:slug/vars/:var/oauth/admin', async (req, res) => {
|
|
467
593
|
const userId = req.userId;
|
|
468
594
|
const email = req.userEmail;
|
|
@@ -476,38 +602,28 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
|
|
|
476
602
|
if (!(await accessControl.canWrite(defaultWs(), email, found.manual.path))) {
|
|
477
603
|
return void res.status(403).json({ error: 'You need write access to this tool to set its client secret.' });
|
|
478
604
|
}
|
|
479
|
-
const { authorizationUrl, tokenUrl } = found.variable.oauth;
|
|
480
605
|
// A declaration that names only its client id is completed from the
|
|
481
|
-
// server's OAuth metadata
|
|
482
|
-
//
|
|
483
|
-
//
|
|
484
|
-
|
|
485
|
-
|
|
606
|
+
// server's OAuth metadata. When that didn't happen, storing the secret
|
|
607
|
+
// with a provider that has no endpoints would leave every sign-in failing
|
|
608
|
+
// later with a far less specific error than the catalog's own.
|
|
609
|
+
const provider = declaredProvider(found.variable);
|
|
610
|
+
if (!provider) return void res.status(422).json({ error: endpointsUnknown(found.manual) });
|
|
611
|
+
const clientSecret = (req.body ?? {}).clientSecret;
|
|
612
|
+
// A managed sign-in names no client of its own; an owner who brings
|
|
613
|
+
// the deployment's own app ("use our own app") supplies its id here
|
|
614
|
+
// with the secret, and the pinned row then runs the ordinary flow:
|
|
615
|
+
// this deployment's redirect URI, a direct token exchange and refresh.
|
|
616
|
+
const ownClientId = typeof (req.body ?? {}).clientId === 'string' ? (req.body.clientId as string).trim() : '';
|
|
617
|
+
const clientId = provider.clientId || ownClientId;
|
|
618
|
+
if (!clientId) {
|
|
486
619
|
return void res.status(422).json({
|
|
487
|
-
error:
|
|
488
|
-
? `The sign-in endpoints for this server aren't known yet: ${why}.`
|
|
489
|
-
: "The sign-in endpoints for this server aren't known yet — declare `authorizationUrl` and `tokenUrl` on the sign-in variable.",
|
|
620
|
+
error: 'This sign-in goes through the managed connector. To use your own OAuth app instead, send its client id with the secret.',
|
|
490
621
|
});
|
|
491
622
|
}
|
|
492
|
-
const clientSecret = (req.body ?? {}).clientSecret;
|
|
493
623
|
await secretsVault.putSharedOAuthClientSecret({
|
|
494
624
|
key: varKey(found.manual.name, found.variable.name),
|
|
495
625
|
clientSecret,
|
|
496
|
-
provider: {
|
|
497
|
-
authorizationUrl,
|
|
498
|
-
tokenUrl,
|
|
499
|
-
clientId: found.variable.oauth.clientId,
|
|
500
|
-
scopes: found.variable.oauth.scopes,
|
|
501
|
-
// Static authorize params (e.g. Google's `access_type=offline`) so the
|
|
502
|
-
// provider returns a refresh token — stored with the secret so a later
|
|
503
|
-
// `.tool` edit can't redirect the flow.
|
|
504
|
-
authParams: found.variable.oauth.authParams,
|
|
505
|
-
// PKCE unless the declaration opted out; the resource indicator when
|
|
506
|
-
// the server (or the declaration) names one. Both pinned here for the
|
|
507
|
-
// same reason as the rest: the flow runs from the stored row.
|
|
508
|
-
pkce: found.variable.oauth.pkce !== false,
|
|
509
|
-
resource: found.variable.oauth.resource,
|
|
510
|
-
},
|
|
626
|
+
provider: { ...provider, clientId },
|
|
511
627
|
});
|
|
512
628
|
res.status(201).json({ ok: true });
|
|
513
629
|
} catch (err) {
|
|
@@ -525,12 +641,81 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
|
|
|
525
641
|
const email = req.userEmail;
|
|
526
642
|
if (!userId || !email) return void res.status(401).json({ error: 'Not authenticated' });
|
|
527
643
|
try {
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
644
|
+
// Two sources, one per kind of sign-in. A DECLARED one follows its tool
|
|
645
|
+
// file as it reads now — never the catalog's scan, which can be a refresh
|
|
646
|
+
// behind the file, and never the copy the client-secret save stored. A
|
|
647
|
+
// client the platform registered itself (oauth-auto) is described by no
|
|
648
|
+
// file: the catalog's discovery surfaced it, and its stored row is the
|
|
649
|
+
// only description of it there is.
|
|
650
|
+
const [live, catalog] = await Promise.all([
|
|
651
|
+
toolManualService.liveDeclaration(email, req.params.slug, req.params.var),
|
|
652
|
+
findManualVar(email, req.params.slug, req.params.var),
|
|
653
|
+
]);
|
|
654
|
+
// The file is there but its declaration is refused as it reads now (an
|
|
655
|
+
// http:// or private endpoint, say): the parser's reason is the answer,
|
|
656
|
+
// and neither a catalog still holding the earlier version nor the stored
|
|
657
|
+
// row stands in for it. Nothing is sent anywhere.
|
|
658
|
+
if (live?.refused) return void res.status(422).json({ error: live.refused });
|
|
659
|
+
const manual = live?.manual ?? catalog?.manual;
|
|
660
|
+
if (!manual || (!live?.variable && !catalog)) {
|
|
661
|
+
return void res.status(404).json({ error: 'Tool or variable not found' });
|
|
532
662
|
}
|
|
533
|
-
const key = varKey(
|
|
663
|
+
const key = varKey(manual.name, req.params.var);
|
|
664
|
+
const declared = live?.variable?.oauth ? live.variable : null;
|
|
665
|
+
const registered =
|
|
666
|
+
!declared && catalog?.manual.setup?.kind === 'oauth-auto' && catalog.variable.oauth ? catalog.variable : null;
|
|
667
|
+
const signIn = declared ?? registered;
|
|
668
|
+
// No sign-in in the file and none the platform registered: whatever the
|
|
669
|
+
// shared row still holds is not used.
|
|
670
|
+
if (!signIn?.oauth) {
|
|
671
|
+
throw new SecretOAuthError("This tool's owner hasn't finished setting this up");
|
|
672
|
+
}
|
|
673
|
+
const returnTo: unknown = (req.body ?? {}).returnTo;
|
|
674
|
+
// A MANAGED sign-in goes through the broker — unless an owner pinned the
|
|
675
|
+
// deployment's own app on the shared row, in which case the ordinary
|
|
676
|
+
// flow below applies exactly as for a file-declared client. Read from
|
|
677
|
+
// the LIVE declaration like everything else here.
|
|
678
|
+
const ref = signIn.oauth.managed;
|
|
679
|
+
if (ref) {
|
|
680
|
+
const [st] = await secretsVault.statusFor(userId, [key]);
|
|
681
|
+
// An owner's own app runs the ordinary flow, whose tokens land on the
|
|
682
|
+
// caller's own row. A WORKSPACE connection reads the shared row, so
|
|
683
|
+
// the two cannot meet: that combination is refused here rather than
|
|
684
|
+
// signing an owner in to a row nobody reads.
|
|
685
|
+
if (st?.adminBringsOwnApp === true && signIn.scope === 'admin') {
|
|
686
|
+
return void res.status(422).json({
|
|
687
|
+
error: 'A workspace connection cannot use your own OAuth app yet. Remove the client secret to connect it through the managed connector.',
|
|
688
|
+
});
|
|
689
|
+
}
|
|
690
|
+
if (st?.adminBringsOwnApp !== true) {
|
|
691
|
+
const port = deps.managedSignIns?.() ?? null;
|
|
692
|
+
if (!port || !port.available()) {
|
|
693
|
+
return void res.status(409).json({
|
|
694
|
+
error: 'This deployment is not connected to a connector broker yet. Ask your admin to configure it.',
|
|
695
|
+
});
|
|
696
|
+
}
|
|
697
|
+
// The same answer the card gives (`available`): a connector the
|
|
698
|
+
// distribution does not know cannot be started through its broker.
|
|
699
|
+
if (!port.describe(ref)) {
|
|
700
|
+
return void res.status(409).json({
|
|
701
|
+
error: 'This deployment does not offer the connector this sign-in names. Ask your admin.',
|
|
702
|
+
});
|
|
703
|
+
}
|
|
704
|
+
const shared = signIn.scope === 'admin';
|
|
705
|
+
if (shared && !(await accessControl.canWrite(defaultWs(), email, manual.path))) {
|
|
706
|
+
return void res.status(403).json({ error: 'Only a writer of this tool can connect its workspace account.' });
|
|
707
|
+
}
|
|
708
|
+
const { url } = await port.start({
|
|
709
|
+
userId: shared ? null : userId,
|
|
710
|
+
key,
|
|
711
|
+
ref,
|
|
712
|
+
returnTo: isSafeReturnPath(returnTo) ? returnTo : '/connect',
|
|
713
|
+
});
|
|
714
|
+
return void res.json({ url });
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
const provider = declared ? declaredProvider(declared) : undefined;
|
|
718
|
+
if (provider === null) return void res.status(422).json({ error: endpointsUnknown(manual) });
|
|
534
719
|
// Provision the caller's oauth row (from the owner-set secret) FIRST — its id
|
|
535
720
|
// is what the un-authed callback keys on. Pass an empty state placeholder; we
|
|
536
721
|
// sign the real state below with the returned id and swap it into the URL, so
|
|
@@ -540,17 +725,16 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
|
|
|
540
725
|
key,
|
|
541
726
|
redirectUri: redirectUriFor(deps.publicBackendUrl),
|
|
542
727
|
state: '',
|
|
543
|
-
// Request the permissions the tool file declares RIGHT NOW
|
|
544
|
-
//
|
|
545
|
-
|
|
546
|
-
|
|
728
|
+
// Request the permissions the tool file declares RIGHT NOW, so adding a
|
|
729
|
+
// scope takes effect on the next sign-in.
|
|
730
|
+
scopes: signIn.oauth.scopes,
|
|
731
|
+
provider,
|
|
547
732
|
});
|
|
548
733
|
// The return path is signed INTO the state (HMAC-SHA256) rather than kept
|
|
549
734
|
// in a query param or a cookie: the callback arrives un-authenticated from
|
|
550
735
|
// the provider, so the state is the only thing it can trust. An absent or
|
|
551
736
|
// unsafe `returnTo` falls back to the legacy `'connect'` marker, which
|
|
552
737
|
// keeps a body-less start byte-identical to what it produced before.
|
|
553
|
-
const returnTo: unknown = (req.body ?? {}).returnTo;
|
|
554
738
|
const state = signState(deps.stateSecret, {
|
|
555
739
|
u: userId,
|
|
556
740
|
i: id,
|
|
@@ -657,7 +841,22 @@ export function createSecretsVaultPublicRoutes(deps: SecretsVaultRoutesDeps): ex
|
|
|
657
841
|
back(`authorized=${encodeURIComponent(state.i)}`, dest);
|
|
658
842
|
} catch (err) {
|
|
659
843
|
log.error('oauth callback failed:', { err });
|
|
660
|
-
|
|
844
|
+
// A provider's REFUSAL (the vault's error carrying the provider's HTTP
|
|
845
|
+
// status) names the provider's error code and Hexis's own sentence for
|
|
846
|
+
// it — the one thing the person on the Connect page (or the agent they
|
|
847
|
+
// paste it to) can act on: a client the provider does not accept, a
|
|
848
|
+
// refused authorization code. Nothing of the provider's text is in it.
|
|
849
|
+
// Every other failure stays the generic line: a transport error quotes
|
|
850
|
+
// what fetch said, which is not a provider's word.
|
|
851
|
+
const refusal = err instanceof SecretOAuthError && err.providerStatus !== undefined ? err.message : null;
|
|
852
|
+
back(
|
|
853
|
+
`error=${encodeURIComponent(
|
|
854
|
+
refusal
|
|
855
|
+
? `Authorization failed. ${refusal}`
|
|
856
|
+
: 'Authorization failed. Check the provider configuration and try again.',
|
|
857
|
+
)}`,
|
|
858
|
+
dest,
|
|
859
|
+
);
|
|
661
860
|
}
|
|
662
861
|
});
|
|
663
862
|
|
|
@@ -2,7 +2,7 @@ import fs from 'node:fs/promises';
|
|
|
2
2
|
import os from 'node:os';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
5
|
-
import { NodeGitRunner } from '../../
|
|
5
|
+
import { NodeGitRunner } from '../../version-control/git/node-git-runner.js';
|
|
6
6
|
import { ManagedRepository, MANAGED_REPOSITORY_DIR } from '../managed-repository.js';
|
|
7
7
|
import { RepositorySource, type GitHubAppRepository } from '../repository-source.js';
|
|
8
8
|
|
|
@@ -10,7 +10,7 @@ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
|
10
10
|
import { testKbContext } from '../../../__tests__/kb-context.js';
|
|
11
11
|
import { createSetupRoutes } from '../setup.routes.js';
|
|
12
12
|
import { DeploymentSettingsService } from '../deployment-settings.service.js';
|
|
13
|
-
import { NodeGitRunner } from '../../
|
|
13
|
+
import { NodeGitRunner } from '../../version-control/git/node-git-runner.js';
|
|
14
14
|
import { TemplateFilesStep } from '../../workspace/startup/steps/template-files.step.js';
|
|
15
15
|
import { NodeFs } from '../../kb-fs/node-fs.js';
|
|
16
16
|
import { defaultKbTemplateDir } from '../../../assets.js';
|
|
@@ -12,7 +12,7 @@ import { createSetupRoutes } from '../setup.routes.js';
|
|
|
12
12
|
import { DeploymentSettingsService } from '../deployment-settings.service.js';
|
|
13
13
|
import { ManagedRepository } from '../managed-repository.js';
|
|
14
14
|
import { RepositorySource } from '../repository-source.js';
|
|
15
|
-
import { NodeGitRunner } from '../../
|
|
15
|
+
import { NodeGitRunner } from '../../version-control/git/node-git-runner.js';
|
|
16
16
|
import { TemplateFilesStep } from '../../workspace/startup/steps/template-files.step.js';
|
|
17
17
|
import { NodeFs } from '../../kb-fs/node-fs.js';
|
|
18
18
|
import { defaultKbTemplateDir } from '../../../assets.js';
|
|
@@ -6,7 +6,7 @@ import { validateHttpsRemote } from './deployment-settings.service.js';
|
|
|
6
6
|
import { classifyGitFailure } from '../../shared/git-failure.js';
|
|
7
7
|
import { redactSecret, urlQuerySecrets } from '../../shared/redact-secret.js';
|
|
8
8
|
import { GitRunError, type IGitRunner } from '../../shared/git.contract.js';
|
|
9
|
-
import { NodeGitRunner } from '../
|
|
9
|
+
import { NodeGitRunner } from '../version-control/index.js';
|
|
10
10
|
|
|
11
11
|
/** The repository connection a deployment reads and writes its knowledge base with. */
|
|
12
12
|
export interface RepositoryConnection {
|
|
@@ -325,7 +325,7 @@ export const CORE_SETTINGS: SettingDef[] = [
|
|
|
325
325
|
{
|
|
326
326
|
/**
|
|
327
327
|
* Whether the server removes, on its own, the branches merged change
|
|
328
|
-
* requests left behind (`
|
|
328
|
+
* requests left behind (`VersionControlService.retireLeftoverMergedBranches`).
|
|
329
329
|
* On unless set to `false`; a blanked field puts the default back. Read
|
|
330
330
|
* at every round, so it applies without a restart. It covers that cleanup
|
|
331
331
|
* only: the removal of a branch when its change request is merged does
|
|
@@ -4,7 +4,7 @@ import path from 'node:path';
|
|
|
4
4
|
import type { IGitRunner } from '../../shared/git.contract.js';
|
|
5
5
|
import { printable } from '../../shared/printable.js';
|
|
6
6
|
import { logger } from '../../shared/logging.js';
|
|
7
|
-
import { NodeGitRunner } from '../
|
|
7
|
+
import { NodeGitRunner } from '../version-control/index.js';
|
|
8
8
|
import { probeCredentialArgs, probeGitEnv } from './connection-check.js';
|
|
9
9
|
|
|
10
10
|
const log = logger('setup');
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { isStandardTokenErrorCode } from '../../shared/oauth-token-error.js';
|
|
2
3
|
|
|
3
4
|
/** The single sign-on configuration a deployment would sign people in with. */
|
|
4
5
|
export interface OidcConfiguration {
|
|
@@ -55,21 +56,6 @@ const REQUEST_TIMEOUT_MS = 10_000;
|
|
|
55
56
|
*/
|
|
56
57
|
const CODE_REJECTIONS: readonly string[] = ['invalid_grant'];
|
|
57
58
|
|
|
58
|
-
/**
|
|
59
|
-
* The other error codes RFC 6749 §5.2 (and OIDC Core §3.1.2.6) define — the
|
|
60
|
-
* only ones echoed back in an "unverified" message. Anything else in `error`
|
|
61
|
-
* is text of the provider's choosing, and could be the secret reflected back.
|
|
62
|
-
*/
|
|
63
|
-
const ECHOED_ERRORS: readonly string[] = [
|
|
64
|
-
'invalid_request',
|
|
65
|
-
'unauthorized_client',
|
|
66
|
-
'unsupported_grant_type',
|
|
67
|
-
'invalid_scope',
|
|
68
|
-
'access_denied',
|
|
69
|
-
'server_error',
|
|
70
|
-
'temporarily_unavailable',
|
|
71
|
-
];
|
|
72
|
-
|
|
73
59
|
/** The issuer as the provider appends `/.well-known/...` to it: no trailing slash. */
|
|
74
60
|
export function normalizeIssuerUrl(issuerUrl: string): string {
|
|
75
61
|
return issuerUrl.trim().replace(/\/+$/, '');
|
|
@@ -219,9 +205,10 @@ export async function checkOidcConfiguration(
|
|
|
219
205
|
};
|
|
220
206
|
}
|
|
221
207
|
if (CODE_REJECTIONS.includes(errorCode)) return { outcome: 'verified' };
|
|
222
|
-
// Only a standard error code is echoed
|
|
223
|
-
// provider's choosing,
|
|
224
|
-
|
|
208
|
+
// Only a standard error code is echoed (the one list the vault reads a
|
|
209
|
+
// refusal by too) — anything else could be text of the provider's choosing,
|
|
210
|
+
// the secret included.
|
|
211
|
+
const code = isStandardTokenErrorCode(errorCode) ? ` (${errorCode})` : ` (HTTP ${status})`;
|
|
225
212
|
return {
|
|
226
213
|
outcome: 'unverified',
|
|
227
214
|
error: `The application ID and secret could not be verified — the provider gave an answer that does not say whether they are right${code}.`,
|
|
@@ -207,7 +207,7 @@ export function createSetupRoutes(
|
|
|
207
207
|
* What a change of the knowledge-base repository has to decide about, and
|
|
208
208
|
* what to do when the admin decides to close.
|
|
209
209
|
*
|
|
210
|
-
* Injected because the setup routes must stay free of the
|
|
210
|
+
* Injected because the setup routes must stay free of the version-control module —
|
|
211
211
|
* and a minimal mount (tests, a distribution without change requests) simply
|
|
212
212
|
* has none: the default answers "no open requests", so the confirmation
|
|
213
213
|
* offers no choice it cannot honour.
|
|
@@ -11,7 +11,7 @@ import type { ToolContext } from '../../tool-helpers/tool.contract.js';
|
|
|
11
11
|
import type { ToolAuth } from '../../tool-auth/tool-auth.middleware.js';
|
|
12
12
|
import { registerWorkspaceTools } from '../../workspace/workspace.tools.js';
|
|
13
13
|
import { RoutineWritePolicyService } from '../../workspace/routine-write-policy.js';
|
|
14
|
-
import {
|
|
14
|
+
import { VersionControlHooks } from '../../version-control/version-control-hooks.js';
|
|
15
15
|
import { ToolDescriptionNotes } from '../../workspace/agent-access.gate.js';
|
|
16
16
|
import { SpillStore } from '../../workspace/spill-store.js';
|
|
17
17
|
import { DocExtractService, WorkerDocumentExtractor } from '../../workspace/index.js';
|
|
@@ -96,7 +96,7 @@ async function start(): Promise<string> {
|
|
|
96
96
|
sessionId,
|
|
97
97
|
abortSignal: signal,
|
|
98
98
|
workspaceService: {} as never,
|
|
99
|
-
|
|
99
|
+
versionControlService: {} as never,
|
|
100
100
|
events: {} as never,
|
|
101
101
|
getFilesystem: async () => fs,
|
|
102
102
|
});
|
|
@@ -112,7 +112,7 @@ async function start(): Promise<string> {
|
|
|
112
112
|
registerWorkspaceTools(
|
|
113
113
|
registry, router, fakeAuth, toolHandler,
|
|
114
114
|
new SpillStore(join(tmpdir(), 'bevel-test-spills')), new DocExtractService(join(tmpdir(), 'bevel-test-doc-extract'), new WorkerDocumentExtractor()), allowAll, testKbContext({ kbDirName: KB_DIR }),
|
|
115
|
-
{ recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new
|
|
115
|
+
{ recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new VersionControlHooks(), notes: new ToolDescriptionNotes() },
|
|
116
116
|
new RoutineWritePolicyService(),
|
|
117
117
|
{} as never,
|
|
118
118
|
checker,
|
|
@@ -93,7 +93,7 @@ async function start(): Promise<string> {
|
|
|
93
93
|
source: auth.source,
|
|
94
94
|
abortSignal: signal,
|
|
95
95
|
workspaceService: {} as never,
|
|
96
|
-
|
|
96
|
+
versionControlService: {} as never,
|
|
97
97
|
events: {} as never,
|
|
98
98
|
getFilesystem: async () => ({}) as never,
|
|
99
99
|
}) as unknown as ToolContext;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, test, expect } from 'vitest';
|
|
2
|
-
import { DEFAULT_BRANCH, type ChangeRequest, type
|
|
2
|
+
import { DEFAULT_BRANCH, type ChangeRequest, type IVersionControlService } from '@bevel-software/platform-shared';
|
|
3
3
|
import { PendingSkillsService } from '../pending-skills.service.js';
|
|
4
4
|
import { hashEmail } from '../../../shared/email-identity.js';
|
|
5
5
|
import type { WorkspaceService } from '../../workspace/workspace.service.js';
|
|
@@ -74,11 +74,11 @@ function harness(opts: {
|
|
|
74
74
|
listSkills: async () => opts.released ?? [],
|
|
75
75
|
} as unknown as ISkillService;
|
|
76
76
|
|
|
77
|
-
const
|
|
77
|
+
const versionControl = {
|
|
78
78
|
listChangeRequests: async () => opts.crs,
|
|
79
|
-
} as unknown as
|
|
79
|
+
} as unknown as IVersionControlService;
|
|
80
80
|
|
|
81
|
-
return new PendingSkillsService(workspaceService, accessControl, skillService,
|
|
81
|
+
return new PendingSkillsService(workspaceService, accessControl, skillService, versionControl, testKbContext());
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
const ADMIN_WRITES = {
|
|
@@ -197,20 +197,20 @@ describe('PendingSkillsService', () => {
|
|
|
197
197
|
});
|
|
198
198
|
|
|
199
199
|
/**
|
|
200
|
-
* This hangs off the library's list load. A
|
|
200
|
+
* This hangs off the library's list load. A version-control service that cannot
|
|
201
201
|
* answer must cost the reader an empty review shelf, not their whole library.
|
|
202
202
|
*/
|
|
203
203
|
test('degrades to nothing pending when the change requests cannot be listed', async () => {
|
|
204
|
-
const
|
|
204
|
+
const versionControl = {
|
|
205
205
|
listChangeRequests: async () => {
|
|
206
206
|
throw new Error('offline');
|
|
207
207
|
},
|
|
208
|
-
} as unknown as
|
|
208
|
+
} as unknown as IVersionControlService;
|
|
209
209
|
const svc = new PendingSkillsService(
|
|
210
210
|
{} as unknown as WorkspaceService,
|
|
211
211
|
{} as unknown as IAccessControl,
|
|
212
212
|
{ listSkills: async () => [] } as unknown as ISkillService,
|
|
213
|
-
|
|
213
|
+
versionControl,
|
|
214
214
|
testKbContext(),
|
|
215
215
|
);
|
|
216
216
|
await expect(svc.listPendingSkills(AUTHOR)).resolves.toEqual([]);
|