@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
|
@@ -8,7 +8,18 @@ import {
|
|
|
8
8
|
KbReferenceScanner,
|
|
9
9
|
findRoleRefsInText,
|
|
10
10
|
rewriteRoleTokensInText,
|
|
11
|
+
UNSHOWN_REFERENCE_REFUSAL,
|
|
12
|
+
translateRewriteWriteRefusal,
|
|
13
|
+
type PathVisibility,
|
|
11
14
|
} from '../reference-scan.js';
|
|
15
|
+
import type { ITreeWalker } from '../../../shared/fs.contract.js';
|
|
16
|
+
import { NodeFs } from '../../kb-fs/node-fs.js';
|
|
17
|
+
import { AccessDeniedError } from '../../access-model/access-errors.js';
|
|
18
|
+
|
|
19
|
+
/** A renaming person who may read every path. */
|
|
20
|
+
const ALL_VISIBLE: PathVisibility = async (paths) => new Map(paths.map((p) => [p, true]));
|
|
21
|
+
/** A renaming person who may read none of them. */
|
|
22
|
+
const NONE_VISIBLE: PathVisibility = async (paths) => new Map(paths.map((p) => [p, false]));
|
|
12
23
|
|
|
13
24
|
/**
|
|
14
25
|
* Unit tests for the shared reference scanner's parse rules (comments,
|
|
@@ -158,6 +169,31 @@ async function write(repo: string, rel: string, contents: string): Promise<void>
|
|
|
158
169
|
await fs.writeFile(abs, contents);
|
|
159
170
|
}
|
|
160
171
|
|
|
172
|
+
describe('translateRewriteWriteRefusal — the lock scope still sees what a failed restore left', () => {
|
|
173
|
+
function refusal(unrestored?: Set<string>): AccessDeniedError {
|
|
174
|
+
const err = new AccessDeniedError({ path: 'Hidden/secret.md', eligibleRoles: [], eligibleUsers: [] });
|
|
175
|
+
if (unrestored) (err as { unrestoredPaths?: Set<string> }).unrestoredPaths = unrestored;
|
|
176
|
+
return err;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
it('a refusal on a hidden file carries unrestoredPaths onto the generic refusal', async () => {
|
|
180
|
+
const unrestored = new Set(['KnowledgeBase/Hidden/secret.md']);
|
|
181
|
+
const out = await translateRewriteWriteRefusal(refusal(unrestored), NONE_VISIBLE, (m) => new Error(m));
|
|
182
|
+
expect((out as Error).message).toBe(UNSHOWN_REFERENCE_REFUSAL);
|
|
183
|
+
expect((out as { unrestoredPaths?: Set<string> }).unrestoredPaths).toBe(unrestored);
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
it('a refusal with every file restored adds no unrestoredPaths', async () => {
|
|
187
|
+
const out = await translateRewriteWriteRefusal(refusal(), NONE_VISIBLE, (m) => new Error(m));
|
|
188
|
+
expect((out as { unrestoredPaths?: Set<string> }).unrestoredPaths).toBeUndefined();
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
it('a refusal on a readable file comes back as it was', async () => {
|
|
192
|
+
const err = refusal(new Set(['x']));
|
|
193
|
+
expect(await translateRewriteWriteRefusal(err, ALL_VISIBLE, (m) => new Error(m))).toBe(err);
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
|
|
161
197
|
describe('KbReferenceScanner — .tool frontmatter is scanned and rewritten like .md', () => {
|
|
162
198
|
it('finds a .tool frontmatter grant and a rename rewrites it (body untouched)', async () => {
|
|
163
199
|
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-'));
|
|
@@ -166,13 +202,13 @@ describe('KbReferenceScanner — .tool frontmatter is scanned and rewritten like
|
|
|
166
202
|
const toolBody = 'name: crm\ntype: mcp\n# not frontmatter below\n';
|
|
167
203
|
await write(repo, 'Plugins/GTM/crm.tool', `---\nread:\n - GTM Team\n---\n${toolBody}`);
|
|
168
204
|
await write(repo, 'Plugins/GTM/notes.md', '---\nowner: GTM Team\n---\n# notes\n');
|
|
169
|
-
const scanner = new KbReferenceScanner(stubWorkspace(root), KB);
|
|
205
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), new NodeFs(), KB);
|
|
170
206
|
|
|
171
207
|
const byToken = await scanner.scan('ws-1');
|
|
172
208
|
const hits = (byToken.get('gtm team') ?? []).map((h) => h.path).sort();
|
|
173
209
|
expect(hits).toEqual(['Plugins/GTM/crm.tool', 'Plugins/GTM/notes.md']);
|
|
174
210
|
|
|
175
|
-
const writes = await scanner.rewriteReferences('ws-1', 'gtm team', 'Go To Market', (m) => new Error(m));
|
|
211
|
+
const writes = await scanner.rewriteReferences('ws-1', 'gtm team', 'Go To Market', (m) => new Error(m), ALL_VISIBLE);
|
|
176
212
|
const toolWrite = writes.find((w) => w.repoRelativePath === 'Plugins/GTM/crm.tool')!;
|
|
177
213
|
expect(toolWrite.content).toContain(' - Go To Market');
|
|
178
214
|
// The .tool body below the frontmatter is byte-for-byte intact.
|
|
@@ -184,6 +220,321 @@ describe('KbReferenceScanner — .tool frontmatter is scanned and rewritten like
|
|
|
184
220
|
});
|
|
185
221
|
});
|
|
186
222
|
|
|
223
|
+
describe('KbReferenceScanner — candidates are the resolver\'s walk, not the explorer\'s', () => {
|
|
224
|
+
it('scans and rewrites an access.md that .bevelignore hides from the explorer', async () => {
|
|
225
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-ignore-'));
|
|
226
|
+
try {
|
|
227
|
+
const repo = path.join(root, KB);
|
|
228
|
+
await write(repo, '.bevelignore', 'Archive/\n');
|
|
229
|
+
// The resolver walks past .bevelignore, so this rule is ENFORCED.
|
|
230
|
+
await write(repo, 'Archive/access.md', '---\nwrite:\n - Admin\n---\n');
|
|
231
|
+
// The explorer's listing, as the real one answers: what .bevelignore
|
|
232
|
+
// hides is not in it. A scan built on it would miss Archive/access.md.
|
|
233
|
+
const base = stubWorkspace(root);
|
|
234
|
+
const ws = {
|
|
235
|
+
...base,
|
|
236
|
+
listFiles: async (id: string) => {
|
|
237
|
+
const tree = await base.listFiles(id);
|
|
238
|
+
const prune = (n: FileTreeEntry): FileTreeEntry => ({
|
|
239
|
+
...n,
|
|
240
|
+
children: n.children
|
|
241
|
+
?.filter((c) => c.relativePath !== `${KB}/Archive`)
|
|
242
|
+
.map(prune),
|
|
243
|
+
});
|
|
244
|
+
return prune(tree);
|
|
245
|
+
},
|
|
246
|
+
} as unknown as IWorkspaceService;
|
|
247
|
+
const scanner = new KbReferenceScanner(ws, new NodeFs(), KB);
|
|
248
|
+
|
|
249
|
+
expect((await scanner.scan('ws-1')).get('admin')).toEqual([{ path: 'Archive/access.md', verb: 'write' }]);
|
|
250
|
+
const writes = await scanner.rewriteReferences('ws-1', 'admin', 'Admins', (m) => new Error(m), ALL_VISIBLE);
|
|
251
|
+
expect(writes.map((w) => w.repoRelativePath)).toEqual(['Archive/access.md']);
|
|
252
|
+
} finally {
|
|
253
|
+
await fs.rm(root, { recursive: true, force: true });
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
describe('KbReferenceScanner — references are what the resolver parses', () => {
|
|
259
|
+
// A body-governed access.md: the body is the folder's rules, the
|
|
260
|
+
// frontmatter the file's own — here a FLOW sequence, which only the
|
|
261
|
+
// resolver's full-YAML fallback reads. And a node whose owner is QUOTED.
|
|
262
|
+
const FLOW_ACCESS_MD = '---\nread: ["Admin"]\n---\nwrite:\n - Admin\n';
|
|
263
|
+
const QUOTED_NODE = "---\nowner: 'Admin'\n---\n# Doc\n";
|
|
264
|
+
|
|
265
|
+
it('the scan reports quoted and flow-YAML rules the resolver enforces', async () => {
|
|
266
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-yaml-'));
|
|
267
|
+
try {
|
|
268
|
+
const repo = path.join(root, KB);
|
|
269
|
+
await write(repo, 'Team/access.md', FLOW_ACCESS_MD);
|
|
270
|
+
await write(repo, 'Team/Doc.md', QUOTED_NODE);
|
|
271
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), new NodeFs(), KB);
|
|
272
|
+
|
|
273
|
+
const hits = (await scanner.scan('ws-1')).get('admin') ?? [];
|
|
274
|
+
expect(hits).toEqual(
|
|
275
|
+
expect.arrayContaining([
|
|
276
|
+
{ path: 'Team/access.md', verb: 'write' },
|
|
277
|
+
{ path: 'Team/access.md', verb: 'read' },
|
|
278
|
+
{ path: 'Team/Doc.md', verb: 'owner' },
|
|
279
|
+
]),
|
|
280
|
+
);
|
|
281
|
+
expect(hits).toHaveLength(3);
|
|
282
|
+
} finally {
|
|
283
|
+
await fs.rm(root, { recursive: true, force: true });
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
it('an access.md the resolver drops as broken references nothing', async () => {
|
|
288
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-broken-'));
|
|
289
|
+
try {
|
|
290
|
+
// A scalar where the verb needs a list: a hard parse error, so the
|
|
291
|
+
// resolver ignores the whole file.
|
|
292
|
+
await write(path.join(root, KB), 'Team/access.md', '---\nread: Admin\nwrite:\n - Admin\n---\n');
|
|
293
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), new NodeFs(), KB);
|
|
294
|
+
expect((await scanner.scan('ws-1')).get('admin')).toBeUndefined();
|
|
295
|
+
} finally {
|
|
296
|
+
await fs.rm(root, { recursive: true, force: true });
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
it('a rename rewrites quoted and flow-YAML references in place, quoting and comments kept', async () => {
|
|
301
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-structural-'));
|
|
302
|
+
try {
|
|
303
|
+
const repo = path.join(root, KB);
|
|
304
|
+
await write(repo, 'Team/access.md', FLOW_ACCESS_MD);
|
|
305
|
+
await write(repo, 'Team/Doc.md', "---\nnodeType: Doc # kept\nowner: 'Admin'\nread: [Sales, \"deny Admin\"]\n---\n# Doc\n");
|
|
306
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), new NodeFs(), KB);
|
|
307
|
+
const writes = await scanner.rewriteReferences('ws-1', 'admin', 'Admins', (m) => new Error(m), ALL_VISIBLE);
|
|
308
|
+
const byPath = new Map(writes.map((w) => [w.repoRelativePath, w.content]));
|
|
309
|
+
expect(byPath.get('Team/access.md')).toBe('---\nread: ["Admins"]\n---\nwrite:\n - Admins\n');
|
|
310
|
+
expect(byPath.get('Team/Doc.md')).toBe(
|
|
311
|
+
"---\nnodeType: Doc # kept\nowner: 'Admins'\nread: [Sales, \"deny Admins\"]\n---\n# Doc\n",
|
|
312
|
+
);
|
|
313
|
+
} finally {
|
|
314
|
+
await fs.rm(root, { recursive: true, force: true });
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
it('an alias under a verb key is rewritten without touching the anchor it points at', async () => {
|
|
319
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-alias-'));
|
|
320
|
+
try {
|
|
321
|
+
const repo = path.join(root, KB);
|
|
322
|
+
await write(repo, 'Team/Doc.md', '---\nteam: &t Admin\nread: [*t]\n---\n');
|
|
323
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), new NodeFs(), KB);
|
|
324
|
+
const [w] = await scanner.rewriteReferences('ws-1', 'admin', 'Admins', (m) => new Error(m), ALL_VISIBLE);
|
|
325
|
+
expect(w.content).toBe('---\nteam: &t Admin\nread: [Admins]\n---\n');
|
|
326
|
+
} finally {
|
|
327
|
+
await fs.rm(root, { recursive: true, force: true });
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
// Stated Contracts Are Checked, Not Trusted: the resolver reads `read: *team`
|
|
332
|
+
// as the anchored list's entries, so the rename rewrites them there — on a
|
|
333
|
+
// copy, leaving the anchor and its other uses as they were.
|
|
334
|
+
it.each([
|
|
335
|
+
[
|
|
336
|
+
'the whole verb value',
|
|
337
|
+
'---\nteam: &team\n - Admin\n - Sales\nread: *team\n---\n# Doc\n',
|
|
338
|
+
'---\nteam: &team\n - Admin\n - Sales\nread:\n - Admins\n - Sales\n---\n# Doc\n',
|
|
339
|
+
],
|
|
340
|
+
[
|
|
341
|
+
'beside a quoted verb, an aliased item inside it',
|
|
342
|
+
"---\nlead: &lead Admin\nteam: &team\n - *lead\n - deny Admin\nread: *team\nowner: 'Sales'\n---\n",
|
|
343
|
+
"---\nlead: &lead Admin\nteam: &team\n - *lead\n - deny Admin\nread:\n - Admins\n - deny Admins\nowner: 'Sales'\n---\n",
|
|
344
|
+
],
|
|
345
|
+
])('an alias to an anchored list is rewritten as a copy (%s)', async (_label, before, after) => {
|
|
346
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-alias-list-'));
|
|
347
|
+
try {
|
|
348
|
+
const repo = path.join(root, KB);
|
|
349
|
+
await write(repo, 'Team/Doc.md', before);
|
|
350
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), new NodeFs(), KB);
|
|
351
|
+
const writes = await scanner.rewriteReferences('ws-1', 'admin', 'Admins', (m) => new Error(m), ALL_VISIBLE);
|
|
352
|
+
expect(writes.map((w) => [w.repoRelativePath, w.content])).toEqual([['Team/Doc.md', after]]);
|
|
353
|
+
} finally {
|
|
354
|
+
await fs.rm(root, { recursive: true, force: true });
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
// A Guard's Answer Is a Disclosure, and Widening a Primitive Traces Its
|
|
359
|
+
// Consequences: a file the renaming person cannot read (another person's
|
|
360
|
+
// private plugin) neither blocks the rename nor changes its answer —
|
|
361
|
+
// whatever it holds, the rename completes and the file is rewritten like
|
|
362
|
+
// any other, so no reference to the old name is stranded there.
|
|
363
|
+
it.each([
|
|
364
|
+
['no reference', '---\nread:\n - Sales\n---\n', null],
|
|
365
|
+
['a block-list reference', '---\nread:\n - Admin\n---\n', '---\nread:\n - Admins\n---\n'],
|
|
366
|
+
['a flow-YAML reference', FLOW_ACCESS_MD, '---\nread: ["Admins"]\n---\nwrite:\n - Admins\n'],
|
|
367
|
+
])('a file the renaming person cannot read never blocks the rename (%s)', async (_label, secret, expected) => {
|
|
368
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-hidden-'));
|
|
369
|
+
try {
|
|
370
|
+
const repo = path.join(root, KB);
|
|
371
|
+
await write(repo, 'Team/access.md', '---\nread:\n - Admin\n---\n');
|
|
372
|
+
await write(repo, 'Secret/access.md', secret);
|
|
373
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), new NodeFs(), KB);
|
|
374
|
+
const onlyTeam: PathVisibility = async (paths) => new Map(paths.map((p) => [p, p.startsWith('Team/')]));
|
|
375
|
+
const writes = await scanner.rewriteReferences('ws-1', 'admin', 'Admins', (m) => new Error(m), onlyTeam);
|
|
376
|
+
const byPath = new Map(writes.map((w) => [w.repoRelativePath, w.content]));
|
|
377
|
+
expect(byPath.get('Team/access.md')).toBe('---\nread:\n - Admins\n---\n');
|
|
378
|
+
expect(byPath.get('Secret/access.md') ?? null).toBe(expected);
|
|
379
|
+
} finally {
|
|
380
|
+
await fs.rm(root, { recursive: true, force: true });
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
it('a rename by someone who can read nothing still completes', async () => {
|
|
385
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-none-visible-'));
|
|
386
|
+
try {
|
|
387
|
+
await write(path.join(root, KB), 'Team/access.md', FLOW_ACCESS_MD);
|
|
388
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), new NodeFs(), KB);
|
|
389
|
+
const writes = await scanner.rewriteReferences('ws-1', 'admin', 'Admins', (m) => new Error(m), NONE_VISIBLE);
|
|
390
|
+
expect(writes.map((w) => w.repoRelativePath)).toEqual(['Team/access.md']);
|
|
391
|
+
} finally {
|
|
392
|
+
await fs.rm(root, { recursive: true, force: true });
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
|
|
397
|
+
describe('KbReferenceScanner — a folder the walk cannot list', () => {
|
|
398
|
+
/** The real walk, reporting `Locked` as a folder it could not list. */
|
|
399
|
+
function walkerWithHole(hole = 'Locked'): ITreeWalker & { walks: number } {
|
|
400
|
+
const disk = new NodeFs();
|
|
401
|
+
const walker = {
|
|
402
|
+
walks: 0,
|
|
403
|
+
walk: (r: string, o: Parameters<NodeFs['walk']>[1], l: Parameters<NodeFs['walk']>[2]) => disk.walk(r, o, l),
|
|
404
|
+
walkFiles: (r: string, m: (b: string) => boolean, o?: { strict?: boolean }) => disk.walkFiles(r, m, o),
|
|
405
|
+
walkKb: async (r: string, l: Parameters<NodeFs['walkKb']>[1], o?: Parameters<NodeFs['walkKb']>[2]) => {
|
|
406
|
+
walker.walks++;
|
|
407
|
+
const result = await disk.walkKb(r, l, o);
|
|
408
|
+
return { holes: [...result.holes, hole] };
|
|
409
|
+
},
|
|
410
|
+
};
|
|
411
|
+
return walker;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
it('a rename refuses with nothing written: the folder may hold references', async () => {
|
|
415
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-hole-'));
|
|
416
|
+
try {
|
|
417
|
+
await write(path.join(root, KB), 'team/access.md', '---\nread:\n - Sales\n---\n');
|
|
418
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), walkerWithHole(), KB);
|
|
419
|
+
await expect(
|
|
420
|
+
scanner.rewriteReferences('ws-1', 'sales', 'Revenue', (m) => new Error(m), ALL_VISIBLE),
|
|
421
|
+
).rejects.toThrow(UNSHOWN_REFERENCE_REFUSAL);
|
|
422
|
+
} finally {
|
|
423
|
+
await fs.rm(root, { recursive: true, force: true });
|
|
424
|
+
}
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
// The folder's own access.md may be as unreadable as its listing, so the
|
|
428
|
+
// visibility check cannot see the rules that close it: never named.
|
|
429
|
+
it('the refusal neither names nor counts the folder, even to someone who could read every path', async () => {
|
|
430
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-hole-hidden-'));
|
|
431
|
+
try {
|
|
432
|
+
await write(path.join(root, KB), 'team/access.md', '---\nread:\n - Sales\n---\n');
|
|
433
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), walkerWithHole(), KB);
|
|
434
|
+
const err = await scanner
|
|
435
|
+
.rewriteReferences('ws-1', 'sales', 'Revenue', (m) => new Error(m), ALL_VISIBLE)
|
|
436
|
+
.catch((e: Error) => e);
|
|
437
|
+
expect((err as Error).message).toBe(UNSHOWN_REFERENCE_REFUSAL);
|
|
438
|
+
} finally {
|
|
439
|
+
await fs.rm(root, { recursive: true, force: true });
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
|
|
443
|
+
it('a folder name with a line break cannot forge a second line in the refusal', async () => {
|
|
444
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-hole3-'));
|
|
445
|
+
try {
|
|
446
|
+
await write(path.join(root, KB), 'team/access.md', '---\nread:\n - Sales\n---\n');
|
|
447
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), walkerWithHole('Lo\nFAKE: line'), KB);
|
|
448
|
+
const err = await scanner
|
|
449
|
+
.rewriteReferences('ws-1', 'sales', 'Revenue', (m) => new Error(m), ALL_VISIBLE)
|
|
450
|
+
.catch((e: Error) => e);
|
|
451
|
+
expect((err as Error).message).not.toContain('\n');
|
|
452
|
+
expect((err as Error).message).not.toContain('FAKE');
|
|
453
|
+
} finally {
|
|
454
|
+
await fs.rm(root, { recursive: true, force: true });
|
|
455
|
+
}
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
it('a file the rewrite cannot read is neither named nor counted, and its fs cause stays out of the error', async () => {
|
|
459
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-unreadable-'));
|
|
460
|
+
try {
|
|
461
|
+
const repo = path.join(root, KB);
|
|
462
|
+
await write(repo, 'team/access.md', '---\nread:\n - Sales\n---\n');
|
|
463
|
+
// The walk lists team/Ghost.md, but there is no file to read.
|
|
464
|
+
const disk = new NodeFs();
|
|
465
|
+
const walker: ITreeWalker = {
|
|
466
|
+
walk: (r, o, l) => disk.walk(r, o, l),
|
|
467
|
+
walkFiles: (r, m, o) => disk.walkFiles(r, m, o),
|
|
468
|
+
walkKb: async (r, l, o) => {
|
|
469
|
+
const result = await disk.walkKb(r, l, o);
|
|
470
|
+
for (const listener of l) listener.onFile?.('team', 'Ghost.md');
|
|
471
|
+
return result;
|
|
472
|
+
},
|
|
473
|
+
};
|
|
474
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), walker, KB);
|
|
475
|
+
const causes: (string | undefined)[] = [];
|
|
476
|
+
const err = await scanner
|
|
477
|
+
.rewriteReferences(
|
|
478
|
+
'ws-1',
|
|
479
|
+
'sales',
|
|
480
|
+
'Revenue',
|
|
481
|
+
(m, cause) => {
|
|
482
|
+
causes.push(cause);
|
|
483
|
+
return new Error(m);
|
|
484
|
+
},
|
|
485
|
+
ALL_VISIBLE,
|
|
486
|
+
)
|
|
487
|
+
.catch((e: Error) => e);
|
|
488
|
+
expect((err as Error).message).toBe(UNSHOWN_REFERENCE_REFUSAL);
|
|
489
|
+
expect(causes).toEqual([undefined]);
|
|
490
|
+
} finally {
|
|
491
|
+
await fs.rm(root, { recursive: true, force: true });
|
|
492
|
+
}
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
it('the advisory scan still answers what it read, but never caches an incomplete result', async () => {
|
|
496
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-hole2-'));
|
|
497
|
+
try {
|
|
498
|
+
await write(path.join(root, KB), 'team/access.md', '---\nread:\n - Sales\n---\n');
|
|
499
|
+
const walker = walkerWithHole();
|
|
500
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), walker, KB);
|
|
501
|
+
expect((await scanner.scan('ws-1')).get('sales')).toHaveLength(1);
|
|
502
|
+
await scanner.scan('ws-1');
|
|
503
|
+
// Not served from cache: the second scan retried the listing.
|
|
504
|
+
expect(walker.walks).toBe(2);
|
|
505
|
+
} finally {
|
|
506
|
+
await fs.rm(root, { recursive: true, force: true });
|
|
507
|
+
}
|
|
508
|
+
});
|
|
509
|
+
|
|
510
|
+
it('a scan that could not read a candidate file is not cached', async () => {
|
|
511
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-unread-'));
|
|
512
|
+
try {
|
|
513
|
+
await write(path.join(root, KB), 'team/access.md', '---\nread:\n - Sales\n---\n');
|
|
514
|
+
// The walk lists team/Ghost.md, but there is no file to read.
|
|
515
|
+
const disk = new NodeFs();
|
|
516
|
+
let walks = 0;
|
|
517
|
+
const walker: ITreeWalker = {
|
|
518
|
+
walk: (r, o, l) => disk.walk(r, o, l),
|
|
519
|
+
walkFiles: (r, m, o) => disk.walkFiles(r, m, o),
|
|
520
|
+
walkKb: async (r, l, o) => {
|
|
521
|
+
walks++;
|
|
522
|
+
const result = await disk.walkKb(r, l, o);
|
|
523
|
+
for (const listener of l) listener.onFile?.('team', 'Ghost.md');
|
|
524
|
+
return result;
|
|
525
|
+
},
|
|
526
|
+
};
|
|
527
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), walker, KB);
|
|
528
|
+
expect((await scanner.scan('ws-1')).get('sales')).toHaveLength(1);
|
|
529
|
+
await scanner.scan('ws-1');
|
|
530
|
+
// Not served from cache: the second scan walked and read again.
|
|
531
|
+
expect(walks).toBe(2);
|
|
532
|
+
} finally {
|
|
533
|
+
await fs.rm(root, { recursive: true, force: true });
|
|
534
|
+
}
|
|
535
|
+
});
|
|
536
|
+
});
|
|
537
|
+
|
|
187
538
|
describe('KbReferenceScanner — event-bus cache invalidation', () => {
|
|
188
539
|
it('drops the cached scan when a scanned-extension file changes in the workspace', async () => {
|
|
189
540
|
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'bevel-refscan-bus-'));
|
|
@@ -192,7 +543,7 @@ describe('KbReferenceScanner — event-bus cache invalidation', () => {
|
|
|
192
543
|
await write(repo, 'team/access.md', '---\nread:\n - Sales\n---\n');
|
|
193
544
|
const listeners: ((e: { kind: string; workspaceId?: string; path?: string }) => void)[] = [];
|
|
194
545
|
const bus = { onEmit: (l: (typeof listeners)[number]) => (listeners.push(l), () => undefined) };
|
|
195
|
-
const scanner = new KbReferenceScanner(stubWorkspace(root), KB, bus);
|
|
546
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), new NodeFs(), KB, bus);
|
|
196
547
|
|
|
197
548
|
expect((await scanner.scan('ws-1')).get('sales')).toHaveLength(1);
|
|
198
549
|
|
|
@@ -216,22 +567,23 @@ describe('KbReferenceScanner — event-bus cache invalidation', () => {
|
|
|
216
567
|
try {
|
|
217
568
|
const repo = path.join(root, KB);
|
|
218
569
|
await write(repo, 'team/access.md', '---\nread:\n - Sales\n---\n');
|
|
219
|
-
// The
|
|
570
|
+
// The walker invalidates DURING the first scan's tree listing —
|
|
220
571
|
// modelling a write that lands after the scan started reading.
|
|
221
|
-
const
|
|
572
|
+
const disk = new NodeFs();
|
|
222
573
|
let armed = true;
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
574
|
+
const walker: ITreeWalker = {
|
|
575
|
+
walk: (r, o, l) => disk.walk(r, o, l),
|
|
576
|
+
walkFiles: (r, m, o) => disk.walkFiles(r, m, o),
|
|
577
|
+
walkKb: async (r, l, o) => {
|
|
578
|
+
const result = await disk.walkKb(r, l, o);
|
|
227
579
|
if (armed) {
|
|
228
580
|
armed = false;
|
|
229
581
|
scanner.invalidate('ws-1');
|
|
230
582
|
}
|
|
231
|
-
return
|
|
583
|
+
return result;
|
|
232
584
|
},
|
|
233
|
-
}
|
|
234
|
-
const scanner = new KbReferenceScanner(
|
|
585
|
+
};
|
|
586
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), walker, KB);
|
|
235
587
|
|
|
236
588
|
// The caller still gets the snapshot it asked for...
|
|
237
589
|
expect((await scanner.scan('ws-1')).get('sales')).toHaveLength(1);
|
|
@@ -252,7 +604,7 @@ describe('KbReferenceScanner — event-bus cache invalidation', () => {
|
|
|
252
604
|
await write(repo, 'team/access.md', '---\nread:\n - Sales\n---\n');
|
|
253
605
|
const listeners: ((e: { kind: string; workspaceId?: string; path?: string }) => void)[] = [];
|
|
254
606
|
const bus = { onEmit: (l: (typeof listeners)[number]) => (listeners.push(l), () => undefined) };
|
|
255
|
-
const scanner = new KbReferenceScanner(stubWorkspace(root), KB, bus);
|
|
607
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), new NodeFs(), KB, bus);
|
|
256
608
|
|
|
257
609
|
const first = await scanner.scan('ws-1');
|
|
258
610
|
for (const l of listeners) {
|
|
@@ -272,7 +624,7 @@ describe('KbReferenceScanner — event-bus cache invalidation', () => {
|
|
|
272
624
|
await write(repo, 'team/access.md', '---\nread:\n - Sales\n---\n');
|
|
273
625
|
const listeners: ((e: { kind: string; workspaceId?: string; path?: string }) => void)[] = [];
|
|
274
626
|
const bus = { onEmit: (l: (typeof listeners)[number]) => (listeners.push(l), () => undefined) };
|
|
275
|
-
const scanner = new KbReferenceScanner(stubWorkspace(root), KB, bus);
|
|
627
|
+
const scanner = new KbReferenceScanner(stubWorkspace(root), new NodeFs(), KB, bus);
|
|
276
628
|
|
|
277
629
|
const first = await scanner.scan('ws-1');
|
|
278
630
|
for (const l of listeners) {
|
|
@@ -127,7 +127,7 @@ describe('SECURITY: Admin-role removal takes effect on the next request', () =>
|
|
|
127
127
|
// cache and could pass this test while production still served stale
|
|
128
128
|
// verdicts, which is the failure mode worth guarding.
|
|
129
129
|
access = new AccessControlService(ws, KB, new NodeFs(), [OWNER]);
|
|
130
|
-
rolesAdmin = new RolesAdminService(ws, stubWorkflow(), access, KB, () => DEFAULT_BRANCH, undefined, [
|
|
130
|
+
rolesAdmin = new RolesAdminService(ws, stubWorkflow(), access, new NodeFs(), KB, () => DEFAULT_BRANCH, undefined, [
|
|
131
131
|
OWNER,
|
|
132
132
|
]);
|
|
133
133
|
const adminAccess = new AdminAccessService(access, ws, DEFAULT_BRANCH, [OWNER]);
|
|
@@ -21,6 +21,8 @@ const WS = workspaceIdForBranch(DEFAULT_BRANCH);
|
|
|
21
21
|
|
|
22
22
|
const ADMIN: AuthUser = { id: 'u-admin', email: 'razvan@bevel.software', name: 'Razvan' } as AuthUser;
|
|
23
23
|
const OTHER_ADMIN: AuthUser = { id: 'u-2', email: 'juan@bevel.software', name: 'Juan' } as AuthUser;
|
|
24
|
+
/** A Sales member: reads the Sales-governed files the roster tests reference. */
|
|
25
|
+
const SALES_VIEWER = 'felix@example.com';
|
|
24
26
|
|
|
25
27
|
const ROLES = `roles:
|
|
26
28
|
Admin:
|
|
@@ -169,7 +171,7 @@ describe('RolesAdminService', () => {
|
|
|
169
171
|
access = new AccessControlService(ws, KB, new NodeFs());
|
|
170
172
|
workflow = stubWorkflow();
|
|
171
173
|
bus = stubEventBus();
|
|
172
|
-
svc = new RolesAdminService(ws, workflow.svc, access, KB, () => DEFAULT_BRANCH, bus.bus, [
|
|
174
|
+
svc = new RolesAdminService(ws, workflow.svc, access, new NodeFs(), KB, () => DEFAULT_BRANCH, bus.bus, [
|
|
173
175
|
'recovery-admin@example.com',
|
|
174
176
|
]);
|
|
175
177
|
});
|
|
@@ -179,7 +181,7 @@ describe('RolesAdminService', () => {
|
|
|
179
181
|
});
|
|
180
182
|
|
|
181
183
|
it('getRoster lists roles, marks Admin, dedupes members', async () => {
|
|
182
|
-
const roster = await svc.getRoster();
|
|
184
|
+
const roster = await svc.getRoster(ADMIN.email);
|
|
183
185
|
expect(roster.map((r) => r.canonical)).toEqual(['admin', 'sales']);
|
|
184
186
|
expect(roster.find((r) => r.canonical === 'admin')!.isAdmin).toBe(true);
|
|
185
187
|
expect(roster.find((r) => r.canonical === 'sales')!.members).toEqual(['felix@example.com']);
|
|
@@ -191,9 +193,9 @@ describe('RolesAdminService', () => {
|
|
|
191
193
|
// `DEFAULT_BRANCH` and froze it — every roles route then failed branch
|
|
192
194
|
// validation with `Invalid branch name "": empty name` until a restart.
|
|
193
195
|
let branch = '';
|
|
194
|
-
const late = new RolesAdminService(ws, workflow.svc, access, KB, () => branch, bus.bus);
|
|
196
|
+
const late = new RolesAdminService(ws, workflow.svc, access, new NodeFs(), KB, () => branch, bus.bus);
|
|
195
197
|
branch = DEFAULT_BRANCH;
|
|
196
|
-
const roster = await late.getRoster();
|
|
198
|
+
const roster = await late.getRoster(ADMIN.email);
|
|
197
199
|
expect(roster.map((r) => r.canonical)).toEqual(['admin', 'sales']);
|
|
198
200
|
});
|
|
199
201
|
|
|
@@ -255,7 +257,7 @@ describe('RolesAdminService', () => {
|
|
|
255
257
|
const corrupt = 'roles:\n Admin:\n - a@x.eu\n Admin:\n - b@x.eu\n';
|
|
256
258
|
await write(repo, 'roles.yaml', corrupt);
|
|
257
259
|
access.invalidate(WS);
|
|
258
|
-
const adminless = new RolesAdminService(ws, workflow.svc, access, KB, () => DEFAULT_BRANCH, bus.bus);
|
|
260
|
+
const adminless = new RolesAdminService(ws, workflow.svc, access, new NodeFs(), KB, () => DEFAULT_BRANCH, bus.bus);
|
|
259
261
|
// 409, not 500: the route helper hides >=500 bodies behind a generic
|
|
260
262
|
// message, and this break-glass refusal must reach the operator verbatim.
|
|
261
263
|
await expect(adminless.recover(ADMIN)).rejects.toMatchObject({
|
|
@@ -273,13 +275,24 @@ describe('RolesAdminService', () => {
|
|
|
273
275
|
// ...AND a grant that lives ONLY in a node's own frontmatter (the gap).
|
|
274
276
|
await write(repo, 'team/deal.md', '---\nowner: Sales\n---\n# Deal\n');
|
|
275
277
|
|
|
276
|
-
const sales = (await svc.getRoster()).find((r) => r.canonical === 'sales')!;
|
|
278
|
+
const sales = (await svc.getRoster(SALES_VIEWER)).find((r) => r.canonical === 'sales')!;
|
|
277
279
|
const paths = sales.referencedBy.map((r) => r.path).sort();
|
|
278
280
|
expect(paths).toEqual(['team/access.md', 'team/deal.md']);
|
|
279
281
|
// The frontmatter ref carries its verb, so the warning can name it.
|
|
280
282
|
expect(sales.referencedBy).toContainEqual({ path: 'team/deal.md', verb: 'owner' });
|
|
281
283
|
// An unreferenced role still shows nothing.
|
|
282
|
-
expect((await svc.getRoster()).find((r) => r.canonical === 'admin')!.referencedBy).toEqual([]);
|
|
284
|
+
expect((await svc.getRoster(SALES_VIEWER)).find((r) => r.canonical === 'admin')!.referencedBy).toEqual([]);
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
it("getRoster names only files the viewer can read and leaves the rest out, uncounted — an Admin can't read Sales's files", async () => {
|
|
288
|
+
await write(repo, 'team/access.md', '---\nread:\n - deny everyone\n - Sales\n---\n');
|
|
289
|
+
await write(repo, 'team/deal.md', '---\nowner: Sales\n---\n# Deal\n');
|
|
290
|
+
|
|
291
|
+
const asAdmin = (await svc.getRoster(ADMIN.email)).find((r) => r.canonical === 'sales')!;
|
|
292
|
+
expect(asAdmin.referencedBy).toEqual([]);
|
|
293
|
+
expect(asAdmin).not.toHaveProperty('referencesHidden');
|
|
294
|
+
const asMember = (await svc.getRoster(SALES_VIEWER)).find((r) => r.canonical === 'sales')!;
|
|
295
|
+
expect(asMember.referencedBy).toHaveLength(2);
|
|
283
296
|
});
|
|
284
297
|
|
|
285
298
|
it('addMember persists + is idempotent', async () => {
|
|
@@ -560,6 +573,7 @@ describe('roster referencedBy under group shadowing', () => {
|
|
|
560
573
|
ws,
|
|
561
574
|
stubWorkflow().svc,
|
|
562
575
|
new AccessControlService(ws, KB, new NodeFs()),
|
|
576
|
+
new NodeFs(),
|
|
563
577
|
KB,
|
|
564
578
|
() => DEFAULT_BRANCH,
|
|
565
579
|
stubEventBus().bus,
|
|
@@ -570,20 +584,26 @@ describe('roster referencedBy under group shadowing', () => {
|
|
|
570
584
|
await fs.rm(root, { recursive: true, force: true });
|
|
571
585
|
});
|
|
572
586
|
|
|
573
|
-
it('a bare-token hit
|
|
574
|
-
// A group named Sales
|
|
575
|
-
//
|
|
587
|
+
it('a bare-token hit stays the ROLE’s when a group shares the name; group/<name> hits never are', async () => {
|
|
588
|
+
// A group named Sales shares the Sales role's name: bare tokens still
|
|
589
|
+
// resolve to the ROLE, so the roles roster claims them; group/ is the group.
|
|
576
590
|
await write(repo, 'groups.yaml', 'groups:\n Sales:\n - pat@x.io\n');
|
|
577
|
-
await write(
|
|
591
|
+
await write(
|
|
592
|
+
repo,
|
|
593
|
+
'team/access.md',
|
|
594
|
+
'---\nread:\n - Sales\nwrite:\n - role/Sales\nowner:\n - group/Sales\n---\n',
|
|
595
|
+
);
|
|
578
596
|
|
|
579
|
-
const sales = (await svc.getRoster()).find((r) => r.canonical === 'sales')!;
|
|
580
|
-
|
|
581
|
-
|
|
597
|
+
const sales = (await svc.getRoster(SALES_VIEWER)).find((r) => r.canonical === 'sales')!;
|
|
598
|
+
expect(sales.referencedBy).toEqual([
|
|
599
|
+
{ path: 'team/access.md', verb: 'read' },
|
|
600
|
+
{ path: 'team/access.md', verb: 'write' },
|
|
601
|
+
]);
|
|
582
602
|
});
|
|
583
603
|
|
|
584
|
-
it('
|
|
604
|
+
it('with no group of the name: bare hits count for the role (both spellings)', async () => {
|
|
585
605
|
await write(repo, 'team/access.md', '---\nread:\n - Sales\nwrite:\n - role/Sales\n---\n');
|
|
586
|
-
const sales = (await svc.getRoster()).find((r) => r.canonical === 'sales')!;
|
|
606
|
+
const sales = (await svc.getRoster(SALES_VIEWER)).find((r) => r.canonical === 'sales')!;
|
|
587
607
|
expect(sales.referencedBy).toEqual([
|
|
588
608
|
{ path: 'team/access.md', verb: 'read' },
|
|
589
609
|
{ path: 'team/access.md', verb: 'write' },
|
|
@@ -611,6 +631,7 @@ describe('Admin fixed members — the deployment admin', () => {
|
|
|
611
631
|
ws,
|
|
612
632
|
workflow.svc,
|
|
613
633
|
new AccessControlService(ws, KB, new NodeFs()),
|
|
634
|
+
new NodeFs(),
|
|
614
635
|
KB,
|
|
615
636
|
() => DEFAULT_BRANCH,
|
|
616
637
|
stubEventBus().bus,
|
|
@@ -632,7 +653,7 @@ describe('Admin fixed members — the deployment admin', () => {
|
|
|
632
653
|
});
|
|
633
654
|
|
|
634
655
|
it('lists the deployment admin as a fixed member of Admin, and of no other role', async () => {
|
|
635
|
-
const roster = await serviceWith([OWNER]).getRoster();
|
|
656
|
+
const roster = await serviceWith([OWNER]).getRoster(ADMIN.email);
|
|
636
657
|
expect(roster.find((r) => r.canonical === 'admin')!.fixedMembers).toEqual([OWNER]);
|
|
637
658
|
expect(roster.find((r) => r.canonical === 'sales')!.fixedMembers).toEqual([]);
|
|
638
659
|
});
|
|
@@ -641,7 +662,7 @@ describe('Admin fixed members — the deployment admin', () => {
|
|
|
641
662
|
// The page prints `fixedMembersNote` as sent, so this is the one copy of
|
|
642
663
|
// the wording: the note and the API refusal cannot drift apart.
|
|
643
664
|
const svc = serviceWith([OWNER]);
|
|
644
|
-
const roster = await svc.getRoster();
|
|
665
|
+
const roster = await svc.getRoster(ADMIN.email);
|
|
645
666
|
const note = roster.find((r) => r.canonical === 'admin')!.fixedMembersNote;
|
|
646
667
|
expect(note).toBe('Owner; cannot be removed here');
|
|
647
668
|
expect(roster.find((r) => r.canonical === 'sales')!.fixedMembersNote).toBeNull();
|
|
@@ -652,10 +673,10 @@ describe('Admin fixed members — the deployment admin', () => {
|
|
|
652
673
|
it('canonicalises the configured address and drops a blank one', async () => {
|
|
653
674
|
// The composition root passes `[config.adminEmail]` unconditionally, so an
|
|
654
675
|
// unset ADMIN_EMAIL arrives as [''] — that must not become a member "".
|
|
655
|
-
expect((await serviceWith(['']).getRoster()).find((r) => r.canonical === 'admin')!.fixedMembers)
|
|
676
|
+
expect((await serviceWith(['']).getRoster(ADMIN.email)).find((r) => r.canonical === 'admin')!.fixedMembers)
|
|
656
677
|
.toEqual([]);
|
|
657
678
|
expect(
|
|
658
|
-
(await serviceWith([' Owner@Bevel.Software ']).getRoster()).find((r) => r.canonical === 'admin')!
|
|
679
|
+
(await serviceWith([' Owner@Bevel.Software ']).getRoster(ADMIN.email)).find((r) => r.canonical === 'admin')!
|
|
659
680
|
.fixedMembers,
|
|
660
681
|
).toEqual([OWNER]);
|
|
661
682
|
});
|
|
@@ -664,7 +685,7 @@ describe('Admin fixed members — the deployment admin', () => {
|
|
|
664
685
|
// The seeded roles.yaml names ADMIN_EMAIL, so overlap is the normal case.
|
|
665
686
|
// `members` must keep it — the Admin >=1-direct-email invariant counts the
|
|
666
687
|
// FILE — and the page is what renders the overlap once.
|
|
667
|
-
const admin = (await serviceWith(['razvan@bevel.software']).getRoster()).find(
|
|
688
|
+
const admin = (await serviceWith(['razvan@bevel.software']).getRoster(ADMIN.email)).find(
|
|
668
689
|
(r) => r.canonical === 'admin',
|
|
669
690
|
)!;
|
|
670
691
|
expect(admin.members).toContain('razvan@bevel.software');
|
|
@@ -710,7 +731,7 @@ describe('Admin fixed members — the deployment admin', () => {
|
|
|
710
731
|
});
|
|
711
732
|
|
|
712
733
|
it('with no ADMIN_EMAIL configured, no role has a fixed member', async () => {
|
|
713
|
-
const roster = await serviceWith([]).getRoster();
|
|
734
|
+
const roster = await serviceWith([]).getRoster(ADMIN.email);
|
|
714
735
|
expect(roster.every((r) => r.fixedMembers.length === 0)).toBe(true);
|
|
715
736
|
expect(roster.every((r) => r.fixedMembersNote === null)).toBe(true);
|
|
716
737
|
// ...and ordinary Admin membership stays editable.
|