@bevel-software/platform-core-backend 0.32.0 → 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-guide/access-control.md +24 -8
- package/agent-guide/html-views.md +277 -15
- package/agent-guide/tool-manuals.md +1 -1
- package/dist/core/catalog-revision.d.ts +12 -1
- package/dist/core/catalog-revision.d.ts.map +1 -1
- package/dist/core/catalog-revision.js +23 -3
- package/dist/core/catalog-revision.js.map +1 -1
- package/dist/core/core-ports.d.ts +41 -0
- package/dist/core/core-ports.d.ts.map +1 -1
- package/dist/core/core-ports.js.map +1 -1
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +42 -10
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +22 -6
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +58 -17
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +24 -0
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +16 -2
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core/public-config.d.ts +10 -0
- package/dist/core/public-config.d.ts.map +1 -1
- package/dist/core/public-config.js +10 -0
- package/dist/core/public-config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.interface.d.ts +17 -9
- package/dist/modules/access/access-control.interface.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +13 -3
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +165 -77
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access-declarations.d.ts +1 -1
- package/dist/modules/access/access-declarations.d.ts.map +1 -1
- package/dist/modules/access/access-declarations.js +1 -1
- package/dist/modules/access/access-declarations.js.map +1 -1
- package/dist/modules/access/access-mutation.service.d.ts +28 -25
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
- package/dist/modules/access/access-mutation.service.js +50 -53
- package/dist/modules/access/access-mutation.service.js.map +1 -1
- package/dist/modules/access/access-requests.contract.d.ts +1 -1
- package/dist/modules/access/access-requests.contract.d.ts.map +1 -1
- package/dist/modules/access/access-requests.routes.d.ts +3 -3
- package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
- package/dist/modules/access/access-requests.routes.js +7 -7
- package/dist/modules/access/access-requests.routes.js.map +1 -1
- package/dist/modules/access/access-requests.service.d.ts +21 -20
- package/dist/modules/access/access-requests.service.d.ts.map +1 -1
- package/dist/modules/access/access-requests.service.js +22 -68
- package/dist/modules/access/access-requests.service.js.map +1 -1
- package/dist/modules/access/access-view.d.ts +1 -1
- package/dist/modules/access/access-view.d.ts.map +1 -1
- package/dist/modules/access/access-view.js +12 -11
- package/dist/modules/access/access-view.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts +8 -7
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +38 -32
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/admin-locked-commit.d.ts +2 -2
- package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
- package/dist/modules/access/admin-locked-commit.js +1 -1
- package/dist/modules/access/admin-locked-commit.js.map +1 -1
- package/dist/modules/access/capability-registry.js +1 -1
- package/dist/modules/access/capability-registry.js.map +1 -1
- package/dist/modules/access/change-read-gate.d.ts +2 -2
- package/dist/modules/access/change-read-gate.d.ts.map +1 -1
- package/dist/modules/access/change-read-gate.js +1 -3
- package/dist/modules/access/change-read-gate.js.map +1 -1
- package/dist/modules/access/creator-access.d.ts +2 -2
- package/dist/modules/access/creator-access.d.ts.map +1 -1
- package/dist/modules/access/creator-access.js +2 -4
- package/dist/modules/access/creator-access.js.map +1 -1
- package/dist/modules/access/directory-sync-bot.d.ts +1 -1
- package/dist/modules/access/directory-sync-bot.d.ts.map +1 -1
- package/dist/modules/access/directory-sync-bot.js +1 -1
- package/dist/modules/access/directory-sync-bot.js.map +1 -1
- package/dist/modules/access/groups-admin.routes.d.ts +2 -2
- package/dist/modules/access/groups-admin.routes.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.routes.js +6 -4
- package/dist/modules/access/groups-admin.routes.js.map +1 -1
- package/dist/modules/access/groups-admin.service.d.ts +45 -14
- package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.service.js +80 -39
- package/dist/modules/access/groups-admin.service.js.map +1 -1
- package/dist/modules/access/groups-edit.d.ts +1 -1
- package/dist/modules/access/groups-edit.d.ts.map +1 -1
- package/dist/modules/access/groups-edit.js +3 -3
- package/dist/modules/access/groups-edit.js.map +1 -1
- package/dist/modules/access/index.d.ts +17 -0
- package/dist/modules/access/index.d.ts.map +1 -0
- package/dist/modules/access/index.js +6 -0
- package/dist/modules/access/index.js.map +1 -0
- package/dist/modules/access/reference-scan.d.ts +116 -24
- package/dist/modules/access/reference-scan.d.ts.map +1 -1
- package/dist/modules/access/reference-scan.js +305 -44
- package/dist/modules/access/reference-scan.js.map +1 -1
- package/dist/modules/access/roles-admin.service.d.ts +18 -9
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
- package/dist/modules/access/roles-admin.service.js +32 -26
- package/dist/modules/access/roles-admin.service.js.map +1 -1
- package/dist/modules/access/roles-edit.js +1 -1
- package/dist/modules/access/roles-edit.js.map +1 -1
- package/dist/modules/access/synced-groups-committer.d.ts +2 -2
- package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-committer.js +2 -2
- package/dist/modules/access/synced-groups-committer.js.map +1 -1
- package/dist/modules/access/synced-groups-writer.js +2 -2
- package/dist/modules/access/synced-groups-writer.js.map +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
- package/dist/modules/access/user-access-removal.service.js +2 -5
- package/dist/modules/access/user-access-removal.service.js.map +1 -1
- package/dist/modules/access-model/access-grammar.d.ts +35 -10
- package/dist/modules/access-model/access-grammar.d.ts.map +1 -1
- package/dist/modules/access-model/access-grammar.js +60 -20
- package/dist/modules/access-model/access-grammar.js.map +1 -1
- package/dist/modules/access-model/access-splice.d.ts +22 -18
- package/dist/modules/access-model/access-splice.d.ts.map +1 -1
- package/dist/modules/access-model/access-splice.js +20 -14
- package/dist/modules/access-model/access-splice.js.map +1 -1
- package/dist/modules/access-model/group-files.d.ts +1 -0
- package/dist/modules/access-model/group-files.d.ts.map +1 -1
- package/dist/modules/access-model/group-files.js +5 -1
- package/dist/modules/access-model/group-files.js.map +1 -1
- package/dist/modules/access-model/index.d.ts +20 -5
- package/dist/modules/access-model/index.d.ts.map +1 -1
- package/dist/modules/access-model/index.js +18 -5
- package/dist/modules/access-model/index.js.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
- package/dist/modules/admin/admin-access.routes.d.ts +1 -1
- package/dist/modules/admin/admin-access.routes.d.ts.map +1 -1
- package/dist/modules/admin/admin-access.routes.js +1 -1
- package/dist/modules/admin/admin-access.routes.js.map +1 -1
- package/dist/modules/admin/admin-access.service.d.ts +2 -2
- package/dist/modules/admin/admin-access.service.d.ts.map +1 -1
- package/dist/modules/admin/index.d.ts +8 -0
- package/dist/modules/admin/index.d.ts.map +1 -0
- package/dist/modules/admin/index.js +2 -0
- package/dist/modules/admin/index.js.map +1 -0
- package/dist/modules/agent-guide/agent-guide.js +1 -1
- package/dist/modules/agent-guide/agent-guide.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.d.ts +3 -3
- package/dist/modules/agent-guide/agent-guide.tools.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.js +15 -7
- package/dist/modules/agent-guide/agent-guide.tools.js.map +1 -1
- package/dist/modules/agent-guide/index.d.ts +1 -1
- package/dist/modules/agent-guide/index.d.ts.map +1 -1
- package/dist/modules/agent-guide/index.js +1 -1
- package/dist/modules/agent-guide/index.js.map +1 -1
- package/dist/modules/agent-instructions/compose.d.ts +3 -1
- package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
- package/dist/modules/agent-instructions/compose.js +3 -1
- package/dist/modules/agent-instructions/compose.js.map +1 -1
- package/dist/modules/agent-instructions/read-preamble.d.ts +1 -1
- package/dist/modules/agent-instructions/read-preamble.d.ts.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.d.ts +5 -1
- package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.js +16 -1
- package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
- package/dist/modules/agent-scope/agent-scope.contract.d.ts +67 -0
- package/dist/modules/agent-scope/agent-scope.contract.d.ts.map +1 -0
- package/dist/modules/agent-scope/agent-scope.contract.js +27 -0
- package/dist/modules/agent-scope/agent-scope.contract.js.map +1 -0
- package/dist/modules/agent-scope/connection-scope.d.ts +111 -0
- package/dist/modules/agent-scope/connection-scope.d.ts.map +1 -0
- package/dist/modules/agent-scope/connection-scope.js +165 -0
- package/dist/modules/agent-scope/connection-scope.js.map +1 -0
- package/dist/modules/agent-scope/index.d.ts +3 -0
- package/dist/modules/agent-scope/index.d.ts.map +1 -0
- package/dist/modules/agent-scope/index.js +3 -0
- package/dist/modules/agent-scope/index.js.map +1 -0
- package/dist/modules/audit/agent-audit.service.d.ts +2 -2
- package/dist/modules/audit/agent-audit.service.d.ts.map +1 -1
- package/dist/modules/audit/agent-audit.service.js +3 -1
- package/dist/modules/audit/agent-audit.service.js.map +1 -1
- package/dist/modules/audit/agent-connection.routes.d.ts +1 -1
- package/dist/modules/audit/agent-connection.routes.d.ts.map +1 -1
- package/dist/modules/audit/agent-connection.routes.js +1 -1
- package/dist/modules/audit/agent-connection.routes.js.map +1 -1
- package/dist/modules/audit/agent-rest-audit.middleware.d.ts +1 -1
- package/dist/modules/audit/agent-rest-audit.middleware.d.ts.map +1 -1
- package/dist/modules/audit/agent-rest-audit.middleware.js +1 -1
- package/dist/modules/audit/agent-rest-audit.middleware.js.map +1 -1
- package/dist/modules/audit/audit.contract.d.ts +6 -0
- package/dist/modules/audit/audit.contract.d.ts.map +1 -1
- package/dist/modules/audit/audit.contract.js.map +1 -1
- package/dist/modules/audit/audit.routes.d.ts +3 -3
- package/dist/modules/audit/audit.routes.d.ts.map +1 -1
- package/dist/modules/audit/audit.routes.js +2 -2
- package/dist/modules/audit/audit.routes.js.map +1 -1
- package/dist/modules/auth/account-admission.d.ts +12 -0
- package/dist/modules/auth/account-admission.d.ts.map +1 -1
- package/dist/modules/auth/account-admission.js +15 -0
- package/dist/modules/auth/account-admission.js.map +1 -1
- package/dist/modules/auth/account-erasure.service.d.ts +3 -3
- package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
- package/dist/modules/auth/account-erasure.service.js +1 -5
- package/dist/modules/auth/account-erasure.service.js.map +1 -1
- package/dist/modules/auth/account-switch-lock.d.ts +1 -1
- package/dist/modules/auth/account-switch-lock.d.ts.map +1 -1
- package/dist/modules/auth/account-switch-lock.js +1 -1
- package/dist/modules/auth/account-switch-lock.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts +2 -2
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +1 -1
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.middleware.d.ts +27 -1
- package/dist/modules/auth/auth.middleware.d.ts.map +1 -1
- package/dist/modules/auth/auth.middleware.js +42 -4
- package/dist/modules/auth/auth.middleware.js.map +1 -1
- package/dist/modules/auth/auth.routes.d.ts +13 -9
- package/dist/modules/auth/auth.routes.d.ts.map +1 -1
- package/dist/modules/auth/auth.routes.js +35 -29
- package/dist/modules/auth/auth.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +56 -7
- package/dist/modules/auth/auth.service.d.ts.map +1 -1
- package/dist/modules/auth/auth.service.js +131 -37
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/index.d.ts +3 -1
- package/dist/modules/auth/index.d.ts.map +1 -1
- package/dist/modules/auth/index.js +1 -1
- package/dist/modules/auth/index.js.map +1 -1
- package/dist/modules/auth/oidc-auth-provider.d.ts.map +1 -1
- package/dist/modules/auth/oidc-auth-provider.js +3 -10
- package/dist/modules/auth/oidc-auth-provider.js.map +1 -1
- package/dist/modules/code-mode/code-mode.tool.d.ts +1 -1
- package/dist/modules/code-mode/code-mode.tool.d.ts.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.d.ts +2 -2
- package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.js +1 -4
- package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
- package/dist/modules/database/core-schema.d.ts +175 -234
- package/dist/modules/database/core-schema.d.ts.map +1 -1
- package/dist/modules/database/core-schema.js +72 -35
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/database/index.d.ts +10 -0
- package/dist/modules/database/index.d.ts.map +1 -0
- package/dist/modules/database/index.js +4 -0
- package/dist/modules/database/index.js.map +1 -0
- package/dist/modules/database/migrate.d.ts.map +1 -1
- package/dist/modules/database/migrate.js +78 -3
- package/dist/modules/database/migrate.js.map +1 -1
- package/dist/modules/declared-variables/declared-variables.routes.d.ts +10 -3
- package/dist/modules/declared-variables/declared-variables.routes.d.ts.map +1 -1
- package/dist/modules/declared-variables/declared-variables.routes.js +13 -2
- package/dist/modules/declared-variables/declared-variables.routes.js.map +1 -1
- package/dist/modules/diff/diff.routes.d.ts +3 -3
- package/dist/modules/diff/diff.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.js +3 -3
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/diff/diff.service.d.ts +2 -2
- package/dist/modules/diff/diff.service.d.ts.map +1 -1
- package/dist/modules/diff/index.d.ts +7 -0
- package/dist/modules/diff/index.d.ts.map +1 -0
- package/dist/modules/diff/index.js +2 -0
- package/dist/modules/diff/index.js.map +1 -0
- package/dist/modules/embed/account-link.service.d.ts +1 -1
- package/dist/modules/embed/account-link.service.d.ts.map +1 -1
- package/dist/modules/embed/account-link.service.js +1 -1
- package/dist/modules/embed/account-link.service.js.map +1 -1
- package/dist/modules/embed/embed.routes.d.ts +1 -1
- package/dist/modules/embed/embed.routes.d.ts.map +1 -1
- package/dist/modules/embed/embed.routes.js +2 -2
- package/dist/modules/embed/embed.routes.js.map +1 -1
- package/dist/modules/embed/embed.service.d.ts +1 -1
- package/dist/modules/embed/embed.service.d.ts.map +1 -1
- package/dist/modules/embed/embed.tools.d.ts +4 -4
- package/dist/modules/embed/embed.tools.d.ts.map +1 -1
- package/dist/modules/embed/embed.tools.js +8 -5
- package/dist/modules/embed/embed.tools.js.map +1 -1
- package/dist/modules/github-app/github-app.connection.d.ts +1 -1
- package/dist/modules/github-app/github-app.connection.d.ts.map +1 -1
- package/dist/modules/github-app/github-app.routes.d.ts +3 -3
- package/dist/modules/github-app/github-app.routes.d.ts.map +1 -1
- package/dist/modules/github-app/github-app.routes.js +1 -1
- package/dist/modules/github-app/github-app.routes.js.map +1 -1
- package/dist/modules/kb-fs/index.d.ts +12 -0
- package/dist/modules/kb-fs/index.d.ts.map +1 -1
- package/dist/modules/kb-fs/index.js +11 -0
- package/dist/modules/kb-fs/index.js.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.d.ts +1 -1
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +7 -1
- package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/repo-path.d.ts +26 -6
- package/dist/modules/kb-fs/repo-path.d.ts.map +1 -1
- package/dist/modules/kb-fs/repo-path.js +22 -7
- package/dist/modules/kb-fs/repo-path.js.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.d.ts +36 -0
- package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -0
- package/dist/modules/kb-fs/tmp-ref.js +76 -0
- package/dist/modules/kb-fs/tmp-ref.js.map +1 -0
- package/dist/modules/kb-sync/kb-sync.routes.d.ts +1 -1
- package/dist/modules/kb-sync/kb-sync.routes.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.routes.js +2 -2
- package/dist/modules/kb-sync/kb-sync.routes.js.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/kb-sync/sync-auth.js +1 -1
- package/dist/modules/kb-sync/sync-auth.js.map +1 -1
- package/dist/modules/kb-sync/sync-payload.js +1 -1
- package/dist/modules/kb-sync/sync-payload.js.map +1 -1
- package/dist/modules/marketplace/git-http.routes.d.ts +1 -1
- package/dist/modules/marketplace/git-http.routes.d.ts.map +1 -1
- package/dist/modules/marketplace/git-http.routes.js +1 -1
- package/dist/modules/marketplace/git-http.routes.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.js +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts +2 -2
- package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.routes.js +2 -2
- package/dist/modules/marketplace/github-facade/github-facade.routes.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.service.d.ts +2 -2
- package/dist/modules/marketplace/github-facade/github-facade.service.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.service.js +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.service.js.map +1 -1
- package/dist/modules/marketplace/marketplace-repo.service.d.ts +1 -1
- package/dist/modules/marketplace/marketplace-repo.service.d.ts.map +1 -1
- package/dist/modules/marketplace/marketplace-repo.service.js +1 -1
- package/dist/modules/mcp/index.d.ts +8 -0
- package/dist/modules/mcp/index.d.ts.map +1 -0
- package/dist/modules/mcp/index.js +7 -0
- package/dist/modules/mcp/index.js.map +1 -0
- package/dist/modules/mcp/mcp-auth.middleware.d.ts +11 -5
- package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -1
- package/dist/modules/mcp/mcp-auth.middleware.js +18 -5
- package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -1
- package/dist/modules/mcp/mcp.routes.d.ts +9 -5
- package/dist/modules/mcp/mcp.routes.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.routes.js +41 -6
- package/dist/modules/mcp/mcp.routes.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +25 -4
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +84 -19
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts +25 -2
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js +46 -11
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts +10 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.js +35 -2
- package/dist/modules/mcp/oauth/oauth-consent.routes.js.map +1 -1
- package/dist/modules/onboarding/onboarding.routes.d.ts +1 -1
- package/dist/modules/onboarding/onboarding.routes.d.ts.map +1 -1
- package/dist/modules/onboarding/onboarding.routes.js +1 -1
- package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.d.ts +4 -5
- package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.js +2 -2
- package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
- package/dist/modules/plugins/compile/compile-marketplace.d.ts +1 -1
- package/dist/modules/plugins/compile/compile-marketplace.d.ts.map +1 -1
- package/dist/modules/plugins/compile/compile-marketplace.js +1 -1
- package/dist/modules/plugins/compile/compile-marketplace.js.map +1 -1
- package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts +3 -3
- package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.js +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.js.map +1 -1
- package/dist/modules/plugins/index.d.ts +2 -1
- package/dist/modules/plugins/index.d.ts.map +1 -1
- package/dist/modules/plugins/index.js +2 -0
- package/dist/modules/plugins/index.js.map +1 -1
- package/dist/modules/plugins/join-proposals.d.ts +2 -2
- package/dist/modules/plugins/join-proposals.d.ts.map +1 -1
- package/dist/modules/plugins/join-proposals.js +1 -1
- package/dist/modules/plugins/join-proposals.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.js +2 -2
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
- package/dist/modules/plugins/join-request-records.store.d.ts +1 -1
- package/dist/modules/plugins/join-request-records.store.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-records.store.js +1 -1
- package/dist/modules/plugins/join-request-records.store.js.map +1 -1
- package/dist/modules/plugins/join-requests.service.d.ts +3 -3
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +1 -1
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-links.d.ts +21 -5
- package/dist/modules/plugins/plugin-links.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-links.js +1 -1
- package/dist/modules/plugins/plugin-links.js.map +1 -1
- package/dist/modules/plugins/plugin-links.service.d.ts +8 -5
- package/dist/modules/plugins/plugin-links.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-links.service.js +8 -6
- package/dist/modules/plugins/plugin-links.service.js.map +1 -1
- package/dist/modules/plugins/plugin-provision.service.d.ts +2 -2
- package/dist/modules/plugins/plugin-provision.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-provision.service.js +2 -3
- package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.d.ts +2 -2
- package/dist/modules/plugins/plugin-rename.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.js +1 -1
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
- package/dist/modules/plugins/plugins.contract.d.ts +1 -1
- package/dist/modules/plugins/plugins.contract.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +7 -3
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +35 -8
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/plugins/plugins.service.d.ts +4 -4
- package/dist/modules/plugins/plugins.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.service.js +1 -1
- package/dist/modules/plugins/plugins.service.js.map +1 -1
- package/dist/modules/plugins/plugins.tools.d.ts +1 -1
- package/dist/modules/plugins/plugins.tools.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.tools.js +3 -3
- package/dist/modules/plugins/plugins.tools.js.map +1 -1
- package/dist/modules/plugins/teams.routes.d.ts +3 -3
- package/dist/modules/plugins/teams.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +1 -0
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js +2 -0
- package/dist/modules/secrets-vault/index.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +13 -4
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +16 -4
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
- package/dist/modules/settings/connection-check.js +1 -1
- package/dist/modules/settings/connection-check.js.map +1 -1
- package/dist/modules/settings/deployment-settings.service.d.ts +7 -1
- package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +45 -3
- package/dist/modules/settings/deployment-settings.service.js.map +1 -1
- package/dist/modules/settings/git-root-folders.js +1 -1
- package/dist/modules/settings/git-root-folders.js.map +1 -1
- package/dist/modules/settings/index.d.ts +13 -0
- package/dist/modules/settings/index.d.ts.map +1 -0
- package/dist/modules/settings/index.js +3 -0
- package/dist/modules/settings/index.js.map +1 -0
- package/dist/modules/settings/setup.routes.d.ts +3 -3
- package/dist/modules/settings/setup.routes.d.ts.map +1 -1
- package/dist/modules/settings/setup.routes.js +2 -2
- package/dist/modules/settings/setup.routes.js.map +1 -1
- package/dist/modules/skills/allowed-tools-check.d.ts +2 -2
- package/dist/modules/skills/allowed-tools-check.d.ts.map +1 -1
- package/dist/modules/skills/allowed-tools-check.js +1 -1
- package/dist/modules/skills/allowed-tools-check.js.map +1 -1
- package/dist/modules/skills/index.d.ts +4 -3
- package/dist/modules/skills/index.d.ts.map +1 -1
- package/dist/modules/skills/index.js +0 -2
- package/dist/modules/skills/index.js.map +1 -1
- package/dist/modules/skills/pending-skills.service.d.ts +3 -3
- package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
- package/dist/modules/skills/pending-skills.service.js.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts +5 -5
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +6 -13
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
- package/dist/modules/skills/skills.contract.d.ts +16 -0
- package/dist/modules/skills/skills.contract.d.ts.map +1 -1
- package/dist/modules/skills/skills.routes.d.ts +1 -1
- package/dist/modules/skills/skills.routes.d.ts.map +1 -1
- package/dist/modules/skills/skills.routes.js +1 -1
- package/dist/modules/skills/skills.routes.js.map +1 -1
- package/dist/modules/skills/skills.service.d.ts +2 -2
- package/dist/modules/skills/skills.service.d.ts.map +1 -1
- package/dist/modules/skills/skills.service.js +6 -1
- package/dist/modules/skills/skills.service.js.map +1 -1
- package/dist/modules/skills/skills.tools.d.ts +3 -3
- package/dist/modules/skills/skills.tools.d.ts.map +1 -1
- package/dist/modules/skills/skills.tools.js +27 -19
- package/dist/modules/skills/skills.tools.js.map +1 -1
- package/dist/modules/tool-auth/connection-key-rejection.js +1 -1
- package/dist/modules/tool-auth/connection-key-rejection.js.map +1 -1
- package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts +2 -2
- package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts.map +1 -1
- package/dist/modules/tool-auth/connection-keys-admin.routes.js +1 -1
- package/dist/modules/tool-auth/connection-keys-admin.routes.js.map +1 -1
- package/dist/modules/tool-auth/external-api-key.interface.d.ts +11 -0
- package/dist/modules/tool-auth/external-api-key.interface.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.interface.js.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.d.ts +2 -1
- package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.js +5 -2
- package/dist/modules/tool-auth/external-api-key.service.js.map +1 -1
- package/dist/modules/tool-auth/index.d.ts +15 -0
- package/dist/modules/tool-auth/index.d.ts.map +1 -0
- package/dist/modules/tool-auth/index.js +11 -0
- package/dist/modules/tool-auth/index.js.map +1 -0
- package/dist/modules/tool-auth/internal-token.service.d.ts +9 -0
- package/dist/modules/tool-auth/internal-token.service.d.ts.map +1 -1
- package/dist/modules/tool-auth/internal-token.service.js +1 -0
- package/dist/modules/tool-auth/internal-token.service.js.map +1 -1
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts +29 -5
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -1
- package/dist/modules/tool-auth/tool-auth.middleware.js +33 -7
- package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -1
- package/dist/modules/tool-helpers/default-branch-write.d.ts +1 -1
- package/dist/modules/tool-helpers/default-branch-write.d.ts.map +1 -1
- package/dist/modules/tool-helpers/index.d.ts +4 -1
- package/dist/modules/tool-helpers/index.d.ts.map +1 -1
- package/dist/modules/tool-helpers/index.js +3 -0
- package/dist/modules/tool-helpers/index.js.map +1 -1
- package/dist/modules/tool-helpers/route-argument-check.js +1 -1
- package/dist/modules/tool-helpers/route-argument-check.js.map +1 -1
- package/dist/modules/tool-helpers/route-tool-schemas.d.ts +1 -1
- package/dist/modules/tool-helpers/route-tool-schemas.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.d.ts +12 -6
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +5 -3
- package/dist/modules/tool-helpers/tool-context.js.map +1 -1
- package/dist/modules/tool-helpers/tool-def.d.ts +4 -2
- package/dist/modules/tool-helpers/tool-def.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-def.js +3 -1
- package/dist/modules/tool-helpers/tool-def.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.d.ts +17 -2
- package/dist/modules/tool-helpers/tool-handler.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +21 -2
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +12 -2
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.js.map +1 -1
- package/dist/modules/tool-helpers/validate-token.d.ts +3 -2
- package/dist/modules/tool-helpers/validate-token.d.ts.map +1 -1
- package/dist/modules/tool-helpers/validate-token.js +2 -2
- package/dist/modules/tool-helpers/validate-token.js.map +1 -1
- package/dist/modules/tool-manuals/index.d.ts +8 -3
- package/dist/modules/tool-manuals/index.d.ts.map +1 -1
- package/dist/modules/tool-manuals/index.js +4 -2
- package/dist/modules/tool-manuals/index.js.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts +2 -2
- package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts +2 -2
- package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.d.ts +5 -6
- package/dist/modules/tool-manuals/tool-delete.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +19 -6
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts +12 -6
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.js +43 -6
- package/dist/modules/tool-manuals/tool-manuals.routes.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +16 -9
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +23 -15
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -3
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +26 -12
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/tool-registry/description-length.js +2 -2
- package/dist/modules/tool-registry/description-length.js.map +1 -1
- package/dist/modules/tool-registry/index.d.ts +8 -0
- package/dist/modules/tool-registry/index.d.ts.map +1 -0
- package/dist/modules/tool-registry/index.js +8 -0
- package/dist/modules/tool-registry/index.js.map +1 -0
- package/dist/modules/tool-registry/manual.routes.d.ts +44 -2
- package/dist/modules/tool-registry/manual.routes.d.ts.map +1 -1
- package/dist/modules/tool-registry/manual.routes.js +38 -11
- package/dist/modules/tool-registry/manual.routes.js.map +1 -1
- package/dist/modules/tool-registry/read-only-hints.contract.d.ts +52 -0
- package/dist/modules/tool-registry/read-only-hints.contract.d.ts.map +1 -0
- package/dist/modules/tool-registry/read-only-hints.contract.js +2 -0
- package/dist/modules/tool-registry/read-only-hints.contract.js.map +1 -0
- package/dist/modules/tool-registry/read-only-hints.d.ts +89 -0
- package/dist/modules/tool-registry/read-only-hints.d.ts.map +1 -0
- package/dist/modules/tool-registry/read-only-hints.js +212 -0
- package/dist/modules/tool-registry/read-only-hints.js.map +1 -0
- package/dist/modules/tool-registry/tool.contract.d.ts +15 -0
- package/dist/modules/tool-registry/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-registry/tool.contract.js +10 -1
- package/dist/modules/tool-registry/tool.contract.js.map +1 -1
- package/dist/modules/update-check/update-check.routes.d.ts +2 -2
- package/dist/modules/update-check/update-check.routes.d.ts.map +1 -1
- package/dist/modules/update-check/update-check.routes.js +1 -1
- package/dist/modules/update-check/update-check.routes.js.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts +9 -104
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js +8 -118
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts +16 -17
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js +19 -86
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts +5 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js +10 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts +7 -5
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js +60 -77
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
- package/dist/modules/workflow/change-request-hooks.d.ts +1 -1
- package/dist/modules/workflow/event-bus.d.ts.map +1 -1
- package/dist/modules/workflow/event-bus.js +3 -1
- package/dist/modules/workflow/event-bus.js.map +1 -1
- package/dist/modules/workflow/events-delivery.d.ts +120 -0
- package/dist/modules/workflow/events-delivery.d.ts.map +1 -0
- package/dist/modules/workflow/events-delivery.js +202 -0
- package/dist/modules/workflow/events-delivery.js.map +1 -0
- package/dist/modules/workflow/events.routes.d.ts +16 -7
- package/dist/modules/workflow/events.routes.d.ts.map +1 -1
- package/dist/modules/workflow/events.routes.js +23 -4
- package/dist/modules/workflow/events.routes.js.map +1 -1
- package/dist/modules/workflow/file-lock.service.d.ts +1 -1
- package/dist/modules/workflow/file-lock.service.d.ts.map +1 -1
- package/dist/modules/workflow/file-lock.service.js +1 -1
- package/dist/modules/workflow/file-lock.service.js.map +1 -1
- package/dist/modules/workflow/git/git.service.d.ts +4 -4
- package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/git.service.js +23 -41
- package/dist/modules/workflow/git/git.service.js.map +1 -1
- package/dist/modules/workflow/git/node-git-runner.js +1 -1
- package/dist/modules/workflow/git/node-git-runner.js.map +1 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts +6 -7
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/pull-request.service.js +40 -33
- package/dist/modules/workflow/git/pull-request.service.js.map +1 -1
- package/dist/modules/workflow/index.d.ts +14 -2
- package/dist/modules/workflow/index.d.ts.map +1 -1
- package/dist/modules/workflow/index.js +11 -2
- package/dist/modules/workflow/index.js.map +1 -1
- package/dist/modules/workflow/pending-commits.service.d.ts +1 -1
- package/dist/modules/workflow/pending-commits.service.d.ts.map +1 -1
- package/dist/modules/workflow/pending-commits.service.js +1 -1
- package/dist/modules/workflow/pending-commits.service.js.map +1 -1
- package/dist/modules/workflow/read-on-branch.d.ts +1 -1
- package/dist/modules/workflow/read-on-branch.d.ts.map +1 -1
- package/dist/modules/workflow/recovery-bot.d.ts +1 -1
- package/dist/modules/workflow/recovery-bot.d.ts.map +1 -1
- package/dist/modules/workflow/recovery-bot.js +1 -1
- package/dist/modules/workflow/recovery-bot.js.map +1 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts +1 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts +4 -20
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts +4 -8
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js +3 -138
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -1
- package/dist/modules/workflow/workflow.routes.d.ts +5 -5
- package/dist/modules/workflow/workflow.routes.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.routes.js +42 -94
- package/dist/modules/workflow/workflow.routes.js.map +1 -1
- package/dist/modules/workflow/workflow.service.d.ts +41 -50
- package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.service.js +221 -154
- package/dist/modules/workflow/workflow.service.js.map +1 -1
- package/dist/modules/workspace/agent-access.gate.d.ts +3 -3
- package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
- package/dist/modules/workspace/agent-download.builder.d.ts +1 -1
- package/dist/modules/workspace/agent-download.builder.d.ts.map +1 -1
- package/dist/modules/workspace/agent-download.builder.js +1 -1
- package/dist/modules/workspace/agent-download.builder.js.map +1 -1
- package/dist/modules/workspace/agent-upload.routes.d.ts.map +1 -1
- package/dist/modules/workspace/agent-upload.routes.js +19 -0
- package/dist/modules/workspace/agent-upload.routes.js.map +1 -1
- package/dist/modules/workspace/agent-upload.store.d.ts +11 -0
- package/dist/modules/workspace/agent-upload.store.d.ts.map +1 -1
- package/dist/modules/workspace/agent-upload.store.js +18 -0
- package/dist/modules/workspace/agent-upload.store.js.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.service.d.ts +82 -14
- package/dist/modules/workspace/file-readers/doc-extract.service.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.service.js +109 -36
- package/dist/modules/workspace/file-readers/doc-extract.service.js.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.types.d.ts +9 -2
- package/dist/modules/workspace/file-readers/doc-extract.types.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.types.js.map +1 -1
- package/dist/modules/workspace/file-readers/document-extractor.contract.d.ts +41 -0
- package/dist/modules/workspace/file-readers/document-extractor.contract.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/document-extractor.contract.js +5 -0
- package/dist/modules/workspace/file-readers/document-extractor.contract.js.map +1 -0
- package/dist/modules/workspace/file-readers/document-extractors.d.ts +9 -0
- package/dist/modules/workspace/file-readers/document-extractors.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/document-extractors.js +26 -0
- package/dist/modules/workspace/file-readers/document-extractors.js.map +1 -0
- package/dist/modules/workspace/file-readers/document-formats.d.ts +12 -0
- package/dist/modules/workspace/file-readers/document-formats.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/document-formats.js +11 -0
- package/dist/modules/workspace/file-readers/document-formats.js.map +1 -0
- package/dist/modules/workspace/file-readers/document-reader.d.ts +21 -17
- package/dist/modules/workspace/file-readers/document-reader.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/document-reader.js +38 -34
- package/dist/modules/workspace/file-readers/document-reader.js.map +1 -1
- package/dist/modules/workspace/file-readers/extract-in-worker.d.ts +60 -0
- package/dist/modules/workspace/file-readers/extract-in-worker.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/extract-in-worker.js +140 -0
- package/dist/modules/workspace/file-readers/extract-in-worker.js.map +1 -0
- package/dist/modules/workspace/file-readers/extract-pdf.d.ts +2 -0
- package/dist/modules/workspace/file-readers/extract-pdf.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/extract-pdf.js +20 -3
- package/dist/modules/workspace/file-readers/extract-pdf.js.map +1 -1
- package/dist/modules/workspace/file-readers/extract.worker.d.ts +2 -0
- package/dist/modules/workspace/file-readers/extract.worker.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/extract.worker.js +5 -0
- package/dist/modules/workspace/file-readers/extract.worker.js.map +1 -0
- package/dist/modules/workspace/file-readers/extraction-cache.d.ts +21 -5
- package/dist/modules/workspace/file-readers/extraction-cache.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/extraction-cache.js +24 -10
- package/dist/modules/workspace/file-readers/extraction-cache.js.map +1 -1
- package/dist/modules/workspace/file-readers/extraction-worker.d.ts +42 -0
- package/dist/modules/workspace/file-readers/extraction-worker.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/extraction-worker.js +69 -0
- package/dist/modules/workspace/file-readers/extraction-worker.js.map +1 -0
- package/dist/modules/workspace/file-readers/file-reader.d.ts +13 -4
- package/dist/modules/workspace/file-readers/file-reader.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.js.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.registry.d.ts +3 -2
- package/dist/modules/workspace/file-readers/file-reader.registry.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.registry.js +6 -20
- package/dist/modules/workspace/file-readers/file-reader.registry.js.map +1 -1
- package/dist/modules/workspace/first-run.js +1 -1
- package/dist/modules/workspace/first-run.js.map +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts.map +1 -1
- package/dist/modules/workspace/git-internals.middleware.js +1 -1
- package/dist/modules/workspace/git-internals.middleware.js.map +1 -1
- package/dist/modules/workspace/index.d.ts +24 -0
- package/dist/modules/workspace/index.d.ts.map +1 -1
- package/dist/modules/workspace/index.js +21 -0
- package/dist/modules/workspace/index.js.map +1 -1
- package/dist/modules/workspace/kb-repository.d.ts.map +1 -1
- package/dist/modules/workspace/kb-repository.js +1 -1
- package/dist/modules/workspace/kb-repository.js.map +1 -1
- package/dist/modules/workspace/not-found.d.ts +1 -1
- package/dist/modules/workspace/not-found.d.ts.map +1 -1
- package/dist/modules/workspace/not-found.js +1 -1
- package/dist/modules/workspace/not-found.js.map +1 -1
- package/dist/modules/workspace/nul-scan.d.ts +19 -0
- package/dist/modules/workspace/nul-scan.d.ts.map +1 -0
- package/dist/modules/workspace/nul-scan.js +55 -0
- package/dist/modules/workspace/nul-scan.js.map +1 -0
- package/dist/modules/workspace/pattern-matcher.contract.d.ts +111 -28
- package/dist/modules/workspace/pattern-matcher.contract.d.ts.map +1 -1
- package/dist/modules/workspace/pattern-matcher.contract.js +31 -14
- package/dist/modules/workspace/pattern-matcher.contract.js.map +1 -1
- package/dist/modules/workspace/ripgrep-search.d.ts +54 -0
- package/dist/modules/workspace/ripgrep-search.d.ts.map +1 -0
- package/dist/modules/workspace/ripgrep-search.js +657 -0
- package/dist/modules/workspace/ripgrep-search.js.map +1 -0
- package/dist/modules/workspace/ripgrep-version.d.ts +15 -0
- package/dist/modules/workspace/ripgrep-version.d.ts.map +1 -0
- package/dist/modules/workspace/ripgrep-version.js +31 -0
- package/dist/modules/workspace/ripgrep-version.js.map +1 -0
- package/dist/modules/workspace/routine-write-policy.js +1 -1
- package/dist/modules/workspace/routine-write-policy.js.map +1 -1
- package/dist/modules/workspace/startup/beside-checkout.d.ts +8 -5
- package/dist/modules/workspace/startup/beside-checkout.d.ts.map +1 -1
- package/dist/modules/workspace/startup/beside-checkout.js +14 -5
- package/dist/modules/workspace/startup/beside-checkout.js.map +1 -1
- package/dist/modules/workspace/startup/kb-git.js +1 -1
- package/dist/modules/workspace/startup/kb-git.js.map +1 -1
- package/dist/modules/workspace/startup/kb-startup-runner.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-startup-runner.js +1 -2
- package/dist/modules/workspace/startup/kb-startup-runner.js.map +1 -1
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js +2 -2
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/personal-spaces.step.js +2 -2
- package/dist/modules/workspace/startup/steps/personal-spaces.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/plugin-layout.js +1 -1
- package/dist/modules/workspace/startup/steps/plugin-layout.js.map +1 -1
- package/dist/modules/workspace/startup/steps/roles-yaml.step.js +1 -1
- package/dist/modules/workspace/startup/steps/roles-yaml.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +2 -2
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.js +2 -2
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
- package/dist/modules/workspace/worker-pool.d.ts +99 -0
- package/dist/modules/workspace/worker-pool.d.ts.map +1 -0
- package/dist/modules/workspace/worker-pool.js +156 -0
- package/dist/modules/workspace/worker-pool.js.map +1 -0
- package/dist/modules/workspace/workspace-tmp.d.ts +146 -0
- package/dist/modules/workspace/workspace-tmp.d.ts.map +1 -0
- package/dist/modules/workspace/workspace-tmp.js +435 -0
- package/dist/modules/workspace/workspace-tmp.js.map +1 -0
- package/dist/modules/workspace/workspace.routes.d.ts +7 -8
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +9 -32
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +48 -7
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +89 -12
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +7 -7
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +502 -140
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/modules/workspace/write-denial.d.ts +4 -4
- package/dist/modules/workspace/write-denial.d.ts.map +1 -1
- package/dist/modules/workspace/write-denial.js +2 -3
- package/dist/modules/workspace/write-denial.js.map +1 -1
- package/dist/modules/write-access/index.d.ts +8 -0
- package/dist/modules/write-access/index.d.ts.map +1 -0
- package/dist/modules/write-access/index.js +7 -0
- package/dist/modules/write-access/index.js.map +1 -0
- package/dist/shared/path-order.d.ts +28 -8
- package/dist/shared/path-order.d.ts.map +1 -1
- package/dist/shared/path-order.js +37 -8
- package/dist/shared/path-order.js.map +1 -1
- package/migrations/0020_change_request_body_is_the_description.sql +20 -0
- package/migrations/0021_data_migrations_ledger.sql +11 -0
- package/migrations/0022_session_version.sql +6 -0
- package/migrations/0023_agent_path.sql +3 -0
- package/migrations/meta/0020_snapshot.json +2321 -0
- package/migrations/meta/0021_snapshot.json +2353 -0
- package/migrations/meta/0022_snapshot.json +2360 -0
- package/migrations/meta/0023_snapshot.json +2378 -0
- package/migrations/meta/_journal.json +28 -0
- package/package.json +3 -3
- package/src/__tests__/pg-scratch.test.ts +69 -0
- package/src/__tests__/pg-scratch.ts +31 -0
- package/src/__tests__/slow-ripgrep.ts +65 -0
- package/src/core/__tests__/boot-without-ripgrep.test.ts +34 -0
- package/src/core/__tests__/catalog-revision.test.ts +89 -0
- package/src/core/__tests__/damaged-document.tools.test.ts +374 -0
- package/src/core/__tests__/gated-boot.test.ts +8 -1
- package/src/core/__tests__/lifecycle.test.ts +46 -13
- package/src/core/__tests__/public-config.test.ts +5 -0
- package/src/core/catalog-revision.ts +24 -2
- package/src/core/core-ports.ts +42 -0
- package/src/core/create-core-server.ts +45 -3
- package/src/core/create-core-services.ts +81 -17
- package/src/core/lifecycle.ts +36 -2
- package/src/core/public-config.ts +10 -0
- package/src/index.ts +1 -1
- package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +12 -0
- package/src/modules/access/__tests__/access-control.colliding-name-cases.test.ts +113 -0
- package/src/modules/access/__tests__/access-control.frontmatter-head.test.ts +117 -0
- package/src/modules/access/__tests__/access-control.group-named-admin.test.ts +122 -0
- package/src/modules/access/__tests__/access-control.preview-relocation.test.ts +50 -0
- package/src/modules/access/__tests__/access-declarations.test.ts +19 -0
- package/src/modules/access/__tests__/access-groups.test.ts +55 -22
- package/src/modules/access/__tests__/access-mutation.service.test.ts +85 -59
- package/src/modules/access/__tests__/access-requests.routes.test.ts +29 -15
- package/src/modules/access/__tests__/access-restrict-here.test.ts +7 -5
- package/src/modules/access/__tests__/access.routes.admins.test.ts +1 -0
- package/src/modules/access/__tests__/access.routes.batch.test.ts +2 -0
- package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +2 -0
- package/src/modules/access/__tests__/access.routes.group-grant.test.ts +50 -14
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +2 -1
- package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +1 -0
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +2 -0
- package/src/modules/access/__tests__/access.routes.revoke.test.ts +18 -13
- package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +2 -0
- package/src/modules/access/__tests__/grant-sources.test.ts +20 -15
- package/src/modules/access/__tests__/groups-admin.routes.test.ts +61 -0
- package/src/modules/access/__tests__/groups-admin.service.test.ts +211 -18
- package/src/modules/access/__tests__/reference-scan.test.ts +366 -14
- package/src/modules/access/__tests__/roles-admin.security.test.ts +1 -1
- package/src/modules/access/__tests__/roles-admin.service.test.ts +43 -22
- package/src/modules/access/__tests__/roles-capabilities.test.ts +6 -2
- package/src/modules/access/__tests__/roles.routes.test.ts +1 -1
- package/src/modules/access/access-control.interface.ts +17 -10
- package/src/modules/access/access-control.service.ts +161 -76
- package/src/modules/access/access-declarations.ts +1 -1
- package/src/modules/access/access-mutation.service.ts +58 -57
- package/src/modules/access/access-requests.contract.ts +1 -1
- package/src/modules/access/access-requests.routes.ts +10 -15
- package/src/modules/access/access-requests.service.ts +29 -71
- package/src/modules/access/access-view.ts +13 -11
- package/src/modules/access/access.routes.ts +51 -43
- package/src/modules/access/admin-locked-commit.ts +3 -2
- package/src/modules/access/capability-registry.ts +1 -1
- package/src/modules/access/change-read-gate.ts +3 -5
- package/src/modules/access/creator-access.ts +3 -5
- package/src/modules/access/directory-sync-bot.ts +2 -2
- package/src/modules/access/groups-admin.routes.ts +7 -5
- package/src/modules/access/groups-admin.service.ts +116 -47
- package/src/modules/access/groups-edit.ts +3 -3
- package/src/modules/access/index.ts +17 -0
- package/src/modules/access/reference-scan.ts +320 -47
- package/src/modules/access/roles-admin.service.ts +45 -31
- package/src/modules/access/roles-edit.ts +1 -1
- package/src/modules/access/synced-groups-committer.ts +4 -4
- package/src/modules/access/synced-groups-writer.ts +3 -3
- package/src/modules/access/user-access-removal.service.ts +3 -6
- package/src/modules/access-model/__tests__/access-grammar.test.ts +38 -1
- package/src/modules/access-model/__tests__/access-splice.test.ts +50 -8
- package/src/modules/access-model/access-grammar.ts +65 -20
- package/src/modules/access-model/access-splice.ts +31 -23
- package/src/modules/access-model/group-files.ts +5 -0
- package/src/modules/access-model/index.ts +21 -5
- package/src/modules/access-model/roles-yaml-guard.ts +1 -1
- package/src/modules/admin/admin-access.routes.ts +1 -1
- package/src/modules/admin/admin-access.service.ts +2 -2
- package/src/modules/admin/index.ts +7 -0
- package/src/modules/agent-guide/__tests__/agent-guide.test.ts +36 -0
- package/src/modules/agent-guide/agent-guide.tools.ts +17 -8
- package/src/modules/agent-guide/agent-guide.ts +1 -1
- package/src/modules/agent-guide/index.ts +1 -1
- package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +1 -0
- package/src/modules/agent-instructions/compose.ts +3 -1
- package/src/modules/agent-instructions/read-preamble.ts +1 -1
- package/src/modules/agent-instructions/shared-file-rules.ts +17 -1
- package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +421 -0
- package/src/modules/agent-scope/__tests__/connection-scope.test.ts +46 -0
- package/src/modules/agent-scope/__tests__/in-memory-kb.ts +148 -0
- package/src/modules/agent-scope/agent-scope.contract.ts +83 -0
- package/src/modules/agent-scope/connection-scope.ts +199 -0
- package/src/modules/agent-scope/index.ts +15 -0
- package/src/modules/audit/agent-audit.service.ts +5 -3
- package/src/modules/audit/agent-connection.routes.ts +1 -1
- package/src/modules/audit/agent-rest-audit.middleware.ts +1 -1
- package/src/modules/audit/audit.contract.ts +6 -0
- package/src/modules/audit/audit.routes.ts +4 -4
- package/src/modules/auth/__tests__/auth.middleware.test.ts +30 -2
- package/src/modules/auth/__tests__/auth.routes.test.ts +71 -5
- package/src/modules/auth/__tests__/auth.service.test.ts +90 -9
- package/src/modules/auth/__tests__/password-change-sessions.pg.test.ts +269 -0
- package/src/modules/auth/account-admission.ts +19 -0
- package/src/modules/auth/account-erasure.service.ts +4 -9
- package/src/modules/auth/account-switch-lock.ts +2 -2
- package/src/modules/auth/account.routes.ts +3 -3
- package/src/modules/auth/auth.middleware.ts +45 -4
- package/src/modules/auth/auth.routes.ts +46 -29
- package/src/modules/auth/auth.service.ts +139 -38
- package/src/modules/auth/index.ts +5 -0
- package/src/modules/auth/oidc-auth-provider.ts +3 -10
- package/src/modules/code-mode/code-mode.tool.ts +1 -1
- package/src/modules/connection-probe/connection-probe.service.ts +3 -6
- package/src/modules/database/__tests__/legacy-change-request-body.test.ts +118 -0
- package/src/modules/database/__tests__/legacy-request-bodies.pg.test.ts +258 -0
- package/src/modules/database/__tests__/pii-backfill.pg.test.ts +15 -18
- package/src/modules/database/__tests__/session-version-migration.pg.test.ts +133 -0
- package/src/modules/database/core-schema.ts +76 -36
- package/src/modules/database/index.ts +9 -0
- package/src/modules/database/migrate.ts +79 -3
- package/src/modules/declared-variables/__tests__/declared-variables.route.test.ts +44 -1
- package/src/modules/declared-variables/declared-variables.routes.ts +14 -3
- package/src/modules/diff/diff.routes.ts +5 -5
- package/src/modules/diff/diff.service.ts +2 -2
- package/src/modules/diff/index.ts +6 -0
- package/src/modules/embed/__tests__/embed.tools.test.ts +12 -0
- package/src/modules/embed/account-link.service.ts +2 -2
- package/src/modules/embed/embed.routes.ts +2 -2
- package/src/modules/embed/embed.service.ts +1 -1
- package/src/modules/embed/embed.tools.ts +11 -9
- package/src/modules/github-app/github-app.connection.ts +1 -1
- package/src/modules/github-app/github-app.routes.ts +3 -3
- package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +25 -0
- package/src/modules/kb-fs/__tests__/repo-path.test.ts +53 -8
- package/src/modules/kb-fs/index.ts +13 -0
- package/src/modules/kb-fs/locking-filesystem.ts +8 -2
- package/src/modules/kb-fs/repo-path.ts +33 -7
- package/src/modules/kb-fs/tmp-ref.ts +81 -0
- package/src/modules/kb-sync/kb-sync.routes.ts +3 -3
- package/src/modules/kb-sync/kb-sync.service.ts +1 -1
- package/src/modules/kb-sync/sync-auth.ts +1 -1
- package/src/modules/kb-sync/sync-payload.ts +1 -1
- package/src/modules/marketplace/git-http.routes.ts +1 -1
- package/src/modules/marketplace/github-facade/github-facade-admin.routes.ts +1 -1
- package/src/modules/marketplace/github-facade/github-facade-codes.store.ts +2 -2
- package/src/modules/marketplace/github-facade/github-facade-credentials.service.ts +2 -2
- package/src/modules/marketplace/github-facade/github-facade.routes.ts +2 -2
- package/src/modules/marketplace/github-facade/github-facade.service.ts +2 -2
- package/src/modules/marketplace/marketplace-repo.service.ts +2 -2
- package/src/modules/mcp/__tests__/connect-as.pg.test.ts +137 -0
- package/src/modules/mcp/__tests__/mcp-auth.middleware.test.ts +29 -5
- package/src/modules/mcp/__tests__/mcp-routes-harness.ts +8 -0
- package/src/modules/mcp/__tests__/mcp.connect-as.test.ts +195 -0
- package/src/modules/mcp/__tests__/mcp.routes.connect-as.test.ts +192 -0
- package/src/modules/mcp/__tests__/oauth-consent.connect-as.test.ts +146 -0
- package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +213 -0
- package/src/modules/mcp/index.ts +7 -0
- package/src/modules/mcp/mcp-auth.middleware.ts +25 -9
- package/src/modules/mcp/mcp.routes.ts +42 -8
- package/src/modules/mcp/mcp.service.ts +136 -29
- package/src/modules/mcp/oauth/bevel-oauth-provider.ts +48 -10
- package/src/modules/mcp/oauth/oauth-consent.routes.ts +42 -2
- package/src/modules/onboarding/onboarding.routes.ts +1 -1
- package/src/modules/onboarding/starter-pack.service.ts +5 -6
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +2 -1
- package/src/modules/plugins/__tests__/plugin-links.service.test.ts +2 -1
- package/src/modules/plugins/__tests__/plugins.tools.test.ts +38 -2
- package/src/modules/plugins/compile/compile-marketplace.ts +2 -2
- package/src/modules/plugins/compile/marketplace-compiler.service.ts +3 -3
- package/src/modules/plugins/discovery/bundle-dialect/registry.ts +1 -1
- package/src/modules/plugins/index.ts +3 -1
- package/src/modules/plugins/join-proposals.ts +2 -2
- package/src/modules/plugins/join-request-jobs.service.ts +3 -3
- package/src/modules/plugins/join-request-records.store.ts +2 -2
- package/src/modules/plugins/join-requests.service.ts +4 -4
- package/src/modules/plugins/plugin-links.service.ts +10 -11
- package/src/modules/plugins/plugin-links.ts +23 -6
- package/src/modules/plugins/plugin-provision.service.ts +4 -5
- package/src/modules/plugins/plugin-rename.service.ts +3 -3
- package/src/modules/plugins/plugins.contract.ts +1 -1
- package/src/modules/plugins/plugins.routes.ts +39 -8
- package/src/modules/plugins/plugins.service.ts +5 -5
- package/src/modules/plugins/plugins.tools.ts +4 -4
- package/src/modules/plugins/teams.routes.ts +3 -3
- package/src/modules/secrets-vault/__tests__/connect-pending.route.test.ts +113 -0
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +2 -2
- package/src/modules/secrets-vault/index.ts +2 -0
- package/src/modules/secrets-vault/secrets-vault.routes.ts +27 -7
- package/src/modules/settings/__tests__/deployment-settings.service.test.ts +88 -1
- package/src/modules/settings/connection-check.ts +1 -1
- package/src/modules/settings/deployment-settings.service.ts +44 -4
- package/src/modules/settings/git-root-folders.ts +1 -1
- package/src/modules/settings/index.ts +12 -0
- package/src/modules/settings/setup.routes.ts +5 -4
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +2 -2
- package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +6 -3
- package/src/modules/skills/__tests__/skills.service.test.ts +34 -0
- package/src/modules/skills/allowed-tools-check.ts +2 -6
- package/src/modules/skills/index.ts +9 -2
- package/src/modules/skills/pending-skills.service.ts +3 -4
- package/src/modules/skills/skill-access-requests.routes.ts +10 -17
- package/src/modules/skills/skills.contract.ts +17 -0
- package/src/modules/skills/skills.routes.ts +1 -1
- package/src/modules/skills/skills.service.ts +7 -3
- package/src/modules/skills/skills.tools.ts +49 -22
- package/src/modules/tool-auth/__tests__/external-api-key.service.test.ts +4 -0
- package/src/modules/tool-auth/connection-key-rejection.ts +1 -1
- package/src/modules/tool-auth/connection-keys-admin.routes.ts +2 -2
- package/src/modules/tool-auth/external-api-key.interface.ts +11 -1
- package/src/modules/tool-auth/external-api-key.service.ts +7 -4
- package/src/modules/tool-auth/index.ts +14 -0
- package/src/modules/tool-auth/internal-token.service.ts +10 -0
- package/src/modules/tool-auth/tool-auth.middleware.ts +48 -6
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +2 -2
- package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +5 -3
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +2 -2
- package/src/modules/tool-helpers/default-branch-write.ts +1 -1
- package/src/modules/tool-helpers/index.ts +5 -1
- package/src/modules/tool-helpers/route-argument-check.ts +1 -1
- package/src/modules/tool-helpers/route-tool-schemas.ts +1 -1
- package/src/modules/tool-helpers/tool-context.ts +18 -10
- package/src/modules/tool-helpers/tool-def.ts +7 -3
- package/src/modules/tool-helpers/tool-handler.ts +36 -2
- package/src/modules/tool-helpers/tool.contract.ts +12 -2
- package/src/modules/tool-helpers/validate-token.ts +5 -4
- package/src/modules/tool-manuals/__tests__/tool-manuals.archive.route.test.ts +80 -4
- package/src/modules/tool-manuals/__tests__/tool-manuals.service.test.ts +42 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +3 -3
- package/src/modules/tool-manuals/index.ts +12 -2
- package/src/modules/tool-manuals/mcp-server-edit.service.ts +2 -2
- package/src/modules/tool-manuals/pending-tools.service.ts +2 -2
- package/src/modules/tool-manuals/tool-delete.service.ts +5 -6
- package/src/modules/tool-manuals/tool-manuals.contract.ts +18 -6
- package/src/modules/tool-manuals/tool-manuals.routes.ts +45 -8
- package/src/modules/tool-manuals/tool-manuals.service.ts +34 -18
- package/src/modules/tool-manuals/tool-manuals.tools.ts +32 -17
- package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +439 -0
- package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +2 -2
- package/src/modules/tool-registry/__tests__/tool-registry.test.ts +9 -2
- package/src/modules/tool-registry/description-length.ts +2 -2
- package/src/modules/tool-registry/index.ts +22 -0
- package/src/modules/tool-registry/manual.routes.ts +38 -11
- package/src/modules/tool-registry/read-only-hints.contract.ts +54 -0
- package/src/modules/tool-registry/read-only-hints.ts +225 -0
- package/src/modules/tool-registry/tool.contract.ts +18 -0
- package/src/modules/update-check/update-check.routes.ts +2 -2
- package/src/modules/workflow/__tests__/event-bus.test.ts +14 -2
- package/src/modules/workflow/__tests__/events-delivery.test.ts +778 -0
- package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +85 -22
- package/src/modules/workflow/__tests__/workflow.service.sync.test.ts +1 -1
- package/src/modules/workflow/__tests__/workflow.service.update-change-request.pg.test.ts +120 -0
- package/src/modules/workflow/__tests__/workflow.service.update-change-request.test.ts +346 -0
- package/src/modules/workflow/agent-tools/__tests__/change-request-read-shape.test.ts +32 -209
- package/src/modules/workflow/agent-tools/__tests__/change-request-read.tools.test.ts +16 -245
- package/src/modules/workflow/agent-tools/__tests__/update-change-request.parity.test.ts +306 -0
- package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +87 -60
- package/src/modules/workflow/agent-tools/change-request-read-shape.ts +18 -153
- package/src/modules/workflow/agent-tools/change-request-read.tools.ts +24 -96
- package/src/modules/workflow/agent-tools/change-request-summary.ts +16 -2
- package/src/modules/workflow/agent-tools/workflow.tools.ts +63 -84
- package/src/modules/workflow/change-request-hooks.ts +1 -1
- package/src/modules/workflow/event-bus.ts +3 -1
- package/src/modules/workflow/events-delivery.ts +278 -0
- package/src/modules/workflow/events.routes.ts +30 -9
- package/src/modules/workflow/file-lock.service.ts +2 -2
- package/src/modules/workflow/git/__tests__/git.service.list-branches.test.ts +130 -3
- package/src/modules/workflow/git/__tests__/pull-request.service.getPrDetail.test.ts +24 -9
- package/src/modules/workflow/git/git.service.ts +34 -56
- package/src/modules/workflow/git/node-git-runner.ts +1 -1
- package/src/modules/workflow/git/pull-request.service.ts +34 -29
- package/src/modules/workflow/index.ts +15 -2
- package/src/modules/workflow/pending-commits.service.ts +2 -2
- package/src/modules/workflow/read-on-branch.ts +1 -1
- package/src/modules/workflow/recovery-bot.ts +2 -2
- package/src/modules/workflow/review-workflow/approval-lock.ts +1 -1
- package/src/modules/workflow/review-workflow/review-workflow.interface.ts +3 -35
- package/src/modules/workflow/review-workflow/review-workflow.service.ts +6 -165
- package/src/modules/workflow/workflow.routes.ts +46 -100
- package/src/modules/workflow/workflow.service.ts +277 -191
- package/src/modules/workspace/__tests__/agent-downloads.test.ts +2 -1
- package/src/modules/workspace/__tests__/agent-uploads.test.ts +87 -1
- package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +2 -1
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +2 -1
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +4 -3
- package/src/modules/workspace/__tests__/holds-nul.test.ts +66 -0
- package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +5 -4
- package/src/modules/workspace/__tests__/ripgrep-search.test.ts +570 -0
- package/src/modules/workspace/__tests__/ripgrep-version.test.ts +29 -0
- package/src/modules/workspace/__tests__/worker-pool.test.ts +118 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +3 -2
- package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +928 -0
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +17 -37
- package/src/modules/workspace/__tests__/workspace.service.ensure-remotes-fetched.test.ts +30 -0
- package/src/modules/workspace/__tests__/workspace.service.read-filter.test.ts +20 -8
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +4 -3
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +24 -11
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +423 -117
- package/src/modules/workspace/agent-access.gate.ts +3 -3
- package/src/modules/workspace/agent-download.builder.ts +1 -1
- package/src/modules/workspace/agent-upload.routes.ts +19 -0
- package/src/modules/workspace/agent-upload.store.ts +18 -0
- package/src/modules/workspace/file-readers/README.md +9 -0
- package/src/modules/workspace/file-readers/__tests__/doc-extract.service.test.ts +175 -0
- package/src/modules/workspace/file-readers/__tests__/doc-extract.test.ts +21 -16
- package/src/modules/workspace/file-readers/__tests__/extract-in-worker.test.ts +229 -0
- package/src/modules/workspace/file-readers/__tests__/file-reader.registry.test.ts +2 -1
- package/src/modules/workspace/file-readers/__tests__/fixtures/damaged-pdf.ts +34 -0
- package/src/modules/workspace/file-readers/__tests__/fixtures/misbehaving-extract.worker.ts +57 -0
- package/src/modules/workspace/file-readers/__tests__/fixtures/pdf-in-trouble.worker.ts +20 -0
- package/src/modules/workspace/file-readers/__tests__/fixtures/unloadable-extract.worker.ts +2 -0
- package/src/modules/workspace/file-readers/doc-extract.service.ts +144 -36
- package/src/modules/workspace/file-readers/doc-extract.types.ts +13 -3
- package/src/modules/workspace/file-readers/document-extractor.contract.ts +42 -0
- package/src/modules/workspace/file-readers/document-extractors.ts +28 -0
- package/src/modules/workspace/file-readers/document-formats.ts +13 -0
- package/src/modules/workspace/file-readers/document-reader.ts +40 -36
- package/src/modules/workspace/file-readers/extract-in-worker.ts +183 -0
- package/src/modules/workspace/file-readers/extract-pdf.ts +23 -4
- package/src/modules/workspace/file-readers/extract.worker.ts +5 -0
- package/src/modules/workspace/file-readers/extraction-cache.ts +33 -12
- package/src/modules/workspace/file-readers/extraction-worker.ts +86 -0
- package/src/modules/workspace/file-readers/file-reader.registry.ts +6 -20
- package/src/modules/workspace/file-readers/file-reader.ts +14 -4
- package/src/modules/workspace/first-run.ts +1 -1
- package/src/modules/workspace/git-internals.middleware.ts +1 -1
- package/src/modules/workspace/index.ts +37 -0
- package/src/modules/workspace/kb-repository.ts +3 -2
- package/src/modules/workspace/not-found.ts +1 -1
- package/src/modules/workspace/nul-scan.ts +50 -0
- package/src/modules/workspace/pattern-matcher.contract.ts +124 -33
- package/src/modules/workspace/ripgrep-search.ts +715 -0
- package/src/modules/workspace/ripgrep-version.ts +35 -0
- package/src/modules/workspace/routine-write-policy.ts +1 -1
- package/src/modules/workspace/startup/__tests__/beside-checkout.test.ts +11 -0
- package/src/modules/workspace/startup/beside-checkout.ts +13 -5
- package/src/modules/workspace/startup/kb-git.ts +1 -1
- package/src/modules/workspace/startup/kb-startup-runner.ts +1 -2
- package/src/modules/workspace/startup/steps/groups-to-plugins.step.ts +3 -3
- package/src/modules/workspace/startup/steps/personal-spaces.step.ts +2 -2
- package/src/modules/workspace/startup/steps/plugin-layout.ts +1 -1
- package/src/modules/workspace/startup/steps/roles-yaml.step.ts +1 -1
- package/src/modules/workspace/startup/steps/seed-tree.ts +2 -2
- package/src/modules/workspace/startup/steps/template-files.step.ts +2 -2
- package/src/modules/workspace/startup/steps/template-source.ts +2 -2
- package/src/modules/workspace/worker-pool.ts +192 -0
- package/src/modules/workspace/workspace-tmp.ts +457 -0
- package/src/modules/workspace/workspace.routes.ts +15 -39
- package/src/modules/workspace/workspace.service.ts +96 -22
- package/src/modules/workspace/workspace.tools.ts +550 -186
- package/src/modules/workspace/write-denial.ts +4 -5
- package/src/modules/write-access/index.ts +7 -0
- package/src/shared/__tests__/module-boundaries.lint.test.ts +301 -0
- package/src/shared/path-order.ts +37 -8
- package/starter-packs/engineering/Plugins/engineering-starter/access.md +1 -1
- package/starter-packs/general/Plugins/general-starter/access.md +1 -1
- package/starter-packs/operations/Plugins/operations-starter/access.md +1 -1
- package/starter-packs/sales/Plugins/sales-starter/access.md +1 -1
- package/starter-packs/support/Plugins/support-starter/access.md +1 -1
- package/dist/modules/workspace/bounded-matcher.d.ts +0 -79
- package/dist/modules/workspace/bounded-matcher.d.ts.map +0 -1
- package/dist/modules/workspace/bounded-matcher.js +0 -261
- package/dist/modules/workspace/bounded-matcher.js.map +0 -1
- package/src/modules/workflow/__tests__/format-affected-owners.test.ts +0 -85
- package/src/modules/workspace/__tests__/bounded-matcher.test.ts +0 -213
- package/src/modules/workspace/bounded-matcher.ts +0 -328
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { Worker } from 'node:worker_threads';
|
|
2
|
+
import { exchange, MAX_TIMER_MS, sizingOption, WorkerPool } from '../worker-pool.js';
|
|
3
|
+
import {
|
|
4
|
+
extractionTimeoutNotice,
|
|
5
|
+
type IDocumentExtractor,
|
|
6
|
+
type IsolatedExtraction,
|
|
7
|
+
} from './document-extractor.contract.js';
|
|
8
|
+
import type { ExtractionJob, ExtractionReply } from './extraction-worker.js';
|
|
9
|
+
import { logger } from '../../../shared/logging.js';
|
|
10
|
+
|
|
11
|
+
const log = logger('documents');
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Extraction time one document may spend in its worker: the platform's rule,
|
|
15
|
+
* not a deployment's (decided 2026-10-19). A longer wait is too unresponsive
|
|
16
|
+
* for a read or a search; the hour a timeout is remembered for is what keeps a
|
|
17
|
+
* hanging file cheap (see `DocExtractService`).
|
|
18
|
+
*/
|
|
19
|
+
export const EXTRACTION_BUDGET_MS = 10_000;
|
|
20
|
+
|
|
21
|
+
/** What a document answers when its worker failed outside the parser: never the worker's own error. */
|
|
22
|
+
export const EXTRACTION_WORKER_FAILED = 'could not be read: its extraction failed on the server; try again later';
|
|
23
|
+
|
|
24
|
+
/** The worker script: a module that calls `serveExtractions` (see `extraction-worker.ts`). */
|
|
25
|
+
export interface ExtractionWorkerEntry {
|
|
26
|
+
url: URL;
|
|
27
|
+
/** Node options for the worker thread — a TypeScript entry needs its loader. */
|
|
28
|
+
execArgv: string[];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface WorkerDocumentExtractorOptions {
|
|
32
|
+
/** Worker time one extraction may spend. Default {@link EXTRACTION_BUDGET_MS}. */
|
|
33
|
+
budgetMs?: number;
|
|
34
|
+
/** Workers kept for extractions at once; one past this waits for a worker. Default 4. */
|
|
35
|
+
poolMax?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Extractions that may wait for a worker at once. A waiting extraction holds
|
|
38
|
+
* the file's bytes, so the queue is capped: past it an extraction is answered
|
|
39
|
+
* `busy`, and nothing about the file is remembered. Default 32.
|
|
40
|
+
*/
|
|
41
|
+
maxWaiting?: number;
|
|
42
|
+
/**
|
|
43
|
+
* The worker script. Default: the document extractors (`extract.worker`).
|
|
44
|
+
* A composition serving other extractors — a test's misbehaving parser —
|
|
45
|
+
* names its own module calling `serveExtractions`.
|
|
46
|
+
*/
|
|
47
|
+
entry?: ExtractionWorkerEntry;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The one place a document's extractor runs (see {@link IDocumentExtractor}):
|
|
52
|
+
* a pooled worker thread — the extraction worker kind of the shared
|
|
53
|
+
* {@link WorkerPool}, which `grep`'s regex matcher is the other kind of —
|
|
54
|
+
* under a budget per file.
|
|
55
|
+
*
|
|
56
|
+
* The bytes are COPIED once on the request thread and the copy transferred,
|
|
57
|
+
* so the caller's buffer (already hashed for the cache key, and possibly a
|
|
58
|
+
* slice of Node's shared pool) is never detached. Past the budget the worker is
|
|
59
|
+
* terminated, which stops a parser mid-loop, and the file answers the timeout
|
|
60
|
+
* notice. A worker that answers with a dangling rejection, raises, or dies is
|
|
61
|
+
* never reused; the pool replaces it. A rejection the worker cannot pin on
|
|
62
|
+
* this job — it had served another before (see `serveExtractions`) — runs the
|
|
63
|
+
* job again in a fresh worker, so one file's failure is never another's.
|
|
64
|
+
*/
|
|
65
|
+
export class WorkerDocumentExtractor implements IDocumentExtractor {
|
|
66
|
+
private readonly budgetMs: number;
|
|
67
|
+
private readonly pool: WorkerPool;
|
|
68
|
+
private nextJob = 1;
|
|
69
|
+
private closing = false;
|
|
70
|
+
|
|
71
|
+
constructor(opts: WorkerDocumentExtractorOptions = {}) {
|
|
72
|
+
this.budgetMs = sizingOption('WorkerDocumentExtractor', 'budgetMs', opts.budgetMs ?? EXTRACTION_BUDGET_MS, 1, MAX_TIMER_MS);
|
|
73
|
+
const entry = opts.entry ?? defaultEntry();
|
|
74
|
+
this.pool = new WorkerPool(
|
|
75
|
+
() => new Worker(entry.url, { execArgv: entry.execArgv }),
|
|
76
|
+
{
|
|
77
|
+
// Three documents extracted at once each get a worker of their own.
|
|
78
|
+
poolMax: sizingOption('WorkerDocumentExtractor', 'poolMax', opts.poolMax ?? 4, 1),
|
|
79
|
+
maxWaiting: sizingOption('WorkerDocumentExtractor', 'maxWaiting', opts.maxWaiting ?? 32, 0),
|
|
80
|
+
},
|
|
81
|
+
() => new ExtractionBusyError(),
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
async extract(extension: string, bytes: Buffer): Promise<IsolatedExtraction> {
|
|
86
|
+
const first = await this.attempt(extension, bytes, this.budgetMs, false);
|
|
87
|
+
if (!('unattributed' in first)) return first;
|
|
88
|
+
// A rejection came while a worker that had served another job ran this one,
|
|
89
|
+
// and may be that job's: run it again where it is the first job, so what
|
|
90
|
+
// the file is answered (and remembered) as is its own. With the WHOLE
|
|
91
|
+
// budget again: the first run was cut short by another file's leftover,
|
|
92
|
+
// not by this file, and a run given only what was left would time out a
|
|
93
|
+
// sound document — and remember that timeout for an hour.
|
|
94
|
+
const again = await this.attempt(extension, bytes, this.budgetMs, true);
|
|
95
|
+
// In a fresh worker the worker never answers `unattributed`; a crash of the moment if it ever did —
|
|
96
|
+
// and never with that rejection's words, which may be another file's.
|
|
97
|
+
return 'unattributed' in again ? { ok: false, failure: 'crashed', message: EXTRACTION_WORKER_FAILED } : again;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
private async attempt(
|
|
101
|
+
extension: string,
|
|
102
|
+
bytes: Buffer,
|
|
103
|
+
budgetMs: number,
|
|
104
|
+
fresh: boolean,
|
|
105
|
+
): Promise<IsolatedExtraction | { unattributed: true; message: string }> {
|
|
106
|
+
let w: Worker;
|
|
107
|
+
try {
|
|
108
|
+
w = await (fresh ? this.pool.acquireFresh() : this.pool.acquire());
|
|
109
|
+
} catch {
|
|
110
|
+
return busy();
|
|
111
|
+
}
|
|
112
|
+
const copy = new Uint8Array(bytes);
|
|
113
|
+
const job: ExtractionJob = { id: this.nextJob++, extension, bytes: copy };
|
|
114
|
+
const outcome = await exchange<ExtractionReply>(w, job, budgetMs, [copy.buffer]);
|
|
115
|
+
if ('timeout' in outcome) {
|
|
116
|
+
this.pool.discard(w);
|
|
117
|
+
return { ok: false, failure: 'timeout', message: extractionTimeoutNotice(this.budgetMs) };
|
|
118
|
+
}
|
|
119
|
+
if ('error' in outcome) {
|
|
120
|
+
// Raised outside every guard the worker installs — its script failed to
|
|
121
|
+
// load, or it ran out of memory: a fault of the moment rather than of
|
|
122
|
+
// the bytes. The worker is ending, and the pool replaces it. What went
|
|
123
|
+
// wrong is the server's (a module path, a heap size): logged here, and
|
|
124
|
+
// the reader is told — and the hour remembers — the same words each time.
|
|
125
|
+
log.error('an extraction worker failed', { err: outcome.error });
|
|
126
|
+
return { ok: false, failure: 'crashed', message: EXTRACTION_WORKER_FAILED };
|
|
127
|
+
}
|
|
128
|
+
if ('exited' in outcome) {
|
|
129
|
+
if (this.closing) return busy();
|
|
130
|
+
// Exit 0 is the worker ending itself over an earlier job's straggler that
|
|
131
|
+
// landed between jobs (see `serveExtractions`), after this job was posted
|
|
132
|
+
// but before it was taken up: it says nothing about this file. Run it
|
|
133
|
+
// again in a fresh worker, as for any rejection it cannot pin on this job.
|
|
134
|
+
if (outcome.exited === 0 && !fresh) return { unattributed: true, message: EXTRACTION_WORKER_FAILED };
|
|
135
|
+
return {
|
|
136
|
+
ok: false,
|
|
137
|
+
failure: 'crashed',
|
|
138
|
+
message: `could not be read: its extraction stopped unexpectedly (exit code ${outcome.exited})`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
const { reply } = outcome;
|
|
142
|
+
if (reply.retire) this.pool.discard(w);
|
|
143
|
+
else this.pool.release(w);
|
|
144
|
+
if (reply.unattributed && !reply.ok) return { unattributed: true, message: reply.message };
|
|
145
|
+
return reply.ok
|
|
146
|
+
? { ok: true, summary: reply.summary, text: reply.text }
|
|
147
|
+
: { ok: false, failure: reply.transient ? 'crashed' : 'parser', message: reply.message };
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
close(): Promise<void> {
|
|
151
|
+
this.closing = true;
|
|
152
|
+
return this.pool.close();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/** Every worker busy and the queue for one full. */
|
|
157
|
+
class ExtractionBusyError extends Error {
|
|
158
|
+
constructor() {
|
|
159
|
+
super('every extraction worker is busy');
|
|
160
|
+
this.name = 'ExtractionBusyError';
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
function busy(): IsolatedExtraction {
|
|
165
|
+
return {
|
|
166
|
+
ok: false,
|
|
167
|
+
failure: 'busy',
|
|
168
|
+
message: 'could not be read: too many documents are being extracted at once; try again in a few seconds',
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* The document extractors' worker, beside this module. Run from the build it
|
|
174
|
+
* is plain JavaScript; run from source (the test suites) it is TypeScript,
|
|
175
|
+
* which a worker thread loads through `tsx`, as the suites themselves are.
|
|
176
|
+
*/
|
|
177
|
+
function defaultEntry(): ExtractionWorkerEntry {
|
|
178
|
+
const fromSource = import.meta.url.endsWith('.ts');
|
|
179
|
+
return {
|
|
180
|
+
url: new URL(fromSource ? './extract.worker.ts' : './extract.worker.js', import.meta.url),
|
|
181
|
+
execArgv: fromSource ? ['--import', 'tsx'] : [],
|
|
182
|
+
};
|
|
183
|
+
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { ExtractResult } from './doc-extract.types.js';
|
|
2
2
|
import { MAX_DOC_PART_BYTES } from './ooxml-text.js';
|
|
3
|
+
import { logger } from '../../../shared/logging.js';
|
|
4
|
+
|
|
5
|
+
const log = logger('documents');
|
|
3
6
|
|
|
4
7
|
/**
|
|
5
8
|
* Extract a PDF's TEXT LAYER page by page with pdf.js (`pdfjs-dist`,
|
|
@@ -67,9 +70,19 @@ export async function extractPdf(bytes: Buffer): Promise<ExtractResult> {
|
|
|
67
70
|
// The loading TASK is what gets destroyed at the end, not the document:
|
|
68
71
|
// pdf.js 6 dropped `PDFDocumentProxy.destroy()`, and destroying the task
|
|
69
72
|
// frees the document (and its pages) with it — the shape the viewer uses.
|
|
70
|
-
let
|
|
73
|
+
let getDocument: PdfJs['getDocument'];
|
|
74
|
+
try {
|
|
75
|
+
({ getDocument } = await loadPdfJs());
|
|
76
|
+
} catch (err) {
|
|
77
|
+
// The reader, not the file: a later read must try this file again. Why
|
|
78
|
+
// it did not load is the server's to know (a module path, a missing
|
|
79
|
+
// dependency) — logged here, never quoted to the reader.
|
|
80
|
+
log.error('the PDF reader did not load', { err });
|
|
81
|
+
return { ok: false, transient: true, message: READER_DID_NOT_LOAD };
|
|
82
|
+
}
|
|
83
|
+
let task: ReturnType<typeof openPdf>;
|
|
71
84
|
try {
|
|
72
|
-
task =
|
|
85
|
+
task = openPdf(getDocument, bytes);
|
|
73
86
|
} catch (err) {
|
|
74
87
|
return { ok: false, message: `could not be parsed as a PDF (${(err as Error).message})` };
|
|
75
88
|
}
|
|
@@ -167,10 +180,13 @@ export async function extractPdf(bytes: Buffer): Promise<ExtractResult> {
|
|
|
167
180
|
}
|
|
168
181
|
}
|
|
169
182
|
|
|
183
|
+
/** What a PDF read answers when pdf.js itself failed to load: the same words, whatever the cause. */
|
|
184
|
+
export const READER_DID_NOT_LOAD = 'could not be read: the PDF reader did not load on the server; try again later';
|
|
185
|
+
|
|
170
186
|
type PdfJs = typeof import('pdfjs-dist/legacy/build/pdf.mjs');
|
|
171
187
|
let pdfjsPromise: Promise<PdfJs> | undefined;
|
|
172
188
|
|
|
173
|
-
|
|
189
|
+
function loadPdfJs(): Promise<PdfJs> {
|
|
174
190
|
pdfjsPromise ??= import('pdfjs-dist/legacy/build/pdf.mjs').catch((err: unknown) => {
|
|
175
191
|
// A FAILED load must not be memoized: left in place, the rejected promise
|
|
176
192
|
// would answer every later read and disable PDF extraction for the whole
|
|
@@ -178,7 +194,10 @@ async function openPdf(bytes: Buffer) {
|
|
|
178
194
|
pdfjsPromise = undefined;
|
|
179
195
|
throw err;
|
|
180
196
|
});
|
|
181
|
-
|
|
197
|
+
return pdfjsPromise;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
function openPdf(getDocument: PdfJs['getDocument'], bytes: Buffer) {
|
|
182
201
|
// Returns the loading task; the caller awaits `.promise` for the document
|
|
183
202
|
// and destroys the task when done (see `extractPdf`).
|
|
184
203
|
return getDocument({
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { DOCUMENT_EXTRACTORS } from './document-extractors.js';
|
|
2
|
+
import { serveExtractions } from './extraction-worker.js';
|
|
3
|
+
|
|
4
|
+
/** The extraction worker's entry: the document extractors, served one job at a time (see `extract-in-worker.ts`). */
|
|
5
|
+
serveExtractions(DOCUMENT_EXTRACTORS);
|
|
@@ -15,6 +15,15 @@ export function gitBlobSha(bytes: Buffer): string {
|
|
|
15
15
|
return createHash('sha1').update(`blob ${bytes.length}\0`).update(bytes).digest('hex');
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* What the cache holds for a key: the extraction, or the notice a failed one
|
|
20
|
+
* answered with. A failure with `until` (epoch ms) is remembered only until
|
|
21
|
+
* then — a lookup past it is a miss; one without is remembered like a success.
|
|
22
|
+
*/
|
|
23
|
+
export type CachedExtraction =
|
|
24
|
+
| ({ failed?: undefined } & ExtractedDoc)
|
|
25
|
+
| { failed: true; message: string; until?: number };
|
|
26
|
+
|
|
18
27
|
/** Default size bound for the on-disk extraction cache. */
|
|
19
28
|
const DEFAULT_MAX_TOTAL_BYTES = 512 * 1024 * 1024; // 512MB
|
|
20
29
|
|
|
@@ -24,7 +33,8 @@ const DEFAULT_MAX_TOTAL_BYTES = 512 * 1024 * 1024; // 512MB
|
|
|
24
33
|
* re-upload of identical bytes, or the same document on another branch or
|
|
25
34
|
* path, hits the same entry; extension, so identical bytes under another
|
|
26
35
|
* FORMAT never return the wrong extractor's output). One JSON file per entry
|
|
27
|
-
* (`<key>.json` holding the `{ summary, text }
|
|
36
|
+
* (`<key>.json` holding the `{ summary, text }`, or a failure's
|
|
37
|
+
* `{ failed, message, until? }`), under a dedicated root
|
|
28
38
|
* that — like the spill
|
|
29
39
|
* store's — sits BESIDE the workspaces root, never inside a workspace and
|
|
30
40
|
* never committed.
|
|
@@ -43,16 +53,23 @@ export class DocExtractionCache {
|
|
|
43
53
|
private readonly maxTotalBytes: number = DEFAULT_MAX_TOTAL_BYTES,
|
|
44
54
|
) {}
|
|
45
55
|
|
|
46
|
-
/**
|
|
47
|
-
|
|
56
|
+
/**
|
|
57
|
+
* The cached entry for `sha`, or undefined on miss/corrupt entry — and for a
|
|
58
|
+
* failure remembered only until a moment `now` (epoch ms) has passed.
|
|
59
|
+
*/
|
|
60
|
+
async get(sha: string, now: number): Promise<CachedExtraction | undefined> {
|
|
48
61
|
try {
|
|
49
62
|
const parsed: unknown = JSON.parse(await fs.readFile(this.entryPath(sha), 'utf8'));
|
|
50
|
-
if (
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
63
|
+
if (typeof parsed !== 'object' || parsed === null) return undefined;
|
|
64
|
+
const entry = parsed as Record<string, unknown>;
|
|
65
|
+
if (entry.failed === true && typeof entry.message === 'string') {
|
|
66
|
+
if (entry.until === undefined) return { failed: true, message: entry.message };
|
|
67
|
+
return typeof entry.until === 'number' && now < entry.until
|
|
68
|
+
? { failed: true, message: entry.message, until: entry.until }
|
|
69
|
+
: undefined;
|
|
70
|
+
}
|
|
71
|
+
if (typeof entry.summary === 'string' && typeof entry.text === 'string') {
|
|
72
|
+
return { summary: entry.summary, text: entry.text };
|
|
56
73
|
}
|
|
57
74
|
return undefined;
|
|
58
75
|
} catch {
|
|
@@ -74,11 +91,15 @@ export class DocExtractionCache {
|
|
|
74
91
|
/** The prune in flight, so concurrent puts share ONE scan instead of racing their own. */
|
|
75
92
|
private pruning: Promise<void> | undefined;
|
|
76
93
|
|
|
77
|
-
/** Store an extraction under `sha`; prunes towards the size bound. Never throws. */
|
|
78
|
-
async put(sha: string,
|
|
94
|
+
/** Store an extraction (or a failure) under `sha`; prunes towards the size bound. Never throws. */
|
|
95
|
+
async put(sha: string, entry: CachedExtraction): Promise<void> {
|
|
79
96
|
try {
|
|
80
97
|
await fs.mkdir(this.root, { recursive: true });
|
|
81
|
-
const payload = JSON.stringify(
|
|
98
|
+
const payload = JSON.stringify(
|
|
99
|
+
entry.failed
|
|
100
|
+
? { failed: true, message: entry.message, ...(entry.until === undefined ? {} : { until: entry.until }) }
|
|
101
|
+
: { summary: entry.summary, text: entry.text },
|
|
102
|
+
);
|
|
82
103
|
await fs.writeFile(this.entryPath(sha), payload, 'utf8');
|
|
83
104
|
this.writtenSinceScan += Buffer.byteLength(payload);
|
|
84
105
|
if (
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { parentPort } from 'node:worker_threads';
|
|
2
|
+
import type { ExtractFn, ExtractResult } from './doc-extract.types.js';
|
|
3
|
+
|
|
4
|
+
/** One job, host → worker: the bytes (transferred, not copied) and the format to read them as. */
|
|
5
|
+
export interface ExtractionJob {
|
|
6
|
+
id: number;
|
|
7
|
+
extension: string;
|
|
8
|
+
bytes: Uint8Array;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* One answer, worker → host. `retire` says the worker must not run another
|
|
13
|
+
* job: a parser left a promise rejected behind it, so its state is no longer
|
|
14
|
+
* something a next job should inherit. `unattributed` says the rejection came
|
|
15
|
+
* while a worker that had served an earlier job was running this one, so it
|
|
16
|
+
* may be that earlier job's: the answer says nothing about this job's file,
|
|
17
|
+
* and the host runs the job again in a fresh worker.
|
|
18
|
+
*/
|
|
19
|
+
export type ExtractionReply = { id: number; retire?: true; unattributed?: true } & ExtractResult;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The worker side of document extraction: answer each job with what its
|
|
23
|
+
* format's extractor returns, ONE job at a time.
|
|
24
|
+
*
|
|
25
|
+
* A parser is contracted to answer for bad content rather than throw, but it
|
|
26
|
+
* is third-party code: one that throws is answered as the job's failure, and
|
|
27
|
+
* one that rejects a promise nobody awaits — pdf.js did, on a damaged
|
|
28
|
+
* cross-reference table, and took a whole server down with it (2026-10-15) —
|
|
29
|
+
* is caught HERE, in the worker's own process events, and answered as the
|
|
30
|
+
* job's failure with that rejection's message. Nothing a parser does reaches
|
|
31
|
+
* the server's process: the worker's events are the worker's.
|
|
32
|
+
*
|
|
33
|
+
* A rejection is pinned on a job only when that job is the first this worker
|
|
34
|
+
* ran: no other job's parser has run here, so the rejection is the job's own.
|
|
35
|
+
* One arriving while a LATER job runs may be a straggler from an earlier one —
|
|
36
|
+
* the host hands a worker its next job the moment it answers — so it is
|
|
37
|
+
* answered `unattributed`, and the host runs the job again where it is first.
|
|
38
|
+
* One arriving between jobs has nothing left to fail; the worker ends itself
|
|
39
|
+
* instead of carrying it into the next job.
|
|
40
|
+
*/
|
|
41
|
+
export function serveExtractions(extractors: Readonly<Record<string, ExtractFn>>): void {
|
|
42
|
+
const port = parentPort;
|
|
43
|
+
if (!port) throw new Error('serveExtractions runs inside a worker thread.');
|
|
44
|
+
let current: number | undefined;
|
|
45
|
+
let served = 0;
|
|
46
|
+
|
|
47
|
+
const answer = (reply: ExtractionReply): void => {
|
|
48
|
+
if (current !== reply.id) return; // already answered — by a dangling rejection, say
|
|
49
|
+
current = undefined;
|
|
50
|
+
port.postMessage(reply);
|
|
51
|
+
};
|
|
52
|
+
const failCurrent = (reason: unknown): void => {
|
|
53
|
+
// A straggler from a job already answered: this worker's parser state is
|
|
54
|
+
// no longer to be trusted, and left running it could pin the rejection on
|
|
55
|
+
// the NEXT job's file. It ends itself; the pool replaces it. Exit code 0 is
|
|
56
|
+
// this signal: the host may already have posted the next job, and runs that
|
|
57
|
+
// job again in a fresh worker rather than answering it as crashed.
|
|
58
|
+
if (current === undefined) process.exit(0);
|
|
59
|
+
const ownJob = served === 1;
|
|
60
|
+
answer({ id: current, ok: false, message: couldNotBeExtracted(reason), retire: true, ...(ownJob ? {} : { unattributed: true }) });
|
|
61
|
+
};
|
|
62
|
+
process.on('unhandledRejection', failCurrent);
|
|
63
|
+
process.on('uncaughtException', failCurrent);
|
|
64
|
+
|
|
65
|
+
port.on('message', (job: ExtractionJob) => {
|
|
66
|
+
current = job.id;
|
|
67
|
+
served++;
|
|
68
|
+
void (async () => {
|
|
69
|
+
let result: ExtractResult;
|
|
70
|
+
try {
|
|
71
|
+
const extract = extractors[job.extension];
|
|
72
|
+
result = extract
|
|
73
|
+
? await extract(Buffer.from(job.bytes.buffer, job.bytes.byteOffset, job.bytes.byteLength))
|
|
74
|
+
: { ok: false, message: `could not be extracted (no extractor reads "${job.extension}" files)` };
|
|
75
|
+
} catch (err) {
|
|
76
|
+
result = { ok: false, message: couldNotBeExtracted(err) };
|
|
77
|
+
}
|
|
78
|
+
answer({ id: job.id, ...result });
|
|
79
|
+
})();
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** The notice a parser's own error earns: the same words a thrown extractor always earned in `read_file`. */
|
|
84
|
+
function couldNotBeExtracted(reason: unknown): string {
|
|
85
|
+
return `could not be extracted (${reason instanceof Error ? reason.message : String(reason)})`;
|
|
86
|
+
}
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import type { DocExtractService } from './doc-extract.service.js';
|
|
2
2
|
import { DocumentReader } from './document-reader.js';
|
|
3
|
+
import { EMAIL_EXTENSIONS, OFFICE_DOCUMENT_EXTENSIONS } from './document-formats.js';
|
|
3
4
|
import { EmailReader } from './email-reader.js';
|
|
4
|
-
import { extractDocx } from './extract-docx.js';
|
|
5
|
-
import { extractEml } from './extract-eml.js';
|
|
6
|
-
import { extractMsg } from './extract-msg.js';
|
|
7
|
-
import { extractOdp } from './extract-odp.js';
|
|
8
|
-
import { extractOds } from './extract-ods.js';
|
|
9
|
-
import { extractOdt } from './extract-odt.js';
|
|
10
|
-
import { extractPdf } from './extract-pdf.js';
|
|
11
|
-
import { extractPptx } from './extract-pptx.js';
|
|
12
|
-
import { extractXlsx } from './extract-xlsx.js';
|
|
13
5
|
import { FileReaderRegistry } from './file-reader.js';
|
|
14
6
|
import { ImageReader } from './image-reader.js';
|
|
15
7
|
import { BinaryReader, LegacyOfficeReader, TextReader } from './text-reader.js';
|
|
@@ -19,24 +11,18 @@ import { BinaryReader, LegacyOfficeReader, TextReader } from './text-reader.js';
|
|
|
19
11
|
* which extension. Adding a format is one entry here (plus its reader/extract
|
|
20
12
|
* function); read_file, grep and the write-refusal all follow automatically.
|
|
21
13
|
*
|
|
22
|
-
* `docExtract` is the shared content-hash extraction
|
|
23
|
-
*
|
|
14
|
+
* `docExtract` is the shared content-hash extraction service every document
|
|
15
|
+
* reader extracts through (see DocumentReader); the extractors themselves run
|
|
16
|
+
* in its worker, never here.
|
|
24
17
|
* Everything not claimed below falls back to the TextReader.
|
|
25
18
|
*/
|
|
26
19
|
export function createFileReaderRegistry(docExtract: DocExtractService): FileReaderRegistry {
|
|
27
20
|
return new FileReaderRegistry(
|
|
28
21
|
[
|
|
29
|
-
new DocumentReader(
|
|
30
|
-
new DocumentReader('.pptx', extractPptx, docExtract),
|
|
31
|
-
new DocumentReader('.xlsx', extractXlsx, docExtract),
|
|
32
|
-
new DocumentReader('.pdf', extractPdf, docExtract),
|
|
33
|
-
new DocumentReader('.odt', extractOdt, docExtract),
|
|
34
|
-
new DocumentReader('.odp', extractOdp, docExtract),
|
|
35
|
-
new DocumentReader('.ods', extractOds, docExtract),
|
|
22
|
+
...OFFICE_DOCUMENT_EXTENSIONS.map((ext) => new DocumentReader(ext, docExtract)),
|
|
36
23
|
// Email files ride the same document machinery (cached extraction,
|
|
37
24
|
// greppable, not text-editable) with an email-honest write refusal.
|
|
38
|
-
new EmailReader(
|
|
39
|
-
new EmailReader('.msg', extractMsg, docExtract),
|
|
25
|
+
...EMAIL_EXTENSIONS.map((ext) => new EmailReader(ext, docExtract)),
|
|
40
26
|
new ImageReader(),
|
|
41
27
|
new LegacyOfficeReader(),
|
|
42
28
|
// Bytes no text tool may write: the image formats read_file does not
|
|
@@ -47,17 +47,27 @@ export const oneLine = displayPath;
|
|
|
47
47
|
*/
|
|
48
48
|
export type FileKind = 'text' | 'document' | 'image' | 'archive' | 'binary';
|
|
49
49
|
|
|
50
|
+
/** Where a read came from: the workspace whose file it is. A document reader reports a failed extraction there. */
|
|
51
|
+
export interface ReadOrigin {
|
|
52
|
+
workspaceId: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
50
55
|
/** A per-format file reader. Register implementations in `createFileReaderRegistry`. */
|
|
51
56
|
export interface FileReader {
|
|
52
57
|
/** The extensions this reader owns — lowercase, with the dot. Empty for the default (fallback) reader. */
|
|
53
58
|
readonly extensions: readonly string[];
|
|
54
|
-
/**
|
|
55
|
-
|
|
59
|
+
/**
|
|
60
|
+
* Read `bytes` (read at `path`) into what the read tools return. Must not
|
|
61
|
+
* throw for bad file content. `origin`, when the caller has one, is the
|
|
62
|
+
* workspace the read happened in.
|
|
63
|
+
*/
|
|
64
|
+
read(bytes: Buffer, path: string, origin?: ReadOrigin): Promise<ReadResult>;
|
|
56
65
|
/**
|
|
57
66
|
* Text `grep` may search, or null when there is nothing (cheaply) searchable.
|
|
58
67
|
* Default readers: the decoded text content (TextReader; null on NUL bytes) /
|
|
59
|
-
*
|
|
60
|
-
*
|
|
68
|
+
* absent = never greppable this way (ImageReader; DocumentReader, whose
|
|
69
|
+
* remembered extraction grep asks for through `cachedRead` — cold
|
|
70
|
+
* extraction is grep's call, under its per-walk budget).
|
|
61
71
|
*/
|
|
62
72
|
greppableText?(bytes: Buffer, path: string): Promise<string | null>;
|
|
63
73
|
/** May the agent TEXT-editing tools (write_file/write_files/edit_file) touch this file? */
|
|
@@ -32,7 +32,7 @@ import nodeFs from 'node:fs/promises';
|
|
|
32
32
|
import { join } from 'node:path';
|
|
33
33
|
import type { ITreeWalker } from '../../shared/fs.contract.js';
|
|
34
34
|
import { NEW_KNOWLEDGE_BASE_SECTION_ID } from '../agent-guide/index.js';
|
|
35
|
-
import { BevelIgnoreStack } from '../kb-fs/
|
|
35
|
+
import { BevelIgnoreStack } from '../kb-fs/index.js';
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
38
|
* The starter guide the template seeds at the top of the knowledge folder
|
|
@@ -2,7 +2,7 @@ import express from 'express';
|
|
|
2
2
|
import { GitInternalsError } from '../../shared/domain-errors.js';
|
|
3
3
|
import { domainErrorBody } from '../../shared/http-errors.js';
|
|
4
4
|
import { assertNotGitInternals, hasGitInternalsSegment } from '../../shared/git-internals.js';
|
|
5
|
-
import '../auth/
|
|
5
|
+
import '../auth/index.js'; // Express Request augmentation
|
|
6
6
|
|
|
7
7
|
/** The query and body fields through which a workspace route names a path. */
|
|
8
8
|
const GIT_GUARDED_QUERY_KEYS = ['path', 'toDir'] as const;
|
|
@@ -35,3 +35,40 @@ export {
|
|
|
35
35
|
type AgentAccessGate,
|
|
36
36
|
} from './agent-access.gate.js';
|
|
37
37
|
export { SpillStore } from './spill-store.js';
|
|
38
|
+
/**
|
|
39
|
+
* Document text extraction: the content-hash cache wrap, the extractor
|
|
40
|
+
* contract it runs extractions through, and the one extractor — a pooled
|
|
41
|
+
* worker under a budget per file. The composition root wires the product's
|
|
42
|
+
* pair through this surface; a suite that registers the workspace tools
|
|
43
|
+
* builds its own the same way.
|
|
44
|
+
*/
|
|
45
|
+
export { DocExtractService } from './file-readers/doc-extract.service.js';
|
|
46
|
+
export type { IDocumentExtractor } from './file-readers/document-extractor.contract.js';
|
|
47
|
+
export { WorkerDocumentExtractor } from './file-readers/extract-in-worker.js';
|
|
48
|
+
/**
|
|
49
|
+
* What `grep` runs a caller's pattern with: the matcher contract, its one
|
|
50
|
+
* implementation (ripgrep), and the boot check that ripgrep is there. The
|
|
51
|
+
* composition root wires them through this surface, as a suite does.
|
|
52
|
+
*/
|
|
53
|
+
export {
|
|
54
|
+
compareSearchPaths,
|
|
55
|
+
PATTERN_DIALECT,
|
|
56
|
+
PatternRefusedError,
|
|
57
|
+
PatternTooExpensiveError,
|
|
58
|
+
SearchAbandonedError,
|
|
59
|
+
SearchBusyError,
|
|
60
|
+
type FileMatches,
|
|
61
|
+
type IPatternMatcher,
|
|
62
|
+
type IPatternSearch,
|
|
63
|
+
type TreeScope,
|
|
64
|
+
type TreeSearchOptions,
|
|
65
|
+
} from './pattern-matcher.contract.js';
|
|
66
|
+
export { RipgrepPatternMatcher, type RipgrepPatternMatcherOptions } from './ripgrep-search.js';
|
|
67
|
+
export { assertRipgrep } from './ripgrep-version.js';
|
|
68
|
+
// Reached by other modules; exported here so they stop importing the files.
|
|
69
|
+
export { isTextBytes } from './file-readers/text-reader.js';
|
|
70
|
+
export { isUntouchedStarterPage, knowledgeFolderIsNew } from './first-run.js';
|
|
71
|
+
export type { FirstRunStarter, FirstRunStarterSource, MayRead } from './first-run.js';
|
|
72
|
+
export type { WorkspaceService } from './workspace.service.js';
|
|
73
|
+
export { sessionIdInputOf } from './workspace.tools.js';
|
|
74
|
+
export type { ReadForTool } from './workspace.tools.js';
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { logger } from '../../shared/logging.js';
|
|
4
|
-
import { GitRunError
|
|
4
|
+
import type { GitRunError} from '../../shared/git.contract.js';
|
|
5
|
+
import { type IGitRunner } from '../../shared/git.contract.js';
|
|
5
6
|
import { isAbsence } from '../../shared/fs.contract.js';
|
|
6
7
|
import { redactSecret, urlQuerySecrets } from '../../shared/redact-secret.js';
|
|
7
8
|
import type { AddWorktreeOptions, FetchOptions, IKbRepository } from './kb-repository.contract.js';
|
|
@@ -12,7 +13,7 @@ import {
|
|
|
12
13
|
cloneTrackingConfigArgs,
|
|
13
14
|
ORIGIN_FETCH_REFSPEC,
|
|
14
15
|
SAFE_IMPLICIT_FETCH_ARGS,
|
|
15
|
-
} from '../kb-fs/
|
|
16
|
+
} from '../kb-fs/index.js';
|
|
16
17
|
|
|
17
18
|
const log = logger('kb-repository');
|
|
18
19
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ToolError } from '../tool-helpers/
|
|
1
|
+
import { ToolError } from '../tool-helpers/index.js';
|
|
2
2
|
import { isAbsence } from '../../shared/fs.contract.js';
|
|
3
3
|
import { NOT_FOUND_NEXT_STEP, PathNotFoundError } from '../../shared/domain-errors.js';
|
|
4
4
|
import { sanitizedPath } from '../../shared/printable.js';
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { constants as fsConstants, type Stats } from 'node:fs';
|
|
2
|
+
import nodeFs from 'node:fs/promises';
|
|
3
|
+
import type { IPatternSearch } from './pattern-matcher.contract.js';
|
|
4
|
+
|
|
5
|
+
/** How much of a file {@link holdsNul} holds in memory at once. */
|
|
6
|
+
export const NUL_SCAN_CHUNK = 64 * 1024;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Whether the file at `absolute` holds a NUL, read a chunk at a time and
|
|
10
|
+
* stopped at the first, under the search's budget: a check that outlives it
|
|
11
|
+
* is answered as the search is, and reads no further. The file is opened
|
|
12
|
+
* without following a link, and only the file that was judged (`judged`, its
|
|
13
|
+
* device and inode) is read: a link or another file swapped in since, here or
|
|
14
|
+
* in a folder above it, is not, and holds nothing.
|
|
15
|
+
*
|
|
16
|
+
* The check a named text file gets from `grep` when ripgrep answers no line
|
|
17
|
+
* from it (see `workspace.tools.ts`, `grepTextFile`): ripgrep stops reading a
|
|
18
|
+
* file at the lines the answer can take, so a NUL past them goes unseen by it,
|
|
19
|
+
* and "no searchable text" must be told from "no match" by this read.
|
|
20
|
+
*/
|
|
21
|
+
export async function holdsNul(absolute: string, judged: Stats, search: IPatternSearch): Promise<boolean> {
|
|
22
|
+
let stopped = false;
|
|
23
|
+
try {
|
|
24
|
+
return await search.charged(async () => {
|
|
25
|
+
let handle: nodeFs.FileHandle;
|
|
26
|
+
try {
|
|
27
|
+
handle = await nodeFs.open(absolute, fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0));
|
|
28
|
+
} catch (err) {
|
|
29
|
+
// ELOOP: the name is a link now. Anything else is the caller's to answer.
|
|
30
|
+
if ((err as { code?: unknown } | null)?.code === 'ELOOP') return false;
|
|
31
|
+
throw err;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const opened = await handle.stat();
|
|
35
|
+
if (!opened.isFile() || opened.dev !== judged.dev || opened.ino !== judged.ino) return false;
|
|
36
|
+
const chunk = Buffer.alloc(NUL_SCAN_CHUNK);
|
|
37
|
+
while (!stopped) {
|
|
38
|
+
const { bytesRead } = await handle.read(chunk, 0, chunk.length, null);
|
|
39
|
+
if (bytesRead === 0) return false;
|
|
40
|
+
if (chunk.subarray(0, bytesRead).includes(0)) return true;
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
} finally {
|
|
44
|
+
await handle.close();
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
} finally {
|
|
48
|
+
stopped = true;
|
|
49
|
+
}
|
|
50
|
+
}
|