@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,8 @@
|
|
|
1
1
|
import { isModelError, isRetryableKind, ModelError, sanitizeParams, } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import { sql } from "kysely";
|
|
3
2
|
import { MEDIA_EXCLUDED_MAX_IDS } from "../conversations/events.js";
|
|
4
3
|
import { ApiError } from "../errors.js";
|
|
5
|
-
import { usageTokens } from "../evals/budget.js";
|
|
6
4
|
import { ExtensionUnloadedError } from "../extensions/inflight.js";
|
|
7
|
-
import { audit } from "../identity/audit.js";
|
|
8
5
|
import { hasInvocation, skillLoadOffered } from "../skills/catalog.js";
|
|
9
|
-
import { recordToolSpecs } from "../tools/specs.js";
|
|
10
6
|
import { buildModelRequest, latestSummary, mediaRefs, planMedia, } from "./context/build.js";
|
|
11
7
|
import { acceptSummary, buildCompactionRequest, compactionBackoff, compactionPlan, shouldCompact, } from "./context/compaction.js";
|
|
12
8
|
import { guardToolPairs } from "./context/pairing.js";
|
|
@@ -114,7 +110,7 @@ async function runStep(deps, input, wrapUp) {
|
|
|
114
110
|
}
|
|
115
111
|
return existing;
|
|
116
112
|
}
|
|
117
|
-
const runtime = deps.config().runtime;
|
|
113
|
+
const runtime = deps.config.get().runtime;
|
|
118
114
|
/** 本次尝试已流出的文本;中止时写进 aborted 的 assistant_message。 */
|
|
119
115
|
const streamed = { text: "" };
|
|
120
116
|
try {
|
|
@@ -132,7 +128,7 @@ async function runStep(deps, input, wrapUp) {
|
|
|
132
128
|
}
|
|
133
129
|
// 每步实时解析(连接器 / 插件状态可能在步骤之间变化),解析结果记在 model_call;收尾调用同样带工具
|
|
134
130
|
// a skills catalog snapshot (Ruling M17; an empty one too) or a person's skill invocation in the
|
|
135
|
-
// log →
|
|
131
|
+
// log → Skill is offered (see skillLoadOffered)
|
|
136
132
|
const resolved = await deps.tools.forAgent(input.orgId, {
|
|
137
133
|
tools: input.agent.tools ?? [],
|
|
138
134
|
subagents: input.agent.subagents,
|
|
@@ -145,7 +141,7 @@ async function runStep(deps, input, wrapUp) {
|
|
|
145
141
|
looked: new Set(),
|
|
146
142
|
info: new Map(),
|
|
147
143
|
bytes: new Map(),
|
|
148
|
-
run: input.mediaCache ?? new MediaCache(deps.config().attachments.requestMediaBytes),
|
|
144
|
+
run: input.mediaCache ?? new MediaCache(deps.config.get().attachments.requestMediaBytes),
|
|
149
145
|
},
|
|
150
146
|
};
|
|
151
147
|
const beforeCompaction = events.length;
|
|
@@ -240,29 +236,7 @@ async function appendCounted(deps, input, events) {
|
|
|
240
236
|
const { conversationId, parentRunId } = input;
|
|
241
237
|
if (parentRunId === undefined)
|
|
242
238
|
return deps.eventLog.append(conversationId, events);
|
|
243
|
-
const out = await deps.
|
|
244
|
-
// the conversation row lock the append takes anyway, taken first to read the seq before it
|
|
245
|
-
const before = await t
|
|
246
|
-
.selectFrom("conversations")
|
|
247
|
-
.select("last_seq")
|
|
248
|
-
.where("id", "=", conversationId)
|
|
249
|
-
.forUpdate()
|
|
250
|
-
.executeTakeFirstOrThrow();
|
|
251
|
-
const written = await deps.eventLog.append(conversationId, events, t);
|
|
252
|
-
const fresh = written.filter((e) => e.seq > Number(before.last_seq));
|
|
253
|
-
let tokens = 0;
|
|
254
|
-
for (const e of fresh)
|
|
255
|
-
if (e.type === "usage")
|
|
256
|
-
tokens += usageTokens(e.payload);
|
|
257
|
-
if (tokens > 0) {
|
|
258
|
-
await t
|
|
259
|
-
.updateTable("runs")
|
|
260
|
-
.set({ subagent_tokens_used: sql `subagent_tokens_used + ${tokens}` })
|
|
261
|
-
.where("id", "=", parentRunId)
|
|
262
|
-
.execute();
|
|
263
|
-
}
|
|
264
|
-
return { written, toSeq: fresh.length > 0 ? Math.max(...fresh.map((e) => e.seq)) : null };
|
|
265
|
-
});
|
|
239
|
+
const out = await deps.stepLog.appendCounted(conversationId, parentRunId, events);
|
|
266
240
|
if (out.toSeq !== null)
|
|
267
241
|
await deps.eventLog.notify(conversationId, out.toSeq);
|
|
268
242
|
return out.written;
|
|
@@ -401,7 +375,7 @@ function buildRequest(deps, events, input, info, params, runtime, tools, wrapUp)
|
|
|
401
375
|
...(wrapUp && { toolChoice: "none" }),
|
|
402
376
|
mediaInfo: tools.media.info,
|
|
403
377
|
media: tools.media.bytes,
|
|
404
|
-
mediaBudgetBytes: deps.config().attachments.requestMediaBytes,
|
|
378
|
+
mediaBudgetBytes: deps.config.get().attachments.requestMediaBytes,
|
|
405
379
|
defaultMaxOutputTokens: runtime.maxOutputTokens,
|
|
406
380
|
});
|
|
407
381
|
return {
|
|
@@ -434,7 +408,7 @@ async function loadMedia(deps, input, events, info, tools) {
|
|
|
434
408
|
for (const id of look)
|
|
435
409
|
cache.looked.add(id);
|
|
436
410
|
}
|
|
437
|
-
const budget = deps.config().attachments.requestMediaBytes;
|
|
411
|
+
const budget = deps.config.get().attachments.requestMediaBytes;
|
|
438
412
|
const plan = planMedia(events, info, cache.info, budget);
|
|
439
413
|
const runKey = (id) => MediaCache.key(id, cache.info.get(id), plan.caps.get(id));
|
|
440
414
|
const need = [];
|
|
@@ -589,11 +563,7 @@ async function maybeCompact(deps, input, events, runtime, tools) {
|
|
|
589
563
|
plugin: verdict.plugin,
|
|
590
564
|
cause: verdict.cause,
|
|
591
565
|
});
|
|
592
|
-
const written = await deps.
|
|
593
|
-
const out = await deps.eventLog.append(conversationId, [failed], t);
|
|
594
|
-
await audit(t, entry);
|
|
595
|
-
return out;
|
|
596
|
-
});
|
|
566
|
+
const written = await deps.stepLog.appendAudited(conversationId, [failed], entry);
|
|
597
567
|
if (written.length > 0) {
|
|
598
568
|
await deps.eventLog.notify(conversationId, Math.max(...written.map((e) => e.seq)));
|
|
599
569
|
}
|
|
@@ -783,29 +753,26 @@ async function ladder(deps, input, events, runtime, tools, wrapUp, streamed) {
|
|
|
783
753
|
// 请求里的工具定义(含目录里的)按指纹存进 tool_specs,与 model_call 同一事务
|
|
784
754
|
// (请求可由日志 + tool_specs 还原)
|
|
785
755
|
const sent = new Set([...meta.tools, ...(meta.catalog ?? [])].map((t) => t.specHash));
|
|
786
|
-
const written = await deps.
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
...(params.dropped.length > 0 && { droppedParams: params.dropped }),
|
|
803
|
-
estimatedInputTokens: estimate,
|
|
804
|
-
},
|
|
756
|
+
const written = await deps.stepLog.appendWithSpecs(conversationId, tools.list.filter((x) => sent.has(x.specHash)), [
|
|
757
|
+
{
|
|
758
|
+
type: "model_call",
|
|
759
|
+
runId,
|
|
760
|
+
idemKey: idem.modelCall(runId, step, attempt),
|
|
761
|
+
payload: {
|
|
762
|
+
step,
|
|
763
|
+
attempt,
|
|
764
|
+
provider: rung.ref.provider,
|
|
765
|
+
model: rung.ref.model,
|
|
766
|
+
fallback: rung.fallback,
|
|
767
|
+
request: {
|
|
768
|
+
...meta,
|
|
769
|
+
maxOutputTokens: request.maxOutputTokens,
|
|
770
|
+
...(params.dropped.length > 0 && { droppedParams: params.dropped }),
|
|
771
|
+
estimatedInputTokens: estimate,
|
|
805
772
|
},
|
|
806
773
|
},
|
|
807
|
-
|
|
808
|
-
|
|
774
|
+
},
|
|
775
|
+
]);
|
|
809
776
|
await deps.eventLog.notify(conversationId, Math.max(...written.map((e) => e.seq)));
|
|
810
777
|
sentAt = Date.now();
|
|
811
778
|
const outcome = await consumeModelStream(provider, request, info.streamIdleTimeoutMs ?? runtime.streamIdleMs, signal, (ev) => {
|
|
@@ -2,8 +2,11 @@ import { type ExtensionPointRef, type Logger, type ModelInfo, type ModelProvider
|
|
|
2
2
|
import type { Redis } from "ioredis";
|
|
3
3
|
import type { ModelRef } from "../agents/definition.js";
|
|
4
4
|
import { ApiError } from "../errors.js";
|
|
5
|
+
import { CacheService } from "../infra/cache/cache.service.js";
|
|
5
6
|
/** 单个供应商 `listModels()` 的时限(毫秒):一个卡住的供应商不拖住整个列表与解析。 */
|
|
6
7
|
export declare const LIST_MODELS_TIMEOUT_MS = 10000;
|
|
8
|
+
/** Optional provider: the `listModels()` time limit (ms) instead of {@link LIST_MODELS_TIMEOUT_MS} (tests). */
|
|
9
|
+
export declare const LIST_MODELS_TIMEOUT: unique symbol;
|
|
7
10
|
/**
|
|
8
11
|
* 列表视图(后台模型页、组织模型页)里列模型失败的供应商在这么多秒内直接标 error、不再请求(Redis,多副本共享)。
|
|
9
12
|
* 只用于列表;`resolve`(运行时)照常每次请求,失败由降级梯子重试。
|
|
@@ -48,22 +51,27 @@ export declare function adaptModelProviderV1(impl: ModelProviderV1): ModelProvid
|
|
|
48
51
|
* 同时支持 `model-provider@1`(经 {@link adaptModelProviderV1} 适配)与 `@2`;
|
|
49
52
|
* 同一插件两者都提供时用 `@2`。`@2` 的 `listModels()` 结果先过 `assertValidDeclarations`,
|
|
50
53
|
* 不合规的供应商不可用(不可重试)。
|
|
51
|
-
*
|
|
52
|
-
*
|
|
54
|
+
* Each provider's model list (`@2`-shaped) is cached in Redis (`@Cacheable`, key
|
|
55
|
+
* `cache:capk:models:<provider>:v<major>:<plugin version>:<config digest>`, 600 s), never in
|
|
56
|
+
* process memory: every replica shares it.
|
|
53
57
|
*/
|
|
54
58
|
export declare class ProviderRegistry {
|
|
55
59
|
private readonly host;
|
|
60
|
+
readonly cacheService: CacheService;
|
|
56
61
|
private readonly kv;
|
|
57
62
|
private readonly log?;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
63
|
+
/** The `listModels()` time limit. */
|
|
64
|
+
private readonly listTimeoutMs;
|
|
65
|
+
constructor(host: ProviderHost, cacheService: CacheService, kv: Redis, log?: Pick<Logger, "warn"> | undefined,
|
|
66
|
+
/** The `listModels()` time limit. */
|
|
67
|
+
listTimeoutMs?: number);
|
|
62
68
|
/** `listModels()` 加时限(到时按失败处理,供应商的调用留在后台、结果丢弃)。 */
|
|
63
69
|
private listModelsWithTimeout;
|
|
64
70
|
/** 每个插件取一个实现(`@2` 优先),按插件首次出现的顺序;不支持的主版本记 warn 后忽略。 */
|
|
65
71
|
private providers;
|
|
66
72
|
private models;
|
|
73
|
+
/** The provider's validated model list, cached under `key` (see {@link modelsKey}). */
|
|
74
|
+
private validatedModels;
|
|
67
75
|
/** 每个已安装供应商及其模型(按插件加载顺序);列模型失败或声明不合规的供应商跳过并记 warn。 */
|
|
68
76
|
list(): Promise<{
|
|
69
77
|
provider: string;
|
|
@@ -84,3 +92,6 @@ export declare class ProviderRegistry {
|
|
|
84
92
|
info: ModelInfo;
|
|
85
93
|
}>;
|
|
86
94
|
}
|
|
95
|
+
/** The model provider registry (one instance; the models and agents domains read it). */
|
|
96
|
+
export declare class ProvidersModule {
|
|
97
|
+
}
|
|
@@ -1,20 +1,39 @@
|
|
|
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 { assertValidDeclarations, EFFORT_VALUES, parseExtensionPoint, } from "@capybara-hq/plugin-sdk";
|
|
11
|
+
import { Inject, Injectable, Module, Optional } from "@nestjs/common";
|
|
2
12
|
import { ApiError } from "../errors.js";
|
|
13
|
+
import { ExtensionRegistry, ExtensionRegistryModule } from "../extensions/registry.js";
|
|
14
|
+
import { CacheService } from "../infra/cache/cache.service.js";
|
|
15
|
+
import { Cacheable } from "../infra/cache/cacheable.decorator.js";
|
|
16
|
+
import { KERNEL_LOGGER, REDIS } from "../infra/tokens.js";
|
|
3
17
|
/** 供应商模型列表在 Redis 中的缓存时长(秒)。 */
|
|
4
18
|
const MODELS_TTL_SECONDS = 600;
|
|
5
19
|
/** 单个供应商 `listModels()` 的时限(毫秒):一个卡住的供应商不拖住整个列表与解析。 */
|
|
6
20
|
export const LIST_MODELS_TIMEOUT_MS = 10_000;
|
|
21
|
+
/** Optional provider: the `listModels()` time limit (ms) instead of {@link LIST_MODELS_TIMEOUT_MS} (tests). */
|
|
22
|
+
export const LIST_MODELS_TIMEOUT = Symbol("LIST_MODELS_TIMEOUT");
|
|
7
23
|
/**
|
|
8
24
|
* 列表视图(后台模型页、组织模型页)里列模型失败的供应商在这么多秒内直接标 error、不再请求(Redis,多副本共享)。
|
|
9
25
|
* 只用于列表;`resolve`(运行时)照常每次请求,失败由降级梯子重试。
|
|
10
26
|
*/
|
|
11
27
|
export const LIST_FAILURE_TTL_SECONDS = 15;
|
|
12
28
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
29
|
+
* The model list's cache key (`@Cacheable` stores it as `cache:<key>`). It carries the provider's
|
|
30
|
+
* contract major: after a plugin moves from `@1` to `@2` it never reads the list written through
|
|
31
|
+
* the `@1` adapter (both are `@2`-shaped, the shape cannot tell them apart). It also carries the
|
|
32
|
+
* plugin version and the deployment config digest: after an upgrade (the parameter declarations may
|
|
33
|
+
* have changed) or a deployment config change (models added or removed) every replica validates
|
|
34
|
+
* the new declarations at once instead of waiting for the old entry's TTL. The digest is only a
|
|
35
|
+
* hash, never config text (no secret in the key). Old keys expire by TTL. Entries without a
|
|
36
|
+
* version / digest (test doubles) use `-`.
|
|
18
37
|
*/
|
|
19
38
|
const modelsKey = (p) => `capk:models:${p.plugin}:v${p.major}:${p.version ?? "-"}:${p.configHash ?? "-"}`;
|
|
20
39
|
/** 列表视图的失败标记({@link LIST_FAILURE_TTL_SECONDS}),与模型列表同样按版本与配置摘要区分。 */
|
|
@@ -71,31 +90,33 @@ export function adaptModelProviderV1(impl) {
|
|
|
71
90
|
},
|
|
72
91
|
};
|
|
73
92
|
}
|
|
74
|
-
/** 缓存里的条目必须是 `@2` 形状(旧版本内核写入的 `@1` 原始结果没有 `parameters`,视为未命中)。 */
|
|
75
|
-
const isCurrentShape = (models) => Array.isArray(models) &&
|
|
76
|
-
models.every((m) => typeof m === "object" && m !== null && Array.isArray(m.parameters));
|
|
77
93
|
/**
|
|
78
94
|
* 模型供应商注册表:供应商即提供 `model-provider` 能力的插件(以插件名为供应商名)。
|
|
79
95
|
* 同时支持 `model-provider@1`(经 {@link adaptModelProviderV1} 适配)与 `@2`;
|
|
80
96
|
* 同一插件两者都提供时用 `@2`。`@2` 的 `listModels()` 结果先过 `assertValidDeclarations`,
|
|
81
97
|
* 不合规的供应商不可用(不可重试)。
|
|
82
|
-
*
|
|
83
|
-
*
|
|
98
|
+
* Each provider's model list (`@2`-shaped) is cached in Redis (`@Cacheable`, key
|
|
99
|
+
* `cache:capk:models:<provider>:v<major>:<plugin version>:<config digest>`, 600 s), never in
|
|
100
|
+
* process memory: every replica shares it.
|
|
84
101
|
*/
|
|
85
|
-
|
|
102
|
+
let ProviderRegistry = class ProviderRegistry {
|
|
86
103
|
host;
|
|
104
|
+
cacheService;
|
|
87
105
|
kv;
|
|
88
106
|
log;
|
|
89
|
-
|
|
90
|
-
constructor(host, kv, log,
|
|
107
|
+
listTimeoutMs;
|
|
108
|
+
constructor(host, cacheService, kv, log,
|
|
109
|
+
/** The `listModels()` time limit. */
|
|
110
|
+
listTimeoutMs = LIST_MODELS_TIMEOUT_MS) {
|
|
91
111
|
this.host = host;
|
|
112
|
+
this.cacheService = cacheService;
|
|
92
113
|
this.kv = kv;
|
|
93
114
|
this.log = log;
|
|
94
|
-
this.
|
|
115
|
+
this.listTimeoutMs = listTimeoutMs;
|
|
95
116
|
}
|
|
96
117
|
/** `listModels()` 加时限(到时按失败处理,供应商的调用留在后台、结果丢弃)。 */
|
|
97
118
|
async listModelsWithTimeout(impl) {
|
|
98
|
-
const ms = this.
|
|
119
|
+
const ms = this.listTimeoutMs;
|
|
99
120
|
let timer;
|
|
100
121
|
const call = Promise.resolve().then(() => impl.listModels());
|
|
101
122
|
call.catch(() => { });
|
|
@@ -141,15 +162,12 @@ export class ProviderRegistry {
|
|
|
141
162
|
impl: major === 2 ? impl : adaptModelProviderV1(impl),
|
|
142
163
|
}));
|
|
143
164
|
}
|
|
144
|
-
|
|
165
|
+
models(p) {
|
|
166
|
+
return this.validatedModels(modelsKey(p), p);
|
|
167
|
+
}
|
|
168
|
+
/** The provider's validated model list, cached under `key` (see {@link modelsKey}). */
|
|
169
|
+
async validatedModels(_key, p) {
|
|
145
170
|
const { plugin: provider, major, impl } = p;
|
|
146
|
-
const key = modelsKey(p);
|
|
147
|
-
const cached = await this.kv.get(key);
|
|
148
|
-
if (cached !== null) {
|
|
149
|
-
const parsed = JSON.parse(cached);
|
|
150
|
-
if (isCurrentShape(parsed))
|
|
151
|
-
return parsed;
|
|
152
|
-
}
|
|
153
171
|
let models;
|
|
154
172
|
try {
|
|
155
173
|
models = await this.listModelsWithTimeout(impl);
|
|
@@ -168,7 +186,6 @@ export class ProviderRegistry {
|
|
|
168
186
|
throw e;
|
|
169
187
|
}
|
|
170
188
|
}
|
|
171
|
-
await this.kv.set(key, JSON.stringify(models), "EX", MODELS_TTL_SECONDS);
|
|
172
189
|
return models;
|
|
173
190
|
}
|
|
174
191
|
/** 每个已安装供应商及其模型(按插件加载顺序);列模型失败或声明不合规的供应商跳过并记 warn。 */
|
|
@@ -221,4 +238,28 @@ export class ProviderRegistry {
|
|
|
221
238
|
}
|
|
222
239
|
return { provider: p.impl, info };
|
|
223
240
|
}
|
|
224
|
-
}
|
|
241
|
+
};
|
|
242
|
+
__decorate([
|
|
243
|
+
Cacheable({ key: "#{0}", ttl: MODELS_TTL_SECONDS })
|
|
244
|
+
], ProviderRegistry.prototype, "validatedModels", null);
|
|
245
|
+
ProviderRegistry = __decorate([
|
|
246
|
+
Injectable(),
|
|
247
|
+
__param(0, Inject(ExtensionRegistry)),
|
|
248
|
+
__param(1, Inject(CacheService)),
|
|
249
|
+
__param(2, Inject(REDIS)),
|
|
250
|
+
__param(3, Inject(KERNEL_LOGGER)),
|
|
251
|
+
__param(4, Optional()),
|
|
252
|
+
__param(4, Inject(LIST_MODELS_TIMEOUT))
|
|
253
|
+
], ProviderRegistry);
|
|
254
|
+
export { ProviderRegistry };
|
|
255
|
+
/** The model provider registry (one instance; the models and agents domains read it). */
|
|
256
|
+
let ProvidersModule = class ProvidersModule {
|
|
257
|
+
};
|
|
258
|
+
ProvidersModule = __decorate([
|
|
259
|
+
Module({
|
|
260
|
+
imports: [ExtensionRegistryModule],
|
|
261
|
+
providers: [ProviderRegistry],
|
|
262
|
+
exports: [ProviderRegistry],
|
|
263
|
+
})
|
|
264
|
+
], ProvidersModule);
|
|
265
|
+
export { ProvidersModule };
|
package/dist/runtime/quota.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Redis } from "ioredis";
|
|
2
|
-
import type { KernelConfig } from "../config/schema.js";
|
|
3
2
|
import type { SettingsService } from "../identity/settings.js";
|
|
3
|
+
import type { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
4
|
+
import type { LeaseHandle, LockService } from "../infra/lock/lock.service.js";
|
|
4
5
|
/** 组织配额租约的默认时长(毫秒):持有方每 `leaseMs / 3` 续租一次。 */
|
|
5
6
|
export declare const ORG_QUOTA_LEASE_MS = 60000;
|
|
6
7
|
/** 运行配额的键前缀(`capk:org-runs:<orgId>`);评测运行用 {@link EVAL_QUOTA_PREFIX}。 */
|
|
@@ -11,19 +12,32 @@ export declare const EVAL_QUOTA_PREFIX = "capk:org-evals:";
|
|
|
11
12
|
* 组织级运行并发配额(spec 4.3):Redis ZSET `<keyPrefix><orgId>`(默认 `capk:org-runs:<orgId>`),
|
|
12
13
|
* 成员 runId(评测为 jobId)、分数为租约到期时间。
|
|
13
14
|
* 持有方崩溃时不 `leave`,成员在租约到期后被下一次 `tryEnter` 清理,名额不泄漏。
|
|
15
|
+
* One instance per key prefix, provided under {@link RUN_QUOTA} / {@link EVAL_QUOTA}.
|
|
14
16
|
*/
|
|
15
17
|
export declare class OrgQuota {
|
|
16
18
|
private readonly redis;
|
|
17
19
|
private readonly keyPrefix;
|
|
18
|
-
|
|
20
|
+
private readonly locks?;
|
|
21
|
+
constructor(redis: Redis, keyPrefix?: string, locks?: LockService | undefined);
|
|
19
22
|
private key;
|
|
20
23
|
tryEnter(orgId: string, runId: string, limit: number, leaseMs?: number): Promise<boolean>;
|
|
21
24
|
/** 续期;成员已过期被清理 → false。 */
|
|
22
25
|
renew(orgId: string, runId: string, leaseMs?: number): Promise<boolean>;
|
|
23
26
|
leave(orgId: string, runId: string): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Takes a slot ({@link tryEnter}) and keeps it while held: renewed every `leaseMs / 3` by the
|
|
29
|
+
* lock service's watchdog; `release()` leaves. Undefined when the organization is at its limit.
|
|
30
|
+
* A slot that could not be renewed (it expired meanwhile) aborts `lost` with one WARN; the
|
|
31
|
+
* holder may go on (the slot is a fair-share limit, not mutual exclusion).
|
|
32
|
+
*/
|
|
33
|
+
enter(orgId: string, runId: string, limit: number, leaseMs?: number): Promise<LeaseHandle | undefined>;
|
|
24
34
|
}
|
|
35
|
+
/** The organization run quota (`capk:org-runs:<orgId>`). */
|
|
36
|
+
export declare const RUN_QUOTA: unique symbol;
|
|
37
|
+
/** The organization eval quota (`capk:org-evals:<orgId>`). */
|
|
38
|
+
export declare const EVAL_QUOTA: unique symbol;
|
|
25
39
|
/**
|
|
26
40
|
* 组织的运行并发上限:部署设置 `runConcurrencyOverrides[orgId]`,没有则用 `runtime.orgConcurrency`
|
|
27
41
|
* (热更新字段,每次经 `config()` 读当前值)。
|
|
28
42
|
*/
|
|
29
|
-
export declare function orgRunLimit(settings: Pick<SettingsService, "get">, config:
|
|
43
|
+
export declare function orgRunLimit(settings: Pick<SettingsService, "get">, config: Pick<KernelConfigService, "get">, orgId: string): Promise<number>;
|
package/dist/runtime/quota.js
CHANGED
|
@@ -38,13 +38,16 @@ return 0
|
|
|
38
38
|
* 组织级运行并发配额(spec 4.3):Redis ZSET `<keyPrefix><orgId>`(默认 `capk:org-runs:<orgId>`),
|
|
39
39
|
* 成员 runId(评测为 jobId)、分数为租约到期时间。
|
|
40
40
|
* 持有方崩溃时不 `leave`,成员在租约到期后被下一次 `tryEnter` 清理,名额不泄漏。
|
|
41
|
+
* One instance per key prefix, provided under {@link RUN_QUOTA} / {@link EVAL_QUOTA}.
|
|
41
42
|
*/
|
|
42
43
|
export class OrgQuota {
|
|
43
44
|
redis;
|
|
44
45
|
keyPrefix;
|
|
45
|
-
|
|
46
|
+
locks;
|
|
47
|
+
constructor(redis, keyPrefix = RUN_QUOTA_PREFIX, locks) {
|
|
46
48
|
this.redis = redis;
|
|
47
49
|
this.keyPrefix = keyPrefix;
|
|
50
|
+
this.locks = locks;
|
|
48
51
|
}
|
|
49
52
|
key(orgId) {
|
|
50
53
|
return `${this.keyPrefix}${orgId}`;
|
|
@@ -59,12 +62,34 @@ export class OrgQuota {
|
|
|
59
62
|
async leave(orgId, runId) {
|
|
60
63
|
await this.redis.zrem(this.key(orgId), runId);
|
|
61
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Takes a slot ({@link tryEnter}) and keeps it while held: renewed every `leaseMs / 3` by the
|
|
67
|
+
* lock service's watchdog; `release()` leaves. Undefined when the organization is at its limit.
|
|
68
|
+
* A slot that could not be renewed (it expired meanwhile) aborts `lost` with one WARN; the
|
|
69
|
+
* holder may go on (the slot is a fair-share limit, not mutual exclusion).
|
|
70
|
+
*/
|
|
71
|
+
async enter(orgId, runId, limit, leaseMs = ORG_QUOTA_LEASE_MS) {
|
|
72
|
+
const locks = this.locks;
|
|
73
|
+
if (!locks)
|
|
74
|
+
throw new Error("OrgQuota.enter needs the lock service");
|
|
75
|
+
const sentAt = Date.now();
|
|
76
|
+
if (!(await this.tryEnter(orgId, runId, limit, leaseMs)))
|
|
77
|
+
return undefined;
|
|
78
|
+
return locks.keepAlive(`${this.key(orgId)}/${runId}`, leaseMs, {
|
|
79
|
+
renew: () => this.renew(orgId, runId, leaseMs),
|
|
80
|
+
release: () => this.leave(orgId, runId),
|
|
81
|
+
}, sentAt);
|
|
82
|
+
}
|
|
62
83
|
}
|
|
84
|
+
/** The organization run quota (`capk:org-runs:<orgId>`). */
|
|
85
|
+
export const RUN_QUOTA = Symbol("RUN_QUOTA");
|
|
86
|
+
/** The organization eval quota (`capk:org-evals:<orgId>`). */
|
|
87
|
+
export const EVAL_QUOTA = Symbol("EVAL_QUOTA");
|
|
63
88
|
/**
|
|
64
89
|
* 组织的运行并发上限:部署设置 `runConcurrencyOverrides[orgId]`,没有则用 `runtime.orgConcurrency`
|
|
65
90
|
* (热更新字段,每次经 `config()` 读当前值)。
|
|
66
91
|
*/
|
|
67
92
|
export async function orgRunLimit(settings, config, orgId) {
|
|
68
93
|
const { runConcurrencyOverrides } = await settings.get();
|
|
69
|
-
return runConcurrencyOverrides[orgId] ?? config().runtime.orgConcurrency;
|
|
94
|
+
return runConcurrencyOverrides[orgId] ?? config.get().runtime.orgConcurrency;
|
|
70
95
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Job scheduler ids of the maintenance queue's fixed-period jobs before they became `@LockedCron` /
|
|
3
|
+
* `@LockedInterval` jobs: an upgraded deployment still has them in Redis, so a starting worker
|
|
4
|
+
* role removes them (else BullMQ keeps firing a job no handler knows). Each id
|
|
5
|
+
* comes from its domain's leaf `job-ids.ts`, so this module imports no domain code.
|
|
6
|
+
*/
|
|
7
|
+
export declare const RETIRED_SCHEDULER_IDS: readonly string[];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { MARKETPLACES_REFRESH_SCHEDULER_ID, PLUGIN_STAGING_CLEANUP_SCHEDULER_ID, } from "../catalog/job-ids.js";
|
|
2
|
+
import { GATEWAY_CHECK_SCHEDULER_ID } from "../channels/job-ids.js";
|
|
3
|
+
import { ATTACHMENT_CLEANUP_SCHEDULER_ID } from "../conversations/job-ids.js";
|
|
4
|
+
import { PLUGINS_RECONCILE_SCHEDULER_ID } from "../extensions/job-ids.js";
|
|
5
|
+
import { DIRECTORY_SCAN_SCHEDULER_ID, OFFBOARD_SWEEP_SCHEDULER_ID } from "../orgs/job-ids.js";
|
|
6
|
+
import { SANDBOX_DESTROY_SCHEDULER_ID, SANDBOX_SUSPEND_SCHEDULER_ID } from "../sandbox/job-ids.js";
|
|
7
|
+
import { STORAGE_PURGE_SCHEDULER_ID } from "../storage/job-ids.js";
|
|
8
|
+
import { DRIFT_SCHEDULER_ID, OUTPUT_CLEANUP_SCHEDULER_ID } from "../tools/job-ids.js";
|
|
9
|
+
import { USAGE_SWEEP_SCHEDULER_ID, WAIT_SWEEP_SCHEDULER_ID } from "./job-ids.js";
|
|
10
|
+
/**
|
|
11
|
+
* Job scheduler ids of the maintenance queue's fixed-period jobs before they became `@LockedCron` /
|
|
12
|
+
* `@LockedInterval` jobs: an upgraded deployment still has them in Redis, so a starting worker
|
|
13
|
+
* role removes them (else BullMQ keeps firing a job no handler knows). Each id
|
|
14
|
+
* comes from its domain's leaf `job-ids.ts`, so this module imports no domain code.
|
|
15
|
+
*/
|
|
16
|
+
export const RETIRED_SCHEDULER_IDS = [
|
|
17
|
+
STORAGE_PURGE_SCHEDULER_ID,
|
|
18
|
+
DIRECTORY_SCAN_SCHEDULER_ID,
|
|
19
|
+
OFFBOARD_SWEEP_SCHEDULER_ID,
|
|
20
|
+
PLUGINS_RECONCILE_SCHEDULER_ID,
|
|
21
|
+
MARKETPLACES_REFRESH_SCHEDULER_ID,
|
|
22
|
+
PLUGIN_STAGING_CLEANUP_SCHEDULER_ID,
|
|
23
|
+
DRIFT_SCHEDULER_ID,
|
|
24
|
+
OUTPUT_CLEANUP_SCHEDULER_ID,
|
|
25
|
+
ATTACHMENT_CLEANUP_SCHEDULER_ID,
|
|
26
|
+
WAIT_SWEEP_SCHEDULER_ID,
|
|
27
|
+
USAGE_SWEEP_SCHEDULER_ID,
|
|
28
|
+
GATEWAY_CHECK_SCHEDULER_ID,
|
|
29
|
+
SANDBOX_SUSPEND_SCHEDULER_ID,
|
|
30
|
+
SANDBOX_DESTROY_SCHEDULER_ID,
|
|
31
|
+
];
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { KernelEvents } from "../infra/events/kernel-events.js";
|
|
2
|
+
import type { KernelLogger } from "../log.js";
|
|
3
|
+
import { RunAbort } from "./abort.js";
|
|
4
|
+
import { RunQueue } from "./run-queue.js";
|
|
5
|
+
import { Waits } from "./waits.js";
|
|
6
|
+
/**
|
|
7
|
+
* Starting and stopping runs from outside the run worker: the conversations API (a message, a
|
|
8
|
+
* stop), the conversation queue and offboarding (a departed member's runs, `by: null`).
|
|
9
|
+
*/
|
|
10
|
+
export declare class RunControl {
|
|
11
|
+
private readonly queue;
|
|
12
|
+
private readonly waits;
|
|
13
|
+
private readonly abort;
|
|
14
|
+
private readonly events;
|
|
15
|
+
private readonly log;
|
|
16
|
+
constructor(queue: Pick<RunQueue, "ensureRun" | "abortIfOrphaned">, waits: Pick<Waits, "abortWaiting" | "childFinished" | "stopChildren">, abort: Pick<RunAbort, "request">, events: KernelEvents, log: Pick<KernelLogger, "error">);
|
|
17
|
+
/** 有未消费的消息且没有进行中的运行时投递一轮运行;返回 runId 或 null。 */
|
|
18
|
+
ensureRun(conversationId: string): Promise<string | null>;
|
|
19
|
+
/**
|
|
20
|
+
* 运行是孤儿(会话锁空闲、任务已不存在,没有 worker 会收到中止广播)时直接把它写成 aborted,返回 true;
|
|
21
|
+
* 否则返回 false。A stopped sub-agent then reports to its parent at once, and a stopped parent
|
|
22
|
+
* stops its children (sub-agents spec §12).
|
|
23
|
+
*/
|
|
24
|
+
abortIfOrphaned(conversationId: string, runId: string, byAccountId: string | null): Promise<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* 运行在等人处理(waiting)时直接中止:取消等待、写 `run_aborted`、删除 checkpoint,返回 true;
|
|
27
|
+
* 运行已不是 waiting(例如刚被续跑)→ false. Either way its approval / question cards may have
|
|
28
|
+
* changed: `run.wait-stopped` lets the channel outbound update them.
|
|
29
|
+
*/
|
|
30
|
+
abortWaiting(conversationId: string, runId: string, byAccountId: string | null): Promise<boolean>;
|
|
31
|
+
/** 请求中止运行(广播到所有副本)。 */
|
|
32
|
+
requestAbort(runId: string, byAccountId: string | null): Promise<void>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
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
|
+
};
|
|
10
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
11
|
+
import { KernelEvents } from "../infra/events/kernel-events.js";
|
|
12
|
+
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
13
|
+
import { RunAbort } from "./abort.js";
|
|
14
|
+
import { RunQueue } from "./run-queue.js";
|
|
15
|
+
import { Waits } from "./waits.js";
|
|
16
|
+
/**
|
|
17
|
+
* Starting and stopping runs from outside the run worker: the conversations API (a message, a
|
|
18
|
+
* stop), the conversation queue and offboarding (a departed member's runs, `by: null`).
|
|
19
|
+
*/
|
|
20
|
+
let RunControl = class RunControl {
|
|
21
|
+
queue;
|
|
22
|
+
waits;
|
|
23
|
+
abort;
|
|
24
|
+
events;
|
|
25
|
+
log;
|
|
26
|
+
constructor(queue, waits, abort, events, log) {
|
|
27
|
+
this.queue = queue;
|
|
28
|
+
this.waits = waits;
|
|
29
|
+
this.abort = abort;
|
|
30
|
+
this.events = events;
|
|
31
|
+
this.log = log;
|
|
32
|
+
}
|
|
33
|
+
/** 有未消费的消息且没有进行中的运行时投递一轮运行;返回 runId 或 null。 */
|
|
34
|
+
ensureRun(conversationId) {
|
|
35
|
+
return this.queue.ensureRun(conversationId);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 运行是孤儿(会话锁空闲、任务已不存在,没有 worker 会收到中止广播)时直接把它写成 aborted,返回 true;
|
|
39
|
+
* 否则返回 false。A stopped sub-agent then reports to its parent at once, and a stopped parent
|
|
40
|
+
* stops its children (sub-agents spec §12).
|
|
41
|
+
*/
|
|
42
|
+
async abortIfOrphaned(conversationId, runId, byAccountId) {
|
|
43
|
+
const r = await this.queue.abortIfOrphaned(conversationId, runId, byAccountId);
|
|
44
|
+
if (r) {
|
|
45
|
+
await this.waits
|
|
46
|
+
.childFinished(runId)
|
|
47
|
+
.catch((err) => this.log.error("cannot report finished sub-agent run to its parent", { runId, err }));
|
|
48
|
+
await this.waits
|
|
49
|
+
.stopChildren(runId, null)
|
|
50
|
+
.catch((err) => this.log.error("cannot stop the sub-agents of a run", { runId, err }));
|
|
51
|
+
}
|
|
52
|
+
return r;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 运行在等人处理(waiting)时直接中止:取消等待、写 `run_aborted`、删除 checkpoint,返回 true;
|
|
56
|
+
* 运行已不是 waiting(例如刚被续跑)→ false. Either way its approval / question cards may have
|
|
57
|
+
* changed: `run.wait-stopped` lets the channel outbound update them.
|
|
58
|
+
*/
|
|
59
|
+
async abortWaiting(conversationId, runId, byAccountId) {
|
|
60
|
+
const r = await this.waits.abortWaiting(conversationId, runId, byAccountId);
|
|
61
|
+
await this.events.emit("run.wait-stopped", { conversationId, runId });
|
|
62
|
+
return r;
|
|
63
|
+
}
|
|
64
|
+
/** 请求中止运行(广播到所有副本)。 */
|
|
65
|
+
requestAbort(runId, byAccountId) {
|
|
66
|
+
return this.abort.request(runId, byAccountId);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
RunControl = __decorate([
|
|
70
|
+
Injectable(),
|
|
71
|
+
__param(0, Inject(RunQueue)),
|
|
72
|
+
__param(1, Inject(Waits)),
|
|
73
|
+
__param(2, Inject(RunAbort)),
|
|
74
|
+
__param(3, Inject(KernelEvents)),
|
|
75
|
+
__param(4, Inject(KERNEL_LOGGER))
|
|
76
|
+
], RunControl);
|
|
77
|
+
export { RunControl };
|