@capybara-hq/kernel 0.1.0-rc.0 → 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/bootstrap.json +10 -6
- 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 -193
- 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 +16 -1
- package/dist/config/schema.js +54 -7
- 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 -62
- 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/queue.js +3 -2
- 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 +2 -0
- package/dist/errors.js +2 -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 -120
- 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 +96 -42
- package/dist/extensions/bootstrap.js +303 -155
- 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 +52 -47
- 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 +19 -12
- package/dist/index.js +13 -8
- 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 -241
- 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-config.d.ts +9 -0
- package/dist/log-config.js +27 -0
- package/dist/log-context.d.ts +34 -0
- package/dist/log-context.js +44 -0
- package/dist/log-loki.d.ts +34 -0
- package/dist/log-loki.js +145 -0
- package/dist/log.d.ts +41 -10
- package/dist/log.js +91 -17
- 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/net/public-address.js +3 -2
- 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 -136
- 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 -225
- 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 -99
- 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 +7 -4
- package/dist/tools/builtins/sandbox/common.js +5 -3
- 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 +11 -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
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
1
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
2
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
3
|
+
import { KernelEvents } from "../infra/events/kernel-events.js";
|
|
4
|
+
import type { KernelLogger } from "../log.js";
|
|
4
5
|
import { type ConversationEvent, type ConversationEventType } from "./events.js";
|
|
5
|
-
type Trx = Transaction<KernelDatabase>;
|
|
6
6
|
/** 事件日志依赖的总线:内核 bus(命名空间 `kernel`)。 */
|
|
7
7
|
export interface EventBus {
|
|
8
8
|
publish(topic: string, payload: unknown): Promise<void>;
|
|
@@ -70,28 +70,35 @@ export type ConversationChange = (typeof CONVERSATION_CHANGES)[number];
|
|
|
70
70
|
* 会话事件日志:只追加,是 agent 运行的唯一事实来源。
|
|
71
71
|
* seq 由 `conversations.last_seq` 在会话行锁内连续分配(多副本并发写同一会话时串行化);
|
|
72
72
|
* 幂等键的「先查后写」也在同一把行锁内完成。
|
|
73
|
+
*
|
|
74
|
+
* Every published advance (`notify`) is also announced in-process as `conversation.event-appended`
|
|
75
|
+
* on {@link KernelEvents} (the channel outbound delivery enqueues from it), on this replica, right
|
|
76
|
+
* after the bus publish, in append order.
|
|
73
77
|
*/
|
|
74
78
|
export declare class EventLog {
|
|
75
79
|
private readonly db;
|
|
76
80
|
private readonly bus;
|
|
77
|
-
private readonly log
|
|
81
|
+
private readonly log;
|
|
82
|
+
private readonly events;
|
|
83
|
+
readonly txHost: TransactionHost;
|
|
84
|
+
constructor(db: KernelDb, bus: EventBus, log: Pick<KernelLogger, "warn">, events: Pick<KernelEvents, "emit">, txHost: TransactionHost);
|
|
78
85
|
/**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
86
|
+
* 追加事件,返回与输入一一对应的事件(幂等命中的为已有事件)。
|
|
87
|
+
* 自开一个独立事务(`requires_new`,与调用方的事务无关),提交后发布 `conv.<id>`。
|
|
88
|
+
* 要在调用方的事务里追加(与其他写入一起提交),用 {@link appendIn}。
|
|
81
89
|
*/
|
|
82
|
-
|
|
83
|
-
constructor(db: KernelDb, bus: EventBus, log?: Pick<Logger, "warn"> | undefined,
|
|
90
|
+
append(conversationId: string, events: AppendEvent[]): Promise<ConversationEvent[]>;
|
|
84
91
|
/**
|
|
85
|
-
*
|
|
86
|
-
*
|
|
92
|
+
* {@link append} inside the caller's transaction (it must hold one: `mandatory`): the events
|
|
93
|
+
* commit or roll back with the caller's writes, and the caller calls {@link notify} after the
|
|
94
|
+
* commit with the highest seq it wrote.
|
|
87
95
|
*/
|
|
88
|
-
|
|
96
|
+
appendIn(conversationId: string, events: AppendEvent[]): Promise<ConversationEvent[]>;
|
|
97
|
+
private appendOwn;
|
|
89
98
|
/**
|
|
90
|
-
*
|
|
91
|
-
*
|
|
99
|
+
* 发布「日志已推进到 toSeq」;发布失败只记日志(事件已提交,订阅方可按 seq 补读)。Then announces
|
|
100
|
+
* it in-process (`conversation.event-appended`); a failing subscriber is logged by KernelEvents.
|
|
92
101
|
*/
|
|
93
|
-
append(conversationId: string, events: AppendEvent[], trx?: Trx): Promise<ConversationEvent[]>;
|
|
94
|
-
/** 发布「日志已推进到 toSeq」;发布失败只记日志(事件已提交,订阅方可按 seq 补读)。 */
|
|
95
102
|
notify(conversationId: string, toSeq: number): Promise<void>;
|
|
96
103
|
/**
|
|
97
104
|
* Publishes a `changed` frame on the conversation topic (rename, generated title, selection, ...).
|
|
@@ -117,6 +124,9 @@ export declare class EventLog {
|
|
|
117
124
|
type: T;
|
|
118
125
|
}> | undefined>;
|
|
119
126
|
private validate;
|
|
120
|
-
|
|
127
|
+
/** The append itself, in the context's transaction (both callers open or join one). */
|
|
128
|
+
private write;
|
|
129
|
+
}
|
|
130
|
+
/** The one {@link EventLog} (infra dependencies only, so every domain can import it). */
|
|
131
|
+
export declare class EventLogModule {
|
|
121
132
|
}
|
|
122
|
-
export {};
|
|
@@ -1,5 +1,20 @@
|
|
|
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, Module } from "@nestjs/common";
|
|
1
11
|
import { sql } from "kysely";
|
|
2
12
|
import { ApiError } from "../errors.js";
|
|
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 { KernelEvents } from "../infra/events/kernel-events.js";
|
|
17
|
+
import { KERNEL_BUS, KERNEL_LOGGER } from "../infra/tokens.js";
|
|
3
18
|
import { ConversationEventSchema, } from "./events.js";
|
|
4
19
|
/**
|
|
5
20
|
* The JSON stored for an event payload, with every NUL (U+0000) in a string or an object key
|
|
@@ -50,53 +65,61 @@ const EVENT_COLUMNS = [
|
|
|
50
65
|
* 会话事件日志:只追加,是 agent 运行的唯一事实来源。
|
|
51
66
|
* seq 由 `conversations.last_seq` 在会话行锁内连续分配(多副本并发写同一会话时串行化);
|
|
52
67
|
* 幂等键的「先查后写」也在同一把行锁内完成。
|
|
68
|
+
*
|
|
69
|
+
* Every published advance (`notify`) is also announced in-process as `conversation.event-appended`
|
|
70
|
+
* on {@link KernelEvents} (the channel outbound delivery enqueues from it), on this replica, right
|
|
71
|
+
* after the bus publish, in append order.
|
|
53
72
|
*/
|
|
54
|
-
|
|
73
|
+
let EventLog = class EventLog {
|
|
55
74
|
db;
|
|
56
75
|
bus;
|
|
57
76
|
log;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
* 每次发布「日志已推进」之后调用(同步、不等待):内核用它给有 IM 投递目标的会话排出站任务。
|
|
62
|
-
* 钩子自己负责吞掉错误。
|
|
63
|
-
*/
|
|
64
|
-
onNotify) {
|
|
77
|
+
events;
|
|
78
|
+
txHost;
|
|
79
|
+
constructor(db, bus, log, events, txHost) {
|
|
65
80
|
this.db = db;
|
|
66
81
|
this.bus = bus;
|
|
67
82
|
this.log = log;
|
|
68
|
-
this.
|
|
83
|
+
this.events = events;
|
|
84
|
+
this.txHost = txHost;
|
|
69
85
|
}
|
|
70
86
|
/**
|
|
71
87
|
* 追加事件,返回与输入一一对应的事件(幂等命中的为已有事件)。
|
|
72
|
-
*
|
|
88
|
+
* 自开一个独立事务(`requires_new`,与调用方的事务无关),提交后发布 `conv.<id>`。
|
|
89
|
+
* 要在调用方的事务里追加(与其他写入一起提交),用 {@link appendIn}。
|
|
73
90
|
*/
|
|
74
|
-
async append(conversationId, events
|
|
91
|
+
async append(conversationId, events) {
|
|
75
92
|
const bodies = events.map((e) => this.validate(e));
|
|
76
|
-
|
|
77
|
-
return (await this.appendIn(trx, conversationId, events, bodies)).events;
|
|
78
|
-
const { events: out, toSeq } = await this.db
|
|
79
|
-
.transaction()
|
|
80
|
-
.execute((t) => this.appendIn(t, conversationId, events, bodies));
|
|
93
|
+
const { events: out, toSeq } = await this.appendOwn(conversationId, events, bodies);
|
|
81
94
|
if (toSeq !== null)
|
|
82
95
|
await this.notify(conversationId, toSeq);
|
|
83
96
|
return out;
|
|
84
97
|
}
|
|
85
|
-
/**
|
|
98
|
+
/**
|
|
99
|
+
* {@link append} inside the caller's transaction (it must hold one: `mandatory`): the events
|
|
100
|
+
* commit or roll back with the caller's writes, and the caller calls {@link notify} after the
|
|
101
|
+
* commit with the highest seq it wrote.
|
|
102
|
+
*/
|
|
103
|
+
async appendIn(conversationId, events) {
|
|
104
|
+
const bodies = events.map((e) => this.validate(e));
|
|
105
|
+
return (await this.write(conversationId, events, bodies)).events;
|
|
106
|
+
}
|
|
107
|
+
async appendOwn(conversationId, events, bodies) {
|
|
108
|
+
return this.write(conversationId, events, bodies);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 发布「日志已推进到 toSeq」;发布失败只记日志(事件已提交,订阅方可按 seq 补读)。Then announces
|
|
112
|
+
* it in-process (`conversation.event-appended`); a failing subscriber is logged by KernelEvents.
|
|
113
|
+
*/
|
|
86
114
|
async notify(conversationId, toSeq) {
|
|
87
115
|
const msg = { kind: "events", toSeq };
|
|
88
116
|
try {
|
|
89
117
|
await this.bus.publish(conversationTopic(conversationId), msg);
|
|
90
118
|
}
|
|
91
119
|
catch (err) {
|
|
92
|
-
this.log
|
|
93
|
-
}
|
|
94
|
-
try {
|
|
95
|
-
this.onNotify?.(conversationId, toSeq);
|
|
96
|
-
}
|
|
97
|
-
catch (err) {
|
|
98
|
-
this.log?.warn("conversation event notify hook failed", { conversationId, err });
|
|
120
|
+
this.log.warn("conversation event notify failed", { conversationId, toSeq, err });
|
|
99
121
|
}
|
|
122
|
+
await this.events.emit("conversation.event-appended", { conversationId, toSeq });
|
|
100
123
|
}
|
|
101
124
|
/**
|
|
102
125
|
* Publishes a `changed` frame on the conversation topic (rename, generated title, selection, ...).
|
|
@@ -108,7 +131,7 @@ export class EventLog {
|
|
|
108
131
|
await this.bus.publish(conversationTopic(conversationId), msg);
|
|
109
132
|
}
|
|
110
133
|
catch (err) {
|
|
111
|
-
this.log
|
|
134
|
+
this.log.warn("conversation change publish failed", { conversationId, what, err });
|
|
112
135
|
}
|
|
113
136
|
}
|
|
114
137
|
/** 读 `afterSeq` 之后的事件,按 seq 升序,最多 `limit` 条。 */
|
|
@@ -175,7 +198,9 @@ export class EventLog {
|
|
|
175
198
|
}
|
|
176
199
|
return r.data;
|
|
177
200
|
}
|
|
178
|
-
|
|
201
|
+
/** The append itself, in the context's transaction (both callers open or join one). */
|
|
202
|
+
async write(conversationId, events, bodies) {
|
|
203
|
+
const t = this.db;
|
|
179
204
|
// 先锁会话行:之后的幂等查询与 seq 分配都在这把锁内,并发 append 依次执行。
|
|
180
205
|
const conv = await t
|
|
181
206
|
.selectFrom("conversations")
|
|
@@ -256,4 +281,26 @@ export class EventLog {
|
|
|
256
281
|
toSeq,
|
|
257
282
|
};
|
|
258
283
|
}
|
|
259
|
-
}
|
|
284
|
+
};
|
|
285
|
+
__decorate([
|
|
286
|
+
Transactional({ propagation: "mandatory" })
|
|
287
|
+
], EventLog.prototype, "appendIn", null);
|
|
288
|
+
__decorate([
|
|
289
|
+
Transactional({ propagation: "requires_new" })
|
|
290
|
+
], EventLog.prototype, "appendOwn", null);
|
|
291
|
+
EventLog = __decorate([
|
|
292
|
+
Injectable(),
|
|
293
|
+
__param(0, Inject(KernelDb)),
|
|
294
|
+
__param(1, Inject(KERNEL_BUS)),
|
|
295
|
+
__param(2, Inject(KERNEL_LOGGER)),
|
|
296
|
+
__param(3, Inject(KernelEvents)),
|
|
297
|
+
__param(4, Inject(TransactionHost))
|
|
298
|
+
], EventLog);
|
|
299
|
+
export { EventLog };
|
|
300
|
+
/** The one {@link EventLog} (infra dependencies only, so every domain can import it). */
|
|
301
|
+
let EventLogModule = class EventLogModule {
|
|
302
|
+
};
|
|
303
|
+
EventLogModule = __decorate([
|
|
304
|
+
Module({ providers: [EventLog], exports: [EventLog] })
|
|
305
|
+
], EventLogModule);
|
|
306
|
+
export { EventLogModule };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
2
|
+
import { StorageService } from "../storage/storage.service.js";
|
|
3
|
+
import { ConversationAccess } from "./access.js";
|
|
3
4
|
/**
|
|
4
5
|
* A conversation's file outputs (UI refresh B, spec §5.8 / §5.9): the files the agent delivered
|
|
5
6
|
* (`artifact_created`), grouped by `sourcePath` into versions, newest first. Read from the log on
|
|
@@ -44,17 +45,16 @@ export interface FileContent {
|
|
|
44
45
|
originalType: string;
|
|
45
46
|
truncated: boolean;
|
|
46
47
|
}
|
|
47
|
-
export interface ConversationFilesDeps {
|
|
48
|
-
db: KernelDb;
|
|
49
|
-
storage: Pick<StorageService, "kernel">;
|
|
50
|
-
/** Same visibility as the event stream (`ConversationsService.isAccessible`). */
|
|
51
|
-
isAccessible(orgId: string, conversationId: string, viewerAccountId: string): Promise<boolean>;
|
|
52
|
-
}
|
|
53
48
|
/** Storage HEADs a files list sends at once (review M1). */
|
|
54
49
|
export declare const HEAD_CONCURRENCY = 8;
|
|
55
50
|
export declare class ConversationFiles {
|
|
56
|
-
private readonly
|
|
57
|
-
|
|
51
|
+
private readonly db;
|
|
52
|
+
private readonly storage;
|
|
53
|
+
/** Same visibility as the event stream. */
|
|
54
|
+
private readonly access;
|
|
55
|
+
constructor(db: KernelDb, storage: Pick<StorageService, "kernel">,
|
|
56
|
+
/** Same visibility as the event stream. */
|
|
57
|
+
access: Pick<ConversationAccess, "isAccessible">);
|
|
58
58
|
private checkAccess;
|
|
59
59
|
/** Every delivery of the conversation in log order. */
|
|
60
60
|
private deliveries;
|
|
@@ -1,6 +1,19 @@
|
|
|
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 { sql } from "kysely";
|
|
2
12
|
import { ApiError } from "../errors.js";
|
|
13
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
14
|
+
import { StorageService } from "../storage/storage.service.js";
|
|
3
15
|
import { UUID_RE } from "../ui/registry.js";
|
|
16
|
+
import { ConversationAccess } from "./access.js";
|
|
4
17
|
import { isInlineArtifactType, isTextArtifactType } from "./artifacts.js";
|
|
5
18
|
/**
|
|
6
19
|
* A conversation's file outputs (UI refresh B, spec §5.8 / §5.9): the files the agent delivered
|
|
@@ -65,20 +78,26 @@ async function mapLimit(xs, limit, fn) {
|
|
|
65
78
|
await Promise.all(Array.from({ length: Math.min(limit, xs.length) }, worker));
|
|
66
79
|
return out;
|
|
67
80
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
81
|
+
let ConversationFiles = class ConversationFiles {
|
|
82
|
+
db;
|
|
83
|
+
storage;
|
|
84
|
+
access;
|
|
85
|
+
constructor(db, storage,
|
|
86
|
+
/** Same visibility as the event stream. */
|
|
87
|
+
access) {
|
|
88
|
+
this.db = db;
|
|
89
|
+
this.storage = storage;
|
|
90
|
+
this.access = access;
|
|
72
91
|
}
|
|
73
92
|
async checkAccess(orgId, conversationId, viewer) {
|
|
74
93
|
if (!UUID_RE.test(conversationId))
|
|
75
94
|
throw conversationNotFound();
|
|
76
|
-
if (!(await this.
|
|
95
|
+
if (!(await this.access.isAccessible(orgId, conversationId, viewer)))
|
|
77
96
|
throw conversationNotFound();
|
|
78
97
|
}
|
|
79
98
|
/** Every delivery of the conversation in log order. */
|
|
80
99
|
async deliveries(conversationId) {
|
|
81
|
-
const rows = await this.
|
|
100
|
+
const rows = await this.db
|
|
82
101
|
.selectFrom("conversation_events")
|
|
83
102
|
.select(["payload", "created_at"])
|
|
84
103
|
.where("conversation_id", "=", conversationId)
|
|
@@ -115,7 +134,7 @@ export class ConversationFiles {
|
|
|
115
134
|
start = at + 1;
|
|
116
135
|
}
|
|
117
136
|
const page = ordered.slice(start, start + opts.limit);
|
|
118
|
-
const store = this.
|
|
137
|
+
const store = this.storage.kernel(orgId);
|
|
119
138
|
const files = await mapLimit(page, HEAD_CONCURRENCY, async (g) => {
|
|
120
139
|
const latest = g.at(-1);
|
|
121
140
|
const head = await store.head(latest.objectKey);
|
|
@@ -152,7 +171,7 @@ export class ConversationFiles {
|
|
|
152
171
|
await this.checkAccess(orgId, conversationId, viewer);
|
|
153
172
|
if (!UUID_RE.test(fileId))
|
|
154
173
|
throw artifactNotFound();
|
|
155
|
-
const row = await this.
|
|
174
|
+
const row = await this.db
|
|
156
175
|
.selectFrom("conversation_events")
|
|
157
176
|
.select("payload")
|
|
158
177
|
.where("conversation_id", "=", conversationId)
|
|
@@ -180,7 +199,7 @@ export class ConversationFiles {
|
|
|
180
199
|
await this.checkAccess(orgId, conversationId, viewer);
|
|
181
200
|
if (!UUID_RE.test(fileId))
|
|
182
201
|
throw artifactNotFound();
|
|
183
|
-
const row = await this.
|
|
202
|
+
const row = await this.db
|
|
184
203
|
.selectFrom("conversation_events")
|
|
185
204
|
.select("payload")
|
|
186
205
|
.where("conversation_id", "=", conversationId)
|
|
@@ -195,7 +214,7 @@ export class ConversationFiles {
|
|
|
195
214
|
throw new ApiError("conversation.artifact_not_previewable", "Only text files have content");
|
|
196
215
|
}
|
|
197
216
|
const max = Math.min(limit, FILE_CONTENT_MAX_BYTES);
|
|
198
|
-
const got = await this.
|
|
217
|
+
const got = await this.storage
|
|
199
218
|
.kernel(orgId)
|
|
200
219
|
.get(a.objectKey, { range: { start: 0, end: max - 1 } });
|
|
201
220
|
if (!got)
|
|
@@ -210,4 +229,11 @@ export class ConversationFiles {
|
|
|
210
229
|
const base = (a.contentType.split(";")[0] ?? "").trim().toLowerCase();
|
|
211
230
|
return { body, contentType: "text/plain; charset=utf-8", originalType: base, truncated };
|
|
212
231
|
}
|
|
213
|
-
}
|
|
232
|
+
};
|
|
233
|
+
ConversationFiles = __decorate([
|
|
234
|
+
Injectable(),
|
|
235
|
+
__param(0, Inject(KernelDb)),
|
|
236
|
+
__param(1, Inject(StorageService)),
|
|
237
|
+
__param(2, Inject(ConversationAccess))
|
|
238
|
+
], ConversationFiles);
|
|
239
|
+
export { ConversationFiles };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The maintenance job scheduler ids the attachment cleanup had before becoming `@LockedCron` /
|
|
3
|
+
* `@LockedInterval` jobs (retired at worker start, `RETIRED_SCHEDULER_IDS`). A leaf module.
|
|
4
|
+
*/
|
|
5
|
+
/** The retired BullMQ repeatable scheduler of the cleanup (removed from Redis at worker start). */
|
|
6
|
+
export declare const ATTACHMENT_CLEANUP_SCHEDULER_ID = "attachment-cleanup-hourly";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The maintenance job scheduler ids the attachment cleanup had before becoming `@LockedCron` /
|
|
3
|
+
* `@LockedInterval` jobs (retired at worker start, `RETIRED_SCHEDULER_IDS`). A leaf module.
|
|
4
|
+
*/
|
|
5
|
+
/** The retired BullMQ repeatable scheduler of the cleanup (removed from Redis at worker start). */
|
|
6
|
+
export const ATTACHMENT_CLEANUP_SCHEDULER_ID = "attachment-cleanup-hourly";
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ToolOutputs } from "../tools/outputs.js";
|
|
2
|
+
import { ConversationAccess } from "./access.js";
|
|
1
3
|
/** 一次最多返回的字符数(也是默认值):大存档按字符分页取。 */
|
|
2
4
|
export declare const OUTPUT_PAGE_MAX_CHARS = 200000;
|
|
3
5
|
export interface OutputPage {
|
|
@@ -10,23 +12,21 @@ export interface OutputPage {
|
|
|
10
12
|
/** 下一页的 offset;已到末尾为 null。 */
|
|
11
13
|
next: number | null;
|
|
12
14
|
}
|
|
13
|
-
export interface ConversationOutputsDeps {
|
|
14
|
-
/** 会话可见性(与会话 SSE 流同一判定:`ConversationsService.isAccessible`)。 */
|
|
15
|
-
isAccessible(orgId: string, conversationId: string, viewerAccountId: string): Promise<boolean>;
|
|
16
|
-
/** 读本会话未过期的存档(`ToolOutputs.load`):不存在 / 过期 / 属于别的会话 → null。 */
|
|
17
|
-
load(scope: {
|
|
18
|
-
orgId: string;
|
|
19
|
-
conversationId: string;
|
|
20
|
-
}, id: string): Promise<string | null>;
|
|
21
|
-
}
|
|
22
15
|
/**
|
|
23
16
|
* 网页读工具输出存档(运行标签看全文):先按会话流的规则判定会话可见(不可见 → `conversation.not_found`),
|
|
24
17
|
* 再只在这个会话的存档里找(别的会话 / 过期 → `conversation.output_not_found`)。
|
|
25
18
|
* 按字符分页(单行可能就很长,按行分页不能保证页大小);id 不是 UUID 时直接 404,不打到数据库。
|
|
26
19
|
*/
|
|
27
20
|
export declare class ConversationOutputs {
|
|
28
|
-
|
|
29
|
-
|
|
21
|
+
/** 会话可见性(与会话 SSE 流同一判定)。 */
|
|
22
|
+
private readonly access;
|
|
23
|
+
/** 读本会话未过期的存档:不存在 / 过期 / 属于别的会话 → null。 */
|
|
24
|
+
private readonly outputs;
|
|
25
|
+
constructor(
|
|
26
|
+
/** 会话可见性(与会话 SSE 流同一判定)。 */
|
|
27
|
+
access: Pick<ConversationAccess, "isAccessible">,
|
|
28
|
+
/** 读本会话未过期的存档:不存在 / 过期 / 属于别的会话 → null。 */
|
|
29
|
+
outputs: Pick<ToolOutputs, "load">);
|
|
30
30
|
read(orgId: string, conversationId: string, viewerAccountId: string, outputId: string, page: {
|
|
31
31
|
offset: number;
|
|
32
32
|
limit: number;
|
|
@@ -1,5 +1,17 @@
|
|
|
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 { ToolOutputs } from "../tools/outputs.js";
|
|
2
13
|
import { UUID_RE } from "../ui/registry.js";
|
|
14
|
+
import { ConversationAccess } from "./access.js";
|
|
3
15
|
/** 一次最多返回的字符数(也是默认值):大存档按字符分页取。 */
|
|
4
16
|
export const OUTPUT_PAGE_MAX_CHARS = 200_000;
|
|
5
17
|
const conversationNotFound = () => new ApiError("conversation.not_found", "Conversation not found");
|
|
@@ -9,19 +21,25 @@ const outputNotFound = () => new ApiError("conversation.output_not_found", "Outp
|
|
|
9
21
|
* 再只在这个会话的存档里找(别的会话 / 过期 → `conversation.output_not_found`)。
|
|
10
22
|
* 按字符分页(单行可能就很长,按行分页不能保证页大小);id 不是 UUID 时直接 404,不打到数据库。
|
|
11
23
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
24
|
+
let ConversationOutputs = class ConversationOutputs {
|
|
25
|
+
access;
|
|
26
|
+
outputs;
|
|
27
|
+
constructor(
|
|
28
|
+
/** 会话可见性(与会话 SSE 流同一判定)。 */
|
|
29
|
+
access,
|
|
30
|
+
/** 读本会话未过期的存档:不存在 / 过期 / 属于别的会话 → null。 */
|
|
31
|
+
outputs) {
|
|
32
|
+
this.access = access;
|
|
33
|
+
this.outputs = outputs;
|
|
16
34
|
}
|
|
17
35
|
async read(orgId, conversationId, viewerAccountId, outputId, page) {
|
|
18
36
|
if (!UUID_RE.test(conversationId))
|
|
19
37
|
throw conversationNotFound();
|
|
20
|
-
if (!(await this.
|
|
38
|
+
if (!(await this.access.isAccessible(orgId, conversationId, viewerAccountId)))
|
|
21
39
|
throw conversationNotFound();
|
|
22
40
|
if (!UUID_RE.test(outputId))
|
|
23
41
|
throw outputNotFound();
|
|
24
|
-
const content = await this.
|
|
42
|
+
const content = await this.outputs.load({ orgId, conversationId }, outputId);
|
|
25
43
|
if (content === null)
|
|
26
44
|
throw outputNotFound();
|
|
27
45
|
const offset = Math.min(page.offset, content.length);
|
|
@@ -34,4 +52,10 @@ export class ConversationOutputs {
|
|
|
34
52
|
next: end < content.length ? end : null,
|
|
35
53
|
};
|
|
36
54
|
}
|
|
37
|
-
}
|
|
55
|
+
};
|
|
56
|
+
ConversationOutputs = __decorate([
|
|
57
|
+
Injectable(),
|
|
58
|
+
__param(0, Inject(ConversationAccess)),
|
|
59
|
+
__param(1, Inject(ToolOutputs))
|
|
60
|
+
], ConversationOutputs);
|
|
61
|
+
export { ConversationOutputs };
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { type Transaction } from "kysely";
|
|
2
1
|
import { type ModelRef } from "../agents/definition.js";
|
|
3
|
-
import type {
|
|
4
|
-
import {
|
|
2
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
3
|
+
import { ApiError } from "../errors.js";
|
|
4
|
+
import { type InvocationRecord, type RenderedInvocation } from "../skills/invoke.js";
|
|
5
|
+
import type { AttachmentRef } from "./conversations.service.js";
|
|
5
6
|
import { type AppendEvent, type EventLog } from "./event-log.js";
|
|
6
|
-
import type { ConversationEvent } from "./events.js";
|
|
7
|
+
import type { ConversationEvent, LogContentBlock } from "./events.js";
|
|
7
8
|
/**
|
|
8
9
|
* Queued messages (UI refresh B, spec §5.7): messages a person queued while a run was going. They
|
|
9
10
|
* are conversation state in PG, not events: the model has not seen them, so they enter the log only
|
|
@@ -18,7 +19,16 @@ export declare const QUEUE_MAX_ITEMS = 20;
|
|
|
18
19
|
* the conversation, or the head item's skill can no longer be invoked (phase D Task 9).
|
|
19
20
|
*/
|
|
20
21
|
export type QueuePauseReason = "run_ended" | "author_cannot_send" | "skill_not_invocable";
|
|
21
|
-
|
|
22
|
+
/**
|
|
23
|
+
* A queued skill invocation (phase D Task 9), stored in `conversation_queue.skill`: the name the
|
|
24
|
+
* person invoked (`<plugin>:<name>` or bare) and the `user_message.skill` record rendered with it.
|
|
25
|
+
*/
|
|
26
|
+
export interface QueuedSkill {
|
|
27
|
+
invokedAs: string;
|
|
28
|
+
record: InvocationRecord;
|
|
29
|
+
}
|
|
30
|
+
/** The caller's transaction handle (the module helpers below run inside it). */
|
|
31
|
+
type KernelTrx = KernelSchemaDb;
|
|
22
32
|
/** A queued message as the API returns it. */
|
|
23
33
|
export interface QueueItem {
|
|
24
34
|
id: string;
|
|
@@ -68,7 +78,7 @@ export interface QueueInput {
|
|
|
68
78
|
name: string;
|
|
69
79
|
};
|
|
70
80
|
}
|
|
71
|
-
interface QueueRow {
|
|
81
|
+
export interface QueueRow {
|
|
72
82
|
id: string;
|
|
73
83
|
conversation_id: string;
|
|
74
84
|
account_id: string;
|
|
@@ -83,6 +93,25 @@ interface QueueRow {
|
|
|
83
93
|
skill: unknown;
|
|
84
94
|
created_at: Date;
|
|
85
95
|
}
|
|
96
|
+
export declare const COLUMNS: readonly ["id", "conversation_id", "account_id", "position", "text", "content", "attachments", "files", "client_message_id", "model", "effort", "skill", "created_at"];
|
|
97
|
+
/**
|
|
98
|
+
* Queued text as the event log will store it: NUL becomes U+FFFD (PG rejects NUL in text and
|
|
99
|
+
* jsonb), the mapping `payloadJson` applies to a direct send (final review m1).
|
|
100
|
+
*/
|
|
101
|
+
export declare const noNul: (text: string) => string;
|
|
102
|
+
export declare const itemNotFound: () => ApiError;
|
|
103
|
+
export declare function toItem(r: QueueRow): QueueItem;
|
|
104
|
+
/**
|
|
105
|
+
* The text rule of `POST …/messages`: text is required unless the message invokes a skill (its
|
|
106
|
+
* rendered text is `content[0]`) or carries files and no `@` resources (`content[0]` must be the
|
|
107
|
+
* text when resources follow it).
|
|
108
|
+
*/
|
|
109
|
+
export declare function checkText(text: string, files: number, attachments: number, skill: boolean): void;
|
|
110
|
+
/** The stored form of a rendered invocation and its first content block. */
|
|
111
|
+
export declare function storedSkill(invokedAs: string, invoked: RenderedInvocation): {
|
|
112
|
+
skill: string;
|
|
113
|
+
first: LogContentBlock;
|
|
114
|
+
};
|
|
86
115
|
/** The `user_message` a queued item becomes, as `postUserMessage` would have written it. */
|
|
87
116
|
export declare function queuedUserMessage(r: QueueRow): AppendEvent;
|
|
88
117
|
/**
|
|
@@ -93,12 +122,23 @@ export declare function queuedUserMessage(r: QueueRow): AppendEvent;
|
|
|
93
122
|
* (`model_switched { reason: "unavailable" }` before `run_started`) handles it, as it does for a
|
|
94
123
|
* direct switch whose model disappears. Returns the `user_message` and whether it switched.
|
|
95
124
|
*/
|
|
96
|
-
export declare function appendQueuedIn(t: KernelTrx, eventLog: Pick<EventLog, "
|
|
125
|
+
export declare function appendQueuedIn(t: KernelTrx, eventLog: Pick<EventLog, "appendIn">, conversationId: string, r: QueueRow): Promise<{
|
|
97
126
|
event: ConversationEvent;
|
|
98
127
|
switched: boolean;
|
|
99
128
|
}>;
|
|
129
|
+
/**
|
|
130
|
+
* Why a queued item's skill can no longer be invoked, or null (also null for a plain message).
|
|
131
|
+
* Checked at dispatch, inside `t` (phase D Task 9): the rendered text was frozen when queued, but
|
|
132
|
+
* the skill must still be one of the agent's skills a person can invoke.
|
|
133
|
+
*/
|
|
134
|
+
export declare function queuedSkillBlocked(t: KernelTrx, conversationId: string, r: Pick<QueueRow, "skill">): Promise<import("../skills/invoke.js").NotInvocableReason | null>;
|
|
100
135
|
/** Pauses the queue with `reason` (inside `t`, holding the conversation row lock). */
|
|
101
136
|
export declare function pauseQueueWith(t: KernelTrx, conversationId: string, reason: QueuePauseReason): Promise<void>;
|
|
137
|
+
/** Whether a user_message with this client id is already in the log (inside `t`). */
|
|
138
|
+
export declare function alreadySent(t: KernelTrx, conversationId: string, clientMessageId: string): Promise<boolean>;
|
|
139
|
+
/** Clears the pause once the queue is empty (inside `t`, holding the conversation row lock). */
|
|
140
|
+
export declare function unpauseIfEmpty(t: KernelTrx, conversationId: string): Promise<void>;
|
|
141
|
+
export declare const queueFull: () => ApiError;
|
|
102
142
|
/**
|
|
103
143
|
* Sends the queue's head item as a `user_message` inside `t` (the caller holds the conversation
|
|
104
144
|
* row lock and has checked the conversation is idle and not paused); returns the event, or null
|
|
@@ -107,7 +147,7 @@ export declare function pauseQueueWith(t: KernelTrx, conversationId: string, rea
|
|
|
107
147
|
* stays queued and the queue pauses (`skill_not_invocable`): `{ paused }`. The caller notifies
|
|
108
148
|
* after commit.
|
|
109
149
|
*/
|
|
110
|
-
export declare function dispatchQueuedIn(t: KernelTrx, eventLog: Pick<EventLog, "
|
|
150
|
+
export declare function dispatchQueuedIn(t: KernelTrx, eventLog: Pick<EventLog, "appendIn">, conversationId: string): Promise<{
|
|
111
151
|
event: ConversationEvent;
|
|
112
152
|
switched: boolean;
|
|
113
153
|
} | {
|
|
@@ -118,52 +158,4 @@ export declare function dispatchQueuedIn(t: KernelTrx, eventLog: Pick<EventLog,
|
|
|
118
158
|
* (inside the terminal transaction, see `finishRunIn`).
|
|
119
159
|
*/
|
|
120
160
|
export declare function pauseQueueIn(t: KernelTrx, conversationId: string): Promise<void>;
|
|
121
|
-
export interface ConversationQueueDeps {
|
|
122
|
-
db: KernelDb;
|
|
123
|
-
eventLog: Pick<EventLog, "append" | "notify" | "publishChanged" | "findByIdem">;
|
|
124
|
-
conversations: Pick<ConversationsService, "get" | "writable" | "resolveExtra" | "bindIn" | "checkFilesSupported" | "checkPick" | "prepareQueuedSkill">;
|
|
125
|
-
runs?: Pick<RunControl, "ensureRun">;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* The queue API (owner only, as the conversation): list, add, edit the text, delete, send now and
|
|
129
|
-
* resume. Every change publishes `changed: queue`.
|
|
130
|
-
*/
|
|
131
|
-
export declare class ConversationQueue {
|
|
132
|
-
private readonly d;
|
|
133
|
-
constructor(d: ConversationQueueDeps);
|
|
134
|
-
list(orgId: string, conversationId: string, accountId: string): Promise<{
|
|
135
|
-
items: QueueItem[];
|
|
136
|
-
paused: boolean;
|
|
137
|
-
pauseReason?: QueuePauseReason;
|
|
138
|
-
}>;
|
|
139
|
-
/**
|
|
140
|
-
* Queues a message. `@` resources are read now with the caller's credentials and stored with the
|
|
141
|
-
* item, and uploaded files are bound to the conversation now, so sending later needs nobody's
|
|
142
|
-
* credentials. The same `clientMessageId` again returns the queued item (`created: false`), or,
|
|
143
|
-
* when it was already sent, the sent `user_message` with `item: null`. Then `ensureRun`: on an
|
|
144
|
-
* idle conversation the item goes out at once.
|
|
145
|
-
*/
|
|
146
|
-
add(orgId: string, conversationId: string, accountId: string, input: QueueInput): Promise<{
|
|
147
|
-
item: QueueItem | null;
|
|
148
|
-
event?: ConversationEvent;
|
|
149
|
-
created: boolean;
|
|
150
|
-
}>;
|
|
151
|
-
/**
|
|
152
|
-
* Changes a queued item's text (its resources and files stay as queued). A skill invocation's
|
|
153
|
-
* text is its arguments: the skill is rendered again with them now (phase D Task 9).
|
|
154
|
-
*/
|
|
155
|
-
edit(orgId: string, conversationId: string, accountId: string, itemId: string, text: string): Promise<QueueItem>;
|
|
156
|
-
remove(orgId: string, conversationId: string, accountId: string, itemId: string): Promise<void>;
|
|
157
|
-
/**
|
|
158
|
-
* Sends a queued item now: it leaves the queue and is posted as a user message in the same
|
|
159
|
-
* transaction (an interjection when a run is active; the items before it keep their place).
|
|
160
|
-
* Racing the dispatcher, exactly one of them takes the item; the loser sees it gone (404).
|
|
161
|
-
*/
|
|
162
|
-
sendNow(orgId: string, conversationId: string, accountId: string, itemId: string): Promise<ConversationEvent>;
|
|
163
|
-
/** "Continue sending": clears the pause and lets `ensureRun` send the head item. */
|
|
164
|
-
resume(orgId: string, conversationId: string, accountId: string): Promise<void>;
|
|
165
|
-
/** A queued item or a sent message for this client id (outside any transaction). */
|
|
166
|
-
private prior;
|
|
167
|
-
private lockConversation;
|
|
168
|
-
}
|
|
169
161
|
export {};
|