@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
|
@@ -17,15 +17,14 @@ import type {
|
|
|
17
17
|
GrantPrincipal,
|
|
18
18
|
GrantSources,
|
|
19
19
|
} from './access-control.interface.js';
|
|
20
|
-
import type { WorkspaceService } from '../workspace/
|
|
20
|
+
import type { WorkspaceService } from '../workspace/index.js';
|
|
21
21
|
import type { KbContext } from '../../shared/kb-context.js';
|
|
22
|
+
import type { ITreeWalker } from '../../shared/fs.contract.js';
|
|
22
23
|
import { branchForWorkspaceId } from '../../shared/workspace-id.js';
|
|
23
|
-
import type { AuthService } from '../auth/
|
|
24
|
-
import type {
|
|
25
|
-
import type { WorkflowService } from '../workflow/workflow.service.js';
|
|
26
|
-
import type { WorkflowEventBus } from '../workflow/event-bus.js';
|
|
24
|
+
import type { AuthService, IAccountSwitchGuard } from '../auth/index.js';
|
|
25
|
+
import type { WorkflowService, WorkflowEventBus } from '../workflow/index.js';
|
|
27
26
|
import { WorkflowDomainError } from '../../shared/domain-errors.js';
|
|
28
|
-
import { AccessDeniedError } from '../access-model/
|
|
27
|
+
import { AccessDeniedError } from '../access-model/index.js';
|
|
29
28
|
import {
|
|
30
29
|
AccessMutationService,
|
|
31
30
|
AccessMutationError,
|
|
@@ -41,19 +40,21 @@ import {
|
|
|
41
40
|
PLUGIN_TOKEN_PREFIX,
|
|
42
41
|
PLUGIN_TOKEN_VERBS,
|
|
43
42
|
ROLE_TOKEN_PREFIX,
|
|
43
|
+
GROUP_TOKEN_PREFIX,
|
|
44
|
+
splitPrincipalToken,
|
|
44
45
|
type PluginTokenVerb,
|
|
46
|
+
type Principal,
|
|
45
47
|
type Verb,
|
|
46
|
-
} from '../access-model/
|
|
48
|
+
} from '../access-model/index.js';
|
|
47
49
|
import { listAccessDeclarationsUnder } from './access-declarations.js';
|
|
48
50
|
import { emailsInView, holderPrincipals, labelAccountHolders, resolveAccessView } from './access-view.js';
|
|
49
51
|
import type { AccessView, LabelledAccessView } from './access-view.js';
|
|
50
52
|
import { toHttpError as sharedToHttpError, requireNonEmptyString as sharedRequireNonEmptyString } from './admin-route-helpers.js';
|
|
51
53
|
import { RolesAdminService } from './roles-admin.service.js';
|
|
52
|
-
import type {
|
|
53
|
-
import
|
|
54
|
-
import { users } from '../database/schema.js';
|
|
54
|
+
import type { Database } from '../database/index.js';
|
|
55
|
+
import { users } from '../database/index.js';
|
|
55
56
|
import { canonicalEmail } from '../../shared/email-identity.js';
|
|
56
|
-
import '../auth/
|
|
57
|
+
import '../auth/index.js';
|
|
57
58
|
|
|
58
59
|
/** Verbs the share UI may grant. Verbs are independent — `download` is grantable on its own. */
|
|
59
60
|
const GRANTABLE_VERBS = new Set<string>(['read', 'write', 'owner', 'download']);
|
|
@@ -93,6 +94,8 @@ export function createAccessRoutes(
|
|
|
93
94
|
eventBus: WorkflowEventBus,
|
|
94
95
|
db: Database,
|
|
95
96
|
kb: KbContext,
|
|
97
|
+
/** The composition root's walk, for the roles admin's reference scan. */
|
|
98
|
+
disk: ITreeWalker,
|
|
96
99
|
/** This deployment's configured admins — the break-glass recovery roster. */
|
|
97
100
|
recoveryAdmins: readonly string[] = [],
|
|
98
101
|
): express.Router {
|
|
@@ -103,6 +106,7 @@ export function createAccessRoutes(
|
|
|
103
106
|
workspaceService,
|
|
104
107
|
workflowService,
|
|
105
108
|
accessControl,
|
|
109
|
+
disk,
|
|
106
110
|
kbDirName,
|
|
107
111
|
() => kb.defaultBranch,
|
|
108
112
|
eventBus,
|
|
@@ -163,10 +167,10 @@ export function createAccessRoutes(
|
|
|
163
167
|
/**
|
|
164
168
|
* What the mutation routes accept as a principal. `group` and `plugin`
|
|
165
169
|
* exist only at this boundary: in the access.md entry grammar a group grant
|
|
166
|
-
* is
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
+
* is the `group/<Name>` token and a plugin grant is the
|
|
171
|
+
* `plugin/<Name>/<verb>` token, so both are spliced as role-shaped
|
|
172
|
+
* principals — the separate kinds buy validation against the right
|
|
173
|
+
* namespace and honest 404s.
|
|
170
174
|
*/
|
|
171
175
|
type RoutePrincipal =
|
|
172
176
|
| Principal
|
|
@@ -175,14 +179,16 @@ export function createAccessRoutes(
|
|
|
175
179
|
|
|
176
180
|
/**
|
|
177
181
|
* The role-shaped principal the splice layer actually writes/matches.
|
|
178
|
-
* - group →
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
182
|
+
* - group → the explicit `group/<Name>` token. Never the bare name:
|
|
183
|
+
* a bare name is the ROLE whenever one of that name exists,
|
|
184
|
+
* so a bare group grant could silently mean someone else.
|
|
185
|
+
* - role → the explicit `role/<Name>` token. Bare spellings in
|
|
186
|
+
* existing files remain read-compatible. The built-in
|
|
187
|
+
* `everyone` stays bare: it is not a roles.yaml role and
|
|
188
|
+
* has no `role/` alias.
|
|
183
189
|
*/
|
|
184
190
|
const asSplicePrincipal = (p: RoutePrincipal): Principal => {
|
|
185
|
-
if (p.kind === 'group') return { kind: 'role', role: p.group };
|
|
191
|
+
if (p.kind === 'group') return { kind: 'role', role: `${GROUP_TOKEN_PREFIX}${groupName(p.group)}` };
|
|
186
192
|
// Written with the folder's own casing; `parseAccessEntry` canonicalises
|
|
187
193
|
// the name half to the manifest slug on the way back in.
|
|
188
194
|
if (p.kind === 'plugin') return { kind: 'role', role: `${PLUGIN_TOKEN_PREFIX}${p.plugin.trim()}/${p.verb}` };
|
|
@@ -211,6 +217,14 @@ export function createAccessRoutes(
|
|
|
211
217
|
return p;
|
|
212
218
|
};
|
|
213
219
|
|
|
220
|
+
/** A group as the caller named it, without a `group/` prefix it may carry (casing kept). */
|
|
221
|
+
function groupName(group: string): string {
|
|
222
|
+
const raw = group.trim();
|
|
223
|
+
return splitPrincipalToken(canonicalRoleName(raw)).prefix === 'group'
|
|
224
|
+
? raw.slice(GROUP_TOKEN_PREFIX.length).trim()
|
|
225
|
+
: raw;
|
|
226
|
+
}
|
|
227
|
+
|
|
214
228
|
// Authentication gate only. Per PLAN §3 the workspace `:id` is a branch
|
|
215
229
|
// identifier — any authenticated user can read its access tree.
|
|
216
230
|
async function requireUser(
|
|
@@ -513,8 +527,8 @@ export function createAccessRoutes(
|
|
|
513
527
|
* signed in — so the dialog can label them; it withholds nobody.
|
|
514
528
|
*
|
|
515
529
|
* A name shared by a group and a role is offered as BOTH — nothing is
|
|
516
|
-
* withheld:
|
|
517
|
-
*
|
|
530
|
+
* withheld: each is written with its own prefix (`group/<Name>`,
|
|
531
|
+
* `role/<Name>`), so the collision never reaches the file.
|
|
518
532
|
*/
|
|
519
533
|
router.get('/workspace/:id/access/suggest', async (req, res) => {
|
|
520
534
|
const user = await requireUser(req, res);
|
|
@@ -950,10 +964,10 @@ export function createAccessRoutes(
|
|
|
950
964
|
// uses — and one the caller may see (`visibleGroups`): a group hidden
|
|
951
965
|
// from the picker is refused here with the same words as one that
|
|
952
966
|
// does not exist, so the grant route is no oracle for group names.
|
|
953
|
-
// No role-collision refusal:
|
|
954
|
-
//
|
|
967
|
+
// No role-collision refusal: the grant is written `group/<Name>`,
|
|
968
|
+
// which always resolves to the group.
|
|
955
969
|
const groups = await visibleGroups(user.email, (await defaultBranchPrincipals()).groups);
|
|
956
|
-
const canonical = canonicalRoleName(principal.group);
|
|
970
|
+
const canonical = canonicalRoleName(groupName(principal.group));
|
|
957
971
|
if (!groups.some((g) => canonicalRoleName(g) === canonical)) {
|
|
958
972
|
throw new AccessMutationError(
|
|
959
973
|
`No group named "${principal.group}". Pick an existing group.`,
|
|
@@ -978,8 +992,8 @@ export function createAccessRoutes(
|
|
|
978
992
|
);
|
|
979
993
|
}
|
|
980
994
|
}
|
|
981
|
-
// Splice shape: group →
|
|
982
|
-
//
|
|
995
|
+
// Splice shape: group → explicit `group/<Name>` token; role → explicit
|
|
996
|
+
// `role/<Name>` token (see asSplicePrincipal).
|
|
983
997
|
const splicePrincipal = asSplicePrincipal(principal);
|
|
984
998
|
|
|
985
999
|
const { gatePath } = gateAndEditPaths(kind, repoRelTarget);
|
|
@@ -1047,18 +1061,12 @@ export function createAccessRoutes(
|
|
|
1047
1061
|
try {
|
|
1048
1062
|
const mode = (req.body as { mode?: unknown }).mode;
|
|
1049
1063
|
const { repoRelTarget, kind, principal: routePrincipal } = parseMutationBody(req.body);
|
|
1050
|
-
// A group principal converts straight to
|
|
1051
|
-
//
|
|
1052
|
-
//
|
|
1064
|
+
// A group principal converts straight to its `group/<Name>` token — no
|
|
1065
|
+
// existence check (revoking a grant whose group has since vanished must
|
|
1066
|
+
// keep working). Which spellings a revoke strips is the mutation
|
|
1067
|
+
// service's call: `group/<Name>` never matches `role/<Name>`, and the
|
|
1068
|
+
// bare name only when no role of that name owns it.
|
|
1053
1069
|
const principal = asSplicePrincipal(routePrincipal);
|
|
1054
|
-
// GROUP revokes match the EXACT bare token only. The service's own
|
|
1055
|
-
// shadow probe decides exact-vs-name for roles, but it cannot know a
|
|
1056
|
-
// bare token was a GROUP once that group vanished from the active
|
|
1057
|
-
// source — the name would read "unshadowed" and name-level matching
|
|
1058
|
-
// would strip a same-named role's live `role/<Name>` grant. The route
|
|
1059
|
-
// still knows the caller's kind, so it pins the matching here.
|
|
1060
|
-
const revokeOpts =
|
|
1061
|
-
routePrincipal.kind === 'group' ? ({ tokenMatch: 'exact' } as const) : undefined;
|
|
1062
1070
|
// Optional `verb` scopes ALL three paths to a single verb: a default revoke
|
|
1063
1071
|
// strips just that verb; remove-from-parent removes just that verb on the
|
|
1064
1072
|
// ancestor; deny-here denies just that verb at the target. Absent ⇒ the
|
|
@@ -1114,7 +1122,7 @@ export function createAccessRoutes(
|
|
|
1114
1122
|
);
|
|
1115
1123
|
}
|
|
1116
1124
|
// Scope the ancestor revoke to the same verb the user acted on (if any).
|
|
1117
|
-
await mutation.revoke(workspaceId, 'folder', ancestorDir, principal, user.email, verb
|
|
1125
|
+
await mutation.revoke(workspaceId, 'folder', ancestorDir, principal, user.email, verb);
|
|
1118
1126
|
});
|
|
1119
1127
|
|
|
1120
1128
|
accessControl.invalidate(workspaceId);
|
|
@@ -1133,7 +1141,7 @@ export function createAccessRoutes(
|
|
|
1133
1141
|
await mutation.assertTargetHoldsText(workspaceId, kind, repoRelTarget);
|
|
1134
1142
|
await withEditLock(workspaceId, branch, gatePath, user, async () => {
|
|
1135
1143
|
// Scope the deny to the same verb the user acted on (if any).
|
|
1136
|
-
await mutation.denyHere(workspaceId, kind, repoRelTarget, principal, verb
|
|
1144
|
+
await mutation.denyHere(workspaceId, kind, repoRelTarget, principal, verb);
|
|
1137
1145
|
});
|
|
1138
1146
|
accessControl.invalidate(workspaceId);
|
|
1139
1147
|
logger('access.revoke.deny-here').info(
|
|
@@ -1152,7 +1160,7 @@ export function createAccessRoutes(
|
|
|
1152
1160
|
const editPath = gatePath;
|
|
1153
1161
|
let changed = false;
|
|
1154
1162
|
await withEditLock(workspaceId, branch, editPath, user, async () => {
|
|
1155
|
-
const r = await mutation.revoke(workspaceId, kind, repoRelTarget, principal, user.email, verb
|
|
1163
|
+
const r = await mutation.revoke(workspaceId, kind, repoRelTarget, principal, user.email, verb);
|
|
1156
1164
|
changed = r.changed;
|
|
1157
1165
|
});
|
|
1158
1166
|
|
|
@@ -1249,7 +1257,7 @@ export function createAccessRoutes(
|
|
|
1249
1257
|
// surface). The frontend hides the page, but the API must gate too — the
|
|
1250
1258
|
// roster exposes every role + member email.
|
|
1251
1259
|
await assertRolesAdmin(user.email);
|
|
1252
|
-
res.json({ roles: await rolesAdmin.getRoster() });
|
|
1260
|
+
res.json({ roles: await rolesAdmin.getRoster(user.email) });
|
|
1253
1261
|
} catch (err) {
|
|
1254
1262
|
const { status, body } = toHttpError(err);
|
|
1255
1263
|
res.status(status).json(body);
|
|
@@ -48,8 +48,9 @@
|
|
|
48
48
|
import path from 'node:path';
|
|
49
49
|
import { logger } from '../../shared/logging.js';
|
|
50
50
|
|
|
51
|
-
import {
|
|
52
|
-
import {
|
|
51
|
+
import { type WriteValidator, LockingFilesystem } from '../kb-fs/index.js';
|
|
52
|
+
import type { WorkflowDomainError } from '../../shared/domain-errors.js';
|
|
53
|
+
import { PushNeedsAgentResolutionError } from '../../shared/domain-errors.js';
|
|
53
54
|
import { isAbsence } from '../../shared/fs.contract.js';
|
|
54
55
|
import type { AuthUser, IWorkspaceService, IWorkflowService } from '@bevel-software/platform-shared';
|
|
55
56
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* really a group; the roles admin surface flags it with a convert action.
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
import { ADMIN_CANONICAL, canonicalRoleName } from '../access-model/
|
|
21
|
+
import { ADMIN_CANONICAL, canonicalRoleName } from '../access-model/index.js';
|
|
22
22
|
|
|
23
23
|
/** A capability an app surface gates on. Grow this union with the gates. */
|
|
24
24
|
export type Capability =
|
|
@@ -18,12 +18,10 @@ import path from 'node:path';
|
|
|
18
18
|
import { creatableRootDirNames, type KbLayout } from '@bevel-software/platform-shared';
|
|
19
19
|
import type { IFsProbe } from '../../shared/fs.contract.js';
|
|
20
20
|
import type { KbContext } from '../../shared/kb-context.js';
|
|
21
|
-
import type { WorkspaceService } from '../workspace/
|
|
21
|
+
import type { WorkspaceService } from '../workspace/index.js';
|
|
22
22
|
import type { IAccessControl } from './access-control.interface.js';
|
|
23
|
-
import { AccessConfigError, AccessDeniedError } from '../access-model/
|
|
24
|
-
import {
|
|
25
|
-
import { toKbRelative } from '../access-model/kb-read-filter.js';
|
|
26
|
-
import type { ChangeReadVerdict, ChangeTargetKind, IChangeReadGate } from '../access-model/change-gate.js';
|
|
23
|
+
import { AccessConfigError, AccessDeniedError, SYNCED_GROUPS_YAML, toKbRelative } from '../access-model/index.js';
|
|
24
|
+
import type { ChangeReadVerdict, ChangeTargetKind, IChangeReadGate } from '../access-model/index.js';
|
|
27
25
|
|
|
28
26
|
/**
|
|
29
27
|
* Whether `kbRel` (repo-relative) is, or lies inside, a folder directly under
|
|
@@ -34,17 +34,15 @@ const log = logger('creator-access');
|
|
|
34
34
|
|
|
35
35
|
import type { IFsProbe } from '../../shared/fs.contract.js';
|
|
36
36
|
import type { KbContext } from '../../shared/kb-context.js';
|
|
37
|
-
import type { WorkspaceService } from '../workspace/
|
|
37
|
+
import type { WorkspaceService } from '../workspace/index.js';
|
|
38
38
|
import type { IAccessControl } from './access-control.interface.js';
|
|
39
|
-
import { spliceGrant, type Principal } from '../access-model/
|
|
40
|
-
import { isAccessMdPath } from '../access-model/access-grammar.js';
|
|
41
|
-
import { toKbRelative } from '../access-model/kb-read-filter.js';
|
|
39
|
+
import { spliceGrant, type Principal, isAccessMdPath, toKbRelative } from '../access-model/index.js';
|
|
42
40
|
import {
|
|
43
41
|
creatorPrincipal,
|
|
44
42
|
type CreationGrantPlan,
|
|
45
43
|
type Creator,
|
|
46
44
|
type ICreatorAccess,
|
|
47
|
-
} from '../access-model/
|
|
45
|
+
} from '../access-model/index.js';
|
|
48
46
|
|
|
49
47
|
export class CreatorAccessService implements ICreatorAccess {
|
|
50
48
|
constructor(
|
|
@@ -3,8 +3,8 @@ import { logger } from '../../shared/logging.js';
|
|
|
3
3
|
|
|
4
4
|
const log = logger('directory-sync');
|
|
5
5
|
import type { AuthUser } from '@bevel-software/platform-shared';
|
|
6
|
-
import type { Database } from '../database/
|
|
7
|
-
import { users } from '../database/
|
|
6
|
+
import type { Database } from '../database/index.js';
|
|
7
|
+
import { users } from '../database/index.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Synthetic identity for the synced-groups materializer's commits: every
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import type { AuthUser } from '@bevel-software/platform-shared';
|
|
3
|
-
import type { IAdminAccessService } from '../admin/
|
|
4
|
-
import { canonicalRoleName } from '../access-model/
|
|
3
|
+
import type { IAdminAccessService } from '../admin/index.js';
|
|
4
|
+
import { canonicalRoleName } from '../access-model/index.js';
|
|
5
5
|
import { sendError as sharedSendError, requireNonEmptyString as sharedRequireNonEmptyString } from './admin-route-helpers.js';
|
|
6
6
|
import type { GroupsAdminService } from './groups-admin.service.js';
|
|
7
|
-
import '../auth/
|
|
7
|
+
import '../auth/index.js'; // Express Request augmentation
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Admin surface for GROUPS — the "who you are" half of the roles/groups
|
|
@@ -50,9 +50,11 @@ export function createGroupsAdminRoutes(deps: {
|
|
|
50
50
|
// role assignments) + `groupsHealth` (the broken-source banner marker; a
|
|
51
51
|
// broken MANUAL groups.yaml instead answers 422 with the parse message so
|
|
52
52
|
// the operator sees what to fix).
|
|
53
|
-
router.get('/admin/groups', requireAdmin, async (
|
|
53
|
+
router.get('/admin/groups', requireAdmin, async (req, res) => {
|
|
54
54
|
try {
|
|
55
|
-
|
|
55
|
+
// A read needs no commit attribution: the roster is filtered for the
|
|
56
|
+
// email `requireAdmin` just checked, with no second user lookup to fail.
|
|
57
|
+
res.json(await groupsAdmin.getRoster(req.userEmail!));
|
|
56
58
|
} catch (err) {
|
|
57
59
|
sendError(res, err);
|
|
58
60
|
}
|
|
@@ -12,10 +12,12 @@
|
|
|
12
12
|
* provider then; a second write surface would fragment org management —
|
|
13
13
|
* which is the thing the mode model exists to prevent.
|
|
14
14
|
* - COLLISION GATE: create/rename refuse a name whose canonical form is a
|
|
15
|
-
* roles.yaml role
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* precedence then resolves
|
|
15
|
+
* roles.yaml role — a group sharing a role's name is reachable only as
|
|
16
|
+
* `group/<name>` and is far more likely a mistake than an intent. The IdP
|
|
17
|
+
* (or a hand-edited groups.yaml) can still produce collisions, which
|
|
18
|
+
* precedence then resolves: the bare name is the ROLE, `group/<name>` the
|
|
19
|
+
* group. The roster names every rule that spells such a group bare
|
|
20
|
+
* (`bareNameResolvesToRole`) so an Admin can rewrite it.
|
|
19
21
|
* - DEGRADE LOUDLY: a broken groups source never fails access resolution
|
|
20
22
|
* closed — groups contribute nothing and the model carries a
|
|
21
23
|
* `groupsHealth` marker, which the roster exposes so the Groups & Members page can
|
|
@@ -26,19 +28,23 @@
|
|
|
26
28
|
*/
|
|
27
29
|
|
|
28
30
|
import { workspaceIdForBranch } from '../../shared/workspace-id.js';
|
|
29
|
-
import type { WorkflowEventBus } from '../workflow/
|
|
31
|
+
import type { WorkflowEventBus } from '../workflow/index.js';
|
|
30
32
|
import type { AuthUser, IWorkspaceService, IWorkflowService } from '@bevel-software/platform-shared';
|
|
31
33
|
import { WorkflowDomainError } from '../../shared/domain-errors.js';
|
|
34
|
+
import type { ITreeWalker } from '../../shared/fs.contract.js';
|
|
32
35
|
import type { IAccessControl } from './access-control.interface.js';
|
|
33
36
|
import {
|
|
34
37
|
GROUP_REF_PREFIX,
|
|
38
|
+
GROUP_TOKEN_PREFIX,
|
|
35
39
|
canonicalRoleName,
|
|
36
40
|
hasAccessFrontmatterExtension,
|
|
37
|
-
|
|
41
|
+
GROUPS_YAML,
|
|
42
|
+
SYNCED_GROUPS_YAML,
|
|
43
|
+
validateGroupsFile,
|
|
44
|
+
makeRolesYamlWriteValidator,
|
|
45
|
+
} from '../access-model/index.js';
|
|
38
46
|
import { loadActiveGroups, type GroupsHealth } from './access-control.service.js';
|
|
39
|
-
import { GROUPS_YAML, SYNCED_GROUPS_YAML, validateGroupsFile } from '../access-model/group-files.js';
|
|
40
47
|
import { parseRolesModel, removeGroupRefsEverywhere, renameGroupRefs, isGroupRefMember } from './roles-edit.js';
|
|
41
|
-
import { makeRolesYamlWriteValidator } from '../access-model/roles-yaml-guard.js';
|
|
42
48
|
import {
|
|
43
49
|
GroupsEditError,
|
|
44
50
|
parseGroupsModel,
|
|
@@ -50,7 +56,7 @@ import {
|
|
|
50
56
|
type GroupsEditResult,
|
|
51
57
|
} from './groups-edit.js';
|
|
52
58
|
import { AdminLockedCommits, type LockedWrite } from './admin-locked-commit.js';
|
|
53
|
-
import { KbReferenceScanner } from './reference-scan.js';
|
|
59
|
+
import { KbReferenceScanner, readableReferences, translateRewriteWriteRefusal } from './reference-scan.js';
|
|
54
60
|
|
|
55
61
|
/** Where role→group assignments live (`group:<canonical>` member entries). */
|
|
56
62
|
const ROLES_YAML = 'roles.yaml';
|
|
@@ -70,8 +76,20 @@ export interface GroupRosterEntry {
|
|
|
70
76
|
canonical: string;
|
|
71
77
|
displayName: string;
|
|
72
78
|
members: string[];
|
|
73
|
-
/**
|
|
79
|
+
/**
|
|
80
|
+
* Every access rule referencing this group — same scan the rename uses —
|
|
81
|
+
* in a file the roster's viewer can read (see `getRoster`).
|
|
82
|
+
*/
|
|
74
83
|
referencedBy: { path: string; verb: string }[];
|
|
84
|
+
/**
|
|
85
|
+
* The access rules that name this group's name BARE while a ROLE of the same
|
|
86
|
+
* name exists. A bare name is the role, so these rules grant the role, not
|
|
87
|
+
* this group — rules written while bare names still meant the group change
|
|
88
|
+
* meaning here. An Admin rewrites each as `group/<Name>` if the group was
|
|
89
|
+
* meant. Empty when no role shares the name. Only files the roster's
|
|
90
|
+
* viewer can read are listed (see `getRoster`).
|
|
91
|
+
*/
|
|
92
|
+
bareNameResolvesToRole: { path: string; verb: string }[];
|
|
75
93
|
/**
|
|
76
94
|
* Canonical names of roles carrying a `group:<canonical>` assignment to
|
|
77
95
|
* this group — so the delete confirm can warn that those roles will lose
|
|
@@ -102,6 +120,8 @@ export class GroupsAdminService {
|
|
|
102
120
|
private readonly workspaceService: IWorkspaceService,
|
|
103
121
|
private readonly workflowService: IWorkflowService,
|
|
104
122
|
private readonly accessControl: IAccessControl,
|
|
123
|
+
/** The composition root's walk — the one the resolver finds access rules with. */
|
|
124
|
+
disk: ITreeWalker,
|
|
105
125
|
private readonly kbDirName: string,
|
|
106
126
|
/** Live-binding thunk — see RolesAdminService's identical note. */
|
|
107
127
|
private readonly defaultBranchOf: () => string,
|
|
@@ -122,7 +142,7 @@ export class GroupsAdminService {
|
|
|
122
142
|
// The event bus keeps the roster's `referencedBy` fresh: a share-dialog
|
|
123
143
|
// grant/revoke on any access.md happens outside this service, and the
|
|
124
144
|
// scanner invalidates its cache on those writes' events (TTL as backstop).
|
|
125
|
-
this.references = new KbReferenceScanner(workspaceService, kbDirName, eventBus);
|
|
145
|
+
this.references = new KbReferenceScanner(workspaceService, disk, kbDirName, eventBus);
|
|
126
146
|
}
|
|
127
147
|
|
|
128
148
|
private get defaultBranch(): string {
|
|
@@ -167,8 +187,13 @@ export class GroupsAdminService {
|
|
|
167
187
|
* fallback to manual, which would resurrect retired groups).
|
|
168
188
|
* - Manual mode, broken groups.yaml: 422 with the parse message — the
|
|
169
189
|
* repair path must show the operator what to fix, never a dead page.
|
|
190
|
+
*
|
|
191
|
+
* `viewerEmail` is who the roster is for: `referencedBy` and
|
|
192
|
+
* `bareNameResolvesToRole` name only the files that viewer can read. Being
|
|
193
|
+
* an Admin is not read access to every file, and a path is itself a
|
|
194
|
+
* disclosure.
|
|
170
195
|
*/
|
|
171
|
-
async getRoster(): Promise<GroupsRoster> {
|
|
196
|
+
async getRoster(viewerEmail: string): Promise<GroupsRoster> {
|
|
172
197
|
const workspaceId = await this.ensureWorkspace();
|
|
173
198
|
const active = await loadActiveGroups((f) => this.locked.readKbFile(workspaceId, f));
|
|
174
199
|
if (active.sourceFile === GROUPS_YAML && !active.health.ok) {
|
|
@@ -178,7 +203,7 @@ export class GroupsAdminService {
|
|
|
178
203
|
reason: active.health.reason,
|
|
179
204
|
});
|
|
180
205
|
}
|
|
181
|
-
const [referencesByToken, assignedByGroup] = await Promise.all([
|
|
206
|
+
const [referencesByToken, { byGroup: assignedByGroup, roles }] = await Promise.all([
|
|
182
207
|
this.references.scan(workspaceId),
|
|
183
208
|
this.rolesReferencingGroups(workspaceId),
|
|
184
209
|
]);
|
|
@@ -191,19 +216,44 @@ export class GroupsAdminService {
|
|
|
191
216
|
// IdP members render sorted (machine-generated file, no author order
|
|
192
217
|
// to honour); manual members keep file order (the editor's view).
|
|
193
218
|
members: mode === 'idp' ? [...def.emails].sort() : [...def.emails],
|
|
194
|
-
// A group's references are its
|
|
195
|
-
//
|
|
196
|
-
//
|
|
197
|
-
//
|
|
198
|
-
// only `role/<name>`). Explicit `role/<name>` hits are never a group
|
|
219
|
+
// A group's references are its `group/<name>` hits, plus its BARE
|
|
220
|
+
// hits while no role shares the name — a bare name is the role when
|
|
221
|
+
// one exists (the roles roster is the mirror image: it counts the
|
|
222
|
+
// bare hits then). Explicit `role/<name>` hits are never a group
|
|
199
223
|
// reference.
|
|
200
|
-
referencedBy:
|
|
224
|
+
referencedBy: [
|
|
225
|
+
...(referencesByToken.get(`${GROUP_TOKEN_PREFIX}${canonical}`) ?? []),
|
|
226
|
+
...(roles.has(canonical) ? [] : referencesByToken.get(canonical) ?? []),
|
|
227
|
+
],
|
|
228
|
+
bareNameResolvesToRole: roles.has(canonical) ? referencesByToken.get(canonical) ?? [] : [],
|
|
201
229
|
assignedToRoles: assignedByGroup.get(canonical) ?? [],
|
|
202
230
|
});
|
|
203
231
|
}
|
|
232
|
+
await this.keepReadableReferences(workspaceId, viewerEmail, groups);
|
|
204
233
|
return { mode, groups, groupsHealth: active.health };
|
|
205
234
|
}
|
|
206
235
|
|
|
236
|
+
/**
|
|
237
|
+
* Drop every `referencedBy` and `bareNameResolvesToRole` row whose file the
|
|
238
|
+
* viewer cannot read. Dropped, not counted: Admin status does not grant
|
|
239
|
+
* read, so a count of rules in unreadable content would be a disclosure.
|
|
240
|
+
*/
|
|
241
|
+
private async keepReadableReferences(
|
|
242
|
+
workspaceId: string,
|
|
243
|
+
viewerEmail: string,
|
|
244
|
+
groups: GroupRosterEntry[],
|
|
245
|
+
): Promise<void> {
|
|
246
|
+
const paths = [
|
|
247
|
+
...new Set(groups.flatMap((g) => [...g.referencedBy, ...g.bareNameResolvesToRole].map((r) => r.path))),
|
|
248
|
+
];
|
|
249
|
+
if (paths.length === 0) return;
|
|
250
|
+
const readable = await this.accessControl.canReadBatch(workspaceId, viewerEmail, paths);
|
|
251
|
+
for (const g of groups) {
|
|
252
|
+
g.referencedBy = readableReferences(g.referencedBy, readable);
|
|
253
|
+
g.bareNameResolvesToRole = readableReferences(g.bareNameResolvesToRole, readable);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
207
257
|
/**
|
|
208
258
|
* Display names from the ACTIVE group source (synced in IdP mode, manual
|
|
209
259
|
* otherwise). Malformed files degrade to an empty list, matching the
|
|
@@ -231,7 +281,7 @@ export class GroupsAdminService {
|
|
|
231
281
|
await this.assertManualMode(await this.ensureWorkspace());
|
|
232
282
|
await this.assertRoleNameFree(displayName);
|
|
233
283
|
await this.runEdit(actor, (text) => editCreateGroup(text, displayName));
|
|
234
|
-
return this.getRoster();
|
|
284
|
+
return this.getRoster(actor.email);
|
|
235
285
|
}
|
|
236
286
|
|
|
237
287
|
/**
|
|
@@ -281,17 +331,17 @@ export class GroupsAdminService {
|
|
|
281
331
|
);
|
|
282
332
|
this.afterWrite(workspaceId, actor, files.map((f) => f.repoRel));
|
|
283
333
|
});
|
|
284
|
-
return this.getRoster();
|
|
334
|
+
return this.getRoster(actor.email);
|
|
285
335
|
}
|
|
286
336
|
|
|
287
337
|
async addMember(actor: AuthUser, canonical: string, email: string): Promise<GroupsRoster> {
|
|
288
338
|
await this.runEdit(actor, (text) => editAddMember(text, canonical, email));
|
|
289
|
-
return this.getRoster();
|
|
339
|
+
return this.getRoster(actor.email);
|
|
290
340
|
}
|
|
291
341
|
|
|
292
342
|
async removeMember(actor: AuthUser, canonical: string, email: string): Promise<GroupsRoster> {
|
|
293
343
|
await this.runEdit(actor, (text) => editRemoveMember(text, canonical, email));
|
|
294
|
-
return this.getRoster();
|
|
344
|
+
return this.getRoster(actor.email);
|
|
295
345
|
}
|
|
296
346
|
|
|
297
347
|
/**
|
|
@@ -311,7 +361,7 @@ export class GroupsAdminService {
|
|
|
311
361
|
await this.locked.withFileLocks(workspaceId, actor, [GROUPS_YAML, ROLES_YAML], () =>
|
|
312
362
|
this.renameGroupLocked(workspaceId, actor, canonical, newCanonical, newDisplayName),
|
|
313
363
|
);
|
|
314
|
-
return this.getRoster();
|
|
364
|
+
return this.getRoster(actor.email);
|
|
315
365
|
}
|
|
316
366
|
|
|
317
367
|
private async renameGroupLocked(
|
|
@@ -329,16 +379,20 @@ export class GroupsAdminService {
|
|
|
329
379
|
files.push({ repoRel: GROUPS_YAML, content: groupsEdit.text, original: text });
|
|
330
380
|
}
|
|
331
381
|
if (newCanonical !== canonical) {
|
|
332
|
-
// Grant references (
|
|
333
|
-
//
|
|
334
|
-
//
|
|
335
|
-
//
|
|
336
|
-
//
|
|
382
|
+
// Grant references (`group/<name>` tokens in access.md + node
|
|
383
|
+
// frontmatter, and the bare name while no role owns it), rewritten to
|
|
384
|
+
// the explicit `group/<New Name>`. The rewrite returns each file's
|
|
385
|
+
// ORIGINAL text alongside the new content, so the rollback snapshots
|
|
386
|
+
// reuse the read it already did — no second full-KB pass. Explicit
|
|
387
|
+
// `role/<name>` tokens, and a bare name a role owns, are untouched by
|
|
388
|
+
// design: they reference the ROLE, not this group.
|
|
389
|
+
const { roles } = await this.rolesReferencingGroups(workspaceId);
|
|
337
390
|
const refWrites = await this.references.rewriteReferences(
|
|
338
391
|
workspaceId,
|
|
339
|
-
canonical,
|
|
340
|
-
newDisplayName.trim()
|
|
392
|
+
[`${GROUP_TOKEN_PREFIX}${canonical}`, ...(roles.has(canonical) ? [] : [canonical])],
|
|
393
|
+
`${GROUP_TOKEN_PREFIX}${newDisplayName.trim()}`,
|
|
341
394
|
(message, cause) => new GroupsAdminError(message, 422, { cause }),
|
|
395
|
+
(paths) => this.accessControl.canReadBatch(workspaceId, actor.email, paths),
|
|
342
396
|
);
|
|
343
397
|
for (const w of refWrites) {
|
|
344
398
|
files.push({ repoRel: w.repoRelativePath, content: w.content, original: w.original });
|
|
@@ -374,12 +428,22 @@ export class GroupsAdminService {
|
|
|
374
428
|
// Roster locks are already ours (withFileLocks; strict same-user acquire
|
|
375
429
|
// forbids LockingFilesystem here). Grant-reference candidates are written
|
|
376
430
|
// unlocked — same exposure every reference rewrite has always had.
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
431
|
+
// The commit gates every file on the actor's write rules and restores all
|
|
432
|
+
// of them on a refusal; a refused file the actor may not read goes unnamed.
|
|
433
|
+
try {
|
|
434
|
+
await this.locked.writeAndCommitLocked(
|
|
435
|
+
workspaceId,
|
|
436
|
+
actor,
|
|
437
|
+
files,
|
|
438
|
+
`Rename group ${canonical} → ${newDisplayName.trim()}`,
|
|
439
|
+
);
|
|
440
|
+
} catch (err) {
|
|
441
|
+
throw await translateRewriteWriteRefusal(
|
|
442
|
+
err,
|
|
443
|
+
(paths) => this.accessControl.canReadBatch(workspaceId, actor.email, paths),
|
|
444
|
+
(message) => new GroupsAdminError(message, 422),
|
|
445
|
+
);
|
|
446
|
+
}
|
|
383
447
|
this.afterWrite(workspaceId, actor, files.map((f) => f.repoRel));
|
|
384
448
|
}
|
|
385
449
|
|
|
@@ -442,12 +506,12 @@ export class GroupsAdminService {
|
|
|
442
506
|
}
|
|
443
507
|
|
|
444
508
|
/**
|
|
445
|
-
* Refuse a group name that IS a role. Bare-name precedence (
|
|
446
|
-
*
|
|
447
|
-
*
|
|
448
|
-
* far more likely
|
|
449
|
-
* collisions still happen (the sync writer doesn't consult
|
|
450
|
-
* precedence resolves them.
|
|
509
|
+
* Refuse a group name that IS a role. Bare-name precedence (role-first)
|
|
510
|
+
* keeps the role safe either way, so this is deliberate FRICTION, not a
|
|
511
|
+
* correctness need: a group named after a role is reachable only as
|
|
512
|
+
* `group/<name>`, which is far more likely a surprise than an intent.
|
|
513
|
+
* IdP-sourced collisions still happen (the sync writer doesn't consult
|
|
514
|
+
* roles.yaml) and precedence resolves them.
|
|
451
515
|
*/
|
|
452
516
|
private async assertRoleNameFree(displayName: string): Promise<void> {
|
|
453
517
|
const workspaceId = await this.ensureWorkspace();
|
|
@@ -463,7 +527,7 @@ export class GroupsAdminService {
|
|
|
463
527
|
}
|
|
464
528
|
if (roles.some((r) => canonicalRoleName(r.displayName) === canonical)) {
|
|
465
529
|
throw new GroupsAdminError(
|
|
466
|
-
`'${displayName.trim()}' is a role name — name the group something else (
|
|
530
|
+
`'${displayName.trim()}' is a role name — name the group something else (in access rules the bare name '${displayName.trim()}' means the role).`,
|
|
467
531
|
422,
|
|
468
532
|
);
|
|
469
533
|
}
|
|
@@ -474,17 +538,22 @@ export class GroupsAdminService {
|
|
|
474
538
|
* Advisory (feeds the roster's `assignedToRoles` warning field): a broken
|
|
475
539
|
* roles.yaml yields an empty map rather than failing the roster.
|
|
476
540
|
*/
|
|
477
|
-
private async rolesReferencingGroups(
|
|
541
|
+
private async rolesReferencingGroups(
|
|
542
|
+
workspaceId: string,
|
|
543
|
+
): Promise<{ byGroup: Map<string, string[]>; roles: Set<string> }> {
|
|
478
544
|
const rolesText = (await this.locked.readKbFile(workspaceId, ROLES_YAML)) ?? '';
|
|
479
545
|
const byGroup = new Map<string, string[]>();
|
|
546
|
+
// Every role's canonical name — who owns a bare name (role-first).
|
|
547
|
+
const roleNames = new Set<string>();
|
|
480
548
|
let roles;
|
|
481
549
|
try {
|
|
482
550
|
roles = parseRolesModel(rolesText);
|
|
483
551
|
} catch {
|
|
484
|
-
return byGroup;
|
|
552
|
+
return { byGroup, roles: roleNames };
|
|
485
553
|
}
|
|
486
554
|
for (const role of roles) {
|
|
487
555
|
const roleCanonical = canonicalRoleName(role.displayName);
|
|
556
|
+
roleNames.add(roleCanonical);
|
|
488
557
|
for (const member of role.members) {
|
|
489
558
|
if (!isGroupRefMember(member)) continue;
|
|
490
559
|
const groupCanonical = canonicalRoleName(member.slice(GROUP_REF_PREFIX.length));
|
|
@@ -496,7 +565,7 @@ export class GroupsAdminService {
|
|
|
496
565
|
}
|
|
497
566
|
}
|
|
498
567
|
}
|
|
499
|
-
return byGroup;
|
|
568
|
+
return { byGroup, roles: roleNames };
|
|
500
569
|
}
|
|
501
570
|
|
|
502
571
|
private async runEdit(actor: AuthUser, pre: (text: string) => GroupsEditResult): Promise<void> {
|