@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
|
@@ -27,19 +27,27 @@
|
|
|
27
27
|
* has evicted past `n`, the route emits `{ kind: 'resync' }` so the
|
|
28
28
|
* client refetches state from scratch.
|
|
29
29
|
*
|
|
30
|
+
* **Who receives what** — the bus picks the sessions that HEAR about an
|
|
31
|
+
* event (focus for workspace events, owner for user events); before writing
|
|
32
|
+
* it, the route asks the delivery rule (`IEventDelivery`) whether this
|
|
33
|
+
* session's person may have it, and in what form (`events-delivery.ts`). Live fan-out and replay go
|
|
34
|
+
* through the same rule, and through one ordered queue per session, so a
|
|
35
|
+
* slow verdict never reorders a session's stream.
|
|
36
|
+
*
|
|
30
37
|
* **Heartbeat** — every 25 s the route writes an SSE comment (`:\n\n`).
|
|
31
38
|
* Keeps proxies (nginx, Coolify's Traefik, Cloudflare) from killing the
|
|
32
39
|
* connection as idle. Cheap (~15 bytes), eliminates a whole class of bug.
|
|
33
40
|
*/
|
|
34
41
|
|
|
35
|
-
import type {
|
|
42
|
+
import type { Response } from 'express';
|
|
36
43
|
import { logger } from '../../shared/logging.js';
|
|
37
44
|
|
|
38
45
|
const log = logger('events');
|
|
39
46
|
import express from 'express';
|
|
40
|
-
import type
|
|
47
|
+
import { type WorkflowEvent } from '@bevel-software/platform-shared';
|
|
41
48
|
import type { WorkflowEventBus } from './event-bus.js';
|
|
42
|
-
import '
|
|
49
|
+
import type { IEventDelivery } from './events-delivery.js';
|
|
50
|
+
import '../auth/index.js'; // Express Request augmentation
|
|
43
51
|
|
|
44
52
|
/** Interval between SSE keep-alive comments (ms). 25 s sits comfortably under
|
|
45
53
|
* the typical 30–100 s proxy idle timeout. */
|
|
@@ -73,15 +81,16 @@ interface ActiveSession {
|
|
|
73
81
|
* suggestion branch got no `file-changed` for the images on screen and kept
|
|
74
82
|
* showing a screenshot a teammate had already replaced.
|
|
75
83
|
*
|
|
76
|
-
* The client declares the list
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* reader may open what changed is settled by the routes that serve it.
|
|
84
|
+
* The client declares the list, and may name any workspace in it: this is
|
|
85
|
+
* a delivery filter, not an access check. The access check is the
|
|
86
|
+
* delivery rule (`IEventDelivery`) every event passes on its way to the session.
|
|
80
87
|
*/
|
|
81
88
|
focusedWorkspaceIds: string[];
|
|
82
89
|
/** Set when the SSE connection closes. Used by the focus POST so a
|
|
83
90
|
* request that arrives after the connection drops 404s cleanly. */
|
|
84
91
|
closed: boolean;
|
|
92
|
+
/** Tail of this session's writes: each event waits for its verdict, in arrival order. */
|
|
93
|
+
queue: Promise<void>;
|
|
85
94
|
/** The Express response stream backing this session. Stored so a
|
|
86
95
|
* same-id reconnect can `end()` the old response and close its TCP
|
|
87
96
|
* socket immediately, rather than leaving a dangling connection that
|
|
@@ -97,6 +106,7 @@ interface ActiveSession {
|
|
|
97
106
|
export function createEventsRoutes(
|
|
98
107
|
bus: WorkflowEventBus,
|
|
99
108
|
authMiddleware: express.RequestHandler,
|
|
109
|
+
delivery: IEventDelivery,
|
|
100
110
|
): express.Router {
|
|
101
111
|
const router = express.Router();
|
|
102
112
|
|
|
@@ -114,6 +124,7 @@ export function createEventsRoutes(
|
|
|
114
124
|
return;
|
|
115
125
|
}
|
|
116
126
|
const userId = req.userId!;
|
|
127
|
+
const viewer = { userId, email: req.userEmail };
|
|
117
128
|
|
|
118
129
|
// SSE headers. `X-Accel-Buffering: no` tells nginx not to buffer the
|
|
119
130
|
// response (would batch events behind a flush boundary, killing
|
|
@@ -158,15 +169,24 @@ export function createEventsRoutes(
|
|
|
158
169
|
userId,
|
|
159
170
|
focusedWorkspaceIds: [],
|
|
160
171
|
closed: false,
|
|
172
|
+
queue: Promise.resolve(),
|
|
161
173
|
res,
|
|
162
174
|
// Filled in below once `unsubscribe` + `heartbeat` exist.
|
|
163
175
|
cleanup: () => {},
|
|
164
176
|
};
|
|
165
177
|
sessions.set(sessionId, session);
|
|
166
178
|
|
|
179
|
+
// Every event this session hears goes through the delivery rule, in the
|
|
180
|
+
// order it arrived: the verdict is async, the stream must not reorder.
|
|
167
181
|
const push = (event: WorkflowEvent): void => {
|
|
168
182
|
if (session.closed) return;
|
|
169
|
-
|
|
183
|
+
const verdict = delivery.judge(event, viewer);
|
|
184
|
+
session.queue = session.queue.then(async () => {
|
|
185
|
+
const deliverable = await verdict;
|
|
186
|
+
if (deliverable && !session.closed) writeSseEvent(res, deliverable);
|
|
187
|
+
}).catch((err: unknown) => {
|
|
188
|
+
log.warn(`write to session=${sessionId} failed:`, { err });
|
|
189
|
+
});
|
|
170
190
|
};
|
|
171
191
|
|
|
172
192
|
const unsubscribe = bus.subscribe({
|
|
@@ -196,7 +216,8 @@ export function createEventsRoutes(
|
|
|
196
216
|
reason: 'last-event-id too old; ring buffer evicted',
|
|
197
217
|
});
|
|
198
218
|
} else {
|
|
199
|
-
|
|
219
|
+
// The same rule as live delivery, queued ahead of anything live.
|
|
220
|
+
for (const event of replay) push(event);
|
|
200
221
|
}
|
|
201
222
|
}
|
|
202
223
|
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
*/
|
|
59
59
|
|
|
60
60
|
import { and, eq, gt, inArray, lte } from 'drizzle-orm';
|
|
61
|
-
import type { Database } from '../database/
|
|
62
|
-
import { fileLocks } from '../database/
|
|
61
|
+
import type { Database } from '../database/index.js';
|
|
62
|
+
import { fileLocks } from '../database/index.js';
|
|
63
63
|
import type { AcquireLockResult, AuthUser, FileLock } from '@bevel-software/platform-shared';
|
|
64
64
|
import { WorkflowValidationError } from '../../shared/domain-errors.js';
|
|
65
65
|
import { canonicalFileIdentity } from '../../shared/canonical-file-identity.js';
|
|
@@ -8,6 +8,8 @@ import os from 'node:os';
|
|
|
8
8
|
import type { WorkspaceService } from '../../../workspace/workspace.service.js';
|
|
9
9
|
import { WorkflowHooks } from '../../workflow-hooks.js';
|
|
10
10
|
import { GitService } from '../git.service.js';
|
|
11
|
+
import { NodeGitRunner } from '../node-git-runner.js';
|
|
12
|
+
import type { IGitRunner } from '../../../../shared/git.contract.js';
|
|
11
13
|
|
|
12
14
|
const execFileAsync = promisify(execFile);
|
|
13
15
|
|
|
@@ -155,7 +157,7 @@ describe('GitService.listBranches', () => {
|
|
|
155
157
|
expect(names).toEqual(['alice/draft-one', 'current-company-state', 'target-company-state']);
|
|
156
158
|
});
|
|
157
159
|
|
|
158
|
-
it('returns local branches before remote-only ones,
|
|
160
|
+
it('returns local branches before remote-only ones, then alphabetically', async () => {
|
|
159
161
|
await seedWorkspace(root, workspaceId);
|
|
160
162
|
const svc = new GitService(
|
|
161
163
|
stubWorkspaceService(workspaceId, path.join(root, workspaceId)),
|
|
@@ -165,8 +167,7 @@ describe('GitService.listBranches', () => {
|
|
|
165
167
|
|
|
166
168
|
// current-company-state is the workspace clone's checked-out branch (the
|
|
167
169
|
// only local head); the rest are remote-only. The result order must be
|
|
168
|
-
// local-first then alphabetical
|
|
169
|
-
// with `Promise.all`, so this pins that the mapping preserves row order.
|
|
170
|
+
// local-first then alphabetical.
|
|
170
171
|
const branches = await svc.listBranches(workspaceId);
|
|
171
172
|
expect(branches.map((b) => b.name)).toEqual([
|
|
172
173
|
'current-company-state',
|
|
@@ -231,4 +232,130 @@ describe('GitService.listBranches', () => {
|
|
|
231
232
|
expect.arrayContaining([expect.objectContaining({ name: 'alice/draft-one' })]),
|
|
232
233
|
);
|
|
233
234
|
});
|
|
235
|
+
|
|
236
|
+
// A listing names branches; it counts nothing. Counting cost one to three
|
|
237
|
+
// `rev-list` spawns a branch — about 120 git processes a listing on a
|
|
238
|
+
// knowledge base with 121 branches — for numbers no listing reader shows.
|
|
239
|
+
it('runs no git per branch: a listing over many branches spawns the same few commands as one over three', async () => {
|
|
240
|
+
const { upstream } = await seedWorkspace(root, workspaceId);
|
|
241
|
+
const pusher = path.join(root, '.pusher');
|
|
242
|
+
await runGit(root, ['clone', upstream, pusher]);
|
|
243
|
+
const drafts = Array.from({ length: 12 }, (_, i) => `team/draft-${String(i).padStart(2, '0')}`);
|
|
244
|
+
for (const d of drafts) {
|
|
245
|
+
await runGit(pusher, ['checkout', '-q', '-b', d, 'origin/current-company-state']);
|
|
246
|
+
await runGit(pusher, ['commit', '--allow-empty', '-m', d]);
|
|
247
|
+
}
|
|
248
|
+
await runGit(pusher, ['push', '-q', 'origin', ...drafts]);
|
|
249
|
+
// The workspace's own branch carries an upstream and local commits too:
|
|
250
|
+
// exactly what the old listing counted against.
|
|
251
|
+
const repo = path.join(root, workspaceId, 'knowledge-base');
|
|
252
|
+
await runGit(repo, ['commit', '--allow-empty', '-m', 'unshared']);
|
|
253
|
+
|
|
254
|
+
const { runner, commands } = recordingRunner();
|
|
255
|
+
const svc = new GitService(
|
|
256
|
+
stubWorkspaceService(workspaceId, path.join(root, workspaceId)),
|
|
257
|
+
new WorkflowHooks(),
|
|
258
|
+
testKbContext(),
|
|
259
|
+
undefined,
|
|
260
|
+
null,
|
|
261
|
+
runner,
|
|
262
|
+
);
|
|
263
|
+
const branches = await svc.listBranches(workspaceId);
|
|
264
|
+
|
|
265
|
+
expect(branches.map((b) => b.name)).toEqual([
|
|
266
|
+
'current-company-state',
|
|
267
|
+
'alice/draft-one',
|
|
268
|
+
'target-company-state',
|
|
269
|
+
...drafts,
|
|
270
|
+
]);
|
|
271
|
+
expect(branches[0]).toEqual({ name: 'current-company-state', isProtected: true, hasRemote: true });
|
|
272
|
+
for (const b of branches) expect(Object.keys(b).sort()).toEqual(['hasRemote', 'isProtected', 'name']);
|
|
273
|
+
expect(commands.filter((c) => c === 'rev-list')).toEqual([]);
|
|
274
|
+
// Its fetch, and the two reads of what the repository holds — whatever
|
|
275
|
+
// the number of branches.
|
|
276
|
+
expect([...commands].sort()).toEqual(['fetch', 'for-each-ref', 'symbolic-ref']);
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
/** The real runner, recording the subcommand of every git it is asked to run. */
|
|
281
|
+
function recordingRunner(): { runner: IGitRunner; commands: string[] } {
|
|
282
|
+
const inner = new NodeGitRunner();
|
|
283
|
+
const commands: string[] = [];
|
|
284
|
+
const runner = {
|
|
285
|
+
defaultTimeoutMs: inner.defaultTimeoutMs,
|
|
286
|
+
credentials: inner.credentials,
|
|
287
|
+
run: async (cwd: string, args: string[], opts?: object) => {
|
|
288
|
+
// Skip `-c key=value` pairs: the subcommand is the first bare word.
|
|
289
|
+
let i = 0;
|
|
290
|
+
while (i < args.length && args[i].startsWith('-')) i += args[i] === '-c' ? 2 : 1;
|
|
291
|
+
commands.push(args[i] ?? '');
|
|
292
|
+
return inner.run(cwd, args, opts as never);
|
|
293
|
+
},
|
|
294
|
+
} as unknown as IGitRunner;
|
|
295
|
+
return { runner, commands };
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
describe('GitService.branchCounts', () => {
|
|
299
|
+
let root: string;
|
|
300
|
+
|
|
301
|
+
beforeEach(async () => {
|
|
302
|
+
root = await mkTmpRoot();
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
afterEach(async () => {
|
|
306
|
+
await fs.rm(root, { recursive: true, force: true, maxRetries: 10, retryDelay: 100 });
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
const draftWs = encodeURIComponent('alice/draft-one');
|
|
310
|
+
|
|
311
|
+
/** The draft's own workspace, on the draft, three commits ahead of what it shared. */
|
|
312
|
+
async function seedDraft(): Promise<{ upstream: string; repo: string }> {
|
|
313
|
+
const { upstream, repo } = await seedWorkspace(root, draftWs);
|
|
314
|
+
await runGit(repo, ['checkout', '-q', 'alice/draft-one']);
|
|
315
|
+
for (const m of ['one', 'two', 'three']) await runGit(repo, ['commit', '--allow-empty', '-m', m]);
|
|
316
|
+
return { upstream, repo };
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
function svcFor(runner: IGitRunner = new NodeGitRunner(), kb = testKbContext()): GitService {
|
|
320
|
+
return new GitService(stubWorkspaceService(draftWs, path.join(root, draftWs)), new WorkflowHooks(), kb, undefined, null, runner);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
it('counts the workspace\'s own branch against its upstream, with rev-list for that branch alone', async () => {
|
|
324
|
+
const { upstream, repo } = await seedDraft();
|
|
325
|
+
// A teammate shares one commit on the same draft, which this clone fetches.
|
|
326
|
+
const pusher = path.join(root, '.pusher');
|
|
327
|
+
await runGit(root, ['clone', '-q', '-b', 'alice/draft-one', upstream, pusher]);
|
|
328
|
+
await runGit(pusher, ['commit', '--allow-empty', '-m', 'teammate']);
|
|
329
|
+
await runGit(pusher, ['push', '-q', 'origin', 'alice/draft-one']);
|
|
330
|
+
await runGit(repo, ['fetch', '-q', 'origin']);
|
|
331
|
+
|
|
332
|
+
const { runner, commands } = recordingRunner();
|
|
333
|
+
await expect(svcFor(runner).branchCounts(draftWs)).resolves.toEqual({ ahead: 3, behind: 1 });
|
|
334
|
+
// The upstream resolved, so one count was enough.
|
|
335
|
+
expect(commands.filter((c) => c === 'rev-list')).toHaveLength(1);
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
it('falls back to the protected branch on origin it is fewest commits ahead of when it has no upstream', async () => {
|
|
339
|
+
const { upstream, repo } = await seedDraft();
|
|
340
|
+
await runGit(repo, ['branch', '--unset-upstream']);
|
|
341
|
+
// `target-company-state` moves on by two commits; `current-company-state` stays.
|
|
342
|
+
const pusher = path.join(root, '.pusher');
|
|
343
|
+
await runGit(root, ['clone', '-q', '-b', 'target-company-state', upstream, pusher]);
|
|
344
|
+
for (const m of ['t1', 't2']) await runGit(pusher, ['commit', '--allow-empty', '-m', m]);
|
|
345
|
+
await runGit(pusher, ['push', '-q', 'origin', 'target-company-state']);
|
|
346
|
+
await runGit(repo, ['fetch', '-q', 'origin']);
|
|
347
|
+
|
|
348
|
+
const { runner, commands } = recordingRunner();
|
|
349
|
+
// Three ahead of both; ties keep the first protected branch, which is behind by nothing.
|
|
350
|
+
await expect(svcFor(runner).branchCounts(draftWs)).resolves.toEqual({ ahead: 3, behind: 0 });
|
|
351
|
+
// The upstream it tried, then each protected branch.
|
|
352
|
+
expect(commands.filter((c) => c === 'rev-list')).toHaveLength(3);
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
it('answers null for a branch never shared, with no protected base to count against', async () => {
|
|
356
|
+
const { repo } = await seedDraft();
|
|
357
|
+
await runGit(repo, ['branch', '--unset-upstream']);
|
|
358
|
+
const kb = testKbContext({ branchModel: { defaultBranch: 'main', protectedBranches: ['main'] } });
|
|
359
|
+
await expect(svcFor(undefined, kb).branchCounts(draftWs)).resolves.toEqual({ ahead: null, behind: null });
|
|
360
|
+
});
|
|
234
361
|
});
|
|
@@ -22,11 +22,11 @@ const ROW = {
|
|
|
22
22
|
closedAt: null,
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
function makeDb(): Database {
|
|
25
|
+
function makeDb(row: Record<string, unknown> = ROW): Database {
|
|
26
26
|
return {
|
|
27
27
|
select: () => ({
|
|
28
28
|
from: () => ({
|
|
29
|
-
where: () => ({ limit: async () => [
|
|
29
|
+
where: () => ({ limit: async () => [row] }),
|
|
30
30
|
}),
|
|
31
31
|
}),
|
|
32
32
|
} as unknown as Database;
|
|
@@ -42,10 +42,10 @@ const FORK = 'c'.repeat(40);
|
|
|
42
42
|
* both refs), so the file list must be pinned to those same commits rather
|
|
43
43
|
* than fetch and resolve again. The SHAs and the file list are read on every
|
|
44
44
|
* call (a new head must show); what the detail cache saves is the DB
|
|
45
|
-
* enrichment (
|
|
45
|
+
* enrichment (approvals), so that is where "cached" is observed.
|
|
46
46
|
*/
|
|
47
47
|
describe('PullRequestService.getPrDetail — git work per read', () => {
|
|
48
|
-
function harness() {
|
|
48
|
+
function harness(row: Record<string, unknown> = ROW) {
|
|
49
49
|
const resolvePrShas = vi.fn(async () => ({ baseSha: BASE, headSha: HEAD }));
|
|
50
50
|
const changedFilesForPr = vi.fn(async () => []);
|
|
51
51
|
const forkPointForPr = vi.fn(async () => ({ mergeBaseSha: FORK, behind: true }));
|
|
@@ -61,11 +61,9 @@ describe('PullRequestService.getPrDetail — git work per read', () => {
|
|
|
61
61
|
ensureRemotesFetched: async () => undefined,
|
|
62
62
|
} as unknown as WorkspaceService;
|
|
63
63
|
const access = { canWriteAtRef: async () => false } as unknown as IAccessControl;
|
|
64
|
-
const svc = new PullRequestService(makeDb(), workspace, access, git);
|
|
65
|
-
const listComments = vi.fn(async () => []);
|
|
64
|
+
const svc = new PullRequestService(makeDb(row), workspace, access, git);
|
|
66
65
|
const getApprovalStates = vi.fn(async () => []);
|
|
67
66
|
svc.setDetailEnricher({
|
|
68
|
-
listComments,
|
|
69
67
|
getApprovalStates,
|
|
70
68
|
evaluateMergeGate: () => ({ mergeable: false, reasons: [], warnings: [] }),
|
|
71
69
|
});
|
|
@@ -79,6 +77,25 @@ describe('PullRequestService.getPrDetail — git work per read', () => {
|
|
|
79
77
|
};
|
|
80
78
|
}
|
|
81
79
|
|
|
80
|
+
it('carries the body as stored, and an access request\'s level and note off the row — absent on an ordinary request', async () => {
|
|
81
|
+
const plain = await harness().svc.getPrDetail(7, { fresh: true });
|
|
82
|
+
expect(plain?.body).toBe('');
|
|
83
|
+
expect(plain).not.toHaveProperty('accessRequest');
|
|
84
|
+
|
|
85
|
+
const asked = await harness({
|
|
86
|
+
...ROW,
|
|
87
|
+
body: 'Rita asked for **Owner** on Research.',
|
|
88
|
+
accessRequestLevel: 'owner',
|
|
89
|
+
accessRequestNote: 'I maintain these pages now',
|
|
90
|
+
}).svc.getPrDetail(7, { fresh: true });
|
|
91
|
+
expect(asked?.body).toBe('Rita asked for **Owner** on Research.');
|
|
92
|
+
expect(asked?.accessRequest).toEqual({ level: 'owner', note: 'I maintain these pages now' });
|
|
93
|
+
|
|
94
|
+
// A level with no note: the note never stands alone, and never as ''.
|
|
95
|
+
const noNote = await harness({ ...ROW, accessRequestLevel: 'write', accessRequestNote: null }).svc.getPrDetail(7, { fresh: true });
|
|
96
|
+
expect(noNote?.accessRequest).toEqual({ level: 'write' });
|
|
97
|
+
});
|
|
98
|
+
|
|
82
99
|
it('pins the file list to the SHAs it just resolved, and keeps patches for a client read', async () => {
|
|
83
100
|
const { svc, resolvePrShas, changedFilesForPr } = harness();
|
|
84
101
|
const detail = await svc.getPrDetail(7, { fresh: true });
|
|
@@ -164,7 +181,6 @@ describe('PullRequestService — change request link', () => {
|
|
|
164
181
|
const access = { canWriteAtRef: async () => false } as unknown as IAccessControl;
|
|
165
182
|
const svc = new PullRequestService(makeDb(), workspace, access, git, publicFrontendUrl);
|
|
166
183
|
svc.setDetailEnricher({
|
|
167
|
-
listComments: async () => [],
|
|
168
184
|
getApprovalStates: async () => [],
|
|
169
185
|
evaluateMergeGate: () => ({ mergeable: false, reasons: [], warnings: [] }),
|
|
170
186
|
});
|
|
@@ -244,7 +260,6 @@ describe('PullRequestService.getPrDetail — needsUpdate', () => {
|
|
|
244
260
|
} as unknown as Database;
|
|
245
261
|
const svc = new PullRequestService(db, workspace, access, git);
|
|
246
262
|
svc.setDetailEnricher({
|
|
247
|
-
listComments: async () => [],
|
|
248
263
|
getApprovalStates: async () => [],
|
|
249
264
|
evaluateMergeGate: () => ({ mergeable: false, reasons: [], warnings: [] }),
|
|
250
265
|
});
|
|
@@ -5,6 +5,7 @@ import type {
|
|
|
5
5
|
AppliedChangeRef,
|
|
6
6
|
AppliedMergeResult,
|
|
7
7
|
AuthUser,
|
|
8
|
+
BranchCounts,
|
|
8
9
|
BranchInfo,
|
|
9
10
|
ChangedPathPair,
|
|
10
11
|
CommitAttribution,
|
|
@@ -21,15 +22,12 @@ import type {
|
|
|
21
22
|
} from '@bevel-software/platform-shared';
|
|
22
23
|
import { isFolderPlaceholder } from '@bevel-software/platform-shared';
|
|
23
24
|
import { mergeCommitMessageNames } from './merge-commit.js';
|
|
24
|
-
import type { WorkspaceService } from '../../workspace/
|
|
25
|
+
import type { WorkspaceService } from '../../workspace/index.js';
|
|
25
26
|
import type { WorkflowHooks, CommitValidationContext } from '../workflow-hooks.js';
|
|
26
|
-
import type { IAccessControl } from '../../access/
|
|
27
|
-
import { AccessDeniedError } from '../../access-model/
|
|
28
|
-
import { WorkspaceIdMutex, type WorkspaceMutex } from '../../kb-fs/index.js';
|
|
27
|
+
import type { IAccessControl } from '../../access/index.js';
|
|
28
|
+
import { AccessDeniedError } from '../../access-model/index.js';
|
|
29
|
+
import { WorkspaceIdMutex, type WorkspaceMutex, assertInsideRepo, cloneTrackingConfigArgs, SAFE_IMPLICIT_FETCH_ARGS, readRefSha } from '../../kb-fs/index.js';
|
|
29
30
|
import { isAbsence } from '../../../shared/fs.contract.js';
|
|
30
|
-
import { assertInsideRepo } from '../../kb-fs/repo-path.js';
|
|
31
|
-
import { cloneTrackingConfigArgs, SAFE_IMPLICIT_FETCH_ARGS } from '../../kb-fs/clone-config.js';
|
|
32
|
-
import { readRefSha } from '../../kb-fs/index.js';
|
|
33
31
|
import { utf8Text } from '../../../shared/utf8-text.js';
|
|
34
32
|
import { lstatOrNull } from '../../../shared/rename-no-replace.js';
|
|
35
33
|
import { linkedAncestor } from '../../../shared/no-link-below.js';
|
|
@@ -38,7 +36,7 @@ import {
|
|
|
38
36
|
assertValidRelativePath,
|
|
39
37
|
isBranchAuthoredBy,
|
|
40
38
|
isOwnSuggestionsBranch,
|
|
41
|
-
} from '../../kb-fs/
|
|
39
|
+
} from '../../kb-fs/index.js';
|
|
42
40
|
import type { KbContext } from '../../../shared/kb-context.js';
|
|
43
41
|
import {
|
|
44
42
|
AppliedChangeMismatchError,
|
|
@@ -63,6 +61,7 @@ import {
|
|
|
63
61
|
} from '../../../shared/git.contract.js';
|
|
64
62
|
import { NodeGitRunner } from './node-git-runner.js';
|
|
65
63
|
import { printable } from '../../../shared/printable.js';
|
|
64
|
+
import { branchForWorkspaceId } from '../../../shared/workspace-id.js';
|
|
66
65
|
import { sanitizeError } from '../sanitize-error.js';
|
|
67
66
|
|
|
68
67
|
const log = logger('git');
|
|
@@ -295,11 +294,6 @@ export class GitService implements IGitService {
|
|
|
295
294
|
/** Whether the last implicit fetch per workspace SUCCEEDED — see `fetchOriginIfStale`. */
|
|
296
295
|
private readonly lastImplicitFetchOk = new Map<string, boolean>();
|
|
297
296
|
private static readonly IMPLICIT_FETCH_TTL_MS = 5_000;
|
|
298
|
-
// Cap on concurrent `aheadBehindForBranch` calls inside `listBranches`. Each
|
|
299
|
-
// call serializes up to 3 `git rev-list` spawns, so 8 workers ≈ ≤24
|
|
300
|
-
// concurrent processes worst case — fast for typical (<8) feature-branch
|
|
301
|
-
// counts, calm under large branch lists.
|
|
302
|
-
private static readonly MAX_AHEAD_BEHIND_CONCURRENCY = 8;
|
|
303
297
|
|
|
304
298
|
/**
|
|
305
299
|
* A change request's changed entries, keyed by the two commits its diff
|
|
@@ -548,7 +542,7 @@ export class GitService implements IGitService {
|
|
|
548
542
|
)
|
|
549
543
|
).trim();
|
|
550
544
|
|
|
551
|
-
type Row = { shortName: string;
|
|
545
|
+
type Row = { shortName: string; hasLocal: boolean; hasRemote: boolean };
|
|
552
546
|
const buckets = new Map<string, Row>();
|
|
553
547
|
for (const line of stdout.split('\n')) {
|
|
554
548
|
const trimmed = line.trim();
|
|
@@ -576,16 +570,12 @@ export class GitService implements IGitService {
|
|
|
576
570
|
if (!existing) {
|
|
577
571
|
buckets.set(shortName, {
|
|
578
572
|
shortName,
|
|
579
|
-
ref,
|
|
580
573
|
hasLocal: isLocal,
|
|
581
574
|
hasRemote: !isLocal,
|
|
582
575
|
});
|
|
583
576
|
continue;
|
|
584
577
|
}
|
|
585
|
-
// Prefer the local entry's ref when both exist — ahead/behind against the
|
|
586
|
-
// configured upstream is more meaningful than against origin directly.
|
|
587
578
|
if (isLocal && !existing.hasLocal) {
|
|
588
|
-
existing.ref = ref;
|
|
589
579
|
existing.hasLocal = true;
|
|
590
580
|
} else if (!isLocal) {
|
|
591
581
|
existing.hasRemote = true;
|
|
@@ -597,36 +587,14 @@ export class GitService implements IGitService {
|
|
|
597
587
|
return a.shortName.localeCompare(b.shortName);
|
|
598
588
|
});
|
|
599
589
|
|
|
600
|
-
//
|
|
601
|
-
//
|
|
602
|
-
//
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
await Promise.all(
|
|
609
|
-
Array.from({ length: workerCount }, async () => {
|
|
610
|
-
while (true) {
|
|
611
|
-
const i = nextIndex++;
|
|
612
|
-
if (i >= rows.length) return;
|
|
613
|
-
const row = rows[i];
|
|
614
|
-
const { ahead, behind } = await this.aheadBehindForBranch(
|
|
615
|
-
cwd,
|
|
616
|
-
row.shortName,
|
|
617
|
-
row.ref,
|
|
618
|
-
row.hasLocal,
|
|
619
|
-
);
|
|
620
|
-
infos[i] = {
|
|
621
|
-
name: row.shortName,
|
|
622
|
-
isProtected: this.kb.isProtectedBranch(row.shortName),
|
|
623
|
-
ahead,
|
|
624
|
-
behind,
|
|
625
|
-
hasRemote: row.hasRemote,
|
|
626
|
-
};
|
|
627
|
-
}
|
|
628
|
-
}),
|
|
629
|
-
);
|
|
590
|
+
// No git per branch: commit counts are not part of a listing (they cost
|
|
591
|
+
// one to three `rev-list` spawns a branch, over every branch the
|
|
592
|
+
// repository has). The one branch that wants them asks `branchCounts`.
|
|
593
|
+
const infos: BranchInfo[] = rows.map((row) => ({
|
|
594
|
+
name: row.shortName,
|
|
595
|
+
isProtected: this.kb.isProtectedBranch(row.shortName),
|
|
596
|
+
hasRemote: row.hasRemote,
|
|
597
|
+
}));
|
|
630
598
|
// Every name this listing showed — origin's refs and the local heads
|
|
631
599
|
// alike, since a branch checked out here is one the platform has
|
|
632
600
|
// plainly heard of. A listener that misbehaves must not turn a good
|
|
@@ -642,6 +610,24 @@ export class GitService implements IGitService {
|
|
|
642
610
|
});
|
|
643
611
|
}
|
|
644
612
|
|
|
613
|
+
async branchCounts(workspaceId: string): Promise<BranchCounts> {
|
|
614
|
+
return this.mutex.run(workspaceId, async () => {
|
|
615
|
+
const cwd = await this.repoDir(workspaceId);
|
|
616
|
+
const branch = branchForWorkspaceId(workspaceId);
|
|
617
|
+
// The workspace's own branch is its local head while it is checked out;
|
|
618
|
+
// otherwise only origin's ref names it — as a listing would read it.
|
|
619
|
+
const ownBranch = (
|
|
620
|
+
await this.git(cwd, ['symbolic-ref', '--quiet', '--short', 'HEAD']).then(
|
|
621
|
+
(r) => r.stdout,
|
|
622
|
+
() => '',
|
|
623
|
+
)
|
|
624
|
+
).trim();
|
|
625
|
+
return ownBranch === branch
|
|
626
|
+
? this.aheadBehindForBranch(cwd, branch, `refs/heads/${branch}`, true)
|
|
627
|
+
: this.aheadBehindForBranch(cwd, branch, `refs/remotes/origin/${branch}`, false);
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
|
|
645
631
|
/**
|
|
646
632
|
* Run `git fetch --prune origin` outside the workspace mutex, with a short
|
|
647
633
|
* TTL so back-to-back callers (mount + dropdown-open + 30s poll) coalesce
|
|
@@ -760,12 +746,6 @@ export class GitService implements IGitService {
|
|
|
760
746
|
await this.git(cwd, ['branch', '-D', name]).catch(() => undefined);
|
|
761
747
|
throw err;
|
|
762
748
|
}
|
|
763
|
-
const { ahead, behind } = await this.aheadBehindForBranch(
|
|
764
|
-
cwd,
|
|
765
|
-
name,
|
|
766
|
-
`refs/heads/${name}`,
|
|
767
|
-
true,
|
|
768
|
-
);
|
|
769
749
|
// Drop the now-vestigial local head. Under the per-branch workspace model
|
|
770
750
|
// this clone's identity is its OWN branch; the new draft lives in its own
|
|
771
751
|
// workspace (cloned from origin on first navigation), so this clone never
|
|
@@ -785,8 +765,6 @@ export class GitService implements IGitService {
|
|
|
785
765
|
return {
|
|
786
766
|
name,
|
|
787
767
|
isProtected: false,
|
|
788
|
-
ahead,
|
|
789
|
-
behind,
|
|
790
768
|
hasRemote: true,
|
|
791
769
|
};
|
|
792
770
|
});
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
type IGitRunner,
|
|
11
11
|
} from '../../../shared/git.contract.js';
|
|
12
12
|
import { logger } from '../../../shared/logging.js';
|
|
13
|
-
import { credentialHelperValue } from '../../kb-fs/
|
|
13
|
+
import { credentialHelperValue } from '../../kb-fs/index.js';
|
|
14
14
|
|
|
15
15
|
const log = logger('git-runner');
|
|
16
16
|
|
|
@@ -7,7 +7,6 @@ import type {
|
|
|
7
7
|
ChangedPathPair,
|
|
8
8
|
FileApprovalState,
|
|
9
9
|
IPullRequestService,
|
|
10
|
-
PrReviewComment,
|
|
11
10
|
PullRequestDetail,
|
|
12
11
|
PullRequestFile,
|
|
13
12
|
PullRequestState,
|
|
@@ -15,22 +14,22 @@ import type {
|
|
|
15
14
|
IGitService,
|
|
16
15
|
} from '@bevel-software/platform-shared';
|
|
17
16
|
import { isFolderPlaceholder } from '@bevel-software/platform-shared';
|
|
18
|
-
import type { Database } from '../../database/
|
|
19
|
-
import { changeRequests } from '../../database/
|
|
20
|
-
import type { WorkspaceService } from '../../workspace/
|
|
21
|
-
import type { IAccessControl } from '../../access/
|
|
22
|
-
import { AccessUnreadableError } from '../../access-model/
|
|
17
|
+
import type { Database } from '../../database/index.js';
|
|
18
|
+
import { changeRequests } from '../../database/index.js';
|
|
19
|
+
import type { WorkspaceService } from '../../workspace/index.js';
|
|
20
|
+
import type { IAccessControl } from '../../access/index.js';
|
|
21
|
+
import { AccessUnreadableError } from '../../access-model/index.js';
|
|
23
22
|
import { AppliedChangeMismatchError, WorkflowValidationError } from '../../../shared/domain-errors.js';
|
|
24
23
|
import { canonicalEmail, hashEmail } from '../../../shared/email-identity.js';
|
|
25
24
|
import { changeRequestLink, changeRequestLinkBase } from './change-request-link.js';
|
|
26
25
|
|
|
27
26
|
/**
|
|
28
|
-
* The latest moment a change-request row records —
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* from the newest
|
|
32
|
-
*
|
|
33
|
-
*
|
|
27
|
+
* The latest moment a change-request row records — the latest of its creation,
|
|
28
|
+
* its `updated_at` (a title or description edit) and its close time.
|
|
29
|
+
* Deliberately derived from the ROW alone: a time taken
|
|
30
|
+
* from the newest approval would make the same request report different
|
|
31
|
+
* "last changed" moments to a list (which reads no approvals) and a detail
|
|
32
|
+
* (which does).
|
|
34
33
|
*/
|
|
35
34
|
function latestRowMoment(row: {
|
|
36
35
|
createdAt: Date;
|
|
@@ -148,7 +147,6 @@ export function changeSourceFor(row: {
|
|
|
148
147
|
* relationship in the composition root is explicit and minimal.
|
|
149
148
|
*/
|
|
150
149
|
export interface PrDetailEnricher {
|
|
151
|
-
listComments(prNumber: number): Promise<PrReviewComment[]>;
|
|
152
150
|
/**
|
|
153
151
|
* Per-file approval state. `baseBranch` selects the access tree (resolved
|
|
154
152
|
* against `origin/<baseBranch>`); `workspaceId` is optional and gates the
|
|
@@ -184,8 +182,8 @@ export interface PrDetailEnricher {
|
|
|
184
182
|
*
|
|
185
183
|
* The durable facts (pairing, title/body, author, state) live in the row; the
|
|
186
184
|
* head/base SHAs, file list, and diffs are derived live from git so a new commit
|
|
187
|
-
* or force-push is always reflected.
|
|
188
|
-
*
|
|
185
|
+
* or force-push is always reflected. Per-file approvals and the merge gate
|
|
186
|
+
* are stitched in from the review-workflow service (also DB-backed).
|
|
189
187
|
*/
|
|
190
188
|
export class PullRequestService implements IPullRequestService {
|
|
191
189
|
/**
|
|
@@ -837,16 +835,11 @@ export class PullRequestService implements IPullRequestService {
|
|
|
837
835
|
})),
|
|
838
836
|
);
|
|
839
837
|
|
|
840
|
-
//
|
|
841
|
-
//
|
|
842
|
-
//
|
|
843
|
-
const
|
|
844
|
-
? await
|
|
845
|
-
this.detailEnricher.listComments(prNumber).catch((err) => {
|
|
846
|
-
log.warn(`listComments failed for #${prNumber}:`, { err });
|
|
847
|
-
return [] as PrReviewComment[];
|
|
848
|
-
}),
|
|
849
|
-
this.detailEnricher
|
|
838
|
+
// Approvals come from our own DB via the review-workflow service. The
|
|
839
|
+
// enricher is optional — if it isn't wired yet (startup ordering, isolated
|
|
840
|
+
// tests) we return an empty list rather than blocking the fetch.
|
|
841
|
+
const approvals = this.detailEnricher
|
|
842
|
+
? await this.detailEnricher
|
|
850
843
|
.getApprovalStates(
|
|
851
844
|
prNumber,
|
|
852
845
|
files,
|
|
@@ -863,9 +856,8 @@ export class PullRequestService implements IPullRequestService {
|
|
|
863
856
|
if (err instanceof AccessUnreadableError) throw err;
|
|
864
857
|
log.warn(`getApprovalStates failed for #${prNumber}:`, { err });
|
|
865
858
|
return [] as FileApprovalState[];
|
|
866
|
-
})
|
|
867
|
-
|
|
868
|
-
: [[] as PrReviewComment[], [] as FileApprovalState[]];
|
|
859
|
+
})
|
|
860
|
+
: ([] as FileApprovalState[]);
|
|
869
861
|
|
|
870
862
|
const gate = this.detailEnricher
|
|
871
863
|
? this.detailEnricher.evaluateMergeGate({
|
|
@@ -933,10 +925,19 @@ export class PullRequestService implements IPullRequestService {
|
|
|
933
925
|
const detail: PullRequestDetail = {
|
|
934
926
|
...summary,
|
|
935
927
|
body: row.body,
|
|
928
|
+
// Only a request the access-request flow opened has a level; the note
|
|
929
|
+
// rides with it and never stands alone.
|
|
930
|
+
...(row.accessRequestLevel
|
|
931
|
+
? {
|
|
932
|
+
accessRequest: {
|
|
933
|
+
level: row.accessRequestLevel as 'write' | 'owner',
|
|
934
|
+
...(row.accessRequestNote ? { note: row.accessRequestNote } : {}),
|
|
935
|
+
},
|
|
936
|
+
}
|
|
937
|
+
: {}),
|
|
936
938
|
headSha,
|
|
937
939
|
baseSha,
|
|
938
940
|
files,
|
|
939
|
-
comments,
|
|
940
941
|
approvals,
|
|
941
942
|
mergeableInBevel: gate.mergeable,
|
|
942
943
|
mergeBlockedReasons: gate.reasons,
|
|
@@ -951,6 +952,10 @@ export class PullRequestService implements IPullRequestService {
|
|
|
951
952
|
viewerCanUpdate,
|
|
952
953
|
viewerIsAuthor,
|
|
953
954
|
viewerCanDelete,
|
|
955
|
+
// Who may close a request may also change what it asks: the same
|
|
956
|
+
// grants, so the same predicate (`WorkflowService.updateChangeRequest`
|
|
957
|
+
// enforces it).
|
|
958
|
+
viewerCanEdit: viewerCanCancel,
|
|
954
959
|
};
|
|
955
960
|
|
|
956
961
|
// A patch-less detail is an internal read; it must not be served to the
|