@bevel-software/platform-core-backend 0.32.0 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-guide/access-control.md +5 -0
- package/agent-guide/html-views.md +46 -10
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +29 -4
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +7 -2
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +22 -6
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +8 -0
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +4 -0
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core/public-config.d.ts +10 -0
- package/dist/core/public-config.d.ts.map +1 -1
- package/dist/core/public-config.js +10 -0
- package/dist/core/public-config.js.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +3 -3
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +4 -5
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access-declarations.d.ts +1 -1
- package/dist/modules/access/access-declarations.d.ts.map +1 -1
- package/dist/modules/access/access-declarations.js +1 -1
- package/dist/modules/access/access-declarations.js.map +1 -1
- package/dist/modules/access/access-mutation.service.d.ts +8 -3
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
- package/dist/modules/access/access-mutation.service.js +3 -3
- package/dist/modules/access/access-mutation.service.js.map +1 -1
- package/dist/modules/access/access-requests.contract.d.ts +1 -1
- package/dist/modules/access/access-requests.contract.d.ts.map +1 -1
- package/dist/modules/access/access-requests.routes.d.ts +3 -3
- package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
- package/dist/modules/access/access-requests.routes.js +7 -7
- package/dist/modules/access/access-requests.routes.js.map +1 -1
- package/dist/modules/access/access-requests.service.d.ts +21 -20
- package/dist/modules/access/access-requests.service.d.ts.map +1 -1
- package/dist/modules/access/access-requests.service.js +22 -68
- package/dist/modules/access/access-requests.service.js.map +1 -1
- package/dist/modules/access/access-view.d.ts +1 -1
- package/dist/modules/access/access-view.d.ts.map +1 -1
- package/dist/modules/access/access-view.js +1 -1
- package/dist/modules/access/access-view.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts +5 -7
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +4 -4
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/admin-locked-commit.d.ts +2 -2
- package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
- package/dist/modules/access/admin-locked-commit.js +1 -1
- package/dist/modules/access/admin-locked-commit.js.map +1 -1
- package/dist/modules/access/capability-registry.js +1 -1
- package/dist/modules/access/capability-registry.js.map +1 -1
- package/dist/modules/access/change-read-gate.d.ts +2 -2
- package/dist/modules/access/change-read-gate.d.ts.map +1 -1
- package/dist/modules/access/change-read-gate.js +1 -3
- package/dist/modules/access/change-read-gate.js.map +1 -1
- package/dist/modules/access/creator-access.d.ts +2 -2
- package/dist/modules/access/creator-access.d.ts.map +1 -1
- package/dist/modules/access/creator-access.js +2 -4
- package/dist/modules/access/creator-access.js.map +1 -1
- package/dist/modules/access/directory-sync-bot.d.ts +1 -1
- package/dist/modules/access/directory-sync-bot.d.ts.map +1 -1
- package/dist/modules/access/directory-sync-bot.js +1 -1
- package/dist/modules/access/directory-sync-bot.js.map +1 -1
- package/dist/modules/access/groups-admin.routes.d.ts +2 -2
- package/dist/modules/access/groups-admin.routes.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.routes.js +2 -2
- package/dist/modules/access/groups-admin.routes.js.map +1 -1
- package/dist/modules/access/groups-admin.service.d.ts +1 -1
- package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.service.js +2 -3
- package/dist/modules/access/groups-admin.service.js.map +1 -1
- package/dist/modules/access/groups-edit.js +2 -2
- package/dist/modules/access/groups-edit.js.map +1 -1
- package/dist/modules/access/index.d.ts +17 -0
- package/dist/modules/access/index.d.ts.map +1 -0
- package/dist/modules/access/index.js +6 -0
- package/dist/modules/access/index.js.map +1 -0
- package/dist/modules/access/reference-scan.js +1 -1
- package/dist/modules/access/reference-scan.js.map +1 -1
- package/dist/modules/access/roles-admin.service.d.ts +1 -1
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
- package/dist/modules/access/roles-admin.service.js +2 -5
- package/dist/modules/access/roles-admin.service.js.map +1 -1
- package/dist/modules/access/roles-edit.js +1 -1
- package/dist/modules/access/roles-edit.js.map +1 -1
- package/dist/modules/access/synced-groups-committer.d.ts +2 -2
- package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-committer.js +2 -2
- package/dist/modules/access/synced-groups-committer.js.map +1 -1
- package/dist/modules/access/synced-groups-writer.js +2 -2
- package/dist/modules/access/synced-groups-writer.js.map +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
- package/dist/modules/access/user-access-removal.service.js +2 -5
- package/dist/modules/access/user-access-removal.service.js.map +1 -1
- package/dist/modules/access-model/index.d.ts +20 -5
- package/dist/modules/access-model/index.d.ts.map +1 -1
- package/dist/modules/access-model/index.js +18 -5
- package/dist/modules/access-model/index.js.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
- package/dist/modules/admin/admin-access.routes.d.ts +1 -1
- package/dist/modules/admin/admin-access.routes.d.ts.map +1 -1
- package/dist/modules/admin/admin-access.routes.js +1 -1
- package/dist/modules/admin/admin-access.routes.js.map +1 -1
- package/dist/modules/admin/admin-access.service.d.ts +2 -2
- package/dist/modules/admin/admin-access.service.d.ts.map +1 -1
- package/dist/modules/admin/index.d.ts +8 -0
- package/dist/modules/admin/index.d.ts.map +1 -0
- package/dist/modules/admin/index.js +2 -0
- package/dist/modules/admin/index.js.map +1 -0
- package/dist/modules/agent-guide/agent-guide.js +1 -1
- package/dist/modules/agent-guide/agent-guide.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.d.ts +3 -3
- package/dist/modules/agent-guide/agent-guide.tools.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.js +2 -4
- package/dist/modules/agent-guide/agent-guide.tools.js.map +1 -1
- package/dist/modules/agent-guide/index.d.ts +1 -1
- package/dist/modules/agent-guide/index.d.ts.map +1 -1
- package/dist/modules/agent-guide/index.js +1 -1
- package/dist/modules/agent-guide/index.js.map +1 -1
- package/dist/modules/agent-instructions/read-preamble.d.ts +1 -1
- package/dist/modules/agent-instructions/read-preamble.d.ts.map +1 -1
- package/dist/modules/audit/agent-audit.service.d.ts +2 -2
- package/dist/modules/audit/agent-audit.service.d.ts.map +1 -1
- package/dist/modules/audit/agent-audit.service.js +1 -1
- package/dist/modules/audit/agent-audit.service.js.map +1 -1
- package/dist/modules/audit/agent-connection.routes.d.ts +1 -1
- package/dist/modules/audit/agent-connection.routes.d.ts.map +1 -1
- package/dist/modules/audit/agent-connection.routes.js +1 -1
- package/dist/modules/audit/agent-connection.routes.js.map +1 -1
- package/dist/modules/audit/agent-rest-audit.middleware.d.ts +1 -1
- package/dist/modules/audit/agent-rest-audit.middleware.d.ts.map +1 -1
- package/dist/modules/audit/agent-rest-audit.middleware.js +1 -1
- package/dist/modules/audit/agent-rest-audit.middleware.js.map +1 -1
- package/dist/modules/audit/audit.routes.d.ts +3 -3
- package/dist/modules/audit/audit.routes.d.ts.map +1 -1
- package/dist/modules/audit/audit.routes.js +2 -2
- package/dist/modules/audit/audit.routes.js.map +1 -1
- package/dist/modules/auth/account-erasure.service.d.ts +3 -3
- package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
- package/dist/modules/auth/account-erasure.service.js +1 -5
- package/dist/modules/auth/account-erasure.service.js.map +1 -1
- package/dist/modules/auth/account-switch-lock.d.ts +1 -1
- package/dist/modules/auth/account-switch-lock.d.ts.map +1 -1
- package/dist/modules/auth/account-switch-lock.js +1 -1
- package/dist/modules/auth/account-switch-lock.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts +2 -2
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +1 -1
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +1 -1
- package/dist/modules/auth/auth.service.d.ts.map +1 -1
- package/dist/modules/auth/auth.service.js +3 -3
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/index.d.ts +2 -0
- package/dist/modules/auth/index.d.ts.map +1 -1
- package/dist/modules/auth/oidc-auth-provider.js +1 -1
- package/dist/modules/auth/oidc-auth-provider.js.map +1 -1
- package/dist/modules/code-mode/code-mode.tool.d.ts +1 -1
- package/dist/modules/code-mode/code-mode.tool.d.ts.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.d.ts +2 -2
- package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.js +1 -4
- package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
- package/dist/modules/database/core-schema.d.ts +107 -234
- package/dist/modules/database/core-schema.d.ts.map +1 -1
- package/dist/modules/database/core-schema.js +39 -35
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/database/index.d.ts +10 -0
- package/dist/modules/database/index.d.ts.map +1 -0
- package/dist/modules/database/index.js +4 -0
- package/dist/modules/database/index.js.map +1 -0
- package/dist/modules/database/migrate.d.ts.map +1 -1
- package/dist/modules/database/migrate.js +78 -3
- package/dist/modules/database/migrate.js.map +1 -1
- package/dist/modules/declared-variables/declared-variables.routes.d.ts +2 -2
- package/dist/modules/declared-variables/declared-variables.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.d.ts +3 -3
- package/dist/modules/diff/diff.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.js +3 -3
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/diff/diff.service.d.ts +2 -2
- package/dist/modules/diff/diff.service.d.ts.map +1 -1
- package/dist/modules/diff/index.d.ts +7 -0
- package/dist/modules/diff/index.d.ts.map +1 -0
- package/dist/modules/diff/index.js +2 -0
- package/dist/modules/diff/index.js.map +1 -0
- package/dist/modules/embed/account-link.service.d.ts +1 -1
- package/dist/modules/embed/account-link.service.d.ts.map +1 -1
- package/dist/modules/embed/account-link.service.js +1 -1
- package/dist/modules/embed/account-link.service.js.map +1 -1
- package/dist/modules/embed/embed.routes.d.ts +1 -1
- package/dist/modules/embed/embed.routes.d.ts.map +1 -1
- package/dist/modules/embed/embed.routes.js +2 -2
- package/dist/modules/embed/embed.routes.js.map +1 -1
- package/dist/modules/embed/embed.service.d.ts +1 -1
- package/dist/modules/embed/embed.service.d.ts.map +1 -1
- package/dist/modules/embed/embed.tools.d.ts +4 -4
- package/dist/modules/embed/embed.tools.d.ts.map +1 -1
- package/dist/modules/embed/embed.tools.js +3 -5
- package/dist/modules/embed/embed.tools.js.map +1 -1
- package/dist/modules/github-app/github-app.connection.d.ts +1 -1
- package/dist/modules/github-app/github-app.connection.d.ts.map +1 -1
- package/dist/modules/github-app/github-app.routes.d.ts +3 -3
- package/dist/modules/github-app/github-app.routes.d.ts.map +1 -1
- package/dist/modules/github-app/github-app.routes.js +1 -1
- package/dist/modules/github-app/github-app.routes.js.map +1 -1
- package/dist/modules/kb-fs/index.d.ts +10 -0
- package/dist/modules/kb-fs/index.d.ts.map +1 -1
- package/dist/modules/kb-fs/index.js +10 -0
- package/dist/modules/kb-fs/index.js.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.d.ts +1 -1
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.routes.d.ts +1 -1
- package/dist/modules/kb-sync/kb-sync.routes.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.routes.js +2 -2
- package/dist/modules/kb-sync/kb-sync.routes.js.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/kb-sync/sync-auth.js +1 -1
- package/dist/modules/kb-sync/sync-auth.js.map +1 -1
- package/dist/modules/kb-sync/sync-payload.js +1 -1
- package/dist/modules/kb-sync/sync-payload.js.map +1 -1
- package/dist/modules/marketplace/git-http.routes.d.ts +1 -1
- package/dist/modules/marketplace/git-http.routes.d.ts.map +1 -1
- package/dist/modules/marketplace/git-http.routes.js +1 -1
- package/dist/modules/marketplace/git-http.routes.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.js +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts +2 -2
- package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.routes.js +2 -2
- package/dist/modules/marketplace/github-facade/github-facade.routes.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.service.d.ts +2 -2
- package/dist/modules/marketplace/github-facade/github-facade.service.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.service.js +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.service.js.map +1 -1
- package/dist/modules/marketplace/marketplace-repo.service.d.ts +1 -1
- package/dist/modules/marketplace/marketplace-repo.service.d.ts.map +1 -1
- package/dist/modules/marketplace/marketplace-repo.service.js +1 -1
- package/dist/modules/mcp/index.d.ts +8 -0
- package/dist/modules/mcp/index.d.ts.map +1 -0
- package/dist/modules/mcp/index.js +7 -0
- package/dist/modules/mcp/index.js.map +1 -0
- package/dist/modules/mcp/mcp-auth.middleware.d.ts +4 -5
- package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -1
- package/dist/modules/mcp/mcp-auth.middleware.js +4 -4
- package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -1
- package/dist/modules/mcp/mcp.routes.d.ts +2 -4
- package/dist/modules/mcp/mcp.routes.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.routes.js +2 -2
- package/dist/modules/mcp/mcp.routes.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +14 -4
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +17 -7
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.js +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.js.map +1 -1
- package/dist/modules/onboarding/onboarding.routes.d.ts +1 -1
- package/dist/modules/onboarding/onboarding.routes.d.ts.map +1 -1
- package/dist/modules/onboarding/onboarding.routes.js +1 -1
- package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.d.ts +4 -5
- package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.js +2 -2
- package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
- package/dist/modules/plugins/compile/compile-marketplace.d.ts +1 -1
- package/dist/modules/plugins/compile/compile-marketplace.d.ts.map +1 -1
- package/dist/modules/plugins/compile/compile-marketplace.js +1 -1
- package/dist/modules/plugins/compile/compile-marketplace.js.map +1 -1
- package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts +3 -3
- package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.js +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.js.map +1 -1
- package/dist/modules/plugins/index.d.ts +1 -0
- package/dist/modules/plugins/index.d.ts.map +1 -1
- package/dist/modules/plugins/index.js +2 -0
- package/dist/modules/plugins/index.js.map +1 -1
- package/dist/modules/plugins/join-proposals.d.ts +2 -2
- package/dist/modules/plugins/join-proposals.d.ts.map +1 -1
- package/dist/modules/plugins/join-proposals.js +1 -1
- package/dist/modules/plugins/join-proposals.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.js +2 -2
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
- package/dist/modules/plugins/join-request-records.store.d.ts +1 -1
- package/dist/modules/plugins/join-request-records.store.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-records.store.js +1 -1
- package/dist/modules/plugins/join-request-records.store.js.map +1 -1
- package/dist/modules/plugins/join-requests.service.d.ts +3 -3
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +1 -1
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-links.d.ts +3 -3
- package/dist/modules/plugins/plugin-links.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-links.js +1 -1
- package/dist/modules/plugins/plugin-links.js.map +1 -1
- package/dist/modules/plugins/plugin-links.service.d.ts +8 -5
- package/dist/modules/plugins/plugin-links.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-links.service.js +8 -6
- package/dist/modules/plugins/plugin-links.service.js.map +1 -1
- package/dist/modules/plugins/plugin-provision.service.d.ts +2 -2
- package/dist/modules/plugins/plugin-provision.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-provision.service.js +2 -3
- package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.d.ts +2 -2
- package/dist/modules/plugins/plugin-rename.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.js +1 -1
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
- package/dist/modules/plugins/plugins.contract.d.ts +1 -1
- package/dist/modules/plugins/plugins.contract.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +2 -2
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +3 -3
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/plugins/plugins.service.d.ts +4 -4
- package/dist/modules/plugins/plugins.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.service.js +1 -1
- package/dist/modules/plugins/plugins.service.js.map +1 -1
- package/dist/modules/plugins/plugins.tools.d.ts +1 -1
- package/dist/modules/plugins/plugins.tools.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.tools.js +3 -3
- package/dist/modules/plugins/plugins.tools.js.map +1 -1
- package/dist/modules/plugins/teams.routes.d.ts +3 -3
- package/dist/modules/plugins/teams.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +1 -0
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js +2 -0
- package/dist/modules/secrets-vault/index.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +4 -4
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
- package/dist/modules/settings/connection-check.js +1 -1
- package/dist/modules/settings/connection-check.js.map +1 -1
- package/dist/modules/settings/deployment-settings.service.d.ts +7 -1
- package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +45 -3
- package/dist/modules/settings/deployment-settings.service.js.map +1 -1
- package/dist/modules/settings/git-root-folders.js +1 -1
- package/dist/modules/settings/git-root-folders.js.map +1 -1
- package/dist/modules/settings/index.d.ts +13 -0
- package/dist/modules/settings/index.d.ts.map +1 -0
- package/dist/modules/settings/index.js +3 -0
- package/dist/modules/settings/index.js.map +1 -0
- package/dist/modules/settings/setup.routes.d.ts +3 -3
- package/dist/modules/settings/setup.routes.d.ts.map +1 -1
- package/dist/modules/settings/setup.routes.js +2 -2
- package/dist/modules/settings/setup.routes.js.map +1 -1
- package/dist/modules/skills/allowed-tools-check.d.ts +2 -2
- package/dist/modules/skills/allowed-tools-check.d.ts.map +1 -1
- package/dist/modules/skills/allowed-tools-check.js +1 -1
- package/dist/modules/skills/allowed-tools-check.js.map +1 -1
- package/dist/modules/skills/index.d.ts +1 -0
- package/dist/modules/skills/index.d.ts.map +1 -1
- package/dist/modules/skills/pending-skills.service.d.ts +3 -3
- package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
- package/dist/modules/skills/pending-skills.service.js.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts +5 -5
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +6 -13
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
- package/dist/modules/skills/skills.routes.d.ts +1 -1
- package/dist/modules/skills/skills.routes.d.ts.map +1 -1
- package/dist/modules/skills/skills.routes.js +1 -1
- package/dist/modules/skills/skills.routes.js.map +1 -1
- package/dist/modules/skills/skills.service.d.ts +2 -2
- package/dist/modules/skills/skills.service.d.ts.map +1 -1
- package/dist/modules/skills/skills.tools.d.ts +3 -3
- package/dist/modules/skills/skills.tools.d.ts.map +1 -1
- package/dist/modules/skills/skills.tools.js +3 -7
- package/dist/modules/skills/skills.tools.js.map +1 -1
- package/dist/modules/tool-auth/connection-key-rejection.js +1 -1
- package/dist/modules/tool-auth/connection-key-rejection.js.map +1 -1
- package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts +2 -2
- package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts.map +1 -1
- package/dist/modules/tool-auth/connection-keys-admin.routes.js +1 -1
- package/dist/modules/tool-auth/connection-keys-admin.routes.js.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.d.ts +1 -1
- package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.js +1 -1
- package/dist/modules/tool-auth/external-api-key.service.js.map +1 -1
- package/dist/modules/tool-auth/index.d.ts +15 -0
- package/dist/modules/tool-auth/index.d.ts.map +1 -0
- package/dist/modules/tool-auth/index.js +11 -0
- package/dist/modules/tool-auth/index.js.map +1 -0
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts +2 -2
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -1
- package/dist/modules/tool-auth/tool-auth.middleware.js +1 -1
- package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -1
- package/dist/modules/tool-helpers/default-branch-write.d.ts +1 -1
- package/dist/modules/tool-helpers/default-branch-write.d.ts.map +1 -1
- package/dist/modules/tool-helpers/index.d.ts +4 -1
- package/dist/modules/tool-helpers/index.d.ts.map +1 -1
- package/dist/modules/tool-helpers/index.js +3 -0
- package/dist/modules/tool-helpers/index.js.map +1 -1
- package/dist/modules/tool-helpers/route-argument-check.js +1 -1
- package/dist/modules/tool-helpers/route-argument-check.js.map +1 -1
- package/dist/modules/tool-helpers/route-tool-schemas.d.ts +1 -1
- package/dist/modules/tool-helpers/route-tool-schemas.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.d.ts +5 -6
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +2 -3
- package/dist/modules/tool-helpers/tool-context.js.map +1 -1
- package/dist/modules/tool-helpers/tool-def.d.ts +4 -2
- package/dist/modules/tool-helpers/tool-def.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-def.js +3 -1
- package/dist/modules/tool-helpers/tool-def.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.d.ts +2 -2
- package/dist/modules/tool-helpers/tool-handler.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +2 -2
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +2 -2
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-helpers/validate-token.d.ts +1 -2
- package/dist/modules/tool-helpers/validate-token.d.ts.map +1 -1
- package/dist/modules/tool-helpers/validate-token.js +1 -1
- package/dist/modules/tool-helpers/validate-token.js.map +1 -1
- package/dist/modules/tool-manuals/index.d.ts +5 -0
- package/dist/modules/tool-manuals/index.d.ts.map +1 -1
- package/dist/modules/tool-manuals/index.js +4 -0
- package/dist/modules/tool-manuals/index.js.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts +2 -2
- package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts +2 -2
- package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.d.ts +5 -6
- package/dist/modules/tool-manuals/tool-delete.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts +5 -5
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.js +2 -2
- package/dist/modules/tool-manuals/tool-manuals.routes.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +3 -3
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -3
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +1 -2
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/tool-registry/description-length.js +2 -2
- package/dist/modules/tool-registry/description-length.js.map +1 -1
- package/dist/modules/tool-registry/index.d.ts +8 -0
- package/dist/modules/tool-registry/index.d.ts.map +1 -0
- package/dist/modules/tool-registry/index.js +8 -0
- package/dist/modules/tool-registry/index.js.map +1 -0
- package/dist/modules/tool-registry/manual.routes.d.ts +37 -2
- package/dist/modules/tool-registry/manual.routes.d.ts.map +1 -1
- package/dist/modules/tool-registry/manual.routes.js +14 -7
- package/dist/modules/tool-registry/manual.routes.js.map +1 -1
- package/dist/modules/tool-registry/read-only-hints.contract.d.ts +52 -0
- package/dist/modules/tool-registry/read-only-hints.contract.d.ts.map +1 -0
- package/dist/modules/tool-registry/read-only-hints.contract.js +2 -0
- package/dist/modules/tool-registry/read-only-hints.contract.js.map +1 -0
- package/dist/modules/tool-registry/read-only-hints.d.ts +89 -0
- package/dist/modules/tool-registry/read-only-hints.d.ts.map +1 -0
- package/dist/modules/tool-registry/read-only-hints.js +212 -0
- package/dist/modules/tool-registry/read-only-hints.js.map +1 -0
- package/dist/modules/tool-registry/tool.contract.d.ts +8 -0
- package/dist/modules/tool-registry/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-registry/tool.contract.js +10 -1
- package/dist/modules/tool-registry/tool.contract.js.map +1 -1
- package/dist/modules/update-check/update-check.routes.d.ts +2 -2
- package/dist/modules/update-check/update-check.routes.d.ts.map +1 -1
- package/dist/modules/update-check/update-check.routes.js +1 -1
- package/dist/modules/update-check/update-check.routes.js.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts +9 -104
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js +8 -118
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts +16 -17
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js +19 -86
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts +5 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js +10 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts +7 -5
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js +46 -68
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
- package/dist/modules/workflow/change-request-hooks.d.ts +1 -1
- package/dist/modules/workflow/event-bus.d.ts.map +1 -1
- package/dist/modules/workflow/event-bus.js +3 -1
- package/dist/modules/workflow/event-bus.js.map +1 -1
- package/dist/modules/workflow/events-delivery.d.ts +120 -0
- package/dist/modules/workflow/events-delivery.d.ts.map +1 -0
- package/dist/modules/workflow/events-delivery.js +202 -0
- package/dist/modules/workflow/events-delivery.js.map +1 -0
- package/dist/modules/workflow/events.routes.d.ts +16 -7
- package/dist/modules/workflow/events.routes.d.ts.map +1 -1
- package/dist/modules/workflow/events.routes.js +23 -4
- package/dist/modules/workflow/events.routes.js.map +1 -1
- package/dist/modules/workflow/file-lock.service.d.ts +1 -1
- package/dist/modules/workflow/file-lock.service.d.ts.map +1 -1
- package/dist/modules/workflow/file-lock.service.js +1 -1
- package/dist/modules/workflow/file-lock.service.js.map +1 -1
- package/dist/modules/workflow/git/git.service.d.ts +2 -2
- package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/git.service.js +3 -6
- package/dist/modules/workflow/git/git.service.js.map +1 -1
- package/dist/modules/workflow/git/node-git-runner.js +1 -1
- package/dist/modules/workflow/git/node-git-runner.js.map +1 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts +6 -7
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/pull-request.service.js +40 -33
- package/dist/modules/workflow/git/pull-request.service.js.map +1 -1
- package/dist/modules/workflow/index.d.ts +14 -2
- package/dist/modules/workflow/index.d.ts.map +1 -1
- package/dist/modules/workflow/index.js +11 -2
- package/dist/modules/workflow/index.js.map +1 -1
- package/dist/modules/workflow/pending-commits.service.d.ts +1 -1
- package/dist/modules/workflow/pending-commits.service.d.ts.map +1 -1
- package/dist/modules/workflow/pending-commits.service.js +1 -1
- package/dist/modules/workflow/pending-commits.service.js.map +1 -1
- package/dist/modules/workflow/read-on-branch.d.ts +1 -1
- package/dist/modules/workflow/read-on-branch.d.ts.map +1 -1
- package/dist/modules/workflow/recovery-bot.d.ts +1 -1
- package/dist/modules/workflow/recovery-bot.d.ts.map +1 -1
- package/dist/modules/workflow/recovery-bot.js +1 -1
- package/dist/modules/workflow/recovery-bot.js.map +1 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts +1 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts +4 -20
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts +4 -8
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js +3 -138
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -1
- package/dist/modules/workflow/workflow.routes.d.ts +5 -5
- package/dist/modules/workflow/workflow.routes.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.routes.js +42 -94
- package/dist/modules/workflow/workflow.routes.js.map +1 -1
- package/dist/modules/workflow/workflow.service.d.ts +40 -50
- package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.service.js +218 -154
- package/dist/modules/workflow/workflow.service.js.map +1 -1
- package/dist/modules/workspace/agent-access.gate.d.ts +3 -3
- package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
- package/dist/modules/workspace/agent-download.builder.d.ts +1 -1
- package/dist/modules/workspace/agent-download.builder.d.ts.map +1 -1
- package/dist/modules/workspace/agent-download.builder.js +1 -1
- package/dist/modules/workspace/agent-download.builder.js.map +1 -1
- package/dist/modules/workspace/agent-upload.routes.d.ts.map +1 -1
- package/dist/modules/workspace/agent-upload.routes.js +19 -0
- package/dist/modules/workspace/agent-upload.routes.js.map +1 -1
- package/dist/modules/workspace/agent-upload.store.d.ts +11 -0
- package/dist/modules/workspace/agent-upload.store.d.ts.map +1 -1
- package/dist/modules/workspace/agent-upload.store.js +18 -0
- package/dist/modules/workspace/agent-upload.store.js.map +1 -1
- package/dist/modules/workspace/bounded-matcher.d.ts +5 -11
- package/dist/modules/workspace/bounded-matcher.d.ts.map +1 -1
- package/dist/modules/workspace/bounded-matcher.js +26 -87
- package/dist/modules/workspace/bounded-matcher.js.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.service.d.ts +54 -10
- package/dist/modules/workspace/file-readers/doc-extract.service.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.service.js +69 -17
- package/dist/modules/workspace/file-readers/doc-extract.service.js.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.types.d.ts +9 -2
- package/dist/modules/workspace/file-readers/doc-extract.types.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.types.js.map +1 -1
- package/dist/modules/workspace/file-readers/document-extractor.contract.d.ts +41 -0
- package/dist/modules/workspace/file-readers/document-extractor.contract.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/document-extractor.contract.js +5 -0
- package/dist/modules/workspace/file-readers/document-extractor.contract.js.map +1 -0
- package/dist/modules/workspace/file-readers/document-extractors.d.ts +9 -0
- package/dist/modules/workspace/file-readers/document-extractors.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/document-extractors.js +26 -0
- package/dist/modules/workspace/file-readers/document-extractors.js.map +1 -0
- package/dist/modules/workspace/file-readers/document-formats.d.ts +12 -0
- package/dist/modules/workspace/file-readers/document-formats.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/document-formats.js +11 -0
- package/dist/modules/workspace/file-readers/document-formats.js.map +1 -0
- package/dist/modules/workspace/file-readers/document-reader.d.ts +21 -17
- package/dist/modules/workspace/file-readers/document-reader.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/document-reader.js +38 -34
- package/dist/modules/workspace/file-readers/document-reader.js.map +1 -1
- package/dist/modules/workspace/file-readers/extract-in-worker.d.ts +60 -0
- package/dist/modules/workspace/file-readers/extract-in-worker.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/extract-in-worker.js +140 -0
- package/dist/modules/workspace/file-readers/extract-in-worker.js.map +1 -0
- package/dist/modules/workspace/file-readers/extract-pdf.d.ts +2 -0
- package/dist/modules/workspace/file-readers/extract-pdf.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/extract-pdf.js +20 -3
- package/dist/modules/workspace/file-readers/extract-pdf.js.map +1 -1
- package/dist/modules/workspace/file-readers/extract.worker.d.ts +2 -0
- package/dist/modules/workspace/file-readers/extract.worker.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/extract.worker.js +5 -0
- package/dist/modules/workspace/file-readers/extract.worker.js.map +1 -0
- package/dist/modules/workspace/file-readers/extraction-cache.d.ts +21 -5
- package/dist/modules/workspace/file-readers/extraction-cache.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/extraction-cache.js +24 -10
- package/dist/modules/workspace/file-readers/extraction-cache.js.map +1 -1
- package/dist/modules/workspace/file-readers/extraction-worker.d.ts +42 -0
- package/dist/modules/workspace/file-readers/extraction-worker.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/extraction-worker.js +69 -0
- package/dist/modules/workspace/file-readers/extraction-worker.js.map +1 -0
- package/dist/modules/workspace/file-readers/file-reader.d.ts +13 -4
- package/dist/modules/workspace/file-readers/file-reader.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.js.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.registry.d.ts +3 -2
- package/dist/modules/workspace/file-readers/file-reader.registry.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.registry.js +6 -20
- package/dist/modules/workspace/file-readers/file-reader.registry.js.map +1 -1
- package/dist/modules/workspace/first-run.js +1 -1
- package/dist/modules/workspace/first-run.js.map +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts.map +1 -1
- package/dist/modules/workspace/git-internals.middleware.js +1 -1
- package/dist/modules/workspace/git-internals.middleware.js.map +1 -1
- package/dist/modules/workspace/index.d.ts +16 -0
- package/dist/modules/workspace/index.d.ts.map +1 -1
- package/dist/modules/workspace/index.js +13 -0
- package/dist/modules/workspace/index.js.map +1 -1
- package/dist/modules/workspace/kb-repository.d.ts.map +1 -1
- package/dist/modules/workspace/kb-repository.js +1 -1
- package/dist/modules/workspace/kb-repository.js.map +1 -1
- package/dist/modules/workspace/not-found.d.ts +1 -1
- package/dist/modules/workspace/not-found.d.ts.map +1 -1
- package/dist/modules/workspace/not-found.js +1 -1
- package/dist/modules/workspace/not-found.js.map +1 -1
- package/dist/modules/workspace/pattern-matcher.contract.d.ts +1 -1
- package/dist/modules/workspace/pattern-matcher.contract.d.ts.map +1 -1
- package/dist/modules/workspace/pattern-matcher.contract.js +1 -1
- package/dist/modules/workspace/pattern-matcher.contract.js.map +1 -1
- package/dist/modules/workspace/routine-write-policy.js +1 -1
- package/dist/modules/workspace/routine-write-policy.js.map +1 -1
- package/dist/modules/workspace/startup/kb-git.js +1 -1
- package/dist/modules/workspace/startup/kb-git.js.map +1 -1
- package/dist/modules/workspace/startup/kb-startup-runner.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-startup-runner.js +1 -2
- package/dist/modules/workspace/startup/kb-startup-runner.js.map +1 -1
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js +2 -2
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/personal-spaces.step.js +2 -2
- package/dist/modules/workspace/startup/steps/personal-spaces.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/plugin-layout.js +1 -1
- package/dist/modules/workspace/startup/steps/plugin-layout.js.map +1 -1
- package/dist/modules/workspace/startup/steps/roles-yaml.step.js +1 -1
- package/dist/modules/workspace/startup/steps/roles-yaml.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +2 -2
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.js +2 -2
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
- package/dist/modules/workspace/worker-pool.d.ts +100 -0
- package/dist/modules/workspace/worker-pool.d.ts.map +1 -0
- package/dist/modules/workspace/worker-pool.js +156 -0
- package/dist/modules/workspace/worker-pool.js.map +1 -0
- package/dist/modules/workspace/workspace.routes.d.ts +7 -8
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +4 -6
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +1 -1
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +3 -6
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +7 -7
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +45 -27
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/modules/workspace/write-denial.d.ts +4 -4
- package/dist/modules/workspace/write-denial.d.ts.map +1 -1
- package/dist/modules/workspace/write-denial.js +2 -3
- package/dist/modules/workspace/write-denial.js.map +1 -1
- package/dist/modules/write-access/index.d.ts +8 -0
- package/dist/modules/write-access/index.d.ts.map +1 -0
- package/dist/modules/write-access/index.js +7 -0
- package/dist/modules/write-access/index.js.map +1 -0
- package/migrations/0020_change_request_body_is_the_description.sql +20 -0
- package/migrations/0021_data_migrations_ledger.sql +11 -0
- package/migrations/meta/0020_snapshot.json +2321 -0
- package/migrations/meta/0021_snapshot.json +2353 -0
- package/migrations/meta/_journal.json +14 -0
- package/package.json +3 -3
- package/src/core/__tests__/damaged-document.tools.test.ts +374 -0
- package/src/core/__tests__/public-config.test.ts +5 -0
- package/src/core/create-core-server.ts +32 -3
- package/src/core/create-core-services.ts +32 -5
- package/src/core/lifecycle.ts +10 -0
- package/src/core/public-config.ts +10 -0
- package/src/modules/access/__tests__/access-requests.routes.test.ts +29 -15
- package/src/modules/access/access-control.service.ts +5 -6
- package/src/modules/access/access-declarations.ts +1 -1
- package/src/modules/access/access-mutation.service.ts +10 -4
- package/src/modules/access/access-requests.contract.ts +1 -1
- package/src/modules/access/access-requests.routes.ts +10 -15
- package/src/modules/access/access-requests.service.ts +29 -71
- package/src/modules/access/access-view.ts +1 -1
- package/src/modules/access/access.routes.ts +9 -11
- package/src/modules/access/admin-locked-commit.ts +3 -2
- package/src/modules/access/capability-registry.ts +1 -1
- package/src/modules/access/change-read-gate.ts +3 -5
- package/src/modules/access/creator-access.ts +3 -5
- package/src/modules/access/directory-sync-bot.ts +2 -2
- package/src/modules/access/groups-admin.routes.ts +3 -3
- package/src/modules/access/groups-admin.service.ts +3 -4
- package/src/modules/access/groups-edit.ts +2 -2
- package/src/modules/access/index.ts +17 -0
- package/src/modules/access/reference-scan.ts +1 -1
- package/src/modules/access/roles-admin.service.ts +3 -6
- package/src/modules/access/roles-edit.ts +1 -1
- package/src/modules/access/synced-groups-committer.ts +4 -4
- package/src/modules/access/synced-groups-writer.ts +2 -2
- package/src/modules/access/user-access-removal.service.ts +3 -6
- package/src/modules/access-model/index.ts +21 -5
- package/src/modules/access-model/roles-yaml-guard.ts +1 -1
- package/src/modules/admin/admin-access.routes.ts +1 -1
- package/src/modules/admin/admin-access.service.ts +2 -2
- package/src/modules/admin/index.ts +7 -0
- package/src/modules/agent-guide/__tests__/agent-guide.test.ts +5 -0
- package/src/modules/agent-guide/agent-guide.tools.ts +4 -6
- package/src/modules/agent-guide/agent-guide.ts +1 -1
- package/src/modules/agent-guide/index.ts +1 -1
- package/src/modules/agent-instructions/read-preamble.ts +1 -1
- package/src/modules/audit/agent-audit.service.ts +3 -3
- package/src/modules/audit/agent-connection.routes.ts +1 -1
- package/src/modules/audit/agent-rest-audit.middleware.ts +1 -1
- package/src/modules/audit/audit.routes.ts +4 -4
- package/src/modules/auth/account-erasure.service.ts +4 -9
- package/src/modules/auth/account-switch-lock.ts +2 -2
- package/src/modules/auth/account.routes.ts +3 -3
- package/src/modules/auth/auth.service.ts +4 -4
- package/src/modules/auth/index.ts +3 -0
- package/src/modules/auth/oidc-auth-provider.ts +1 -1
- package/src/modules/code-mode/code-mode.tool.ts +1 -1
- package/src/modules/connection-probe/connection-probe.service.ts +3 -6
- package/src/modules/database/__tests__/legacy-change-request-body.test.ts +118 -0
- package/src/modules/database/__tests__/legacy-request-bodies.pg.test.ts +258 -0
- package/src/modules/database/__tests__/pii-backfill.pg.test.ts +15 -18
- package/src/modules/database/core-schema.ts +43 -36
- package/src/modules/database/index.ts +9 -0
- package/src/modules/database/migrate.ts +79 -3
- package/src/modules/declared-variables/declared-variables.routes.ts +2 -2
- package/src/modules/diff/diff.routes.ts +5 -5
- package/src/modules/diff/diff.service.ts +2 -2
- package/src/modules/diff/index.ts +6 -0
- package/src/modules/embed/account-link.service.ts +2 -2
- package/src/modules/embed/embed.routes.ts +2 -2
- package/src/modules/embed/embed.service.ts +1 -1
- package/src/modules/embed/embed.tools.ts +6 -9
- package/src/modules/github-app/github-app.connection.ts +1 -1
- package/src/modules/github-app/github-app.routes.ts +3 -3
- package/src/modules/kb-fs/index.ts +11 -0
- package/src/modules/kb-fs/locking-filesystem.ts +1 -1
- package/src/modules/kb-sync/kb-sync.routes.ts +3 -3
- package/src/modules/kb-sync/kb-sync.service.ts +1 -1
- package/src/modules/kb-sync/sync-auth.ts +1 -1
- package/src/modules/kb-sync/sync-payload.ts +1 -1
- package/src/modules/marketplace/git-http.routes.ts +1 -1
- package/src/modules/marketplace/github-facade/github-facade-admin.routes.ts +1 -1
- package/src/modules/marketplace/github-facade/github-facade-codes.store.ts +2 -2
- package/src/modules/marketplace/github-facade/github-facade-credentials.service.ts +2 -2
- package/src/modules/marketplace/github-facade/github-facade.routes.ts +2 -2
- package/src/modules/marketplace/github-facade/github-facade.service.ts +2 -2
- package/src/modules/marketplace/marketplace-repo.service.ts +2 -2
- package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +213 -0
- package/src/modules/mcp/index.ts +7 -0
- package/src/modules/mcp/mcp-auth.middleware.ts +6 -7
- package/src/modules/mcp/mcp.routes.ts +3 -5
- package/src/modules/mcp/mcp.service.ts +30 -13
- package/src/modules/mcp/oauth/bevel-oauth-provider.ts +2 -2
- package/src/modules/mcp/oauth/oauth-consent.routes.ts +1 -1
- package/src/modules/onboarding/onboarding.routes.ts +1 -1
- package/src/modules/onboarding/starter-pack.service.ts +5 -6
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +2 -1
- package/src/modules/plugins/__tests__/plugin-links.service.test.ts +2 -1
- package/src/modules/plugins/compile/compile-marketplace.ts +2 -2
- package/src/modules/plugins/compile/marketplace-compiler.service.ts +3 -3
- package/src/modules/plugins/discovery/bundle-dialect/registry.ts +1 -1
- package/src/modules/plugins/index.ts +2 -0
- package/src/modules/plugins/join-proposals.ts +2 -2
- package/src/modules/plugins/join-request-jobs.service.ts +3 -3
- package/src/modules/plugins/join-request-records.store.ts +2 -2
- package/src/modules/plugins/join-requests.service.ts +4 -4
- package/src/modules/plugins/plugin-links.service.ts +10 -11
- package/src/modules/plugins/plugin-links.ts +4 -4
- package/src/modules/plugins/plugin-provision.service.ts +4 -5
- package/src/modules/plugins/plugin-rename.service.ts +3 -3
- package/src/modules/plugins/plugins.contract.ts +1 -1
- package/src/modules/plugins/plugins.routes.ts +4 -4
- package/src/modules/plugins/plugins.service.ts +5 -5
- package/src/modules/plugins/plugins.tools.ts +4 -4
- package/src/modules/plugins/teams.routes.ts +3 -3
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +2 -2
- package/src/modules/secrets-vault/index.ts +2 -0
- package/src/modules/secrets-vault/secrets-vault.routes.ts +4 -4
- package/src/modules/settings/__tests__/deployment-settings.service.test.ts +88 -1
- package/src/modules/settings/connection-check.ts +1 -1
- package/src/modules/settings/deployment-settings.service.ts +44 -4
- package/src/modules/settings/git-root-folders.ts +1 -1
- package/src/modules/settings/index.ts +12 -0
- package/src/modules/settings/setup.routes.ts +5 -4
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +2 -2
- package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +6 -3
- package/src/modules/skills/allowed-tools-check.ts +2 -6
- package/src/modules/skills/index.ts +2 -0
- package/src/modules/skills/pending-skills.service.ts +3 -4
- package/src/modules/skills/skill-access-requests.routes.ts +10 -17
- package/src/modules/skills/skills.routes.ts +1 -1
- package/src/modules/skills/skills.service.ts +2 -2
- package/src/modules/skills/skills.tools.ts +5 -9
- package/src/modules/tool-auth/connection-key-rejection.ts +1 -1
- package/src/modules/tool-auth/connection-keys-admin.routes.ts +2 -2
- package/src/modules/tool-auth/external-api-key.service.ts +2 -2
- package/src/modules/tool-auth/index.ts +14 -0
- package/src/modules/tool-auth/tool-auth.middleware.ts +3 -3
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +2 -2
- package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +2 -2
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +2 -2
- package/src/modules/tool-helpers/default-branch-write.ts +1 -1
- package/src/modules/tool-helpers/index.ts +5 -1
- package/src/modules/tool-helpers/route-argument-check.ts +1 -1
- package/src/modules/tool-helpers/route-tool-schemas.ts +1 -1
- package/src/modules/tool-helpers/tool-context.ts +8 -10
- package/src/modules/tool-helpers/tool-def.ts +7 -3
- package/src/modules/tool-helpers/tool-handler.ts +2 -2
- package/src/modules/tool-helpers/tool.contract.ts +2 -2
- package/src/modules/tool-helpers/validate-token.ts +2 -3
- package/src/modules/tool-manuals/index.ts +6 -0
- package/src/modules/tool-manuals/mcp-server-edit.service.ts +2 -2
- package/src/modules/tool-manuals/pending-tools.service.ts +2 -2
- package/src/modules/tool-manuals/tool-delete.service.ts +5 -6
- package/src/modules/tool-manuals/tool-manuals.routes.ts +5 -5
- package/src/modules/tool-manuals/tool-manuals.service.ts +3 -3
- package/src/modules/tool-manuals/tool-manuals.tools.ts +4 -6
- package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +439 -0
- package/src/modules/tool-registry/__tests__/tool-registry.test.ts +9 -2
- package/src/modules/tool-registry/description-length.ts +2 -2
- package/src/modules/tool-registry/index.ts +22 -0
- package/src/modules/tool-registry/manual.routes.ts +14 -8
- package/src/modules/tool-registry/read-only-hints.contract.ts +54 -0
- package/src/modules/tool-registry/read-only-hints.ts +225 -0
- package/src/modules/tool-registry/tool.contract.ts +11 -0
- package/src/modules/update-check/update-check.routes.ts +2 -2
- package/src/modules/workflow/__tests__/event-bus.test.ts +14 -2
- package/src/modules/workflow/__tests__/events-delivery.test.ts +778 -0
- package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +84 -21
- package/src/modules/workflow/__tests__/workflow.service.update-change-request.pg.test.ts +120 -0
- package/src/modules/workflow/__tests__/workflow.service.update-change-request.test.ts +346 -0
- package/src/modules/workflow/agent-tools/__tests__/change-request-read-shape.test.ts +32 -209
- package/src/modules/workflow/agent-tools/__tests__/change-request-read.tools.test.ts +16 -245
- package/src/modules/workflow/agent-tools/__tests__/update-change-request.parity.test.ts +306 -0
- package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +33 -57
- package/src/modules/workflow/agent-tools/change-request-read-shape.ts +18 -153
- package/src/modules/workflow/agent-tools/change-request-read.tools.ts +24 -96
- package/src/modules/workflow/agent-tools/change-request-summary.ts +16 -2
- package/src/modules/workflow/agent-tools/workflow.tools.ts +49 -75
- package/src/modules/workflow/change-request-hooks.ts +1 -1
- package/src/modules/workflow/event-bus.ts +3 -1
- package/src/modules/workflow/events-delivery.ts +278 -0
- package/src/modules/workflow/events.routes.ts +30 -9
- package/src/modules/workflow/file-lock.service.ts +2 -2
- package/src/modules/workflow/git/__tests__/pull-request.service.getPrDetail.test.ts +24 -9
- package/src/modules/workflow/git/git.service.ts +5 -8
- package/src/modules/workflow/git/node-git-runner.ts +1 -1
- package/src/modules/workflow/git/pull-request.service.ts +34 -29
- package/src/modules/workflow/index.ts +15 -2
- package/src/modules/workflow/pending-commits.service.ts +2 -2
- package/src/modules/workflow/read-on-branch.ts +1 -1
- package/src/modules/workflow/recovery-bot.ts +2 -2
- package/src/modules/workflow/review-workflow/approval-lock.ts +1 -1
- package/src/modules/workflow/review-workflow/review-workflow.interface.ts +3 -35
- package/src/modules/workflow/review-workflow/review-workflow.service.ts +6 -165
- package/src/modules/workflow/workflow.routes.ts +46 -100
- package/src/modules/workflow/workflow.service.ts +272 -191
- package/src/modules/workspace/__tests__/agent-downloads.test.ts +2 -1
- package/src/modules/workspace/__tests__/agent-uploads.test.ts +87 -1
- package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +2 -1
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +2 -1
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +2 -1
- package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +2 -1
- package/src/modules/workspace/__tests__/worker-pool.test.ts +118 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +3 -2
- package/src/modules/workspace/__tests__/workspace.service.ensure-remotes-fetched.test.ts +30 -0
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +2 -1
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +2 -1
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +30 -4
- package/src/modules/workspace/agent-access.gate.ts +3 -3
- package/src/modules/workspace/agent-download.builder.ts +1 -1
- package/src/modules/workspace/agent-upload.routes.ts +19 -0
- package/src/modules/workspace/agent-upload.store.ts +18 -0
- package/src/modules/workspace/bounded-matcher.ts +32 -89
- package/src/modules/workspace/file-readers/README.md +9 -0
- package/src/modules/workspace/file-readers/__tests__/doc-extract.service.test.ts +165 -0
- package/src/modules/workspace/file-readers/__tests__/doc-extract.test.ts +21 -16
- package/src/modules/workspace/file-readers/__tests__/extract-in-worker.test.ts +229 -0
- package/src/modules/workspace/file-readers/__tests__/file-reader.registry.test.ts +2 -1
- package/src/modules/workspace/file-readers/__tests__/fixtures/damaged-pdf.ts +34 -0
- package/src/modules/workspace/file-readers/__tests__/fixtures/misbehaving-extract.worker.ts +57 -0
- package/src/modules/workspace/file-readers/__tests__/fixtures/pdf-in-trouble.worker.ts +20 -0
- package/src/modules/workspace/file-readers/__tests__/fixtures/unloadable-extract.worker.ts +2 -0
- package/src/modules/workspace/file-readers/doc-extract.service.ts +95 -20
- package/src/modules/workspace/file-readers/doc-extract.types.ts +13 -3
- package/src/modules/workspace/file-readers/document-extractor.contract.ts +42 -0
- package/src/modules/workspace/file-readers/document-extractors.ts +28 -0
- package/src/modules/workspace/file-readers/document-formats.ts +13 -0
- package/src/modules/workspace/file-readers/document-reader.ts +40 -36
- package/src/modules/workspace/file-readers/extract-in-worker.ts +183 -0
- package/src/modules/workspace/file-readers/extract-pdf.ts +23 -4
- package/src/modules/workspace/file-readers/extract.worker.ts +5 -0
- package/src/modules/workspace/file-readers/extraction-cache.ts +33 -12
- package/src/modules/workspace/file-readers/extraction-worker.ts +86 -0
- package/src/modules/workspace/file-readers/file-reader.registry.ts +6 -20
- package/src/modules/workspace/file-readers/file-reader.ts +14 -4
- package/src/modules/workspace/first-run.ts +1 -1
- package/src/modules/workspace/git-internals.middleware.ts +1 -1
- package/src/modules/workspace/index.ts +17 -0
- package/src/modules/workspace/kb-repository.ts +3 -2
- package/src/modules/workspace/not-found.ts +1 -1
- package/src/modules/workspace/pattern-matcher.contract.ts +1 -1
- package/src/modules/workspace/routine-write-policy.ts +1 -1
- package/src/modules/workspace/startup/kb-git.ts +1 -1
- package/src/modules/workspace/startup/kb-startup-runner.ts +1 -2
- package/src/modules/workspace/startup/steps/groups-to-plugins.step.ts +3 -3
- package/src/modules/workspace/startup/steps/personal-spaces.step.ts +2 -2
- package/src/modules/workspace/startup/steps/plugin-layout.ts +1 -1
- package/src/modules/workspace/startup/steps/roles-yaml.step.ts +1 -1
- package/src/modules/workspace/startup/steps/seed-tree.ts +2 -2
- package/src/modules/workspace/startup/steps/template-files.step.ts +2 -2
- package/src/modules/workspace/startup/steps/template-source.ts +2 -2
- package/src/modules/workspace/worker-pool.ts +193 -0
- package/src/modules/workspace/workspace.routes.ts +9 -12
- package/src/modules/workspace/workspace.service.ts +4 -7
- package/src/modules/workspace/workspace.tools.ts +53 -34
- package/src/modules/workspace/write-denial.ts +4 -5
- package/src/modules/write-access/index.ts +7 -0
- package/src/shared/__tests__/module-boundaries.lint.test.ts +301 -0
- package/src/modules/workflow/__tests__/format-affected-owners.test.ts +0 -85
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { afterAll, describe, expect, it } from 'vitest';
|
|
2
|
+
import { randomBytes } from 'node:crypto';
|
|
3
|
+
import { cpSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { migrate } from 'drizzle-orm/node-postgres/migrator';
|
|
7
|
+
import { eq, sql } from 'drizzle-orm';
|
|
8
|
+
import { closeDb, createDb, type Database } from '../connection.js';
|
|
9
|
+
import { changeRequests, dataMigrations } from '../core-schema.js';
|
|
10
|
+
import { runCoreMigrations, runPiiEncryptionBackfill } from '../migrate.js';
|
|
11
|
+
import { coreMigrationsDir } from '../../../assets.js';
|
|
12
|
+
import { IndexOnWrite, SealOnWrite } from '../../../shared/column-crypto.js';
|
|
13
|
+
import { PG_ADMIN_URL, PG_TEST_TIMEOUT, dropScratchDatabases, scratchDatabaseUrl } from '../../../__tests__/pg-scratch.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The data half of migration 0020, on a real Postgres: a deployment whose
|
|
17
|
+
* bodies still carry the generated owners block and an access request's
|
|
18
|
+
* level and note starts on this release, and comes out with the level and
|
|
19
|
+
* the note on their columns and the prose alone in the body. Pinned through
|
|
20
|
+
* the one entry point a start uses, `runCoreMigrations`, so the test fails if
|
|
21
|
+
* the pass is ever not wired to the start that applies 0020 — and shows that
|
|
22
|
+
* the next start writes nothing.
|
|
23
|
+
*
|
|
24
|
+
* Runs where `TEST_DATABASE_URL` names a server this role may create
|
|
25
|
+
* databases on, each test in a scratch database of its own.
|
|
26
|
+
*/
|
|
27
|
+
const KEY = randomBytes(32).toString('base64');
|
|
28
|
+
const open: Database[] = [];
|
|
29
|
+
const folders: string[] = [];
|
|
30
|
+
|
|
31
|
+
/** The `data_migrations` row the move leaves behind — the pass's one public trace besides the rows. */
|
|
32
|
+
const LEDGER_ROW = '0020_change_request_body_is_the_description';
|
|
33
|
+
|
|
34
|
+
const GENERATED = ['## Affected owners', '', '- `Docs/a.md` — Admin', '- `Docs/b.md` — Jane <jane@x.io>'].join('\n');
|
|
35
|
+
|
|
36
|
+
const ACCESS_REQUEST_BODY = [
|
|
37
|
+
'<!--hexis:access-request-level:owner-->',
|
|
38
|
+
'Rita \\(rita@x\\.io\\) asked for **Owner** on Research\\.',
|
|
39
|
+
'',
|
|
40
|
+
'Note from Rita:',
|
|
41
|
+
'',
|
|
42
|
+
'<!--hexis:access-request-note-->',
|
|
43
|
+
'> I maintain these pages now',
|
|
44
|
+
'<!--/hexis:access-request-note-->',
|
|
45
|
+
'',
|
|
46
|
+
"Anyone who can edit this folder's access answers it.",
|
|
47
|
+
'',
|
|
48
|
+
GENERATED,
|
|
49
|
+
].join('\n');
|
|
50
|
+
|
|
51
|
+
/** The core history as it stood BEFORE 0020: the packaged folder minus 0020 and its ledger table (0021), in a folder of this test's own. */
|
|
52
|
+
function historyBefore0020(): string {
|
|
53
|
+
const folder = mkdtempSync(path.join(tmpdir(), 'hexis-core-before-0020-'));
|
|
54
|
+
folders.push(folder);
|
|
55
|
+
cpSync(coreMigrationsDir(), folder, { recursive: true });
|
|
56
|
+
rmSync(path.join(folder, '0020_change_request_body_is_the_description.sql'));
|
|
57
|
+
rmSync(path.join(folder, 'meta', '0020_snapshot.json'));
|
|
58
|
+
rmSync(path.join(folder, '0021_data_migrations_ledger.sql'));
|
|
59
|
+
rmSync(path.join(folder, 'meta', '0021_snapshot.json'));
|
|
60
|
+
const journalPath = path.join(folder, 'meta', '_journal.json');
|
|
61
|
+
const journal = JSON.parse(readFileSync(journalPath, 'utf8')) as { entries: { idx: number }[] };
|
|
62
|
+
journal.entries = journal.entries.filter((e) => e.idx < 20);
|
|
63
|
+
writeFileSync(journalPath, JSON.stringify(journal, null, 2));
|
|
64
|
+
return folder;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async function handle(): Promise<Database> {
|
|
68
|
+
const db = createDb(await scratchDatabaseUrl('hexis_legacy_bodies'), { piiKey: KEY });
|
|
69
|
+
open.push(db);
|
|
70
|
+
return db;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* A database an older version left: started on the history to 0019 (so its
|
|
75
|
+
* personal-data backfill has run and sealed columns are trusted as sealed),
|
|
76
|
+
* holding the rows that version wrote — sealed as it sealed them, through SQL
|
|
77
|
+
* that names only the columns that existed then (the schema module already
|
|
78
|
+
* knows the two new ones).
|
|
79
|
+
*/
|
|
80
|
+
async function olderDeployment(): Promise<Database> {
|
|
81
|
+
const db = await handle();
|
|
82
|
+
// As that version's start did it: its SQL history, then its PII backfill.
|
|
83
|
+
await migrate(db, { migrationsFolder: historyBefore0020(), migrationsTable: '__drizzle_migrations_core' });
|
|
84
|
+
await runPiiEncryptionBackfill(db);
|
|
85
|
+
// Sealed by the handle's own connection, as every write through it is —
|
|
86
|
+
// the marks the column codecs hand it — so what the pass reads back is
|
|
87
|
+
// exactly what the older version wrote.
|
|
88
|
+
const seal = (plain: string) => new SealOnWrite(plain) as unknown as string;
|
|
89
|
+
const index = (plain: string) => new IndexOnWrite(plain) as unknown as string;
|
|
90
|
+
const row = (branch: string, title: string, body: string, email: string, name: string, state = 'open') =>
|
|
91
|
+
sql`(${branch}, 'main', ${seal(title)}, ${seal(body)}, ${seal(email)}, ${index(email)}, ${seal(name)}, ${state})`;
|
|
92
|
+
await db.execute(sql`
|
|
93
|
+
insert into change_requests (source_branch, target_branch, title, body, author_email, author_email_bidx, author_name, state) values
|
|
94
|
+
${row('ada/draft', 'Ordinary', `Please take a look.\n\n## Why now\n\nBecause.\n\n${GENERATED}`, 'ada@example.com', 'Ada')},
|
|
95
|
+
${row('rita/join-research', 'Access request: Research', ACCESS_REQUEST_BODY, 'rita@x.io', 'Rita')},
|
|
96
|
+
${row('bo/clean', 'Already clean', 'P2 - Planned\n\nJust prose.', 'bo@example.com', 'Bo', 'merged')}
|
|
97
|
+
`);
|
|
98
|
+
return db;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const ledgerRows = async (db: Database) =>
|
|
102
|
+
(await db.select({ name: dataMigrations.name, note: dataMigrations.note }).from(dataMigrations)).map((r) => ({ name: r.name, note: r.note }));
|
|
103
|
+
|
|
104
|
+
/** The ledger with its timestamps: what a second start must leave exactly as it found. */
|
|
105
|
+
const ledger = async (db: Database) =>
|
|
106
|
+
(await db.select().from(dataMigrations)).map((r) => ({ name: r.name, note: r.note, appliedAt: r.appliedAt.toISOString() }));
|
|
107
|
+
|
|
108
|
+
const rowsOf = async (db: Database) =>
|
|
109
|
+
(await db.select().from(changeRequests).orderBy(changeRequests.sourceBranch)).map((r) => ({
|
|
110
|
+
branch: r.sourceBranch,
|
|
111
|
+
body: r.body,
|
|
112
|
+
level: r.accessRequestLevel,
|
|
113
|
+
note: r.accessRequestNote,
|
|
114
|
+
updatedAt: r.updatedAt,
|
|
115
|
+
}));
|
|
116
|
+
|
|
117
|
+
describe.skipIf(!PG_ADMIN_URL)('migration 0020 — a request body becomes its description', () => {
|
|
118
|
+
afterAll(async () => {
|
|
119
|
+
for (const db of open) await closeDb(db);
|
|
120
|
+
await dropScratchDatabases();
|
|
121
|
+
for (const folder of folders) rmSync(folder, { recursive: true, force: true });
|
|
122
|
+
}, PG_TEST_TIMEOUT);
|
|
123
|
+
|
|
124
|
+
it(
|
|
125
|
+
'the start that applies it moves the level and the note onto the columns and leaves the prose, open and closed rows alike',
|
|
126
|
+
async () => {
|
|
127
|
+
const db = await olderDeployment();
|
|
128
|
+
await runCoreMigrations(db, coreMigrationsDir());
|
|
129
|
+
|
|
130
|
+
expect(await rowsOf(db)).toEqual([
|
|
131
|
+
{ branch: 'ada/draft', body: 'Please take a look.\n\n## Why now\n\nBecause.', level: null, note: null, updatedAt: null },
|
|
132
|
+
{ branch: 'bo/clean', body: 'P2 - Planned\n\nJust prose.', level: null, note: null, updatedAt: null },
|
|
133
|
+
{
|
|
134
|
+
branch: 'rita/join-research',
|
|
135
|
+
body: [
|
|
136
|
+
'Rita \\(rita@x\\.io\\) asked for **Owner** on Research\\.',
|
|
137
|
+
'',
|
|
138
|
+
'Note from Rita:',
|
|
139
|
+
'',
|
|
140
|
+
'> I maintain these pages now',
|
|
141
|
+
'',
|
|
142
|
+
"Anyone who can edit this folder's access answers it.",
|
|
143
|
+
].join('\n'),
|
|
144
|
+
level: 'owner',
|
|
145
|
+
note: 'I maintain these pages now',
|
|
146
|
+
updatedAt: null,
|
|
147
|
+
},
|
|
148
|
+
]);
|
|
149
|
+
},
|
|
150
|
+
PG_TEST_TIMEOUT,
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
it(
|
|
154
|
+
'the next start writes nothing: the pass belongs to the start that applied 0020',
|
|
155
|
+
async () => {
|
|
156
|
+
const db = await olderDeployment();
|
|
157
|
+
await runCoreMigrations(db, coreMigrationsDir());
|
|
158
|
+
// A body written AFTER the release that happens to use the old words is
|
|
159
|
+
// the author's own, and a second start must not cut it.
|
|
160
|
+
await db
|
|
161
|
+
.update(changeRequests)
|
|
162
|
+
.set({ body: 'Lead.\n\n## Affected owners\n\nI mean the GTM ones.' })
|
|
163
|
+
.where(eq(changeRequests.sourceBranch, 'bo/clean'));
|
|
164
|
+
|
|
165
|
+
await runCoreMigrations(db, coreMigrationsDir());
|
|
166
|
+
|
|
167
|
+
const bo = (await rowsOf(db)).find((r) => r.branch === 'bo/clean');
|
|
168
|
+
expect(bo?.body).toBe('Lead.\n\n## Affected owners\n\nI mean the GTM ones.');
|
|
169
|
+
},
|
|
170
|
+
PG_TEST_TIMEOUT,
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
it(
|
|
174
|
+
'a start that died between the SQL history and the pass is finished by the next start',
|
|
175
|
+
async () => {
|
|
176
|
+
// The SQL history applied (drizzle's ledger has 0020 and 0021) but no
|
|
177
|
+
// `data_migrations` row: exactly what a crash in between leaves behind.
|
|
178
|
+
const db = await olderDeployment();
|
|
179
|
+
await migrate(db, { migrationsFolder: coreMigrationsDir(), migrationsTable: '__drizzle_migrations_core' });
|
|
180
|
+
expect(await ledgerRows(db)).toEqual([]);
|
|
181
|
+
|
|
182
|
+
await runCoreMigrations(db, coreMigrationsDir());
|
|
183
|
+
|
|
184
|
+
const rita = (await rowsOf(db)).find((r) => r.branch === 'rita/join-research');
|
|
185
|
+
expect(rita).toMatchObject({ level: 'owner', note: 'I maintain these pages now' });
|
|
186
|
+
expect(rita?.body).not.toContain('<!--');
|
|
187
|
+
expect(await ledgerRows(db)).toEqual([
|
|
188
|
+
{ name: LEDGER_ROW, note: '2 of 3 change-request bodies moved to the description-only shape' },
|
|
189
|
+
]);
|
|
190
|
+
},
|
|
191
|
+
PG_TEST_TIMEOUT,
|
|
192
|
+
);
|
|
193
|
+
|
|
194
|
+
it(
|
|
195
|
+
'a pass that fails midway leaves no body moved and no ledger row, and the next start does the whole of it',
|
|
196
|
+
async () => {
|
|
197
|
+
const db = await olderDeployment();
|
|
198
|
+
await migrate(db, { migrationsFolder: coreMigrationsDir(), migrationsTable: '__drizzle_migrations_core' });
|
|
199
|
+
// The second body the pass rewrites (in id order) is refused, after the
|
|
200
|
+
// first one was written.
|
|
201
|
+
await db.execute(sql`
|
|
202
|
+
create function refuse_rita() returns trigger language plpgsql as $refuse$
|
|
203
|
+
begin raise exception 'the start died here'; end $refuse$
|
|
204
|
+
`);
|
|
205
|
+
await db.execute(sql`
|
|
206
|
+
create trigger refuse_rita before update on change_requests
|
|
207
|
+
for each row when (old.source_branch = 'rita/join-research') execute function refuse_rita()
|
|
208
|
+
`);
|
|
209
|
+
const before = await rowsOf(db);
|
|
210
|
+
|
|
211
|
+
// The start dies in the pass: the SQL history was already applied, so
|
|
212
|
+
// the refusal can only come from the move's own UPDATE.
|
|
213
|
+
await expect(runCoreMigrations(db, coreMigrationsDir())).rejects.toThrow(/Failed query: update "change_requests"/);
|
|
214
|
+
expect(await rowsOf(db)).toEqual(before);
|
|
215
|
+
expect(await ledgerRows(db)).toEqual([]);
|
|
216
|
+
|
|
217
|
+
await db.execute(sql`drop trigger refuse_rita on change_requests`);
|
|
218
|
+
await runCoreMigrations(db, coreMigrationsDir());
|
|
219
|
+
const rows = await rowsOf(db);
|
|
220
|
+
expect(rows.find((r) => r.branch === 'ada/draft')?.body).toBe('Please take a look.\n\n## Why now\n\nBecause.');
|
|
221
|
+
expect(rows.find((r) => r.branch === 'rita/join-research')).toMatchObject({ level: 'owner', note: 'I maintain these pages now' });
|
|
222
|
+
expect((await ledgerRows(db)).map((r) => r.name)).toEqual([LEDGER_ROW]);
|
|
223
|
+
},
|
|
224
|
+
PG_TEST_TIMEOUT,
|
|
225
|
+
);
|
|
226
|
+
|
|
227
|
+
it(
|
|
228
|
+
'a start that finds the ledger row leaves the rows and the ledger exactly as they are',
|
|
229
|
+
async () => {
|
|
230
|
+
const db = await olderDeployment();
|
|
231
|
+
await runCoreMigrations(db, coreMigrationsDir());
|
|
232
|
+
const rowsAfterFirst = await rowsOf(db);
|
|
233
|
+
const ledgerAfterFirst = await ledger(db);
|
|
234
|
+
expect(ledgerAfterFirst.map((r) => r.name)).toEqual([LEDGER_ROW]);
|
|
235
|
+
|
|
236
|
+
await runCoreMigrations(db, coreMigrationsDir());
|
|
237
|
+
|
|
238
|
+
expect(await rowsOf(db)).toEqual(rowsAfterFirst);
|
|
239
|
+
expect(await ledger(db)).toEqual(ledgerAfterFirst);
|
|
240
|
+
},
|
|
241
|
+
PG_TEST_TIMEOUT,
|
|
242
|
+
);
|
|
243
|
+
|
|
244
|
+
it(
|
|
245
|
+
'a fresh database has nothing to move, and records that too',
|
|
246
|
+
async () => {
|
|
247
|
+
const db = await handle();
|
|
248
|
+
await runCoreMigrations(db, coreMigrationsDir());
|
|
249
|
+
expect(await ledgerRows(db)).toEqual([
|
|
250
|
+
{ name: LEDGER_ROW, note: '0 of 0 change-request bodies moved to the description-only shape' },
|
|
251
|
+
]);
|
|
252
|
+
const once = await ledger(db);
|
|
253
|
+
await runCoreMigrations(db, coreMigrationsDir());
|
|
254
|
+
expect(await ledger(db)).toEqual(once);
|
|
255
|
+
},
|
|
256
|
+
PG_TEST_TIMEOUT,
|
|
257
|
+
);
|
|
258
|
+
});
|
|
@@ -34,7 +34,6 @@ const TABLES = [
|
|
|
34
34
|
'users',
|
|
35
35
|
'pr_file_approvals',
|
|
36
36
|
'pr_merge_log',
|
|
37
|
-
'pr_comments',
|
|
38
37
|
'change_requests',
|
|
39
38
|
'pending_commits',
|
|
40
39
|
'file_locks',
|
|
@@ -98,8 +97,6 @@ async function plantLegacyRows(q: Query): Promise<void> {
|
|
|
98
97
|
await q(`insert into pr_merge_log (pr_number, triggered_by_email, triggered_by_name, head_sha_at_merge, merge_method, succeeded, error)
|
|
99
98
|
values (1, 'ada@example.com', 'Ada', 'abc', 'merge', true, null),
|
|
100
99
|
(1, 'bo@example.com', 'Bo', 'abc', 'merge', false, 'Bo has no push right')`);
|
|
101
|
-
await q(`insert into pr_comments (pr_number, author_email, author_name, head_sha, body)
|
|
102
|
-
values (1, 'bo@example.com', 'Bo', 'abc', 'Looks right to me')`);
|
|
103
100
|
await q(`insert into pending_commits (workspace_id, branch, path, author_email, author_name, last_error)
|
|
104
101
|
values ('w', 'main', 'a.md', 'ada@example.com', 'Ada', 'rejected for Ada')`);
|
|
105
102
|
await q(`insert into file_locks (workspace_id, branch, path, holder_user_id, holder_name, expires_at)
|
|
@@ -302,10 +299,6 @@ describe.skipIf(!ADMIN_URL)('personal data, on a real Postgres', () => {
|
|
|
302
299
|
expect(log.every((r) => r.error === null || sealed(r.error))).toBe(true);
|
|
303
300
|
expect(log.every((r) => r.triggered_by_email_bidx === keys.index(opened(r.triggered_by_email)))).toBe(true);
|
|
304
301
|
|
|
305
|
-
const [comment] = await q(`select * from pr_comments`);
|
|
306
|
-
expect([comment!.author_email, comment!.author_name, comment!.body].every(sealed)).toBe(true);
|
|
307
|
-
expect(comment!.author_email_bidx).toBe(keys.index('bo@example.com'));
|
|
308
|
-
|
|
309
302
|
const [queued] = await q(`select * from pending_commits`);
|
|
310
303
|
expect([queued!.author_email, queued!.author_name, queued!.last_error].every(sealed)).toBe(true);
|
|
311
304
|
expect(queued!.author_email_bidx).toBe(keys.index('ada@example.com'));
|
|
@@ -347,6 +340,10 @@ describe.skipIf(!ADMIN_URL)('personal data, on a real Postgres', () => {
|
|
|
347
340
|
).rejects.toThrow();
|
|
348
341
|
await expect(q(`insert into users (email, name) values ('x', 'x')`)).rejects.toThrow();
|
|
349
342
|
|
|
343
|
+
// Change-request comments are gone, storage and all (migration 0018).
|
|
344
|
+
const [comments] = await q(`select to_regclass('pr_comments')::text as t`);
|
|
345
|
+
expect(comments!.t).toBeNull();
|
|
346
|
+
|
|
350
347
|
// And the application reads it back as it was written.
|
|
351
348
|
const [read] = await db.select().from(users).where(eq(users.emailBidx, 'ADA@EXAMPLE.COM '));
|
|
352
349
|
expect(read).toMatchObject({ email: 'Ada@Example.com', name: 'Ada', avatarUrl: null });
|
|
@@ -371,7 +368,7 @@ describe.skipIf(!ADMIN_URL)('personal data, on a real Postgres', () => {
|
|
|
371
368
|
const exact = `pii:v1:${'A'.repeat(16)}:${'B'.repeat(22)}==:Q2xlYXI=`;
|
|
372
369
|
const unpadded = `pii:v1:${'A'.repeat(16)}:${'B'.repeat(22)}:Q2xlYXI=`;
|
|
373
370
|
await q(`update users set name = '${exact}' where email = 'bo@example.com'`);
|
|
374
|
-
await q(`update
|
|
371
|
+
await q(`update change_requests set title = '${unpadded}'`);
|
|
375
372
|
await q(`update file_locks set holder_name = '${exact}'`);
|
|
376
373
|
|
|
377
374
|
await runCoreMigrations(db, coreMigrationsDir());
|
|
@@ -379,9 +376,9 @@ describe.skipIf(!ADMIN_URL)('personal data, on a real Postgres', () => {
|
|
|
379
376
|
const [bo] = await q(`select name from users where email_bidx = '${keys.index('bo@example.com')}'`);
|
|
380
377
|
expect(bo!.name).not.toBe(exact);
|
|
381
378
|
expect(opened(bo!.name)).toBe(exact);
|
|
382
|
-
const [
|
|
383
|
-
expect(
|
|
384
|
-
expect(opened(
|
|
379
|
+
const [cr] = await q(`select title from change_requests`);
|
|
380
|
+
expect(cr!.title).not.toBe(unpadded);
|
|
381
|
+
expect(opened(cr!.title)).toBe(unpadded);
|
|
385
382
|
const [lock] = await q(`select holder_name from file_locks`);
|
|
386
383
|
expect(opened(lock!.holder_name)).toBe(exact);
|
|
387
384
|
// And what the application reads back is what was typed.
|
|
@@ -400,17 +397,17 @@ describe.skipIf(!ADMIN_URL)('personal data, on a real Postgres', () => {
|
|
|
400
397
|
async () => {
|
|
401
398
|
const { db, q } = await beforeTheBackfill(await scratchDatabase());
|
|
402
399
|
await plantLegacyRows(q);
|
|
403
|
-
await q(`insert into
|
|
404
|
-
select n, 'ada@example.com', 'Ada', 'abc', '
|
|
400
|
+
await q(`insert into pr_merge_log (pr_number, triggered_by_email, triggered_by_name, head_sha_at_merge, merge_method, succeeded, error)
|
|
401
|
+
select n, 'ada@example.com', 'Ada', 'abc', 'merge', false, 'refusal ' || n from generate_series(2, 1300) n`);
|
|
405
402
|
|
|
406
403
|
await runCoreMigrations(db, coreMigrationsDir());
|
|
407
404
|
|
|
408
|
-
const [left] = await q(`select count(*)::int as n from
|
|
405
|
+
const [left] = await q(`select count(*)::int as n from pr_merge_log where triggered_by_name not like 'pii:v1:%' or triggered_by_email_bidx is null`);
|
|
409
406
|
expect(left!.n).toBe(0);
|
|
410
|
-
const [all] = await q(`select count(*)::int as n from
|
|
411
|
-
expect(all!.n).toBe(
|
|
412
|
-
const [one] = await q(`select
|
|
413
|
-
expect(opened(one!.
|
|
407
|
+
const [all] = await q(`select count(*)::int as n from pr_merge_log`);
|
|
408
|
+
expect(all!.n).toBe(1301);
|
|
409
|
+
const [one] = await q(`select error from pr_merge_log where pr_number = 1300`);
|
|
410
|
+
expect(opened(one!.error)).toBe('refusal 1300');
|
|
414
411
|
},
|
|
415
412
|
TIMEOUT,
|
|
416
413
|
);
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* `externalApiKeys`) from here. `schema.ts` re-exports both, so existing
|
|
11
11
|
* imports keep working unchanged.
|
|
12
12
|
*
|
|
13
|
-
* PII columns (emails, display names, change-request
|
|
13
|
+
* PII columns (emails, display names, change-request text) are
|
|
14
14
|
* `encryptedText` — AES-256-GCM ciphertext in the database, transparently
|
|
15
15
|
* decrypted on read (see `shared/column-crypto.ts`). Because the ciphertext is
|
|
16
16
|
* randomized, equality lookups and unique constraints on those columns go
|
|
@@ -128,40 +128,6 @@ export const prMergeLog = pgTable('pr_merge_log', {
|
|
|
128
128
|
byPr: index('pr_merge_log_by_pr').on(t.prNumber),
|
|
129
129
|
}));
|
|
130
130
|
|
|
131
|
-
/**
|
|
132
|
-
* In-app PR comments. GitHub is authoritative for the diff + PR metadata;
|
|
133
|
-
* Bevel owns the review conversation. Comments never round-trip to GitHub.
|
|
134
|
-
*
|
|
135
|
-
* Shape encodes three comment kinds:
|
|
136
|
-
* • General PR comment — path null, line null
|
|
137
|
-
* • File-level comment — path set, line null
|
|
138
|
-
* • Inline (line-anchored) — path set, line set
|
|
139
|
-
*
|
|
140
|
-
* Threading: replies point at their root via `parentId`. Root comments have
|
|
141
|
-
* `parentId = null`. We use a self-FK-less column (no DB-side constraint) to
|
|
142
|
-
* keep the parent row independently deletable — the service layer tolerates
|
|
143
|
-
* orphan replies rather than cascading deletes and losing discussion context.
|
|
144
|
-
*/
|
|
145
|
-
export const prComments = pgTable('pr_comments', {
|
|
146
|
-
id: uuid('id').defaultRandom().primaryKey(),
|
|
147
|
-
prNumber: integer('pr_number').notNull(),
|
|
148
|
-
authorEmail: encryptedText('author_email').notNull(),
|
|
149
|
-
/** Blind index of `author_email` — GDPR-erasure lookup. */
|
|
150
|
-
authorEmailBidx: blindIndexText('author_email_bidx').notNull(),
|
|
151
|
-
authorName: encryptedText('author_name').notNull(),
|
|
152
|
-
path: text('path'),
|
|
153
|
-
line: integer('line'),
|
|
154
|
-
headSha: text('head_sha').notNull(),
|
|
155
|
-
// Encrypted: review conversation exists only in this DB (never on GitHub).
|
|
156
|
-
body: encryptedText('body').notNull(),
|
|
157
|
-
parentId: uuid('parent_id'),
|
|
158
|
-
createdAt: timestamp('created_at').defaultNow().notNull(),
|
|
159
|
-
updatedAt: timestamp('updated_at'),
|
|
160
|
-
}, (t) => ({
|
|
161
|
-
byPr: index('pr_comments_by_pr').on(t.prNumber),
|
|
162
|
-
byThread: index('pr_comments_by_thread').on(t.prNumber, t.path, t.line),
|
|
163
|
-
}));
|
|
164
|
-
|
|
165
131
|
/**
|
|
166
132
|
* Change requests (the app's own "pull request" model). The app used to lean on
|
|
167
133
|
* GitHub PRs via the `gh` CLI; now a change request is a plain DB row plus git
|
|
@@ -169,7 +135,7 @@ export const prComments = pgTable('pr_comments', {
|
|
|
169
135
|
* hosted) works — the remote only stores commits/branches.
|
|
170
136
|
*
|
|
171
137
|
* `number` is the human-facing id and the join key the sibling tables
|
|
172
|
-
* (`pr_file_approvals`, `
|
|
138
|
+
* (`pr_file_approvals`, `pr_merge_log`) reference in their
|
|
173
139
|
* `pr_number` column — those columns now hold THIS number, not a GitHub PR
|
|
174
140
|
* number. It's a DB-assigned identity so allocation is race-free.
|
|
175
141
|
*
|
|
@@ -187,7 +153,24 @@ export const changeRequests = pgTable('change_requests', {
|
|
|
187
153
|
// is deliberately stored unencrypted (see encryptPii), so a defaulted row
|
|
188
154
|
// and an app-written empty body hold the identical representation.
|
|
189
155
|
title: encryptedText('title').notNull(),
|
|
156
|
+
/**
|
|
157
|
+
* The request's description, and nothing else: exactly what its author (or
|
|
158
|
+
* a later edit) wrote. Hexis keeps none of its own facts in here — who must
|
|
159
|
+
* approve each file is resolved live from the access rules, and an access
|
|
160
|
+
* request's level and note have columns of their own below. Bodies written
|
|
161
|
+
* before this release carried both as prose and hidden markers; the first
|
|
162
|
+
* start on it moves them out (`moveLegacyRequestBodies` in `migrate.ts`).
|
|
163
|
+
*/
|
|
190
164
|
body: encryptedText('body').notNull().default(''),
|
|
165
|
+
/**
|
|
166
|
+
* Set on a request the access-request flow opened: the level the person
|
|
167
|
+
* asked for. Null on every other request. Read back by that flow to say
|
|
168
|
+
* "Requested: Owner" from the request itself, whose row is always readable,
|
|
169
|
+
* rather than from a branch a stale clone may not see yet.
|
|
170
|
+
*/
|
|
171
|
+
accessRequestLevel: text('access_request_level'),
|
|
172
|
+
/** The requester's note, when they wrote one. Encrypted: a person's own words. */
|
|
173
|
+
accessRequestNote: encryptedText('access_request_note'),
|
|
191
174
|
authorEmail: encryptedText('author_email').notNull(), // lowercased at insert
|
|
192
175
|
/** Blind index of `author_email` — GDPR-erasure lookup. */
|
|
193
176
|
authorEmailBidx: blindIndexText('author_email_bidx').notNull(),
|
|
@@ -242,6 +225,10 @@ export const changeRequests = pgTable('change_requests', {
|
|
|
242
225
|
'change_requests_state_check',
|
|
243
226
|
sql`${t.state} IN ('open', 'merged', 'closed')`,
|
|
244
227
|
),
|
|
228
|
+
accessRequestLevelCheck: check(
|
|
229
|
+
'change_requests_access_request_level_check',
|
|
230
|
+
sql`${t.accessRequestLevel} IS NULL OR ${t.accessRequestLevel} IN ('write', 'owner')`,
|
|
231
|
+
),
|
|
245
232
|
}));
|
|
246
233
|
|
|
247
234
|
/**
|
|
@@ -883,3 +870,23 @@ export const atlassianAccountLinks = pgTable('atlassian_account_links', {
|
|
|
883
870
|
}, (t) => ({
|
|
884
871
|
byUser: index('atlassian_account_links_by_user').on(t.userId),
|
|
885
872
|
}));
|
|
873
|
+
|
|
874
|
+
/**
|
|
875
|
+
* The ledger of the DATA halves of migrations: the rewrites SQL cannot do
|
|
876
|
+
* because they read sealed columns, run by the application right after the
|
|
877
|
+
* SQL history under the same lock (`migrate.ts`). One row per pass, written
|
|
878
|
+
* in the SAME transaction as the rows it rewrote, so a pass is recorded done
|
|
879
|
+
* exactly when its work is — a crash between the SQL history's own ledger
|
|
880
|
+
* and the pass leaves no row here, and the next start runs the pass. Drizzle's
|
|
881
|
+
* `__drizzle_migrations_core` ledger records only the SQL.
|
|
882
|
+
*
|
|
883
|
+
* The PII backfill of migration 0016 predates this table and keeps its own
|
|
884
|
+
* marker (the nullability of the blind-index columns it finalises).
|
|
885
|
+
*/
|
|
886
|
+
export const dataMigrations = pgTable('data_migrations', {
|
|
887
|
+
/** The pass, named after the migration whose data half it is: `0020_change_request_body_is_the_description`. */
|
|
888
|
+
name: text('name').primaryKey(),
|
|
889
|
+
appliedAt: timestamp('applied_at').defaultNow().notNull(),
|
|
890
|
+
/** What the pass did, for an operator reading the ledger: rows moved, say. */
|
|
891
|
+
note: text('note'),
|
|
892
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the database module offers the other modules. A consumer outside the
|
|
3
|
+
* module imports from here, never from the files: they are the module's own
|
|
4
|
+
* layout and free to move. Export what another module needs; nothing more.
|
|
5
|
+
*/
|
|
6
|
+
export type { Database } from './connection.js';
|
|
7
|
+
export { deploymentSettings } from './core-schema.js';
|
|
8
|
+
export { pgErrorCode } from './pg-error.js';
|
|
9
|
+
export { agentConnections, agentEvents, atlassianAccountLinks, changeRequests, externalApiKeys, fileLocks, githubFacadeCodes, githubFacadeIdentity, oauthAuthCodes, oauthClients, oauthTokens, pendingCommits, pluginJoinRequests, prFileApprovals, prMergeLog, secrets, users } from './schema.js';
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { migrate } from 'drizzle-orm/node-postgres/migrator';
|
|
2
|
-
import { sql } from 'drizzle-orm';
|
|
2
|
+
import { eq, sql } from 'drizzle-orm';
|
|
3
|
+
import { parseLegacyChangeRequestBody } from '@bevel-software/platform-shared';
|
|
3
4
|
import { logger } from '../../shared/logging.js';
|
|
5
|
+
import { changeRequests, dataMigrations } from './core-schema.js';
|
|
4
6
|
|
|
5
7
|
const log = logger('database');
|
|
6
8
|
import { DEFAULT_DB_SCHEMA, dbSchemaOf, piiKeysOf, type Database } from './connection.js';
|
|
@@ -74,11 +76,87 @@ export async function runCoreMigrations(db: Database, folder: string): Promise<v
|
|
|
74
76
|
// Under the same lock, before anything reads or writes a PII column:
|
|
75
77
|
// the data half of migration 0016, which SQL cannot do (see below).
|
|
76
78
|
await runPiiEncryptionBackfill(db);
|
|
79
|
+
// And the data half of 0020, recorded in `data_migrations` by the
|
|
80
|
+
// transaction that does it: a start that crashed between the SQL
|
|
81
|
+
// history's ledger and this pass finds no row and runs it.
|
|
82
|
+
await moveLegacyRequestBodies(db);
|
|
77
83
|
},
|
|
78
84
|
{ tenantKey },
|
|
79
85
|
);
|
|
80
86
|
}
|
|
81
87
|
|
|
88
|
+
/** The `data_migrations` row of the body move: present exactly when the move has been committed. */
|
|
89
|
+
const LEGACY_REQUEST_BODIES_MOVED = '0020_change_request_body_is_the_description';
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* The data half of migration 0020, which makes a request's body nothing but
|
|
93
|
+
* its description. Bodies written before it carried three other things: an
|
|
94
|
+
* `## Affected owners` block `openChangeRequest` appended (a snapshot of the
|
|
95
|
+
* eligible approvers that nothing read back — they are resolved live, per
|
|
96
|
+
* file), an access request's level and note in hidden markers (which the
|
|
97
|
+
* access-request flow parsed back out of the prose), and identity markers
|
|
98
|
+
* from the time a service account opened requests for people. Every body is
|
|
99
|
+
* read once here, under the handle's key, the level and the note are moved
|
|
100
|
+
* onto their own columns, and the prose is written back without the rest.
|
|
101
|
+
*
|
|
102
|
+
* ONE transaction: the rows it rewrites and the `data_migrations` row that
|
|
103
|
+
* records it commit together, or not at all. So the pass runs exactly once —
|
|
104
|
+
* on the start that first finds no ledger row, which is the start that applies
|
|
105
|
+
* 0020 or, if that start died between drizzle's own ledger and this pass, the
|
|
106
|
+
* next one — and never again: a body of the new shape is already clean, and
|
|
107
|
+
* the grammar this reads is written by nothing. A start that finds the row
|
|
108
|
+
* reads nothing.
|
|
109
|
+
*
|
|
110
|
+
* What the transaction does NOT do is fence the old version: its rows are
|
|
111
|
+
* read `FOR UPDATE`, which only makes an old-version edit of an existing row
|
|
112
|
+
* wait for the move, and a request the old version opens after the move has
|
|
113
|
+
* committed is stored in the old shape and never rewritten. That is why the
|
|
114
|
+
* upgrade requires the old version to be stopped before the new one starts
|
|
115
|
+
* (UPGRADING.md, "Stop the old version before the new one starts"), as the
|
|
116
|
+
* personal-data backfill of 0016 already did; this pass adds no mechanism of
|
|
117
|
+
* its own, and a rolling update across this release is not supported.
|
|
118
|
+
*
|
|
119
|
+
* Walked row by row rather than in one UPDATE because the column is sealed:
|
|
120
|
+
* SQL can neither read the marker nor write the cleaned text. Reached only
|
|
121
|
+
* through {@link runCoreMigrations}, and observed through what it leaves:
|
|
122
|
+
* the rows and the ledger.
|
|
123
|
+
*/
|
|
124
|
+
async function moveLegacyRequestBodies(db: Database): Promise<void> {
|
|
125
|
+
await db.transaction(async (tx) => {
|
|
126
|
+
const done = await tx
|
|
127
|
+
.select({ name: dataMigrations.name })
|
|
128
|
+
.from(dataMigrations)
|
|
129
|
+
.where(eq(dataMigrations.name, LEGACY_REQUEST_BODIES_MOVED))
|
|
130
|
+
.limit(1);
|
|
131
|
+
if (done.length > 0) return;
|
|
132
|
+
|
|
133
|
+
const rows = await tx
|
|
134
|
+
.select({ id: changeRequests.id, body: changeRequests.body })
|
|
135
|
+
.from(changeRequests)
|
|
136
|
+
.orderBy(changeRequests.id)
|
|
137
|
+
.for('update');
|
|
138
|
+
let moved = 0;
|
|
139
|
+
for (const row of rows) {
|
|
140
|
+
const legacy = parseLegacyChangeRequestBody(row.body);
|
|
141
|
+
if (!legacy.changed) continue;
|
|
142
|
+
await tx
|
|
143
|
+
.update(changeRequests)
|
|
144
|
+
.set({
|
|
145
|
+
body: legacy.description,
|
|
146
|
+
...(legacy.accessRequestLevel ? { accessRequestLevel: legacy.accessRequestLevel } : {}),
|
|
147
|
+
...(legacy.accessRequestNote ? { accessRequestNote: legacy.accessRequestNote } : {}),
|
|
148
|
+
})
|
|
149
|
+
.where(eq(changeRequests.id, row.id));
|
|
150
|
+
moved += 1;
|
|
151
|
+
}
|
|
152
|
+
await tx.insert(dataMigrations).values({
|
|
153
|
+
name: LEGACY_REQUEST_BODIES_MOVED,
|
|
154
|
+
note: `${moved} of ${rows.length} change-request bodies moved to the description-only shape`,
|
|
155
|
+
});
|
|
156
|
+
log.info(`Change-request bodies: ${moved} of ${rows.length} moved to the description-only shape.`);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
|
|
82
160
|
/**
|
|
83
161
|
* Apply the ENTERPRISE migration history from `folder`, tracked in
|
|
84
162
|
* `__drizzle_migrations_enterprise`. Run AFTER {@link runCoreMigrations} —
|
|
@@ -220,7 +298,6 @@ const PII_BACKFILL_TABLES: PiiBackfillTable[] = [
|
|
|
220
298
|
{ table: 'users', key: ['id'], encrypted: ['email', 'name', 'avatar_url'], bidx: { source: 'email', column: 'email_bidx' } },
|
|
221
299
|
{ table: 'pr_file_approvals', key: ['id'], encrypted: ['approver_email', 'approver_name'], bidx: { source: 'approver_email', column: 'approver_email_bidx' } },
|
|
222
300
|
{ table: 'pr_merge_log', key: ['id'], encrypted: ['triggered_by_email', 'triggered_by_name', 'error'], bidx: { source: 'triggered_by_email', column: 'triggered_by_email_bidx' } },
|
|
223
|
-
{ table: 'pr_comments', key: ['id'], encrypted: ['author_email', 'author_name', 'body'], bidx: { source: 'author_email', column: 'author_email_bidx' } },
|
|
224
301
|
{ table: 'change_requests', key: ['id'], encrypted: ['author_email', 'author_name', 'title', 'body', 'apply_failure_reason', 'apply_failed_by_name'], bidx: { source: 'author_email', column: 'author_email_bidx' } },
|
|
225
302
|
{ table: 'pending_commits', key: ['id'], encrypted: ['author_email', 'author_name', 'last_error'], bidx: { source: 'author_email', column: 'author_email_bidx' } },
|
|
226
303
|
{ table: 'file_locks', key: ['workspace_id', 'branch', 'path'], encrypted: ['holder_name'] },
|
|
@@ -529,7 +606,6 @@ const PII_FINALIZE_STATEMENTS = [
|
|
|
529
606
|
'CREATE UNIQUE INDEX IF NOT EXISTS "pr_file_approvals_bidx_unq" ON "pr_file_approvals" ("pr_number","path","approver_email_bidx","head_sha")',
|
|
530
607
|
'DROP INDEX IF EXISTS "pr_file_approvals_unq"',
|
|
531
608
|
'ALTER TABLE "pr_merge_log" ALTER COLUMN "triggered_by_email_bidx" SET NOT NULL',
|
|
532
|
-
'ALTER TABLE "pr_comments" ALTER COLUMN "author_email_bidx" SET NOT NULL',
|
|
533
609
|
'ALTER TABLE "change_requests" ALTER COLUMN "author_email_bidx" SET NOT NULL',
|
|
534
610
|
'ALTER TABLE "pending_commits" ALTER COLUMN "author_email_bidx" SET NOT NULL',
|
|
535
611
|
'ALTER TABLE "plugin_join_requests" ALTER COLUMN "requester_email_bidx" SET NOT NULL',
|
|
@@ -3,8 +3,8 @@ import { logger } from '../../shared/logging.js';
|
|
|
3
3
|
|
|
4
4
|
const log = logger('declared-variables');
|
|
5
5
|
import { utcpNamespacedKey } from '../../shared/utcp-namespace.js';
|
|
6
|
-
import type { IToolManualService } from '../tool-manuals/
|
|
7
|
-
import type { ISecretsVaultService } from '../secrets-vault/
|
|
6
|
+
import type { IToolManualService } from '../tool-manuals/index.js';
|
|
7
|
+
import type { ISecretsVaultService } from '../secrets-vault/index.js';
|
|
8
8
|
|
|
9
9
|
type ResolveUserEmail = (userId: string) => Promise<string | undefined>;
|
|
10
10
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import type { AuthUser, IWorkflowService } from '@bevel-software/platform-shared';
|
|
3
3
|
import type { IDiffService } from './diff.interface.js';
|
|
4
|
-
import type { AuthService } from '../auth/
|
|
5
|
-
import type { IAccessControl } from '../access/
|
|
6
|
-
import { canReadWorkspacePath, toKbRelative, resolveReadableMap } from '../access-model/
|
|
4
|
+
import type { AuthService } from '../auth/index.js';
|
|
5
|
+
import type { IAccessControl } from '../access/index.js';
|
|
6
|
+
import { canReadWorkspacePath, toKbRelative, resolveReadableMap } from '../access-model/index.js';
|
|
7
7
|
import { WorkflowDomainError, WorkflowValidationError } from '../../shared/domain-errors.js';
|
|
8
8
|
import { domainErrorBody } from '../../shared/http-errors.js';
|
|
9
|
-
import { LockingFilesystem } from '../kb-fs/
|
|
9
|
+
import { LockingFilesystem } from '../kb-fs/index.js';
|
|
10
10
|
import { branchForWorkspaceId } from '../../shared/workspace-id.js';
|
|
11
|
-
import '../auth/
|
|
11
|
+
import '../auth/index.js';
|
|
12
12
|
|
|
13
13
|
function toHttpError(
|
|
14
14
|
err: unknown,
|
|
@@ -2,8 +2,8 @@ import fs from 'node:fs/promises';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import type { FileDiffPayload, PendingChange, ReviewSession, ChangeKind } from '@bevel-software/platform-shared';
|
|
4
4
|
import type { IDiffService } from './diff.interface.js';
|
|
5
|
-
import type { WorkspaceService } from '../workspace/
|
|
6
|
-
import type { WorkspaceMutex } from '../kb-fs/
|
|
5
|
+
import type { WorkspaceService } from '../workspace/index.js';
|
|
6
|
+
import type { WorkspaceMutex } from '../kb-fs/index.js';
|
|
7
7
|
import { gitDirOf } from '../kb-fs/index.js';
|
|
8
8
|
import { isAbsence, type ITreeWalker, type TreeWalkOptions } from '../../shared/fs.contract.js';
|
|
9
9
|
import { isDiffable } from './diff.config.js';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the diff module offers the other modules. A consumer outside the
|
|
3
|
+
* module imports from here, never from the files: they are the module's own
|
|
4
|
+
* layout and free to move. Export what another module needs; nothing more.
|
|
5
|
+
*/
|
|
6
|
+
export type { IDiffService } from './diff.interface.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { and, eq } from 'drizzle-orm';
|
|
2
|
-
import type { Database } from '../database/
|
|
3
|
-
import { atlassianAccountLinks } from '../database/
|
|
2
|
+
import type { Database } from '../database/index.js';
|
|
3
|
+
import { atlassianAccountLinks } from '../database/index.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Maps an outside system's account id — today an Atlassian (Forge) account —
|