@bevel-software/platform-core-backend 0.32.0 → 0.34.0
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 +24 -8
- package/agent-guide/html-views.md +277 -15
- package/agent-guide/tool-manuals.md +1 -1
- package/dist/core/catalog-revision.d.ts +12 -1
- package/dist/core/catalog-revision.d.ts.map +1 -1
- package/dist/core/catalog-revision.js +23 -3
- package/dist/core/catalog-revision.js.map +1 -1
- package/dist/core/core-ports.d.ts +41 -0
- 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 +42 -10
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +22 -6
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +58 -17
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +24 -0
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +16 -2
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core/public-config.d.ts +10 -0
- package/dist/core/public-config.d.ts.map +1 -1
- package/dist/core/public-config.js +10 -0
- package/dist/core/public-config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.interface.d.ts +17 -9
- package/dist/modules/access/access-control.interface.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +13 -3
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +165 -77
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access-declarations.d.ts +1 -1
- package/dist/modules/access/access-declarations.d.ts.map +1 -1
- package/dist/modules/access/access-declarations.js +1 -1
- package/dist/modules/access/access-declarations.js.map +1 -1
- package/dist/modules/access/access-mutation.service.d.ts +28 -25
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
- package/dist/modules/access/access-mutation.service.js +50 -53
- package/dist/modules/access/access-mutation.service.js.map +1 -1
- package/dist/modules/access/access-requests.contract.d.ts +1 -1
- package/dist/modules/access/access-requests.contract.d.ts.map +1 -1
- package/dist/modules/access/access-requests.routes.d.ts +3 -3
- package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
- package/dist/modules/access/access-requests.routes.js +7 -7
- package/dist/modules/access/access-requests.routes.js.map +1 -1
- package/dist/modules/access/access-requests.service.d.ts +21 -20
- package/dist/modules/access/access-requests.service.d.ts.map +1 -1
- package/dist/modules/access/access-requests.service.js +22 -68
- package/dist/modules/access/access-requests.service.js.map +1 -1
- package/dist/modules/access/access-view.d.ts +1 -1
- package/dist/modules/access/access-view.d.ts.map +1 -1
- package/dist/modules/access/access-view.js +12 -11
- package/dist/modules/access/access-view.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts +8 -7
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +38 -32
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/admin-locked-commit.d.ts +2 -2
- package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
- package/dist/modules/access/admin-locked-commit.js +1 -1
- package/dist/modules/access/admin-locked-commit.js.map +1 -1
- package/dist/modules/access/capability-registry.js +1 -1
- package/dist/modules/access/capability-registry.js.map +1 -1
- package/dist/modules/access/change-read-gate.d.ts +2 -2
- package/dist/modules/access/change-read-gate.d.ts.map +1 -1
- package/dist/modules/access/change-read-gate.js +1 -3
- package/dist/modules/access/change-read-gate.js.map +1 -1
- package/dist/modules/access/creator-access.d.ts +2 -2
- package/dist/modules/access/creator-access.d.ts.map +1 -1
- package/dist/modules/access/creator-access.js +2 -4
- package/dist/modules/access/creator-access.js.map +1 -1
- package/dist/modules/access/directory-sync-bot.d.ts +1 -1
- package/dist/modules/access/directory-sync-bot.d.ts.map +1 -1
- package/dist/modules/access/directory-sync-bot.js +1 -1
- package/dist/modules/access/directory-sync-bot.js.map +1 -1
- package/dist/modules/access/groups-admin.routes.d.ts +2 -2
- package/dist/modules/access/groups-admin.routes.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.routes.js +6 -4
- package/dist/modules/access/groups-admin.routes.js.map +1 -1
- package/dist/modules/access/groups-admin.service.d.ts +45 -14
- package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.service.js +80 -39
- package/dist/modules/access/groups-admin.service.js.map +1 -1
- package/dist/modules/access/groups-edit.d.ts +1 -1
- package/dist/modules/access/groups-edit.d.ts.map +1 -1
- package/dist/modules/access/groups-edit.js +3 -3
- package/dist/modules/access/groups-edit.js.map +1 -1
- package/dist/modules/access/index.d.ts +17 -0
- package/dist/modules/access/index.d.ts.map +1 -0
- package/dist/modules/access/index.js +6 -0
- package/dist/modules/access/index.js.map +1 -0
- package/dist/modules/access/reference-scan.d.ts +116 -24
- package/dist/modules/access/reference-scan.d.ts.map +1 -1
- package/dist/modules/access/reference-scan.js +305 -44
- package/dist/modules/access/reference-scan.js.map +1 -1
- package/dist/modules/access/roles-admin.service.d.ts +18 -9
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
- package/dist/modules/access/roles-admin.service.js +32 -26
- package/dist/modules/access/roles-admin.service.js.map +1 -1
- package/dist/modules/access/roles-edit.js +1 -1
- package/dist/modules/access/roles-edit.js.map +1 -1
- package/dist/modules/access/synced-groups-committer.d.ts +2 -2
- package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-committer.js +2 -2
- package/dist/modules/access/synced-groups-committer.js.map +1 -1
- package/dist/modules/access/synced-groups-writer.js +2 -2
- package/dist/modules/access/synced-groups-writer.js.map +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
- package/dist/modules/access/user-access-removal.service.js +2 -5
- package/dist/modules/access/user-access-removal.service.js.map +1 -1
- package/dist/modules/access-model/access-grammar.d.ts +35 -10
- package/dist/modules/access-model/access-grammar.d.ts.map +1 -1
- package/dist/modules/access-model/access-grammar.js +60 -20
- package/dist/modules/access-model/access-grammar.js.map +1 -1
- package/dist/modules/access-model/access-splice.d.ts +22 -18
- package/dist/modules/access-model/access-splice.d.ts.map +1 -1
- package/dist/modules/access-model/access-splice.js +20 -14
- package/dist/modules/access-model/access-splice.js.map +1 -1
- package/dist/modules/access-model/group-files.d.ts +1 -0
- package/dist/modules/access-model/group-files.d.ts.map +1 -1
- package/dist/modules/access-model/group-files.js +5 -1
- package/dist/modules/access-model/group-files.js.map +1 -1
- package/dist/modules/access-model/index.d.ts +20 -5
- package/dist/modules/access-model/index.d.ts.map +1 -1
- package/dist/modules/access-model/index.js +18 -5
- package/dist/modules/access-model/index.js.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
- package/dist/modules/admin/admin-access.routes.d.ts +1 -1
- package/dist/modules/admin/admin-access.routes.d.ts.map +1 -1
- package/dist/modules/admin/admin-access.routes.js +1 -1
- package/dist/modules/admin/admin-access.routes.js.map +1 -1
- package/dist/modules/admin/admin-access.service.d.ts +2 -2
- package/dist/modules/admin/admin-access.service.d.ts.map +1 -1
- package/dist/modules/admin/index.d.ts +8 -0
- package/dist/modules/admin/index.d.ts.map +1 -0
- package/dist/modules/admin/index.js +2 -0
- package/dist/modules/admin/index.js.map +1 -0
- package/dist/modules/agent-guide/agent-guide.js +1 -1
- package/dist/modules/agent-guide/agent-guide.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.d.ts +3 -3
- package/dist/modules/agent-guide/agent-guide.tools.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.js +15 -7
- package/dist/modules/agent-guide/agent-guide.tools.js.map +1 -1
- package/dist/modules/agent-guide/index.d.ts +1 -1
- package/dist/modules/agent-guide/index.d.ts.map +1 -1
- package/dist/modules/agent-guide/index.js +1 -1
- package/dist/modules/agent-guide/index.js.map +1 -1
- package/dist/modules/agent-instructions/compose.d.ts +3 -1
- package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
- package/dist/modules/agent-instructions/compose.js +3 -1
- package/dist/modules/agent-instructions/compose.js.map +1 -1
- package/dist/modules/agent-instructions/read-preamble.d.ts +1 -1
- package/dist/modules/agent-instructions/read-preamble.d.ts.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.d.ts +5 -1
- package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.js +16 -1
- package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
- package/dist/modules/agent-scope/agent-scope.contract.d.ts +67 -0
- package/dist/modules/agent-scope/agent-scope.contract.d.ts.map +1 -0
- package/dist/modules/agent-scope/agent-scope.contract.js +27 -0
- package/dist/modules/agent-scope/agent-scope.contract.js.map +1 -0
- package/dist/modules/agent-scope/connection-scope.d.ts +111 -0
- package/dist/modules/agent-scope/connection-scope.d.ts.map +1 -0
- package/dist/modules/agent-scope/connection-scope.js +165 -0
- package/dist/modules/agent-scope/connection-scope.js.map +1 -0
- package/dist/modules/agent-scope/index.d.ts +3 -0
- package/dist/modules/agent-scope/index.d.ts.map +1 -0
- package/dist/modules/agent-scope/index.js +3 -0
- package/dist/modules/agent-scope/index.js.map +1 -0
- package/dist/modules/audit/agent-audit.service.d.ts +2 -2
- package/dist/modules/audit/agent-audit.service.d.ts.map +1 -1
- package/dist/modules/audit/agent-audit.service.js +3 -1
- package/dist/modules/audit/agent-audit.service.js.map +1 -1
- package/dist/modules/audit/agent-connection.routes.d.ts +1 -1
- package/dist/modules/audit/agent-connection.routes.d.ts.map +1 -1
- package/dist/modules/audit/agent-connection.routes.js +1 -1
- package/dist/modules/audit/agent-connection.routes.js.map +1 -1
- package/dist/modules/audit/agent-rest-audit.middleware.d.ts +1 -1
- package/dist/modules/audit/agent-rest-audit.middleware.d.ts.map +1 -1
- package/dist/modules/audit/agent-rest-audit.middleware.js +1 -1
- package/dist/modules/audit/agent-rest-audit.middleware.js.map +1 -1
- package/dist/modules/audit/audit.contract.d.ts +6 -0
- package/dist/modules/audit/audit.contract.d.ts.map +1 -1
- package/dist/modules/audit/audit.contract.js.map +1 -1
- package/dist/modules/audit/audit.routes.d.ts +3 -3
- package/dist/modules/audit/audit.routes.d.ts.map +1 -1
- package/dist/modules/audit/audit.routes.js +2 -2
- package/dist/modules/audit/audit.routes.js.map +1 -1
- package/dist/modules/auth/account-admission.d.ts +12 -0
- package/dist/modules/auth/account-admission.d.ts.map +1 -1
- package/dist/modules/auth/account-admission.js +15 -0
- package/dist/modules/auth/account-admission.js.map +1 -1
- package/dist/modules/auth/account-erasure.service.d.ts +3 -3
- package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
- package/dist/modules/auth/account-erasure.service.js +1 -5
- package/dist/modules/auth/account-erasure.service.js.map +1 -1
- package/dist/modules/auth/account-switch-lock.d.ts +1 -1
- package/dist/modules/auth/account-switch-lock.d.ts.map +1 -1
- package/dist/modules/auth/account-switch-lock.js +1 -1
- package/dist/modules/auth/account-switch-lock.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts +2 -2
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +1 -1
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.middleware.d.ts +27 -1
- package/dist/modules/auth/auth.middleware.d.ts.map +1 -1
- package/dist/modules/auth/auth.middleware.js +42 -4
- package/dist/modules/auth/auth.middleware.js.map +1 -1
- package/dist/modules/auth/auth.routes.d.ts +13 -9
- package/dist/modules/auth/auth.routes.d.ts.map +1 -1
- package/dist/modules/auth/auth.routes.js +35 -29
- package/dist/modules/auth/auth.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +56 -7
- package/dist/modules/auth/auth.service.d.ts.map +1 -1
- package/dist/modules/auth/auth.service.js +131 -37
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/index.d.ts +3 -1
- package/dist/modules/auth/index.d.ts.map +1 -1
- package/dist/modules/auth/index.js +1 -1
- package/dist/modules/auth/index.js.map +1 -1
- package/dist/modules/auth/oidc-auth-provider.d.ts.map +1 -1
- package/dist/modules/auth/oidc-auth-provider.js +3 -10
- package/dist/modules/auth/oidc-auth-provider.js.map +1 -1
- package/dist/modules/code-mode/code-mode.tool.d.ts +1 -1
- package/dist/modules/code-mode/code-mode.tool.d.ts.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.d.ts +2 -2
- package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.js +1 -4
- package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
- package/dist/modules/database/core-schema.d.ts +175 -234
- package/dist/modules/database/core-schema.d.ts.map +1 -1
- package/dist/modules/database/core-schema.js +72 -35
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/database/index.d.ts +10 -0
- package/dist/modules/database/index.d.ts.map +1 -0
- package/dist/modules/database/index.js +4 -0
- package/dist/modules/database/index.js.map +1 -0
- package/dist/modules/database/migrate.d.ts.map +1 -1
- package/dist/modules/database/migrate.js +78 -3
- package/dist/modules/database/migrate.js.map +1 -1
- package/dist/modules/declared-variables/declared-variables.routes.d.ts +10 -3
- package/dist/modules/declared-variables/declared-variables.routes.d.ts.map +1 -1
- package/dist/modules/declared-variables/declared-variables.routes.js +13 -2
- package/dist/modules/declared-variables/declared-variables.routes.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 +3 -3
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/diff/diff.service.d.ts +2 -2
- package/dist/modules/diff/diff.service.d.ts.map +1 -1
- package/dist/modules/diff/index.d.ts +7 -0
- package/dist/modules/diff/index.d.ts.map +1 -0
- package/dist/modules/diff/index.js +2 -0
- package/dist/modules/diff/index.js.map +1 -0
- package/dist/modules/embed/account-link.service.d.ts +1 -1
- package/dist/modules/embed/account-link.service.d.ts.map +1 -1
- package/dist/modules/embed/account-link.service.js +1 -1
- package/dist/modules/embed/account-link.service.js.map +1 -1
- package/dist/modules/embed/embed.routes.d.ts +1 -1
- package/dist/modules/embed/embed.routes.d.ts.map +1 -1
- package/dist/modules/embed/embed.routes.js +2 -2
- package/dist/modules/embed/embed.routes.js.map +1 -1
- package/dist/modules/embed/embed.service.d.ts +1 -1
- package/dist/modules/embed/embed.service.d.ts.map +1 -1
- package/dist/modules/embed/embed.tools.d.ts +4 -4
- package/dist/modules/embed/embed.tools.d.ts.map +1 -1
- package/dist/modules/embed/embed.tools.js +8 -5
- package/dist/modules/embed/embed.tools.js.map +1 -1
- package/dist/modules/github-app/github-app.connection.d.ts +1 -1
- package/dist/modules/github-app/github-app.connection.d.ts.map +1 -1
- package/dist/modules/github-app/github-app.routes.d.ts +3 -3
- package/dist/modules/github-app/github-app.routes.d.ts.map +1 -1
- package/dist/modules/github-app/github-app.routes.js +1 -1
- package/dist/modules/github-app/github-app.routes.js.map +1 -1
- package/dist/modules/kb-fs/index.d.ts +12 -0
- package/dist/modules/kb-fs/index.d.ts.map +1 -1
- package/dist/modules/kb-fs/index.js +11 -0
- package/dist/modules/kb-fs/index.js.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.d.ts +1 -1
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +7 -1
- package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/repo-path.d.ts +26 -6
- package/dist/modules/kb-fs/repo-path.d.ts.map +1 -1
- package/dist/modules/kb-fs/repo-path.js +22 -7
- package/dist/modules/kb-fs/repo-path.js.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.d.ts +36 -0
- package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -0
- package/dist/modules/kb-fs/tmp-ref.js +76 -0
- package/dist/modules/kb-fs/tmp-ref.js.map +1 -0
- package/dist/modules/kb-sync/kb-sync.routes.d.ts +1 -1
- package/dist/modules/kb-sync/kb-sync.routes.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.routes.js +2 -2
- package/dist/modules/kb-sync/kb-sync.routes.js.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/kb-sync/sync-auth.js +1 -1
- package/dist/modules/kb-sync/sync-auth.js.map +1 -1
- package/dist/modules/kb-sync/sync-payload.js +1 -1
- package/dist/modules/kb-sync/sync-payload.js.map +1 -1
- package/dist/modules/marketplace/git-http.routes.d.ts +1 -1
- package/dist/modules/marketplace/git-http.routes.d.ts.map +1 -1
- package/dist/modules/marketplace/git-http.routes.js +1 -1
- package/dist/modules/marketplace/git-http.routes.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.js +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts +2 -2
- package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.routes.js +2 -2
- package/dist/modules/marketplace/github-facade/github-facade.routes.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.service.d.ts +2 -2
- package/dist/modules/marketplace/github-facade/github-facade.service.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.service.js +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.service.js.map +1 -1
- package/dist/modules/marketplace/marketplace-repo.service.d.ts +1 -1
- package/dist/modules/marketplace/marketplace-repo.service.d.ts.map +1 -1
- package/dist/modules/marketplace/marketplace-repo.service.js +1 -1
- package/dist/modules/mcp/index.d.ts +8 -0
- package/dist/modules/mcp/index.d.ts.map +1 -0
- package/dist/modules/mcp/index.js +7 -0
- package/dist/modules/mcp/index.js.map +1 -0
- package/dist/modules/mcp/mcp-auth.middleware.d.ts +11 -5
- package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -1
- package/dist/modules/mcp/mcp-auth.middleware.js +18 -5
- package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -1
- package/dist/modules/mcp/mcp.routes.d.ts +9 -5
- package/dist/modules/mcp/mcp.routes.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.routes.js +41 -6
- package/dist/modules/mcp/mcp.routes.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +25 -4
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +84 -19
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts +25 -2
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js +46 -11
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts +10 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.js +35 -2
- package/dist/modules/mcp/oauth/oauth-consent.routes.js.map +1 -1
- package/dist/modules/onboarding/onboarding.routes.d.ts +1 -1
- package/dist/modules/onboarding/onboarding.routes.d.ts.map +1 -1
- package/dist/modules/onboarding/onboarding.routes.js +1 -1
- package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.d.ts +4 -5
- package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.js +2 -2
- package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
- package/dist/modules/plugins/compile/compile-marketplace.d.ts +1 -1
- package/dist/modules/plugins/compile/compile-marketplace.d.ts.map +1 -1
- package/dist/modules/plugins/compile/compile-marketplace.js +1 -1
- package/dist/modules/plugins/compile/compile-marketplace.js.map +1 -1
- package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts +3 -3
- package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.js +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.js.map +1 -1
- package/dist/modules/plugins/index.d.ts +2 -1
- package/dist/modules/plugins/index.d.ts.map +1 -1
- package/dist/modules/plugins/index.js +2 -0
- package/dist/modules/plugins/index.js.map +1 -1
- package/dist/modules/plugins/join-proposals.d.ts +2 -2
- package/dist/modules/plugins/join-proposals.d.ts.map +1 -1
- package/dist/modules/plugins/join-proposals.js +1 -1
- package/dist/modules/plugins/join-proposals.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.js +2 -2
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
- package/dist/modules/plugins/join-request-records.store.d.ts +1 -1
- package/dist/modules/plugins/join-request-records.store.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-records.store.js +1 -1
- package/dist/modules/plugins/join-request-records.store.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 +1 -1
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-links.d.ts +21 -5
- package/dist/modules/plugins/plugin-links.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-links.js +1 -1
- package/dist/modules/plugins/plugin-links.js.map +1 -1
- package/dist/modules/plugins/plugin-links.service.d.ts +8 -5
- package/dist/modules/plugins/plugin-links.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-links.service.js +8 -6
- package/dist/modules/plugins/plugin-links.service.js.map +1 -1
- package/dist/modules/plugins/plugin-provision.service.d.ts +2 -2
- package/dist/modules/plugins/plugin-provision.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-provision.service.js +2 -3
- package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.d.ts +2 -2
- package/dist/modules/plugins/plugin-rename.service.d.ts.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.contract.d.ts +1 -1
- package/dist/modules/plugins/plugins.contract.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +7 -3
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +35 -8
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/plugins/plugins.service.d.ts +4 -4
- package/dist/modules/plugins/plugins.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.service.js +1 -1
- package/dist/modules/plugins/plugins.service.js.map +1 -1
- package/dist/modules/plugins/plugins.tools.d.ts +1 -1
- package/dist/modules/plugins/plugins.tools.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.tools.js +3 -3
- package/dist/modules/plugins/plugins.tools.js.map +1 -1
- package/dist/modules/plugins/teams.routes.d.ts +3 -3
- package/dist/modules/plugins/teams.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +1 -0
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js +2 -0
- package/dist/modules/secrets-vault/index.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +13 -4
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +16 -4
- 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.d.ts +7 -1
- package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +45 -3
- package/dist/modules/settings/deployment-settings.service.js.map +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/index.d.ts +13 -0
- package/dist/modules/settings/index.d.ts.map +1 -0
- package/dist/modules/settings/index.js +3 -0
- package/dist/modules/settings/index.js.map +1 -0
- package/dist/modules/settings/setup.routes.d.ts +3 -3
- package/dist/modules/settings/setup.routes.d.ts.map +1 -1
- package/dist/modules/settings/setup.routes.js +2 -2
- package/dist/modules/settings/setup.routes.js.map +1 -1
- package/dist/modules/skills/allowed-tools-check.d.ts +2 -2
- package/dist/modules/skills/allowed-tools-check.d.ts.map +1 -1
- package/dist/modules/skills/allowed-tools-check.js +1 -1
- package/dist/modules/skills/allowed-tools-check.js.map +1 -1
- package/dist/modules/skills/index.d.ts +4 -3
- package/dist/modules/skills/index.d.ts.map +1 -1
- package/dist/modules/skills/index.js +0 -2
- package/dist/modules/skills/index.js.map +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.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts +5 -5
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +6 -13
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
- package/dist/modules/skills/skills.contract.d.ts +16 -0
- package/dist/modules/skills/skills.contract.d.ts.map +1 -1
- package/dist/modules/skills/skills.routes.d.ts +1 -1
- package/dist/modules/skills/skills.routes.d.ts.map +1 -1
- package/dist/modules/skills/skills.routes.js +1 -1
- package/dist/modules/skills/skills.routes.js.map +1 -1
- package/dist/modules/skills/skills.service.d.ts +2 -2
- package/dist/modules/skills/skills.service.d.ts.map +1 -1
- package/dist/modules/skills/skills.service.js +6 -1
- package/dist/modules/skills/skills.service.js.map +1 -1
- package/dist/modules/skills/skills.tools.d.ts +3 -3
- package/dist/modules/skills/skills.tools.d.ts.map +1 -1
- package/dist/modules/skills/skills.tools.js +27 -19
- package/dist/modules/skills/skills.tools.js.map +1 -1
- package/dist/modules/tool-auth/connection-key-rejection.js +1 -1
- package/dist/modules/tool-auth/connection-key-rejection.js.map +1 -1
- package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts +2 -2
- package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts.map +1 -1
- package/dist/modules/tool-auth/connection-keys-admin.routes.js +1 -1
- package/dist/modules/tool-auth/connection-keys-admin.routes.js.map +1 -1
- package/dist/modules/tool-auth/external-api-key.interface.d.ts +11 -0
- package/dist/modules/tool-auth/external-api-key.interface.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.interface.js.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.d.ts +2 -1
- package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.js +5 -2
- package/dist/modules/tool-auth/external-api-key.service.js.map +1 -1
- package/dist/modules/tool-auth/index.d.ts +15 -0
- package/dist/modules/tool-auth/index.d.ts.map +1 -0
- package/dist/modules/tool-auth/index.js +11 -0
- package/dist/modules/tool-auth/index.js.map +1 -0
- package/dist/modules/tool-auth/internal-token.service.d.ts +9 -0
- package/dist/modules/tool-auth/internal-token.service.d.ts.map +1 -1
- package/dist/modules/tool-auth/internal-token.service.js +1 -0
- package/dist/modules/tool-auth/internal-token.service.js.map +1 -1
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts +29 -5
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -1
- package/dist/modules/tool-auth/tool-auth.middleware.js +33 -7
- package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -1
- package/dist/modules/tool-helpers/default-branch-write.d.ts +1 -1
- package/dist/modules/tool-helpers/default-branch-write.d.ts.map +1 -1
- package/dist/modules/tool-helpers/index.d.ts +4 -1
- package/dist/modules/tool-helpers/index.d.ts.map +1 -1
- package/dist/modules/tool-helpers/index.js +3 -0
- package/dist/modules/tool-helpers/index.js.map +1 -1
- package/dist/modules/tool-helpers/route-argument-check.js +1 -1
- package/dist/modules/tool-helpers/route-argument-check.js.map +1 -1
- package/dist/modules/tool-helpers/route-tool-schemas.d.ts +1 -1
- package/dist/modules/tool-helpers/route-tool-schemas.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.d.ts +12 -6
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +5 -3
- package/dist/modules/tool-helpers/tool-context.js.map +1 -1
- package/dist/modules/tool-helpers/tool-def.d.ts +4 -2
- package/dist/modules/tool-helpers/tool-def.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-def.js +3 -1
- package/dist/modules/tool-helpers/tool-def.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.d.ts +17 -2
- package/dist/modules/tool-helpers/tool-handler.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +21 -2
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +12 -2
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.js.map +1 -1
- package/dist/modules/tool-helpers/validate-token.d.ts +3 -2
- package/dist/modules/tool-helpers/validate-token.d.ts.map +1 -1
- package/dist/modules/tool-helpers/validate-token.js +2 -2
- package/dist/modules/tool-helpers/validate-token.js.map +1 -1
- package/dist/modules/tool-manuals/index.d.ts +8 -3
- package/dist/modules/tool-manuals/index.d.ts.map +1 -1
- package/dist/modules/tool-manuals/index.js +4 -2
- package/dist/modules/tool-manuals/index.js.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts +2 -2
- package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts +2 -2
- package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.d.ts +5 -6
- package/dist/modules/tool-manuals/tool-delete.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +19 -6
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts +12 -6
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.js +43 -6
- package/dist/modules/tool-manuals/tool-manuals.routes.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +16 -9
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +23 -15
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -3
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +26 -12
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/tool-registry/description-length.js +2 -2
- package/dist/modules/tool-registry/description-length.js.map +1 -1
- package/dist/modules/tool-registry/index.d.ts +8 -0
- package/dist/modules/tool-registry/index.d.ts.map +1 -0
- package/dist/modules/tool-registry/index.js +8 -0
- package/dist/modules/tool-registry/index.js.map +1 -0
- package/dist/modules/tool-registry/manual.routes.d.ts +44 -2
- package/dist/modules/tool-registry/manual.routes.d.ts.map +1 -1
- package/dist/modules/tool-registry/manual.routes.js +38 -11
- package/dist/modules/tool-registry/manual.routes.js.map +1 -1
- package/dist/modules/tool-registry/read-only-hints.contract.d.ts +52 -0
- package/dist/modules/tool-registry/read-only-hints.contract.d.ts.map +1 -0
- package/dist/modules/tool-registry/read-only-hints.contract.js +2 -0
- package/dist/modules/tool-registry/read-only-hints.contract.js.map +1 -0
- package/dist/modules/tool-registry/read-only-hints.d.ts +89 -0
- package/dist/modules/tool-registry/read-only-hints.d.ts.map +1 -0
- package/dist/modules/tool-registry/read-only-hints.js +212 -0
- package/dist/modules/tool-registry/read-only-hints.js.map +1 -0
- package/dist/modules/tool-registry/tool.contract.d.ts +15 -0
- package/dist/modules/tool-registry/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-registry/tool.contract.js +10 -1
- package/dist/modules/tool-registry/tool.contract.js.map +1 -1
- package/dist/modules/update-check/update-check.routes.d.ts +2 -2
- package/dist/modules/update-check/update-check.routes.d.ts.map +1 -1
- package/dist/modules/update-check/update-check.routes.js +1 -1
- package/dist/modules/update-check/update-check.routes.js.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts +9 -104
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js +8 -118
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts +16 -17
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js +19 -86
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts +5 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js +10 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts +7 -5
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js +60 -77
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
- package/dist/modules/workflow/change-request-hooks.d.ts +1 -1
- package/dist/modules/workflow/event-bus.d.ts.map +1 -1
- package/dist/modules/workflow/event-bus.js +3 -1
- package/dist/modules/workflow/event-bus.js.map +1 -1
- package/dist/modules/workflow/events-delivery.d.ts +120 -0
- package/dist/modules/workflow/events-delivery.d.ts.map +1 -0
- package/dist/modules/workflow/events-delivery.js +202 -0
- package/dist/modules/workflow/events-delivery.js.map +1 -0
- package/dist/modules/workflow/events.routes.d.ts +16 -7
- package/dist/modules/workflow/events.routes.d.ts.map +1 -1
- package/dist/modules/workflow/events.routes.js +23 -4
- package/dist/modules/workflow/events.routes.js.map +1 -1
- package/dist/modules/workflow/file-lock.service.d.ts +1 -1
- package/dist/modules/workflow/file-lock.service.d.ts.map +1 -1
- package/dist/modules/workflow/file-lock.service.js +1 -1
- package/dist/modules/workflow/file-lock.service.js.map +1 -1
- package/dist/modules/workflow/git/git.service.d.ts +4 -4
- package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/git.service.js +23 -41
- package/dist/modules/workflow/git/git.service.js.map +1 -1
- package/dist/modules/workflow/git/node-git-runner.js +1 -1
- package/dist/modules/workflow/git/node-git-runner.js.map +1 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts +6 -7
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/pull-request.service.js +40 -33
- package/dist/modules/workflow/git/pull-request.service.js.map +1 -1
- package/dist/modules/workflow/index.d.ts +14 -2
- package/dist/modules/workflow/index.d.ts.map +1 -1
- package/dist/modules/workflow/index.js +11 -2
- package/dist/modules/workflow/index.js.map +1 -1
- package/dist/modules/workflow/pending-commits.service.d.ts +1 -1
- package/dist/modules/workflow/pending-commits.service.d.ts.map +1 -1
- package/dist/modules/workflow/pending-commits.service.js +1 -1
- package/dist/modules/workflow/pending-commits.service.js.map +1 -1
- package/dist/modules/workflow/read-on-branch.d.ts +1 -1
- package/dist/modules/workflow/read-on-branch.d.ts.map +1 -1
- package/dist/modules/workflow/recovery-bot.d.ts +1 -1
- package/dist/modules/workflow/recovery-bot.d.ts.map +1 -1
- package/dist/modules/workflow/recovery-bot.js +1 -1
- package/dist/modules/workflow/recovery-bot.js.map +1 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts +1 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts +4 -20
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts +4 -8
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js +3 -138
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -1
- package/dist/modules/workflow/workflow.routes.d.ts +5 -5
- package/dist/modules/workflow/workflow.routes.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.routes.js +42 -94
- package/dist/modules/workflow/workflow.routes.js.map +1 -1
- package/dist/modules/workflow/workflow.service.d.ts +41 -50
- package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.service.js +221 -154
- package/dist/modules/workflow/workflow.service.js.map +1 -1
- package/dist/modules/workspace/agent-access.gate.d.ts +3 -3
- package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
- package/dist/modules/workspace/agent-download.builder.d.ts +1 -1
- package/dist/modules/workspace/agent-download.builder.d.ts.map +1 -1
- package/dist/modules/workspace/agent-download.builder.js +1 -1
- package/dist/modules/workspace/agent-download.builder.js.map +1 -1
- package/dist/modules/workspace/agent-upload.routes.d.ts.map +1 -1
- package/dist/modules/workspace/agent-upload.routes.js +19 -0
- package/dist/modules/workspace/agent-upload.routes.js.map +1 -1
- package/dist/modules/workspace/agent-upload.store.d.ts +11 -0
- package/dist/modules/workspace/agent-upload.store.d.ts.map +1 -1
- package/dist/modules/workspace/agent-upload.store.js +18 -0
- package/dist/modules/workspace/agent-upload.store.js.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.service.d.ts +82 -14
- package/dist/modules/workspace/file-readers/doc-extract.service.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.service.js +109 -36
- package/dist/modules/workspace/file-readers/doc-extract.service.js.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.types.d.ts +9 -2
- package/dist/modules/workspace/file-readers/doc-extract.types.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.types.js.map +1 -1
- package/dist/modules/workspace/file-readers/document-extractor.contract.d.ts +41 -0
- package/dist/modules/workspace/file-readers/document-extractor.contract.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/document-extractor.contract.js +5 -0
- package/dist/modules/workspace/file-readers/document-extractor.contract.js.map +1 -0
- package/dist/modules/workspace/file-readers/document-extractors.d.ts +9 -0
- package/dist/modules/workspace/file-readers/document-extractors.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/document-extractors.js +26 -0
- package/dist/modules/workspace/file-readers/document-extractors.js.map +1 -0
- package/dist/modules/workspace/file-readers/document-formats.d.ts +12 -0
- package/dist/modules/workspace/file-readers/document-formats.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/document-formats.js +11 -0
- package/dist/modules/workspace/file-readers/document-formats.js.map +1 -0
- package/dist/modules/workspace/file-readers/document-reader.d.ts +21 -17
- package/dist/modules/workspace/file-readers/document-reader.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/document-reader.js +38 -34
- package/dist/modules/workspace/file-readers/document-reader.js.map +1 -1
- package/dist/modules/workspace/file-readers/extract-in-worker.d.ts +60 -0
- package/dist/modules/workspace/file-readers/extract-in-worker.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/extract-in-worker.js +140 -0
- package/dist/modules/workspace/file-readers/extract-in-worker.js.map +1 -0
- package/dist/modules/workspace/file-readers/extract-pdf.d.ts +2 -0
- package/dist/modules/workspace/file-readers/extract-pdf.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/extract-pdf.js +20 -3
- package/dist/modules/workspace/file-readers/extract-pdf.js.map +1 -1
- package/dist/modules/workspace/file-readers/extract.worker.d.ts +2 -0
- package/dist/modules/workspace/file-readers/extract.worker.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/extract.worker.js +5 -0
- package/dist/modules/workspace/file-readers/extract.worker.js.map +1 -0
- package/dist/modules/workspace/file-readers/extraction-cache.d.ts +21 -5
- package/dist/modules/workspace/file-readers/extraction-cache.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/extraction-cache.js +24 -10
- package/dist/modules/workspace/file-readers/extraction-cache.js.map +1 -1
- package/dist/modules/workspace/file-readers/extraction-worker.d.ts +42 -0
- package/dist/modules/workspace/file-readers/extraction-worker.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/extraction-worker.js +69 -0
- package/dist/modules/workspace/file-readers/extraction-worker.js.map +1 -0
- package/dist/modules/workspace/file-readers/file-reader.d.ts +13 -4
- package/dist/modules/workspace/file-readers/file-reader.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.js.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.registry.d.ts +3 -2
- package/dist/modules/workspace/file-readers/file-reader.registry.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.registry.js +6 -20
- package/dist/modules/workspace/file-readers/file-reader.registry.js.map +1 -1
- package/dist/modules/workspace/first-run.js +1 -1
- package/dist/modules/workspace/first-run.js.map +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts.map +1 -1
- package/dist/modules/workspace/git-internals.middleware.js +1 -1
- package/dist/modules/workspace/git-internals.middleware.js.map +1 -1
- package/dist/modules/workspace/index.d.ts +24 -0
- package/dist/modules/workspace/index.d.ts.map +1 -1
- package/dist/modules/workspace/index.js +21 -0
- package/dist/modules/workspace/index.js.map +1 -1
- package/dist/modules/workspace/kb-repository.d.ts.map +1 -1
- package/dist/modules/workspace/kb-repository.js +1 -1
- package/dist/modules/workspace/kb-repository.js.map +1 -1
- package/dist/modules/workspace/not-found.d.ts +1 -1
- package/dist/modules/workspace/not-found.d.ts.map +1 -1
- package/dist/modules/workspace/not-found.js +1 -1
- package/dist/modules/workspace/not-found.js.map +1 -1
- package/dist/modules/workspace/nul-scan.d.ts +19 -0
- package/dist/modules/workspace/nul-scan.d.ts.map +1 -0
- package/dist/modules/workspace/nul-scan.js +55 -0
- package/dist/modules/workspace/nul-scan.js.map +1 -0
- package/dist/modules/workspace/pattern-matcher.contract.d.ts +111 -28
- package/dist/modules/workspace/pattern-matcher.contract.d.ts.map +1 -1
- package/dist/modules/workspace/pattern-matcher.contract.js +31 -14
- package/dist/modules/workspace/pattern-matcher.contract.js.map +1 -1
- package/dist/modules/workspace/ripgrep-search.d.ts +54 -0
- package/dist/modules/workspace/ripgrep-search.d.ts.map +1 -0
- package/dist/modules/workspace/ripgrep-search.js +657 -0
- package/dist/modules/workspace/ripgrep-search.js.map +1 -0
- package/dist/modules/workspace/ripgrep-version.d.ts +15 -0
- package/dist/modules/workspace/ripgrep-version.d.ts.map +1 -0
- package/dist/modules/workspace/ripgrep-version.js +31 -0
- package/dist/modules/workspace/ripgrep-version.js.map +1 -0
- package/dist/modules/workspace/routine-write-policy.js +1 -1
- package/dist/modules/workspace/routine-write-policy.js.map +1 -1
- package/dist/modules/workspace/startup/beside-checkout.d.ts +8 -5
- package/dist/modules/workspace/startup/beside-checkout.d.ts.map +1 -1
- package/dist/modules/workspace/startup/beside-checkout.js +14 -5
- package/dist/modules/workspace/startup/beside-checkout.js.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/kb-startup-runner.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-startup-runner.js +1 -2
- package/dist/modules/workspace/startup/kb-startup-runner.js.map +1 -1
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js +2 -2
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/personal-spaces.step.js +2 -2
- package/dist/modules/workspace/startup/steps/personal-spaces.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/plugin-layout.js +1 -1
- package/dist/modules/workspace/startup/steps/plugin-layout.js.map +1 -1
- package/dist/modules/workspace/startup/steps/roles-yaml.step.js +1 -1
- package/dist/modules/workspace/startup/steps/roles-yaml.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +2 -2
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +1 -1
- 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.js +2 -2
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
- package/dist/modules/workspace/worker-pool.d.ts +99 -0
- package/dist/modules/workspace/worker-pool.d.ts.map +1 -0
- package/dist/modules/workspace/worker-pool.js +156 -0
- package/dist/modules/workspace/worker-pool.js.map +1 -0
- package/dist/modules/workspace/workspace-tmp.d.ts +146 -0
- package/dist/modules/workspace/workspace-tmp.d.ts.map +1 -0
- package/dist/modules/workspace/workspace-tmp.js +435 -0
- package/dist/modules/workspace/workspace-tmp.js.map +1 -0
- package/dist/modules/workspace/workspace.routes.d.ts +7 -8
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +9 -32
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +48 -7
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +89 -12
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +7 -7
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +502 -140
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/modules/workspace/write-denial.d.ts +4 -4
- package/dist/modules/workspace/write-denial.d.ts.map +1 -1
- package/dist/modules/workspace/write-denial.js +2 -3
- package/dist/modules/workspace/write-denial.js.map +1 -1
- package/dist/modules/write-access/index.d.ts +8 -0
- package/dist/modules/write-access/index.d.ts.map +1 -0
- package/dist/modules/write-access/index.js +7 -0
- package/dist/modules/write-access/index.js.map +1 -0
- package/dist/shared/path-order.d.ts +28 -8
- package/dist/shared/path-order.d.ts.map +1 -1
- package/dist/shared/path-order.js +37 -8
- package/dist/shared/path-order.js.map +1 -1
- package/migrations/0020_change_request_body_is_the_description.sql +20 -0
- package/migrations/0021_data_migrations_ledger.sql +11 -0
- package/migrations/0022_session_version.sql +6 -0
- package/migrations/0023_agent_path.sql +3 -0
- package/migrations/meta/0020_snapshot.json +2321 -0
- package/migrations/meta/0021_snapshot.json +2353 -0
- package/migrations/meta/0022_snapshot.json +2360 -0
- package/migrations/meta/0023_snapshot.json +2378 -0
- package/migrations/meta/_journal.json +28 -0
- package/package.json +3 -3
- package/src/__tests__/pg-scratch.test.ts +69 -0
- package/src/__tests__/pg-scratch.ts +31 -0
- package/src/__tests__/slow-ripgrep.ts +65 -0
- package/src/core/__tests__/boot-without-ripgrep.test.ts +34 -0
- package/src/core/__tests__/catalog-revision.test.ts +89 -0
- package/src/core/__tests__/damaged-document.tools.test.ts +374 -0
- package/src/core/__tests__/gated-boot.test.ts +8 -1
- package/src/core/__tests__/lifecycle.test.ts +46 -13
- package/src/core/__tests__/public-config.test.ts +5 -0
- package/src/core/catalog-revision.ts +24 -2
- package/src/core/core-ports.ts +42 -0
- package/src/core/create-core-server.ts +45 -3
- package/src/core/create-core-services.ts +81 -17
- package/src/core/lifecycle.ts +36 -2
- package/src/core/public-config.ts +10 -0
- package/src/index.ts +1 -1
- package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +12 -0
- package/src/modules/access/__tests__/access-control.colliding-name-cases.test.ts +113 -0
- package/src/modules/access/__tests__/access-control.frontmatter-head.test.ts +117 -0
- package/src/modules/access/__tests__/access-control.group-named-admin.test.ts +122 -0
- package/src/modules/access/__tests__/access-control.preview-relocation.test.ts +50 -0
- package/src/modules/access/__tests__/access-declarations.test.ts +19 -0
- package/src/modules/access/__tests__/access-groups.test.ts +55 -22
- package/src/modules/access/__tests__/access-mutation.service.test.ts +85 -59
- package/src/modules/access/__tests__/access-requests.routes.test.ts +29 -15
- package/src/modules/access/__tests__/access-restrict-here.test.ts +7 -5
- package/src/modules/access/__tests__/access.routes.admins.test.ts +1 -0
- package/src/modules/access/__tests__/access.routes.batch.test.ts +2 -0
- package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +2 -0
- package/src/modules/access/__tests__/access.routes.group-grant.test.ts +50 -14
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +2 -1
- package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +1 -0
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +2 -0
- package/src/modules/access/__tests__/access.routes.revoke.test.ts +18 -13
- package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +2 -0
- package/src/modules/access/__tests__/grant-sources.test.ts +20 -15
- package/src/modules/access/__tests__/groups-admin.routes.test.ts +61 -0
- package/src/modules/access/__tests__/groups-admin.service.test.ts +211 -18
- package/src/modules/access/__tests__/reference-scan.test.ts +366 -14
- package/src/modules/access/__tests__/roles-admin.security.test.ts +1 -1
- package/src/modules/access/__tests__/roles-admin.service.test.ts +43 -22
- package/src/modules/access/__tests__/roles-capabilities.test.ts +6 -2
- package/src/modules/access/__tests__/roles.routes.test.ts +1 -1
- package/src/modules/access/access-control.interface.ts +17 -10
- package/src/modules/access/access-control.service.ts +161 -76
- package/src/modules/access/access-declarations.ts +1 -1
- package/src/modules/access/access-mutation.service.ts +58 -57
- package/src/modules/access/access-requests.contract.ts +1 -1
- package/src/modules/access/access-requests.routes.ts +10 -15
- package/src/modules/access/access-requests.service.ts +29 -71
- package/src/modules/access/access-view.ts +13 -11
- package/src/modules/access/access.routes.ts +51 -43
- package/src/modules/access/admin-locked-commit.ts +3 -2
- package/src/modules/access/capability-registry.ts +1 -1
- package/src/modules/access/change-read-gate.ts +3 -5
- package/src/modules/access/creator-access.ts +3 -5
- package/src/modules/access/directory-sync-bot.ts +2 -2
- package/src/modules/access/groups-admin.routes.ts +7 -5
- package/src/modules/access/groups-admin.service.ts +116 -47
- package/src/modules/access/groups-edit.ts +3 -3
- package/src/modules/access/index.ts +17 -0
- package/src/modules/access/reference-scan.ts +320 -47
- package/src/modules/access/roles-admin.service.ts +45 -31
- package/src/modules/access/roles-edit.ts +1 -1
- package/src/modules/access/synced-groups-committer.ts +4 -4
- package/src/modules/access/synced-groups-writer.ts +3 -3
- package/src/modules/access/user-access-removal.service.ts +3 -6
- package/src/modules/access-model/__tests__/access-grammar.test.ts +38 -1
- package/src/modules/access-model/__tests__/access-splice.test.ts +50 -8
- package/src/modules/access-model/access-grammar.ts +65 -20
- package/src/modules/access-model/access-splice.ts +31 -23
- package/src/modules/access-model/group-files.ts +5 -0
- package/src/modules/access-model/index.ts +21 -5
- package/src/modules/access-model/roles-yaml-guard.ts +1 -1
- package/src/modules/admin/admin-access.routes.ts +1 -1
- package/src/modules/admin/admin-access.service.ts +2 -2
- package/src/modules/admin/index.ts +7 -0
- package/src/modules/agent-guide/__tests__/agent-guide.test.ts +36 -0
- package/src/modules/agent-guide/agent-guide.tools.ts +17 -8
- package/src/modules/agent-guide/agent-guide.ts +1 -1
- package/src/modules/agent-guide/index.ts +1 -1
- package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +1 -0
- package/src/modules/agent-instructions/compose.ts +3 -1
- package/src/modules/agent-instructions/read-preamble.ts +1 -1
- package/src/modules/agent-instructions/shared-file-rules.ts +17 -1
- package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +421 -0
- package/src/modules/agent-scope/__tests__/connection-scope.test.ts +46 -0
- package/src/modules/agent-scope/__tests__/in-memory-kb.ts +148 -0
- package/src/modules/agent-scope/agent-scope.contract.ts +83 -0
- package/src/modules/agent-scope/connection-scope.ts +199 -0
- package/src/modules/agent-scope/index.ts +15 -0
- package/src/modules/audit/agent-audit.service.ts +5 -3
- package/src/modules/audit/agent-connection.routes.ts +1 -1
- package/src/modules/audit/agent-rest-audit.middleware.ts +1 -1
- package/src/modules/audit/audit.contract.ts +6 -0
- package/src/modules/audit/audit.routes.ts +4 -4
- package/src/modules/auth/__tests__/auth.middleware.test.ts +30 -2
- package/src/modules/auth/__tests__/auth.routes.test.ts +71 -5
- package/src/modules/auth/__tests__/auth.service.test.ts +90 -9
- package/src/modules/auth/__tests__/password-change-sessions.pg.test.ts +269 -0
- package/src/modules/auth/account-admission.ts +19 -0
- package/src/modules/auth/account-erasure.service.ts +4 -9
- package/src/modules/auth/account-switch-lock.ts +2 -2
- package/src/modules/auth/account.routes.ts +3 -3
- package/src/modules/auth/auth.middleware.ts +45 -4
- package/src/modules/auth/auth.routes.ts +46 -29
- package/src/modules/auth/auth.service.ts +139 -38
- package/src/modules/auth/index.ts +5 -0
- package/src/modules/auth/oidc-auth-provider.ts +3 -10
- package/src/modules/code-mode/code-mode.tool.ts +1 -1
- package/src/modules/connection-probe/connection-probe.service.ts +3 -6
- package/src/modules/database/__tests__/legacy-change-request-body.test.ts +118 -0
- package/src/modules/database/__tests__/legacy-request-bodies.pg.test.ts +258 -0
- package/src/modules/database/__tests__/pii-backfill.pg.test.ts +15 -18
- package/src/modules/database/__tests__/session-version-migration.pg.test.ts +133 -0
- package/src/modules/database/core-schema.ts +76 -36
- package/src/modules/database/index.ts +9 -0
- package/src/modules/database/migrate.ts +79 -3
- package/src/modules/declared-variables/__tests__/declared-variables.route.test.ts +44 -1
- package/src/modules/declared-variables/declared-variables.routes.ts +14 -3
- package/src/modules/diff/diff.routes.ts +5 -5
- package/src/modules/diff/diff.service.ts +2 -2
- package/src/modules/diff/index.ts +6 -0
- package/src/modules/embed/__tests__/embed.tools.test.ts +12 -0
- package/src/modules/embed/account-link.service.ts +2 -2
- package/src/modules/embed/embed.routes.ts +2 -2
- package/src/modules/embed/embed.service.ts +1 -1
- package/src/modules/embed/embed.tools.ts +11 -9
- package/src/modules/github-app/github-app.connection.ts +1 -1
- package/src/modules/github-app/github-app.routes.ts +3 -3
- package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +25 -0
- package/src/modules/kb-fs/__tests__/repo-path.test.ts +53 -8
- package/src/modules/kb-fs/index.ts +13 -0
- package/src/modules/kb-fs/locking-filesystem.ts +8 -2
- package/src/modules/kb-fs/repo-path.ts +33 -7
- package/src/modules/kb-fs/tmp-ref.ts +81 -0
- package/src/modules/kb-sync/kb-sync.routes.ts +3 -3
- package/src/modules/kb-sync/kb-sync.service.ts +1 -1
- package/src/modules/kb-sync/sync-auth.ts +1 -1
- package/src/modules/kb-sync/sync-payload.ts +1 -1
- package/src/modules/marketplace/git-http.routes.ts +1 -1
- package/src/modules/marketplace/github-facade/github-facade-admin.routes.ts +1 -1
- package/src/modules/marketplace/github-facade/github-facade-codes.store.ts +2 -2
- package/src/modules/marketplace/github-facade/github-facade-credentials.service.ts +2 -2
- package/src/modules/marketplace/github-facade/github-facade.routes.ts +2 -2
- package/src/modules/marketplace/github-facade/github-facade.service.ts +2 -2
- package/src/modules/marketplace/marketplace-repo.service.ts +2 -2
- package/src/modules/mcp/__tests__/connect-as.pg.test.ts +137 -0
- package/src/modules/mcp/__tests__/mcp-auth.middleware.test.ts +29 -5
- package/src/modules/mcp/__tests__/mcp-routes-harness.ts +8 -0
- package/src/modules/mcp/__tests__/mcp.connect-as.test.ts +195 -0
- package/src/modules/mcp/__tests__/mcp.routes.connect-as.test.ts +192 -0
- package/src/modules/mcp/__tests__/oauth-consent.connect-as.test.ts +146 -0
- package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +213 -0
- package/src/modules/mcp/index.ts +7 -0
- package/src/modules/mcp/mcp-auth.middleware.ts +25 -9
- package/src/modules/mcp/mcp.routes.ts +42 -8
- package/src/modules/mcp/mcp.service.ts +136 -29
- package/src/modules/mcp/oauth/bevel-oauth-provider.ts +48 -10
- package/src/modules/mcp/oauth/oauth-consent.routes.ts +42 -2
- package/src/modules/onboarding/onboarding.routes.ts +1 -1
- package/src/modules/onboarding/starter-pack.service.ts +5 -6
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +2 -1
- package/src/modules/plugins/__tests__/plugin-links.service.test.ts +2 -1
- package/src/modules/plugins/__tests__/plugins.tools.test.ts +38 -2
- package/src/modules/plugins/compile/compile-marketplace.ts +2 -2
- package/src/modules/plugins/compile/marketplace-compiler.service.ts +3 -3
- package/src/modules/plugins/discovery/bundle-dialect/registry.ts +1 -1
- package/src/modules/plugins/index.ts +3 -1
- package/src/modules/plugins/join-proposals.ts +2 -2
- package/src/modules/plugins/join-request-jobs.service.ts +3 -3
- package/src/modules/plugins/join-request-records.store.ts +2 -2
- package/src/modules/plugins/join-requests.service.ts +4 -4
- package/src/modules/plugins/plugin-links.service.ts +10 -11
- package/src/modules/plugins/plugin-links.ts +23 -6
- package/src/modules/plugins/plugin-provision.service.ts +4 -5
- package/src/modules/plugins/plugin-rename.service.ts +3 -3
- package/src/modules/plugins/plugins.contract.ts +1 -1
- package/src/modules/plugins/plugins.routes.ts +39 -8
- package/src/modules/plugins/plugins.service.ts +5 -5
- package/src/modules/plugins/plugins.tools.ts +4 -4
- package/src/modules/plugins/teams.routes.ts +3 -3
- package/src/modules/secrets-vault/__tests__/connect-pending.route.test.ts +113 -0
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +2 -2
- package/src/modules/secrets-vault/index.ts +2 -0
- package/src/modules/secrets-vault/secrets-vault.routes.ts +27 -7
- package/src/modules/settings/__tests__/deployment-settings.service.test.ts +88 -1
- package/src/modules/settings/connection-check.ts +1 -1
- package/src/modules/settings/deployment-settings.service.ts +44 -4
- package/src/modules/settings/git-root-folders.ts +1 -1
- package/src/modules/settings/index.ts +12 -0
- package/src/modules/settings/setup.routes.ts +5 -4
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +2 -2
- package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +6 -3
- package/src/modules/skills/__tests__/skills.service.test.ts +34 -0
- package/src/modules/skills/allowed-tools-check.ts +2 -6
- package/src/modules/skills/index.ts +9 -2
- package/src/modules/skills/pending-skills.service.ts +3 -4
- package/src/modules/skills/skill-access-requests.routes.ts +10 -17
- package/src/modules/skills/skills.contract.ts +17 -0
- package/src/modules/skills/skills.routes.ts +1 -1
- package/src/modules/skills/skills.service.ts +7 -3
- package/src/modules/skills/skills.tools.ts +49 -22
- package/src/modules/tool-auth/__tests__/external-api-key.service.test.ts +4 -0
- package/src/modules/tool-auth/connection-key-rejection.ts +1 -1
- package/src/modules/tool-auth/connection-keys-admin.routes.ts +2 -2
- package/src/modules/tool-auth/external-api-key.interface.ts +11 -1
- package/src/modules/tool-auth/external-api-key.service.ts +7 -4
- package/src/modules/tool-auth/index.ts +14 -0
- package/src/modules/tool-auth/internal-token.service.ts +10 -0
- package/src/modules/tool-auth/tool-auth.middleware.ts +48 -6
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +2 -2
- package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +5 -3
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +2 -2
- package/src/modules/tool-helpers/default-branch-write.ts +1 -1
- package/src/modules/tool-helpers/index.ts +5 -1
- package/src/modules/tool-helpers/route-argument-check.ts +1 -1
- package/src/modules/tool-helpers/route-tool-schemas.ts +1 -1
- package/src/modules/tool-helpers/tool-context.ts +18 -10
- package/src/modules/tool-helpers/tool-def.ts +7 -3
- package/src/modules/tool-helpers/tool-handler.ts +36 -2
- package/src/modules/tool-helpers/tool.contract.ts +12 -2
- package/src/modules/tool-helpers/validate-token.ts +5 -4
- package/src/modules/tool-manuals/__tests__/tool-manuals.archive.route.test.ts +80 -4
- package/src/modules/tool-manuals/__tests__/tool-manuals.service.test.ts +42 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +3 -3
- package/src/modules/tool-manuals/index.ts +12 -2
- package/src/modules/tool-manuals/mcp-server-edit.service.ts +2 -2
- package/src/modules/tool-manuals/pending-tools.service.ts +2 -2
- package/src/modules/tool-manuals/tool-delete.service.ts +5 -6
- package/src/modules/tool-manuals/tool-manuals.contract.ts +18 -6
- package/src/modules/tool-manuals/tool-manuals.routes.ts +45 -8
- package/src/modules/tool-manuals/tool-manuals.service.ts +34 -18
- package/src/modules/tool-manuals/tool-manuals.tools.ts +32 -17
- package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +439 -0
- package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +2 -2
- package/src/modules/tool-registry/__tests__/tool-registry.test.ts +9 -2
- package/src/modules/tool-registry/description-length.ts +2 -2
- package/src/modules/tool-registry/index.ts +22 -0
- package/src/modules/tool-registry/manual.routes.ts +38 -11
- package/src/modules/tool-registry/read-only-hints.contract.ts +54 -0
- package/src/modules/tool-registry/read-only-hints.ts +225 -0
- package/src/modules/tool-registry/tool.contract.ts +18 -0
- package/src/modules/update-check/update-check.routes.ts +2 -2
- package/src/modules/workflow/__tests__/event-bus.test.ts +14 -2
- package/src/modules/workflow/__tests__/events-delivery.test.ts +778 -0
- package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +85 -22
- package/src/modules/workflow/__tests__/workflow.service.sync.test.ts +1 -1
- package/src/modules/workflow/__tests__/workflow.service.update-change-request.pg.test.ts +120 -0
- package/src/modules/workflow/__tests__/workflow.service.update-change-request.test.ts +346 -0
- package/src/modules/workflow/agent-tools/__tests__/change-request-read-shape.test.ts +32 -209
- package/src/modules/workflow/agent-tools/__tests__/change-request-read.tools.test.ts +16 -245
- package/src/modules/workflow/agent-tools/__tests__/update-change-request.parity.test.ts +306 -0
- package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +87 -60
- package/src/modules/workflow/agent-tools/change-request-read-shape.ts +18 -153
- package/src/modules/workflow/agent-tools/change-request-read.tools.ts +24 -96
- package/src/modules/workflow/agent-tools/change-request-summary.ts +16 -2
- package/src/modules/workflow/agent-tools/workflow.tools.ts +63 -84
- package/src/modules/workflow/change-request-hooks.ts +1 -1
- package/src/modules/workflow/event-bus.ts +3 -1
- package/src/modules/workflow/events-delivery.ts +278 -0
- package/src/modules/workflow/events.routes.ts +30 -9
- package/src/modules/workflow/file-lock.service.ts +2 -2
- package/src/modules/workflow/git/__tests__/git.service.list-branches.test.ts +130 -3
- package/src/modules/workflow/git/__tests__/pull-request.service.getPrDetail.test.ts +24 -9
- package/src/modules/workflow/git/git.service.ts +34 -56
- package/src/modules/workflow/git/node-git-runner.ts +1 -1
- package/src/modules/workflow/git/pull-request.service.ts +34 -29
- package/src/modules/workflow/index.ts +15 -2
- package/src/modules/workflow/pending-commits.service.ts +2 -2
- package/src/modules/workflow/read-on-branch.ts +1 -1
- package/src/modules/workflow/recovery-bot.ts +2 -2
- package/src/modules/workflow/review-workflow/approval-lock.ts +1 -1
- package/src/modules/workflow/review-workflow/review-workflow.interface.ts +3 -35
- package/src/modules/workflow/review-workflow/review-workflow.service.ts +6 -165
- package/src/modules/workflow/workflow.routes.ts +46 -100
- package/src/modules/workflow/workflow.service.ts +277 -191
- package/src/modules/workspace/__tests__/agent-downloads.test.ts +2 -1
- package/src/modules/workspace/__tests__/agent-uploads.test.ts +87 -1
- package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +2 -1
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +2 -1
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +4 -3
- package/src/modules/workspace/__tests__/holds-nul.test.ts +66 -0
- package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +5 -4
- package/src/modules/workspace/__tests__/ripgrep-search.test.ts +570 -0
- package/src/modules/workspace/__tests__/ripgrep-version.test.ts +29 -0
- package/src/modules/workspace/__tests__/worker-pool.test.ts +118 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +3 -2
- package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +928 -0
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +17 -37
- package/src/modules/workspace/__tests__/workspace.service.ensure-remotes-fetched.test.ts +30 -0
- package/src/modules/workspace/__tests__/workspace.service.read-filter.test.ts +20 -8
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +4 -3
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +24 -11
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +423 -117
- package/src/modules/workspace/agent-access.gate.ts +3 -3
- package/src/modules/workspace/agent-download.builder.ts +1 -1
- package/src/modules/workspace/agent-upload.routes.ts +19 -0
- package/src/modules/workspace/agent-upload.store.ts +18 -0
- package/src/modules/workspace/file-readers/README.md +9 -0
- package/src/modules/workspace/file-readers/__tests__/doc-extract.service.test.ts +175 -0
- package/src/modules/workspace/file-readers/__tests__/doc-extract.test.ts +21 -16
- package/src/modules/workspace/file-readers/__tests__/extract-in-worker.test.ts +229 -0
- package/src/modules/workspace/file-readers/__tests__/file-reader.registry.test.ts +2 -1
- package/src/modules/workspace/file-readers/__tests__/fixtures/damaged-pdf.ts +34 -0
- package/src/modules/workspace/file-readers/__tests__/fixtures/misbehaving-extract.worker.ts +57 -0
- package/src/modules/workspace/file-readers/__tests__/fixtures/pdf-in-trouble.worker.ts +20 -0
- package/src/modules/workspace/file-readers/__tests__/fixtures/unloadable-extract.worker.ts +2 -0
- package/src/modules/workspace/file-readers/doc-extract.service.ts +144 -36
- package/src/modules/workspace/file-readers/doc-extract.types.ts +13 -3
- package/src/modules/workspace/file-readers/document-extractor.contract.ts +42 -0
- package/src/modules/workspace/file-readers/document-extractors.ts +28 -0
- package/src/modules/workspace/file-readers/document-formats.ts +13 -0
- package/src/modules/workspace/file-readers/document-reader.ts +40 -36
- package/src/modules/workspace/file-readers/extract-in-worker.ts +183 -0
- package/src/modules/workspace/file-readers/extract-pdf.ts +23 -4
- package/src/modules/workspace/file-readers/extract.worker.ts +5 -0
- package/src/modules/workspace/file-readers/extraction-cache.ts +33 -12
- package/src/modules/workspace/file-readers/extraction-worker.ts +86 -0
- package/src/modules/workspace/file-readers/file-reader.registry.ts +6 -20
- package/src/modules/workspace/file-readers/file-reader.ts +14 -4
- package/src/modules/workspace/first-run.ts +1 -1
- package/src/modules/workspace/git-internals.middleware.ts +1 -1
- package/src/modules/workspace/index.ts +37 -0
- package/src/modules/workspace/kb-repository.ts +3 -2
- package/src/modules/workspace/not-found.ts +1 -1
- package/src/modules/workspace/nul-scan.ts +50 -0
- package/src/modules/workspace/pattern-matcher.contract.ts +124 -33
- package/src/modules/workspace/ripgrep-search.ts +715 -0
- package/src/modules/workspace/ripgrep-version.ts +35 -0
- package/src/modules/workspace/routine-write-policy.ts +1 -1
- package/src/modules/workspace/startup/__tests__/beside-checkout.test.ts +11 -0
- package/src/modules/workspace/startup/beside-checkout.ts +13 -5
- package/src/modules/workspace/startup/kb-git.ts +1 -1
- package/src/modules/workspace/startup/kb-startup-runner.ts +1 -2
- package/src/modules/workspace/startup/steps/groups-to-plugins.step.ts +3 -3
- package/src/modules/workspace/startup/steps/personal-spaces.step.ts +2 -2
- package/src/modules/workspace/startup/steps/plugin-layout.ts +1 -1
- package/src/modules/workspace/startup/steps/roles-yaml.step.ts +1 -1
- package/src/modules/workspace/startup/steps/seed-tree.ts +2 -2
- package/src/modules/workspace/startup/steps/template-files.step.ts +2 -2
- package/src/modules/workspace/startup/steps/template-source.ts +2 -2
- package/src/modules/workspace/worker-pool.ts +192 -0
- package/src/modules/workspace/workspace-tmp.ts +457 -0
- package/src/modules/workspace/workspace.routes.ts +15 -39
- package/src/modules/workspace/workspace.service.ts +96 -22
- package/src/modules/workspace/workspace.tools.ts +550 -186
- package/src/modules/workspace/write-denial.ts +4 -5
- package/src/modules/write-access/index.ts +7 -0
- package/src/shared/__tests__/module-boundaries.lint.test.ts +301 -0
- package/src/shared/path-order.ts +37 -8
- package/starter-packs/engineering/Plugins/engineering-starter/access.md +1 -1
- package/starter-packs/general/Plugins/general-starter/access.md +1 -1
- package/starter-packs/operations/Plugins/operations-starter/access.md +1 -1
- package/starter-packs/sales/Plugins/sales-starter/access.md +1 -1
- package/starter-packs/support/Plugins/support-starter/access.md +1 -1
- package/dist/modules/workspace/bounded-matcher.d.ts +0 -79
- package/dist/modules/workspace/bounded-matcher.d.ts.map +0 -1
- package/dist/modules/workspace/bounded-matcher.js +0 -261
- package/dist/modules/workspace/bounded-matcher.js.map +0 -1
- package/src/modules/workflow/__tests__/format-affected-owners.test.ts +0 -85
- package/src/modules/workspace/__tests__/bounded-matcher.test.ts +0 -213
- package/src/modules/workspace/bounded-matcher.ts +0 -328
|
@@ -37,6 +37,7 @@ import {
|
|
|
37
37
|
installSessionRecovery,
|
|
38
38
|
flattenManualTool,
|
|
39
39
|
toListedTool,
|
|
40
|
+
withReadOnlyOverride,
|
|
40
41
|
toolError,
|
|
41
42
|
retiredToolMessage,
|
|
42
43
|
needsAuthorizationResult,
|
|
@@ -49,18 +50,13 @@ import {
|
|
|
49
50
|
type LoadedSkill,
|
|
50
51
|
} from '@bevel-software/platform-mcp-core';
|
|
51
52
|
import type { KbLayout } from '@bevel-software/platform-shared';
|
|
52
|
-
import { bevelSecretsLoaderConfig } from '../secrets-vault/index.js';
|
|
53
|
-
import {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
type ISecretsVaultService,
|
|
57
|
-
} from '../secrets-vault/secrets-vault.contract.js';
|
|
58
|
-
import { EXTERNAL_KB_MANUAL_NAME } from '../tool-manuals/tool-manuals.contract.js';
|
|
59
|
-
import type { IToolManualService } from '../tool-manuals/tool-manuals.contract.js';
|
|
60
|
-
import type { SpillStore } from '../workspace/spill-store.js';
|
|
53
|
+
import { bevelSecretsLoaderConfig, type ForcedRefreshOutcome, type ISecretsVaultService, scopesCovered } from '../secrets-vault/index.js';
|
|
54
|
+
import { EXTERNAL_KB_MANUAL_NAME } from '../tool-manuals/index.js';
|
|
55
|
+
import type { IToolManualService } from '../tool-manuals/index.js';
|
|
56
|
+
import type { SpillStore } from '../workspace/index.js';
|
|
61
57
|
import type { HiddenToolSource } from '../../shared/hidden-tools.js';
|
|
62
58
|
import { seedBevelHostedManualVars } from '../../shared/utcp-namespace.js';
|
|
63
|
-
import type { InternalTokenService } from '../tool-auth/
|
|
59
|
+
import type { InternalTokenService } from '../tool-auth/index.js';
|
|
64
60
|
import { RequestAudit, type IAgentEventRecorder, type RecordedPrincipal } from '../audit/index.js';
|
|
65
61
|
import { ManualFailureMemo } from './manual-failure-memo.js';
|
|
66
62
|
import { DownstreamPool, POOL_KEY_SEPARATOR, type DownstreamPoolOptions, type Lease } from './downstream-pool.js';
|
|
@@ -78,7 +74,17 @@ import {
|
|
|
78
74
|
type AgentPreambleReader,
|
|
79
75
|
type ComposedAgentInstructions,
|
|
80
76
|
} from '../agent-instructions/index.js';
|
|
81
|
-
import { guideFirstDescription } from '../tool-registry/
|
|
77
|
+
import { guideFirstDescription } from '../tool-registry/index.js';
|
|
78
|
+
import {
|
|
79
|
+
CONNECTION_META_KEY,
|
|
80
|
+
connectionRefusal,
|
|
81
|
+
connectionWireOf,
|
|
82
|
+
describeConnection,
|
|
83
|
+
type ConnectionScopeWire,
|
|
84
|
+
} from '@bevel-software/platform-mcp-core';
|
|
85
|
+
|
|
86
|
+
// Still offered from here, as this module's tests and callers learnt it.
|
|
87
|
+
export { CONNECTION_META_KEY };
|
|
82
88
|
|
|
83
89
|
/**
|
|
84
90
|
* Configuration for the loopback proxy. `loopbackBaseUrl` is the backend's own
|
|
@@ -123,6 +129,16 @@ export interface McpProxyOptions {
|
|
|
123
129
|
* knowledge base's.
|
|
124
130
|
*/
|
|
125
131
|
secretsScope?: string;
|
|
132
|
+
/**
|
|
133
|
+
* The deployment's read-only overrides, by tool name, read per listing so an
|
|
134
|
+
* admin's change on the Tools page is in the next `tools/list`. Joined on
|
|
135
|
+
* here, at listing time, for the platform tools and the code-mode meta-tools
|
|
136
|
+
* alike: the platform tools' BUILT-IN hint arrives as the manual's
|
|
137
|
+
* `read-only` tag, in a surface that is cached across requests, so an
|
|
138
|
+
* override baked into it would outlive the toggle that set it. Absent, every
|
|
139
|
+
* tool lists its built-in hint.
|
|
140
|
+
*/
|
|
141
|
+
readOnlyOverrides?: () => Promise<Readonly<Record<string, boolean>>>;
|
|
126
142
|
}
|
|
127
143
|
|
|
128
144
|
/** Who a request is from — everything the proxy needs, resolved from that request's own bearer. */
|
|
@@ -136,6 +152,14 @@ export interface McpCaller {
|
|
|
136
152
|
* attributed in the Audit log; a request with neither records nothing.
|
|
137
153
|
*/
|
|
138
154
|
connectionId?: string | null;
|
|
155
|
+
/**
|
|
156
|
+
* The agent configuration the caller's credential connects as (a connection
|
|
157
|
+
* key's, or an agent connection's), or null for Everything. It rides the
|
|
158
|
+
* request's loopback identity, so every agent surface behind the loopback
|
|
159
|
+
* narrows to that agent's scope (`modules/agent-scope`); here it only keys
|
|
160
|
+
* the surface and words the handshake.
|
|
161
|
+
*/
|
|
162
|
+
agentPath?: string | null;
|
|
139
163
|
/** The raw bearer the request carried. */
|
|
140
164
|
bearer: string;
|
|
141
165
|
/**
|
|
@@ -216,6 +240,24 @@ interface RequestSurface {
|
|
|
216
240
|
* build, at the latest after an hour unused.
|
|
217
241
|
*/
|
|
218
242
|
degraded: boolean;
|
|
243
|
+
/**
|
|
244
|
+
* The agent the catalog was narrowed to, as `all-tools` reported it —
|
|
245
|
+
* absent for Everything. A call to a tool not on a narrowed surface is
|
|
246
|
+
* refused by name and agent rather than as unknown, and a connection whose
|
|
247
|
+
* agent configuration cannot be used is served nothing, with the sentence that says
|
|
248
|
+
* why.
|
|
249
|
+
*/
|
|
250
|
+
connection?: ConnectionScopeWire;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* The `connection` a loopback answer (`all-tools`, `catalog-revision`)
|
|
255
|
+
* carries, as a field to spread: validated at the boundary by the MCP
|
|
256
|
+
* core's reader (HTTP loses the type), and absent for Everything.
|
|
257
|
+
*/
|
|
258
|
+
function connectionOf(body: unknown): { connection?: ConnectionScopeWire } {
|
|
259
|
+
const connection = connectionWireOf(body);
|
|
260
|
+
return connection ? { connection } : {};
|
|
219
261
|
}
|
|
220
262
|
|
|
221
263
|
/**
|
|
@@ -484,13 +526,26 @@ export class McpService {
|
|
|
484
526
|
// verifier resolves it to `source: 'external'`: the caller IS an external
|
|
485
527
|
// agent and must be treated like one (admitted to `start_session`/`ask`,
|
|
486
528
|
// refused from internal-only tools).
|
|
529
|
+
// The agent the connection was made as rides that token too, so the
|
|
530
|
+
// surfaces behind the loopback narrow to its scope; a connection key
|
|
531
|
+
// carries its own.
|
|
532
|
+
const agentPath = caller.agentPath || null;
|
|
487
533
|
const loopbackBearer =
|
|
488
534
|
tokenId == null && this.internalTokens
|
|
489
|
-
? this.internalTokens.mint(
|
|
535
|
+
? this.internalTokens.mint(
|
|
536
|
+
{ userId, externalProxy: true, ...(agentPath ? { agentPath } : {}) },
|
|
537
|
+
MCP_LOOPBACK_TOKEN_TTL_MS,
|
|
538
|
+
)
|
|
490
539
|
: bearer;
|
|
491
540
|
|
|
492
541
|
let instructions: Promise<ComposedAgentInstructions> | undefined;
|
|
493
542
|
const agentInstructions = () => (instructions ??= this.composeAgentInstructions());
|
|
543
|
+
// What a narrowed connection is told about itself at the handshake: the
|
|
544
|
+
// agent it is connected as, or why it loads nothing. Read off the catalog
|
|
545
|
+
// revision (cheap), not the surface (a full discovery). Everything is
|
|
546
|
+
// told nothing new, so its handshake is exactly what it was.
|
|
547
|
+
const connectionLine = async (): Promise<string | null> =>
|
|
548
|
+
agentPath ? describeConnection((await this.fetchCatalogRevision(loopbackBearer)).connection) : null;
|
|
494
549
|
// The Audit log's view of this request — only when the request can be
|
|
495
550
|
// attributed to a key, an agent connection or a page. The catalog names
|
|
496
551
|
// it classifies pooled tools by are the surface's, which is looked up
|
|
@@ -528,6 +583,10 @@ export class McpService {
|
|
|
528
583
|
}));
|
|
529
584
|
|
|
530
585
|
const initializing = (Array.isArray(messages) ? messages : [messages]).some((m) => isInitializeRequest(m));
|
|
586
|
+
const handshakeInstructions = async (): Promise<string> => {
|
|
587
|
+
const [{ instructions: text }, line] = await Promise.all([agentInstructions(), connectionLine()]);
|
|
588
|
+
return line ? `${text}\n\n${line}` : text;
|
|
589
|
+
};
|
|
531
590
|
// The deployment's MCP Apps, read once per request. Declaring the
|
|
532
591
|
// `resources` capability is what permits the two handlers below, and a
|
|
533
592
|
// deployment with no view must not declare it — a client would then list
|
|
@@ -548,12 +607,26 @@ export class McpService {
|
|
|
548
607
|
},
|
|
549
608
|
// `instructions` rides the initialize result; clients that honour it
|
|
550
609
|
// place the text in the model's system prompt without the model acting.
|
|
551
|
-
...(initializing ? { instructions:
|
|
610
|
+
...(initializing ? { instructions: await handshakeInstructions() } : {}),
|
|
552
611
|
},
|
|
553
612
|
);
|
|
554
613
|
|
|
555
614
|
server.setRequestHandler(ListToolsRequestSchema, async () => inRequest(async () => {
|
|
556
|
-
const [{ tools, catalogNames }, { toolPrefix }] = await Promise.all([
|
|
615
|
+
const [{ tools, catalogNames, connection }, { toolPrefix }, readOnly] = await Promise.all([
|
|
616
|
+
requestSurface(),
|
|
617
|
+
agentInstructions(),
|
|
618
|
+
// A failed read lists the built-in hints rather than no listing at all.
|
|
619
|
+
this.opts.readOnlyOverrides?.().catch((err: unknown) => {
|
|
620
|
+
log.warn('tools/list: could not read the read-only overrides; listing built-in hints.', { err });
|
|
621
|
+
return undefined;
|
|
622
|
+
}),
|
|
623
|
+
]);
|
|
624
|
+
// A connection whose agent configuration cannot be used is served NOTHING — not
|
|
625
|
+
// Everything — and the one sentence saying why rides the listing's
|
|
626
|
+
// `_meta` (the handshake carries it too).
|
|
627
|
+
if (connection?.unavailable) {
|
|
628
|
+
return { tools: [], _meta: { [CONNECTION_META_KEY]: connection.unavailable } };
|
|
629
|
+
}
|
|
557
630
|
// A discovered tool whose name collides with a meta-tool would be
|
|
558
631
|
// listed but never callable (the dispatcher routes the name to the
|
|
559
632
|
// meta-tool first), so drop it from the listing entirely.
|
|
@@ -590,7 +663,9 @@ export class McpService {
|
|
|
590
663
|
// place for it), so it is joined on here — the one point where a
|
|
591
664
|
// discovered tool becomes a listing entry.
|
|
592
665
|
const ui = apps && Object.hasOwn(apps.tools, t.mcpName) ? apps.tools[t.mcpName] : undefined;
|
|
593
|
-
|
|
666
|
+
// An admin's override of a platform tool's hint, read for THIS listing.
|
|
667
|
+
const hinted = withReadOnlyOverride(t, readOnly);
|
|
668
|
+
const entry = toListedTool(ui ? { ...hinted, ui } : hinted); // logs its own reason on a name/schema drop
|
|
594
669
|
if (!entry) {
|
|
595
670
|
dropped.push(t.mcpName);
|
|
596
671
|
continue;
|
|
@@ -641,6 +716,7 @@ export class McpService {
|
|
|
641
716
|
// built here, so here it is.
|
|
642
717
|
const metaTools = codeModeMetaTools(EXTERNAL_KB_MANUAL_NAME, examplePool, {
|
|
643
718
|
sharedRulesPointer: '',
|
|
719
|
+
...(readOnly ? { readOnly } : {}),
|
|
644
720
|
}).map((tool) => ({ ...tool, description: guideFirstDescription(tool.description) }));
|
|
645
721
|
// Log only when a tool was dropped (name/schema/duplicate) — that's the
|
|
646
722
|
// anomaly worth surfacing, since a downstream client would otherwise hide
|
|
@@ -677,7 +753,10 @@ export class McpService {
|
|
|
677
753
|
}
|
|
678
754
|
|
|
679
755
|
server.setRequestHandler(CallToolRequestSchema, async (request, extra) => inRequest(async () => {
|
|
680
|
-
const { client: shared, tools, unavailable, catalogNames, hidden: hiddenTools } = await requestSurface();
|
|
756
|
+
const { client: shared, tools, unavailable, catalogNames, hidden: hiddenTools, connection } = await requestSurface();
|
|
757
|
+
// Nothing is callable on a connection that loads nothing, meta-tools
|
|
758
|
+
// included: every call is answered with the reason.
|
|
759
|
+
if (connection?.unavailable) return toolError(connection.unavailable);
|
|
681
760
|
// The person's client, as this request uses it: every call it makes —
|
|
682
761
|
// a chain's too, which comes back from the isolate outside any async
|
|
683
762
|
// context — carries this request's bearer and audit.
|
|
@@ -752,7 +831,16 @@ export class McpService {
|
|
|
752
831
|
if (answer && owner && audit) {
|
|
753
832
|
await audit.denied(`${owner.utcpName}.${toolName.slice(owner.utcpName.length + 1)}`, args);
|
|
754
833
|
}
|
|
755
|
-
|
|
834
|
+
// On a narrowed connection, a tool off the surface is one its agent
|
|
835
|
+
// does not load: refused by name and agent, never "unknown" — the tool
|
|
836
|
+
// may well exist, for this person, on another connection.
|
|
837
|
+
return (
|
|
838
|
+
answer ??
|
|
839
|
+
toolError(
|
|
840
|
+
retiredToolMessage(toolName) ??
|
|
841
|
+
(connection ? connectionRefusal(toolName, connection) : `Unknown tool "${toolName}".`),
|
|
842
|
+
)
|
|
843
|
+
);
|
|
756
844
|
}
|
|
757
845
|
const needsAuth = await needsAuthorization(proxied.manualName);
|
|
758
846
|
if (needsAuth) {
|
|
@@ -862,9 +950,20 @@ export class McpService {
|
|
|
862
950
|
*/
|
|
863
951
|
private async surfaceFor(caller: McpCaller, loopbackBearer: string): Promise<RequestSurface> {
|
|
864
952
|
const { userId, tokenId } = caller;
|
|
865
|
-
const revision = await this.fetchCatalogRevision(loopbackBearer);
|
|
953
|
+
const { revision } = await this.fetchCatalogRevision(loopbackBearer);
|
|
866
954
|
if (revision === null) return this.buildSurface(userId, tokenId, loopbackBearer, 'uncached');
|
|
867
|
-
|
|
955
|
+
// The agent the connection was made as is part of the key: two
|
|
956
|
+
// connections of one person made as different agents are two surfaces.
|
|
957
|
+
// (The revision already moves when the agent's FILE changes — it carries
|
|
958
|
+
// the file's digest — so an edit is a new build at the next request.)
|
|
959
|
+
// Everything adds nothing, and keeps the key it always had.
|
|
960
|
+
const key = [
|
|
961
|
+
userId,
|
|
962
|
+
tokenId != null ? 'key' : 'person',
|
|
963
|
+
caller.scope ?? 'write',
|
|
964
|
+
revision,
|
|
965
|
+
...(caller.agentPath ? [caller.agentPath] : []),
|
|
966
|
+
].join(POOL_KEY_SEPARATOR);
|
|
868
967
|
const { value } = await this.surfaces.get(
|
|
869
968
|
key,
|
|
870
969
|
() => this.buildSurface(userId, tokenId, loopbackBearer, 'miss'),
|
|
@@ -876,10 +975,13 @@ export class McpService {
|
|
|
876
975
|
/**
|
|
877
976
|
* The caller's catalog revision (`GET /api/agent/catalog-revision`, the one
|
|
878
977
|
* `hexis-mcp` polls), read with their bearer; null when it cannot be read.
|
|
978
|
+
* With it, the agent the caller's connection is narrowed to, when it is.
|
|
879
979
|
* A deployment or a test that does not serve the route answers 404, which
|
|
880
980
|
* is not worth a line in the log; anything else is.
|
|
881
981
|
*/
|
|
882
|
-
private async fetchCatalogRevision(
|
|
982
|
+
private async fetchCatalogRevision(
|
|
983
|
+
bearer: string,
|
|
984
|
+
): Promise<{ revision: string | null; connection?: ConnectionScopeWire }> {
|
|
883
985
|
try {
|
|
884
986
|
const res = await fetch(`${this.opts.loopbackBaseUrl}/api/agent/catalog-revision`, {
|
|
885
987
|
headers: { Authorization: `Bearer ${bearer}` },
|
|
@@ -887,13 +989,16 @@ export class McpService {
|
|
|
887
989
|
});
|
|
888
990
|
if (!res.ok) {
|
|
889
991
|
if (res.status !== 404) log.warn(`catalog-revision loopback failed: HTTP ${res.status}; building this request's surface uncached`);
|
|
890
|
-
return null;
|
|
992
|
+
return { revision: null };
|
|
891
993
|
}
|
|
892
|
-
const body = (await res.json()) as { revision?: unknown };
|
|
893
|
-
return
|
|
994
|
+
const body = (await res.json()) as { revision?: unknown; connection?: unknown };
|
|
995
|
+
return {
|
|
996
|
+
revision: typeof body.revision === 'string' && body.revision ? body.revision : null,
|
|
997
|
+
...connectionOf(body),
|
|
998
|
+
};
|
|
894
999
|
} catch (err) {
|
|
895
1000
|
log.warn("catalog-revision loopback threw; building this request's surface uncached:", { err });
|
|
896
|
-
return null;
|
|
1001
|
+
return { revision: null };
|
|
897
1002
|
}
|
|
898
1003
|
}
|
|
899
1004
|
|
|
@@ -918,7 +1023,7 @@ export class McpService {
|
|
|
918
1023
|
// The list of manuals this caller gets: the KB manual + each `.tool` they
|
|
919
1024
|
// can read. Fetched over loopback with the caller's key, so ACL filtering
|
|
920
1025
|
// lives ONCE behind the REST surface.
|
|
921
|
-
const manuals = await this.fetchManualTemplates(loopbackBearer);
|
|
1026
|
+
const { manuals, connection } = await this.fetchManualTemplates(loopbackBearer);
|
|
922
1027
|
const catalogMs = performance.now() - started;
|
|
923
1028
|
const client = await this.buildClient(userId, manuals);
|
|
924
1029
|
const discovered = await this.discoverTools(client, manuals, userId);
|
|
@@ -943,7 +1048,7 @@ export class McpService {
|
|
|
943
1048
|
(decision.suppressed > 0 ? ` [+${decision.suppressed} identical rebuild(s) since last line]` : ''),
|
|
944
1049
|
);
|
|
945
1050
|
}
|
|
946
|
-
return { ...discovered, client, tools };
|
|
1051
|
+
return { ...discovered, client, tools, ...(connection ? { connection } : {}) };
|
|
947
1052
|
}
|
|
948
1053
|
|
|
949
1054
|
/**
|
|
@@ -1022,11 +1127,13 @@ export class McpService {
|
|
|
1022
1127
|
* request. HTTP transport loses the `CallTemplate` type, so we re-validate the
|
|
1023
1128
|
* received JSON even though the producing endpoint already validated it.
|
|
1024
1129
|
*/
|
|
1025
|
-
private async fetchManualTemplates(
|
|
1130
|
+
private async fetchManualTemplates(
|
|
1131
|
+
bearer: string,
|
|
1132
|
+
): Promise<{ manuals: CallTemplate[]; connection?: ConnectionScopeWire }> {
|
|
1026
1133
|
// This is the REMOTE proxy, so ask for remote-capable manuals only — local-only
|
|
1027
1134
|
// `.tool`s are surfaced instead via the `list_local_tools` tool in the KB manual.
|
|
1028
1135
|
const body = (await this.loopbackJson(bearer, '/api/agent/all-tools?remote=true', 'all-tools')) as
|
|
1029
|
-
| { manuals?: unknown }
|
|
1136
|
+
| { manuals?: unknown; connection?: unknown }
|
|
1030
1137
|
| null;
|
|
1031
1138
|
const rawManuals: unknown[] = Array.isArray(body?.manuals) ? body.manuals : [];
|
|
1032
1139
|
|
|
@@ -1045,7 +1152,7 @@ export class McpService {
|
|
|
1045
1152
|
}
|
|
1046
1153
|
// Always include the KB manual, even if `all-tools` was unavailable/regressed.
|
|
1047
1154
|
if (!hasKb) out.unshift(this.kbManualTemplate());
|
|
1048
|
-
return out;
|
|
1155
|
+
return { manuals: out, ...connectionOf(body) };
|
|
1049
1156
|
}
|
|
1050
1157
|
|
|
1051
1158
|
/** The KB manual's discovery template — the fallback if `all-tools` is unavailable. */
|
|
@@ -21,8 +21,8 @@ import type {
|
|
|
21
21
|
OAuthTokens,
|
|
22
22
|
} from '@modelcontextprotocol/sdk/shared/auth.js';
|
|
23
23
|
import type { AgentConnectedEvent } from '@bevel-software/platform-shared';
|
|
24
|
-
import type { Database } from '../../database/
|
|
25
|
-
import { agentConnections, oauthAuthCodes, oauthClients, oauthTokens, users } from '../../database/
|
|
24
|
+
import type { Database } from '../../database/index.js';
|
|
25
|
+
import { agentConnections, oauthAuthCodes, oauthClients, oauthTokens, users } from '../../database/index.js';
|
|
26
26
|
import type { TokenCrypto } from '../../../shared/token-crypto.js';
|
|
27
27
|
import { signAuthRequest, type McpAuthRequestState } from './oauth-state.js';
|
|
28
28
|
|
|
@@ -199,10 +199,16 @@ export class BevelOAuthProvider implements OAuthServerProvider {
|
|
|
199
199
|
* Called by the Finish endpoint once an authenticated user completes the
|
|
200
200
|
* /connect step: bind a one-time code to (user, client, redirect_uri, PKCE
|
|
201
201
|
* challenge) and hand back the client redirect the browser should follow.
|
|
202
|
+
*
|
|
203
|
+
* @param agentPath The "Connect as" choice — an agent configuration the consent
|
|
204
|
+
* route has already checked the person may choose — or null for
|
|
205
|
+
* Everything. Carried on the code to the exchange, which records it on
|
|
206
|
+
* the agent connection.
|
|
202
207
|
*/
|
|
203
208
|
async issueAuthCode(
|
|
204
209
|
userId: string,
|
|
205
210
|
st: McpAuthRequestState,
|
|
211
|
+
agentPath: string | null = null,
|
|
206
212
|
): Promise<{ redirectTo: string }> {
|
|
207
213
|
// A state without a PKCE challenge is a Claude-link request, which the
|
|
208
214
|
// marketplace bridge finishes; it must never reach the SDK's code store.
|
|
@@ -217,6 +223,7 @@ export class BevelOAuthProvider implements OAuthServerProvider {
|
|
|
217
223
|
scope: st.sc ?? null,
|
|
218
224
|
resource: st.rs ?? null,
|
|
219
225
|
expiresAt: new Date(Date.now() + CODE_TTL_MS),
|
|
226
|
+
...(agentPath ? { agentPath } : {}),
|
|
220
227
|
});
|
|
221
228
|
const redirect = new URL(st.r);
|
|
222
229
|
redirect.searchParams.set('code', code);
|
|
@@ -269,7 +276,7 @@ export class BevelOAuthProvider implements OAuthServerProvider {
|
|
|
269
276
|
if (redirectUri && redirectUri !== row.redirectUri) {
|
|
270
277
|
throw new InvalidGrantError('redirect_uri does not match the authorization request');
|
|
271
278
|
}
|
|
272
|
-
return this.mintTokens(row.userId, row.clientId, row.scope, row.resource);
|
|
279
|
+
return this.mintTokens(row.userId, row.clientId, row.scope, row.resource, undefined, undefined, row.agentPath ?? null);
|
|
273
280
|
}
|
|
274
281
|
|
|
275
282
|
async exchangeRefreshToken(
|
|
@@ -463,6 +470,7 @@ export class BevelOAuthProvider implements OAuthServerProvider {
|
|
|
463
470
|
id: oauthTokens.id,
|
|
464
471
|
clientId: oauthTokens.clientId,
|
|
465
472
|
connectionId: oauthTokens.connectionId,
|
|
473
|
+
agentPath: agentConnections.agentPath,
|
|
466
474
|
scope: oauthTokens.scope,
|
|
467
475
|
resource: oauthTokens.resource,
|
|
468
476
|
expiresAt: oauthTokens.expiresAt,
|
|
@@ -507,6 +515,10 @@ export class BevelOAuthProvider implements OAuthServerProvider {
|
|
|
507
515
|
// Null on a token minted before connections existed; the auth
|
|
508
516
|
// middleware then binds no agent and the call goes unrecorded.
|
|
509
517
|
connectionId: row.connectionId,
|
|
518
|
+
// The connection's "Connect as" choice, read off the row on every
|
|
519
|
+
// verification, so a re-consent with another choice reaches the
|
|
520
|
+
// agent's very next request. Null is Everything.
|
|
521
|
+
agentPath: row.agentPath ?? null,
|
|
510
522
|
},
|
|
511
523
|
};
|
|
512
524
|
}
|
|
@@ -575,6 +587,9 @@ export class BevelOAuthProvider implements OAuthServerProvider {
|
|
|
575
587
|
* first mint, which finds or makes the live connection for (user, client).
|
|
576
588
|
* @param tx The transaction the insert belongs to, when the mint must land
|
|
577
589
|
* with the statement that consumed the token it replaces (a refresh).
|
|
590
|
+
* @param agentPath The consent's "Connect as" choice, recorded on the
|
|
591
|
+
* connection the pair is bound to (null: Everything). Only a first mint —
|
|
592
|
+
* a consent — passes it; a refresh leaves the connection's choice alone.
|
|
578
593
|
* The prune is then the caller's, before the transaction opens: a
|
|
579
594
|
* best-effort statement that fails inside a transaction would abort the
|
|
580
595
|
* mint it is meant to spare, and one on the pool from inside it would
|
|
@@ -587,6 +602,7 @@ export class BevelOAuthProvider implements OAuthServerProvider {
|
|
|
587
602
|
resource: string | null,
|
|
588
603
|
connectionId?: string,
|
|
589
604
|
tx?: Tx,
|
|
605
|
+
agentPath?: string | null,
|
|
590
606
|
): Promise<OAuthTokens> {
|
|
591
607
|
const accessToken = this.deps.tokenPrefix + randomBytes(TOKEN_BYTES).toString('base64url');
|
|
592
608
|
const refreshToken = this.refreshPrefix + randomBytes(TOKEN_BYTES).toString('base64url');
|
|
@@ -594,7 +610,7 @@ export class BevelOAuthProvider implements OAuthServerProvider {
|
|
|
594
610
|
// A mint of its own (a sign-in) prunes here; a refresh pruned before its
|
|
595
611
|
// transaction opened.
|
|
596
612
|
if (!tx) await this.pruneTokenTables(now);
|
|
597
|
-
const boundTo = connectionId ?? (await this.ensureConnection(userId, clientId));
|
|
613
|
+
const boundTo = connectionId ?? (await this.ensureConnection(userId, clientId, agentPath));
|
|
598
614
|
const sink: Tx | Database = tx ?? this.deps.db;
|
|
599
615
|
await sink.insert(oauthTokens).values({
|
|
600
616
|
accessTokenHash: hashToken(accessToken),
|
|
@@ -665,12 +681,23 @@ export class BevelOAuthProvider implements OAuthServerProvider {
|
|
|
665
681
|
* revoke. A read, not a write: the use is stamped separately, throttled.
|
|
666
682
|
*/
|
|
667
683
|
async isConnectionLive(connectionId: string): Promise<boolean> {
|
|
684
|
+
return (await this.liveConnectionChoice(connectionId)) !== null;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
/**
|
|
688
|
+
* A live agent connection's current "Connect as" choice (`agentPath` null
|
|
689
|
+
* = Everything), or null when the connection is gone or revoked. Read on
|
|
690
|
+
* every request through the local server's exchanged grant: that token is
|
|
691
|
+
* stateless and outlives a re-consent, so the choice it was minted with is
|
|
692
|
+
* not the one it is served as — the row's is.
|
|
693
|
+
*/
|
|
694
|
+
async liveConnectionChoice(connectionId: string): Promise<{ agentPath: string | null } | null> {
|
|
668
695
|
const [row] = await this.deps.db
|
|
669
|
-
.select({
|
|
696
|
+
.select({ agentPath: agentConnections.agentPath })
|
|
670
697
|
.from(agentConnections)
|
|
671
698
|
.where(and(eq(agentConnections.id, connectionId), isNull(agentConnections.revokedAt)))
|
|
672
699
|
.limit(1);
|
|
673
|
-
return row
|
|
700
|
+
return row ? { agentPath: row.agentPath ?? null } : null;
|
|
674
701
|
}
|
|
675
702
|
|
|
676
703
|
/**
|
|
@@ -737,8 +764,13 @@ export class BevelOAuthProvider implements OAuthServerProvider {
|
|
|
737
764
|
* the other's `ON CONFLICT DO NOTHING` returns no row, and it re-reads the
|
|
738
765
|
* winner's. The client's display name is snapshotted from its registration
|
|
739
766
|
* at that moment.
|
|
767
|
+
*
|
|
768
|
+
* `agentPath` is a consent's "Connect as" choice: written on the row made,
|
|
769
|
+
* and on the live row found — the person's latest consent is what the agent
|
|
770
|
+
* connects as. `undefined` (a refresh of a token from before connections
|
|
771
|
+
* existed) leaves a found row's choice as it is.
|
|
740
772
|
*/
|
|
741
|
-
private async ensureConnection(userId: string, clientId: string): Promise<string> {
|
|
773
|
+
private async ensureConnection(userId: string, clientId: string, agentPath?: string | null): Promise<string> {
|
|
742
774
|
const [client] = await this.deps.db
|
|
743
775
|
.select({ clientName: oauthClients.clientName })
|
|
744
776
|
.from(oauthClients)
|
|
@@ -758,11 +790,17 @@ export class BevelOAuthProvider implements OAuthServerProvider {
|
|
|
758
790
|
),
|
|
759
791
|
)
|
|
760
792
|
.limit(1);
|
|
793
|
+
const choose = async (id: string): Promise<string> => {
|
|
794
|
+
if (agentPath !== undefined) {
|
|
795
|
+
await this.deps.db.update(agentConnections).set({ agentPath }).where(eq(agentConnections.id, id));
|
|
796
|
+
}
|
|
797
|
+
return id;
|
|
798
|
+
};
|
|
761
799
|
const [existing] = await live();
|
|
762
|
-
if (existing) return existing.id;
|
|
800
|
+
if (existing) return choose(existing.id);
|
|
763
801
|
const [inserted] = await this.deps.db
|
|
764
802
|
.insert(agentConnections)
|
|
765
|
-
.values({ userId, clientId, clientName, agentKey })
|
|
803
|
+
.values({ userId, clientId, clientName, agentKey, ...(agentPath ? { agentPath } : {}) })
|
|
766
804
|
.onConflictDoNothing({
|
|
767
805
|
target: [agentConnections.userId, agentConnections.agentKey],
|
|
768
806
|
where: sql`${agentConnections.revokedAt} is null`,
|
|
@@ -771,7 +809,7 @@ export class BevelOAuthProvider implements OAuthServerProvider {
|
|
|
771
809
|
if (inserted) return inserted.id;
|
|
772
810
|
const [winner] = await live();
|
|
773
811
|
if (!winner) throw new Error('agent connection vanished between insert and re-read');
|
|
774
|
-
return winner.id;
|
|
812
|
+
return choose(winner.id);
|
|
775
813
|
}
|
|
776
814
|
}
|
|
777
815
|
|
|
@@ -4,7 +4,8 @@ import { logger } from '../../../shared/logging.js';
|
|
|
4
4
|
const log = logger('mcp-oauth');
|
|
5
5
|
import type { BevelOAuthProvider } from './bevel-oauth-provider.js';
|
|
6
6
|
import { verifyAuthRequest, type McpAuthRequestState } from './oauth-state.js';
|
|
7
|
-
import '../../
|
|
7
|
+
import type { IAgentScopeResolver } from '../../agent-scope/index.js';
|
|
8
|
+
import '../../auth/index.js'; // Express Request augmentation (req.userId / req.userEmail)
|
|
8
9
|
|
|
9
10
|
export interface OAuthConsentRoutesDeps {
|
|
10
11
|
provider: BevelOAuthProvider;
|
|
@@ -21,8 +22,17 @@ export interface OAuthConsentRoutesDeps {
|
|
|
21
22
|
clientNameFor(st: McpAuthRequestState): string;
|
|
22
23
|
completeConsent(userId: string, st: McpAuthRequestState): Promise<{ redirectTo: string }>;
|
|
23
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* The "Connect as" choices: the agent configurations the person may connect an
|
|
27
|
+
* MCP client as, offered below Everything. Absent, the consent offers
|
|
28
|
+
* Everything alone and Finish refuses any other choice.
|
|
29
|
+
*/
|
|
30
|
+
agents?: Pick<IAgentScopeResolver, 'listChoices' | 'choosable'>;
|
|
24
31
|
}
|
|
25
32
|
|
|
33
|
+
/** The refusal of a choice that is not one of the person's — one answer for missing and unreadable. */
|
|
34
|
+
export const NOT_AN_AGENT_CHOICE = 'That agent is not one you can connect as. Choose Everything or one of the agents listed.';
|
|
35
|
+
|
|
26
36
|
/**
|
|
27
37
|
* The authenticated tail of the MCP OAuth flow. `/authorize` (SDK-owned)
|
|
28
38
|
* validated the client's request, packed it into a signed state, and sent the
|
|
@@ -49,10 +59,25 @@ export function createOAuthConsentRoutes(deps: OAuthConsentRoutesDeps): express.
|
|
|
49
59
|
return;
|
|
50
60
|
}
|
|
51
61
|
const client = await deps.provider.clientsStore.getClient(st.c);
|
|
62
|
+
// Everything is not in the list: it is the choice every consent has, and
|
|
63
|
+
// the one the page selects. A failure to read the agents costs the choice
|
|
64
|
+
// of an agent, never the consent itself — but it is SAID
|
|
65
|
+
// (`agentsUnavailable`), so the page does not pass an empty list off as
|
|
66
|
+
// "you have no agents" and approve Everything unasked.
|
|
67
|
+
let agentsUnavailable = false;
|
|
68
|
+
const agents = deps.agents && req.userEmail
|
|
69
|
+
? await deps.agents.listChoices(req.userEmail).catch((err: unknown) => {
|
|
70
|
+
log.warn('listing the agents to connect as failed:', { detail: err instanceof Error ? err.message : String(err) });
|
|
71
|
+
agentsUnavailable = true;
|
|
72
|
+
return [];
|
|
73
|
+
})
|
|
74
|
+
: [];
|
|
52
75
|
res.json({
|
|
53
76
|
clientName: client?.client_name ?? null,
|
|
54
77
|
scope: st.sc ?? null,
|
|
55
78
|
resource: st.rs ?? null,
|
|
79
|
+
agents,
|
|
80
|
+
...(agentsUnavailable ? { agentsUnavailable: true } : {}),
|
|
56
81
|
});
|
|
57
82
|
});
|
|
58
83
|
|
|
@@ -65,10 +90,25 @@ export function createOAuthConsentRoutes(deps: OAuthConsentRoutesDeps): express.
|
|
|
65
90
|
const st = raw ? verifyAuthRequest(deps.stateSecret, raw) : null;
|
|
66
91
|
if (!st) return void res.status(400).json({ error: 'Invalid or expired authorization request. Restart the connection from your agent.' });
|
|
67
92
|
if (st.gh && !deps.facade) return void res.status(400).json({ error: NO_FACADE });
|
|
93
|
+
// "Connect as": absent, null or empty is Everything. Anything else must be
|
|
94
|
+
// an agent the person may choose right now — checked here, at the only
|
|
95
|
+
// place a choice is made, so the token exchange records it as given.
|
|
96
|
+
const asked: unknown = (req.body ?? {}).agentPath;
|
|
97
|
+
if (asked !== undefined && asked !== null && typeof asked !== 'string') {
|
|
98
|
+
return void res.status(400).json({ error: NOT_AN_AGENT_CHOICE });
|
|
99
|
+
}
|
|
100
|
+
const choosing = typeof asked === 'string' && asked.trim() !== '';
|
|
101
|
+
// An account linked through the GitHub facade has no agent connection to
|
|
102
|
+
// record a choice on.
|
|
103
|
+
if (choosing && (st.gh || !deps.agents || !req.userEmail)) {
|
|
104
|
+
return void res.status(400).json({ error: NOT_AN_AGENT_CHOICE });
|
|
105
|
+
}
|
|
68
106
|
try {
|
|
107
|
+
const agentPath = choosing && deps.agents && req.userEmail ? await deps.agents.choosable(req.userEmail, asked as string) : null;
|
|
108
|
+
if (choosing && agentPath === null) return void res.status(400).json({ error: NOT_AN_AGENT_CHOICE });
|
|
69
109
|
const { redirectTo } = st.gh && deps.facade
|
|
70
110
|
? await deps.facade.completeConsent(userId, st)
|
|
71
|
-
: await deps.provider.issueAuthCode(userId, st);
|
|
111
|
+
: await deps.provider.issueAuthCode(userId, st, agentPath);
|
|
72
112
|
res.json({ redirectTo });
|
|
73
113
|
} catch (err) {
|
|
74
114
|
// Message only — the raw error object can carry sensitive context
|
|
@@ -3,7 +3,7 @@ import type { AuthUser } from '@bevel-software/platform-shared';
|
|
|
3
3
|
import { logger } from '../../shared/logging.js';
|
|
4
4
|
import { WorkflowDomainError } from '../../shared/domain-errors.js';
|
|
5
5
|
import type { IStarterPackService } from './onboarding.contract.js';
|
|
6
|
-
import '../auth/
|
|
6
|
+
import '../auth/index.js'; // Express Request augmentation (req.userId)
|
|
7
7
|
|
|
8
8
|
const log = logger('starter-packs');
|
|
9
9
|
|
|
@@ -64,11 +64,10 @@ import {
|
|
|
64
64
|
import { logger } from '../../shared/logging.js';
|
|
65
65
|
import { PushNeedsAgentResolutionError, WorkflowDomainError } from '../../shared/domain-errors.js';
|
|
66
66
|
import type { KbContext } from '../../shared/kb-context.js';
|
|
67
|
-
import type { IAdminAccessService } from '../admin/
|
|
68
|
-
import type { IAccessControl } from '../access/
|
|
69
|
-
import type { FileChangeNotifier } from '../kb-fs/
|
|
70
|
-
import { LockingFilesystem } from '../kb-fs/
|
|
71
|
-
import type { WorkspaceMutex } from '../kb-fs/mutex.js';
|
|
67
|
+
import type { IAdminAccessService } from '../admin/index.js';
|
|
68
|
+
import type { IAccessControl } from '../access/index.js';
|
|
69
|
+
import type { FileChangeNotifier, WorkspaceMutex } from '../kb-fs/index.js';
|
|
70
|
+
import { LockingFilesystem } from '../kb-fs/index.js';
|
|
72
71
|
import type { IFsProbe, ITreeWalker } from '../../shared/fs.contract.js';
|
|
73
72
|
import {
|
|
74
73
|
isUntouchedStarterPage,
|
|
@@ -76,7 +75,7 @@ import {
|
|
|
76
75
|
type FirstRunStarter,
|
|
77
76
|
type FirstRunStarterSource,
|
|
78
77
|
type MayRead,
|
|
79
|
-
} from '../workspace/
|
|
78
|
+
} from '../workspace/index.js';
|
|
80
79
|
import { pluginAccessMd, withCreatorGrants, type PluginSource } from '../plugins/index.js';
|
|
81
80
|
import {
|
|
82
81
|
NO_STARTER_PACK,
|
|
@@ -8,6 +8,7 @@ import { testKbContext } from '../../../__tests__/kb-context.js';
|
|
|
8
8
|
|
|
9
9
|
import type { WorkspaceService } from '../../workspace/workspace.service.js';
|
|
10
10
|
import { AccessControlService } from '../../access/access-control.service.js';
|
|
11
|
+
import { AccessMutationService } from '../../access/access-mutation.service.js';
|
|
11
12
|
import { SkillService } from '../../skills/skills.service.js';
|
|
12
13
|
import { ToolManualService } from '../../tool-manuals/tool-manuals.service.js';
|
|
13
14
|
import { workspaceIdForBranch } from '../../../shared/workspace-id.js';
|
|
@@ -103,7 +104,7 @@ describe('bundle dialect, end to end', () => {
|
|
|
103
104
|
links = new PluginLinkIndex(workspaceService, skills, access, kb, source);
|
|
104
105
|
index = new PluginIndexService(workspaceService, access, skills, tools, kb, source, Date.now, links);
|
|
105
106
|
compiler = new MarketplaceCompilerService(workspaceService, access, skills, links, kb, { name: 'acme', owner: 'Acme' }, source, disk, new NodeGitRunner());
|
|
106
|
-
linkService = new PluginLinksService(workspaceService, { runPendingCommit: async () => undefined }, access, skills, links, kb);
|
|
107
|
+
linkService = new PluginLinksService(workspaceService, { runPendingCommit: async () => undefined }, access, new AccessMutationService(workspaceService, access, kb.kbDirName), skills, links, kb);
|
|
107
108
|
});
|
|
108
109
|
afterEach(async () => {
|
|
109
110
|
await fs.rm(root, { recursive: true, force: true });
|
|
@@ -8,6 +8,7 @@ import { DEFAULT_BRANCH, withLinkedSkillRoots, type AuthUser } from '@bevel-soft
|
|
|
8
8
|
|
|
9
9
|
import type { WorkspaceService } from '../../workspace/workspace.service.js';
|
|
10
10
|
import { AccessControlService } from '../../access/access-control.service.js';
|
|
11
|
+
import { AccessMutationService } from '../../access/access-mutation.service.js';
|
|
11
12
|
import { SkillService } from '../../skills/skills.service.js';
|
|
12
13
|
import { workspaceIdForBranch } from '../../../shared/workspace-id.js';
|
|
13
14
|
import { PluginLinkIndex } from '../plugin-links.js';
|
|
@@ -98,7 +99,7 @@ describe('PluginLinksService', () => {
|
|
|
98
99
|
const kb = testKbContext({ kbDirName: KB_DIR });
|
|
99
100
|
skills = new SkillService(workspaceService, access, kb, disk);
|
|
100
101
|
index = new PluginLinkIndex(workspaceService, skills, access, kb, new KbPluginSource(disk, kb));
|
|
101
|
-
svc = new PluginLinksService(workspaceService, driver, access, skills, index, kb);
|
|
102
|
+
svc = new PluginLinksService(workspaceService, driver, access, new AccessMutationService(workspaceService, access, kb.kbDirName), skills, index, kb);
|
|
102
103
|
});
|
|
103
104
|
afterEach(() => fs.rm(root, { recursive: true, force: true }));
|
|
104
105
|
|