@capybara-hq/kernel 0.1.0-rc.1 → 0.1.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin.controller.d.ts +17 -17
- package/dist/admin/admin.controller.js +43 -26
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/extensions.controller.d.ts +14 -14
- package/dist/admin/extensions.controller.js +30 -17
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +8 -8
- package/dist/admin/setup.controller.js +27 -25
- package/dist/admin/setup.service.d.ts +19 -27
- package/dist/admin/setup.service.js +61 -61
- package/dist/agents/agent-lookup.d.ts +53 -0
- package/dist/agents/agent-lookup.js +179 -0
- package/dist/agents/agents.controller.d.ts +1 -1
- package/dist/agents/agents.controller.js +14 -8
- package/dist/agents/agents.module.d.ts +7 -0
- package/dist/agents/agents.module.js +41 -0
- package/dist/agents/agents.service.d.ts +39 -58
- package/dist/agents/agents.service.js +261 -329
- package/dist/agents/definition.d.ts +8 -0
- package/dist/agents/definition.js +8 -0
- package/dist/agents/models.controller.d.ts +1 -1
- package/dist/agents/models.controller.js +2 -2
- package/dist/agents/templates.controller.d.ts +1 -1
- package/dist/agents/templates.controller.js +2 -2
- package/dist/agents/templates.d.ts +6 -8
- package/dist/agents/templates.js +20 -4
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -0
- package/dist/catalog/admin-catalog.controller.d.ts +3 -3
- package/dist/catalog/admin-catalog.controller.js +27 -13
- package/dist/catalog/catalog-content.d.ts +185 -0
- package/dist/catalog/catalog-content.js +323 -0
- package/dist/catalog/catalog-items.d.ts +186 -0
- package/dist/catalog/catalog-items.js +410 -0
- package/dist/catalog/catalog.module.d.ts +14 -0
- package/dist/catalog/catalog.module.js +71 -0
- package/dist/catalog/catalog.service.d.ts +34 -188
- package/dist/catalog/catalog.service.js +155 -489
- package/dist/catalog/cli.d.ts +3 -2
- package/dist/catalog/cli.js +13 -31
- package/dist/catalog/job-ids.d.ts +15 -0
- package/dist/catalog/job-ids.js +15 -0
- package/dist/catalog/jobs.d.ts +27 -0
- package/dist/catalog/jobs.js +70 -0
- package/dist/catalog/locks.d.ts +24 -0
- package/dist/catalog/locks.js +63 -0
- package/dist/catalog/marketplaces.controller.d.ts +4 -4
- package/dist/catalog/marketplaces.controller.js +22 -11
- package/dist/catalog/marketplaces.service.d.ts +30 -13
- package/dist/catalog/marketplaces.service.js +330 -256
- package/dist/catalog/org-catalog.controller.d.ts +4 -3
- package/dist/catalog/org-catalog.controller.js +29 -14
- package/dist/catalog/org-catalog.service.d.ts +32 -198
- package/dist/catalog/org-catalog.service.js +159 -400
- package/dist/catalog/plugin-import.d.ts +73 -34
- package/dist/catalog/plugin-import.js +356 -217
- package/dist/catalog/plugin-install.d.ts +83 -41
- package/dist/catalog/plugin-install.js +421 -269
- package/dist/catalog/plugin-upgrade.d.ts +59 -4
- package/dist/catalog/plugin-upgrade.js +407 -282
- package/dist/catalog/requests.service.d.ts +27 -15
- package/dist/catalog/requests.service.js +201 -145
- package/dist/catalog/upgrade-targets.d.ts +4 -7
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +1 -1
- package/dist/channels/cards.d.ts +2 -2
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +128 -0
- package/dist/channels/connections.controller.d.ts +1 -1
- package/dist/channels/connections.controller.js +11 -6
- package/dist/channels/connections.service.d.ts +43 -21
- package/dist/channels/connections.service.js +236 -131
- package/dist/channels/inbound.d.ts +34 -38
- package/dist/channels/inbound.js +107 -41
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +60 -82
- package/dist/channels/outbound.js +165 -194
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +29 -8
- package/dist/channels/threads.js +71 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +1 -0
- package/dist/config/schema.js +10 -4
- package/dist/conversations/access.d.ts +29 -0
- package/dist/conversations/access.js +86 -0
- package/dist/conversations/artifacts.d.ts +10 -10
- package/dist/conversations/artifacts.js +35 -9
- package/dist/conversations/attachments.controller.d.ts +1 -1
- package/dist/conversations/attachments.controller.js +8 -6
- package/dist/conversations/attachments.module.d.ts +7 -0
- package/dist/conversations/attachments.module.js +25 -0
- package/dist/conversations/attachments.service.d.ts +30 -22
- package/dist/conversations/attachments.service.js +119 -46
- package/dist/conversations/conversations.controller.d.ts +8 -7
- package/dist/conversations/conversations.controller.js +59 -29
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +69 -0
- package/dist/conversations/conversations.service.d.ts +40 -38
- package/dist/conversations/conversations.service.js +130 -140
- package/dist/conversations/event-log.d.ts +28 -18
- package/dist/conversations/event-log.js +74 -27
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +48 -56
- package/dist/conversations/queue.js +13 -289
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +343 -0
- package/dist/conversations/sandbox-status.d.ts +13 -10
- package/dist/conversations/sandbox-status.js +36 -8
- package/dist/conversations/titles.d.ts +71 -24
- package/dist/conversations/titles.js +159 -63
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +6 -0
- package/dist/ctx/create-ctx.js +7 -9
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +2 -2
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +1 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +1 -0
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/run-replay.d.ts +56 -8
- package/dist/evals/run-replay.js +140 -80
- package/dist/evals/runs.controller.d.ts +1 -1
- package/dist/evals/runs.controller.js +17 -8
- package/dist/evals/runs.service.d.ts +23 -45
- package/dist/evals/runs.service.js +245 -234
- package/dist/evals/sets.controller.d.ts +1 -1
- package/dist/evals/sets.controller.js +17 -8
- package/dist/evals/sets.service.d.ts +22 -6
- package/dist/evals/sets.service.js +248 -194
- package/dist/evals/snapshot.d.ts +2 -2
- package/dist/evals/step-replay.d.ts +2 -2
- package/dist/evals/step-replay.js +1 -1
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.service.d.ts +5 -4
- package/dist/evals/trajectory.service.js +30 -7
- package/dist/evals/worker.d.ts +44 -27
- package/dist/evals/worker.js +220 -121
- package/dist/extensions/admin-ops.d.ts +61 -33
- package/dist/extensions/admin-ops.js +248 -154
- package/dist/extensions/admin-view.d.ts +38 -27
- package/dist/extensions/admin-view.js +126 -55
- package/dist/extensions/approvals.d.ts +12 -8
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +111 -45
- package/dist/extensions/bootstrap.d.ts +58 -31
- package/dist/extensions/bootstrap.js +175 -121
- package/dist/extensions/cli.d.ts +20 -10
- package/dist/extensions/cli.js +41 -96
- package/dist/extensions/config-issues.d.ts +7 -0
- package/dist/extensions/config-issues.js +31 -0
- package/dist/extensions/deployment-config-store.d.ts +49 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +58 -67
- package/dist/extensions/deployment-config.js +202 -230
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +77 -0
- package/dist/extensions/hooks.d.ts +3 -2
- package/dist/extensions/hooks.js +1 -1
- package/dist/extensions/host.d.ts +72 -68
- package/dist/extensions/host.js +191 -152
- package/dist/extensions/installs.d.ts +49 -16
- package/dist/extensions/installs.js +128 -32
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +33 -0
- package/dist/extensions/locks.js +86 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.controller.d.ts +1 -1
- package/dist/extensions/org-config.controller.js +8 -5
- package/dist/extensions/org-config.d.ts +48 -46
- package/dist/extensions/org-config.js +284 -226
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +89 -4
- package/dist/extensions/sources.d.ts +12 -8
- package/dist/extensions/sources.js +34 -13
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +17 -9
- package/dist/files/previewers.d.ts +13 -18
- package/dist/files/previewers.js +83 -36
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +47 -355
- package/dist/http/app.d.ts +11 -15
- package/dist/http/app.js +17 -62
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/identity/accounts.d.ts +82 -29
- package/dist/identity/accounts.js +294 -175
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +7 -4
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +31 -25
- package/dist/identity/auth.guard.d.ts +3 -3
- package/dist/identity/auth.guard.js +6 -4
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/enterprise-admin.d.ts +18 -12
- package/dist/identity/enterprise-admin.js +67 -13
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +56 -0
- package/dist/identity/me.controller.d.ts +16 -15
- package/dist/identity/me.controller.js +37 -31
- package/dist/identity/sessions.d.ts +12 -10
- package/dist/identity/sessions.js +74 -42
- package/dist/identity/settings.d.ts +20 -14
- package/dist/identity/settings.js +85 -57
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/inbox/inbox.module.d.ts +3 -0
- package/dist/inbox/inbox.module.js +22 -0
- package/dist/inbox/inbox.service.d.ts +7 -9
- package/dist/inbox/inbox.service.js +32 -11
- package/dist/index.d.ts +16 -11
- package/dist/index.js +9 -6
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +165 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +126 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +90 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +96 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +86 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +16 -0
- package/dist/infra/logging/logging.module.js +34 -0
- package/dist/infra/queue/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +7 -0
- package/dist/infra/queue/redis-connection.js +18 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +87 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +31 -0
- package/dist/infra/throttler/named-throttlers.js +119 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +15 -0
- package/dist/infra/tokens.js +15 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -244
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +136 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +451 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-context.d.ts +2 -0
- package/dist/log-context.js +4 -0
- package/dist/models/models.module.d.ts +3 -0
- package/dist/models/models.module.js +24 -0
- package/dist/models/prices.d.ts +8 -2
- package/dist/models/prices.js +65 -37
- package/dist/models/purposes.controller.d.ts +1 -1
- package/dist/models/purposes.controller.js +5 -6
- package/dist/models/purposes.d.ts +35 -13
- package/dist/models/purposes.js +101 -51
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +61 -31
- package/dist/orgs/directory-sync.js +212 -125
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +54 -57
- package/dist/orgs/offboarding.js +161 -71
- package/dist/orgs/org-lock.d.ts +28 -19
- package/dist/orgs/org-lock.js +81 -35
- package/dist/orgs/org.guard.d.ts +1 -1
- package/dist/orgs/org.guard.js +2 -2
- package/dist/orgs/orgs.controller.d.ts +13 -13
- package/dist/orgs/orgs.controller.js +29 -17
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +68 -0
- package/dist/orgs/orgs.service.d.ts +30 -19
- package/dist/orgs/orgs.service.js +139 -86
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +14 -8
- package/dist/orgs/settings.service.js +75 -46
- package/dist/overrides.d.ts +56 -0
- package/dist/overrides.js +30 -0
- package/dist/roles/gateway-role.d.ts +43 -0
- package/dist/roles/gateway-role.js +98 -0
- package/dist/roles/gateway.module.d.ts +8 -0
- package/dist/roles/gateway.module.js +28 -0
- package/dist/roles/worker-role.d.ts +63 -0
- package/dist/roles/worker-role.js +144 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +90 -0
- package/dist/runtime/abort.js +19 -2
- package/dist/runtime/checkpointer.d.ts +8 -3
- package/dist/runtime/checkpointer.js +87 -55
- package/dist/runtime/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +3 -3
- package/dist/runtime/hook-calls.js +1 -6
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.js +1 -1
- package/dist/runtime/loop.d.ts +7 -0
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +45 -74
- package/dist/runtime/maintenance.js +139 -137
- package/dist/runtime/model-call.d.ts +7 -4
- package/dist/runtime/model-call.js +24 -57
- package/dist/runtime/providers.d.ts +17 -6
- package/dist/runtime/providers.js +66 -25
- package/dist/runtime/quota.d.ts +17 -3
- package/dist/runtime/quota.js +27 -2
- package/dist/runtime/retired-schedulers.d.ts +7 -0
- package/dist/runtime/retired-schedulers.js +31 -0
- package/dist/runtime/run-control.d.ts +33 -0
- package/dist/runtime/run-control.js +77 -0
- package/dist/runtime/run-finish.d.ts +26 -17
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +48 -0
- package/dist/runtime/run-jobs.js +95 -0
- package/dist/runtime/run-processors.d.ts +60 -0
- package/dist/runtime/run-processors.js +185 -0
- package/dist/runtime/run-queue.d.ts +32 -57
- package/dist/runtime/run-queue.js +291 -295
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +121 -75
- package/dist/runtime/run-worker.js +340 -226
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +112 -0
- package/dist/runtime/step-log.d.ts +40 -0
- package/dist/runtime/step-log.js +94 -0
- package/dist/runtime/stream.controller.d.ts +5 -8
- package/dist/runtime/stream.controller.js +14 -12
- package/dist/runtime/stream.d.ts +24 -6
- package/dist/runtime/stream.js +78 -7
- package/dist/runtime/subagents/child.d.ts +3 -44
- package/dist/runtime/subagents/child.js +0 -79
- package/dist/runtime/subagents/definition.d.ts +4 -4
- package/dist/runtime/subagents/definition.js +2 -2
- package/dist/runtime/subagents/dispatch.d.ts +87 -6
- package/dist/runtime/subagents/dispatch.js +135 -140
- package/dist/runtime/subagents/limits.d.ts +9 -4
- package/dist/runtime/subagents/limits.js +4 -2
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +1 -1
- package/dist/runtime/subagents/progress.d.ts +2 -2
- package/dist/runtime/subagents/roster.d.ts +3 -3
- package/dist/runtime/subagents/roster.js +1 -1
- package/dist/runtime/subagents/skill-fork.d.ts +6 -7
- package/dist/runtime/subagents/skill-fork.js +16 -5
- package/dist/runtime/subagents/subagents.service.d.ts +40 -0
- package/dist/runtime/subagents/subagents.service.js +101 -0
- package/dist/runtime/usage-report.d.ts +94 -52
- package/dist/runtime/usage-report.js +200 -100
- package/dist/runtime/waits.d.ts +125 -57
- package/dist/runtime/waits.js +431 -208
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +41 -0
- package/dist/sandbox/jobs.js +113 -0
- package/dist/sandbox/leases.d.ts +39 -31
- package/dist/sandbox/leases.js +117 -257
- package/dist/sandbox/providers.d.ts +19 -0
- package/dist/sandbox/providers.js +38 -0
- package/dist/sandbox/sandbox.module.d.ts +8 -0
- package/dist/sandbox/sandbox.module.js +30 -0
- package/dist/sandbox/sandbox.service.d.ts +24 -29
- package/dist/sandbox/sandbox.service.js +106 -75
- package/dist/skills/catalog.d.ts +33 -20
- package/dist/skills/catalog.js +96 -53
- package/dist/skills/changes.controller.d.ts +4 -4
- package/dist/skills/changes.controller.js +15 -9
- package/dist/skills/changes.service.d.ts +28 -18
- package/dist/skills/changes.service.js +421 -364
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +8 -5
- package/dist/skills/invoke.d.ts +16 -15
- package/dist/skills/invoke.js +48 -17
- package/dist/skills/skills.controller.d.ts +1 -1
- package/dist/skills/skills.controller.js +11 -6
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +30 -0
- package/dist/skills/skills.service.d.ts +47 -30
- package/dist/skills/skills.service.js +221 -158
- package/dist/storage/job-ids.d.ts +6 -0
- package/dist/storage/job-ids.js +6 -0
- package/dist/storage/purge.d.ts +22 -7
- package/dist/storage/purge.js +55 -3
- package/dist/storage/storage.module.d.ts +6 -0
- package/dist/storage/storage.module.js +23 -0
- package/dist/storage/storage.service.d.ts +18 -4
- package/dist/storage/storage.service.js +44 -3
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +12 -8
- package/dist/tools/approvals.service.d.ts +27 -25
- package/dist/tools/approvals.service.js +324 -258
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtins/ask-user.d.ts +2 -2
- package/dist/tools/builtins/ask-user.js +1 -1
- package/dist/tools/builtins/builtin-tools.d.ts +21 -0
- package/dist/tools/builtins/builtin-tools.js +80 -0
- package/dist/tools/builtins/read-tool-output.d.ts +2 -2
- package/dist/tools/builtins/read-tool-output.js +1 -1
- package/dist/tools/builtins/sandbox/bash.js +2 -2
- package/dist/tools/builtins/sandbox/common.d.ts +2 -1
- package/dist/tools/builtins/sandbox/deliver.js +2 -2
- package/dist/tools/builtins/sandbox/edit.js +1 -1
- package/dist/tools/builtins/sandbox/glob.js +2 -2
- package/dist/tools/builtins/sandbox/grep.js +2 -2
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/write.js +1 -1
- package/dist/tools/builtins/skill-load.d.ts +3 -3
- package/dist/tools/builtins/skill-load.js +1 -1
- package/dist/tools/canonical-json.d.ts +6 -0
- package/dist/tools/canonical-json.js +16 -0
- package/dist/tools/connector-content.controller.d.ts +1 -1
- package/dist/tools/connector-content.controller.js +11 -6
- package/dist/tools/connector-content.d.ts +12 -15
- package/dist/tools/connector-content.js +53 -18
- package/dist/tools/connectors.controller.d.ts +1 -1
- package/dist/tools/connectors.controller.js +21 -10
- package/dist/tools/connectors.service.d.ts +31 -13
- package/dist/tools/connectors.service.js +434 -344
- package/dist/tools/credentials.d.ts +17 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +111 -79
- package/dist/tools/info.d.ts +12 -9
- package/dist/tools/info.js +33 -7
- package/dist/tools/job-ids.d.ts +13 -0
- package/dist/tools/job-ids.js +15 -0
- package/dist/tools/jobs.d.ts +24 -0
- package/dist/tools/jobs.js +69 -0
- package/dist/tools/oauth/flow-paths.d.ts +16 -0
- package/dist/tools/oauth/flow-paths.js +38 -0
- package/dist/tools/oauth/flow.d.ts +30 -30
- package/dist/tools/oauth/flow.js +109 -81
- package/dist/tools/oauth/oauth.controller.d.ts +3 -3
- package/dist/tools/oauth/oauth.controller.js +12 -9
- package/dist/tools/oauth/tokens.d.ts +11 -3
- package/dist/tools/oauth/tokens.js +15 -14
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +47 -3
- package/dist/tools/pipeline.d.ts +62 -46
- package/dist/tools/pipeline.js +145 -64
- package/dist/tools/policy.d.ts +2 -2
- package/dist/tools/questions.controller.d.ts +1 -1
- package/dist/tools/questions.controller.js +8 -5
- package/dist/tools/questions.service.d.ts +25 -24
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +30 -20
- package/dist/tools/registry.js +73 -37
- package/dist/tools/specs.d.ts +5 -4
- package/dist/tools/specs.js +3 -1
- package/dist/tools/tools.module.d.ts +10 -0
- package/dist/tools/tools.module.js +91 -0
- package/dist/ui/call-extension.d.ts +16 -0
- package/dist/ui/call-extension.js +38 -0
- package/dist/ui/embed-token.d.ts +9 -5
- package/dist/ui/embed-token.js +34 -6
- package/dist/ui/ui-stream.d.ts +22 -17
- package/dist/ui/ui-stream.js +72 -12
- package/dist/ui/ui.module.d.ts +7 -0
- package/dist/ui/ui.module.js +28 -0
- package/dist/ui/views.controller.d.ts +14 -12
- package/dist/ui/views.controller.js +32 -25
- package/dist/ui/views.d.ts +9 -57
- package/dist/ui/views.js +43 -45
- package/package.json +9 -2
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
- /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
|
@@ -0,0 +1,343 @@
|
|
|
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 { randomUUID } from "node:crypto";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
12
|
+
import { sql } from "kysely";
|
|
13
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
14
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
15
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
16
|
+
import { RunControl as RunControlService } from "../runtime/run-control.js";
|
|
17
|
+
import { notInvocable } from "../skills/invoke.js";
|
|
18
|
+
import { ConversationsService, } from "./conversations.service.js";
|
|
19
|
+
import { EventLog, payloadJson } from "./event-log.js";
|
|
20
|
+
import { userMessageIdemKey } from "./idem-keys.js";
|
|
21
|
+
import { alreadySent, appendQueuedIn, COLUMNS, checkText, itemNotFound, noNul, QUEUE_MAX_ITEMS, queuedSkillBlocked, queueFull, storedSkill, toItem, unpauseIfEmpty, } from "./queue.js";
|
|
22
|
+
/**
|
|
23
|
+
* The queue API (owner only, as the conversation): list, add, edit the text, delete, send now and
|
|
24
|
+
* resume. Every change publishes `changed: queue`.
|
|
25
|
+
*/
|
|
26
|
+
let ConversationQueue = class ConversationQueue {
|
|
27
|
+
db;
|
|
28
|
+
eventLog;
|
|
29
|
+
conversations;
|
|
30
|
+
runs;
|
|
31
|
+
txHost;
|
|
32
|
+
constructor(db, eventLog, conversations,
|
|
33
|
+
/** Starts the conversation's next run (`ensureRun`). */
|
|
34
|
+
runs, txHost) {
|
|
35
|
+
this.db = db;
|
|
36
|
+
this.eventLog = eventLog;
|
|
37
|
+
this.conversations = conversations;
|
|
38
|
+
this.runs = runs;
|
|
39
|
+
this.txHost = txHost;
|
|
40
|
+
}
|
|
41
|
+
async list(orgId, conversationId, accountId) {
|
|
42
|
+
await this.conversations.get(orgId, conversationId, accountId);
|
|
43
|
+
return this.listIn(conversationId);
|
|
44
|
+
}
|
|
45
|
+
async listIn(conversationId) {
|
|
46
|
+
const t = this.db.db;
|
|
47
|
+
const conv = await t
|
|
48
|
+
.selectFrom("conversations")
|
|
49
|
+
.select(["queue_paused", "queue_pause_reason"])
|
|
50
|
+
.where("id", "=", conversationId)
|
|
51
|
+
.executeTakeFirstOrThrow();
|
|
52
|
+
const rows = await t
|
|
53
|
+
.selectFrom("conversation_queue")
|
|
54
|
+
.select(COLUMNS)
|
|
55
|
+
.where("conversation_id", "=", conversationId)
|
|
56
|
+
.orderBy("position")
|
|
57
|
+
.execute();
|
|
58
|
+
const reason = conv.queue_paused ? conv.queue_pause_reason : null;
|
|
59
|
+
return {
|
|
60
|
+
items: rows.map(toItem),
|
|
61
|
+
paused: conv.queue_paused,
|
|
62
|
+
...(reason !== null && { pauseReason: reason }),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Queues a message. `@` resources are read now with the caller's credentials and stored with the
|
|
67
|
+
* item, and uploaded files are bound to the conversation now, so sending later needs nobody's
|
|
68
|
+
* credentials. The same `clientMessageId` again returns the queued item (`created: false`), or,
|
|
69
|
+
* when it was already sent, the sent `user_message` with `item: null`. Then `ensureRun`: on an
|
|
70
|
+
* idle conversation the item goes out at once.
|
|
71
|
+
*/
|
|
72
|
+
async add(orgId, conversationId, accountId, input) {
|
|
73
|
+
const conv = await this.conversations.writable(orgId, conversationId, accountId);
|
|
74
|
+
const files = input.files ?? [];
|
|
75
|
+
checkText(input.text, files.length, input.attachments?.length ?? 0, input.skill !== undefined);
|
|
76
|
+
const prior = await this.prior(conversationId, input.clientMessageId);
|
|
77
|
+
if (prior)
|
|
78
|
+
return prior;
|
|
79
|
+
// a cheap unlocked check first, so a full queue never reads `@` resources (slow, remote,
|
|
80
|
+
// credentialed); the locked check below stays authoritative
|
|
81
|
+
const { n: queued } = await this.db
|
|
82
|
+
.selectFrom("conversation_queue")
|
|
83
|
+
.select((eb) => eb.fn.countAll().as("n"))
|
|
84
|
+
.where("conversation_id", "=", conversationId)
|
|
85
|
+
.executeTakeFirstOrThrow();
|
|
86
|
+
if (Number(queued) >= QUEUE_MAX_ITEMS)
|
|
87
|
+
throw queueFull();
|
|
88
|
+
await this.conversations.checkPick(orgId, conv, accountId, input);
|
|
89
|
+
// a skill invocation is rendered now, like the `@` resources (spec §4.5)
|
|
90
|
+
const invoked = await this.conversations.prepareQueuedSkill(orgId, conv, accountId, input);
|
|
91
|
+
const extra = await this.conversations.resolveExtra(orgId, accountId, input);
|
|
92
|
+
const skill = invoked === undefined || input.skill === undefined
|
|
93
|
+
? undefined
|
|
94
|
+
: storedSkill(input.skill.name, invoked);
|
|
95
|
+
const out = await this.addIn(orgId, conversationId, accountId, input, files, skill, extra);
|
|
96
|
+
if (out === null) {
|
|
97
|
+
return ((await this.prior(conversationId, input.clientMessageId)) ?? { item: null, created: false });
|
|
98
|
+
}
|
|
99
|
+
if (out.created) {
|
|
100
|
+
await this.eventLog.publishChanged(conversationId, "queue");
|
|
101
|
+
await this.runs.ensureRun(conversationId);
|
|
102
|
+
}
|
|
103
|
+
return { item: toItem(out.row), created: out.created };
|
|
104
|
+
}
|
|
105
|
+
// its own transaction: the caller notifies and publishes after the commit
|
|
106
|
+
async addIn(orgId, conversationId, accountId, input, files, skill, extra) {
|
|
107
|
+
const t = this.db.db;
|
|
108
|
+
await t
|
|
109
|
+
.selectFrom("conversations")
|
|
110
|
+
.select("id")
|
|
111
|
+
.where("id", "=", conversationId)
|
|
112
|
+
.forUpdate()
|
|
113
|
+
.executeTakeFirstOrThrow();
|
|
114
|
+
const existing = await t
|
|
115
|
+
.selectFrom("conversation_queue")
|
|
116
|
+
.select(COLUMNS)
|
|
117
|
+
.where("conversation_id", "=", conversationId)
|
|
118
|
+
.where("client_message_id", "=", input.clientMessageId)
|
|
119
|
+
.executeTakeFirst();
|
|
120
|
+
if (existing)
|
|
121
|
+
return { row: existing, created: false };
|
|
122
|
+
if (await alreadySent(t, conversationId, input.clientMessageId))
|
|
123
|
+
return null;
|
|
124
|
+
const { n, last } = await t
|
|
125
|
+
.selectFrom("conversation_queue")
|
|
126
|
+
.select((eb) => [
|
|
127
|
+
eb.fn.countAll().as("n"),
|
|
128
|
+
eb.fn.max("position").as("last"),
|
|
129
|
+
])
|
|
130
|
+
.where("conversation_id", "=", conversationId)
|
|
131
|
+
.executeTakeFirstOrThrow();
|
|
132
|
+
if (Number(n) >= QUEUE_MAX_ITEMS)
|
|
133
|
+
throw queueFull();
|
|
134
|
+
const blocks = await this.conversations.bindIn(orgId, conversationId, accountId, files);
|
|
135
|
+
const fileMeta = blocks.flatMap((b) => (b.type === "image" || b.type === "document") && b.source.kind === "ref"
|
|
136
|
+
? [{ attachmentId: b.source.attachmentId, name: b.name ?? "", mediaType: b.mediaType }]
|
|
137
|
+
: []);
|
|
138
|
+
const row = await t
|
|
139
|
+
.insertInto("conversation_queue")
|
|
140
|
+
.values({
|
|
141
|
+
id: randomUUID(),
|
|
142
|
+
conversation_id: conversationId,
|
|
143
|
+
account_id: accountId,
|
|
144
|
+
position: last === null ? 1 : Number(last) + 1,
|
|
145
|
+
text: noNul(input.text),
|
|
146
|
+
content: payloadJson([
|
|
147
|
+
...(skill === undefined ? [] : [skill.first]),
|
|
148
|
+
...extra.blocks,
|
|
149
|
+
...blocks,
|
|
150
|
+
]),
|
|
151
|
+
attachments: payloadJson(extra.attachments),
|
|
152
|
+
files: JSON.stringify(fileMeta),
|
|
153
|
+
client_message_id: input.clientMessageId,
|
|
154
|
+
model: input.model === undefined ? null : JSON.stringify(input.model),
|
|
155
|
+
effort: input.effort ?? null,
|
|
156
|
+
skill: skill?.skill ?? null,
|
|
157
|
+
})
|
|
158
|
+
.returning(COLUMNS)
|
|
159
|
+
.executeTakeFirstOrThrow();
|
|
160
|
+
return { row, created: true };
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Changes a queued item's text (its resources and files stay as queued). A skill invocation's
|
|
164
|
+
* text is its arguments: the skill is rendered again with them now.
|
|
165
|
+
*/
|
|
166
|
+
async edit(orgId, conversationId, accountId, itemId, text) {
|
|
167
|
+
const conv = await this.conversations.writable(orgId, conversationId, accountId);
|
|
168
|
+
const before = await this.db
|
|
169
|
+
.selectFrom("conversation_queue")
|
|
170
|
+
.select("skill")
|
|
171
|
+
.where("id", "=", itemId)
|
|
172
|
+
.where("conversation_id", "=", conversationId)
|
|
173
|
+
.executeTakeFirst();
|
|
174
|
+
if (!before)
|
|
175
|
+
throw itemNotFound();
|
|
176
|
+
const was = before.skill;
|
|
177
|
+
const invoked = was === null
|
|
178
|
+
? undefined
|
|
179
|
+
: await this.conversations.prepareQueuedSkill(orgId, conv, accountId, {
|
|
180
|
+
skill: { name: was.invokedAs },
|
|
181
|
+
text,
|
|
182
|
+
});
|
|
183
|
+
const row = await this.editIn(conversationId, itemId, text, invoked);
|
|
184
|
+
await this.eventLog.publishChanged(conversationId, "queue");
|
|
185
|
+
return toItem(row);
|
|
186
|
+
}
|
|
187
|
+
// its own transaction: the caller notifies and publishes after the commit
|
|
188
|
+
async editIn(conversationId, itemId, text, invoked) {
|
|
189
|
+
const t = this.db.db;
|
|
190
|
+
const cur = await t
|
|
191
|
+
.selectFrom("conversation_queue")
|
|
192
|
+
.select(["attachments", "files", "content", "skill"])
|
|
193
|
+
.where("id", "=", itemId)
|
|
194
|
+
.where("conversation_id", "=", conversationId)
|
|
195
|
+
.forUpdate()
|
|
196
|
+
.executeTakeFirst();
|
|
197
|
+
if (!cur)
|
|
198
|
+
throw itemNotFound();
|
|
199
|
+
const skill = cur.skill;
|
|
200
|
+
checkText(text, cur.files.length, cur.attachments.length, skill !== null);
|
|
201
|
+
// an invocation's first block is its rendered text: replace it and the record
|
|
202
|
+
const stored = skill === null || invoked === undefined ? undefined : storedSkill(skill.invokedAs, invoked);
|
|
203
|
+
return t
|
|
204
|
+
.updateTable("conversation_queue")
|
|
205
|
+
.set({
|
|
206
|
+
text: noNul(text),
|
|
207
|
+
updated_at: sql `now()`,
|
|
208
|
+
...(stored !== undefined && {
|
|
209
|
+
skill: stored.skill,
|
|
210
|
+
content: payloadJson([stored.first, ...cur.content.slice(1)]),
|
|
211
|
+
}),
|
|
212
|
+
})
|
|
213
|
+
.where("id", "=", itemId)
|
|
214
|
+
.returning(COLUMNS)
|
|
215
|
+
.executeTakeFirstOrThrow();
|
|
216
|
+
}
|
|
217
|
+
async remove(orgId, conversationId, accountId, itemId) {
|
|
218
|
+
await this.conversations.writable(orgId, conversationId, accountId);
|
|
219
|
+
await this.removeIn(conversationId, itemId);
|
|
220
|
+
await this.eventLog.publishChanged(conversationId, "queue");
|
|
221
|
+
}
|
|
222
|
+
// its own transaction: the caller notifies and publishes after the commit
|
|
223
|
+
async removeIn(conversationId, itemId) {
|
|
224
|
+
const t = this.db.db;
|
|
225
|
+
await this.lockConversation(conversationId);
|
|
226
|
+
const gone = await t
|
|
227
|
+
.deleteFrom("conversation_queue")
|
|
228
|
+
.where("id", "=", itemId)
|
|
229
|
+
.where("conversation_id", "=", conversationId)
|
|
230
|
+
.returning("id")
|
|
231
|
+
.executeTakeFirst();
|
|
232
|
+
if (!gone)
|
|
233
|
+
throw itemNotFound();
|
|
234
|
+
await unpauseIfEmpty(t, conversationId);
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Sends a queued item now: it leaves the queue and is posted as a user message in the same
|
|
238
|
+
* transaction (an interjection when a run is active; the items before it keep their place).
|
|
239
|
+
* Racing the dispatcher, exactly one of them takes the item; the loser sees it gone (404).
|
|
240
|
+
*/
|
|
241
|
+
async sendNow(orgId, conversationId, accountId, itemId) {
|
|
242
|
+
await this.conversations.writable(orgId, conversationId, accountId);
|
|
243
|
+
const { event, fresh, switched } = await this.sendNowIn(conversationId, itemId);
|
|
244
|
+
if (fresh)
|
|
245
|
+
await this.eventLog.notify(conversationId, event.seq);
|
|
246
|
+
if (switched)
|
|
247
|
+
await this.eventLog.publishChanged(conversationId, "selection");
|
|
248
|
+
await this.eventLog.publishChanged(conversationId, "queue");
|
|
249
|
+
await this.runs.ensureRun(conversationId);
|
|
250
|
+
return event;
|
|
251
|
+
}
|
|
252
|
+
// its own transaction: the caller notifies and publishes after the commit
|
|
253
|
+
async sendNowIn(conversationId, itemId) {
|
|
254
|
+
const t = this.db.db;
|
|
255
|
+
await this.lockConversation(conversationId);
|
|
256
|
+
const head = await t
|
|
257
|
+
.selectFrom("conversation_queue")
|
|
258
|
+
.select(["skill", "client_message_id"])
|
|
259
|
+
.where("id", "=", itemId)
|
|
260
|
+
.where("conversation_id", "=", conversationId)
|
|
261
|
+
.executeTakeFirst();
|
|
262
|
+
if (!head)
|
|
263
|
+
throw itemNotFound();
|
|
264
|
+
// the skill is checked again, as at dispatch; a refused item stays queued
|
|
265
|
+
if (!(await alreadySent(t, conversationId, head.client_message_id))) {
|
|
266
|
+
const blocked = await queuedSkillBlocked(t, conversationId, head);
|
|
267
|
+
if (blocked !== null) {
|
|
268
|
+
throw notInvocable(blocked, head.skill.invokedAs);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
const row = await t
|
|
272
|
+
.deleteFrom("conversation_queue")
|
|
273
|
+
.where("id", "=", itemId)
|
|
274
|
+
.where("conversation_id", "=", conversationId)
|
|
275
|
+
.returning(COLUMNS)
|
|
276
|
+
.executeTakeFirst();
|
|
277
|
+
if (!row)
|
|
278
|
+
throw itemNotFound();
|
|
279
|
+
const sent = await alreadySent(t, conversationId, row.client_message_id);
|
|
280
|
+
const out = await appendQueuedIn(t, this.eventLog, conversationId, row);
|
|
281
|
+
await unpauseIfEmpty(t, conversationId);
|
|
282
|
+
return { ...out, fresh: !sent };
|
|
283
|
+
}
|
|
284
|
+
/** "Continue sending": clears the pause and lets `ensureRun` send the head item. */
|
|
285
|
+
async resume(orgId, conversationId, accountId) {
|
|
286
|
+
await this.conversations.writable(orgId, conversationId, accountId);
|
|
287
|
+
await this.db
|
|
288
|
+
.updateTable("conversations")
|
|
289
|
+
.set({ queue_paused: false, queue_pause_reason: null })
|
|
290
|
+
.where("id", "=", conversationId)
|
|
291
|
+
.execute();
|
|
292
|
+
await this.eventLog.publishChanged(conversationId, "queue");
|
|
293
|
+
await this.runs.ensureRun(conversationId);
|
|
294
|
+
}
|
|
295
|
+
/** A queued item or a sent message for this client id (outside any transaction). */
|
|
296
|
+
async prior(conversationId, clientMessageId) {
|
|
297
|
+
const row = await this.db
|
|
298
|
+
.selectFrom("conversation_queue")
|
|
299
|
+
.select(COLUMNS)
|
|
300
|
+
.where("conversation_id", "=", conversationId)
|
|
301
|
+
.where("client_message_id", "=", clientMessageId)
|
|
302
|
+
.executeTakeFirst();
|
|
303
|
+
if (row)
|
|
304
|
+
return { item: toItem(row), created: false };
|
|
305
|
+
const event = await this.eventLog.findByIdem(conversationId, userMessageIdemKey(clientMessageId));
|
|
306
|
+
return event ? { item: null, event, created: false } : null;
|
|
307
|
+
}
|
|
308
|
+
async lockConversation(conversationId) {
|
|
309
|
+
await this.db
|
|
310
|
+
.selectFrom("conversations")
|
|
311
|
+
.select("id")
|
|
312
|
+
.where("id", "=", conversationId)
|
|
313
|
+
.forUpdate()
|
|
314
|
+
.executeTakeFirstOrThrow();
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
__decorate([
|
|
318
|
+
Transactional({ isolationLevel: "repeatable read" })
|
|
319
|
+
], ConversationQueue.prototype, "listIn", null);
|
|
320
|
+
__decorate([
|
|
321
|
+
Transactional({ propagation: "requires_new" })
|
|
322
|
+
], ConversationQueue.prototype, "addIn", null);
|
|
323
|
+
__decorate([
|
|
324
|
+
Transactional({ propagation: "requires_new" })
|
|
325
|
+
], ConversationQueue.prototype, "editIn", null);
|
|
326
|
+
__decorate([
|
|
327
|
+
Transactional({ propagation: "requires_new" })
|
|
328
|
+
], ConversationQueue.prototype, "removeIn", null);
|
|
329
|
+
__decorate([
|
|
330
|
+
Transactional({ propagation: "requires_new" })
|
|
331
|
+
], ConversationQueue.prototype, "sendNowIn", null);
|
|
332
|
+
__decorate([
|
|
333
|
+
Transactional({ propagation: "mandatory" })
|
|
334
|
+
], ConversationQueue.prototype, "lockConversation", null);
|
|
335
|
+
ConversationQueue = __decorate([
|
|
336
|
+
Injectable(),
|
|
337
|
+
__param(0, Inject(KernelDb)),
|
|
338
|
+
__param(1, Inject(EventLog)),
|
|
339
|
+
__param(2, Inject(ConversationsService)),
|
|
340
|
+
__param(3, Inject(RunControlService)),
|
|
341
|
+
__param(4, Inject(TransactionHost))
|
|
342
|
+
], ConversationQueue);
|
|
343
|
+
export { ConversationQueue };
|
|
@@ -1,21 +1,24 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { SandboxService } from "../sandbox/sandbox.service.js";
|
|
2
|
+
import { ConversationAccess } from "./access.js";
|
|
3
|
+
import { ConversationsService } from "./conversations.service.js";
|
|
2
4
|
export interface SandboxStatusView {
|
|
3
5
|
status: "running" | "suspended";
|
|
4
6
|
lastUsedAt: string;
|
|
5
7
|
}
|
|
6
|
-
export interface ConversationSandboxStatusDeps {
|
|
7
|
-
sandbox: Pick<SandboxService, "status">;
|
|
8
|
-
/** 会话可见性(与会话 SSE 流同一判定:`ConversationsService.isAccessible`)。 */
|
|
9
|
-
isAccessible(orgId: string, conversationId: string, viewerAccountId: string): Promise<boolean>;
|
|
10
|
-
/** The conversation whose sandbox it works in: a sub-agent's parent, else itself. */
|
|
11
|
-
sandboxConversationOf(orgId: string, conversationId: string): Promise<string>;
|
|
12
|
-
}
|
|
13
8
|
/**
|
|
14
9
|
* 对话沙箱的状态(网页上下文标签,M5 T11):会话不可见 → `conversation.not_found`;
|
|
15
10
|
* 没有可用的沙箱(未创建、已销毁、正在创建)→ `sandbox.not_found`(界面显示「未创建」)。
|
|
16
11
|
*/
|
|
17
12
|
export declare class ConversationSandboxStatus {
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
/** 会话可见性(与会话 SSE 流同一判定)。 */
|
|
14
|
+
private readonly access;
|
|
15
|
+
/** The conversation whose sandbox it works in: a sub-agent's parent, else itself. */
|
|
16
|
+
private readonly conversations;
|
|
17
|
+
private readonly sandbox;
|
|
18
|
+
constructor(
|
|
19
|
+
/** 会话可见性(与会话 SSE 流同一判定)。 */
|
|
20
|
+
access: Pick<ConversationAccess, "isAccessible">,
|
|
21
|
+
/** The conversation whose sandbox it works in: a sub-agent's parent, else itself. */
|
|
22
|
+
conversations: Pick<ConversationsService, "sandboxConversationOf">, sandbox: Pick<SandboxService, "status">);
|
|
20
23
|
get(orgId: string, conversationId: string, viewerAccountId: string): Promise<SandboxStatusView>;
|
|
21
24
|
}
|
|
@@ -1,24 +1,52 @@
|
|
|
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";
|
|
1
11
|
import { ApiError } from "../errors.js";
|
|
12
|
+
import { SandboxService } from "../sandbox/sandbox.service.js";
|
|
2
13
|
import { UUID_RE } from "../ui/registry.js";
|
|
14
|
+
import { ConversationAccess } from "./access.js";
|
|
15
|
+
import { ConversationsService } from "./conversations.service.js";
|
|
3
16
|
/**
|
|
4
17
|
* 对话沙箱的状态(网页上下文标签,M5 T11):会话不可见 → `conversation.not_found`;
|
|
5
18
|
* 没有可用的沙箱(未创建、已销毁、正在创建)→ `sandbox.not_found`(界面显示「未创建」)。
|
|
6
19
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
20
|
+
let ConversationSandboxStatus = class ConversationSandboxStatus {
|
|
21
|
+
access;
|
|
22
|
+
conversations;
|
|
23
|
+
sandbox;
|
|
24
|
+
constructor(
|
|
25
|
+
/** 会话可见性(与会话 SSE 流同一判定)。 */
|
|
26
|
+
access,
|
|
27
|
+
/** The conversation whose sandbox it works in: a sub-agent's parent, else itself. */
|
|
28
|
+
conversations, sandbox) {
|
|
29
|
+
this.access = access;
|
|
30
|
+
this.conversations = conversations;
|
|
31
|
+
this.sandbox = sandbox;
|
|
11
32
|
}
|
|
12
33
|
async get(orgId, conversationId, viewerAccountId) {
|
|
13
34
|
if (!UUID_RE.test(conversationId) ||
|
|
14
|
-
!(await this.
|
|
35
|
+
!(await this.access.isAccessible(orgId, conversationId, viewerAccountId))) {
|
|
15
36
|
throw new ApiError("conversation.not_found", "Conversation not found");
|
|
16
37
|
}
|
|
17
38
|
// a sub-agent works in its parent conversation's sandbox (sub-agents spec §10.1)
|
|
18
|
-
const sandboxConv = await this.
|
|
19
|
-
const s = await this.
|
|
39
|
+
const sandboxConv = await this.conversations.sandboxConversationOf(orgId, conversationId);
|
|
40
|
+
const s = await this.sandbox.status(orgId, sandboxConv);
|
|
20
41
|
if (!s)
|
|
21
42
|
throw new ApiError("sandbox.not_found", "This conversation has no sandbox");
|
|
22
43
|
return { status: s.status, lastUsedAt: s.lastUsedAt.toISOString() };
|
|
23
44
|
}
|
|
24
|
-
}
|
|
45
|
+
};
|
|
46
|
+
ConversationSandboxStatus = __decorate([
|
|
47
|
+
Injectable(),
|
|
48
|
+
__param(0, Inject(ConversationAccess)),
|
|
49
|
+
__param(1, Inject(ConversationsService)),
|
|
50
|
+
__param(2, Inject(SandboxService))
|
|
51
|
+
], ConversationSandboxStatus);
|
|
52
|
+
export { ConversationSandboxStatus };
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { type Logger } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import type
|
|
1
|
+
import { type Logger, type ModelUsage } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import type { Job, Queue, Worker } from "bullmq";
|
|
3
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
4
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
5
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
6
|
+
import { ModelPurposesService } from "../models/purposes.js";
|
|
7
|
+
import { type AuditEntry, type HookRunner } from "../runtime/hook-calls.js";
|
|
8
|
+
import { UsageReporter } from "../runtime/usage-report.js";
|
|
9
|
+
import { EventLog } from "./event-log.js";
|
|
10
|
+
import { type ConversationEvent } from "./events.js";
|
|
8
11
|
/**
|
|
9
12
|
* Model-generated conversation titles (UI refresh B, spec §5.1 "Titles").
|
|
10
13
|
*
|
|
@@ -43,8 +46,8 @@ export declare function titleExcerpt(firstUser: string, firstReply: string): str
|
|
|
43
46
|
*/
|
|
44
47
|
export declare function cleanTitle(reply: string): string | null;
|
|
45
48
|
export interface TitleDeps {
|
|
46
|
-
db:
|
|
47
|
-
eventLog: Pick<EventLog, "append" | "readAfter" | "latestOfType" | "notify" | "publishChanged">;
|
|
49
|
+
db: KernelSchemaDb;
|
|
50
|
+
eventLog: Pick<EventLog, "append" | "appendIn" | "readAfter" | "latestOfType" | "notify" | "publishChanged">;
|
|
48
51
|
purposes: Pick<ModelPurposesService, "chat">;
|
|
49
52
|
log: Pick<Logger, "warn">;
|
|
50
53
|
/**
|
|
@@ -55,9 +58,11 @@ export interface TitleDeps {
|
|
|
55
58
|
usageReport?: Pick<UsageReporter, "enqueue">;
|
|
56
59
|
/** Aborts the call (worker shutdown). */
|
|
57
60
|
signal?: AbortSignal;
|
|
61
|
+
/** The job's transactional writes ({@link TitleGenerator}). */
|
|
62
|
+
writes: Pick<TitleGenerator, "writeResult" | "auditDenied">;
|
|
58
63
|
}
|
|
59
64
|
/** The attempt number to enqueue for this conversation, or null when no title job is due. */
|
|
60
|
-
export declare function titleAttemptDue(db:
|
|
65
|
+
export declare function titleAttemptDue(db: KernelSchemaDb, conversationId: string): Promise<number | null>;
|
|
61
66
|
/**
|
|
62
67
|
* One title attempt. Claims the attempt (`title_attempts = attempt` → `attempt + 1`; a second
|
|
63
68
|
* execution of the same attempt finds nothing to claim and returns), calls the model, writes the
|
|
@@ -65,29 +70,71 @@ export declare function titleAttemptDue(db: KernelDb, conversationId: string): P
|
|
|
65
70
|
* no run, idempotent per attempt) in the same transaction. Errors are logged, not thrown.
|
|
66
71
|
*/
|
|
67
72
|
export declare function runTitleJob(d: TitleDeps, conversationId: string, attempt: number): Promise<void>;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
73
|
+
interface TitleJob {
|
|
74
|
+
conversationId: string;
|
|
75
|
+
attempt: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* One title attempt's work ({@link runTitleJob}) over the injected services, with its writes in
|
|
79
|
+
* transactions of their own: the title with the call's usage event, and a policy denial's audit row.
|
|
80
|
+
*/
|
|
81
|
+
export declare class TitleGenerator {
|
|
82
|
+
private readonly kdb;
|
|
83
|
+
private readonly eventLog;
|
|
84
|
+
private readonly purposes;
|
|
85
|
+
/** The title call fires the plugin hooks (`model.request`, `model.response`). */
|
|
86
|
+
private readonly host;
|
|
87
|
+
private readonly usageReport;
|
|
88
|
+
private readonly log;
|
|
89
|
+
readonly txHost: TransactionHost;
|
|
90
|
+
constructor(kdb: KernelDb, eventLog: TitleDeps["eventLog"], purposes: Pick<ModelPurposesService, "chat">,
|
|
91
|
+
/** The title call fires the plugin hooks (`model.request`, `model.response`). */
|
|
92
|
+
host: {
|
|
93
|
+
readonly hooks?: HookRunner;
|
|
94
|
+
} | undefined, usageReport: Pick<UsageReporter, "enqueue"> | undefined, log: Pick<Logger, "warn">, txHost: TransactionHost);
|
|
95
|
+
/** One attempt ({@link runTitleJob}); `signal` aborts the call (the worker stopping). */
|
|
96
|
+
run(conversationId: string, attempt: number, signal?: AbortSignal): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Appends the call's `usage` event and writes the title while `title_source IS NULL` (a rename
|
|
99
|
+
* wins), in one transaction.
|
|
100
|
+
*/
|
|
101
|
+
writeResult(conversationId: string, attempt: number, out: {
|
|
102
|
+
provider: string;
|
|
103
|
+
model: string;
|
|
104
|
+
usage: ModelUsage;
|
|
105
|
+
}, title: string | null): Promise<{
|
|
106
|
+
written: boolean;
|
|
107
|
+
usage: ConversationEvent | undefined;
|
|
108
|
+
}>;
|
|
109
|
+
/** The `hook.denied` audit row of a denied title call. */
|
|
110
|
+
auditDenied(entry: AuditEntry): Promise<void>;
|
|
72
111
|
}
|
|
73
112
|
/**
|
|
74
113
|
* The title queue: `maybeEnqueue` on any role (called by the run worker after a completed run),
|
|
75
|
-
*
|
|
76
|
-
* enqueues the next attempt.
|
|
114
|
+
* consumed on the `worker` role by its `@Processor`. One attempt per job, no BullMQ retries: the
|
|
115
|
+
* next completed run enqueues the next attempt.
|
|
77
116
|
*/
|
|
78
117
|
export declare class TitleQueue {
|
|
79
|
-
private readonly
|
|
80
|
-
private queue;
|
|
81
|
-
private
|
|
118
|
+
private readonly kdb;
|
|
119
|
+
private readonly queue;
|
|
120
|
+
private readonly generator;
|
|
121
|
+
private readonly log;
|
|
82
122
|
private worker;
|
|
83
|
-
private workerConn;
|
|
84
123
|
private closed;
|
|
85
124
|
private readonly stopping;
|
|
86
|
-
constructor(
|
|
125
|
+
constructor(kdb: KernelDb, queue: Queue<TitleJob>, generator: Pick<TitleGenerator, "run">, log: Pick<Logger, "warn" | "error">);
|
|
87
126
|
/** Enqueues the next title attempt when one is due. Never throws (logs instead). */
|
|
88
127
|
maybeEnqueue(conversationId: string): Promise<void>;
|
|
89
|
-
|
|
90
|
-
|
|
128
|
+
/** Starts consuming (worker role only): `worker` is the `@Processor` worker of {@link TITLE_QUEUE}. */
|
|
129
|
+
startWorker(worker: Worker<TitleJob>): void;
|
|
130
|
+
/** The worker's `error` event. */
|
|
131
|
+
onError(err: Error): void;
|
|
132
|
+
/** One title job (the `@Processor` calls it). */
|
|
133
|
+
process(j: Job<TitleJob>): Promise<void>;
|
|
134
|
+
/** Stops: no more enqueues, the call in flight is aborted, the worker closes. */
|
|
91
135
|
stop(): Promise<void>;
|
|
92
|
-
private getQueue;
|
|
93
136
|
}
|
|
137
|
+
/** Conversation titles: the queue and the job (consumed on the worker role). */
|
|
138
|
+
export declare class TitlesModule {
|
|
139
|
+
}
|
|
140
|
+
export {};
|