@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,306 @@
|
|
|
1
|
+
import type { Server as HttpServer } from 'node:http';
|
|
2
|
+
import express from 'express';
|
|
3
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
4
|
+
import type { IWorkflowService } from '@bevel-software/platform-shared';
|
|
5
|
+
import { testKbContext } from '../../../../__tests__/kb-context.js';
|
|
6
|
+
import { ToolRegistry } from '../../../tool-registry/tool-registry.js';
|
|
7
|
+
import { InternalTokenService } from '../../../tool-auth/internal-token.service.js';
|
|
8
|
+
import { createToolAuthMiddleware } from '../../../tool-auth/tool-auth.middleware.js';
|
|
9
|
+
import { createToolContextResolver } from '../../../tool-helpers/tool-context.js';
|
|
10
|
+
import { createToolHandlerFactory } from '../../../tool-helpers/tool-handler.js';
|
|
11
|
+
import { WorkflowDomainError } from '../../../../shared/domain-errors.js';
|
|
12
|
+
import type { IAccessControl } from '../../../access/access-control.interface.js';
|
|
13
|
+
import type { AuthService } from '../../../auth/auth.service.js';
|
|
14
|
+
import type { WorkspaceService } from '../../../workspace/workspace.service.js';
|
|
15
|
+
import type { WorkflowEventBus } from '../../event-bus.js';
|
|
16
|
+
import { createWorkflowRoutes } from '../../workflow.routes.js';
|
|
17
|
+
import { registerWorkflowTools } from '../workflow.tools.js';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The app's `PATCH /api/workflow/change-requests/:number` and the agent's
|
|
21
|
+
* `update_change_request` are one verb: both reach the SAME service method
|
|
22
|
+
* with the same caller and the same fields, and every refusal it makes reaches
|
|
23
|
+
* both callers with the same status and the same words. The rule itself is
|
|
24
|
+
* pinned in `workflow.service.update-change-request.test.ts`; this pins that
|
|
25
|
+
* neither surface narrows, widens or rewords it.
|
|
26
|
+
*
|
|
27
|
+
* One answer differs, and on purpose: a request the caller may not READ is
|
|
28
|
+
* not found to the agent (404, as `get_change_request` answers it), before
|
|
29
|
+
* its state or the edit rule is consulted. The app serves every request's
|
|
30
|
+
* detail to any signed-in viewer, so its route has nothing to hide.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
const CALLER = { id: 'user-A', email: 'alice@example.com', name: 'Alice' };
|
|
34
|
+
|
|
35
|
+
let calls: unknown[][] = [];
|
|
36
|
+
/** What the shared service does next: answer the request, or refuse. */
|
|
37
|
+
let outcome: () => unknown;
|
|
38
|
+
/** `get_change_request`'s visibility gate, as the tool is handed it. */
|
|
39
|
+
let maySee: (number: number) => Promise<boolean>;
|
|
40
|
+
|
|
41
|
+
const updated = {
|
|
42
|
+
number: 9,
|
|
43
|
+
url: 'https://bevel.example.com/change-requests/9',
|
|
44
|
+
title: 'New title',
|
|
45
|
+
state: 'open',
|
|
46
|
+
touchedNodePaths: ['Docs/a.md'],
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const workflowService = {
|
|
50
|
+
updateChangeRequest: async (number: number, user: { id: string; email: string }, input: unknown) => {
|
|
51
|
+
calls.push(['updateChangeRequest', number, user.id, input]);
|
|
52
|
+
return outcome();
|
|
53
|
+
},
|
|
54
|
+
} as unknown as IWorkflowService;
|
|
55
|
+
|
|
56
|
+
const authService = { getUserById: async () => CALLER } as unknown as AuthService;
|
|
57
|
+
const workspaceService = {
|
|
58
|
+
getOrCreateForUser: async () => ({ id: 'ws' }),
|
|
59
|
+
findAnyWorkspaceId: async () => 'ws',
|
|
60
|
+
} as unknown as WorkspaceService;
|
|
61
|
+
const events = { emit: () => ({}) } as unknown as WorkflowEventBus;
|
|
62
|
+
const internalToken = new InternalTokenService({ secret: 's' });
|
|
63
|
+
|
|
64
|
+
let httpServer: HttpServer | undefined;
|
|
65
|
+
/** The agent tools `start` registered, as the manual lists them. */
|
|
66
|
+
let registry: ToolRegistry;
|
|
67
|
+
|
|
68
|
+
async function start(): Promise<string> {
|
|
69
|
+
const app = express();
|
|
70
|
+
app.use(express.json());
|
|
71
|
+
|
|
72
|
+
// The app's route, signed in as CALLER.
|
|
73
|
+
const appRouter = express.Router();
|
|
74
|
+
appRouter.use((req, _res, next) => {
|
|
75
|
+
(req as unknown as { userId: string }).userId = CALLER.id;
|
|
76
|
+
next();
|
|
77
|
+
});
|
|
78
|
+
appRouter.use(
|
|
79
|
+
createWorkflowRoutes(
|
|
80
|
+
workflowService,
|
|
81
|
+
workspaceService,
|
|
82
|
+
authService,
|
|
83
|
+
events,
|
|
84
|
+
{ canReadBatch: async () => new Map() } as unknown as IAccessControl,
|
|
85
|
+
'knowledge-base',
|
|
86
|
+
),
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
// The agent's tool, as CALLER over an internal token.
|
|
90
|
+
registry = new ToolRegistry();
|
|
91
|
+
const toolRouter = express.Router();
|
|
92
|
+
const toolAuth = createToolAuthMiddleware(
|
|
93
|
+
{ looksLikeExternalApiKey: () => false, verifyAndLoadToken: async () => null } as never,
|
|
94
|
+
internalToken,
|
|
95
|
+
);
|
|
96
|
+
const resolve = createToolContextResolver({
|
|
97
|
+
authService,
|
|
98
|
+
workspaceService,
|
|
99
|
+
workflowService,
|
|
100
|
+
events,
|
|
101
|
+
kbDirName: 'knowledge-base',
|
|
102
|
+
creatorAccess: { planForCreate: async () => null, grantInExtractedFile: async () => null, noteAccessFileWritten: () => {} },
|
|
103
|
+
} as never);
|
|
104
|
+
registerWorkflowTools(registry, toolRouter, toolAuth, createToolHandlerFactory(resolve), testKbContext(), async (_ctx, number) =>
|
|
105
|
+
maySee(number),
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
app.use('/api', toolRouter);
|
|
109
|
+
app.use('/api', appRouter);
|
|
110
|
+
httpServer = await new Promise<HttpServer>((r) => {
|
|
111
|
+
const s = app.listen(0, () => r(s));
|
|
112
|
+
});
|
|
113
|
+
return `http://127.0.0.1:${(httpServer.address() as { port: number }).port}`;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
async function viaRoute(base: string, body: Record<string, unknown>) {
|
|
117
|
+
const res = await fetch(`${base}/api/workflow/change-requests/9`, {
|
|
118
|
+
method: 'PATCH',
|
|
119
|
+
headers: { 'content-type': 'application/json' },
|
|
120
|
+
body: JSON.stringify(body),
|
|
121
|
+
});
|
|
122
|
+
return { status: res.status, body: (await res.json()) as Record<string, unknown> };
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
async function viaTool(base: string, body: Record<string, unknown>) {
|
|
126
|
+
const res = await fetch(`${base}/api/agent/tools/update_change_request`, {
|
|
127
|
+
method: 'POST',
|
|
128
|
+
headers: { 'content-type': 'application/json', authorization: `Bearer ${internalToken.mint({ userId: CALLER.id })}` },
|
|
129
|
+
body: JSON.stringify({ number: 9, ...body }),
|
|
130
|
+
});
|
|
131
|
+
return { status: res.status, body: (await res.json()) as Record<string, unknown> };
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
beforeEach(() => {
|
|
135
|
+
calls = [];
|
|
136
|
+
outcome = () => updated;
|
|
137
|
+
maySee = async () => true;
|
|
138
|
+
});
|
|
139
|
+
afterEach(async () => {
|
|
140
|
+
if (httpServer) await new Promise<void>((r) => httpServer!.close(() => r()));
|
|
141
|
+
httpServer = undefined;
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
describe('update_change_request ⇔ PATCH /workflow/change-requests/:number', () => {
|
|
145
|
+
it('both hand the same service call the same caller and the same fields', async () => {
|
|
146
|
+
const base = await start();
|
|
147
|
+
const fields = { title: 'New title', description: 'P2 - Planned\n\nWhy.' };
|
|
148
|
+
expect((await viaRoute(base, fields)).status).toBe(200);
|
|
149
|
+
expect((await viaTool(base, fields)).status).toBe(200);
|
|
150
|
+
expect(calls).toEqual([
|
|
151
|
+
['updateChangeRequest', 9, CALLER.id, fields],
|
|
152
|
+
['updateChangeRequest', 9, CALLER.id, fields],
|
|
153
|
+
]);
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
it('a description alone reaches the service as a description alone, from both', async () => {
|
|
157
|
+
const base = await start();
|
|
158
|
+
await viaRoute(base, { description: 'Only this.' });
|
|
159
|
+
await viaTool(base, { description: 'Only this.' });
|
|
160
|
+
expect(calls).toEqual([
|
|
161
|
+
['updateChangeRequest', 9, CALLER.id, { title: undefined, description: 'Only this.' }],
|
|
162
|
+
['updateChangeRequest', 9, CALLER.id, { title: undefined, description: 'Only this.' }],
|
|
163
|
+
]);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
it('an append reaches the service as an append, from both — the tool offers the field the route takes', async () => {
|
|
167
|
+
const base = await start();
|
|
168
|
+
expect((await viaRoute(base, { appendDescription: 'Round two.' })).status).toBe(200);
|
|
169
|
+
expect((await viaTool(base, { appendDescription: 'Round two.' })).status).toBe(200);
|
|
170
|
+
expect(calls).toEqual([
|
|
171
|
+
['updateChangeRequest', 9, CALLER.id, { title: undefined, description: undefined, appendDescription: 'Round two.' }],
|
|
172
|
+
['updateChangeRequest', 9, CALLER.id, { title: undefined, description: undefined, appendDescription: 'Round two.' }],
|
|
173
|
+
]);
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it("the tool's input schema names every field the route takes", async () => {
|
|
177
|
+
await start();
|
|
178
|
+
const tool = (await registry.listInternal()).find((t) => t.name === 'update_change_request');
|
|
179
|
+
// The catalog nests a tool's arguments under `body`.
|
|
180
|
+
const top = (tool?.inputs as { properties: Record<string, { properties?: Record<string, unknown> }> }).properties;
|
|
181
|
+
const props = top.body?.properties ?? top;
|
|
182
|
+
expect(Object.keys(props).sort()).toEqual(['appendDescription', 'description', 'number', 'title']);
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
const refusals: [string, () => never][] = [
|
|
186
|
+
[
|
|
187
|
+
'neither the author nor someone who may merge it (403)',
|
|
188
|
+
() => {
|
|
189
|
+
throw new WorkflowDomainError(
|
|
190
|
+
"Only the request's author, an admin, or someone who may approve every file it changes can edit its title and description.",
|
|
191
|
+
403,
|
|
192
|
+
);
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
[
|
|
196
|
+
'a merged request (409)',
|
|
197
|
+
() => {
|
|
198
|
+
throw new WorkflowDomainError(
|
|
199
|
+
'This change request has already been applied; its title and description can no longer be changed.',
|
|
200
|
+
409,
|
|
201
|
+
);
|
|
202
|
+
},
|
|
203
|
+
],
|
|
204
|
+
[
|
|
205
|
+
'a closed request (409)',
|
|
206
|
+
() => {
|
|
207
|
+
throw new WorkflowDomainError(
|
|
208
|
+
'This change request is closed; its title and description can no longer be changed.',
|
|
209
|
+
409,
|
|
210
|
+
);
|
|
211
|
+
},
|
|
212
|
+
],
|
|
213
|
+
];
|
|
214
|
+
|
|
215
|
+
for (const [name, refuse] of refusals) {
|
|
216
|
+
it(`refuses ${name} with the same status and the same words`, async () => {
|
|
217
|
+
const base = await start();
|
|
218
|
+
outcome = refuse;
|
|
219
|
+
const route = await viaRoute(base, { title: 'New title' });
|
|
220
|
+
const tool = await viaTool(base, { title: 'New title' });
|
|
221
|
+
expect(route.status).toBeGreaterThanOrEqual(400);
|
|
222
|
+
expect(tool).toEqual(route);
|
|
223
|
+
expect(typeof route.body.error).toBe('string');
|
|
224
|
+
expect((route.body.error as string).length).toBeGreaterThan(20);
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
it('the tool answers a request the caller may not see as not found, whatever its state or the rule would say', async () => {
|
|
229
|
+
const base = await start();
|
|
230
|
+
maySee = async () => false;
|
|
231
|
+
for (const [, refuse] of refusals) {
|
|
232
|
+
outcome = refuse;
|
|
233
|
+
const tool = await viaTool(base, { title: 'New title' });
|
|
234
|
+
expect(tool).toEqual({ status: 404, body: { error: 'Change request #9 not found.' } });
|
|
235
|
+
}
|
|
236
|
+
expect(calls).toEqual([]);
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
it('the tool answers the request’s link and its title; the route the request', async () => {
|
|
240
|
+
const base = await start();
|
|
241
|
+
const tool = await viaTool(base, { title: 'New title' });
|
|
242
|
+
expect(tool.body).toEqual({
|
|
243
|
+
number: 9,
|
|
244
|
+
url: 'https://bevel.example.com/change-requests/9',
|
|
245
|
+
title: 'New title',
|
|
246
|
+
});
|
|
247
|
+
const route = await viaRoute(base, { title: 'New title' });
|
|
248
|
+
expect(route.body).toMatchObject({ number: 9, title: 'New title' });
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
it('asks for something to change before reaching the service', async () => {
|
|
252
|
+
const base = await start();
|
|
253
|
+
const tool = await viaTool(base, {});
|
|
254
|
+
expect(tool.status).toBe(400);
|
|
255
|
+
expect(calls).toEqual([]);
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
it('the route refuses a non-string field before reaching the service', async () => {
|
|
259
|
+
const base = await start();
|
|
260
|
+
const route = await viaRoute(base, { title: 7 });
|
|
261
|
+
expect(route.status).toBe(400);
|
|
262
|
+
expect(calls).toEqual([]);
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* The comment system is gone: no screen ever showed a comment, so the routes,
|
|
268
|
+
* the service methods, the storage and the two agent tools were removed
|
|
269
|
+
* rather than surfaced. Its old addresses answer 404 and its tools are not
|
|
270
|
+
* offered; the request itself still answers on its own address.
|
|
271
|
+
*/
|
|
272
|
+
describe('change-request comments are gone', () => {
|
|
273
|
+
const routes: [string, string][] = [
|
|
274
|
+
['GET', '/api/workflow/change-requests/9/comments'],
|
|
275
|
+
['POST', '/api/workflow/change-requests/9/comments'],
|
|
276
|
+
['PATCH', '/api/workflow/change-requests/9/comments/00000000-0000-4000-8000-000000000000'],
|
|
277
|
+
['DELETE', '/api/workflow/change-requests/9/comments/00000000-0000-4000-8000-000000000000'],
|
|
278
|
+
];
|
|
279
|
+
for (const [method, path] of routes) {
|
|
280
|
+
it(`${method} ${path.replace('/api', '')} answers 404`, async () => {
|
|
281
|
+
const base = await start();
|
|
282
|
+
const res = await fetch(`${base}${path}`, {
|
|
283
|
+
method,
|
|
284
|
+
headers: { 'content-type': 'application/json' },
|
|
285
|
+
...(method === 'GET' || method === 'DELETE' ? {} : { body: JSON.stringify({ body: 'hi' }) }),
|
|
286
|
+
});
|
|
287
|
+
expect(res.status).toBe(404);
|
|
288
|
+
expect(calls).toEqual([]);
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
it('the agent is offered no comment tool, and calling one answers 404', async () => {
|
|
293
|
+
const base = await start();
|
|
294
|
+
for (const name of ['post_change_request_comment']) {
|
|
295
|
+
const res = await fetch(`${base}/api/agent/tools/${name}`, {
|
|
296
|
+
method: 'POST',
|
|
297
|
+
headers: { 'content-type': 'application/json', authorization: `Bearer ${internalToken.mint({ userId: CALLER.id })}` },
|
|
298
|
+
body: JSON.stringify({ number: 9, body: 'hi' }),
|
|
299
|
+
});
|
|
300
|
+
expect(res.status).toBe(404);
|
|
301
|
+
}
|
|
302
|
+
const names = (await registry.listInternal()).map((t) => t.name);
|
|
303
|
+
expect(names).toContain('update_change_request');
|
|
304
|
+
expect(names.filter((n) => n.includes('comment'))).toEqual([]);
|
|
305
|
+
});
|
|
306
|
+
});
|
|
@@ -72,7 +72,6 @@ function detailOf(files: Record<string, unknown>[]): Record<string, unknown> {
|
|
|
72
72
|
headSha: 'head-1',
|
|
73
73
|
baseSha: 'base-1',
|
|
74
74
|
files,
|
|
75
|
-
comments: [],
|
|
76
75
|
approvals: files.map((f) => approvalOf(f.path as string)),
|
|
77
76
|
mergeableInBevel: false,
|
|
78
77
|
mergeBlockedReasons: files.map((f) => `${f.path as string} is not approved`),
|
|
@@ -94,8 +93,6 @@ const externalApiKeyService = {
|
|
|
94
93
|
t === 'bevel_key' ? { user: { id: 'user-A', email: 'e@x', name: 'N' }, tokenId: 'tok' } : null,
|
|
95
94
|
} as never;
|
|
96
95
|
const authService = { getUserById: async (id: string) => ({ id, email: 'e@x', name: 'N' }) } as never;
|
|
97
|
-
/** A declined change request: no sha records what it proposed, so it has no head. */
|
|
98
|
-
const DECLINED_CR = 21;
|
|
99
96
|
|
|
100
97
|
const workspaceService = {
|
|
101
98
|
getOrCreateForUser: async () => ({ id: WS }),
|
|
@@ -129,15 +126,12 @@ const workflowService = {
|
|
|
129
126
|
releaseLock: async (ws: string, branch: string, path: string) => {
|
|
130
127
|
calls.push(['releaseLock', ws, branch, path]);
|
|
131
128
|
},
|
|
132
|
-
// #21 is DECLINED: the service reads such a row from nothing (no sha records
|
|
133
|
-
// what it proposed), so its detail carries no head — which is what the comment
|
|
134
|
-
// tool has to anchor to. Every other number is an ordinary open request.
|
|
135
129
|
getChangeRequestDetail: async (number: number) => ({
|
|
136
130
|
number,
|
|
137
131
|
url: `https://bevel.example.com/change-requests/${number}`,
|
|
138
|
-
headSha:
|
|
132
|
+
headSha: 'head-1',
|
|
139
133
|
approvals: [],
|
|
140
|
-
state:
|
|
134
|
+
state: 'open',
|
|
141
135
|
title: 'T',
|
|
142
136
|
base: 'main',
|
|
143
137
|
}),
|
|
@@ -181,10 +175,6 @@ const workflowService = {
|
|
|
181
175
|
}
|
|
182
176
|
return { kind: 'deleted', branch: name, lastCommit: 'tip-1', discardedCommits: name === 'me/unmerged' ? 3 : 0 };
|
|
183
177
|
},
|
|
184
|
-
postComment: async (number: number, _user: unknown, input: { path?: string }) => {
|
|
185
|
-
calls.push(['postComment', number, input.path]);
|
|
186
|
-
return { id: 'c-1' };
|
|
187
|
-
},
|
|
188
178
|
// The history and syncing reads, answered from a fixed script.
|
|
189
179
|
listChangesForFile: async (ws: string, path: string, limit?: number) => {
|
|
190
180
|
calls.push(['listChangesForFile', ws, path, limit]);
|
|
@@ -373,51 +363,6 @@ describe('registerWorkflowTools', () => {
|
|
|
373
363
|
expect(calls).toContainEqual(['commitChange', WS, 'user-A', { summary: 'fix typo', description: undefined }]);
|
|
374
364
|
});
|
|
375
365
|
|
|
376
|
-
// A change request's files are repository-relative; the Copy path form
|
|
377
|
-
// carries the clone folder, which is dropped so the comment lands on the file.
|
|
378
|
-
it('post_change_request_comment anchors a copied workspace path to the repository-relative file', async () => {
|
|
379
|
-
const base = await start();
|
|
380
|
-
for (const path of ['/knowledge-base/KnowledgeBase/Foo.md', 'knowledge-base/KnowledgeBase/Foo.md', 'KnowledgeBase/Foo.md']) {
|
|
381
|
-
const res = await post(`${base}/api/agent/tools/post_change_request_comment`, writeTok(), { number: 3, body: 'hi', path });
|
|
382
|
-
expect(res.status, path).toBe(200);
|
|
383
|
-
}
|
|
384
|
-
expect(calls.filter((c) => c[0] === 'postComment')).toEqual([
|
|
385
|
-
['postComment', 3, 'KnowledgeBase/Foo.md'],
|
|
386
|
-
['postComment', 3, 'KnowledgeBase/Foo.md'],
|
|
387
|
-
['postComment', 3, 'KnowledgeBase/Foo.md'],
|
|
388
|
-
]);
|
|
389
|
-
});
|
|
390
|
-
|
|
391
|
-
// An agent hands the change request's link to a person, so the tools that
|
|
392
|
-
// act on one by number return its `{ number, url }` beside their own payload.
|
|
393
|
-
it('post_change_request_comment returns the change request link', async () => {
|
|
394
|
-
const base = await start();
|
|
395
|
-
const comment = await post(`${base}/api/agent/tools/post_change_request_comment`, writeTok(), { number: 3, body: 'hi' });
|
|
396
|
-
expect(comment.status).toBe(200);
|
|
397
|
-
const commentBody = await comment.json();
|
|
398
|
-
expect(commentBody).toMatchObject({
|
|
399
|
-
comment: { id: 'c-1' },
|
|
400
|
-
changeRequest: { number: 3, url: 'https://bevel.example.com/change-requests/3' },
|
|
401
|
-
});
|
|
402
|
-
// A configured address yields an absolute link, so no note rides along.
|
|
403
|
-
expect(commentBody.changeRequest).not.toHaveProperty('urlNote');
|
|
404
|
-
});
|
|
405
|
-
|
|
406
|
-
// A comment anchors to a commit. A declined request records none — nothing
|
|
407
|
-
// durable says what it proposed, so it is read from nothing and its detail
|
|
408
|
-
// carries no head. Say so, rather than letting the service's `head sha is
|
|
409
|
-
// required` come back as a 400 about an argument the caller never passed.
|
|
410
|
-
it('post_change_request_comment says why a declined request takes no comment', async () => {
|
|
411
|
-
const base = await start();
|
|
412
|
-
const res = await post(`${base}/api/agent/tools/post_change_request_comment`, writeTok(), { number: DECLINED_CR, body: 'why was this turned down?' });
|
|
413
|
-
expect(res.status).toBe(409);
|
|
414
|
-
expect(((await res.json()) as { error: string }).error).toMatch(
|
|
415
|
-
new RegExp(`#${DECLINED_CR} is closed and has no commit to anchor a comment to`),
|
|
416
|
-
);
|
|
417
|
-
// Nothing was written: the refusal happens before the service is asked.
|
|
418
|
-
expect(calls.some((c) => c[0] === 'postComment')).toBe(false);
|
|
419
|
-
});
|
|
420
|
-
|
|
421
366
|
describe('delete_branch', () => {
|
|
422
367
|
it('is on both catalogs, takes name, dryRun and discardUnmerged, and is a write tool', async () => {
|
|
423
368
|
await start();
|
|
@@ -746,6 +691,37 @@ describe('registerWorkflowTools', () => {
|
|
|
746
691
|
]);
|
|
747
692
|
});
|
|
748
693
|
|
|
694
|
+
it('names each user owner by name, or by email when the name is empty — never a blank string', async () => {
|
|
695
|
+
const base = await start();
|
|
696
|
+
opened = detailOf([
|
|
697
|
+
{ path: 'Skills/Owned/SKILL.md', status: 'modified', additions: 1, deletions: 1, isBinary: false, sha: 'b5', rawUrl: 'r5' },
|
|
698
|
+
]);
|
|
699
|
+
// What the resolver hands back for owners `roles.yaml` lists by email:
|
|
700
|
+
// an empty name. QA saw `users: [""]` here while `mergeBlockedReasons`
|
|
701
|
+
// named qa-user2@example.com.
|
|
702
|
+
opened.approvals = [
|
|
703
|
+
{
|
|
704
|
+
path: 'Skills/Owned/SKILL.md',
|
|
705
|
+
eligibleApprovers: {
|
|
706
|
+
roles: [],
|
|
707
|
+
users: [
|
|
708
|
+
{ name: '', email: 'qa-user2@example.com' },
|
|
709
|
+
{ name: 'Razvan Radulescu', email: 'razvan.radulescu@bevel.software' },
|
|
710
|
+
{ name: ' ', email: 'qa-user3@example.com' },
|
|
711
|
+
{ name: '', email: '' },
|
|
712
|
+
],
|
|
713
|
+
},
|
|
714
|
+
approvedBy: [],
|
|
715
|
+
eligibilityResolved: true,
|
|
716
|
+
isApproved: false,
|
|
717
|
+
inMergeGate: true,
|
|
718
|
+
},
|
|
719
|
+
];
|
|
720
|
+
const [entry] = (await open(base)).approvals as { users: string[] }[];
|
|
721
|
+
expect(entry.users).toEqual(['qa-user2@example.com', 'Razvan Radulescu', 'qa-user3@example.com']);
|
|
722
|
+
expect(entry.users.every((u) => u.trim() !== '')).toBe(true);
|
|
723
|
+
});
|
|
724
|
+
|
|
749
725
|
it('surfaces the `change-request-conflicts` error as before', async () => {
|
|
750
726
|
const base = await start();
|
|
751
727
|
openFails = new ChangeRequestConflictsError('me/draft', 'target-company-state', ['KnowledgeBase/Clash.md']);
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
* and an agent reading `state` should not have to read a second field to
|
|
23
23
|
* learn whether the change landed.
|
|
24
24
|
* - **One name per path.** GitHub names a pull-request file's path `filename`
|
|
25
|
-
* and
|
|
26
|
-
*
|
|
25
|
+
* and elsewhere `path`; mirroring that inconsistency was the point while
|
|
26
|
+
* these tools wore GitHub's names, and is now just a trap. Every path
|
|
27
27
|
* in every answer is `path`, and a moved file's old name is `previousPath`,
|
|
28
28
|
* as `open_change_request` names them.
|
|
29
29
|
* - **A file's kind of change** is `change` — `added` / `changed` / `deleted`
|
|
@@ -37,9 +37,6 @@
|
|
|
37
37
|
* - **`stale`, not `DISMISSED`.** Hexis's word for an approval a later push
|
|
38
38
|
* invalidated is `isStale`; a review entry reports `stale: true` rather
|
|
39
39
|
* than borrowing GitHub's review state.
|
|
40
|
-
* - **A reply names its parent `parentId`**, which is the argument
|
|
41
|
-
* `post_change_request_comment` takes to create one. Reading a comment and
|
|
42
|
-
* replying to it use the same word for the same thing.
|
|
43
40
|
*
|
|
44
41
|
* The tools' INPUTS are untouched and stay GitHub's (`state`, `head`, `base`,
|
|
45
42
|
* `author`, `per_page`, `page`, `include`): the ticket pins them by name, and
|
|
@@ -53,27 +50,26 @@
|
|
|
53
50
|
* tools file does the IO and calls in here for every decision.
|
|
54
51
|
*/
|
|
55
52
|
|
|
56
|
-
import
|
|
57
|
-
ChangeRequest,
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
FileApproval,
|
|
53
|
+
import {
|
|
54
|
+
type ChangeRequest,
|
|
55
|
+
type ChangeRequestDetail,
|
|
56
|
+
type ChangeRequestState,
|
|
57
|
+
type ChangedFile,
|
|
58
|
+
type FileApproval,
|
|
63
59
|
} from '@bevel-software/platform-shared';
|
|
64
60
|
import { canonicalEmail, hashEmail } from '../../../shared/email-identity.js';
|
|
65
61
|
import { changeKindOf, type ChangeKind } from './change-request-summary.js';
|
|
66
62
|
|
|
67
|
-
/** A person on a change request
|
|
63
|
+
/** A person on a change request or a review. */
|
|
68
64
|
export interface CrUser {
|
|
69
65
|
/** Hexis's author login — `user-<first 12 of the email hash>`, no raw email. */
|
|
70
66
|
login: string;
|
|
71
67
|
/** Display name, when Hexis knows one. */
|
|
72
68
|
name?: string;
|
|
73
69
|
/**
|
|
74
|
-
* The person's address, for
|
|
75
|
-
*
|
|
76
|
-
*
|
|
70
|
+
* The person's address, for an approver — where the app's own
|
|
71
|
+
* change-request surfaces already show it, and what an agent needs to
|
|
72
|
+
* reach a reviewer. Never set on a change
|
|
77
73
|
* request's `author`, which carries a hash-derived login only.
|
|
78
74
|
*/
|
|
79
75
|
email?: string;
|
|
@@ -202,26 +198,6 @@ export interface CrReview {
|
|
|
202
198
|
withheldFiles: number;
|
|
203
199
|
}
|
|
204
200
|
|
|
205
|
-
export interface CrComment {
|
|
206
|
-
id: string;
|
|
207
|
-
author: CrUser;
|
|
208
|
-
body: string;
|
|
209
|
-
/** Set on a file-level or inline comment. */
|
|
210
|
-
path?: string;
|
|
211
|
-
/** Set on an inline comment. */
|
|
212
|
-
line?: number;
|
|
213
|
-
/**
|
|
214
|
-
* The comment this one replies to — the same `parentId`
|
|
215
|
-
* `post_change_request_comment` takes to post the reply.
|
|
216
|
-
*/
|
|
217
|
-
parentId?: string;
|
|
218
|
-
/** The head the comment was anchored to. */
|
|
219
|
-
headSha: string;
|
|
220
|
-
createdAt: string;
|
|
221
|
-
/** Present once edited. */
|
|
222
|
-
updatedAt?: string;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
201
|
/** One page of a list, and whether there is another. */
|
|
226
202
|
export interface CrPage<T> {
|
|
227
203
|
items: T[];
|
|
@@ -374,7 +350,7 @@ export function toCrSummary(
|
|
|
374
350
|
};
|
|
375
351
|
}
|
|
376
352
|
|
|
377
|
-
/** A detail: the row,
|
|
353
|
+
/** A detail: the row, its description, and the gate as this caller sees it. */
|
|
378
354
|
export function toCrDetail(
|
|
379
355
|
detail: ChangeRequestDetail,
|
|
380
356
|
counts: { readable: number; withheld: number },
|
|
@@ -388,7 +364,10 @@ export function toCrDetail(
|
|
|
388
364
|
// read as a sha nobody can look up.
|
|
389
365
|
...(detail.headSha ? { headSha: detail.headSha } : {}),
|
|
390
366
|
...(detail.baseSha ? { baseSha: detail.baseSha } : {}),
|
|
391
|
-
body
|
|
367
|
+
// The body is the description and nothing else — Hexis writes none of
|
|
368
|
+
// its own facts into it, so there is nothing to cut and no path in it
|
|
369
|
+
// that the author did not choose to write about.
|
|
370
|
+
body: detail.body,
|
|
392
371
|
mergeable: detail.mergeableInBevel,
|
|
393
372
|
mergeBlockedReasons: blockers.visible,
|
|
394
373
|
withheldMergeBlockedReasons: blockers.withheld,
|
|
@@ -396,50 +375,6 @@ export function toCrDetail(
|
|
|
396
375
|
};
|
|
397
376
|
}
|
|
398
377
|
|
|
399
|
-
/**
|
|
400
|
-
* The part of a change-request body its AUTHOR wrote.
|
|
401
|
-
*
|
|
402
|
-
* A Hexis body is part human and part machine: `openChangeRequest` appends an
|
|
403
|
-
* `## Affected owners` block — one line per changed path, naming that path and
|
|
404
|
-
* its eligible approvers — to whatever the author typed. Returning the body
|
|
405
|
-
* verbatim NAMED every file of the request, including the ones this caller may
|
|
406
|
-
* not read: Local Testing caught a GTM-team reader being handed
|
|
407
|
-
* `- \`KnowledgeBase/Engineering/…\` — Admin` out of a request whose file list
|
|
408
|
-
* had correctly withheld that very path.
|
|
409
|
-
*
|
|
410
|
-
* So the generated block goes, and NOTHING ELSE does. The first cut at this
|
|
411
|
-
* copied the app's dialog, which drops everything from the first `##` heading
|
|
412
|
-
* on; Razvan's review (2026-10-02) asked for the narrower cut, because an
|
|
413
|
-
* author who writes their description in sections loses it from that heading
|
|
414
|
-
* onwards and is never told. The generated block is appended LAST and begins
|
|
415
|
-
* with a line that is exactly `## Affected owners`, so cutting at the LAST such
|
|
416
|
-
* line removes the machinery and keeps every heading a person wrote. (An author
|
|
417
|
-
* who writes that exact heading themselves loses their text from there — the
|
|
418
|
-
* safe direction, and the only way this can err.)
|
|
419
|
-
*
|
|
420
|
-
* Hexis's OWN hidden markers go too — the `<!--hexis:…-->` / `<!--bevel:…-->`
|
|
421
|
-
* comments older bodies carry identity in — and no other comment: an HTML
|
|
422
|
-
* comment the author wrote is the author's prose, like the rest.
|
|
423
|
-
*
|
|
424
|
-
* Who must approve each file is NOT lost by this — it is what
|
|
425
|
-
* `list_change_request_files` answers under `requiredApprovers`, per file and
|
|
426
|
-
* access-filtered, which is where a caller should read it from anyway.
|
|
427
|
-
*
|
|
428
|
-
* Two things this deliberately does not do. It does not vary by caller: one
|
|
429
|
-
* body for everyone is a body nobody has to reason about. And it does not touch
|
|
430
|
-
* the author's own prose, which may mention any path they chose to write about —
|
|
431
|
-
* that is a person's sentence, shown to every viewer in the app, not Hexis
|
|
432
|
-
* naming a file it was asked to withhold.
|
|
433
|
-
*/
|
|
434
|
-
export function authorsDescription(body: string): string {
|
|
435
|
-
const lines = body.split('\n');
|
|
436
|
-
const generated = lines.lastIndexOf('## Affected owners');
|
|
437
|
-
return (generated === -1 ? lines : lines.slice(0, generated))
|
|
438
|
-
.join('\n')
|
|
439
|
-
.replace(/<!--\s*(?:hexis|bevel)[:/][\s\S]*?-->/g, '')
|
|
440
|
-
.trim();
|
|
441
|
-
}
|
|
442
|
-
|
|
443
378
|
/**
|
|
444
379
|
* What this caller may do with the request.
|
|
445
380
|
*
|
|
@@ -599,8 +534,7 @@ export function loginFor(email: string): string {
|
|
|
599
534
|
* readable approvals alone, for the same reason.
|
|
600
535
|
*
|
|
601
536
|
* Hexis records nothing about who DECLINED a request — a rejection closes it
|
|
602
|
-
* and stores no reviewer — so no review entry can report one.
|
|
603
|
-
* objection lives in a comment, which `list_change_request_comments` returns.
|
|
537
|
+
* and stores no reviewer — so no review entry can report one.
|
|
604
538
|
*/
|
|
605
539
|
export function toCrReviews(
|
|
606
540
|
approvals: FileApproval[],
|
|
@@ -641,72 +575,3 @@ export function toCrReviews(
|
|
|
641
575
|
withheldReviews: all.length - reviews.length,
|
|
642
576
|
};
|
|
643
577
|
}
|
|
644
|
-
|
|
645
|
-
/** A comment. Covers the file-anchored and the general ones — Hexis has one table. */
|
|
646
|
-
export function toCrComment(comment: ChangeRequestComment): CrComment {
|
|
647
|
-
return {
|
|
648
|
-
id: comment.id,
|
|
649
|
-
author: {
|
|
650
|
-
login: loginFor(comment.author.email),
|
|
651
|
-
name: comment.author.name,
|
|
652
|
-
email: comment.author.email,
|
|
653
|
-
},
|
|
654
|
-
body: comment.body,
|
|
655
|
-
...(comment.path ? { path: comment.path } : {}),
|
|
656
|
-
...(comment.line !== undefined ? { line: comment.line } : {}),
|
|
657
|
-
...(comment.parentId ? { parentId: comment.parentId } : {}),
|
|
658
|
-
headSha: comment.headSha,
|
|
659
|
-
createdAt: comment.createdAt,
|
|
660
|
-
...(comment.updatedAt ? { updatedAt: comment.updatedAt } : {}),
|
|
661
|
-
};
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
/**
|
|
665
|
-
* The comments the caller may read, replies included in the answer only when
|
|
666
|
-
* the comment they reply to is.
|
|
667
|
-
*
|
|
668
|
-
* A comment with no path is about the request as a whole, and a comment with
|
|
669
|
-
* one is as readable as that path is NAMEABLE here (`mayShow`, so a comment
|
|
670
|
-
* anchored to the new name of a file withheld for its old one goes with the
|
|
671
|
-
* file rather than announcing it). A REPLY is neither, quite: it carries no
|
|
672
|
-
* path of its own when it was posted without one, so judged on itself it is a
|
|
673
|
-
* general comment — and `post_change_request_comment` takes `parentId` without
|
|
674
|
-
* requiring `path`, so a reply to a comment on a withheld file was returned
|
|
675
|
-
* with its body and a `parentId` naming a comment the caller cannot see.
|
|
676
|
-
* Razvan's review (2026-10-02) asked for the rule the ticket states: a reply is
|
|
677
|
-
* shown only when its parent is.
|
|
678
|
-
*
|
|
679
|
-
* So a comment is visible when its OWN path may be shown (if it has one) AND
|
|
680
|
-
* its parent is visible, all the way up the chain. Both halves are needed:
|
|
681
|
-
* inheriting only would show a reply naming a withheld file under a readable
|
|
682
|
-
* parent, and checking only its own path would show it under a withheld one.
|
|
683
|
-
*
|
|
684
|
-
* Fail-closed at the edges. A `parentId` naming a comment that is not in this
|
|
685
|
-
* request's list (deleted, or from somewhere this answer cannot see) is not
|
|
686
|
-
* provably pathless, so the reply goes. A cycle — which the schema does not
|
|
687
|
-
* permit and a corrupted row could still hold — is unresolvable, so it goes
|
|
688
|
-
* too. Both are counted in the withheld total, never named.
|
|
689
|
-
*/
|
|
690
|
-
export function visibleComments<T extends { id: string; path?: string; parentId?: string }>(
|
|
691
|
-
comments: T[],
|
|
692
|
-
mayShow: (path: string) => boolean,
|
|
693
|
-
): { visible: T[]; withheld: number } {
|
|
694
|
-
const byId = new Map(comments.map((c) => [c.id, c]));
|
|
695
|
-
/** Memoised per id, so a long thread costs one walk and not one per reply. */
|
|
696
|
-
const verdicts = new Map<string, boolean>();
|
|
697
|
-
const mayShowComment = (comment: T, seen: Set<string>): boolean => {
|
|
698
|
-
const cached = verdicts.get(comment.id);
|
|
699
|
-
if (cached !== undefined) return cached;
|
|
700
|
-
if (seen.has(comment.id)) return false;
|
|
701
|
-
seen.add(comment.id);
|
|
702
|
-
let verdict = !comment.path || mayShow(comment.path);
|
|
703
|
-
if (verdict && comment.parentId) {
|
|
704
|
-
const parent = byId.get(comment.parentId);
|
|
705
|
-
verdict = parent !== undefined && mayShowComment(parent, seen);
|
|
706
|
-
}
|
|
707
|
-
verdicts.set(comment.id, verdict);
|
|
708
|
-
return verdict;
|
|
709
|
-
};
|
|
710
|
-
const visible = comments.filter((c) => mayShowComment(c, new Set()));
|
|
711
|
-
return { visible, withheld: comments.length - visible.length };
|
|
712
|
-
}
|