@capybara-hq/kernel 0.1.0-rc.1 → 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/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 -194
- 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 +1 -0
- package/dist/config/schema.js +10 -4
- 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 -63
- 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/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 +1 -0
- package/dist/errors.js +1 -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 -121
- 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 +58 -31
- package/dist/extensions/bootstrap.js +175 -121
- 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 +17 -62
- 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 +16 -11
- package/dist/index.js +9 -6
- 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 -244
- 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-context.d.ts +2 -0
- package/dist/log-context.js +4 -0
- 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/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 -137
- 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 -226
- 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 -100
- 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 +2 -1
- 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 +9 -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,24 +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 {
|
|
10
|
-
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";
|
|
11
27
|
import { MediaUnavailableError, RunError } from "../runtime/model-call.js";
|
|
12
|
-
import { ProviderListError } from "../runtime/providers.js";
|
|
13
|
-
import { ORG_QUOTA_LEASE_MS } from "../runtime/quota.js";
|
|
14
|
-
import {
|
|
15
|
-
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";
|
|
16
33
|
import { replyParts, structuralDiff } from "./diff.js";
|
|
34
|
+
import { evalJobId } from "./jobs.js";
|
|
17
35
|
import { JUDGE_PROVIDER_UNAVAILABLE, judge } from "./judge.js";
|
|
18
36
|
import { userRequestOf } from "./plan.js";
|
|
19
37
|
import { subagentCaseChanged, subagentStartedOf } from "./reconstruct.js";
|
|
20
|
-
import { deleteEvalConversation, ReplayClaimLost, replayRun, runBaseline, } from "./run-replay.js";
|
|
21
|
-
import { caseBase,
|
|
38
|
+
import { deleteEvalConversation, EvalReplaySeeder, ReplayClaimLost, replayRun, runBaseline, } from "./run-replay.js";
|
|
39
|
+
import { caseBase, versionDefinition } from "./runs.service.js";
|
|
22
40
|
import { readSnapshot, replayableCalls, toEvents } from "./snapshot.js";
|
|
23
41
|
import { ReplayAttemptError, replayStep, resolveCandidate, } from "./step-replay.js";
|
|
24
42
|
/**
|
|
@@ -42,7 +60,13 @@ export const EVAL_MAX_RETRIES = 3;
|
|
|
42
60
|
/** 第 n 次重试前的等待(毫秒);供应商给了 `retryAfterMs` 时取它(不超过 30 秒)。 */
|
|
43
61
|
const RETRY_DELAYS_MS = [1000, 2000, 4000];
|
|
44
62
|
const MAX_RETRY_AFTER_MS = 30_000;
|
|
45
|
-
|
|
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");
|
|
46
70
|
/** 供应商插件在调用途中被撤销(错误本身或其 cause)。 */
|
|
47
71
|
const isPluginUnloaded = (err) => err instanceof ExtensionUnloadedError ||
|
|
48
72
|
(err instanceof Error && err.cause instanceof ExtensionUnloadedError);
|
|
@@ -135,42 +159,90 @@ function judgeInputOf(s, mode, modelCallSeq, baseline, candidate, rubric) {
|
|
|
135
159
|
rubric,
|
|
136
160
|
};
|
|
137
161
|
}
|
|
138
|
-
|
|
139
|
-
|
|
162
|
+
let EvalWorker = class EvalWorker {
|
|
163
|
+
txHost;
|
|
140
164
|
worker;
|
|
141
|
-
conn;
|
|
142
165
|
/** 本进程在执行的任务:停机时中止,任务回到队列。 */
|
|
143
166
|
active = new Set();
|
|
144
167
|
closing = false;
|
|
145
|
-
|
|
146
|
-
|
|
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
|
+
};
|
|
147
219
|
}
|
|
148
|
-
|
|
149
|
-
|
|
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)
|
|
150
226
|
return;
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
this.d.log.error("eval job failed", { jobId: job.id, err });
|
|
171
|
-
// 任务不会再执行:该用例剩下的结果记 error,运行不因此卡住
|
|
172
|
-
void this.failCase(job.data, err).catch((e) => this.d.log.error("cannot mark failed eval job", { jobId: job.id, err: e }));
|
|
173
|
-
});
|
|
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 }));
|
|
174
246
|
}
|
|
175
247
|
/** 停止领取;中止本进程在执行的任务(回到队列由别的 worker 接着做),在 budgetMs 内等它们退出。 */
|
|
176
248
|
async close(budgetMs) {
|
|
@@ -182,48 +254,36 @@ export class EvalWorker {
|
|
|
182
254
|
await worker.pause(true).catch(() => { });
|
|
183
255
|
for (const ac of this.active)
|
|
184
256
|
ac.abort();
|
|
185
|
-
|
|
186
|
-
const done = await Promise.race([
|
|
187
|
-
worker.close().then(() => true),
|
|
188
|
-
new Promise((resolve) => {
|
|
189
|
-
timer = setTimeout(() => resolve(false), Math.max(0, budgetMs));
|
|
190
|
-
timer.unref();
|
|
191
|
-
}),
|
|
192
|
-
]);
|
|
193
|
-
clearTimeout(timer);
|
|
257
|
+
const done = await waitWithin(worker.close(), budgetMs);
|
|
194
258
|
if (!done)
|
|
195
259
|
await worker.close(true).catch(() => { });
|
|
196
|
-
this.conn?.disconnect();
|
|
197
260
|
}
|
|
261
|
+
/** One job: replays one case (the processor runs it in `runJob`). */
|
|
198
262
|
async process(job, token) {
|
|
199
263
|
const data = job.data;
|
|
200
264
|
const { runId, orgId } = data;
|
|
201
265
|
const jobId = job.id ?? evalJobId(runId, data.caseId);
|
|
202
266
|
if (!(await runActive(this.d.db, runId))) {
|
|
203
267
|
await this.skipCase(data);
|
|
204
|
-
await
|
|
268
|
+
await this.d.budget.recountCases(runId);
|
|
205
269
|
return;
|
|
206
270
|
}
|
|
207
|
-
const limit = this.d.config().evals.orgConcurrency;
|
|
271
|
+
const limit = this.d.config.get().evals.orgConcurrency;
|
|
208
272
|
// 每次执行一个新的认领号:失去认领(stalled 后被别的 worker 接手)的旧执行写不进结果(用量照样计入)。
|
|
209
273
|
// 配额成员 = 任务 id + 认领号:旧执行退出时只移除自己的名额,不会把接手执行的名额一起移掉
|
|
210
274
|
const claim = randomUUID();
|
|
211
275
|
const member = `${jobId}-${claim}`;
|
|
212
|
-
|
|
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) {
|
|
213
279
|
// 配额满:固定 5 秒后再试,不按事件唤醒。评测是后台批任务,几秒空等可以接受,换来没有跨副本通知
|
|
214
|
-
await job.moveToDelayed(Date.now() +
|
|
280
|
+
await job.moveToDelayed(Date.now() + EVAL_QUOTA_RETRY_MS, token);
|
|
215
281
|
throw new DelayedError();
|
|
216
282
|
}
|
|
217
283
|
const ac = new AbortController();
|
|
218
284
|
this.active.add(ac);
|
|
219
285
|
if (this.closing)
|
|
220
286
|
ac.abort();
|
|
221
|
-
const renew = setInterval(() => {
|
|
222
|
-
this.d.quota
|
|
223
|
-
.renew(orgId, member, ORG_QUOTA_LEASE_MS)
|
|
224
|
-
.catch((err) => this.d.log.warn("eval quota renew failed", { jobId, err }));
|
|
225
|
-
}, ORG_QUOTA_LEASE_MS / 3);
|
|
226
|
-
renew.unref();
|
|
227
287
|
try {
|
|
228
288
|
await this.d.db
|
|
229
289
|
.updateTable("eval_runs")
|
|
@@ -242,13 +302,12 @@ export class EvalWorker {
|
|
|
242
302
|
throw err;
|
|
243
303
|
}
|
|
244
304
|
finally {
|
|
245
|
-
clearInterval(renew);
|
|
246
305
|
this.active.delete(ac);
|
|
247
|
-
await
|
|
248
|
-
.
|
|
306
|
+
await slot
|
|
307
|
+
.release()
|
|
249
308
|
.catch((err) => this.d.log.warn("eval quota leave failed", { jobId, err }));
|
|
250
309
|
}
|
|
251
|
-
await
|
|
310
|
+
await this.d.budget.recountCases(runId);
|
|
252
311
|
}
|
|
253
312
|
/** 单步回放每次请求前:运行仍在执行({@link runActive})且结果仍由本次执行认领。 */
|
|
254
313
|
async mayRequest(runId, resultId, claim) {
|
|
@@ -278,7 +337,7 @@ export class EvalWorker {
|
|
|
278
337
|
.executeTakeFirst();
|
|
279
338
|
if (Number(w.numUpdatedRows) === 0)
|
|
280
339
|
return true;
|
|
281
|
-
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);
|
|
282
341
|
if (tripped) {
|
|
283
342
|
this.d.log.warn("eval run stopped after too many consecutive errors", { runId: data.runId });
|
|
284
343
|
await this.skipCase(data);
|
|
@@ -423,34 +482,7 @@ export class EvalWorker {
|
|
|
423
482
|
const b = replyParts(result.baseline.content);
|
|
424
483
|
const c = replyParts(result.candidate.content);
|
|
425
484
|
const diff = structuralDiff({ ...b, stopReason: result.baseline.stopReason }, { ...c, stopReason: result.candidate.stopReason });
|
|
426
|
-
const outcome = await
|
|
427
|
-
// 只在仍由本次执行认领时写结果:stalled 后被接手的旧执行不覆盖结果。用量照样计入(请求确实发出且已付费,
|
|
428
|
-
// 与失败尝试一样不以认领为条件),走同一个原子 consumeTokens
|
|
429
|
-
const w = await trx
|
|
430
|
-
.updateTable("eval_results")
|
|
431
|
-
.set({
|
|
432
|
-
status: "done",
|
|
433
|
-
baseline: JSON.stringify(result.baseline),
|
|
434
|
-
candidate: JSON.stringify(result.candidate),
|
|
435
|
-
diff: JSON.stringify(diff),
|
|
436
|
-
// 开了评委:评委做完之前用例不算做完(recountCases 不计 pending 的评委)
|
|
437
|
-
judge_status: grade.judge ? "pending" : "none",
|
|
438
|
-
drift: result.drift,
|
|
439
|
-
error: null,
|
|
440
|
-
updated_at: sql `now()`,
|
|
441
|
-
})
|
|
442
|
-
.where("id", "=", r.id)
|
|
443
|
-
.where("status", "=", "running")
|
|
444
|
-
.where("claimed_by", "=", claim)
|
|
445
|
-
.executeTakeFirst();
|
|
446
|
-
if (Number(w.numUpdatedRows) === 0) {
|
|
447
|
-
await consumeTokens(trx, runId, tokens);
|
|
448
|
-
return "lost";
|
|
449
|
-
}
|
|
450
|
-
await recordOutcome(trx, runId, true, this.d.config().evals.maxConsecutiveErrors);
|
|
451
|
-
const { capped } = await consumeTokens(trx, runId, tokens);
|
|
452
|
-
return capped ? "capped" : "ok";
|
|
453
|
-
});
|
|
485
|
+
const outcome = await this.writeStepResultIn(runId, r.id, claim, result, diff, grade, tokens);
|
|
454
486
|
// 失去认领:这个用例已由别的执行接手,本次停下
|
|
455
487
|
if (outcome === "lost")
|
|
456
488
|
return;
|
|
@@ -511,7 +543,7 @@ export class EvalWorker {
|
|
|
511
543
|
try {
|
|
512
544
|
v = await judge({
|
|
513
545
|
purposes: this.d.purposes,
|
|
514
|
-
maxOutputTokens: this.d.config().evals.judgeMaxOutputTokens,
|
|
546
|
+
maxOutputTokens: this.d.config.get().evals.judgeMaxOutputTokens,
|
|
515
547
|
}, data.orgId, input, signal);
|
|
516
548
|
}
|
|
517
549
|
catch (err) {
|
|
@@ -609,8 +641,9 @@ export class EvalWorker {
|
|
|
609
641
|
out = await replayRun({
|
|
610
642
|
...this.d.runReplay,
|
|
611
643
|
stillClaimed: () => held(),
|
|
612
|
-
|
|
613
|
-
|
|
644
|
+
// runs inside the seed's transaction (the context-aware handle joins it)
|
|
645
|
+
onSeeded: async (conversationId) => {
|
|
646
|
+
const w = await this.d.db
|
|
614
647
|
.updateTable("eval_results")
|
|
615
648
|
.set({ eval_conversation_id: conversationId, updated_at: sql `now()` })
|
|
616
649
|
.where("id", "=", resultId)
|
|
@@ -660,33 +693,73 @@ export class EvalWorker {
|
|
|
660
693
|
const baseText = replyParts(baseline.finalContent).text;
|
|
661
694
|
const candText = replyParts(out.finalContent).text;
|
|
662
695
|
const diff = structuralDiff({ toolCalls: baseline.toolCalls, text: baseText, stopReason: baseline.stopReason }, { toolCalls: out.toolCalls, text: candText, stopReason: out.stopReason });
|
|
663
|
-
const written = await
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
candidate: JSON.stringify(out),
|
|
670
|
-
diff: JSON.stringify(diff),
|
|
671
|
-
judge_status: grade.judge ? "pending" : "none",
|
|
672
|
-
drift,
|
|
673
|
-
error: null,
|
|
674
|
-
eval_conversation_id: out.conversationId,
|
|
675
|
-
updated_at: sql `now()`,
|
|
676
|
-
})
|
|
677
|
-
.where("id", "=", resultId)
|
|
678
|
-
.where("status", "=", "running")
|
|
679
|
-
.where("claimed_by", "=", claim)
|
|
680
|
-
.executeTakeFirst();
|
|
681
|
-
if (Number(w.numUpdatedRows) === 0)
|
|
682
|
-
return false;
|
|
683
|
-
await recordOutcome(trx, runId, true, this.d.config().evals.maxConsecutiveErrors);
|
|
684
|
-
return true;
|
|
696
|
+
const written = await this.writeRunResultIn(runId, resultId, claim, {
|
|
697
|
+
baseline,
|
|
698
|
+
out,
|
|
699
|
+
diff,
|
|
700
|
+
drift,
|
|
701
|
+
judge: grade.judge,
|
|
685
702
|
});
|
|
686
703
|
if (!written || !grade.judge)
|
|
687
704
|
return;
|
|
688
705
|
await this.judgeResult(data, resultId, claim, signal, judgeInputOf(s, "run", null, baseline, out, grade.rubric));
|
|
689
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
|
+
}
|
|
690
763
|
/**
|
|
691
764
|
* 该用例剩下的结果标 skipped。整轮回放留下的评测对话里若还有没结束的运行(上一次执行崩溃在回放中途),删掉它,
|
|
692
765
|
* 不留永远「执行中」的评测对话;已正常收尾(`run_aborted` / `run_finished`)的保留,轨迹里能看到停在哪里。
|
|
@@ -774,9 +847,35 @@ export class EvalWorker {
|
|
|
774
847
|
.execute();
|
|
775
848
|
// 已 done 但评委一直没做成的:评委记 skipped(结果本身保留)
|
|
776
849
|
await skipPendingJudges(this.d.db, data.runId, data.caseId);
|
|
777
|
-
await
|
|
850
|
+
await this.d.budget.recountCases(data.runId);
|
|
778
851
|
}
|
|
779
|
-
}
|
|
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 };
|
|
780
879
|
/**
|
|
781
880
|
* A plugin template's child case: the template's current version, which a new dispatch would use
|
|
782
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。 */
|