@bevel-software/platform-core-backend 0.32.0 → 0.33.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 +5 -0
- package/agent-guide/html-views.md +46 -10
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +29 -4
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +7 -2
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +22 -6
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +8 -0
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +4 -0
- 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/modules/access/access-control.service.d.ts +3 -3
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +4 -5
- 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 +8 -3
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
- package/dist/modules/access/access-mutation.service.js +3 -3
- 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 +1 -1
- package/dist/modules/access/access-view.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts +5 -7
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +4 -4
- 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 +2 -2
- package/dist/modules/access/groups-admin.routes.js.map +1 -1
- package/dist/modules/access/groups-admin.service.d.ts +1 -1
- package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.service.js +2 -3
- package/dist/modules/access/groups-admin.service.js.map +1 -1
- package/dist/modules/access/groups-edit.js +2 -2
- 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.js +1 -1
- package/dist/modules/access/reference-scan.js.map +1 -1
- package/dist/modules/access/roles-admin.service.d.ts +1 -1
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
- package/dist/modules/access/roles-admin.service.js +2 -5
- 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/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 +2 -4
- 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/read-preamble.d.ts +1 -1
- package/dist/modules/agent-instructions/read-preamble.d.ts.map +1 -1
- 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 +1 -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.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-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.service.d.ts +1 -1
- package/dist/modules/auth/auth.service.d.ts.map +1 -1
- package/dist/modules/auth/auth.service.js +3 -3
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/index.d.ts +2 -0
- package/dist/modules/auth/index.d.ts.map +1 -1
- package/dist/modules/auth/oidc-auth-provider.js +1 -1
- 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 +107 -234
- package/dist/modules/database/core-schema.d.ts.map +1 -1
- package/dist/modules/database/core-schema.js +39 -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 +2 -2
- package/dist/modules/declared-variables/declared-variables.routes.d.ts.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 +3 -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 +10 -0
- package/dist/modules/kb-fs/index.d.ts.map +1 -1
- package/dist/modules/kb-fs/index.js +10 -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-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 +4 -5
- package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -1
- package/dist/modules/mcp/mcp-auth.middleware.js +4 -4
- package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -1
- package/dist/modules/mcp/mcp.routes.d.ts +2 -4
- package/dist/modules/mcp/mcp.routes.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.routes.js +2 -2
- package/dist/modules/mcp/mcp.routes.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +14 -4
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +17 -7
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.js +1 -1
- 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 +1 -0
- 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 +3 -3
- 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 +2 -2
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +3 -3
- 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 +4 -4
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +1 -1
- 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 +1 -0
- package/dist/modules/skills/index.d.ts.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.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.tools.d.ts +3 -3
- package/dist/modules/skills/skills.tools.d.ts.map +1 -1
- package/dist/modules/skills/skills.tools.js +3 -7
- 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.service.d.ts +1 -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 +1 -1
- 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/tool-auth.middleware.d.ts +2 -2
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -1
- package/dist/modules/tool-auth/tool-auth.middleware.js +1 -1
- 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 +5 -6
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +2 -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 +2 -2
- package/dist/modules/tool-helpers/tool-handler.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +2 -2
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +2 -2
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-helpers/validate-token.d.ts +1 -2
- package/dist/modules/tool-helpers/validate-token.d.ts.map +1 -1
- package/dist/modules/tool-helpers/validate-token.js +1 -1
- package/dist/modules/tool-helpers/validate-token.js.map +1 -1
- package/dist/modules/tool-manuals/index.d.ts +5 -0
- package/dist/modules/tool-manuals/index.d.ts.map +1 -1
- package/dist/modules/tool-manuals/index.js +4 -0
- 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.routes.d.ts +5 -5
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.js +2 -2
- package/dist/modules/tool-manuals/tool-manuals.routes.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +3 -3
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.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 +1 -2
- 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 +37 -2
- package/dist/modules/tool-registry/manual.routes.d.ts.map +1 -1
- package/dist/modules/tool-registry/manual.routes.js +14 -7
- 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 +8 -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 +46 -68
- 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 +2 -2
- package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/git.service.js +3 -6
- 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 +40 -50
- package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.service.js +218 -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/bounded-matcher.d.ts +5 -11
- package/dist/modules/workspace/bounded-matcher.d.ts.map +1 -1
- package/dist/modules/workspace/bounded-matcher.js +26 -87
- package/dist/modules/workspace/bounded-matcher.js.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.service.d.ts +54 -10
- package/dist/modules/workspace/file-readers/doc-extract.service.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.service.js +69 -17
- 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 +16 -0
- package/dist/modules/workspace/index.d.ts.map +1 -1
- package/dist/modules/workspace/index.js +13 -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/pattern-matcher.contract.d.ts +1 -1
- package/dist/modules/workspace/pattern-matcher.contract.d.ts.map +1 -1
- package/dist/modules/workspace/pattern-matcher.contract.js +1 -1
- package/dist/modules/workspace/pattern-matcher.contract.js.map +1 -1
- 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/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 +100 -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.routes.d.ts +7 -8
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +4 -6
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +1 -1
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +3 -6
- 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 +45 -27
- 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/migrations/0020_change_request_body_is_the_description.sql +20 -0
- package/migrations/0021_data_migrations_ledger.sql +11 -0
- package/migrations/meta/0020_snapshot.json +2321 -0
- package/migrations/meta/0021_snapshot.json +2353 -0
- package/migrations/meta/_journal.json +14 -0
- package/package.json +3 -3
- package/src/core/__tests__/damaged-document.tools.test.ts +374 -0
- package/src/core/__tests__/public-config.test.ts +5 -0
- package/src/core/create-core-server.ts +32 -3
- package/src/core/create-core-services.ts +32 -5
- package/src/core/lifecycle.ts +10 -0
- package/src/core/public-config.ts +10 -0
- package/src/modules/access/__tests__/access-requests.routes.test.ts +29 -15
- package/src/modules/access/access-control.service.ts +5 -6
- package/src/modules/access/access-declarations.ts +1 -1
- package/src/modules/access/access-mutation.service.ts +10 -4
- 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 +1 -1
- package/src/modules/access/access.routes.ts +9 -11
- 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 +3 -3
- package/src/modules/access/groups-admin.service.ts +3 -4
- package/src/modules/access/groups-edit.ts +2 -2
- package/src/modules/access/index.ts +17 -0
- package/src/modules/access/reference-scan.ts +1 -1
- package/src/modules/access/roles-admin.service.ts +3 -6
- 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 +2 -2
- package/src/modules/access/user-access-removal.service.ts +3 -6
- 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 +5 -0
- package/src/modules/agent-guide/agent-guide.tools.ts +4 -6
- package/src/modules/agent-guide/agent-guide.ts +1 -1
- package/src/modules/agent-guide/index.ts +1 -1
- package/src/modules/agent-instructions/read-preamble.ts +1 -1
- package/src/modules/audit/agent-audit.service.ts +3 -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.routes.ts +4 -4
- 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.service.ts +4 -4
- package/src/modules/auth/index.ts +3 -0
- package/src/modules/auth/oidc-auth-provider.ts +1 -1
- 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/core-schema.ts +43 -36
- package/src/modules/database/index.ts +9 -0
- package/src/modules/database/migrate.ts +79 -3
- package/src/modules/declared-variables/declared-variables.routes.ts +2 -2
- 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/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 +6 -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/index.ts +11 -0
- package/src/modules/kb-fs/locking-filesystem.ts +1 -1
- 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__/read-only-hint.e2e.test.ts +213 -0
- package/src/modules/mcp/index.ts +7 -0
- package/src/modules/mcp/mcp-auth.middleware.ts +6 -7
- package/src/modules/mcp/mcp.routes.ts +3 -5
- package/src/modules/mcp/mcp.service.ts +30 -13
- package/src/modules/mcp/oauth/bevel-oauth-provider.ts +2 -2
- package/src/modules/mcp/oauth/oauth-consent.routes.ts +1 -1
- 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/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 +2 -0
- 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 +4 -4
- 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 +4 -4
- 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/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 +4 -4
- 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/allowed-tools-check.ts +2 -6
- package/src/modules/skills/index.ts +2 -0
- 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.routes.ts +1 -1
- package/src/modules/skills/skills.service.ts +2 -2
- package/src/modules/skills/skills.tools.ts +5 -9
- 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.service.ts +2 -2
- package/src/modules/tool-auth/index.ts +14 -0
- package/src/modules/tool-auth/tool-auth.middleware.ts +3 -3
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +2 -2
- package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +2 -2
- 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 +8 -10
- package/src/modules/tool-helpers/tool-def.ts +7 -3
- package/src/modules/tool-helpers/tool-handler.ts +2 -2
- package/src/modules/tool-helpers/tool.contract.ts +2 -2
- package/src/modules/tool-helpers/validate-token.ts +2 -3
- package/src/modules/tool-manuals/index.ts +6 -0
- 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.routes.ts +5 -5
- package/src/modules/tool-manuals/tool-manuals.service.ts +3 -3
- package/src/modules/tool-manuals/tool-manuals.tools.ts +4 -6
- package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +439 -0
- 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 +14 -8
- 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 +11 -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 +84 -21
- 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 +33 -57
- 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 +49 -75
- 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__/pull-request.service.getPrDetail.test.ts +24 -9
- package/src/modules/workflow/git/git.service.ts +5 -8
- 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 +272 -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 +2 -1
- package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +2 -1
- 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.service.ensure-remotes-fetched.test.ts +30 -0
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +2 -1
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +2 -1
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +30 -4
- 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/bounded-matcher.ts +32 -89
- package/src/modules/workspace/file-readers/README.md +9 -0
- package/src/modules/workspace/file-readers/__tests__/doc-extract.service.test.ts +165 -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 +95 -20
- 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 +17 -0
- package/src/modules/workspace/kb-repository.ts +3 -2
- package/src/modules/workspace/not-found.ts +1 -1
- package/src/modules/workspace/pattern-matcher.contract.ts +1 -1
- package/src/modules/workspace/routine-write-policy.ts +1 -1
- 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 +193 -0
- package/src/modules/workspace/workspace.routes.ts +9 -12
- package/src/modules/workspace/workspace.service.ts +4 -7
- package/src/modules/workspace/workspace.tools.ts +53 -34
- 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/modules/workflow/__tests__/format-affected-owners.test.ts +0 -85
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who may receive an event: the per-kind delivery rule the events route
|
|
3
|
+
* applies, once per event per session, before it writes the event out.
|
|
4
|
+
*
|
|
5
|
+
* The bus decides which sessions HEAR about an event — its focus filter
|
|
6
|
+
* (workspace-scoped kinds) and user filter (user-scoped kinds). That is a
|
|
7
|
+
* delivery filter, and a session may name any workspace as its focus. This is
|
|
8
|
+
* the access check on top of it: an event that names something reaches only a
|
|
9
|
+
* person who may read what it names, judged by the same services the routes
|
|
10
|
+
* that serve that thing judge it by.
|
|
11
|
+
*
|
|
12
|
+
* - An event that names a path on a workspace (`file-changed`, the two lock
|
|
13
|
+
* events, and any later kind that carries `workspaceId` and `path`): the
|
|
14
|
+
* person may read the path on that branch, as the file routes judge it —
|
|
15
|
+
* after the one normaliser the file routes put every path through, so a
|
|
16
|
+
* path a client sent without the `<kbDirName>/` prefix (the lock route
|
|
17
|
+
* takes both spellings) is judged as the repository path it names, never
|
|
18
|
+
* as "outside the knowledge base, readable".
|
|
19
|
+
* - `approval-changed`: the person may read the approved path on the
|
|
20
|
+
* request's target branch — judged as a file event on that branch is,
|
|
21
|
+
* from the server's checkout of it (a cached read of the access rules
|
|
22
|
+
* from disk, no git), and only for a target the server holds no checkout
|
|
23
|
+
* of from its published ref. Never by reading the request's detail, which
|
|
24
|
+
* diffs the branch pair with several git subprocesses per person per event.
|
|
25
|
+
* - `change-request-opened`: the person may see the request, by the rule the
|
|
26
|
+
* request tools list and 404 by (`maySeeChangeRequest`): its author, or
|
|
27
|
+
* someone who may read one of its files — both names of a move — at its
|
|
28
|
+
* target, read at `origin/<target>` exactly as the tools read it
|
|
29
|
+
* (`readablePathsAt`), so the event never announces a request the tools
|
|
30
|
+
* answer as not found. The request's file list is read ONCE per event,
|
|
31
|
+
* however many sessions are judged; each person then costs one batch
|
|
32
|
+
* verdict from the access tree cached by commit.
|
|
33
|
+
* - `git-sync-failed`: the event names the workspace's root and, for a sync
|
|
34
|
+
* conflict, each conflicted file (its `reason` quotes them too). The person
|
|
35
|
+
* gets the paths they may read; git's words reach only a person who may
|
|
36
|
+
* read the root and every path the conflict names, and everyone else gets
|
|
37
|
+
* a fixed sentence.
|
|
38
|
+
* - `agent-tool-call`: the person whose agent made the call, as the bus
|
|
39
|
+
* already filters it; the rule says the same, so a bus that passed it on
|
|
40
|
+
* would not widen the audience.
|
|
41
|
+
*
|
|
42
|
+
* Every other kind is delivered as it is. That includes the number-only
|
|
43
|
+
* change-request lifecycle kinds (`-merged`, `-rejected`, `-apply-failed`),
|
|
44
|
+
* which follow an announcement the person was either given or not. A verdict
|
|
45
|
+
* that cannot be reached (the access tree fails to load, the request cannot be
|
|
46
|
+
* read) withholds, or for `git-sync-failed` redacts:
|
|
47
|
+
* failing closed costs a live refresh, failing open names a file.
|
|
48
|
+
*
|
|
49
|
+
* Nothing here changes what publishers emit; the rule only reads the event.
|
|
50
|
+
*/
|
|
51
|
+
|
|
52
|
+
import type { ChangeRequest, WorkflowEvent } from '@bevel-software/platform-shared';
|
|
53
|
+
import { logger } from '../../shared/logging.js';
|
|
54
|
+
import { workspaceIdForBranch } from '../../shared/workspace-id.js';
|
|
55
|
+
import type { IAccessControl } from '../access/index.js';
|
|
56
|
+
import { canReadWorkspacePath } from '../access-model/index.js';
|
|
57
|
+
import { normalizeWorkspacePath } from '../kb-fs/index.js';
|
|
58
|
+
import { fileIsReadable, isAuthor, maySeeChangeRequest, pathsOf } from './agent-tools/change-request-read-shape.js';
|
|
59
|
+
import { readablePathsAt } from './read-on-branch.js';
|
|
60
|
+
|
|
61
|
+
const log = logger('events');
|
|
62
|
+
|
|
63
|
+
/** What a `git-sync-failed` says in place of git's words. */
|
|
64
|
+
const GIT_SYNC_FAILED_REDACTED_REASON = 'The last push did not land.';
|
|
65
|
+
|
|
66
|
+
/** The person behind a session, as the auth middleware named them. */
|
|
67
|
+
export interface EventViewer {
|
|
68
|
+
userId: string;
|
|
69
|
+
email: string | undefined;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* The verdicts the rule asks for. Each one is the question a route already
|
|
74
|
+
* answers for the thing the event names; `createEventAccess` wires them to
|
|
75
|
+
* those services, and tests to a fake.
|
|
76
|
+
*/
|
|
77
|
+
export interface EventAccess {
|
|
78
|
+
/** May `email` read the workspace-relative `wsPath` on `workspaceId` — the file routes' verdict. */
|
|
79
|
+
mayReadPath(workspaceId: string, email: string, wsPath: string): Promise<boolean>;
|
|
80
|
+
/** May `email` read the KB-repo-relative `repoPath` on `workspaceId`; `''` is the root. */
|
|
81
|
+
mayReadRepoPath(workspaceId: string, email: string, repoPath: string): Promise<boolean>;
|
|
82
|
+
/** Which of the KB-repo-relative `repoPaths` `email` may read on `targetBranch` — what a request into that branch is scoped by. */
|
|
83
|
+
readableAtTarget(targetBranch: string, email: string, repoPaths: string[]): Promise<Set<string>>;
|
|
84
|
+
/** Which of the KB-repo-relative `repoPaths` `email` may read at `origin/<base>` — the change-request tools' verdict, `readablePathsAt`. */
|
|
85
|
+
readableAtBase(base: string, email: string, repoPaths: string[]): Promise<Set<string>>;
|
|
86
|
+
/**
|
|
87
|
+
* Request `number` as the request list judges it — its target, author and
|
|
88
|
+
* changed files — or null when there is none. Read once per event: callers
|
|
89
|
+
* judging one event for many sessions share the read.
|
|
90
|
+
*/
|
|
91
|
+
changeRequest(number: number): Promise<ChangeRequestFacts | null>;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** What the visibility rule reads of a request. */
|
|
95
|
+
export type ChangeRequestFacts = Pick<ChangeRequest, 'base' | 'authorId' | 'touchedNodeFiles'>;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* What the events route asks of the rule. The route depends on this, never on
|
|
99
|
+
* `EventDelivery`, so the rule can be substituted behind it.
|
|
100
|
+
*/
|
|
101
|
+
export interface IEventDelivery {
|
|
102
|
+
/** The event as `viewer` may receive it: itself, a redacted copy, or null. Never rejects. */
|
|
103
|
+
judge(event: WorkflowEvent, viewer: EventViewer): Promise<WorkflowEvent | null>;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** The deployment's `EventAccess`: the access service the file routes use, read in the server's own checkouts. */
|
|
107
|
+
export function createEventAccess(deps: {
|
|
108
|
+
accessControl: Pick<IAccessControl, 'canRead' | 'canReadBatch' | 'canReadBatchAtRef'>;
|
|
109
|
+
kbDirName: string;
|
|
110
|
+
/** `IWorkflowService.getChangeRequest`: the summary the request list judges, files included. */
|
|
111
|
+
getChangeRequest(number: number): Promise<ChangeRequestFacts | null>;
|
|
112
|
+
workspaces: {
|
|
113
|
+
/** Whether the server holds a checkout for `workspaceId` (the branch's own workspace). */
|
|
114
|
+
hasWorkspace(workspaceId: string): Promise<boolean>;
|
|
115
|
+
/**
|
|
116
|
+
* A workspace to read a published ref in: always for a request's base,
|
|
117
|
+
* and for an approval's target the server holds no checkout of. Every
|
|
118
|
+
* verdict at `origin/<branch>` is the same from any clone of the
|
|
119
|
+
* repository, so any existing one serves.
|
|
120
|
+
*/
|
|
121
|
+
anyWorkspaceId(): Promise<string>;
|
|
122
|
+
};
|
|
123
|
+
}): EventAccess {
|
|
124
|
+
/** A request's read, shared while it is in flight: one per event's fan-out, never a stale one after. */
|
|
125
|
+
const requestsInFlight = new Map<number, Promise<ChangeRequestFacts | null>>();
|
|
126
|
+
return {
|
|
127
|
+
// Normalised first, by the file routes' own normaliser: a path it refuses
|
|
128
|
+
// throws, and the rule withholds the event.
|
|
129
|
+
mayReadPath: async (workspaceId, email, wsPath) =>
|
|
130
|
+
canReadWorkspacePath(
|
|
131
|
+
(w, e, p) => deps.accessControl.canRead(w, e, p),
|
|
132
|
+
workspaceId,
|
|
133
|
+
email,
|
|
134
|
+
deps.kbDirName,
|
|
135
|
+
normalizeWorkspacePath(wsPath, deps.kbDirName),
|
|
136
|
+
),
|
|
137
|
+
mayReadRepoPath: (workspaceId, email, repoPath) => deps.accessControl.canRead(workspaceId, email, repoPath),
|
|
138
|
+
readableAtTarget: async (targetBranch, email, repoPaths) => {
|
|
139
|
+
if (repoPaths.length === 0) return new Set();
|
|
140
|
+
const unique = [...new Set(repoPaths)];
|
|
141
|
+
// The branch's own checkout, when the server has one (the default
|
|
142
|
+
// branch always): the same disk read a file event on that branch gets.
|
|
143
|
+
const own = workspaceIdForBranch(targetBranch);
|
|
144
|
+
const verdicts = (await deps.workspaces.hasWorkspace(own))
|
|
145
|
+
? await deps.accessControl.canReadBatch(own, email, unique)
|
|
146
|
+
: await deps.accessControl.canReadBatchAtRef(
|
|
147
|
+
await deps.workspaces.anyWorkspaceId(),
|
|
148
|
+
`origin/${targetBranch}`,
|
|
149
|
+
email,
|
|
150
|
+
unique,
|
|
151
|
+
);
|
|
152
|
+
// A ref that cannot be resolved answers null: nothing is granted on it.
|
|
153
|
+
return new Set(unique.filter((p) => verdicts?.get(p) === true));
|
|
154
|
+
},
|
|
155
|
+
// The request tools' own rule and reading, never the target's checkout: a
|
|
156
|
+
// grant there that is not yet published must not announce a request
|
|
157
|
+
// `get_change_request` answers as not found.
|
|
158
|
+
readableAtBase: async (base, email, repoPaths) =>
|
|
159
|
+
readablePathsAt(deps.accessControl, await deps.workspaces.anyWorkspaceId(), email, base, repoPaths),
|
|
160
|
+
changeRequest: (number) => {
|
|
161
|
+
const pending = requestsInFlight.get(number);
|
|
162
|
+
if (pending) return pending;
|
|
163
|
+
const read = deps.getChangeRequest(number).finally(() => requestsInFlight.delete(number));
|
|
164
|
+
requestsInFlight.set(number, read);
|
|
165
|
+
return read;
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* The event as `viewer` may receive it: the event itself, a redacted copy, or
|
|
172
|
+
* null for nothing at all.
|
|
173
|
+
*/
|
|
174
|
+
async function deliveryFor(
|
|
175
|
+
event: WorkflowEvent,
|
|
176
|
+
viewer: EventViewer,
|
|
177
|
+
access: EventAccess,
|
|
178
|
+
): Promise<WorkflowEvent | null> {
|
|
179
|
+
const email = viewer.email;
|
|
180
|
+
try {
|
|
181
|
+
switch (event.kind) {
|
|
182
|
+
case 'approval-changed':
|
|
183
|
+
return email && (await access.readableAtTarget(event.targetBranch, email, [event.path])).has(event.path)
|
|
184
|
+
? event
|
|
185
|
+
: null;
|
|
186
|
+
case 'change-request-opened':
|
|
187
|
+
return email && (await maySeeRequest(event.number, email, access)) ? event : null;
|
|
188
|
+
case 'git-sync-failed':
|
|
189
|
+
return email ? await gitSyncFailedFor(event, email, access) : redactGitSyncFailed(event, []);
|
|
190
|
+
case 'agent-tool-call':
|
|
191
|
+
return viewer.userId === event.forUserId ? event : null;
|
|
192
|
+
}
|
|
193
|
+
// Structural, not by kind: anything that names a path on a workspace is
|
|
194
|
+
// judged by the path, so a kind added later is covered without a line here.
|
|
195
|
+
const named = pathOnWorkspace(event);
|
|
196
|
+
if (named) return email && (await access.mayReadPath(named.workspaceId, email, named.path)) ? event : null;
|
|
197
|
+
return event;
|
|
198
|
+
} catch (err) {
|
|
199
|
+
log.warn(`delivery verdict failed for event id=${event.id} kind=${event.kind} user=${viewer.userId}; withheld`, { err });
|
|
200
|
+
return event.kind === 'git-sync-failed' ? redactGitSyncFailed(event, []) : null;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* The request tools' visibility rule, over the request the list judges: its
|
|
206
|
+
* author sees it; anyone else sees it when one of its files is readable at
|
|
207
|
+
* the target, a move only when both its names are. No request, no file list
|
|
208
|
+
* (a diff that could not be computed): author only, as the tools answer it.
|
|
209
|
+
*/
|
|
210
|
+
async function maySeeRequest(number: number, email: string, access: EventAccess): Promise<boolean> {
|
|
211
|
+
const request = await access.changeRequest(number);
|
|
212
|
+
if (!request) return false;
|
|
213
|
+
if (isAuthor(request, email)) return true;
|
|
214
|
+
const files = request.touchedNodeFiles ?? [];
|
|
215
|
+
const readable = await access.readableAtBase(request.base, email, files.flatMap(pathsOf));
|
|
216
|
+
const readableFiles = files.filter((f) => fileIsReadable(f, (p) => readable.has(p))).length;
|
|
217
|
+
return maySeeChangeRequest({ readableFiles, isAuthor: false });
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
type GitSyncFailed = Extract<WorkflowEvent, { kind: 'git-sync-failed' }>;
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Every path the event names is judged: the root, which git's words are about,
|
|
224
|
+
* and each conflicted file, which a conflict's `reason` also quotes. Git's
|
|
225
|
+
* words go out only when every one of them is readable; otherwise the person
|
|
226
|
+
* keeps the conflicted files they may read and a fixed sentence.
|
|
227
|
+
*/
|
|
228
|
+
async function gitSyncFailedFor(event: GitSyncFailed, email: string, access: EventAccess): Promise<WorkflowEvent> {
|
|
229
|
+
const conflicted = event.conflictedPaths ?? [];
|
|
230
|
+
const [root, ...each] = await Promise.all([
|
|
231
|
+
access.mayReadRepoPath(event.workspaceId, email, ''),
|
|
232
|
+
...conflicted.map((p) => access.mayReadRepoPath(event.workspaceId, email, p)),
|
|
233
|
+
]);
|
|
234
|
+
const readable = conflicted.filter((_, i) => each[i]);
|
|
235
|
+
return root && readable.length === conflicted.length ? event : redactGitSyncFailed(event, readable);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
function pathOnWorkspace(event: WorkflowEvent): { workspaceId: string; path: string } | null {
|
|
239
|
+
const e = event as { workspaceId?: unknown; path?: unknown };
|
|
240
|
+
return typeof e.workspaceId === 'string' && typeof e.path === 'string'
|
|
241
|
+
? { workspaceId: e.workspaceId, path: e.path }
|
|
242
|
+
: null;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Same shape, so a client parses it as before: git's words are gone, and of
|
|
247
|
+
* the conflicted files only `readable` remain (none, the key absent).
|
|
248
|
+
*/
|
|
249
|
+
function redactGitSyncFailed(event: GitSyncFailed, readable: string[]): WorkflowEvent {
|
|
250
|
+
const redacted: GitSyncFailed = { ...event, reason: GIT_SYNC_FAILED_REDACTED_REASON };
|
|
251
|
+
if (readable.length > 0) redacted.conflictedPaths = readable;
|
|
252
|
+
else delete redacted.conflictedPaths;
|
|
253
|
+
return redacted;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* The rule, shared per (event, person) while it is being judged: a person with
|
|
258
|
+
* three tabs open is judged once per event, not three times. A verdict is
|
|
259
|
+
* dropped the moment it settles and never reused, so a replay after a
|
|
260
|
+
* reconnect asks again, and a grant or a revocation since the event was first
|
|
261
|
+
* delivered decides what the replay carries.
|
|
262
|
+
*/
|
|
263
|
+
export class EventDelivery implements IEventDelivery {
|
|
264
|
+
private readonly inFlight = new Map<string, Promise<WorkflowEvent | null>>();
|
|
265
|
+
|
|
266
|
+
constructor(private readonly access: EventAccess) {}
|
|
267
|
+
|
|
268
|
+
judge(event: WorkflowEvent, viewer: EventViewer): Promise<WorkflowEvent | null> {
|
|
269
|
+
const key = `${event.id}\u0000${event.ts}\u0000${viewer.userId}`;
|
|
270
|
+
const pending = this.inFlight.get(key);
|
|
271
|
+
if (pending) return pending;
|
|
272
|
+
// `deliveryFor` never rejects: a verdict it cannot reach withholds the
|
|
273
|
+
// event, or for `git-sync-failed` redacts it.
|
|
274
|
+
const verdict = deliveryFor(event, viewer, this.access).finally(() => this.inFlight.delete(key));
|
|
275
|
+
this.inFlight.set(key, verdict);
|
|
276
|
+
return verdict;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
@@ -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';
|
|
@@ -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
|
});
|
|
@@ -21,15 +21,12 @@ import type {
|
|
|
21
21
|
} from '@bevel-software/platform-shared';
|
|
22
22
|
import { isFolderPlaceholder } from '@bevel-software/platform-shared';
|
|
23
23
|
import { mergeCommitMessageNames } from './merge-commit.js';
|
|
24
|
-
import type { WorkspaceService } from '../../workspace/
|
|
24
|
+
import type { WorkspaceService } from '../../workspace/index.js';
|
|
25
25
|
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';
|
|
26
|
+
import type { IAccessControl } from '../../access/index.js';
|
|
27
|
+
import { AccessDeniedError } from '../../access-model/index.js';
|
|
28
|
+
import { WorkspaceIdMutex, type WorkspaceMutex, assertInsideRepo, cloneTrackingConfigArgs, SAFE_IMPLICIT_FETCH_ARGS, readRefSha } from '../../kb-fs/index.js';
|
|
29
29
|
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
30
|
import { utf8Text } from '../../../shared/utf8-text.js';
|
|
34
31
|
import { lstatOrNull } from '../../../shared/rename-no-replace.js';
|
|
35
32
|
import { linkedAncestor } from '../../../shared/no-link-below.js';
|
|
@@ -38,7 +35,7 @@ import {
|
|
|
38
35
|
assertValidRelativePath,
|
|
39
36
|
isBranchAuthoredBy,
|
|
40
37
|
isOwnSuggestionsBranch,
|
|
41
|
-
} from '../../kb-fs/
|
|
38
|
+
} from '../../kb-fs/index.js';
|
|
42
39
|
import type { KbContext } from '../../../shared/kb-context.js';
|
|
43
40
|
import {
|
|
44
41
|
AppliedChangeMismatchError,
|
|
@@ -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
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* What the workflow module offers the other modules: the addresses of its
|
|
3
3
|
* change requests, so a module that lands a proposal can hand back a link
|
|
4
|
-
* built by the one rule — rather than each spelling the route for itself
|
|
5
|
-
*
|
|
4
|
+
* built by the one rule — rather than each spelling the route for itself;
|
|
5
|
+
* and the live-event surface — the bus, the events route, and the delivery
|
|
6
|
+
* rule every event passes on its way to a session. The services are wired by
|
|
7
|
+
* the composition root.
|
|
6
8
|
*/
|
|
7
9
|
export { CHANGE_REQUEST_URL_NOTE, changeRequestLink, changeRequestLinkBase } from './git/change-request-link.js';
|
|
10
|
+
export { WorkflowEventBus } from './event-bus.js';
|
|
11
|
+
export { createEventsRoutes } from './events.routes.js';
|
|
12
|
+
export { EventDelivery, createEventAccess } from './events-delivery.js';
|
|
13
|
+
export type { ChangeRequestFacts, EventAccess, EventViewer, IEventDelivery } from './events-delivery.js';
|
|
14
|
+
// Reached by other modules; exported here so they stop importing the files.
|
|
15
|
+
export { NodeGitRunner } from './git/node-git-runner.js';
|
|
16
|
+
export { RECOVERY_BOT_EMAIL } from './recovery-bot.js';
|
|
17
|
+
export type { IReviewWorkflowService } from './review-workflow/review-workflow.interface.js';
|
|
18
|
+
export { sanitizeError } from './sanitize-error.js';
|
|
19
|
+
export type { WorkflowHooks } from './workflow-hooks.js';
|
|
20
|
+
export type { WorkflowService } from './workflow.service.js';
|