@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
|
@@ -18,6 +18,7 @@ import { WorkflowHooks } from '../../workflow/workflow-hooks.js';
|
|
|
18
18
|
import { ToolDescriptionNotes } from '../agent-access.gate.js';
|
|
19
19
|
import { SpillStore } from '../spill-store.js';
|
|
20
20
|
import { DocExtractService } from '../file-readers/doc-extract.service.js';
|
|
21
|
+
import { WorkerDocumentExtractor } from '../file-readers/extract-in-worker.js';
|
|
21
22
|
import type { IAccessControl } from '../../access/access-control.interface.js';
|
|
22
23
|
import { normalizeWorkspacePath } from '../../kb-fs/repo-path.js';
|
|
23
24
|
import {
|
|
@@ -243,7 +244,7 @@ async function start(options: StartOptions = {}): Promise<string> {
|
|
|
243
244
|
fakeAuth,
|
|
244
245
|
toolHandler,
|
|
245
246
|
new SpillStore(join(tmpdir(), 'bevel-test-spills')),
|
|
246
|
-
new DocExtractService(docCacheDir),
|
|
247
|
+
new DocExtractService(docCacheDir, new WorkerDocumentExtractor()),
|
|
247
248
|
access,
|
|
248
249
|
testKbContext({ kbDirName: KB_DIR }),
|
|
249
250
|
{ recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new WorkflowHooks(), notes: new ToolDescriptionNotes() },
|
|
@@ -535,6 +536,83 @@ describe('the upload route', () => {
|
|
|
535
536
|
expect(await readdir(uploadsDir)).toEqual([]);
|
|
536
537
|
});
|
|
537
538
|
|
|
539
|
+
it('discards a token on request, with the bytes sent against it, the token in a header', async () => {
|
|
540
|
+
const base = await start();
|
|
541
|
+
const discard = (token: string) =>
|
|
542
|
+
fetch(`${base}/api/agent/uploads`, { method: 'DELETE', headers: { 'x-upload-token': token } });
|
|
543
|
+
const { token } = await request(base);
|
|
544
|
+
expect((await send(base, token, 'a.md', Buffer.from('a'))).status).toBe(200);
|
|
545
|
+
expect(await readdir(uploadsDir)).toHaveLength(1);
|
|
546
|
+
expect((await discard(token)).status).toBe(204);
|
|
547
|
+
expect(await readdir(uploadsDir)).toEqual([]);
|
|
548
|
+
// Spent: neither an apply nor a second discard can use it.
|
|
549
|
+
const applied = await call(base, 'apply_file_upload', { branch: DRAFT, token, destination: KB_DIR });
|
|
550
|
+
expect(applied.ok).toBe(false);
|
|
551
|
+
expect(batches).toEqual([]);
|
|
552
|
+
const again = await discard(token);
|
|
553
|
+
expect(again.status).toBe(404);
|
|
554
|
+
expect((await json<{ error: string }>(again)).error).toBe(UPLOAD_TOKEN_REFUSAL);
|
|
555
|
+
// A token nothing was sent against goes the same way, and its slot with it.
|
|
556
|
+
const { token: unsent } = await request(base);
|
|
557
|
+
expect((await discard(unsent)).status).toBe(204);
|
|
558
|
+
expect((await send(base, unsent, 'b.md', Buffer.from('b'))).status).toBe(404);
|
|
559
|
+
});
|
|
560
|
+
|
|
561
|
+
it('refuses to discard a token an apply is holding, and leaves its bytes', async () => {
|
|
562
|
+
const base = await start();
|
|
563
|
+
const { token } = await request(base);
|
|
564
|
+
await send(base, token, 'a.md', Buffer.from('a'));
|
|
565
|
+
uploads.claim(token, 'u');
|
|
566
|
+
const res = await fetch(`${base}/api/agent/uploads`, { method: 'DELETE', headers: { 'x-upload-token': token } });
|
|
567
|
+
expect(res.status).toBe(404);
|
|
568
|
+
expect(await readdir(uploadsDir)).toHaveLength(1);
|
|
569
|
+
uploads.release(token);
|
|
570
|
+
});
|
|
571
|
+
|
|
572
|
+
it('refuses to discard a token whose bytes are still arriving, and the upload finishes whole', async () => {
|
|
573
|
+
const base = await start();
|
|
574
|
+
const { token } = await request(base);
|
|
575
|
+
const head = Buffer.from('the first half, ');
|
|
576
|
+
const tail = Buffer.from('and the second half');
|
|
577
|
+
let finish!: () => void;
|
|
578
|
+
const body = new ReadableStream<Uint8Array>({
|
|
579
|
+
async start(controller) {
|
|
580
|
+
controller.enqueue(new Uint8Array(head));
|
|
581
|
+
await new Promise<void>((resolve) => {
|
|
582
|
+
finish = resolve;
|
|
583
|
+
});
|
|
584
|
+
controller.enqueue(new Uint8Array(tail));
|
|
585
|
+
controller.close();
|
|
586
|
+
},
|
|
587
|
+
});
|
|
588
|
+
const arriving = fetch(`${base}/api/agent/uploads?filename=held.md`, {
|
|
589
|
+
method: 'POST',
|
|
590
|
+
headers: { 'content-type': 'application/octet-stream', 'x-upload-token': token },
|
|
591
|
+
body,
|
|
592
|
+
// Node's fetch requires this for a streamed request body.
|
|
593
|
+
duplex: 'half',
|
|
594
|
+
} as RequestInit & { duplex: 'half' });
|
|
595
|
+
// Waited for, not assumed from a delay: the body has reached the store
|
|
596
|
+
// and its first bytes are staged, with the request still open.
|
|
597
|
+
const staged = Date.now() + 5_000;
|
|
598
|
+
while ((await readdir(uploadsDir).catch(() => [])).length === 0) {
|
|
599
|
+
expect(Date.now(), 'the upload never reached the store').toBeLessThan(staged);
|
|
600
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
const res = await fetch(`${base}/api/agent/uploads`, { method: 'DELETE', headers: { 'x-upload-token': token } });
|
|
604
|
+
expect(res.status).toBe(404);
|
|
605
|
+
expect((await json<{ error: string }>(res)).error).toBe(UPLOAD_TOKEN_REFUSAL);
|
|
606
|
+
// The file being written is still there, and the token still good.
|
|
607
|
+
expect(await readdir(uploadsDir)).toHaveLength(1);
|
|
608
|
+
|
|
609
|
+
finish();
|
|
610
|
+
expect((await arriving).status).toBe(200);
|
|
611
|
+
const whole = Buffer.concat([head, tail]);
|
|
612
|
+
expect((await apply(base, { branch: DRAFT, token, destination: `${KB_DIR}/Held` })).count).toBe(1);
|
|
613
|
+
expect(sha(await readFile(join(tempDir, KB_DIR, 'Held/held.md')))).toBe(sha(whole));
|
|
614
|
+
});
|
|
615
|
+
|
|
538
616
|
it('refuses a second upload against the same token', async () => {
|
|
539
617
|
const base = await start();
|
|
540
618
|
const { token } = await request(base);
|
|
@@ -1194,7 +1272,15 @@ describe('a token is good once, for one user, for a limited time', () => {
|
|
|
1194
1272
|
const res = await call(base, 'apply_file_upload', { branch: DRAFT, token, destination: KB_DIR });
|
|
1195
1273
|
expect(res.status).toBe(404);
|
|
1196
1274
|
expect((await json<{ error: string }>(res)).error).toBe(UPLOAD_TOKEN_REFUSAL);
|
|
1275
|
+
// The refusal drops the record and starts the delete without awaiting it,
|
|
1276
|
+
// so a sweep run straight after no longer names the file and leaves it to
|
|
1277
|
+
// that delete. Wait for the delete to land, under a deadline, instead of
|
|
1278
|
+
// racing it: a readdir taken mid-`rm` failed CI on PR #457.
|
|
1197
1279
|
await uploads.sweepNow();
|
|
1280
|
+
const deadline = Date.now() + 2_000;
|
|
1281
|
+
while (Date.now() < deadline && (await readdir(uploadsDir)).length > 0) {
|
|
1282
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
1283
|
+
}
|
|
1198
1284
|
expect(await readdir(uploadsDir)).toEqual([]);
|
|
1199
1285
|
});
|
|
1200
1286
|
|
|
@@ -17,6 +17,7 @@ import { WorkflowHooks } from '../../workflow/workflow-hooks.js';
|
|
|
17
17
|
import { ToolDescriptionNotes } from '../agent-access.gate.js';
|
|
18
18
|
import { SpillStore } from '../spill-store.js';
|
|
19
19
|
import { DocExtractService } from '../file-readers/doc-extract.service.js';
|
|
20
|
+
import { WorkerDocumentExtractor } from '../file-readers/extract-in-worker.js';
|
|
20
21
|
import type { IAccessControl } from '../../access/access-control.interface.js';
|
|
21
22
|
import { createMcpRoutes } from '../../mcp/mcp.routes.js';
|
|
22
23
|
import { McpService } from '../../mcp/mcp.service.js';
|
|
@@ -136,7 +137,7 @@ async function startPlatform(): Promise<Platform> {
|
|
|
136
137
|
fakeAuth,
|
|
137
138
|
createToolHandlerFactory(resolve),
|
|
138
139
|
new SpillStore(join(tempDir, 'spills')),
|
|
139
|
-
new DocExtractService(join(tempDir, 'doc-extract')),
|
|
140
|
+
new DocExtractService(join(tempDir, 'doc-extract'), new WorkerDocumentExtractor()),
|
|
140
141
|
allowAll,
|
|
141
142
|
testKbContext({ kbDirName: KB_DIR }),
|
|
142
143
|
{ recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new WorkflowHooks(), notes: new ToolDescriptionNotes() },
|
|
@@ -16,6 +16,7 @@ import { WorkflowHooks } from '../../workflow/workflow-hooks.js';
|
|
|
16
16
|
import { ToolDescriptionNotes } from '../../workspace/agent-access.gate.js';
|
|
17
17
|
import { SpillStore } from '../spill-store.js';
|
|
18
18
|
import { DocExtractService } from '../file-readers/doc-extract.service.js';
|
|
19
|
+
import { WorkerDocumentExtractor } from '../file-readers/extract-in-worker.js';
|
|
19
20
|
import { AccessControlService } from '../../access/access-control.service.js';
|
|
20
21
|
import { NodeFs } from '../../kb-fs/node-fs.js';
|
|
21
22
|
import { workspaceIdForBranch } from '../../../shared/workspace-id.js';
|
|
@@ -86,7 +87,7 @@ beforeAll(async () => {
|
|
|
86
87
|
},
|
|
87
88
|
createToolHandlerFactory(resolve),
|
|
88
89
|
new SpillStore(join(tmpdir(), 'bevel-test-spills')),
|
|
89
|
-
new DocExtractService(docCache),
|
|
90
|
+
new DocExtractService(docCache, new WorkerDocumentExtractor()),
|
|
90
91
|
service,
|
|
91
92
|
testKbContext({ kbDirName: KB }),
|
|
92
93
|
{ recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new WorkflowHooks(), notes: new ToolDescriptionNotes() },
|
|
@@ -28,6 +28,7 @@ import { registerWorkspaceTools } from '../workspace.tools.js';
|
|
|
28
28
|
import { RoutineWritePolicyService } from '../routine-write-policy.js';
|
|
29
29
|
import { SpillStore } from '../spill-store.js';
|
|
30
30
|
import { DocExtractService } from '../file-readers/doc-extract.service.js';
|
|
31
|
+
import { WorkerDocumentExtractor } from '../file-readers/extract-in-worker.js';
|
|
31
32
|
import { createWorkspaceRoutes } from '../workspace.routes.js';
|
|
32
33
|
import { createGitInternalsRouteGuard } from '../git-internals.middleware.js';
|
|
33
34
|
import { hasGitInternalsSegment } from '../../../shared/git-internals.js';
|
|
@@ -282,7 +283,7 @@ describe('workspace tools refuse the git folder', () => {
|
|
|
282
283
|
fakeAuth,
|
|
283
284
|
createToolHandlerFactory(resolve),
|
|
284
285
|
new SpillStore(join(root, 'spills')),
|
|
285
|
-
new DocExtractService(join(root, 'doc-cache')),
|
|
286
|
+
new DocExtractService(join(root, 'doc-cache'), new WorkerDocumentExtractor()),
|
|
286
287
|
allowAll,
|
|
287
288
|
testKbContext({ kbDirName: KB }),
|
|
288
289
|
{ recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new WorkflowHooks(), notes: new ToolDescriptionNotes() },
|
|
@@ -17,6 +17,7 @@ import { WorkflowHooks } from '../../workflow/workflow-hooks.js';
|
|
|
17
17
|
import { ToolDescriptionNotes } from '../agent-access.gate.js';
|
|
18
18
|
import { SpillStore } from '../spill-store.js';
|
|
19
19
|
import { DocExtractService } from '../file-readers/doc-extract.service.js';
|
|
20
|
+
import { WorkerDocumentExtractor } from '../file-readers/extract-in-worker.js';
|
|
20
21
|
import { AccessControlService } from '../../access/access-control.service.js';
|
|
21
22
|
import { NodeFs } from '../../kb-fs/node-fs.js';
|
|
22
23
|
import { BRANCH_REQUIRED_MESSAGE } from '../../../shared/domain-errors.js';
|
|
@@ -91,7 +92,7 @@ beforeAll(async () => {
|
|
|
91
92
|
},
|
|
92
93
|
createToolHandlerFactory(resolve),
|
|
93
94
|
new SpillStore(join(tmpdir(), 'bevel-test-spills')),
|
|
94
|
-
new DocExtractService(docCache),
|
|
95
|
+
new DocExtractService(docCache, new WorkerDocumentExtractor()),
|
|
95
96
|
access,
|
|
96
97
|
testKbContext({ kbDirName: KB }),
|
|
97
98
|
{ recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new WorkflowHooks(), notes: new ToolDescriptionNotes() },
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import type { Worker } from 'node:worker_threads';
|
|
3
|
+
import { describe, expect, it } from 'vitest';
|
|
4
|
+
import { WorkerPool } from '../worker-pool.js';
|
|
5
|
+
|
|
6
|
+
/** A stand-in worker: what the pool calls on one, and whether it was terminated. */
|
|
7
|
+
class FakeWorker extends EventEmitter {
|
|
8
|
+
terminated = false;
|
|
9
|
+
ref(): void {}
|
|
10
|
+
unref(): void {}
|
|
11
|
+
terminate(): Promise<number> {
|
|
12
|
+
if (!this.terminated) {
|
|
13
|
+
this.terminated = true;
|
|
14
|
+
queueMicrotask(() => this.emit('exit', 1));
|
|
15
|
+
}
|
|
16
|
+
return Promise.resolve(1);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** A pool of fake workers, and every worker it started that is still running. */
|
|
21
|
+
function fakePool(poolMax: number, maxWaiting = 10) {
|
|
22
|
+
const spawned: FakeWorker[] = [];
|
|
23
|
+
const pool = new WorkerPool(
|
|
24
|
+
() => {
|
|
25
|
+
const w = new FakeWorker();
|
|
26
|
+
spawned.push(w);
|
|
27
|
+
return w as unknown as Worker;
|
|
28
|
+
},
|
|
29
|
+
{ poolMax, maxWaiting },
|
|
30
|
+
() => new Error('busy'),
|
|
31
|
+
);
|
|
32
|
+
const running = () => spawned.filter((w) => !w.terminated).length;
|
|
33
|
+
return { pool, spawned, running };
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const tick = () => new Promise((resolve) => setImmediate(resolve));
|
|
37
|
+
|
|
38
|
+
describe('WorkerPool.acquireFresh', () => {
|
|
39
|
+
it('swaps the worker freed by another job in its own place, with jobs queued behind it', async () => {
|
|
40
|
+
const { pool, running } = fakePool(1);
|
|
41
|
+
const held = await pool.acquire();
|
|
42
|
+
const fresh = pool.acquireFresh();
|
|
43
|
+
const queued = pool.acquire();
|
|
44
|
+
await tick();
|
|
45
|
+
|
|
46
|
+
// The holder's job ends with a worker that must not be reused; its place
|
|
47
|
+
// goes to the next waiting job, the fresh request.
|
|
48
|
+
pool.discard(held);
|
|
49
|
+
const freshWorker = await fresh;
|
|
50
|
+
expect(freshWorker).not.toBe(held);
|
|
51
|
+
expect(running()).toBe(1);
|
|
52
|
+
|
|
53
|
+
// The queued job waits for that worker, not for a second one.
|
|
54
|
+
let settled = false;
|
|
55
|
+
void queued.then(() => (settled = true));
|
|
56
|
+
await tick();
|
|
57
|
+
expect(settled).toBe(false);
|
|
58
|
+
expect(running()).toBe(1);
|
|
59
|
+
|
|
60
|
+
pool.release(freshWorker);
|
|
61
|
+
expect(await queued).toBe(freshWorker);
|
|
62
|
+
expect(running()).toBe(1);
|
|
63
|
+
await pool.close();
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('swaps a released worker for a new one without passing a second one to the queue', async () => {
|
|
67
|
+
const { pool, running } = fakePool(1);
|
|
68
|
+
const held = await pool.acquire();
|
|
69
|
+
const fresh = pool.acquireFresh();
|
|
70
|
+
const queued = pool.acquire();
|
|
71
|
+
await tick();
|
|
72
|
+
|
|
73
|
+
pool.release(held);
|
|
74
|
+
const freshWorker = await fresh;
|
|
75
|
+
expect(freshWorker).not.toBe(held);
|
|
76
|
+
expect((held as unknown as FakeWorker).terminated).toBe(true);
|
|
77
|
+
await tick();
|
|
78
|
+
expect(running()).toBe(1);
|
|
79
|
+
|
|
80
|
+
pool.release(freshWorker);
|
|
81
|
+
expect(await queued).toBe(freshWorker);
|
|
82
|
+
expect(running()).toBe(1);
|
|
83
|
+
await pool.close();
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('swaps an idle worker that has run a job when the pool is full', async () => {
|
|
87
|
+
const { pool, running } = fakePool(2);
|
|
88
|
+
const a = await pool.acquire();
|
|
89
|
+
const b = await pool.acquire();
|
|
90
|
+
pool.release(a);
|
|
91
|
+
const fresh = await pool.acquireFresh();
|
|
92
|
+
expect(fresh).not.toBe(a);
|
|
93
|
+
expect(fresh).not.toBe(b);
|
|
94
|
+
expect((a as unknown as FakeWorker).terminated).toBe(true);
|
|
95
|
+
await tick();
|
|
96
|
+
expect(running()).toBe(2);
|
|
97
|
+
await pool.close();
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it('starts a new worker when the pool has room', async () => {
|
|
101
|
+
const { pool, spawned } = fakePool(2);
|
|
102
|
+
const a = await pool.acquire();
|
|
103
|
+
pool.release(a);
|
|
104
|
+
const fresh = await pool.acquireFresh();
|
|
105
|
+
expect(fresh).not.toBe(a);
|
|
106
|
+
expect(spawned).toHaveLength(2);
|
|
107
|
+
await pool.close();
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it('answers busy after close, for a fresh request waiting in the queue too', async () => {
|
|
111
|
+
const { pool } = fakePool(1);
|
|
112
|
+
await pool.acquire();
|
|
113
|
+
const fresh = pool.acquireFresh();
|
|
114
|
+
await pool.close();
|
|
115
|
+
await expect(fresh).rejects.toThrow('busy');
|
|
116
|
+
await expect(pool.acquireFresh()).rejects.toThrow('busy');
|
|
117
|
+
});
|
|
118
|
+
});
|
|
@@ -458,9 +458,10 @@ describe('no code path outside the normaliser resolves a workspace path', () =>
|
|
|
458
458
|
|
|
459
459
|
it('every write route passes its path through the normaliser before anything else', async () => {
|
|
460
460
|
const text = await fs.readFile(path.join(here, '..', 'workspace.routes.ts'), 'utf-8');
|
|
461
|
-
// One helper, and it is the normaliser's
|
|
461
|
+
// One helper, and it is the normaliser's — reached through kb-fs's public
|
|
462
|
+
// entry, as every module reaches another: a route that grew its own
|
|
462
463
|
// strip-if-present reading of the prefix is what this forbids.
|
|
463
|
-
expect(text).
|
|
464
|
+
expect(text).toMatch(/import \{[^}]*\bnormalizeWorkspacePath\b[^}]*\} from '\.\.\/kb-fs\/index\.js'/);
|
|
464
465
|
expect(text.match(/normalizeWorkspacePath\(/g)).toHaveLength(1);
|
|
465
466
|
// The old reading, spelled out so it cannot come back unnoticed.
|
|
466
467
|
expect(text).not.toMatch(/startsWith\(`\$\{kbDirName\}\/`\)\s*\n?\s*\?/);
|
|
@@ -106,4 +106,34 @@ describe('WorkspaceService.ensureRemotesFetched', () => {
|
|
|
106
106
|
|
|
107
107
|
expect(fetches().length - beforeTheRace).toBe(1);
|
|
108
108
|
});
|
|
109
|
+
|
|
110
|
+
// What an AUTHORIZING caller (`changeRequestDecisionGrant`) relies on: a
|
|
111
|
+
// warm cache must not stand in for a refresh that failed. `strict` alone
|
|
112
|
+
// answers from the window without fetching, so only `strict + force` turns
|
|
113
|
+
// an origin outage into a refusal instead of a check against older refs.
|
|
114
|
+
it('strict + force refuses when the refresh fails, even with a warm cache', async () => {
|
|
115
|
+
let failing = false;
|
|
116
|
+
runner = {
|
|
117
|
+
defaultTimeoutMs: 1000,
|
|
118
|
+
run: vi.fn(async (_cwd: string, args: string[]) => {
|
|
119
|
+
runs.push(args);
|
|
120
|
+
if (failing && args[0] === 'fetch') throw new Error('origin unreachable');
|
|
121
|
+
return { stdout: '', stderr: '' };
|
|
122
|
+
}),
|
|
123
|
+
// Read by the failure log, which redacts the token from the error.
|
|
124
|
+
credentials: { token: () => null },
|
|
125
|
+
} as unknown as IGitRunner;
|
|
126
|
+
const svc = service();
|
|
127
|
+
await svc.ensureRemotesFetched('main', { strict: true }); // warms the window
|
|
128
|
+
failing = true;
|
|
129
|
+
|
|
130
|
+
// Inside the window, strict alone does not even try the remote.
|
|
131
|
+
await expect(svc.ensureRemotesFetched('main', { strict: true })).resolves.toBeUndefined();
|
|
132
|
+
expect(fetches()).toHaveLength(1);
|
|
133
|
+
|
|
134
|
+
await expect(svc.ensureRemotesFetched('main', { strict: true, force: true })).rejects.toThrow(
|
|
135
|
+
/could not be refreshed/,
|
|
136
|
+
);
|
|
137
|
+
expect(fetches()).toHaveLength(2);
|
|
138
|
+
});
|
|
109
139
|
});
|
|
@@ -10,6 +10,7 @@ import { createToolHandlerFactory } from '../../tool-helpers/tool-handler.js';
|
|
|
10
10
|
import type { ToolAuth } from '../../tool-auth/tool-auth.middleware.js';
|
|
11
11
|
import type { IAccessControl } from '../../access/access-control.interface.js';
|
|
12
12
|
import { DocExtractService } from '../file-readers/doc-extract.service.js';
|
|
13
|
+
import { WorkerDocumentExtractor } from '../file-readers/extract-in-worker.js';
|
|
13
14
|
import { RoutineWritePolicyService } from '../routine-write-policy.js';
|
|
14
15
|
import { SpillStore } from '../spill-store.js';
|
|
15
16
|
import { WorkflowHooks } from '../../workflow/workflow-hooks.js';
|
|
@@ -47,7 +48,7 @@ async function descriptions(registry: ToolRegistry = new ToolRegistry()): Promis
|
|
|
47
48
|
auth,
|
|
48
49
|
createToolHandlerFactory(() => ({ userEmail: 'a@x.io' })) as never,
|
|
49
50
|
new SpillStore(join(tmpdir(), 'bevel-test-spills')),
|
|
50
|
-
new DocExtractService(join(tmpdir(), 'bevel-test-doc-extract')),
|
|
51
|
+
new DocExtractService(join(tmpdir(), 'bevel-test-doc-extract'), new WorkerDocumentExtractor()),
|
|
51
52
|
{} as unknown as IAccessControl,
|
|
52
53
|
kb,
|
|
53
54
|
{
|
|
@@ -26,6 +26,7 @@ import { ToolDescriptionNotes } from '../../workspace/agent-access.gate.js';
|
|
|
26
26
|
import { RoutineWritePolicyService } from '../routine-write-policy.js';
|
|
27
27
|
import { SpillStore } from '../spill-store.js';
|
|
28
28
|
import { DocExtractService } from '../file-readers/doc-extract.service.js';
|
|
29
|
+
import { WorkerDocumentExtractor } from '../file-readers/extract-in-worker.js';
|
|
29
30
|
import { registerWorkspaceTools } from '../workspace.tools.js';
|
|
30
31
|
import { WorkerPatternMatcher } from '../bounded-matcher.js';
|
|
31
32
|
import { WorkspaceService } from '../workspace.service.js';
|
|
@@ -189,7 +190,7 @@ describe('workspace tools — a branch that cannot be opened', () => {
|
|
|
189
190
|
isMissing: (branch) => workspaces!.isBranchMissing(branch),
|
|
190
191
|
}),
|
|
191
192
|
new SpillStore(spillRoot),
|
|
192
|
-
new DocExtractService(docCacheDir),
|
|
193
|
+
new DocExtractService(docCacheDir, new WorkerDocumentExtractor()),
|
|
193
194
|
allowAll,
|
|
194
195
|
testKbContext({ kbDirName: KB_DIR }),
|
|
195
196
|
{
|
|
@@ -25,6 +25,7 @@ import { WorkflowHooks, type AgentOperationContext } from '../../workflow/workfl
|
|
|
25
25
|
import { SESSION_ID_DESCRIPTION, ToolDescriptionNotes } from '../agent-access.gate.js';
|
|
26
26
|
import { SpillStore } from '../spill-store.js';
|
|
27
27
|
import { DocExtractService } from '../file-readers/doc-extract.service.js';
|
|
28
|
+
import { WorkerDocumentExtractor } from '../file-readers/extract-in-worker.js';
|
|
28
29
|
import { OCTET_STREAM_FALLBACK_NOTE } from '../file-readers/content-mode.js';
|
|
29
30
|
import type { IAccessControl } from '../../access/access-control.interface.js';
|
|
30
31
|
import { AccessControlService } from '../../access/access-control.service.js';
|
|
@@ -144,6 +145,11 @@ let raceHook: (() => Promise<void>) | null = null;
|
|
|
144
145
|
* defaults, unless a test narrows the pool) and closed after each test.
|
|
145
146
|
*/
|
|
146
147
|
let patternMatcher: WorkerPatternMatcher | undefined;
|
|
148
|
+
/**
|
|
149
|
+
* The document extractor `start()` wires, closed after each test: its workers
|
|
150
|
+
* are made lazily, and `unref()` lets the process exit but keeps them alive.
|
|
151
|
+
*/
|
|
152
|
+
let docExtractor: WorkerDocumentExtractor | undefined;
|
|
147
153
|
let matcherOptions: WorkerPatternMatcherOptions = {};
|
|
148
154
|
|
|
149
155
|
async function start(
|
|
@@ -155,6 +161,9 @@ async function start(
|
|
|
155
161
|
raceHook = null;
|
|
156
162
|
await patternMatcher?.close();
|
|
157
163
|
patternMatcher = new WorkerPatternMatcher(matcherOptions);
|
|
164
|
+
await docExtractor?.close();
|
|
165
|
+
const extractor = new WorkerDocumentExtractor();
|
|
166
|
+
docExtractor = extractor;
|
|
158
167
|
hooks = new WorkflowHooks();
|
|
159
168
|
notes = new ToolDescriptionNotes();
|
|
160
169
|
callerSource = 'internal';
|
|
@@ -309,7 +318,7 @@ async function start(
|
|
|
309
318
|
const app = express();
|
|
310
319
|
app.use(express.json());
|
|
311
320
|
const router = express.Router();
|
|
312
|
-
registerWorkspaceTools(registry, router, fakeAuth, toolHandler, new SpillStore(join(tmpdir(), 'bevel-test-spills')), new DocExtractService(docCacheDir), access, testKbContext({ kbDirName: KB_DIR }), {
|
|
321
|
+
registerWorkspaceTools(registry, router, fakeAuth, toolHandler, new SpillStore(join(tmpdir(), 'bevel-test-spills')), new DocExtractService(docCacheDir, extractor), access, testKbContext({ kbDirName: KB_DIR }), {
|
|
313
322
|
// The hooks and the notes a test registers against; with neither
|
|
314
323
|
// registered (the default, and every Hexis-only deployment) the gate
|
|
315
324
|
// refuses nothing and the descriptions say nothing extra.
|
|
@@ -354,6 +363,8 @@ afterEach(async () => {
|
|
|
354
363
|
httpServer = undefined;
|
|
355
364
|
await patternMatcher?.close();
|
|
356
365
|
patternMatcher = undefined;
|
|
366
|
+
await docExtractor?.close();
|
|
367
|
+
docExtractor = undefined;
|
|
357
368
|
if (tempDir) {
|
|
358
369
|
await rm(tempDir, { recursive: true, force: true });
|
|
359
370
|
tempDir = '';
|
|
@@ -2137,6 +2148,7 @@ describe('images', () => {
|
|
|
2137
2148
|
describe('start_session', () => {
|
|
2138
2149
|
// Minimal harness: own app + a fake ISessionSink that records createSession.
|
|
2139
2150
|
let server: HttpServer | undefined;
|
|
2151
|
+
let sessionExtractor: WorkerDocumentExtractor | undefined;
|
|
2140
2152
|
let created: Array<{ userId: string; startedAt: Date }> = [];
|
|
2141
2153
|
|
|
2142
2154
|
async function startSessionApp(
|
|
@@ -2189,9 +2201,12 @@ describe('start_session', () => {
|
|
|
2189
2201
|
const app = express();
|
|
2190
2202
|
app.use(express.json());
|
|
2191
2203
|
const router = express.Router();
|
|
2204
|
+
await sessionExtractor?.close();
|
|
2205
|
+
const extractor = new WorkerDocumentExtractor();
|
|
2206
|
+
sessionExtractor = extractor;
|
|
2192
2207
|
registerWorkspaceTools(
|
|
2193
2208
|
registry, router, auth, toolHandler,
|
|
2194
|
-
new SpillStore(join(tmpdir(), 'bevel-test-spills')), new DocExtractService(join(tmpdir(), 'bevel-test-doc-extract')), access, testKbContext({ kbDirName: KB_DIR }),
|
|
2209
|
+
new SpillStore(join(tmpdir(), 'bevel-test-spills')), new DocExtractService(join(tmpdir(), 'bevel-test-doc-extract'), extractor), access, testKbContext({ kbDirName: KB_DIR }),
|
|
2195
2210
|
{ recoveryBotEmail: RECOVERY_BOT, hooks: new WorkflowHooks(), notes: new ToolDescriptionNotes() },
|
|
2196
2211
|
new RoutineWritePolicyService(),
|
|
2197
2212
|
sink ?? fakeSessionSink,
|
|
@@ -2213,6 +2228,8 @@ describe('start_session', () => {
|
|
|
2213
2228
|
afterEach(async () => {
|
|
2214
2229
|
if (server) await new Promise<void>((r) => server!.close(() => r()));
|
|
2215
2230
|
server = undefined;
|
|
2231
|
+
await sessionExtractor?.close();
|
|
2232
|
+
sessionExtractor = undefined;
|
|
2216
2233
|
});
|
|
2217
2234
|
|
|
2218
2235
|
it('returns the sink-minted id as sessionId', async () => {
|
|
@@ -2321,9 +2338,10 @@ describe('start_session', () => {
|
|
|
2321
2338
|
const registry = new ToolRegistry();
|
|
2322
2339
|
const router = express.Router();
|
|
2323
2340
|
const noopAuth: express.RequestHandler = (_req, _res, next) => next();
|
|
2341
|
+
const extractor = new WorkerDocumentExtractor();
|
|
2324
2342
|
registerWorkspaceTools(
|
|
2325
2343
|
registry, router, noopAuth, (() => () => {}) as never,
|
|
2326
|
-
new SpillStore(join(tmpdir(), 'bevel-test-spills')), new DocExtractService(join(tmpdir(), 'bevel-test-doc-extract')), allowAll, testKbContext({ kbDirName: KB_DIR }),
|
|
2344
|
+
new SpillStore(join(tmpdir(), 'bevel-test-spills')), new DocExtractService(join(tmpdir(), 'bevel-test-doc-extract'), extractor), allowAll, testKbContext({ kbDirName: KB_DIR }),
|
|
2327
2345
|
{ recoveryBotEmail: RECOVERY_BOT, hooks: new WorkflowHooks(), notes: new ToolDescriptionNotes() },
|
|
2328
2346
|
new RoutineWritePolicyService(),
|
|
2329
2347
|
{} as never,
|
|
@@ -2341,6 +2359,7 @@ describe('start_session', () => {
|
|
|
2341
2359
|
// And that the answer may carry a note to act on, so an agent reading
|
|
2342
2360
|
// only the catalog knows the field is not noise.
|
|
2343
2361
|
expect(description).toContain('`firstRun`');
|
|
2362
|
+
await extractor.close();
|
|
2344
2363
|
});
|
|
2345
2364
|
|
|
2346
2365
|
/**
|
|
@@ -2484,9 +2503,16 @@ describe('start_session', () => {
|
|
|
2484
2503
|
* schema layer, complementing the handler-level guard exercised above.
|
|
2485
2504
|
*/
|
|
2486
2505
|
describe('branch is a required parameter in the tool contract', () => {
|
|
2506
|
+
/** Every extractor a registry was built with, closed after each test. */
|
|
2507
|
+
const extractors: WorkerDocumentExtractor[] = [];
|
|
2508
|
+
afterEach(async () => {
|
|
2509
|
+
await Promise.all(extractors.splice(0).map((e) => e.close()));
|
|
2510
|
+
});
|
|
2487
2511
|
/** Register the workspace tools into a fresh registry (no server needed). */
|
|
2488
2512
|
function buildRegistry(): ToolRegistry {
|
|
2489
2513
|
const registry = new ToolRegistry();
|
|
2514
|
+
const extractor = new WorkerDocumentExtractor();
|
|
2515
|
+
extractors.push(extractor);
|
|
2490
2516
|
const router = express.Router();
|
|
2491
2517
|
const noopAuth: express.RequestHandler = (_req, _res, next) => next();
|
|
2492
2518
|
// The handler factory is only invoked to build routes; its output is never
|
|
@@ -2498,7 +2524,7 @@ describe('branch is a required parameter in the tool contract', () => {
|
|
|
2498
2524
|
noopAuth,
|
|
2499
2525
|
toolHandler,
|
|
2500
2526
|
new SpillStore(join(tmpdir(), 'bevel-test-spills')),
|
|
2501
|
-
new DocExtractService(join(tmpdir(), 'bevel-test-doc-extract')),
|
|
2527
|
+
new DocExtractService(join(tmpdir(), 'bevel-test-doc-extract'), extractor),
|
|
2502
2528
|
allowAll,
|
|
2503
2529
|
testKbContext({ kbDirName: KB_DIR }),
|
|
2504
2530
|
{ recoveryBotEmail: RECOVERY_BOT, hooks: new WorkflowHooks(), notes: new ToolDescriptionNotes() },
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
* all branches and to reads).
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
|
-
import type { JsonSchema } from '../tool-registry/
|
|
23
|
-
import type { ToolContext } from '../tool-helpers/
|
|
24
|
-
import type { WorkflowHooks } from '../workflow/
|
|
22
|
+
import type { JsonSchema } from '../tool-registry/index.js';
|
|
23
|
+
import type { ToolContext } from '../tool-helpers/index.js';
|
|
24
|
+
import type { WorkflowHooks } from '../workflow/index.js';
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* What the `sessionId` input says on its own, before any deployment note. The
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import AdmZip from 'adm-zip';
|
|
3
|
-
import { hasHttpStatus, ToolError } from '../tool-helpers/
|
|
3
|
+
import { hasHttpStatus, ToolError } from '../tool-helpers/index.js';
|
|
4
4
|
import { isAbsence } from '../../shared/fs.contract.js';
|
|
5
5
|
import type { DownloadArtifact } from './agent-download.store.js';
|
|
6
6
|
|
|
@@ -135,6 +135,25 @@ export function createAgentUploadRoutes(deps: AgentUploadRouteDeps): express.Rou
|
|
|
135
135
|
router.post(AGENT_UPLOAD_ROUTE, handle);
|
|
136
136
|
router.post(AGENT_UPLOAD_HEADER_ROUTE, handle);
|
|
137
137
|
|
|
138
|
+
// `DELETE /api/agent/uploads` with the token in `x-upload-token`: give the
|
|
139
|
+
// token up unapplied, and its bytes with it, now rather than at its expiry
|
|
140
|
+
// (see `AgentUploadStore.discard`). The app sends it when a page's
|
|
141
|
+
// `uploadFile` was refused, since nobody else holds that token to retry.
|
|
142
|
+
// Header form only: the token stays out of the address here too.
|
|
143
|
+
router.delete(AGENT_UPLOAD_HEADER_ROUTE, async (req, res) => {
|
|
144
|
+
try {
|
|
145
|
+
await uploads.discard(tokenOf(req));
|
|
146
|
+
res.status(204).end();
|
|
147
|
+
} catch (err) {
|
|
148
|
+
if (err instanceof UploadTokenError) {
|
|
149
|
+
res.status(err.status).json({ error: err.message });
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
log.error('discarding an upload failed:', { err });
|
|
153
|
+
res.status(500).json({ error: 'Discarding the upload failed' });
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
|
|
138
157
|
return router;
|
|
139
158
|
}
|
|
140
159
|
|
|
@@ -417,6 +417,24 @@ export class AgentUploadStore {
|
|
|
417
417
|
}
|
|
418
418
|
}
|
|
419
419
|
|
|
420
|
+
/**
|
|
421
|
+
* Give `token` up unapplied: spend it and delete any bytes sent with it NOW,
|
|
422
|
+
* rather than when it expires. For a caller that will not retry — the app
|
|
423
|
+
* answering a page's `uploadFile`, which holds the token on the page's behalf
|
|
424
|
+
* and drops it when the upload or the apply is refused.
|
|
425
|
+
*
|
|
426
|
+
* Refused with the one refusal, like every unusable token, and also while
|
|
427
|
+
* the token is busy — bytes still arriving, or an apply holding it — so a
|
|
428
|
+
* discard never deletes a file somebody is writing or reading.
|
|
429
|
+
*/
|
|
430
|
+
async discard(token: string): Promise<void> {
|
|
431
|
+
const record = this.find(token);
|
|
432
|
+
// `attaching` stays set once the bytes are in; only without `received` are they still arriving.
|
|
433
|
+
const arriving = record.attaching && record.received === undefined;
|
|
434
|
+
if (arriving || record.claimed) throw new UploadTokenError(UPLOAD_TOKEN_REFUSAL, 404);
|
|
435
|
+
await this.consume(token);
|
|
436
|
+
}
|
|
437
|
+
|
|
420
438
|
/** Spend the token and delete its bytes. Idempotent. */
|
|
421
439
|
async consume(token: string): Promise<void> {
|
|
422
440
|
const key = hash(token);
|