@capybara-hq/kernel 0.1.0-rc.1 → 0.1.0-rc.3
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 +187 -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 +280 -335
- package/dist/agents/definition.d.ts +39 -8
- package/dist/agents/definition.js +201 -17
- 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 +39 -8
- 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 +326 -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/claude/agents.js +13 -10
- 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 +31 -14
- 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 +10 -4
- package/dist/channels/cards.js +16 -8
- 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 +12 -6
- package/dist/conversations/access.d.ts +29 -0
- package/dist/conversations/access.js +86 -0
- package/dist/conversations/artifacts.d.ts +11 -11
- package/dist/conversations/artifacts.js +36 -10
- 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 +39 -18
- package/dist/conversations/event-log.js +93 -27
- package/dist/conversations/events.d.ts +23 -3
- package/dist/conversations/events.js +26 -14
- 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 +4 -4
- 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/recorded-tools.d.ts +27 -1
- package/dist/evals/recorded-tools.js +85 -10
- package/dist/evals/run-replay.d.ts +61 -8
- package/dist/evals/run-replay.js +159 -85
- 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.d.ts +2 -2
- 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 +86 -58
- 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 +456 -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 +16 -10
- package/dist/orgs/settings.service.js +77 -48
- 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/context/build.d.ts +6 -6
- package/dist/runtime/context/build.js +18 -8
- package/dist/runtime/context/claude-tools.d.ts +2 -1
- package/dist/runtime/context/claude-tools.js +9 -10
- package/dist/runtime/context/legacy-text.d.ts +22 -0
- package/dist/runtime/context/legacy-text.js +37 -0
- package/dist/runtime/context/skills.d.ts +29 -11
- package/dist/runtime/context/skills.js +37 -30
- 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 +8 -1
- 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 +25 -58
- 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 +27 -18
- 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 +122 -76
- package/dist/runtime/run-worker.js +343 -229
- 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 +5 -10
- package/dist/runtime/subagents/definition.js +13 -14
- package/dist/runtime/subagents/dispatch.d.ts +89 -8
- package/dist/runtime/subagents/dispatch.js +137 -142
- 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 +3 -2
- package/dist/runtime/subagents/progress.d.ts +2 -2
- package/dist/runtime/subagents/roster.d.ts +4 -4
- package/dist/runtime/subagents/roster.js +2 -2
- package/dist/runtime/subagents/skill-fork.d.ts +8 -9
- package/dist/runtime/subagents/skill-fork.js +17 -6
- 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 +127 -59
- package/dist/runtime/waits.js +433 -210
- 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 +37 -24
- package/dist/skills/catalog.js +100 -57
- package/dist/skills/changes.controller.d.ts +4 -4
- package/dist/skills/changes.controller.js +15 -9
- package/dist/skills/changes.service.d.ts +30 -20
- package/dist/skills/changes.service.js +425 -367
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +8 -5
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +17 -16
- package/dist/skills/invoke.js +53 -21
- 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 +33 -25
- package/dist/tools/approvals.service.js +343 -259
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtin-names.d.ts +73 -0
- package/dist/tools/builtin-names.js +116 -0
- package/dist/tools/builtins/agent.d.ts +7 -7
- package/dist/tools/builtins/agent.js +7 -11
- package/dist/tools/builtins/ask-user.d.ts +3 -3
- package/dist/tools/builtins/ask-user.js +3 -3
- 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 +3 -3
- package/dist/tools/builtins/read-tool-output.js +3 -3
- package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
- package/dist/tools/builtins/sandbox/bash.js +33 -30
- package/dist/tools/builtins/sandbox/common.d.ts +5 -4
- package/dist/tools/builtins/sandbox/common.js +2 -2
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +13 -13
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +42 -31
- package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
- package/dist/tools/builtins/sandbox/file-state.js +34 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob-match.js +1 -1
- package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob.js +6 -6
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +149 -32
- package/dist/tools/builtins/sandbox/index.d.ts +1 -1
- package/dist/tools/builtins/sandbox/index.js +1 -1
- package/dist/tools/builtins/sandbox/read.d.ts +2 -2
- package/dist/tools/builtins/sandbox/read.js +22 -15
- package/dist/tools/builtins/sandbox/write.d.ts +1 -1
- package/dist/tools/builtins/sandbox/write.js +38 -34
- package/dist/tools/builtins/skill-load.d.ts +6 -6
- package/dist/tools/builtins/skill-load.js +33 -17
- package/dist/tools/builtins/skill-write.d.ts +4 -4
- package/dist/tools/builtins/skill-write.js +10 -10
- package/dist/tools/builtins/tool-search.d.ts +13 -9
- package/dist/tools/builtins/tool-search.js +25 -14
- 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 +438 -348
- package/dist/tools/credentials.d.ts +17 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/display-names.d.ts +9 -0
- package/dist/tools/display-names.js +24 -0
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +116 -84
- package/dist/tools/elicitation.js +1 -1
- package/dist/tools/info.d.ts +32 -13
- package/dist/tools/info.js +88 -39
- 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/legacy-data.d.ts +34 -0
- package/dist/tools/legacy-data.js +76 -0
- package/dist/tools/legacy-keys.d.ts +51 -0
- package/dist/tools/legacy-keys.js +115 -0
- package/dist/tools/naming.d.ts +1 -5
- package/dist/tools/naming.js +1 -7
- 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 +48 -4
- package/dist/tools/pipeline.d.ts +72 -50
- package/dist/tools/pipeline.js +239 -100
- package/dist/tools/policy.d.ts +3 -16
- package/dist/tools/policy.js +13 -19
- package/dist/tools/questions.controller.d.ts +2 -2
- package/dist/tools/questions.controller.js +9 -6
- package/dist/tools/questions.service.d.ts +26 -25
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +43 -38
- package/dist/tools/registry.js +100 -72
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +1 -1
- 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 +10 -3
- package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
- 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/tools/builtins/sandbox/names.d.ts +0 -7
- package/dist/tools/builtins/sandbox/names.js +0 -20
- /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
- /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
|
@@ -1,12 +1,30 @@
|
|
|
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 { isModelError, } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import {
|
|
11
|
+
import { getQueueToken } from "@nestjs/bullmq";
|
|
12
|
+
import { Inject, Injectable, Module } from "@nestjs/common";
|
|
3
13
|
import { sql } from "kysely";
|
|
14
|
+
import { ExtensionsModule } from "../extensions/extensions.module.js";
|
|
15
|
+
import { ExtensionHost } from "../extensions/host.js";
|
|
4
16
|
import { audit } from "../identity/audit.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
17
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
18
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
19
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
20
|
+
import { QueueModule } from "../infra/queue/queue.module.js";
|
|
21
|
+
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
22
|
+
import { ModelsModule } from "../models/models.module.js";
|
|
23
|
+
import { ModelPurposesService, PurposeAttemptError } from "../models/purposes.js";
|
|
7
24
|
import { fireObserve, hookDeniedAudit, hookDeniedEvent, hookRequestOf, } from "../runtime/hook-calls.js";
|
|
8
|
-
import {
|
|
25
|
+
import { UsageReporter, UsageReportModule } from "../runtime/usage-report.js";
|
|
9
26
|
import { HIDDEN_FORMAT_RE } from "../text.js";
|
|
27
|
+
import { EventLog, EventLogModule } from "./event-log.js";
|
|
10
28
|
import { typedInvocation } from "./events.js";
|
|
11
29
|
/**
|
|
12
30
|
* Model-generated conversation titles (UI refresh B, spec §5.1 "Titles").
|
|
@@ -228,23 +246,7 @@ export async function runTitleJob(d, conversationId, attempt) {
|
|
|
228
246
|
if (sent && d.hooks)
|
|
229
247
|
observeTitle(d, scope, sent, out, null, signal);
|
|
230
248
|
const title = cleanTitle(textOf(out.content));
|
|
231
|
-
const { written, usage } = await d.
|
|
232
|
-
// Append first: it locks the conversation row FOR UPDATE before this transaction touches it.
|
|
233
|
-
// Updating the title first held the row FOR NO KEY UPDATE, which lets in another
|
|
234
|
-
// transaction's foreign key check (FOR KEY SHARE, e.g. inserting an approval); the append's
|
|
235
|
-
// FOR UPDATE then waited for that one while it waited for the title row: 40P01
|
|
236
|
-
const [ev] = await d.eventLog.append(conversationId, [usageEvent(attempt, out)], t);
|
|
237
|
-
const row = title === null
|
|
238
|
-
? undefined
|
|
239
|
-
: await t
|
|
240
|
-
.updateTable("conversations")
|
|
241
|
-
.set({ title, title_source: "generated" })
|
|
242
|
-
.where("id", "=", conversationId)
|
|
243
|
-
.where("title_source", "is", null)
|
|
244
|
-
.returning("id")
|
|
245
|
-
.executeTakeFirst();
|
|
246
|
-
return { written: row !== undefined, usage: ev };
|
|
247
|
-
});
|
|
249
|
+
const { written, usage } = await d.writes.writeResult(conversationId, attempt, out, title);
|
|
248
250
|
if (usage) {
|
|
249
251
|
await d.eventLog.notify(conversationId, usage.seq);
|
|
250
252
|
void d.usageReport?.enqueue(conversationId, usage.seq);
|
|
@@ -313,7 +315,7 @@ async function checkTitleHooks(d, scope, target, request, signal) {
|
|
|
313
315
|
};
|
|
314
316
|
const entry = hookDeniedAudit(site, hookDeniedEvent(site, "model.request", verdict, { step: 0, attempt: 1 }).payload, verdict);
|
|
315
317
|
entry.detail = { ...entry.detail, purpose: "title" };
|
|
316
|
-
await d.
|
|
318
|
+
await d.writes.auditDenied(entry);
|
|
317
319
|
d.log.warn("conversation title blocked by a policy hook", {
|
|
318
320
|
conversationId: scope.conversationId,
|
|
319
321
|
plugin: verdict.plugin,
|
|
@@ -344,31 +346,118 @@ function observeTitle(d, scope, sent, out, err, signal) {
|
|
|
344
346
|
...(out === null && { errorCode: errorCodeOf(err) }),
|
|
345
347
|
}, signal, d.log);
|
|
346
348
|
}
|
|
349
|
+
/**
|
|
350
|
+
* One title attempt's work ({@link runTitleJob}) over the injected services, with its writes in
|
|
351
|
+
* transactions of their own: the title with the call's usage event, and a policy denial's audit row.
|
|
352
|
+
*/
|
|
353
|
+
let TitleGenerator = class TitleGenerator {
|
|
354
|
+
kdb;
|
|
355
|
+
eventLog;
|
|
356
|
+
purposes;
|
|
357
|
+
host;
|
|
358
|
+
usageReport;
|
|
359
|
+
log;
|
|
360
|
+
txHost;
|
|
361
|
+
constructor(kdb, eventLog, purposes,
|
|
362
|
+
/** The title call fires the plugin hooks (`model.request`, `model.response`). */
|
|
363
|
+
host, usageReport, log, txHost) {
|
|
364
|
+
this.kdb = kdb;
|
|
365
|
+
this.eventLog = eventLog;
|
|
366
|
+
this.purposes = purposes;
|
|
367
|
+
this.host = host;
|
|
368
|
+
this.usageReport = usageReport;
|
|
369
|
+
this.log = log;
|
|
370
|
+
this.txHost = txHost;
|
|
371
|
+
}
|
|
372
|
+
/** One attempt ({@link runTitleJob}); `signal` aborts the call (the worker stopping). */
|
|
373
|
+
run(conversationId, attempt, signal) {
|
|
374
|
+
const kdb = this.kdb;
|
|
375
|
+
const hooks = this.host?.hooks;
|
|
376
|
+
return runTitleJob({
|
|
377
|
+
get db() {
|
|
378
|
+
return kdb.db;
|
|
379
|
+
},
|
|
380
|
+
eventLog: this.eventLog,
|
|
381
|
+
purposes: this.purposes,
|
|
382
|
+
log: this.log,
|
|
383
|
+
...(hooks !== undefined && { hooks }),
|
|
384
|
+
...(this.usageReport !== undefined && { usageReport: this.usageReport }),
|
|
385
|
+
...(signal !== undefined && { signal }),
|
|
386
|
+
writes: this,
|
|
387
|
+
}, conversationId, attempt);
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Appends the call's `usage` event and writes the title while `title_source IS NULL` (a rename
|
|
391
|
+
* wins), in one transaction.
|
|
392
|
+
*/
|
|
393
|
+
async writeResult(conversationId, attempt, out, title) {
|
|
394
|
+
// Append first: it locks the conversation row FOR UPDATE before this transaction touches it.
|
|
395
|
+
// Updating the title first held the row FOR NO KEY UPDATE, which lets in another
|
|
396
|
+
// transaction's foreign key check (FOR KEY SHARE, e.g. inserting an approval); the append's
|
|
397
|
+
// FOR UPDATE then waited for that one while it waited for the title row: 40P01
|
|
398
|
+
const [ev] = await this.eventLog.appendIn(conversationId, [usageEvent(attempt, out)]);
|
|
399
|
+
const row = title === null
|
|
400
|
+
? undefined
|
|
401
|
+
: await this.kdb.db
|
|
402
|
+
.updateTable("conversations")
|
|
403
|
+
.set({ title, title_source: "generated" })
|
|
404
|
+
.where("id", "=", conversationId)
|
|
405
|
+
.where("title_source", "is", null)
|
|
406
|
+
.returning("id")
|
|
407
|
+
.executeTakeFirst();
|
|
408
|
+
return { written: row !== undefined, usage: ev };
|
|
409
|
+
}
|
|
410
|
+
/** The `hook.denied` audit row of a denied title call. */
|
|
411
|
+
async auditDenied(entry) {
|
|
412
|
+
await audit(this.kdb.db, entry);
|
|
413
|
+
}
|
|
414
|
+
};
|
|
415
|
+
__decorate([
|
|
416
|
+
Transactional({ propagation: "requires_new" })
|
|
417
|
+
], TitleGenerator.prototype, "writeResult", null);
|
|
418
|
+
__decorate([
|
|
419
|
+
Transactional({ propagation: "requires_new" })
|
|
420
|
+
], TitleGenerator.prototype, "auditDenied", null);
|
|
421
|
+
TitleGenerator = __decorate([
|
|
422
|
+
Injectable(),
|
|
423
|
+
__param(0, Inject(KernelDb)),
|
|
424
|
+
__param(1, Inject(EventLog)),
|
|
425
|
+
__param(2, Inject(ModelPurposesService)),
|
|
426
|
+
__param(3, Inject(ExtensionHost)),
|
|
427
|
+
__param(4, Inject(UsageReporter)),
|
|
428
|
+
__param(5, Inject(KERNEL_LOGGER)),
|
|
429
|
+
__param(6, Inject(TransactionHost))
|
|
430
|
+
], TitleGenerator);
|
|
431
|
+
export { TitleGenerator };
|
|
347
432
|
/**
|
|
348
433
|
* The title queue: `maybeEnqueue` on any role (called by the run worker after a completed run),
|
|
349
|
-
*
|
|
350
|
-
* enqueues the next attempt.
|
|
434
|
+
* consumed on the `worker` role by its `@Processor`. One attempt per job, no BullMQ retries: the
|
|
435
|
+
* next completed run enqueues the next attempt.
|
|
351
436
|
*/
|
|
352
|
-
|
|
353
|
-
|
|
437
|
+
let TitleQueue = class TitleQueue {
|
|
438
|
+
kdb;
|
|
354
439
|
queue;
|
|
355
|
-
|
|
440
|
+
generator;
|
|
441
|
+
log;
|
|
356
442
|
worker;
|
|
357
|
-
workerConn;
|
|
358
443
|
closed = false;
|
|
359
444
|
stopping = new AbortController();
|
|
360
|
-
constructor(
|
|
361
|
-
this.
|
|
445
|
+
constructor(kdb, queue, generator, log) {
|
|
446
|
+
this.kdb = kdb;
|
|
447
|
+
this.queue = queue;
|
|
448
|
+
this.generator = generator;
|
|
449
|
+
this.log = log;
|
|
450
|
+
queue.on("error", (err) => this.log.error("title queue error", { err }));
|
|
362
451
|
}
|
|
363
452
|
/** Enqueues the next title attempt when one is due. Never throws (logs instead). */
|
|
364
453
|
async maybeEnqueue(conversationId) {
|
|
365
454
|
if (this.closed)
|
|
366
455
|
return;
|
|
367
456
|
try {
|
|
368
|
-
const attempt = await titleAttemptDue(this.
|
|
457
|
+
const attempt = await titleAttemptDue(this.kdb.db, conversationId);
|
|
369
458
|
if (attempt === null)
|
|
370
459
|
return;
|
|
371
|
-
await this.
|
|
460
|
+
await this.queue.add(JOB, { conversationId, attempt }, {
|
|
372
461
|
jobId: titleJobId(conversationId, attempt),
|
|
373
462
|
attempts: 1,
|
|
374
463
|
removeOnComplete: true,
|
|
@@ -376,48 +465,55 @@ export class TitleQueue {
|
|
|
376
465
|
});
|
|
377
466
|
}
|
|
378
467
|
catch (err) {
|
|
379
|
-
this.
|
|
468
|
+
this.log.warn("cannot enqueue conversation title", { conversationId, err });
|
|
380
469
|
}
|
|
381
470
|
}
|
|
382
|
-
|
|
471
|
+
/** Starts consuming (worker role only): `worker` is the `@Processor` worker of {@link TITLE_QUEUE}. */
|
|
472
|
+
startWorker(worker) {
|
|
383
473
|
if (this.worker || this.closed)
|
|
384
474
|
return;
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
stalledInterval: stalledIntervalMs,
|
|
392
|
-
maxStalledCount: 1,
|
|
393
|
-
});
|
|
394
|
-
this.worker.on("error", (err) => this.d.log.error("title worker error", { err }));
|
|
475
|
+
this.worker = worker;
|
|
476
|
+
void worker.run().catch((err) => this.log.error("title worker error", { err }));
|
|
477
|
+
}
|
|
478
|
+
/** The worker's `error` event. */
|
|
479
|
+
onError(err) {
|
|
480
|
+
this.log.error("title worker error", { err });
|
|
395
481
|
}
|
|
482
|
+
/** One title job (the `@Processor` calls it). */
|
|
396
483
|
async process(j) {
|
|
397
|
-
await
|
|
484
|
+
await this.generator.run(j.data.conversationId, j.data.attempt, this.stopping.signal);
|
|
398
485
|
}
|
|
486
|
+
/** Stops: no more enqueues, the call in flight is aborted, the worker closes. */
|
|
399
487
|
async stop() {
|
|
400
488
|
this.closed = true;
|
|
401
489
|
this.stopping.abort();
|
|
402
490
|
const w = this.worker;
|
|
403
491
|
this.worker = undefined;
|
|
404
492
|
await w?.close().catch(() => { });
|
|
405
|
-
const q = this.queue;
|
|
406
|
-
this.queue = undefined;
|
|
407
|
-
await q?.close().catch(() => { });
|
|
408
|
-
for (const c of [this.workerConn, this.queueConn]) {
|
|
409
|
-
if (c)
|
|
410
|
-
await c.quit().catch(() => c.disconnect());
|
|
411
|
-
}
|
|
412
|
-
this.workerConn = undefined;
|
|
413
|
-
this.queueConn = undefined;
|
|
414
493
|
}
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
}
|
|
494
|
+
};
|
|
495
|
+
TitleQueue = __decorate([
|
|
496
|
+
Injectable(),
|
|
497
|
+
__param(0, Inject(KernelDb)),
|
|
498
|
+
__param(1, Inject(getQueueToken(TITLE_QUEUE))),
|
|
499
|
+
__param(2, Inject(TitleGenerator)),
|
|
500
|
+
__param(3, Inject(KERNEL_LOGGER))
|
|
501
|
+
], TitleQueue);
|
|
502
|
+
export { TitleQueue };
|
|
503
|
+
/** Conversation titles: the queue and the job (consumed on the worker role). */
|
|
504
|
+
let TitlesModule = class TitlesModule {
|
|
505
|
+
};
|
|
506
|
+
TitlesModule = __decorate([
|
|
507
|
+
Module({
|
|
508
|
+
imports: [
|
|
509
|
+
EventLogModule,
|
|
510
|
+
ModelsModule,
|
|
511
|
+
ExtensionsModule,
|
|
512
|
+
UsageReportModule,
|
|
513
|
+
QueueModule.registerQueue(TITLE_QUEUE),
|
|
514
|
+
],
|
|
515
|
+
providers: [TitleGenerator, TitleQueue],
|
|
516
|
+
exports: [TitleQueue],
|
|
517
|
+
})
|
|
518
|
+
], TitlesModule);
|
|
519
|
+
export { TitlesModule };
|
package/dist/ctx/bus.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { runOutsideTransaction } from "../infra/database/transaction-host.js";
|
|
2
|
+
import { withoutLogContext } from "../log-context.js";
|
|
1
3
|
import { assertNamespace } from "./namespace.js";
|
|
2
4
|
/** 未注入 logger 时的兜底:输出到 stderr。 */
|
|
3
5
|
const consoleLog = {
|
|
@@ -19,9 +21,13 @@ export function createBusSubscriber(subFactory, log = consoleLog) {
|
|
|
19
21
|
return conn;
|
|
20
22
|
const c = subFactory();
|
|
21
23
|
c.on("message", (channel, message) => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
// the connection's callbacks carry the async context of the first subscribe (a request's
|
|
25
|
+
// log fields, possibly an open transaction): every handler starts from an empty one
|
|
26
|
+
runOutsideTransaction(() => withoutLogContext(() => {
|
|
27
|
+
for (const h of [...(channels.get(channel)?.handlers ?? [])]) {
|
|
28
|
+
invokeIsolated(log, channel, () => h(message));
|
|
29
|
+
}
|
|
30
|
+
}));
|
|
25
31
|
});
|
|
26
32
|
c.on("error", (err) => log.error("bus subscriber connection error", { err }));
|
|
27
33
|
conn = c;
|
package/dist/ctx/create-ctx.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ import type { Redis } from "ioredis";
|
|
|
3
3
|
import { Kysely } from "kysely";
|
|
4
4
|
import { type RegisteredHook } from "../extensions/hooks.js";
|
|
5
5
|
import { RegistrationLedger } from "../extensions/ledger.js";
|
|
6
|
+
import type { LockService } from "../infra/lock/lock.service.js";
|
|
7
|
+
import type { EmbedTokens } from "../ui/embed-token.js";
|
|
6
8
|
import { type UiActionHandler, type UiRender } from "../ui/registry.js";
|
|
7
9
|
import { type BusSubscriber } from "./bus.js";
|
|
8
10
|
import { type Keyring } from "./secrets.js";
|
|
@@ -13,9 +15,13 @@ export interface KernelDeps {
|
|
|
13
15
|
/** PG 建立连接的超时(迁移器的独立连接使用)。 */
|
|
14
16
|
connectTimeoutMs?: number;
|
|
15
17
|
redis: Redis;
|
|
18
|
+
/** The kernel's lock primitives (`ctx.lock`, the dedupe markers). */
|
|
19
|
+
locks: Pick<LockService, "lease" | "renew" | "releaseIf">;
|
|
16
20
|
busSubscriber: BusSubscriber;
|
|
17
21
|
redisUrl: string;
|
|
18
22
|
keyring: Keyring;
|
|
23
|
+
/** Verifies embed tokens (`ctx.ui` embed requests; the one `EmbedTokens` provider). */
|
|
24
|
+
embedTokens: Pick<EmbedTokens, "verify">;
|
|
19
25
|
runWorkers: boolean;
|
|
20
26
|
/** 内核 logger(`debug` 可选:插件 Logger 没有它,测试可不给)。 */
|
|
21
27
|
log: Logger & {
|
package/dist/ctx/create-ctx.js
CHANGED
|
@@ -6,8 +6,7 @@ import { enabledExtensionsQuery, isExtensionEnabled } from "../extensions/enable
|
|
|
6
6
|
import { checkHookRegistration } from "../extensions/hooks.js";
|
|
7
7
|
import { RegistrationLedger } from "../extensions/ledger.js";
|
|
8
8
|
import { audit } from "../identity/audit.js";
|
|
9
|
-
import {
|
|
10
|
-
import { EmbedTokens } from "../ui/embed-token.js";
|
|
9
|
+
import { PrefixedStorage } from "../storage/storage.service.js";
|
|
11
10
|
import { canUsePlace, orgUiTopic, PluginUiRegistration, } from "../ui/registry.js";
|
|
12
11
|
import { createBus } from "./bus.js";
|
|
13
12
|
import { createKv } from "./kv.js";
|
|
@@ -58,16 +57,15 @@ async function invalidateTargetOk(db, plugin, orgId, conversationId) {
|
|
|
58
57
|
/** 越权审计去重键的 TTL:同一插件同一项在此期间只记一次。 */
|
|
59
58
|
const DENIAL_DEDUPE_TTL_SECONDS = 30 * 24 * 3600;
|
|
60
59
|
/**
|
|
61
|
-
* Records one `extension.permission_denied` audit, deduplicated per (extension, item) through
|
|
62
|
-
*
|
|
60
|
+
* Records one `extension.permission_denied` audit, deduplicated per (extension, item) through a
|
|
61
|
+
* Redis marker set unless present (`LockService.lease`; once across replicas). When the audit write fails, the dedup key is removed (the next
|
|
63
62
|
* violation tries again) and a warning is logged; nothing is thrown to the extension (it already got
|
|
64
63
|
* an ExtensionPermissionError).
|
|
65
64
|
*/
|
|
66
65
|
async function recordDenial(deps, plugin, item) {
|
|
67
66
|
const key = `capk:plugin-permission-denied:${plugin}:${item}`;
|
|
68
67
|
try {
|
|
69
|
-
|
|
70
|
-
if (first !== "OK")
|
|
68
|
+
if (!(await deps.locks.lease(key, "1", DENIAL_DEDUPE_TTL_SECONDS * 1000)))
|
|
71
69
|
return;
|
|
72
70
|
try {
|
|
73
71
|
await audit(kernelDb(deps.db), {
|
|
@@ -195,7 +193,7 @@ export function createExtensionContext(deps, manifest, deploymentConfig, extensi
|
|
|
195
193
|
const lifecycle = new AbortController();
|
|
196
194
|
/** 撤销时队列 worker 排空的截止时刻(epoch 毫秒);undefined = 一直等(停机路径)。 */
|
|
197
195
|
let drainDeadline;
|
|
198
|
-
const lock = createLock(deps.
|
|
196
|
+
const lock = createLock(deps.locks, name);
|
|
199
197
|
const tag = (fields) => ({ ...fields, plugin: name });
|
|
200
198
|
let closing;
|
|
201
199
|
const perms = manifest.permissions ?? {};
|
|
@@ -214,7 +212,7 @@ export function createExtensionContext(deps, manifest, deploymentConfig, extensi
|
|
|
214
212
|
// 键加前缀 plugins/<name>/<orgId>/。没有提供方时各方法 reject storage.unavailable
|
|
215
213
|
// (宿主不会加载这样的插件,见 approvals.ts;单独构造 ctx 的测试会走到这里)
|
|
216
214
|
const storageApi = perms.storage
|
|
217
|
-
? new
|
|
215
|
+
? new PrefixedStorage({
|
|
218
216
|
provider: () => extensionPointAccess.providers(OBJECT_STORE_EXTENSION_POINT)[0]?.impl,
|
|
219
217
|
plugins: async () => [name],
|
|
220
218
|
}).forPlugin(name)
|
|
@@ -229,7 +227,7 @@ export function createExtensionContext(deps, manifest, deploymentConfig, extensi
|
|
|
229
227
|
...(manifest.optional ?? []),
|
|
230
228
|
]);
|
|
231
229
|
const uiReg = new PluginUiRegistration(manifest, deny);
|
|
232
|
-
const embedTokens =
|
|
230
|
+
const embedTokens = deps.embedTokens;
|
|
233
231
|
const uiPlaces = new Map((manifest.ui ?? []).map((c) => [c.id, c.place]));
|
|
234
232
|
/** 校验能力可取用(非 brokered、已在清单声明),返回其登记信息。 */
|
|
235
233
|
const checkExtensionPoint = (ref) => {
|
package/dist/ctx/lock.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { ExtensionContext } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import type {
|
|
3
|
-
/**
|
|
4
|
-
|
|
2
|
+
import type { LockService } from "../infra/lock/lock.service.js";
|
|
3
|
+
/**
|
|
4
|
+
* Builds a namespaced `ctx.lock` on the kernel's lock primitives (`LockService.lease / renew /
|
|
5
|
+
* releaseIf`): key `cap:<namespace>:lock:<key>`, a random token per acquisition, so renew and
|
|
6
|
+
* release only touch a lock this holder still owns. The extension renews it itself (no timer).
|
|
7
|
+
*/
|
|
8
|
+
export declare function createLock(locks: Pick<LockService, "lease" | "renew" | "releaseIf">, namespace: string): ExtensionContext["lock"];
|
package/dist/ctx/lock.js
CHANGED
|
@@ -1,19 +1,11 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { assertNamespace } from "./namespace.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const RELEASE = `
|
|
10
|
-
if redis.call('GET', KEYS[1]) == ARGV[1] then
|
|
11
|
-
return redis.call('DEL', KEYS[1])
|
|
12
|
-
end
|
|
13
|
-
return 0
|
|
14
|
-
`;
|
|
15
|
-
/** 创建带命名空间的 ctx.lock:键为 `cap:<namespace>:lock:<key>`,token 比对保证只操作自己持有的锁。 */
|
|
16
|
-
export function createLock(redis, namespace) {
|
|
3
|
+
/**
|
|
4
|
+
* Builds a namespaced `ctx.lock` on the kernel's lock primitives (`LockService.lease / renew /
|
|
5
|
+
* releaseIf`): key `cap:<namespace>:lock:<key>`, a random token per acquisition, so renew and
|
|
6
|
+
* release only touch a lock this holder still owns. The extension renews it itself (no timer).
|
|
7
|
+
*/
|
|
8
|
+
export function createLock(locks, namespace) {
|
|
17
9
|
assertNamespace(namespace);
|
|
18
10
|
return {
|
|
19
11
|
async acquire(key, opts) {
|
|
@@ -23,15 +15,12 @@ export function createLock(redis, namespace) {
|
|
|
23
15
|
}
|
|
24
16
|
const redisKey = `cap:${namespace}:lock:${key}`;
|
|
25
17
|
const token = randomUUID();
|
|
26
|
-
|
|
27
|
-
if (ok !== "OK")
|
|
18
|
+
if (!(await locks.lease(redisKey, token, ttlMs)))
|
|
28
19
|
return null;
|
|
29
20
|
return {
|
|
30
|
-
|
|
31
|
-
return Number(await redis.eval(RENEW, 1, redisKey, token, ttlMs)) === 1;
|
|
32
|
-
},
|
|
21
|
+
renew: () => locks.renew(redisKey, token, ttlMs),
|
|
33
22
|
async release() {
|
|
34
|
-
await
|
|
23
|
+
await locks.releaseIf(redisKey, token);
|
|
35
24
|
},
|
|
36
25
|
};
|
|
37
26
|
},
|
package/dist/ctx/secrets.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { ExtensionContext } from "@capybara-hq/plugin-sdk";
|
|
2
2
|
import type { Kysely } from "kysely";
|
|
3
|
+
import type { KernelDb } from "../infra/database/kernel-db.js";
|
|
4
|
+
import type { TransactionHost } from "../infra/database/transaction-host.js";
|
|
3
5
|
/** 主密钥环:current 用于新包装,previous 仅用于解包。原始密钥只存在于闭包内。 */
|
|
4
6
|
export interface Keyring {
|
|
5
7
|
readonly currentId: string;
|
|
@@ -40,6 +42,12 @@ export type KernelSecrets = ExtensionContext["secrets"] & {
|
|
|
40
42
|
* `db` 可以是 Kysely 事务:此时读写(含首次创建组织数据密钥)都在该事务内。
|
|
41
43
|
*/
|
|
42
44
|
export declare function createSecrets(db: AnyDb, keyring: Keyring, namespace: string): KernelSecrets;
|
|
43
|
-
/**
|
|
44
|
-
|
|
45
|
+
/**
|
|
46
|
+
* 把非当前主密钥包装的数据密钥改用当前主密钥重新包装,返回处理条数。One transaction over the given
|
|
47
|
+
* handles (`KernelDb` + its `TransactionHost`, as `DatabaseModule` provides them).
|
|
48
|
+
*/
|
|
49
|
+
export declare function rewrapDataKeys(handles: {
|
|
50
|
+
db: Pick<KernelDb, "db">;
|
|
51
|
+
txHost: Pick<TransactionHost, "run">;
|
|
52
|
+
}, keyring: Keyring): Promise<number>;
|
|
45
53
|
export {};
|
package/dist/ctx/secrets.js
CHANGED
|
@@ -142,9 +142,13 @@ export function createSecrets(db, keyring, namespace) {
|
|
|
142
142
|
},
|
|
143
143
|
};
|
|
144
144
|
}
|
|
145
|
-
/**
|
|
146
|
-
|
|
147
|
-
|
|
145
|
+
/**
|
|
146
|
+
* 把非当前主密钥包装的数据密钥改用当前主密钥重新包装,返回处理条数。One transaction over the given
|
|
147
|
+
* handles (`KernelDb` + its `TransactionHost`, as `DatabaseModule` provides them).
|
|
148
|
+
*/
|
|
149
|
+
export async function rewrapDataKeys(handles, keyring) {
|
|
150
|
+
return handles.txHost.run(async () => {
|
|
151
|
+
const trx = handles.db.db;
|
|
148
152
|
const rows = await trx
|
|
149
153
|
.withSchema("capybara")
|
|
150
154
|
.selectFrom("org_data_keys")
|
|
@@ -269,7 +269,7 @@ export interface RunsTable {
|
|
|
269
269
|
/** 0054: when this run's `subagents` wait expires (set while it waits on sub-agents). */
|
|
270
270
|
wait_expires_at: TsNullable;
|
|
271
271
|
}
|
|
272
|
-
/** 0053: one row per sub-agent dispatch (an `
|
|
272
|
+
/** 0053: one row per sub-agent dispatch (an `Agent` call of a parent run). */
|
|
273
273
|
export interface SubagentDispatchesTable {
|
|
274
274
|
parent_run_id: string;
|
|
275
275
|
parent_call_id: string;
|
|
@@ -400,7 +400,7 @@ export interface ApprovalsTable {
|
|
|
400
400
|
/** 0056: the reason given with a denial (null without one). */
|
|
401
401
|
deny_reason: Generated<string | null>;
|
|
402
402
|
}
|
|
403
|
-
/** 0010_tools.sql:
|
|
403
|
+
/** 0010_tools.sql:AskUserQuestion 提问。 */
|
|
404
404
|
export interface QuestionsTable {
|
|
405
405
|
id: string;
|
|
406
406
|
org_id: string;
|
|
@@ -1116,7 +1116,7 @@ export interface PluginInstallComponentsTable {
|
|
|
1116
1116
|
*/
|
|
1117
1117
|
dropped: ColumnType<boolean, boolean | undefined, boolean>;
|
|
1118
1118
|
}
|
|
1119
|
-
export type
|
|
1119
|
+
export type KernelSchemaDb = Kysely<KernelDatabase>;
|
|
1120
1120
|
/** 把无类型的 Kysely 实例收窄成内核 schema 视图(`capybara`)。 */
|
|
1121
|
-
export declare function kernelDb(db: Kysely<any>):
|
|
1121
|
+
export declare function kernelDb(db: Kysely<any>): KernelSchemaDb;
|
|
1122
1122
|
export {};
|
package/dist/db/pool.d.ts
CHANGED
|
@@ -18,4 +18,9 @@ export declare function pgConnectOptions(cfg: {
|
|
|
18
18
|
*/
|
|
19
19
|
export declare function createDb(url: string, poolMax: number, onError?: (err: Error) => void, opts?: {
|
|
20
20
|
connectTimeoutMs?: number | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Error of a client while it is checked out: pg-pool drops its own listener on checkout, so
|
|
23
|
+
* without this a backend killed between two statements is an uncaught exception.
|
|
24
|
+
*/
|
|
25
|
+
onClientError?: ((err: Error) => void) | undefined;
|
|
21
26
|
}): Kysely<any>;
|
package/dist/db/pool.js
CHANGED
|
@@ -24,5 +24,6 @@ export function createDb(url, poolMax, onError = (err) => console.error("[db] id
|
|
|
24
24
|
...pgConnectOptions(opts),
|
|
25
25
|
});
|
|
26
26
|
pool.on("error", onError);
|
|
27
|
+
pool.on("connect", (client) => client.on("error", opts.onClientError ?? onError));
|
|
27
28
|
return new Kysely({ dialect: new PostgresDialect({ pool }) });
|
|
28
29
|
}
|
package/dist/errors.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export declare const ERROR_CODES: {
|
|
|
8
8
|
readonly validation_failed: 400;
|
|
9
9
|
readonly forbidden: 403;
|
|
10
10
|
readonly conflict: 409;
|
|
11
|
+
readonly "lock.acquire_failed": 409;
|
|
11
12
|
readonly payload_too_large: 413;
|
|
12
13
|
readonly unsupported_media_type: 415;
|
|
13
14
|
readonly rate_limited: 429;
|
package/dist/errors.js
CHANGED
package/dist/evals/budget.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { ModelUsage } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import type {
|
|
2
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
3
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
4
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
3
5
|
/**
|
|
4
6
|
* 评测运行的 token 预算(C7):`eval_runs.tokens_used` 在 PG 里原子累加,达到 `token_cap` 的同一条语句把
|
|
5
7
|
* 状态置为 `capped`;worker 每次请求前查 {@link runActive},不活跃就不再发新请求。在途请求可以越过上限,
|
|
@@ -13,7 +15,7 @@ export declare const usageTokens: (u: ModelUsage) => number;
|
|
|
13
15
|
* 累加用量:`UPDATE … RETURNING`,累加后 ≥ 上限且运行仍在执行 → 同一语句置 `capped`、记 `finished_at`。
|
|
14
16
|
* 运行已不在(被删)时返回 `{ used: 0, capped: true }`,调用方同样停下。
|
|
15
17
|
*/
|
|
16
|
-
export declare function consumeTokens(db:
|
|
18
|
+
export declare function consumeTokens(db: KernelSchemaDb, runId: string, tokens: number): Promise<{
|
|
17
19
|
used: number;
|
|
18
20
|
capped: boolean;
|
|
19
21
|
}>;
|
|
@@ -27,35 +29,54 @@ export declare const TOO_MANY_ERRORS: {
|
|
|
27
29
|
* 同一语句置 `failed`、记原因与 `finished_at`;成功 → 清零。返回运行是否因此被熔断。
|
|
28
30
|
* 多个任务并发时「连续」按写入顺序计(近似),足以挡住「每个请求都失败」的运行。
|
|
29
31
|
*/
|
|
30
|
-
export declare function recordOutcome(db:
|
|
32
|
+
export declare function recordOutcome(db: KernelSchemaDb, runId: string, ok: boolean, maxConsecutive: number): Promise<{
|
|
31
33
|
tripped: boolean;
|
|
32
34
|
}>;
|
|
33
35
|
/**
|
|
34
36
|
* 运行停下(取消 / 越限 / 熔断 / 删除评测集)时:还在等评委的结果(`judge_status = 'pending'`)记 `skipped`,
|
|
35
37
|
* 否则这些用例永远算不上做完。给了 `caseId` 只处理该用例。在途的评委请求做完后写不进来(条件是 pending),用量照样计入。
|
|
36
38
|
*/
|
|
37
|
-
export declare function skipPendingJudges(db:
|
|
38
|
-
/**
|
|
39
|
-
* 重算 `cases_done` = 结果全部结束、且没有等评委的结果的用例数(幂等:任务重做不会重复计数),达到 `cases_total` 且运行仍在执行 →
|
|
40
|
-
* `completed`。先锁运行行再数(READ COMMITTED 下新语句看得到其他任务已提交的结果),并发完成的任务不会互相覆盖。
|
|
41
|
-
* worker 每做完一个用例、取消、入队失败时都调用。在事务里调用时锁随事务释放。
|
|
42
|
-
*/
|
|
43
|
-
export declare function recountCases(db: KernelDb, runId: string): Promise<void>;
|
|
39
|
+
export declare function skipPendingJudges(db: KernelSchemaDb, runId: string, caseId?: string): Promise<void>;
|
|
44
40
|
/**
|
|
45
41
|
* 运行仍在执行(queued / running),且所属组织与评测集的 agent 都没有删除:取消、达到上限、已结束、运行行已删除、
|
|
46
42
|
* 组织或 agent 已删除都为 false(删除组织 / agent 时会显式取消运行,这里再兜一次底,挡住删除与请求之间的竞争)。
|
|
47
43
|
*/
|
|
48
|
-
export declare function runActive(db:
|
|
44
|
+
export declare function runActive(db: KernelSchemaDb, runId: string): Promise<boolean>;
|
|
49
45
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
46
|
+
* The eval run bookkeeping that needs a transaction: the progress recount (it locks the run row)
|
|
47
|
+
* and the cancellation of an org's or agent's runs when it is deleted. One provider, shared by the
|
|
48
|
+
* evals, the agents and the orgs.
|
|
53
49
|
*/
|
|
54
|
-
export declare
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
50
|
+
export declare class EvalBudget {
|
|
51
|
+
private readonly db;
|
|
52
|
+
readonly txHost: TransactionHost;
|
|
53
|
+
constructor(db: KernelDb, txHost: TransactionHost);
|
|
54
|
+
/**
|
|
55
|
+
* 重算 `cases_done` = 结果全部结束、且没有等评委的结果的用例数(幂等:任务重做不会重复计数),达到 `cases_total` 且运行仍在执行 →
|
|
56
|
+
* `completed`。先锁运行行再数(READ COMMITTED 下新语句看得到其他任务已提交的结果),并发完成的任务不会互相覆盖。
|
|
57
|
+
* worker 每做完一个用例、取消、入队失败时都调用。Joins the caller's transaction (the lock is released with it),
|
|
58
|
+
* else runs in its own.
|
|
59
|
+
*/
|
|
60
|
+
recountCases(runId: string): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* 删除组织或 agent 时(调用方的事务内)取消其在执行的评测运行:运行置 `cancelled`,未开始的结果 `skipped`、
|
|
63
|
+
* 等评委的记 `skipped`,重算进度,每个运行写审计 `eval.run_cancelled`(detail 带原因)。在途请求做完后写不进新的请求
|
|
64
|
+
* (worker 每次请求前查 {@link runActive})。运行创建者离开组织不取消(Ruling S1-b:管理员的评测运行是组织的工作)。
|
|
65
|
+
*/
|
|
66
|
+
cancelRuns(scope: {
|
|
67
|
+
orgId: string;
|
|
68
|
+
agentId?: string;
|
|
69
|
+
}, actor: {
|
|
70
|
+
accountId: string;
|
|
71
|
+
tokenId?: string;
|
|
72
|
+
}, reason: "org_deleted" | "agent_deleted"): Promise<string[]>;
|
|
73
|
+
/**
|
|
74
|
+
* A run that stopped (cancelled, its set deleted): its results not started yet are `skipped`,
|
|
75
|
+
* the pending judges too, and the progress is recounted, in the caller's transaction.
|
|
76
|
+
*/
|
|
77
|
+
skipRun(runId: string): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
/** {@link EvalBudget} on its own: the agents and the orgs import it without the evals. */
|
|
80
|
+
export declare class EvalBudgetModule {
|
|
81
|
+
}
|
|
61
82
|
export declare const addUsage: (a: ModelUsage, b: ModelUsage) => ModelUsage;
|