@capybara-hq/kernel 0.1.0-rc.0 → 0.1.0-rc.2
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/bootstrap.json +10 -6
- package/dist/admin/admin.controller.d.ts +17 -17
- package/dist/admin/admin.controller.js +43 -26
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/extensions.controller.d.ts +14 -14
- package/dist/admin/extensions.controller.js +30 -17
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +8 -8
- package/dist/admin/setup.controller.js +27 -25
- package/dist/admin/setup.service.d.ts +19 -27
- package/dist/admin/setup.service.js +61 -61
- package/dist/agents/agent-lookup.d.ts +53 -0
- package/dist/agents/agent-lookup.js +179 -0
- package/dist/agents/agents.controller.d.ts +1 -1
- package/dist/agents/agents.controller.js +14 -8
- package/dist/agents/agents.module.d.ts +7 -0
- package/dist/agents/agents.module.js +41 -0
- package/dist/agents/agents.service.d.ts +39 -58
- package/dist/agents/agents.service.js +261 -329
- package/dist/agents/definition.d.ts +8 -0
- package/dist/agents/definition.js +8 -0
- package/dist/agents/models.controller.d.ts +1 -1
- package/dist/agents/models.controller.js +2 -2
- package/dist/agents/templates.controller.d.ts +1 -1
- package/dist/agents/templates.controller.js +2 -2
- package/dist/agents/templates.d.ts +6 -8
- package/dist/agents/templates.js +20 -4
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -0
- package/dist/catalog/admin-catalog.controller.d.ts +3 -3
- package/dist/catalog/admin-catalog.controller.js +27 -13
- package/dist/catalog/catalog-content.d.ts +185 -0
- package/dist/catalog/catalog-content.js +323 -0
- package/dist/catalog/catalog-items.d.ts +186 -0
- package/dist/catalog/catalog-items.js +410 -0
- package/dist/catalog/catalog.module.d.ts +14 -0
- package/dist/catalog/catalog.module.js +71 -0
- package/dist/catalog/catalog.service.d.ts +34 -188
- package/dist/catalog/catalog.service.js +155 -489
- package/dist/catalog/cli.d.ts +3 -2
- package/dist/catalog/cli.js +13 -31
- package/dist/catalog/job-ids.d.ts +15 -0
- package/dist/catalog/job-ids.js +15 -0
- package/dist/catalog/jobs.d.ts +27 -0
- package/dist/catalog/jobs.js +70 -0
- package/dist/catalog/locks.d.ts +24 -0
- package/dist/catalog/locks.js +63 -0
- package/dist/catalog/marketplaces.controller.d.ts +4 -4
- package/dist/catalog/marketplaces.controller.js +22 -11
- package/dist/catalog/marketplaces.service.d.ts +30 -13
- package/dist/catalog/marketplaces.service.js +330 -256
- package/dist/catalog/org-catalog.controller.d.ts +4 -3
- package/dist/catalog/org-catalog.controller.js +29 -14
- package/dist/catalog/org-catalog.service.d.ts +32 -198
- package/dist/catalog/org-catalog.service.js +159 -400
- package/dist/catalog/plugin-import.d.ts +73 -34
- package/dist/catalog/plugin-import.js +356 -217
- package/dist/catalog/plugin-install.d.ts +83 -41
- package/dist/catalog/plugin-install.js +421 -269
- package/dist/catalog/plugin-upgrade.d.ts +59 -4
- package/dist/catalog/plugin-upgrade.js +407 -282
- package/dist/catalog/requests.service.d.ts +27 -15
- package/dist/catalog/requests.service.js +201 -145
- package/dist/catalog/upgrade-targets.d.ts +4 -7
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +1 -1
- package/dist/channels/cards.d.ts +2 -2
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +128 -0
- package/dist/channels/connections.controller.d.ts +1 -1
- package/dist/channels/connections.controller.js +11 -6
- package/dist/channels/connections.service.d.ts +43 -21
- package/dist/channels/connections.service.js +236 -131
- package/dist/channels/inbound.d.ts +34 -38
- package/dist/channels/inbound.js +107 -41
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +60 -82
- package/dist/channels/outbound.js +165 -193
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +29 -8
- package/dist/channels/threads.js +71 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +16 -1
- package/dist/config/schema.js +54 -7
- package/dist/conversations/access.d.ts +29 -0
- package/dist/conversations/access.js +86 -0
- package/dist/conversations/artifacts.d.ts +10 -10
- package/dist/conversations/artifacts.js +35 -9
- package/dist/conversations/attachments.controller.d.ts +1 -1
- package/dist/conversations/attachments.controller.js +8 -6
- package/dist/conversations/attachments.module.d.ts +7 -0
- package/dist/conversations/attachments.module.js +25 -0
- package/dist/conversations/attachments.service.d.ts +30 -22
- package/dist/conversations/attachments.service.js +119 -46
- package/dist/conversations/conversations.controller.d.ts +8 -7
- package/dist/conversations/conversations.controller.js +59 -29
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +69 -0
- package/dist/conversations/conversations.service.d.ts +40 -38
- package/dist/conversations/conversations.service.js +130 -140
- package/dist/conversations/event-log.d.ts +28 -18
- package/dist/conversations/event-log.js +74 -27
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +48 -56
- package/dist/conversations/queue.js +13 -289
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +343 -0
- package/dist/conversations/sandbox-status.d.ts +13 -10
- package/dist/conversations/sandbox-status.js +36 -8
- package/dist/conversations/titles.d.ts +71 -24
- package/dist/conversations/titles.js +159 -62
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +6 -0
- package/dist/ctx/create-ctx.js +7 -9
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/queue.js +3 -2
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +2 -2
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +1 -0
- package/dist/errors.d.ts +2 -0
- package/dist/errors.js +2 -0
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/run-replay.d.ts +56 -8
- package/dist/evals/run-replay.js +140 -80
- package/dist/evals/runs.controller.d.ts +1 -1
- package/dist/evals/runs.controller.js +17 -8
- package/dist/evals/runs.service.d.ts +23 -45
- package/dist/evals/runs.service.js +245 -234
- package/dist/evals/sets.controller.d.ts +1 -1
- package/dist/evals/sets.controller.js +17 -8
- package/dist/evals/sets.service.d.ts +22 -6
- package/dist/evals/sets.service.js +248 -194
- package/dist/evals/snapshot.d.ts +2 -2
- package/dist/evals/step-replay.d.ts +2 -2
- package/dist/evals/step-replay.js +1 -1
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.service.d.ts +5 -4
- package/dist/evals/trajectory.service.js +30 -7
- package/dist/evals/worker.d.ts +44 -27
- package/dist/evals/worker.js +220 -120
- package/dist/extensions/admin-ops.d.ts +61 -33
- package/dist/extensions/admin-ops.js +248 -154
- package/dist/extensions/admin-view.d.ts +38 -27
- package/dist/extensions/admin-view.js +126 -55
- package/dist/extensions/approvals.d.ts +12 -8
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +111 -45
- package/dist/extensions/bootstrap.d.ts +96 -42
- package/dist/extensions/bootstrap.js +303 -155
- package/dist/extensions/cli.d.ts +20 -10
- package/dist/extensions/cli.js +41 -96
- package/dist/extensions/config-issues.d.ts +7 -0
- package/dist/extensions/config-issues.js +31 -0
- package/dist/extensions/deployment-config-store.d.ts +49 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +58 -67
- package/dist/extensions/deployment-config.js +202 -230
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +77 -0
- package/dist/extensions/hooks.d.ts +3 -2
- package/dist/extensions/hooks.js +1 -1
- package/dist/extensions/host.d.ts +72 -68
- package/dist/extensions/host.js +191 -152
- package/dist/extensions/installs.d.ts +49 -16
- package/dist/extensions/installs.js +128 -32
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +33 -0
- package/dist/extensions/locks.js +86 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.controller.d.ts +1 -1
- package/dist/extensions/org-config.controller.js +8 -5
- package/dist/extensions/org-config.d.ts +48 -46
- package/dist/extensions/org-config.js +284 -226
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +89 -4
- package/dist/extensions/sources.d.ts +12 -8
- package/dist/extensions/sources.js +34 -13
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +17 -9
- package/dist/files/previewers.d.ts +13 -18
- package/dist/files/previewers.js +83 -36
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +47 -355
- package/dist/http/app.d.ts +11 -15
- package/dist/http/app.js +52 -47
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/identity/accounts.d.ts +82 -29
- package/dist/identity/accounts.js +294 -175
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +7 -4
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +31 -25
- package/dist/identity/auth.guard.d.ts +3 -3
- package/dist/identity/auth.guard.js +6 -4
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/enterprise-admin.d.ts +18 -12
- package/dist/identity/enterprise-admin.js +67 -13
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +56 -0
- package/dist/identity/me.controller.d.ts +16 -15
- package/dist/identity/me.controller.js +37 -31
- package/dist/identity/sessions.d.ts +12 -10
- package/dist/identity/sessions.js +74 -42
- package/dist/identity/settings.d.ts +20 -14
- package/dist/identity/settings.js +85 -57
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/inbox/inbox.module.d.ts +3 -0
- package/dist/inbox/inbox.module.js +22 -0
- package/dist/inbox/inbox.service.d.ts +7 -9
- package/dist/inbox/inbox.service.js +32 -11
- package/dist/index.d.ts +19 -12
- package/dist/index.js +13 -8
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +165 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +126 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +90 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +96 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +86 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +16 -0
- package/dist/infra/logging/logging.module.js +34 -0
- package/dist/infra/queue/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +7 -0
- package/dist/infra/queue/redis-connection.js +18 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +87 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +31 -0
- package/dist/infra/throttler/named-throttlers.js +119 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +15 -0
- package/dist/infra/tokens.js +15 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -241
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +136 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +451 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-config.d.ts +9 -0
- package/dist/log-config.js +27 -0
- package/dist/log-context.d.ts +34 -0
- package/dist/log-context.js +44 -0
- package/dist/log-loki.d.ts +34 -0
- package/dist/log-loki.js +145 -0
- package/dist/log.d.ts +41 -10
- package/dist/log.js +91 -17
- package/dist/models/models.module.d.ts +3 -0
- package/dist/models/models.module.js +24 -0
- package/dist/models/prices.d.ts +8 -2
- package/dist/models/prices.js +65 -37
- package/dist/models/purposes.controller.d.ts +1 -1
- package/dist/models/purposes.controller.js +5 -6
- package/dist/models/purposes.d.ts +35 -13
- package/dist/models/purposes.js +101 -51
- package/dist/net/public-address.js +3 -2
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +61 -31
- package/dist/orgs/directory-sync.js +212 -125
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +54 -57
- package/dist/orgs/offboarding.js +161 -71
- package/dist/orgs/org-lock.d.ts +28 -19
- package/dist/orgs/org-lock.js +81 -35
- package/dist/orgs/org.guard.d.ts +1 -1
- package/dist/orgs/org.guard.js +2 -2
- package/dist/orgs/orgs.controller.d.ts +13 -13
- package/dist/orgs/orgs.controller.js +29 -17
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +68 -0
- package/dist/orgs/orgs.service.d.ts +30 -19
- package/dist/orgs/orgs.service.js +139 -86
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +14 -8
- package/dist/orgs/settings.service.js +75 -46
- package/dist/overrides.d.ts +56 -0
- package/dist/overrides.js +30 -0
- package/dist/roles/gateway-role.d.ts +43 -0
- package/dist/roles/gateway-role.js +98 -0
- package/dist/roles/gateway.module.d.ts +8 -0
- package/dist/roles/gateway.module.js +28 -0
- package/dist/roles/worker-role.d.ts +63 -0
- package/dist/roles/worker-role.js +144 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +90 -0
- package/dist/runtime/abort.js +19 -2
- package/dist/runtime/checkpointer.d.ts +8 -3
- package/dist/runtime/checkpointer.js +87 -55
- package/dist/runtime/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +3 -3
- package/dist/runtime/hook-calls.js +1 -6
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.js +1 -1
- package/dist/runtime/loop.d.ts +7 -0
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +45 -74
- package/dist/runtime/maintenance.js +139 -136
- package/dist/runtime/model-call.d.ts +7 -4
- package/dist/runtime/model-call.js +24 -57
- package/dist/runtime/providers.d.ts +17 -6
- package/dist/runtime/providers.js +66 -25
- package/dist/runtime/quota.d.ts +17 -3
- package/dist/runtime/quota.js +27 -2
- package/dist/runtime/retired-schedulers.d.ts +7 -0
- package/dist/runtime/retired-schedulers.js +31 -0
- package/dist/runtime/run-control.d.ts +33 -0
- package/dist/runtime/run-control.js +77 -0
- package/dist/runtime/run-finish.d.ts +26 -17
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +48 -0
- package/dist/runtime/run-jobs.js +95 -0
- package/dist/runtime/run-processors.d.ts +60 -0
- package/dist/runtime/run-processors.js +185 -0
- package/dist/runtime/run-queue.d.ts +32 -57
- package/dist/runtime/run-queue.js +291 -295
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +121 -75
- package/dist/runtime/run-worker.js +340 -225
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +112 -0
- package/dist/runtime/step-log.d.ts +40 -0
- package/dist/runtime/step-log.js +94 -0
- package/dist/runtime/stream.controller.d.ts +5 -8
- package/dist/runtime/stream.controller.js +14 -12
- package/dist/runtime/stream.d.ts +24 -6
- package/dist/runtime/stream.js +78 -7
- package/dist/runtime/subagents/child.d.ts +3 -44
- package/dist/runtime/subagents/child.js +0 -79
- package/dist/runtime/subagents/definition.d.ts +4 -4
- package/dist/runtime/subagents/definition.js +2 -2
- package/dist/runtime/subagents/dispatch.d.ts +87 -6
- package/dist/runtime/subagents/dispatch.js +135 -140
- package/dist/runtime/subagents/limits.d.ts +9 -4
- package/dist/runtime/subagents/limits.js +4 -2
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +1 -1
- package/dist/runtime/subagents/progress.d.ts +2 -2
- package/dist/runtime/subagents/roster.d.ts +3 -3
- package/dist/runtime/subagents/roster.js +1 -1
- package/dist/runtime/subagents/skill-fork.d.ts +6 -7
- package/dist/runtime/subagents/skill-fork.js +16 -5
- package/dist/runtime/subagents/subagents.service.d.ts +40 -0
- package/dist/runtime/subagents/subagents.service.js +101 -0
- package/dist/runtime/usage-report.d.ts +94 -52
- package/dist/runtime/usage-report.js +200 -99
- package/dist/runtime/waits.d.ts +125 -57
- package/dist/runtime/waits.js +431 -208
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +41 -0
- package/dist/sandbox/jobs.js +113 -0
- package/dist/sandbox/leases.d.ts +39 -31
- package/dist/sandbox/leases.js +117 -257
- package/dist/sandbox/providers.d.ts +19 -0
- package/dist/sandbox/providers.js +38 -0
- package/dist/sandbox/sandbox.module.d.ts +8 -0
- package/dist/sandbox/sandbox.module.js +30 -0
- package/dist/sandbox/sandbox.service.d.ts +24 -29
- package/dist/sandbox/sandbox.service.js +106 -75
- package/dist/skills/catalog.d.ts +33 -20
- package/dist/skills/catalog.js +96 -53
- package/dist/skills/changes.controller.d.ts +4 -4
- package/dist/skills/changes.controller.js +15 -9
- package/dist/skills/changes.service.d.ts +28 -18
- package/dist/skills/changes.service.js +421 -364
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +8 -5
- package/dist/skills/invoke.d.ts +16 -15
- package/dist/skills/invoke.js +48 -17
- package/dist/skills/skills.controller.d.ts +1 -1
- package/dist/skills/skills.controller.js +11 -6
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +30 -0
- package/dist/skills/skills.service.d.ts +47 -30
- package/dist/skills/skills.service.js +221 -158
- package/dist/storage/job-ids.d.ts +6 -0
- package/dist/storage/job-ids.js +6 -0
- package/dist/storage/purge.d.ts +22 -7
- package/dist/storage/purge.js +55 -3
- package/dist/storage/storage.module.d.ts +6 -0
- package/dist/storage/storage.module.js +23 -0
- package/dist/storage/storage.service.d.ts +18 -4
- package/dist/storage/storage.service.js +44 -3
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +12 -8
- package/dist/tools/approvals.service.d.ts +27 -25
- package/dist/tools/approvals.service.js +324 -258
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtins/ask-user.d.ts +2 -2
- package/dist/tools/builtins/ask-user.js +1 -1
- package/dist/tools/builtins/builtin-tools.d.ts +21 -0
- package/dist/tools/builtins/builtin-tools.js +80 -0
- package/dist/tools/builtins/read-tool-output.d.ts +2 -2
- package/dist/tools/builtins/read-tool-output.js +1 -1
- package/dist/tools/builtins/sandbox/bash.js +2 -2
- package/dist/tools/builtins/sandbox/common.d.ts +7 -4
- package/dist/tools/builtins/sandbox/common.js +5 -3
- package/dist/tools/builtins/sandbox/deliver.js +2 -2
- package/dist/tools/builtins/sandbox/edit.js +1 -1
- package/dist/tools/builtins/sandbox/glob.js +2 -2
- package/dist/tools/builtins/sandbox/grep.js +2 -2
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/write.js +1 -1
- package/dist/tools/builtins/skill-load.d.ts +3 -3
- package/dist/tools/builtins/skill-load.js +1 -1
- package/dist/tools/canonical-json.d.ts +6 -0
- package/dist/tools/canonical-json.js +16 -0
- package/dist/tools/connector-content.controller.d.ts +1 -1
- package/dist/tools/connector-content.controller.js +11 -6
- package/dist/tools/connector-content.d.ts +12 -15
- package/dist/tools/connector-content.js +53 -18
- package/dist/tools/connectors.controller.d.ts +1 -1
- package/dist/tools/connectors.controller.js +21 -10
- package/dist/tools/connectors.service.d.ts +31 -13
- package/dist/tools/connectors.service.js +434 -344
- package/dist/tools/credentials.d.ts +17 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +111 -79
- package/dist/tools/info.d.ts +12 -9
- package/dist/tools/info.js +33 -7
- package/dist/tools/job-ids.d.ts +13 -0
- package/dist/tools/job-ids.js +15 -0
- package/dist/tools/jobs.d.ts +24 -0
- package/dist/tools/jobs.js +69 -0
- package/dist/tools/oauth/flow-paths.d.ts +16 -0
- package/dist/tools/oauth/flow-paths.js +38 -0
- package/dist/tools/oauth/flow.d.ts +30 -30
- package/dist/tools/oauth/flow.js +109 -81
- package/dist/tools/oauth/oauth.controller.d.ts +3 -3
- package/dist/tools/oauth/oauth.controller.js +12 -9
- package/dist/tools/oauth/tokens.d.ts +11 -3
- package/dist/tools/oauth/tokens.js +15 -14
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +47 -3
- package/dist/tools/pipeline.d.ts +62 -46
- package/dist/tools/pipeline.js +145 -64
- package/dist/tools/policy.d.ts +2 -2
- package/dist/tools/questions.controller.d.ts +1 -1
- package/dist/tools/questions.controller.js +8 -5
- package/dist/tools/questions.service.d.ts +25 -24
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +30 -20
- package/dist/tools/registry.js +73 -37
- package/dist/tools/specs.d.ts +5 -4
- package/dist/tools/specs.js +3 -1
- package/dist/tools/tools.module.d.ts +10 -0
- package/dist/tools/tools.module.js +91 -0
- package/dist/ui/call-extension.d.ts +16 -0
- package/dist/ui/call-extension.js +38 -0
- package/dist/ui/embed-token.d.ts +9 -5
- package/dist/ui/embed-token.js +34 -6
- package/dist/ui/ui-stream.d.ts +22 -17
- package/dist/ui/ui-stream.js +72 -12
- package/dist/ui/ui.module.d.ts +7 -0
- package/dist/ui/ui.module.js +28 -0
- package/dist/ui/views.controller.d.ts +14 -12
- package/dist/ui/views.controller.js +32 -25
- package/dist/ui/views.d.ts +9 -57
- package/dist/ui/views.js +43 -45
- package/package.json +11 -2
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
- /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
package/dist/evals/worker.js
CHANGED
|
@@ -1,23 +1,42 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
1
10
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { hostname } from "node:os";
|
|
3
11
|
import { isModelError, isRetryableKind } from "@capybara-hq/plugin-sdk";
|
|
4
|
-
import {
|
|
12
|
+
import { Inject, Injectable, Optional } from "@nestjs/common";
|
|
13
|
+
import { DelayedError } from "bullmq";
|
|
5
14
|
import { sql } from "kysely";
|
|
6
15
|
import { loadTemplates } from "../agents/templates.js";
|
|
16
|
+
import { EventLog } from "../conversations/event-log.js";
|
|
7
17
|
import { ApiError } from "../errors.js";
|
|
8
18
|
import { ExtensionUnloadedError } from "../extensions/inflight.js";
|
|
9
|
-
import {
|
|
19
|
+
import { waitWithin } from "../infra/close-within.js";
|
|
20
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
21
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
22
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
23
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
24
|
+
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
25
|
+
import { ModelPurposesService, PurposeAttemptError } from "../models/purposes.js";
|
|
26
|
+
import { KyselyCheckpointSaver } from "../runtime/checkpointer.js";
|
|
10
27
|
import { MediaUnavailableError, RunError } from "../runtime/model-call.js";
|
|
11
|
-
import { ProviderListError } from "../runtime/providers.js";
|
|
12
|
-
import { ORG_QUOTA_LEASE_MS } from "../runtime/quota.js";
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
28
|
+
import { ProviderListError, ProviderRegistry } from "../runtime/providers.js";
|
|
29
|
+
import { EVAL_QUOTA, ORG_QUOTA_LEASE_MS } from "../runtime/quota.js";
|
|
30
|
+
import { RunFinish } from "../runtime/run-finish.js";
|
|
31
|
+
import { AgentLoops, RunSteps } from "../runtime/run-steps.js";
|
|
32
|
+
import { consumeTokens, EvalBudget, recordOutcome, runActive, skipPendingJudges, usageTokens, } from "./budget.js";
|
|
15
33
|
import { replyParts, structuralDiff } from "./diff.js";
|
|
34
|
+
import { evalJobId } from "./jobs.js";
|
|
16
35
|
import { JUDGE_PROVIDER_UNAVAILABLE, judge } from "./judge.js";
|
|
17
36
|
import { userRequestOf } from "./plan.js";
|
|
18
37
|
import { subagentCaseChanged, subagentStartedOf } from "./reconstruct.js";
|
|
19
|
-
import { deleteEvalConversation, ReplayClaimLost, replayRun, runBaseline, } from "./run-replay.js";
|
|
20
|
-
import { caseBase,
|
|
38
|
+
import { deleteEvalConversation, EvalReplaySeeder, ReplayClaimLost, replayRun, runBaseline, } from "./run-replay.js";
|
|
39
|
+
import { caseBase, versionDefinition } from "./runs.service.js";
|
|
21
40
|
import { readSnapshot, replayableCalls, toEvents } from "./snapshot.js";
|
|
22
41
|
import { ReplayAttemptError, replayStep, resolveCandidate, } from "./step-replay.js";
|
|
23
42
|
/**
|
|
@@ -41,7 +60,13 @@ export const EVAL_MAX_RETRIES = 3;
|
|
|
41
60
|
/** 第 n 次重试前的等待(毫秒);供应商给了 `retryAfterMs` 时取它(不超过 30 秒)。 */
|
|
42
61
|
const RETRY_DELAYS_MS = [1000, 2000, 4000];
|
|
43
62
|
const MAX_RETRY_AFTER_MS = 30_000;
|
|
44
|
-
|
|
63
|
+
/** The eval worker's BullMQ stalled-job limit (the processor's `maxStalledCount`). */
|
|
64
|
+
export const EVAL_MAX_STALLED_COUNT = 3;
|
|
65
|
+
/**
|
|
66
|
+
* Test hooks of the full-run replay and the judge (`EvalReplayHooks`): a provider override in tests
|
|
67
|
+
* (`overrides: [{ provide: EVAL_REPLAY_HOOKS, useValue }]`), absent in production.
|
|
68
|
+
*/
|
|
69
|
+
export const EVAL_REPLAY_HOOKS = Symbol("EVAL_REPLAY_HOOKS");
|
|
45
70
|
/** 供应商插件在调用途中被撤销(错误本身或其 cause)。 */
|
|
46
71
|
const isPluginUnloaded = (err) => err instanceof ExtensionUnloadedError ||
|
|
47
72
|
(err instanceof Error && err.cause instanceof ExtensionUnloadedError);
|
|
@@ -134,42 +159,90 @@ function judgeInputOf(s, mode, modelCallSeq, baseline, candidate, rubric) {
|
|
|
134
159
|
rubric,
|
|
135
160
|
};
|
|
136
161
|
}
|
|
137
|
-
|
|
138
|
-
|
|
162
|
+
let EvalWorker = class EvalWorker {
|
|
163
|
+
txHost;
|
|
139
164
|
worker;
|
|
140
|
-
conn;
|
|
141
165
|
/** 本进程在执行的任务:停机时中止,任务回到队列。 */
|
|
142
166
|
active = new Set();
|
|
143
167
|
closing = false;
|
|
144
|
-
|
|
145
|
-
|
|
168
|
+
d;
|
|
169
|
+
constructor(kdb, quota, config, log, purposes, registry, steps, loops, eventLog, runFinish, checkpoints, seeder, budget, txHost, hooks) {
|
|
170
|
+
this.txHost = txHost;
|
|
171
|
+
const stepDeps = steps.deps;
|
|
172
|
+
this.d = {
|
|
173
|
+
get db() {
|
|
174
|
+
return kdb.db;
|
|
175
|
+
},
|
|
176
|
+
quota,
|
|
177
|
+
config,
|
|
178
|
+
log,
|
|
179
|
+
purposes,
|
|
180
|
+
budget,
|
|
181
|
+
// 媒体按快照自己的组织与对话、经组织范围的附件接口取(C3)
|
|
182
|
+
replay: {
|
|
183
|
+
registry,
|
|
184
|
+
config,
|
|
185
|
+
...(stepDeps.media !== undefined && { media: stepDeps.media }),
|
|
186
|
+
},
|
|
187
|
+
// 整轮回放(C6):同一个 loop 工厂(同一 LangGraphLoop),只换工具管线(RecordedToolPipeline,
|
|
188
|
+
// 从不执行工具)、计费的模型注册表与按原对话取附件的来源
|
|
189
|
+
runReplay: {
|
|
190
|
+
get db() {
|
|
191
|
+
return kdb.db;
|
|
192
|
+
},
|
|
193
|
+
eventLog,
|
|
194
|
+
seeder,
|
|
195
|
+
runFinish,
|
|
196
|
+
config,
|
|
197
|
+
log,
|
|
198
|
+
registry,
|
|
199
|
+
...(stepDeps.media !== undefined && { media: stepDeps.media }),
|
|
200
|
+
checkpoints,
|
|
201
|
+
// explicitly without plugin hooks: eval replays never fire them (P-18); nor do they
|
|
202
|
+
// publish sub-agent progress on a live conversation's stream
|
|
203
|
+
loop: (d) => {
|
|
204
|
+
// nor dispatch fork invocations: run-replay passes the recorded reports instead
|
|
205
|
+
const { db: _snapshot, hooks: _noHooks, subagentProgress: _noProgress, skillForks: _noForks, ...replayDeps } = stepDeps;
|
|
206
|
+
// the object rest above copied `db` as a value: read it through the step deps' getter
|
|
207
|
+
// instead, so the loop always resolves the context-aware handle
|
|
208
|
+
return loops.create({
|
|
209
|
+
...replayDeps,
|
|
210
|
+
get db() {
|
|
211
|
+
return stepDeps.db;
|
|
212
|
+
},
|
|
213
|
+
...d,
|
|
214
|
+
});
|
|
215
|
+
},
|
|
216
|
+
...(hooks !== undefined && { hooks }),
|
|
217
|
+
},
|
|
218
|
+
};
|
|
146
219
|
}
|
|
147
|
-
|
|
148
|
-
|
|
220
|
+
/**
|
|
221
|
+
* Starts consuming with the `cap-kernel-evals` processor's worker (worker role, after the
|
|
222
|
+
* extensions loaded; built with `autorun: false`).
|
|
223
|
+
*/
|
|
224
|
+
start(worker) {
|
|
225
|
+
if (this.worker || this.closing)
|
|
149
226
|
return;
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
this.d.log.error("eval job failed", { jobId: job.id, err });
|
|
170
|
-
// 任务不会再执行:该用例剩下的结果记 error,运行不因此卡住
|
|
171
|
-
void this.failCase(job.data, err).catch((e) => this.d.log.error("cannot mark failed eval job", { jobId: job.id, err: e }));
|
|
172
|
-
});
|
|
227
|
+
this.worker = worker;
|
|
228
|
+
void worker.run().catch((err) => this.onError(err));
|
|
229
|
+
}
|
|
230
|
+
/** The worker's `error` event. */
|
|
231
|
+
onError(err) {
|
|
232
|
+
this.d.log.error("eval worker error", { err });
|
|
233
|
+
}
|
|
234
|
+
/** The worker's `failed` event. */
|
|
235
|
+
onFailed(job, err) {
|
|
236
|
+
if (!job)
|
|
237
|
+
return;
|
|
238
|
+
// 处理函数外的暂时故障(PG / Redis)由 BullMQ 按 attempts 指数退避重试;用尽(或 stalled 超限)才算失败
|
|
239
|
+
if (job.attemptsMade < (job.opts.attempts ?? 1) && !/stalled/i.test(err.message)) {
|
|
240
|
+
this.d.log.warn("eval job attempt failed; retrying", { jobId: job.id, err });
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
this.d.log.error("eval job failed", { jobId: job.id, err });
|
|
244
|
+
// 任务不会再执行:该用例剩下的结果记 error,运行不因此卡住
|
|
245
|
+
void this.failCase(job.data, err).catch((e) => this.d.log.error("cannot mark failed eval job", { jobId: job.id, err: e }));
|
|
173
246
|
}
|
|
174
247
|
/** 停止领取;中止本进程在执行的任务(回到队列由别的 worker 接着做),在 budgetMs 内等它们退出。 */
|
|
175
248
|
async close(budgetMs) {
|
|
@@ -181,48 +254,36 @@ export class EvalWorker {
|
|
|
181
254
|
await worker.pause(true).catch(() => { });
|
|
182
255
|
for (const ac of this.active)
|
|
183
256
|
ac.abort();
|
|
184
|
-
|
|
185
|
-
const done = await Promise.race([
|
|
186
|
-
worker.close().then(() => true),
|
|
187
|
-
new Promise((resolve) => {
|
|
188
|
-
timer = setTimeout(() => resolve(false), Math.max(0, budgetMs));
|
|
189
|
-
timer.unref();
|
|
190
|
-
}),
|
|
191
|
-
]);
|
|
192
|
-
clearTimeout(timer);
|
|
257
|
+
const done = await waitWithin(worker.close(), budgetMs);
|
|
193
258
|
if (!done)
|
|
194
259
|
await worker.close(true).catch(() => { });
|
|
195
|
-
this.conn?.disconnect();
|
|
196
260
|
}
|
|
261
|
+
/** One job: replays one case (the processor runs it in `runJob`). */
|
|
197
262
|
async process(job, token) {
|
|
198
263
|
const data = job.data;
|
|
199
264
|
const { runId, orgId } = data;
|
|
200
265
|
const jobId = job.id ?? evalJobId(runId, data.caseId);
|
|
201
266
|
if (!(await runActive(this.d.db, runId))) {
|
|
202
267
|
await this.skipCase(data);
|
|
203
|
-
await
|
|
268
|
+
await this.d.budget.recountCases(runId);
|
|
204
269
|
return;
|
|
205
270
|
}
|
|
206
|
-
const limit = this.d.config().evals.orgConcurrency;
|
|
271
|
+
const limit = this.d.config.get().evals.orgConcurrency;
|
|
207
272
|
// 每次执行一个新的认领号:失去认领(stalled 后被别的 worker 接手)的旧执行写不进结果(用量照样计入)。
|
|
208
273
|
// 配额成员 = 任务 id + 认领号:旧执行退出时只移除自己的名额,不会把接手执行的名额一起移掉
|
|
209
274
|
const claim = randomUUID();
|
|
210
275
|
const member = `${jobId}-${claim}`;
|
|
211
|
-
|
|
276
|
+
// the slot is renewed every lease / 3 by the lock service's watchdog until released
|
|
277
|
+
const slot = await this.d.quota.enter(orgId, member, limit, ORG_QUOTA_LEASE_MS);
|
|
278
|
+
if (!slot) {
|
|
212
279
|
// 配额满:固定 5 秒后再试,不按事件唤醒。评测是后台批任务,几秒空等可以接受,换来没有跨副本通知
|
|
213
|
-
await job.moveToDelayed(Date.now() +
|
|
280
|
+
await job.moveToDelayed(Date.now() + EVAL_QUOTA_RETRY_MS, token);
|
|
214
281
|
throw new DelayedError();
|
|
215
282
|
}
|
|
216
283
|
const ac = new AbortController();
|
|
217
284
|
this.active.add(ac);
|
|
218
285
|
if (this.closing)
|
|
219
286
|
ac.abort();
|
|
220
|
-
const renew = setInterval(() => {
|
|
221
|
-
this.d.quota
|
|
222
|
-
.renew(orgId, member, ORG_QUOTA_LEASE_MS)
|
|
223
|
-
.catch((err) => this.d.log.warn("eval quota renew failed", { jobId, err }));
|
|
224
|
-
}, ORG_QUOTA_LEASE_MS / 3);
|
|
225
|
-
renew.unref();
|
|
226
287
|
try {
|
|
227
288
|
await this.d.db
|
|
228
289
|
.updateTable("eval_runs")
|
|
@@ -241,13 +302,12 @@ export class EvalWorker {
|
|
|
241
302
|
throw err;
|
|
242
303
|
}
|
|
243
304
|
finally {
|
|
244
|
-
clearInterval(renew);
|
|
245
305
|
this.active.delete(ac);
|
|
246
|
-
await
|
|
247
|
-
.
|
|
306
|
+
await slot
|
|
307
|
+
.release()
|
|
248
308
|
.catch((err) => this.d.log.warn("eval quota leave failed", { jobId, err }));
|
|
249
309
|
}
|
|
250
|
-
await
|
|
310
|
+
await this.d.budget.recountCases(runId);
|
|
251
311
|
}
|
|
252
312
|
/** 单步回放每次请求前:运行仍在执行({@link runActive})且结果仍由本次执行认领。 */
|
|
253
313
|
async mayRequest(runId, resultId, claim) {
|
|
@@ -277,7 +337,7 @@ export class EvalWorker {
|
|
|
277
337
|
.executeTakeFirst();
|
|
278
338
|
if (Number(w.numUpdatedRows) === 0)
|
|
279
339
|
return true;
|
|
280
|
-
const { tripped } = await recordOutcome(db, data.runId, false, this.d.config().evals.maxConsecutiveErrors);
|
|
340
|
+
const { tripped } = await recordOutcome(db, data.runId, false, this.d.config.get().evals.maxConsecutiveErrors);
|
|
281
341
|
if (tripped) {
|
|
282
342
|
this.d.log.warn("eval run stopped after too many consecutive errors", { runId: data.runId });
|
|
283
343
|
await this.skipCase(data);
|
|
@@ -422,34 +482,7 @@ export class EvalWorker {
|
|
|
422
482
|
const b = replyParts(result.baseline.content);
|
|
423
483
|
const c = replyParts(result.candidate.content);
|
|
424
484
|
const diff = structuralDiff({ ...b, stopReason: result.baseline.stopReason }, { ...c, stopReason: result.candidate.stopReason });
|
|
425
|
-
const outcome = await
|
|
426
|
-
// 只在仍由本次执行认领时写结果:stalled 后被接手的旧执行不覆盖结果。用量照样计入(请求确实发出且已付费,
|
|
427
|
-
// 与失败尝试一样不以认领为条件),走同一个原子 consumeTokens
|
|
428
|
-
const w = await trx
|
|
429
|
-
.updateTable("eval_results")
|
|
430
|
-
.set({
|
|
431
|
-
status: "done",
|
|
432
|
-
baseline: JSON.stringify(result.baseline),
|
|
433
|
-
candidate: JSON.stringify(result.candidate),
|
|
434
|
-
diff: JSON.stringify(diff),
|
|
435
|
-
// 开了评委:评委做完之前用例不算做完(recountCases 不计 pending 的评委)
|
|
436
|
-
judge_status: grade.judge ? "pending" : "none",
|
|
437
|
-
drift: result.drift,
|
|
438
|
-
error: null,
|
|
439
|
-
updated_at: sql `now()`,
|
|
440
|
-
})
|
|
441
|
-
.where("id", "=", r.id)
|
|
442
|
-
.where("status", "=", "running")
|
|
443
|
-
.where("claimed_by", "=", claim)
|
|
444
|
-
.executeTakeFirst();
|
|
445
|
-
if (Number(w.numUpdatedRows) === 0) {
|
|
446
|
-
await consumeTokens(trx, runId, tokens);
|
|
447
|
-
return "lost";
|
|
448
|
-
}
|
|
449
|
-
await recordOutcome(trx, runId, true, this.d.config().evals.maxConsecutiveErrors);
|
|
450
|
-
const { capped } = await consumeTokens(trx, runId, tokens);
|
|
451
|
-
return capped ? "capped" : "ok";
|
|
452
|
-
});
|
|
485
|
+
const outcome = await this.writeStepResultIn(runId, r.id, claim, result, diff, grade, tokens);
|
|
453
486
|
// 失去认领:这个用例已由别的执行接手,本次停下
|
|
454
487
|
if (outcome === "lost")
|
|
455
488
|
return;
|
|
@@ -510,7 +543,7 @@ export class EvalWorker {
|
|
|
510
543
|
try {
|
|
511
544
|
v = await judge({
|
|
512
545
|
purposes: this.d.purposes,
|
|
513
|
-
maxOutputTokens: this.d.config().evals.judgeMaxOutputTokens,
|
|
546
|
+
maxOutputTokens: this.d.config.get().evals.judgeMaxOutputTokens,
|
|
514
547
|
}, data.orgId, input, signal);
|
|
515
548
|
}
|
|
516
549
|
catch (err) {
|
|
@@ -608,8 +641,9 @@ export class EvalWorker {
|
|
|
608
641
|
out = await replayRun({
|
|
609
642
|
...this.d.runReplay,
|
|
610
643
|
stillClaimed: () => held(),
|
|
611
|
-
|
|
612
|
-
|
|
644
|
+
// runs inside the seed's transaction (the context-aware handle joins it)
|
|
645
|
+
onSeeded: async (conversationId) => {
|
|
646
|
+
const w = await this.d.db
|
|
613
647
|
.updateTable("eval_results")
|
|
614
648
|
.set({ eval_conversation_id: conversationId, updated_at: sql `now()` })
|
|
615
649
|
.where("id", "=", resultId)
|
|
@@ -659,33 +693,73 @@ export class EvalWorker {
|
|
|
659
693
|
const baseText = replyParts(baseline.finalContent).text;
|
|
660
694
|
const candText = replyParts(out.finalContent).text;
|
|
661
695
|
const diff = structuralDiff({ toolCalls: baseline.toolCalls, text: baseText, stopReason: baseline.stopReason }, { toolCalls: out.toolCalls, text: candText, stopReason: out.stopReason });
|
|
662
|
-
const written = await
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
candidate: JSON.stringify(out),
|
|
669
|
-
diff: JSON.stringify(diff),
|
|
670
|
-
judge_status: grade.judge ? "pending" : "none",
|
|
671
|
-
drift,
|
|
672
|
-
error: null,
|
|
673
|
-
eval_conversation_id: out.conversationId,
|
|
674
|
-
updated_at: sql `now()`,
|
|
675
|
-
})
|
|
676
|
-
.where("id", "=", resultId)
|
|
677
|
-
.where("status", "=", "running")
|
|
678
|
-
.where("claimed_by", "=", claim)
|
|
679
|
-
.executeTakeFirst();
|
|
680
|
-
if (Number(w.numUpdatedRows) === 0)
|
|
681
|
-
return false;
|
|
682
|
-
await recordOutcome(trx, runId, true, this.d.config().evals.maxConsecutiveErrors);
|
|
683
|
-
return true;
|
|
696
|
+
const written = await this.writeRunResultIn(runId, resultId, claim, {
|
|
697
|
+
baseline,
|
|
698
|
+
out,
|
|
699
|
+
diff,
|
|
700
|
+
drift,
|
|
701
|
+
judge: grade.judge,
|
|
684
702
|
});
|
|
685
703
|
if (!written || !grade.judge)
|
|
686
704
|
return;
|
|
687
705
|
await this.judgeResult(data, resultId, claim, signal, judgeInputOf(s, "run", null, baseline, out, grade.rubric));
|
|
688
706
|
}
|
|
707
|
+
/**
|
|
708
|
+
* 写一条单步回放的结果:只在仍由本次执行认领时写结果(stalled 后被接手的旧执行不覆盖结果)。用量照样计入(请求确实
|
|
709
|
+
* 发出且已付费,与失败尝试一样不以认领为条件),走同一个原子 consumeTokens。
|
|
710
|
+
*/
|
|
711
|
+
async writeStepResultIn(runId, resultId, claim, result, diff, grade, tokens) {
|
|
712
|
+
const db = this.d.db;
|
|
713
|
+
const w = await db
|
|
714
|
+
.updateTable("eval_results")
|
|
715
|
+
.set({
|
|
716
|
+
status: "done",
|
|
717
|
+
baseline: JSON.stringify(result.baseline),
|
|
718
|
+
candidate: JSON.stringify(result.candidate),
|
|
719
|
+
diff: JSON.stringify(diff),
|
|
720
|
+
// 开了评委:评委做完之前用例不算做完(recountCases 不计 pending 的评委)
|
|
721
|
+
judge_status: grade.judge ? "pending" : "none",
|
|
722
|
+
drift: result.drift,
|
|
723
|
+
error: null,
|
|
724
|
+
updated_at: sql `now()`,
|
|
725
|
+
})
|
|
726
|
+
.where("id", "=", resultId)
|
|
727
|
+
.where("status", "=", "running")
|
|
728
|
+
.where("claimed_by", "=", claim)
|
|
729
|
+
.executeTakeFirst();
|
|
730
|
+
if (Number(w.numUpdatedRows) === 0) {
|
|
731
|
+
await consumeTokens(db, runId, tokens);
|
|
732
|
+
return "lost";
|
|
733
|
+
}
|
|
734
|
+
await recordOutcome(db, runId, true, this.d.config.get().evals.maxConsecutiveErrors);
|
|
735
|
+
const { capped } = await consumeTokens(db, runId, tokens);
|
|
736
|
+
return capped ? "capped" : "ok";
|
|
737
|
+
}
|
|
738
|
+
/** 写一条整轮回放的结果(仍由本次执行认领时);false = 已失去认领。 */
|
|
739
|
+
async writeRunResultIn(runId, resultId, claim, r) {
|
|
740
|
+
const db = this.d.db;
|
|
741
|
+
const w = await db
|
|
742
|
+
.updateTable("eval_results")
|
|
743
|
+
.set({
|
|
744
|
+
status: "done",
|
|
745
|
+
baseline: JSON.stringify(r.baseline),
|
|
746
|
+
candidate: JSON.stringify(r.out),
|
|
747
|
+
diff: JSON.stringify(r.diff),
|
|
748
|
+
judge_status: r.judge ? "pending" : "none",
|
|
749
|
+
drift: r.drift,
|
|
750
|
+
error: null,
|
|
751
|
+
eval_conversation_id: r.out.conversationId,
|
|
752
|
+
updated_at: sql `now()`,
|
|
753
|
+
})
|
|
754
|
+
.where("id", "=", resultId)
|
|
755
|
+
.where("status", "=", "running")
|
|
756
|
+
.where("claimed_by", "=", claim)
|
|
757
|
+
.executeTakeFirst();
|
|
758
|
+
if (Number(w.numUpdatedRows) === 0)
|
|
759
|
+
return false;
|
|
760
|
+
await recordOutcome(db, runId, true, this.d.config.get().evals.maxConsecutiveErrors);
|
|
761
|
+
return true;
|
|
762
|
+
}
|
|
689
763
|
/**
|
|
690
764
|
* 该用例剩下的结果标 skipped。整轮回放留下的评测对话里若还有没结束的运行(上一次执行崩溃在回放中途),删掉它,
|
|
691
765
|
* 不留永远「执行中」的评测对话;已正常收尾(`run_aborted` / `run_finished`)的保留,轨迹里能看到停在哪里。
|
|
@@ -773,9 +847,35 @@ export class EvalWorker {
|
|
|
773
847
|
.execute();
|
|
774
848
|
// 已 done 但评委一直没做成的:评委记 skipped(结果本身保留)
|
|
775
849
|
await skipPendingJudges(this.d.db, data.runId, data.caseId);
|
|
776
|
-
await
|
|
850
|
+
await this.d.budget.recountCases(data.runId);
|
|
777
851
|
}
|
|
778
|
-
}
|
|
852
|
+
};
|
|
853
|
+
__decorate([
|
|
854
|
+
Transactional({ propagation: "requires_new" })
|
|
855
|
+
], EvalWorker.prototype, "writeStepResultIn", null);
|
|
856
|
+
__decorate([
|
|
857
|
+
Transactional({ propagation: "requires_new" })
|
|
858
|
+
], EvalWorker.prototype, "writeRunResultIn", null);
|
|
859
|
+
EvalWorker = __decorate([
|
|
860
|
+
Injectable(),
|
|
861
|
+
__param(0, Inject(KernelDb)),
|
|
862
|
+
__param(1, Inject(EVAL_QUOTA)),
|
|
863
|
+
__param(2, Inject(KernelConfigService)),
|
|
864
|
+
__param(3, Inject(KERNEL_LOGGER)),
|
|
865
|
+
__param(4, Inject(ModelPurposesService)),
|
|
866
|
+
__param(5, Inject(ProviderRegistry)),
|
|
867
|
+
__param(6, Inject(RunSteps)),
|
|
868
|
+
__param(7, Inject(AgentLoops)),
|
|
869
|
+
__param(8, Inject(EventLog)),
|
|
870
|
+
__param(9, Inject(RunFinish)),
|
|
871
|
+
__param(10, Inject(KyselyCheckpointSaver)),
|
|
872
|
+
__param(11, Inject(EvalReplaySeeder)),
|
|
873
|
+
__param(12, Inject(EvalBudget)),
|
|
874
|
+
__param(13, Inject(TransactionHost)),
|
|
875
|
+
__param(14, Optional()),
|
|
876
|
+
__param(14, Inject(EVAL_REPLAY_HOOKS))
|
|
877
|
+
], EvalWorker);
|
|
878
|
+
export { EvalWorker };
|
|
779
879
|
/**
|
|
780
880
|
* A plugin template's child case: the template's current version, which a new dispatch would use
|
|
781
881
|
* (a template removed since gets version 0, so it always differs). Undefined for other cases.
|
|
@@ -1,34 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { EnterpriseAdminLock } from "../identity/enterprise-admin.js";
|
|
2
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
3
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
4
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
5
|
+
import type { KernelLogger } from "../log.js";
|
|
6
|
+
import { ExtensionAdmin, type PublishBus } from "./admin-view.js";
|
|
7
|
+
import { ExtensionBlobs } from "./blobs.js";
|
|
8
|
+
import { ExtensionLifecycle } from "./lifecycle.js";
|
|
9
|
+
import { PluginInstallLock } from "./locks.js";
|
|
3
10
|
import type { AdminExtensionView } from "./permission-view.js";
|
|
4
|
-
import
|
|
5
|
-
export interface ExtensionAdminOpsDeps {
|
|
6
|
-
db: KernelDb;
|
|
7
|
-
/**
|
|
8
|
-
* Returns the admin view after the operation; when the package cannot be read it should return the
|
|
9
|
-
* degraded item (`ExtensionAdmin.get(name, { allowUnreadable: true })`). If it throws, the operation
|
|
10
|
-
* has already committed: ops logs an error and returns {@link fallbackView}, so an operation that
|
|
11
|
-
* took effect is not reported as failed.
|
|
12
|
-
*/
|
|
13
|
-
view(name: string): Promise<AdminExtensionView>;
|
|
14
|
-
/** 配置声明的插件名 → 来源(这些插件不能安装 / 停用 / 卸载,C15)。 */
|
|
15
|
-
declared(): ReadonlyMap<string, ExtensionSource>;
|
|
16
|
-
/** 读包(降级时核对目标版本的迁移文件)。 */
|
|
17
|
-
blobs: {
|
|
18
|
-
get(sha256: string): Promise<Uint8Array>;
|
|
19
|
-
};
|
|
20
|
-
config: () => KernelConfig;
|
|
21
|
-
/** 发布 `kernel.plugins.changed`。 */
|
|
22
|
-
bus: {
|
|
23
|
-
publish(topic: string, payload: unknown): Promise<void>;
|
|
24
|
-
};
|
|
25
|
-
/** 发布失败时本副本自己 reconcile(不等待;其他副本靠周期任务兜底)。CLI 没有。 */
|
|
26
|
-
reconcile?: (reason: string) => Promise<void>;
|
|
27
|
-
log: {
|
|
28
|
-
warn(msg: string, fields?: Record<string, unknown>): void;
|
|
29
|
-
error(msg: string, fields?: Record<string, unknown>): void;
|
|
30
|
-
};
|
|
31
|
-
}
|
|
11
|
+
import { ExtensionRegistry } from "./registry.js";
|
|
32
12
|
/**
|
|
33
13
|
* Deployment-level extension install / enable / disable / uninstall (C16 / D15): writes only the PG
|
|
34
14
|
* desired state (`extension_installs`) and the audit, then publishes `kernel.plugins.changed` after
|
|
@@ -39,8 +19,53 @@ export interface ExtensionAdminOpsDeps {
|
|
|
39
19
|
* then an advisory lock by extension name and a lock on the install record row.
|
|
40
20
|
*/
|
|
41
21
|
export declare class ExtensionAdminOps {
|
|
42
|
-
private readonly
|
|
43
|
-
|
|
22
|
+
private readonly kdb;
|
|
23
|
+
readonly txHost: TransactionHost;
|
|
24
|
+
/** The enterprise admin lock (identity/enterprise-admin.ts): joins the transaction. */
|
|
25
|
+
private readonly adminLock;
|
|
26
|
+
private readonly installLock;
|
|
27
|
+
/**
|
|
28
|
+
* The admin view after the operation, degraded when the package cannot be read
|
|
29
|
+
* (`get(name, { allowUnreadable: true })`). If it throws, the operation has already committed:
|
|
30
|
+
* ops logs an error and returns {@link fallbackView}, so an operation that took effect is not
|
|
31
|
+
* reported as failed.
|
|
32
|
+
*/
|
|
33
|
+
private readonly admin;
|
|
34
|
+
/** The config-declared extension names (they cannot be installed / disabled / uninstalled, C15). */
|
|
35
|
+
private readonly registry;
|
|
36
|
+
/** Reads packages (a downgrade checks the target version's migration files). */
|
|
37
|
+
private readonly blobs;
|
|
38
|
+
private readonly config;
|
|
39
|
+
/** Publishes `kernel.plugins.changed`. */
|
|
40
|
+
private readonly bus;
|
|
41
|
+
/**
|
|
42
|
+
* When the publish fails this replica reconciles itself (not awaited; other replicas catch up
|
|
43
|
+
* periodically). A no-op where the lifecycle never started (the CLI).
|
|
44
|
+
*/
|
|
45
|
+
private readonly lifecycle;
|
|
46
|
+
private readonly log;
|
|
47
|
+
constructor(kdb: KernelDb, txHost: TransactionHost,
|
|
48
|
+
/** The enterprise admin lock (identity/enterprise-admin.ts): joins the transaction. */
|
|
49
|
+
adminLock: EnterpriseAdminLock, installLock: PluginInstallLock,
|
|
50
|
+
/**
|
|
51
|
+
* The admin view after the operation, degraded when the package cannot be read
|
|
52
|
+
* (`get(name, { allowUnreadable: true })`). If it throws, the operation has already committed:
|
|
53
|
+
* ops logs an error and returns {@link fallbackView}, so an operation that took effect is not
|
|
54
|
+
* reported as failed.
|
|
55
|
+
*/
|
|
56
|
+
admin: ExtensionAdmin,
|
|
57
|
+
/** The config-declared extension names (they cannot be installed / disabled / uninstalled, C15). */
|
|
58
|
+
registry: ExtensionRegistry,
|
|
59
|
+
/** Reads packages (a downgrade checks the target version's migration files). */
|
|
60
|
+
blobs: ExtensionBlobs, config: KernelConfigService,
|
|
61
|
+
/** Publishes `kernel.plugins.changed`. */
|
|
62
|
+
bus: PublishBus,
|
|
63
|
+
/**
|
|
64
|
+
* When the publish fails this replica reconciles itself (not awaited; other replicas catch up
|
|
65
|
+
* periodically). A no-op where the lifecycle never started (the CLI).
|
|
66
|
+
*/
|
|
67
|
+
lifecycle: ExtensionLifecycle, log: KernelLogger);
|
|
68
|
+
private get db();
|
|
44
69
|
/**
|
|
45
70
|
* New install or version change (upgrade / downgrade): the install record points at package
|
|
46
71
|
* `sha256`; the desired state is unchanged (a new install is disabled). Audit `extension.installed`.
|
|
@@ -72,6 +97,7 @@ export declare class ExtensionAdminOps {
|
|
|
72
97
|
install(name: string, sha256: string, actor: string | null, actorTokenId?: string, opts?: {
|
|
73
98
|
catalogItemId?: string;
|
|
74
99
|
}): Promise<AdminExtensionView>;
|
|
100
|
+
private writeInstall;
|
|
75
101
|
/** Enable on the deployment (audit `extension.enabled`); no change when already enabled. Org enablement is unchanged. */
|
|
76
102
|
enable(name: string, actor: string | null, actorTokenId?: string): Promise<AdminExtensionView>;
|
|
77
103
|
/**
|
|
@@ -90,14 +116,16 @@ export declare class ExtensionAdminOps {
|
|
|
90
116
|
* up).
|
|
91
117
|
*/
|
|
92
118
|
uninstall(name: string, actor: string | null, actorTokenId?: string): Promise<void>;
|
|
119
|
+
private writeUninstall;
|
|
93
120
|
private setState;
|
|
121
|
+
private writeState;
|
|
94
122
|
/**
|
|
95
123
|
* 提交后的视图:拼视图失败(读包、查状态行出错)时操作已经生效,不能再报失败——记 error,返回降级视图。
|
|
96
124
|
*/
|
|
97
125
|
private viewAfterCommit;
|
|
98
126
|
/** 配置声明的插件不经安装记录管理。 */
|
|
99
127
|
private assertInstallable;
|
|
100
|
-
/**
|
|
128
|
+
/** 按插件名串行(`PluginInstallLock`,覆盖「还没有行」的新装),再锁住已有的安装记录行。 */
|
|
101
129
|
private lockRow;
|
|
102
130
|
private audit;
|
|
103
131
|
/** 提交后通知各副本;发布失败只告警(周期 reconcile 兜底),本副本自己先 reconcile。 */
|