@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
|
@@ -4,7 +4,7 @@ import { normalizeStoredDefinition } from "../../agents/definition.js";
|
|
|
4
4
|
import { audit } from "../../identity/audit.js";
|
|
5
5
|
import { forkAgentUnknownText } from "../../skills/invoke.js";
|
|
6
6
|
import { AGENT_REFUSALS } from "../../tools/builtins/agent.js";
|
|
7
|
-
import { ACTIVE_RUN_STATUSES, runJobId } from "../run-
|
|
7
|
+
import { ACTIVE_RUN_STATUSES, runJobId } from "../run-jobs.js";
|
|
8
8
|
import { effectiveDefinition, narrowFollowUp, SubagentTypeGoneError, } from "./definition.js";
|
|
9
9
|
import { subagentLimits } from "./limits.js";
|
|
10
10
|
import { auditRefusal, checkOrgAgent, currentAgentDefinition } from "./org-agents.js";
|
|
@@ -20,7 +20,7 @@ const GENERAL_ENTRY = {
|
|
|
20
20
|
/** Idempotency key of the parent's `subagent_dispatched` event. */
|
|
21
21
|
export const dispatchedIdemKey = (runId, callId) => `subagent_dispatched:${runId}:${callId}`;
|
|
22
22
|
/**
|
|
23
|
-
* Dispatches the sub-agent of one `
|
|
23
|
+
* Dispatches the sub-agent of one `Agent` call (spec §7.1), after the pipeline's validation,
|
|
24
24
|
* policy, approval and `tool.preExecute` stages. A new sub-agent: resolves its type and effective
|
|
25
25
|
* definition, then in one transaction (holding the parent run's row lock, so the dispatches of one
|
|
26
26
|
* run serialize) inserts the child conversation, appends `subagent_started` and the task message,
|
|
@@ -118,7 +118,7 @@ export async function dispatchSubagent(d, a) {
|
|
|
118
118
|
subagent_type: entry.type,
|
|
119
119
|
})
|
|
120
120
|
.execute();
|
|
121
|
-
const [, task] = await d.eventLog.
|
|
121
|
+
const [, task] = await d.eventLog.appendIn(childId, [
|
|
122
122
|
{
|
|
123
123
|
type: "subagent_started",
|
|
124
124
|
idemKey: "subagent_started",
|
|
@@ -149,7 +149,7 @@ export async function dispatchSubagent(d, a) {
|
|
|
149
149
|
},
|
|
150
150
|
},
|
|
151
151
|
taskMessage(ctx, a.callId, fork === undefined ? input.prompt : fork.task(eff.definition), undefined, fork?.skill),
|
|
152
|
-
]
|
|
152
|
+
]);
|
|
153
153
|
return task;
|
|
154
154
|
});
|
|
155
155
|
// a new sub-agent's writer never refuses
|
|
@@ -234,7 +234,9 @@ async function resume(d, a) {
|
|
|
234
234
|
.executeTakeFirst();
|
|
235
235
|
if (await activeRun())
|
|
236
236
|
return null;
|
|
237
|
-
const [task] = await d.eventLog.
|
|
237
|
+
const [task] = await d.eventLog.appendIn(child.id, [
|
|
238
|
+
taskMessage(ctx, a.callId, a.input.prompt, narrowFollowUp(frozen, current)),
|
|
239
|
+
]);
|
|
238
240
|
return task;
|
|
239
241
|
}).then((r) => r ?? refused(AGENT_REFUSALS.stillRunning(a.id)));
|
|
240
242
|
}
|
|
@@ -272,7 +274,7 @@ async function orgAgentGates(db, a, agentId, agentType, resumed) {
|
|
|
272
274
|
}
|
|
273
275
|
const taskMessage = (ctx, callId, prompt, narrowed,
|
|
274
276
|
/**
|
|
275
|
-
* A fork invocation's record: the child's log then holds the invocation, so its `
|
|
277
|
+
* A fork invocation's record: the child's log then holds the invocation, so its `Skill`
|
|
276
278
|
* is offered and resolves the invoked version (phase D).
|
|
277
279
|
*/
|
|
278
280
|
skill) => ({
|
|
@@ -290,153 +292,145 @@ skill) => ({
|
|
|
290
292
|
},
|
|
291
293
|
});
|
|
292
294
|
/**
|
|
293
|
-
*
|
|
294
|
-
*
|
|
295
|
-
* runs `child` (writes the child conversation's first events and returns the task message, or
|
|
296
|
-
* null to refuse), then inserts the child run and the dispatch row, appends `subagent_dispatched`
|
|
297
|
-
* and the audit row. After commit: notifies both conversations and enqueues the child run.
|
|
298
|
-
* Returns null when `child` refused.
|
|
299
|
-
*
|
|
300
|
-
* Under the parent run's row lock it first re-checks what the pipeline checked without it: a call
|
|
301
|
-
* already dispatched (a second holder of the same step, e.g. after a stalled-job takeover) gets
|
|
302
|
-
* the existing child run back and writes nothing, and a parent run that is no longer `running`
|
|
303
|
-
* (stopped, orphaned) dispatches nothing. Then the run's limits (§8.2, {@link subagentLimits}),
|
|
304
|
-
* read fresh: its children's token counter at or over the cap, its dispatches (follow-ups
|
|
305
|
-
* included) at the cap, or as many active children as may run at once each refuse with the §4.5
|
|
306
|
-
* text. The lock serializes the dispatches of one run, so the counts cannot race.
|
|
295
|
+
* {@link commit}'s transaction (run by `SubagentsService.commitDispatch`, `d.db` its handle).
|
|
296
|
+
* Null when `child` refused.
|
|
307
297
|
*/
|
|
308
|
-
async function
|
|
309
|
-
/** Writes the child's events; `checked` is the org agent version the in-lock gates passed. */
|
|
310
|
-
child) {
|
|
298
|
+
export async function commitDispatchIn(d, a, plan, child) {
|
|
311
299
|
const { ctx, callId, input } = a;
|
|
312
300
|
const childRunId = randomUUID();
|
|
313
|
-
const
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
301
|
+
const t = d.db;
|
|
302
|
+
// the documented order, conversation row then run row (run-finish.ts, abortWaiting): the
|
|
303
|
+
// append to the parent below takes the conversation row, so it is taken first here, or a stop
|
|
304
|
+
// racing this commit could deadlock (final review m2); the child's row comes last
|
|
305
|
+
await t
|
|
306
|
+
.selectFrom("conversations")
|
|
307
|
+
.select("id")
|
|
308
|
+
.where("id", "=", ctx.conversationId)
|
|
309
|
+
.forUpdate()
|
|
310
|
+
.executeTakeFirst();
|
|
311
|
+
const parent = await t
|
|
312
|
+
.selectFrom("runs")
|
|
313
|
+
.select(["status", "subagent_tokens_used"])
|
|
314
|
+
.where("id", "=", ctx.runId)
|
|
315
|
+
.forUpdate()
|
|
316
|
+
.executeTakeFirst();
|
|
317
|
+
const existing = await t
|
|
318
|
+
.selectFrom("subagent_dispatches as sd")
|
|
319
|
+
.leftJoin("runs as cr", "cr.id", "sd.child_run_id")
|
|
320
|
+
.select(["sd.child_run_id", "sd.child_conversation_id", "cr.status", "cr.trigger_seq"])
|
|
321
|
+
.where("sd.parent_run_id", "=", ctx.runId)
|
|
322
|
+
.where("sd.parent_call_id", "=", callId)
|
|
323
|
+
.executeTakeFirst();
|
|
324
|
+
if (existing) {
|
|
325
|
+
return {
|
|
326
|
+
kind: "existing",
|
|
327
|
+
childRunId: existing.child_run_id,
|
|
328
|
+
// still queued: the first holder may have died before its enqueue (review M4)
|
|
329
|
+
requeue: existing.status === "queued" && existing.trigger_seq !== null
|
|
330
|
+
? {
|
|
331
|
+
conversationId: existing.child_conversation_id,
|
|
332
|
+
seq: Number(existing.trigger_seq),
|
|
333
|
+
}
|
|
334
|
+
: null,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
if (parent?.status !== "running")
|
|
338
|
+
return { kind: "stopped" };
|
|
339
|
+
const limit = await limitRefusal(t, d, ctx, parent.subagent_tokens_used);
|
|
340
|
+
if (limit !== null)
|
|
341
|
+
return { kind: "limit", content: limit };
|
|
342
|
+
let checked;
|
|
343
|
+
if (plan.source === "agent") {
|
|
344
|
+
// the org agent's gates again, under the parent run's lock, with both agents' rows held
|
|
345
|
+
// FOR SHARE (in id order) so a concurrent save of either serializes with this dispatch
|
|
317
346
|
await t
|
|
318
|
-
.selectFrom("
|
|
347
|
+
.selectFrom("agents")
|
|
319
348
|
.select("id")
|
|
320
|
-
.where("id", "
|
|
321
|
-
.
|
|
322
|
-
.
|
|
323
|
-
const parent = await t
|
|
324
|
-
.selectFrom("runs")
|
|
325
|
-
.select(["status", "subagent_tokens_used"])
|
|
326
|
-
.where("id", "=", ctx.runId)
|
|
327
|
-
.forUpdate()
|
|
328
|
-
.executeTakeFirst();
|
|
329
|
-
const existing = await t
|
|
330
|
-
.selectFrom("subagent_dispatches as sd")
|
|
331
|
-
.leftJoin("runs as cr", "cr.id", "sd.child_run_id")
|
|
332
|
-
.select(["sd.child_run_id", "sd.child_conversation_id", "cr.status", "cr.trigger_seq"])
|
|
333
|
-
.where("sd.parent_run_id", "=", ctx.runId)
|
|
334
|
-
.where("sd.parent_call_id", "=", callId)
|
|
335
|
-
.executeTakeFirst();
|
|
336
|
-
if (existing) {
|
|
337
|
-
return {
|
|
338
|
-
kind: "existing",
|
|
339
|
-
childRunId: existing.child_run_id,
|
|
340
|
-
// still queued: the first holder may have died before its enqueue (review M4)
|
|
341
|
-
requeue: existing.status === "queued" && existing.trigger_seq !== null
|
|
342
|
-
? {
|
|
343
|
-
conversationId: existing.child_conversation_id,
|
|
344
|
-
seq: Number(existing.trigger_seq),
|
|
345
|
-
}
|
|
346
|
-
: null,
|
|
347
|
-
};
|
|
348
|
-
}
|
|
349
|
-
if (parent?.status !== "running")
|
|
350
|
-
return { kind: "stopped" };
|
|
351
|
-
const limit = await limitRefusal(t, d, ctx, parent.subagent_tokens_used);
|
|
352
|
-
if (limit !== null)
|
|
353
|
-
return { kind: "limit", content: limit };
|
|
354
|
-
let checked;
|
|
355
|
-
if (plan.source === "agent") {
|
|
356
|
-
// the org agent's gates again, under the parent run's lock, with both agents' rows held
|
|
357
|
-
// FOR SHARE (in id order) so a concurrent save of either serializes with this dispatch
|
|
358
|
-
await t
|
|
359
|
-
.selectFrom("agents")
|
|
360
|
-
.select("id")
|
|
361
|
-
.where("id", "in", [ctx.agentId, plan.agentId])
|
|
362
|
-
.orderBy("id")
|
|
363
|
-
.forShare()
|
|
364
|
-
.execute();
|
|
365
|
-
const gates = await orgAgentGates(t, a, plan.agentId, plan.agentType, plan.resumed);
|
|
366
|
-
if ("refused" in gates)
|
|
367
|
-
return { kind: "gate", outcome: gates.refused };
|
|
368
|
-
checked = gates.checked;
|
|
369
|
-
}
|
|
370
|
-
const task = await child(t, checked);
|
|
371
|
-
if (task === null)
|
|
372
|
-
return null;
|
|
373
|
-
await t
|
|
374
|
-
.insertInto("runs")
|
|
375
|
-
.values({
|
|
376
|
-
id: childRunId,
|
|
377
|
-
conversation_id: plan.childConversationId,
|
|
378
|
-
status: "queued",
|
|
379
|
-
agent_version: plan.agentVersion,
|
|
380
|
-
trigger_account_id: ctx.accountId,
|
|
381
|
-
trigger_seq: task.seq,
|
|
382
|
-
})
|
|
349
|
+
.where("id", "in", [ctx.agentId, plan.agentId])
|
|
350
|
+
.orderBy("id")
|
|
351
|
+
.forShare()
|
|
383
352
|
.execute();
|
|
384
|
-
await t
|
|
385
|
-
|
|
386
|
-
.
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
parentRunId: ctx.runId,
|
|
353
|
+
const gates = await orgAgentGates(t, a, plan.agentId, plan.agentType, plan.resumed);
|
|
354
|
+
if ("refused" in gates)
|
|
355
|
+
return { kind: "gate", outcome: gates.refused };
|
|
356
|
+
checked = gates.checked;
|
|
357
|
+
}
|
|
358
|
+
const task = await child(t, checked);
|
|
359
|
+
if (task === null)
|
|
360
|
+
return null;
|
|
361
|
+
await t
|
|
362
|
+
.insertInto("runs")
|
|
363
|
+
.values({
|
|
364
|
+
id: childRunId,
|
|
365
|
+
conversation_id: plan.childConversationId,
|
|
366
|
+
status: "queued",
|
|
367
|
+
agent_version: plan.agentVersion,
|
|
368
|
+
trigger_account_id: ctx.accountId,
|
|
369
|
+
trigger_seq: task.seq,
|
|
370
|
+
})
|
|
371
|
+
.execute();
|
|
372
|
+
await t
|
|
373
|
+
.insertInto("subagent_dispatches")
|
|
374
|
+
.values({
|
|
375
|
+
parent_run_id: ctx.runId,
|
|
376
|
+
parent_call_id: callId,
|
|
377
|
+
parent_conversation_id: ctx.conversationId,
|
|
378
|
+
step: ctx.step,
|
|
379
|
+
child_conversation_id: plan.childConversationId,
|
|
380
|
+
child_run_id: childRunId,
|
|
381
|
+
resumed: plan.resumed,
|
|
382
|
+
})
|
|
383
|
+
.execute();
|
|
384
|
+
const [dispatched] = await d.eventLog.appendIn(ctx.conversationId, [
|
|
385
|
+
{
|
|
386
|
+
type: "subagent_dispatched",
|
|
387
|
+
runId: ctx.runId,
|
|
388
|
+
idemKey: dispatchedIdemKey(ctx.runId, callId),
|
|
389
|
+
payload: {
|
|
390
|
+
step: ctx.step,
|
|
423
391
|
callId,
|
|
392
|
+
subagentId: plan.childConversationId,
|
|
393
|
+
childRunId,
|
|
424
394
|
agentType: plan.agentType,
|
|
425
|
-
|
|
426
|
-
...(plan.source === "agent" && {
|
|
427
|
-
agentId: plan.agentId,
|
|
428
|
-
agentVersion: plan.agentVersion,
|
|
429
|
-
}),
|
|
395
|
+
description: input.description,
|
|
430
396
|
resumed: plan.resumed,
|
|
431
|
-
|
|
397
|
+
model: { provider: plan.model.provider, model: plan.model.model },
|
|
398
|
+
...(plan.tierFallback && { tierFallback: true }),
|
|
399
|
+
...(a.forSkill !== undefined && { invokedSeq: a.forSkill.seq }),
|
|
432
400
|
},
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
401
|
+
},
|
|
402
|
+
]);
|
|
403
|
+
await audit(t, {
|
|
404
|
+
actorAccountId: ctx.accountId,
|
|
405
|
+
orgId: ctx.orgId,
|
|
406
|
+
action: "subagent.dispatched",
|
|
407
|
+
target: plan.childConversationId,
|
|
408
|
+
detail: {
|
|
409
|
+
parentConversationId: ctx.conversationId,
|
|
410
|
+
parentRunId: ctx.runId,
|
|
411
|
+
callId,
|
|
412
|
+
agentType: plan.agentType,
|
|
413
|
+
source: plan.source,
|
|
414
|
+
...(plan.source === "agent" && {
|
|
415
|
+
agentId: plan.agentId,
|
|
416
|
+
agentVersion: plan.agentVersion,
|
|
417
|
+
}),
|
|
418
|
+
resumed: plan.resumed,
|
|
419
|
+
childRunId,
|
|
420
|
+
},
|
|
439
421
|
});
|
|
422
|
+
return {
|
|
423
|
+
kind: "written",
|
|
424
|
+
childRunId,
|
|
425
|
+
childSeq: task.seq,
|
|
426
|
+
parentSeq: dispatched.seq,
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
async function commit(d, a, plan,
|
|
430
|
+
/** Writes the child's events; `checked` is the org agent version the in-lock gates passed. */
|
|
431
|
+
child) {
|
|
432
|
+
const { ctx } = a;
|
|
433
|
+
const out = await d.commitDispatch(a, plan, child);
|
|
440
434
|
if (out === null)
|
|
441
435
|
return null;
|
|
442
436
|
if (out.kind === "existing") {
|
|
@@ -464,6 +458,7 @@ child) {
|
|
|
464
458
|
return out.outcome;
|
|
465
459
|
await d.eventLog.notify(plan.childConversationId, out.childSeq);
|
|
466
460
|
await d.eventLog.notify(ctx.conversationId, out.parentSeq);
|
|
461
|
+
const childRunId = out.childRunId;
|
|
467
462
|
const jobId = runJobId(plan.childConversationId, out.childSeq);
|
|
468
463
|
try {
|
|
469
464
|
await d.enqueue({ runId: childRunId, conversationId: plan.childConversationId }, jobId, "subagent");
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import type { Transaction } from "kysely";
|
|
2
1
|
import { type KernelConfig } from "../../config/schema.js";
|
|
3
|
-
import type {
|
|
2
|
+
import type { KernelSchemaDb } from "../../db/kernel-schema.js";
|
|
3
|
+
/** The config the limits read (`KernelConfigService`, live: `subagents.*` is hot). */
|
|
4
|
+
export interface SubagentsConfig {
|
|
5
|
+
get(): Pick<KernelConfig, "subagents">;
|
|
6
|
+
}
|
|
4
7
|
/** The sub-agent limits of one parent run (sub-agents spec §8.2). */
|
|
5
8
|
export interface SubagentLimits {
|
|
6
9
|
maxConcurrentPerRun: number;
|
|
@@ -14,10 +17,12 @@ export declare const SUBAGENT_LIMIT_DEFAULTS: SubagentLimits;
|
|
|
14
17
|
* `subagentLimitOverrides`, value by value, over the hot config `subagents.*`. Read live (no cache),
|
|
15
18
|
* in the caller's transaction when one is given, so every replica applies a change at once.
|
|
16
19
|
*/
|
|
17
|
-
export declare function subagentLimits(
|
|
20
|
+
export declare function subagentLimits(
|
|
21
|
+
/** The pool, or the context's handle (a `@Transactional` caller's transaction). */
|
|
22
|
+
db: KernelSchemaDb, config: SubagentsConfig, orgId: string): Promise<SubagentLimits>;
|
|
18
23
|
/**
|
|
19
24
|
* Whether the sub-agents of `parentRunId` have used their token budget (§8.3): its
|
|
20
25
|
* `subagent_tokens_used`, read fresh, at or over `maxTokensPerRun`. A sub-agent's step checks it
|
|
21
26
|
* before every model request and ends its run with `budget` when it is.
|
|
22
27
|
*/
|
|
23
|
-
export declare function subagentBudgetUsedUp(db:
|
|
28
|
+
export declare function subagentBudgetUsedUp(db: KernelSchemaDb, config: SubagentsConfig, orgId: string, parentRunId: string): Promise<boolean>;
|
|
@@ -7,8 +7,10 @@ export const SUBAGENT_LIMIT_DEFAULTS = KernelConfigSchema.shape.subagents.parse(
|
|
|
7
7
|
* `subagentLimitOverrides`, value by value, over the hot config `subagents.*`. Read live (no cache),
|
|
8
8
|
* in the caller's transaction when one is given, so every replica applies a change at once.
|
|
9
9
|
*/
|
|
10
|
-
export async function subagentLimits(
|
|
11
|
-
|
|
10
|
+
export async function subagentLimits(
|
|
11
|
+
/** The pool, or the context's handle (a `@Transactional` caller's transaction). */
|
|
12
|
+
db, config, orgId) {
|
|
13
|
+
const base = config.get().subagents;
|
|
12
14
|
const over = await readSubagentLimitOverride(db, orgId);
|
|
13
15
|
return {
|
|
14
16
|
maxConcurrentPerRun: over?.maxConcurrentPerRun ?? base.maxConcurrentPerRun,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type AgentDefinition } from "../../agents/definition.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type { KernelSchemaDb } from "../../db/kernel-schema.js";
|
|
3
3
|
/**
|
|
4
4
|
* The gates an org agent sub-agent passes (spec §5.5), checked at every dispatch and every
|
|
5
5
|
* follow-up: `deleted` (the agent is gone, or not of this org), `allowlist` (the parent agent's
|
|
@@ -22,7 +22,7 @@ export type OrgAgentCheck = {
|
|
|
22
22
|
* dispatches at once). On success returns the agent's current version and definition, which the
|
|
23
23
|
* caller freezes as is (never read again, so the frozen version is the one the gates saw).
|
|
24
24
|
*/
|
|
25
|
-
export declare function checkOrgAgent(db:
|
|
25
|
+
export declare function checkOrgAgent(db: KernelSchemaDb, a: {
|
|
26
26
|
orgId: string;
|
|
27
27
|
parentDefinition: Pick<AgentDefinition, "subagents">;
|
|
28
28
|
agentId: string;
|
|
@@ -32,12 +32,12 @@ export declare function checkOrgAgent(db: KernelDb, a: {
|
|
|
32
32
|
* The parent agent's current definition (the allowlist gate reads it, not the run's version), or
|
|
33
33
|
* null when the agent no longer exists or is deleted.
|
|
34
34
|
*/
|
|
35
|
-
export declare function currentAgentDefinition(db:
|
|
35
|
+
export declare function currentAgentDefinition(db: KernelSchemaDb, agentId: string): Promise<AgentDefinition | null>;
|
|
36
36
|
/**
|
|
37
37
|
* Audits a refused org agent dispatch (`subagent.refused`, spec §5.5): actor the person who
|
|
38
38
|
* started the parent run, target the refused agent, so its owner can see attempts to use it.
|
|
39
39
|
*/
|
|
40
|
-
export declare function auditRefusal(db:
|
|
40
|
+
export declare function auditRefusal(db: KernelSchemaDb, a: {
|
|
41
41
|
orgId: string;
|
|
42
42
|
triggerAccountId: string;
|
|
43
43
|
agentId: string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { isAgentVisibleTo } from "../../agents/
|
|
1
|
+
import { isAgentVisibleTo } from "../../agents/agent-lookup.js";
|
|
2
2
|
import { normalizeStoredDefinition } from "../../agents/definition.js";
|
|
3
3
|
import { audit } from "../../identity/audit.js";
|
|
4
|
+
import { normalizeStoredDefinitionIn } from "../../tools/legacy-data.js";
|
|
4
5
|
/**
|
|
5
6
|
* Checks the gates for dispatching `agentId` from a parent whose current definition is
|
|
6
7
|
* `parentDefinition` (read live by the caller: R5, removing an allowlist entry stops new
|
|
@@ -23,7 +24,7 @@ export async function checkOrgAgent(db, a) {
|
|
|
23
24
|
if (!(a.parentDefinition.subagents?.agents ?? []).some((x) => x.agentId === a.agentId)) {
|
|
24
25
|
return { ok: false, gate: "allowlist" };
|
|
25
26
|
}
|
|
26
|
-
const definition =
|
|
27
|
+
const definition = await normalizeStoredDefinitionIn(db, a.orgId, row.definition);
|
|
27
28
|
if (definition.subagents?.dispatchable !== true)
|
|
28
29
|
return { ok: false, gate: "dispatchable" };
|
|
29
30
|
if (!(await isAgentVisibleTo(db, a.agentId, a.triggerAccountId))) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Logger } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import type {
|
|
2
|
+
import type { KernelSchemaDb } from "../../db/kernel-schema.js";
|
|
3
3
|
/** A finished step of a sub-agent run, as the loop reports it. */
|
|
4
4
|
export interface SubagentStep {
|
|
5
5
|
/** The parent conversation, whose topic gets the message. */
|
|
@@ -10,7 +10,7 @@ export interface SubagentStep {
|
|
|
10
10
|
step: number;
|
|
11
11
|
}
|
|
12
12
|
export interface SubagentProgressDeps {
|
|
13
|
-
db:
|
|
13
|
+
db: KernelSchemaDb;
|
|
14
14
|
bus: {
|
|
15
15
|
publish(topic: string, payload: unknown): Promise<void>;
|
|
16
16
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AgentDefinition } from "../../agents/definition.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type { KernelSchemaDb } from "../../db/kernel-schema.js";
|
|
3
3
|
/**
|
|
4
4
|
* The sub-agent roster of an agent version (phase C, spec §4.3, §5.1): the agent types its `agent`
|
|
5
5
|
* tool offers, in the order the description lists them.
|
|
@@ -31,7 +31,7 @@ export declare const templateType: (plugin: string, name: string) => string;
|
|
|
31
31
|
* since the save are skipped; allowlisted org agents stay listed (the dispatch checks their gates
|
|
32
32
|
* and refuses with the §4.5 text), with `agentName` only while the agent is live.
|
|
33
33
|
*/
|
|
34
|
-
export declare function resolveRoster(db:
|
|
34
|
+
export declare function resolveRoster(db: KernelSchemaDb, orgId: string, parent: Pick<AgentDefinition, "subagents">): Promise<RosterEntry[]>;
|
|
35
35
|
/**
|
|
36
36
|
* The roster entry for a requested `subagent_type`: an exact type first; else a bare `<name>`
|
|
37
37
|
* matches the plugin template `<plugin>:<name>` when exactly one has it (as Claude Code accepts
|
|
@@ -45,10 +45,10 @@ export declare const isGeneralAlias: (agent: string) => boolean;
|
|
|
45
45
|
* `general-purpose` for no `agent` and Claude's built-in types; else a roster type (a bare name
|
|
46
46
|
* prefers the skill's own plugin's template `<plugin>:<name>`, then {@link findType}). An `agent`
|
|
47
47
|
* that does not resolve falls back to `general-purpose` and is returned as `unknown`. `inRoster`:
|
|
48
|
-
* the type is one the parent's `
|
|
48
|
+
* the type is one the parent's `Agent` tool offers (`general-purpose` is not when
|
|
49
49
|
* `subagents.general === false`, which does not block a person's fork invocation).
|
|
50
50
|
*/
|
|
51
|
-
export declare function resolveSkillForkType(db:
|
|
51
|
+
export declare function resolveSkillForkType(db: KernelSchemaDb, orgId: string, parent: Pick<AgentDefinition, "subagents">, agent: string | undefined, plugin: string | undefined): Promise<{
|
|
52
52
|
agentType: string;
|
|
53
53
|
unknown?: string;
|
|
54
54
|
inRoster: boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SUBAGENT_ROSTER_MAX } from "../../agents/
|
|
1
|
+
import { SUBAGENT_ROSTER_MAX } from "../../agents/definition.js";
|
|
2
2
|
import { loadTemplates } from "../../agents/templates.js";
|
|
3
3
|
export const ROSTER_DESCRIPTION_MAX = 1024;
|
|
4
4
|
/** The description of `general-purpose` in the roster (spec §4.3, model-visible). */
|
|
@@ -90,7 +90,7 @@ export const isGeneralAlias = (agent) => GENERAL_ALIASES.has(agent);
|
|
|
90
90
|
* `general-purpose` for no `agent` and Claude's built-in types; else a roster type (a bare name
|
|
91
91
|
* prefers the skill's own plugin's template `<plugin>:<name>`, then {@link findType}). An `agent`
|
|
92
92
|
* that does not resolve falls back to `general-purpose` and is returned as `unknown`. `inRoster`:
|
|
93
|
-
* the type is one the parent's `
|
|
93
|
+
* the type is one the parent's `Agent` tool offers (`general-purpose` is not when
|
|
94
94
|
* `subagents.general === false`, which does not block a person's fork invocation).
|
|
95
95
|
*/
|
|
96
96
|
export async function resolveSkillForkType(db, orgId, parent, agent, plugin) {
|
|
@@ -1,21 +1,19 @@
|
|
|
1
|
-
import type { Transaction } from "kysely";
|
|
2
1
|
import type { EventLog } from "../../conversations/event-log.js";
|
|
3
2
|
import type { ConversationEvent, EventPayload } from "../../conversations/events.js";
|
|
4
|
-
import type {
|
|
3
|
+
import type { KernelSchemaDb } from "../../db/kernel-schema.js";
|
|
5
4
|
import { ApiError } from "../../errors.js";
|
|
6
5
|
import type { SkillInvoker } from "../../skills/invoke.js";
|
|
7
|
-
import type
|
|
6
|
+
import { type LoopContext, type WaitingFor } from "../loop.js";
|
|
8
7
|
import { type DispatchDeps } from "./dispatch.js";
|
|
9
8
|
/**
|
|
10
9
|
* Forked skills (phase D spec §6): a person's invocation of a `context: fork` skill starts its own
|
|
11
10
|
* run (the run boundary, {@link forkBoundary}), whose `prepare` node dispatches the sub-agent
|
|
12
|
-
* through phase C's `dispatchSubagent` before any model call and waits on it like an `
|
|
11
|
+
* through phase C's `dispatchSubagent` before any model call and waits on it like an `Agent` call
|
|
13
12
|
* (`subagents` wait `sa-<runId>-0`). When the child has ended, `prepare` appends the model-visible
|
|
14
13
|
* `skill_fork_result` and the parent's model answers. Every terminal path of the run (and the wait
|
|
15
14
|
* sweep) pairs a fork invocation without a report ({@link pairStoppedForks}), so the log never holds
|
|
16
15
|
* a fork lead whose report is missing before the next model call.
|
|
17
16
|
*/
|
|
18
|
-
type KernelTrx = Transaction<KernelDatabase>;
|
|
19
17
|
/** The dispatch's parent call id (no `:`; there is no tool call). */
|
|
20
18
|
export declare const skillCallId: (seq: number) => string;
|
|
21
19
|
/** Idempotency key of a fork invocation's report (one per invocation, whatever the run). */
|
|
@@ -109,15 +107,16 @@ export declare const recordedSkillForks: (eventLog: Pick<EventLog, "append" | "f
|
|
|
109
107
|
payload: unknown;
|
|
110
108
|
}[]) => SkillForks;
|
|
111
109
|
/**
|
|
112
|
-
* In the transaction
|
|
110
|
+
* In the transaction of a run's terminal path (or the wait sweep): the run's fork invocation
|
|
113
111
|
* (its trigger message, by the run boundary) without a report gets one now: the ended child's
|
|
114
112
|
* result (and the parent's missing `subagent_finished`), {@link AGENT_STOPPED_WITH_RUN_TEXT} for a
|
|
115
|
-
* child still active (the caller stops it after its commit, as for `
|
|
113
|
+
* child still active (the caller stops it after its commit, as for `Agent` calls), or
|
|
116
114
|
* {@link FORK_NOT_STARTED_TEXT} when nothing was dispatched. Returns the call ids written
|
|
117
115
|
* (`skill-<seq>`) and the highest seq; the caller notifies after its commit.
|
|
118
116
|
*/
|
|
119
|
-
export declare function pairStoppedForks(
|
|
117
|
+
export declare function pairStoppedForks(
|
|
118
|
+
/** The caller's transaction (the context's handle). */
|
|
119
|
+
t: KernelSchemaDb, eventLog: EventLog, runId: string): Promise<{
|
|
120
120
|
callIds: string[];
|
|
121
121
|
toSeq: number | null;
|
|
122
122
|
}>;
|
|
123
|
-
export {};
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { ApiError } from "../../errors.js";
|
|
2
2
|
import { AGENT_STOPPED_WITH_RUN_TEXT } from "../../tools/builtins/agent.js";
|
|
3
|
-
import { subagentsWait } from "
|
|
3
|
+
import { subagentsWait } from "../loop.js";
|
|
4
4
|
import { TERMINAL_STATUSES } from "../run-finish.js";
|
|
5
5
|
import { childResult, dispatchOfCall, finishedEvent } from "./child.js";
|
|
6
6
|
import { dispatchSubagent } from "./dispatch.js";
|
|
7
|
+
/**
|
|
8
|
+
* Forked skills (phase D spec §6): a person's invocation of a `context: fork` skill starts its own
|
|
9
|
+
* run (the run boundary, {@link forkBoundary}), whose `prepare` node dispatches the sub-agent
|
|
10
|
+
* through phase C's `dispatchSubagent` before any model call and waits on it like an `Agent` call
|
|
11
|
+
* (`subagents` wait `sa-<runId>-0`). When the child has ended, `prepare` appends the model-visible
|
|
12
|
+
* `skill_fork_result` and the parent's model answers. Every terminal path of the run (and the wait
|
|
13
|
+
* sweep) pairs a fork invocation without a report ({@link pairStoppedForks}), so the log never holds
|
|
14
|
+
* a fork lead whose report is missing before the next model call.
|
|
15
|
+
*/
|
|
7
16
|
/** The dispatch's parent call id (no `:`; there is no tool call). */
|
|
8
17
|
export const skillCallId = (seq) => `skill-${seq}`;
|
|
9
18
|
/** Idempotency key of a fork invocation's report (one per invocation, whatever the run). */
|
|
@@ -146,7 +155,7 @@ export async function advanceSkillForks(d, a) {
|
|
|
146
155
|
}
|
|
147
156
|
const suspend = (d, ctx) => ({
|
|
148
157
|
kind: "suspend",
|
|
149
|
-
waitingFor: subagentsWait(ctx.runId, FORK_STEP, d.config()),
|
|
158
|
+
waitingFor: subagentsWait(ctx.runId, FORK_STEP, d.config.get()),
|
|
150
159
|
});
|
|
151
160
|
/** The live handler for the loop (`LoopDeps.skillForks`). */
|
|
152
161
|
export const liveSkillForks = (d) => ({
|
|
@@ -178,14 +187,16 @@ export const recordedSkillForks = (eventLog, recorded) => ({
|
|
|
178
187
|
},
|
|
179
188
|
});
|
|
180
189
|
/**
|
|
181
|
-
* In the transaction
|
|
190
|
+
* In the transaction of a run's terminal path (or the wait sweep): the run's fork invocation
|
|
182
191
|
* (its trigger message, by the run boundary) without a report gets one now: the ended child's
|
|
183
192
|
* result (and the parent's missing `subagent_finished`), {@link AGENT_STOPPED_WITH_RUN_TEXT} for a
|
|
184
|
-
* child still active (the caller stops it after its commit, as for `
|
|
193
|
+
* child still active (the caller stops it after its commit, as for `Agent` calls), or
|
|
185
194
|
* {@link FORK_NOT_STARTED_TEXT} when nothing was dispatched. Returns the call ids written
|
|
186
195
|
* (`skill-<seq>`) and the highest seq; the caller notifies after its commit.
|
|
187
196
|
*/
|
|
188
|
-
export async function pairStoppedForks(
|
|
197
|
+
export async function pairStoppedForks(
|
|
198
|
+
/** The caller's transaction (the context's handle). */
|
|
199
|
+
t, eventLog, runId) {
|
|
189
200
|
const none = { callIds: [], toSeq: null };
|
|
190
201
|
const run = await t
|
|
191
202
|
.selectFrom("runs as r")
|
|
@@ -254,6 +265,6 @@ export async function pairStoppedForks(t, eventLog, runId) {
|
|
|
254
265
|
events.push(finishedEvent(row, ended.finished));
|
|
255
266
|
events.push(reportEvent(runId, seq, forkReportText(skill.name, ended ? ended.content : AGENT_STOPPED_WITH_RUN_TEXT), row));
|
|
256
267
|
}
|
|
257
|
-
const out = await eventLog.
|
|
268
|
+
const out = await eventLog.appendIn(conversationId, events);
|
|
258
269
|
return { callIds: [callId], toSeq: Math.max(...out.map((e) => e.seq)) };
|
|
259
270
|
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ExtensionContext } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { EventLog } from "../../conversations/event-log.js";
|
|
3
|
+
import { KernelConfigService } from "../../infra/config/kernel-config.service.js";
|
|
4
|
+
import { KernelDb } from "../../infra/database/kernel-db.js";
|
|
5
|
+
import { TransactionHost } from "../../infra/database/transaction-host.js";
|
|
6
|
+
import type { KernelLogger } from "../../log.js";
|
|
7
|
+
import { ModelPurposesService } from "../../models/purposes.js";
|
|
8
|
+
import { SkillInvoker } from "../../skills/invoke.js";
|
|
9
|
+
import { ProviderRegistry } from "../providers.js";
|
|
10
|
+
import { RunJobs } from "../run-jobs.js";
|
|
11
|
+
import { type ChildWriter, type DispatchArgs, type DispatchCommit, type DispatchOutcome, type DispatchPlan } from "./dispatch.js";
|
|
12
|
+
import { type SubagentStep } from "./progress.js";
|
|
13
|
+
import { type SkillForkDeps, type SkillForks } from "./skill-fork.js";
|
|
14
|
+
/**
|
|
15
|
+
* Sub-agents (phase C, spec §7) and forked skills (phase D): the `Agent` tool's dispatch (the
|
|
16
|
+
* tool pipeline calls {@link dispatch}), a run's fork invocation ({@link skillForks}, the loop's
|
|
17
|
+
* `prepare`) and a child step's progress on the parent's stream ({@link progress}). Child runs go
|
|
18
|
+
* to the sub-agent run queue through {@link RunJobs}. The child lifecycle after dispatch (a
|
|
19
|
+
* finished child resumes its parent, a stopped parent stops its children) is the waits'
|
|
20
|
+
* (`Waits.childFinished` / `stopChildren`).
|
|
21
|
+
*/
|
|
22
|
+
export declare class SubagentsService {
|
|
23
|
+
private readonly bus;
|
|
24
|
+
private readonly log;
|
|
25
|
+
readonly txHost: TransactionHost;
|
|
26
|
+
/** The dispatch's dependencies (`dispatch.ts`, `skill-fork.ts`). */
|
|
27
|
+
readonly deps: SkillForkDeps;
|
|
28
|
+
/** The live fork handler of the loop (`LoopDeps.skillForks`). */
|
|
29
|
+
readonly skillForks: SkillForks;
|
|
30
|
+
constructor(kdb: KernelDb, eventLog: EventLog, purposes: ModelPurposesService, registry: ProviderRegistry, config: KernelConfigService, jobs: RunJobs, invoker: SkillInvoker, bus: ExtensionContext["bus"], log: KernelLogger, txHost: TransactionHost);
|
|
31
|
+
/** Dispatches the sub-agent of one `Agent` call (`dispatchSubagent`). */
|
|
32
|
+
dispatch(a: DispatchArgs): Promise<DispatchOutcome>;
|
|
33
|
+
/** The dispatch's writes in a transaction of their own (see `commitDispatchIn`). */
|
|
34
|
+
commitDispatch(a: DispatchArgs, plan: DispatchPlan, child: ChildWriter): Promise<DispatchCommit | null>;
|
|
35
|
+
/** A sub-agent's finished step on its parent's stream (sub-agents spec §14.2). Never throws. */
|
|
36
|
+
progress(s: SubagentStep): Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
/** Sub-agent dispatch (the tools domain's `Agent` tool and the run loop use it). */
|
|
39
|
+
export declare class SubagentsModule {
|
|
40
|
+
}
|