@capybara-hq/kernel 0.1.0-rc.1 → 0.1.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin.controller.d.ts +17 -17
- package/dist/admin/admin.controller.js +43 -26
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/extensions.controller.d.ts +14 -14
- package/dist/admin/extensions.controller.js +30 -17
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +8 -8
- package/dist/admin/setup.controller.js +27 -25
- package/dist/admin/setup.service.d.ts +19 -27
- package/dist/admin/setup.service.js +61 -61
- package/dist/agents/agent-lookup.d.ts +53 -0
- package/dist/agents/agent-lookup.js +187 -0
- package/dist/agents/agents.controller.d.ts +1 -1
- package/dist/agents/agents.controller.js +14 -8
- package/dist/agents/agents.module.d.ts +7 -0
- package/dist/agents/agents.module.js +41 -0
- package/dist/agents/agents.service.d.ts +39 -58
- package/dist/agents/agents.service.js +280 -335
- package/dist/agents/definition.d.ts +39 -8
- package/dist/agents/definition.js +201 -17
- package/dist/agents/models.controller.d.ts +1 -1
- package/dist/agents/models.controller.js +2 -2
- package/dist/agents/templates.controller.d.ts +1 -1
- package/dist/agents/templates.controller.js +2 -2
- package/dist/agents/templates.d.ts +6 -8
- package/dist/agents/templates.js +39 -8
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -0
- package/dist/catalog/admin-catalog.controller.d.ts +3 -3
- package/dist/catalog/admin-catalog.controller.js +27 -13
- package/dist/catalog/catalog-content.d.ts +185 -0
- package/dist/catalog/catalog-content.js +326 -0
- package/dist/catalog/catalog-items.d.ts +186 -0
- package/dist/catalog/catalog-items.js +410 -0
- package/dist/catalog/catalog.module.d.ts +14 -0
- package/dist/catalog/catalog.module.js +71 -0
- package/dist/catalog/catalog.service.d.ts +34 -188
- package/dist/catalog/catalog.service.js +155 -489
- package/dist/catalog/claude/agents.js +13 -10
- package/dist/catalog/cli.d.ts +3 -2
- package/dist/catalog/cli.js +13 -31
- package/dist/catalog/job-ids.d.ts +15 -0
- package/dist/catalog/job-ids.js +15 -0
- package/dist/catalog/jobs.d.ts +27 -0
- package/dist/catalog/jobs.js +70 -0
- package/dist/catalog/locks.d.ts +24 -0
- package/dist/catalog/locks.js +63 -0
- package/dist/catalog/marketplaces.controller.d.ts +4 -4
- package/dist/catalog/marketplaces.controller.js +22 -11
- package/dist/catalog/marketplaces.service.d.ts +31 -14
- package/dist/catalog/marketplaces.service.js +330 -256
- package/dist/catalog/org-catalog.controller.d.ts +4 -3
- package/dist/catalog/org-catalog.controller.js +29 -14
- package/dist/catalog/org-catalog.service.d.ts +32 -198
- package/dist/catalog/org-catalog.service.js +159 -400
- package/dist/catalog/plugin-import.d.ts +73 -34
- package/dist/catalog/plugin-import.js +356 -217
- package/dist/catalog/plugin-install.d.ts +83 -41
- package/dist/catalog/plugin-install.js +421 -269
- package/dist/catalog/plugin-upgrade.d.ts +59 -4
- package/dist/catalog/plugin-upgrade.js +407 -282
- package/dist/catalog/requests.service.d.ts +27 -15
- package/dist/catalog/requests.service.js +201 -145
- package/dist/catalog/upgrade-targets.d.ts +4 -7
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +1 -1
- package/dist/channels/cards.d.ts +10 -4
- package/dist/channels/cards.js +16 -8
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +128 -0
- package/dist/channels/connections.controller.d.ts +1 -1
- package/dist/channels/connections.controller.js +11 -6
- package/dist/channels/connections.service.d.ts +43 -21
- package/dist/channels/connections.service.js +236 -131
- package/dist/channels/inbound.d.ts +34 -38
- package/dist/channels/inbound.js +107 -41
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +60 -82
- package/dist/channels/outbound.js +165 -194
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +29 -8
- package/dist/channels/threads.js +71 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +1 -0
- package/dist/config/schema.js +12 -6
- package/dist/conversations/access.d.ts +29 -0
- package/dist/conversations/access.js +86 -0
- package/dist/conversations/artifacts.d.ts +11 -11
- package/dist/conversations/artifacts.js +36 -10
- package/dist/conversations/attachments.controller.d.ts +1 -1
- package/dist/conversations/attachments.controller.js +8 -6
- package/dist/conversations/attachments.module.d.ts +7 -0
- package/dist/conversations/attachments.module.js +25 -0
- package/dist/conversations/attachments.service.d.ts +30 -22
- package/dist/conversations/attachments.service.js +119 -46
- package/dist/conversations/conversations.controller.d.ts +8 -7
- package/dist/conversations/conversations.controller.js +59 -29
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +69 -0
- package/dist/conversations/conversations.service.d.ts +40 -38
- package/dist/conversations/conversations.service.js +130 -140
- package/dist/conversations/event-log.d.ts +39 -18
- package/dist/conversations/event-log.js +93 -27
- package/dist/conversations/events.d.ts +23 -3
- package/dist/conversations/events.js +26 -14
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +48 -56
- package/dist/conversations/queue.js +13 -289
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +343 -0
- package/dist/conversations/sandbox-status.d.ts +13 -10
- package/dist/conversations/sandbox-status.js +36 -8
- package/dist/conversations/titles.d.ts +71 -24
- package/dist/conversations/titles.js +159 -63
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +6 -0
- package/dist/ctx/create-ctx.js +7 -9
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +4 -4
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +1 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +1 -0
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/recorded-tools.d.ts +27 -1
- package/dist/evals/recorded-tools.js +85 -10
- package/dist/evals/run-replay.d.ts +61 -8
- package/dist/evals/run-replay.js +159 -85
- package/dist/evals/runs.controller.d.ts +1 -1
- package/dist/evals/runs.controller.js +17 -8
- package/dist/evals/runs.service.d.ts +23 -45
- package/dist/evals/runs.service.js +245 -234
- package/dist/evals/sets.controller.d.ts +1 -1
- package/dist/evals/sets.controller.js +17 -8
- package/dist/evals/sets.service.d.ts +22 -6
- package/dist/evals/sets.service.js +248 -194
- package/dist/evals/snapshot.d.ts +2 -2
- package/dist/evals/step-replay.d.ts +2 -2
- package/dist/evals/step-replay.js +1 -1
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.d.ts +2 -2
- package/dist/evals/trajectory.service.d.ts +5 -4
- package/dist/evals/trajectory.service.js +30 -7
- package/dist/evals/worker.d.ts +44 -27
- package/dist/evals/worker.js +220 -121
- package/dist/extensions/admin-ops.d.ts +61 -33
- package/dist/extensions/admin-ops.js +248 -154
- package/dist/extensions/admin-view.d.ts +38 -27
- package/dist/extensions/admin-view.js +126 -55
- package/dist/extensions/approvals.d.ts +12 -8
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +111 -45
- package/dist/extensions/bootstrap.d.ts +58 -31
- package/dist/extensions/bootstrap.js +175 -121
- package/dist/extensions/cli.d.ts +20 -10
- package/dist/extensions/cli.js +41 -96
- package/dist/extensions/config-issues.d.ts +7 -0
- package/dist/extensions/config-issues.js +31 -0
- package/dist/extensions/deployment-config-store.d.ts +49 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +58 -67
- package/dist/extensions/deployment-config.js +202 -230
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +77 -0
- package/dist/extensions/hooks.d.ts +3 -2
- package/dist/extensions/hooks.js +1 -1
- package/dist/extensions/host.d.ts +72 -68
- package/dist/extensions/host.js +191 -152
- package/dist/extensions/installs.d.ts +49 -16
- package/dist/extensions/installs.js +128 -32
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +33 -0
- package/dist/extensions/locks.js +86 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.controller.d.ts +1 -1
- package/dist/extensions/org-config.controller.js +8 -5
- package/dist/extensions/org-config.d.ts +48 -46
- package/dist/extensions/org-config.js +284 -226
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +89 -4
- package/dist/extensions/sources.d.ts +12 -8
- package/dist/extensions/sources.js +34 -13
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +17 -9
- package/dist/files/previewers.d.ts +13 -18
- package/dist/files/previewers.js +83 -36
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +47 -355
- package/dist/http/app.d.ts +11 -15
- package/dist/http/app.js +17 -62
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/identity/accounts.d.ts +82 -29
- package/dist/identity/accounts.js +294 -175
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +7 -4
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +31 -25
- package/dist/identity/auth.guard.d.ts +3 -3
- package/dist/identity/auth.guard.js +6 -4
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/enterprise-admin.d.ts +18 -12
- package/dist/identity/enterprise-admin.js +67 -13
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +56 -0
- package/dist/identity/me.controller.d.ts +16 -15
- package/dist/identity/me.controller.js +37 -31
- package/dist/identity/sessions.d.ts +12 -10
- package/dist/identity/sessions.js +74 -42
- package/dist/identity/settings.d.ts +20 -14
- package/dist/identity/settings.js +86 -58
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/inbox/inbox.module.d.ts +3 -0
- package/dist/inbox/inbox.module.js +22 -0
- package/dist/inbox/inbox.service.d.ts +7 -9
- package/dist/inbox/inbox.service.js +32 -11
- package/dist/index.d.ts +16 -11
- package/dist/index.js +9 -6
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +165 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +126 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +90 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +96 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +86 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +16 -0
- package/dist/infra/logging/logging.module.js +34 -0
- package/dist/infra/queue/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +7 -0
- package/dist/infra/queue/redis-connection.js +18 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +87 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +31 -0
- package/dist/infra/throttler/named-throttlers.js +119 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +15 -0
- package/dist/infra/tokens.js +15 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -244
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +136 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +456 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-context.d.ts +2 -0
- package/dist/log-context.js +4 -0
- package/dist/models/models.module.d.ts +3 -0
- package/dist/models/models.module.js +24 -0
- package/dist/models/prices.d.ts +8 -2
- package/dist/models/prices.js +65 -37
- package/dist/models/purposes.controller.d.ts +1 -1
- package/dist/models/purposes.controller.js +5 -6
- package/dist/models/purposes.d.ts +35 -13
- package/dist/models/purposes.js +101 -51
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +61 -31
- package/dist/orgs/directory-sync.js +212 -125
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +54 -57
- package/dist/orgs/offboarding.js +161 -71
- package/dist/orgs/org-lock.d.ts +28 -19
- package/dist/orgs/org-lock.js +81 -35
- package/dist/orgs/org.guard.d.ts +1 -1
- package/dist/orgs/org.guard.js +2 -2
- package/dist/orgs/orgs.controller.d.ts +13 -13
- package/dist/orgs/orgs.controller.js +29 -17
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +68 -0
- package/dist/orgs/orgs.service.d.ts +30 -19
- package/dist/orgs/orgs.service.js +139 -86
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +16 -10
- package/dist/orgs/settings.service.js +77 -48
- package/dist/overrides.d.ts +56 -0
- package/dist/overrides.js +30 -0
- package/dist/roles/gateway-role.d.ts +43 -0
- package/dist/roles/gateway-role.js +98 -0
- package/dist/roles/gateway.module.d.ts +8 -0
- package/dist/roles/gateway.module.js +28 -0
- package/dist/roles/worker-role.d.ts +63 -0
- package/dist/roles/worker-role.js +144 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +90 -0
- package/dist/runtime/abort.js +19 -2
- package/dist/runtime/checkpointer.d.ts +8 -3
- package/dist/runtime/checkpointer.js +87 -55
- package/dist/runtime/context/build.d.ts +6 -6
- package/dist/runtime/context/build.js +18 -8
- package/dist/runtime/context/claude-tools.d.ts +2 -1
- package/dist/runtime/context/claude-tools.js +9 -10
- package/dist/runtime/context/legacy-text.d.ts +22 -0
- package/dist/runtime/context/legacy-text.js +37 -0
- package/dist/runtime/context/skills.d.ts +29 -11
- package/dist/runtime/context/skills.js +37 -30
- package/dist/runtime/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +3 -3
- package/dist/runtime/hook-calls.js +1 -6
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.js +1 -1
- package/dist/runtime/loop.d.ts +8 -1
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +45 -74
- package/dist/runtime/maintenance.js +139 -137
- package/dist/runtime/model-call.d.ts +7 -4
- package/dist/runtime/model-call.js +25 -58
- package/dist/runtime/providers.d.ts +17 -6
- package/dist/runtime/providers.js +66 -25
- package/dist/runtime/quota.d.ts +17 -3
- package/dist/runtime/quota.js +27 -2
- package/dist/runtime/retired-schedulers.d.ts +7 -0
- package/dist/runtime/retired-schedulers.js +31 -0
- package/dist/runtime/run-control.d.ts +33 -0
- package/dist/runtime/run-control.js +77 -0
- package/dist/runtime/run-finish.d.ts +27 -18
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +48 -0
- package/dist/runtime/run-jobs.js +95 -0
- package/dist/runtime/run-processors.d.ts +60 -0
- package/dist/runtime/run-processors.js +185 -0
- package/dist/runtime/run-queue.d.ts +32 -57
- package/dist/runtime/run-queue.js +291 -295
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +122 -76
- package/dist/runtime/run-worker.js +343 -229
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +112 -0
- package/dist/runtime/step-log.d.ts +40 -0
- package/dist/runtime/step-log.js +94 -0
- package/dist/runtime/stream.controller.d.ts +5 -8
- package/dist/runtime/stream.controller.js +14 -12
- package/dist/runtime/stream.d.ts +24 -6
- package/dist/runtime/stream.js +78 -7
- package/dist/runtime/subagents/child.d.ts +3 -44
- package/dist/runtime/subagents/child.js +0 -79
- package/dist/runtime/subagents/definition.d.ts +5 -10
- package/dist/runtime/subagents/definition.js +13 -14
- package/dist/runtime/subagents/dispatch.d.ts +89 -8
- package/dist/runtime/subagents/dispatch.js +137 -142
- package/dist/runtime/subagents/limits.d.ts +9 -4
- package/dist/runtime/subagents/limits.js +4 -2
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +3 -2
- package/dist/runtime/subagents/progress.d.ts +2 -2
- package/dist/runtime/subagents/roster.d.ts +4 -4
- package/dist/runtime/subagents/roster.js +2 -2
- package/dist/runtime/subagents/skill-fork.d.ts +8 -9
- package/dist/runtime/subagents/skill-fork.js +17 -6
- package/dist/runtime/subagents/subagents.service.d.ts +40 -0
- package/dist/runtime/subagents/subagents.service.js +101 -0
- package/dist/runtime/usage-report.d.ts +94 -52
- package/dist/runtime/usage-report.js +200 -100
- package/dist/runtime/waits.d.ts +127 -59
- package/dist/runtime/waits.js +433 -210
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +41 -0
- package/dist/sandbox/jobs.js +113 -0
- package/dist/sandbox/leases.d.ts +39 -31
- package/dist/sandbox/leases.js +117 -257
- package/dist/sandbox/providers.d.ts +19 -0
- package/dist/sandbox/providers.js +38 -0
- package/dist/sandbox/sandbox.module.d.ts +8 -0
- package/dist/sandbox/sandbox.module.js +30 -0
- package/dist/sandbox/sandbox.service.d.ts +24 -29
- package/dist/sandbox/sandbox.service.js +106 -75
- package/dist/skills/catalog.d.ts +37 -24
- package/dist/skills/catalog.js +100 -57
- package/dist/skills/changes.controller.d.ts +4 -4
- package/dist/skills/changes.controller.js +15 -9
- package/dist/skills/changes.service.d.ts +30 -20
- package/dist/skills/changes.service.js +425 -367
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +8 -5
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +17 -16
- package/dist/skills/invoke.js +53 -21
- package/dist/skills/skills.controller.d.ts +1 -1
- package/dist/skills/skills.controller.js +11 -6
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +30 -0
- package/dist/skills/skills.service.d.ts +47 -30
- package/dist/skills/skills.service.js +221 -158
- package/dist/storage/job-ids.d.ts +6 -0
- package/dist/storage/job-ids.js +6 -0
- package/dist/storage/purge.d.ts +22 -7
- package/dist/storage/purge.js +55 -3
- package/dist/storage/storage.module.d.ts +6 -0
- package/dist/storage/storage.module.js +23 -0
- package/dist/storage/storage.service.d.ts +18 -4
- package/dist/storage/storage.service.js +44 -3
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +12 -8
- package/dist/tools/approvals.service.d.ts +33 -25
- package/dist/tools/approvals.service.js +343 -259
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtin-names.d.ts +73 -0
- package/dist/tools/builtin-names.js +116 -0
- package/dist/tools/builtins/agent.d.ts +7 -7
- package/dist/tools/builtins/agent.js +7 -11
- package/dist/tools/builtins/ask-user.d.ts +3 -3
- package/dist/tools/builtins/ask-user.js +3 -3
- package/dist/tools/builtins/builtin-tools.d.ts +21 -0
- package/dist/tools/builtins/builtin-tools.js +80 -0
- package/dist/tools/builtins/read-tool-output.d.ts +3 -3
- package/dist/tools/builtins/read-tool-output.js +3 -3
- package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
- package/dist/tools/builtins/sandbox/bash.js +33 -30
- package/dist/tools/builtins/sandbox/common.d.ts +5 -4
- package/dist/tools/builtins/sandbox/common.js +2 -2
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +13 -13
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +42 -31
- package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
- package/dist/tools/builtins/sandbox/file-state.js +34 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob-match.js +1 -1
- package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob.js +6 -6
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +149 -32
- package/dist/tools/builtins/sandbox/index.d.ts +1 -1
- package/dist/tools/builtins/sandbox/index.js +1 -1
- package/dist/tools/builtins/sandbox/read.d.ts +2 -2
- package/dist/tools/builtins/sandbox/read.js +22 -15
- package/dist/tools/builtins/sandbox/write.d.ts +1 -1
- package/dist/tools/builtins/sandbox/write.js +38 -34
- package/dist/tools/builtins/skill-load.d.ts +6 -6
- package/dist/tools/builtins/skill-load.js +33 -17
- package/dist/tools/builtins/skill-write.d.ts +4 -4
- package/dist/tools/builtins/skill-write.js +10 -10
- package/dist/tools/builtins/tool-search.d.ts +13 -9
- package/dist/tools/builtins/tool-search.js +25 -14
- package/dist/tools/canonical-json.d.ts +6 -0
- package/dist/tools/canonical-json.js +16 -0
- package/dist/tools/connector-content.controller.d.ts +1 -1
- package/dist/tools/connector-content.controller.js +11 -6
- package/dist/tools/connector-content.d.ts +12 -15
- package/dist/tools/connector-content.js +53 -18
- package/dist/tools/connectors.controller.d.ts +1 -1
- package/dist/tools/connectors.controller.js +21 -10
- package/dist/tools/connectors.service.d.ts +31 -13
- package/dist/tools/connectors.service.js +438 -348
- package/dist/tools/credentials.d.ts +17 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/display-names.d.ts +9 -0
- package/dist/tools/display-names.js +24 -0
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +116 -84
- package/dist/tools/elicitation.js +1 -1
- package/dist/tools/info.d.ts +32 -13
- package/dist/tools/info.js +88 -39
- package/dist/tools/job-ids.d.ts +13 -0
- package/dist/tools/job-ids.js +15 -0
- package/dist/tools/jobs.d.ts +24 -0
- package/dist/tools/jobs.js +69 -0
- package/dist/tools/legacy-data.d.ts +34 -0
- package/dist/tools/legacy-data.js +76 -0
- package/dist/tools/legacy-keys.d.ts +51 -0
- package/dist/tools/legacy-keys.js +115 -0
- package/dist/tools/naming.d.ts +1 -5
- package/dist/tools/naming.js +1 -7
- package/dist/tools/oauth/flow-paths.d.ts +16 -0
- package/dist/tools/oauth/flow-paths.js +38 -0
- package/dist/tools/oauth/flow.d.ts +30 -30
- package/dist/tools/oauth/flow.js +109 -81
- package/dist/tools/oauth/oauth.controller.d.ts +3 -3
- package/dist/tools/oauth/oauth.controller.js +12 -9
- package/dist/tools/oauth/tokens.d.ts +11 -3
- package/dist/tools/oauth/tokens.js +15 -14
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +48 -4
- package/dist/tools/pipeline.d.ts +72 -50
- package/dist/tools/pipeline.js +239 -100
- package/dist/tools/policy.d.ts +3 -16
- package/dist/tools/policy.js +13 -19
- package/dist/tools/questions.controller.d.ts +2 -2
- package/dist/tools/questions.controller.js +9 -6
- package/dist/tools/questions.service.d.ts +26 -25
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +43 -38
- package/dist/tools/registry.js +100 -72
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +1 -1
- package/dist/tools/specs.d.ts +5 -4
- package/dist/tools/specs.js +3 -1
- package/dist/tools/tools.module.d.ts +10 -0
- package/dist/tools/tools.module.js +91 -0
- package/dist/ui/call-extension.d.ts +16 -0
- package/dist/ui/call-extension.js +38 -0
- package/dist/ui/embed-token.d.ts +9 -5
- package/dist/ui/embed-token.js +34 -6
- package/dist/ui/ui-stream.d.ts +22 -17
- package/dist/ui/ui-stream.js +72 -12
- package/dist/ui/ui.module.d.ts +7 -0
- package/dist/ui/ui.module.js +28 -0
- package/dist/ui/views.controller.d.ts +14 -12
- package/dist/ui/views.controller.js +32 -25
- package/dist/ui/views.d.ts +9 -57
- package/dist/ui/views.js +43 -45
- package/package.json +10 -3
- package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- package/dist/tools/builtins/sandbox/names.d.ts +0 -7
- package/dist/tools/builtins/sandbox/names.js +0 -20
- /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
- /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
|
@@ -0,0 +1,69 @@
|
|
|
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
|
+
import { Module } from "@nestjs/common";
|
|
8
|
+
import { AgentLookupModule } from "../agents/agent-lookup.js";
|
|
9
|
+
import { ProvidersModule } from "../runtime/providers.js";
|
|
10
|
+
import { RuntimeModule } from "../runtime/runtime.module.js";
|
|
11
|
+
import { SandboxModule } from "../sandbox/sandbox.module.js";
|
|
12
|
+
import { SkillsModule } from "../skills/skills.module.js";
|
|
13
|
+
import { StorageModule } from "../storage/storage.module.js";
|
|
14
|
+
import { ToolsModule } from "../tools/tools.module.js";
|
|
15
|
+
import { ConversationAccessModule } from "./access.js";
|
|
16
|
+
import { ConversationArtifacts } from "./artifacts.js";
|
|
17
|
+
import { AttachmentsModule } from "./attachments.module.js";
|
|
18
|
+
import { ConversationsService } from "./conversations.service.js";
|
|
19
|
+
import { EventLogModule } from "./event-log.js";
|
|
20
|
+
import { ConversationFiles } from "./files.js";
|
|
21
|
+
import { ConversationOutputs } from "./outputs-read.js";
|
|
22
|
+
import { ConversationQueue } from "./queue.service.js";
|
|
23
|
+
import { ConversationSandboxStatus } from "./sandbox-status.js";
|
|
24
|
+
/**
|
|
25
|
+
* Conversations: the one {@link ConversationsService} (messages, model switches, skill
|
|
26
|
+
* invocations, sub-agent views, abort), the queue, the file / artifact / output reads and the
|
|
27
|
+
* sandbox status. The event log, the access check and the attachments are their own modules (the
|
|
28
|
+
* skills and tools use them too) and are re-exported here.
|
|
29
|
+
*/
|
|
30
|
+
let ConversationsModule = class ConversationsModule {
|
|
31
|
+
};
|
|
32
|
+
ConversationsModule = __decorate([
|
|
33
|
+
Module({
|
|
34
|
+
imports: [
|
|
35
|
+
EventLogModule,
|
|
36
|
+
ConversationAccessModule,
|
|
37
|
+
AttachmentsModule,
|
|
38
|
+
AgentLookupModule,
|
|
39
|
+
StorageModule,
|
|
40
|
+
SkillsModule,
|
|
41
|
+
ToolsModule,
|
|
42
|
+
// the run control (start a run after a message, stop runs) and the model provider registry
|
|
43
|
+
RuntimeModule,
|
|
44
|
+
ProvidersModule,
|
|
45
|
+
// the sandbox status
|
|
46
|
+
SandboxModule,
|
|
47
|
+
],
|
|
48
|
+
providers: [
|
|
49
|
+
ConversationsService,
|
|
50
|
+
ConversationQueue,
|
|
51
|
+
ConversationOutputs,
|
|
52
|
+
ConversationArtifacts,
|
|
53
|
+
ConversationFiles,
|
|
54
|
+
ConversationSandboxStatus,
|
|
55
|
+
],
|
|
56
|
+
exports: [
|
|
57
|
+
EventLogModule,
|
|
58
|
+
ConversationAccessModule,
|
|
59
|
+
AttachmentsModule,
|
|
60
|
+
ConversationsService,
|
|
61
|
+
ConversationQueue,
|
|
62
|
+
ConversationOutputs,
|
|
63
|
+
ConversationArtifacts,
|
|
64
|
+
ConversationFiles,
|
|
65
|
+
ConversationSandboxStatus,
|
|
66
|
+
],
|
|
67
|
+
})
|
|
68
|
+
], ConversationsModule);
|
|
69
|
+
export { ConversationsModule };
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { type Transaction } from "kysely";
|
|
3
|
-
import { type AgentsService } from "../agents/agents.service.js";
|
|
1
|
+
import { AgentLookup } from "../agents/agent-lookup.js";
|
|
4
2
|
import type { ModelRef } from "../agents/definition.js";
|
|
5
|
-
import type {
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import type {
|
|
3
|
+
import type { TitleSource } 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 type { KernelLogger } from "../log.js";
|
|
7
|
+
import { ProviderRegistry } from "../runtime/providers.js";
|
|
8
|
+
import { type RenderedInvocation, SkillInvoker } from "../skills/invoke.js";
|
|
9
|
+
import { ConnectorContent } from "../tools/connector-content.js";
|
|
10
|
+
import { ConversationAccess } from "./access.js";
|
|
11
|
+
import { AttachmentsService } from "./attachments.service.js";
|
|
12
|
+
import { EventLog } from "./event-log.js";
|
|
9
13
|
import type { ConversationEvent, LogContentBlock } from "./events.js";
|
|
10
14
|
import { type Selection } from "./selection.js";
|
|
11
15
|
/** 对外的会话视图。 */
|
|
@@ -89,8 +93,6 @@ export interface AttachmentRef {
|
|
|
89
93
|
connectorId: string;
|
|
90
94
|
uri: string;
|
|
91
95
|
}
|
|
92
|
-
/** 附件解析:以发送者的凭据读取资源,返回追加在消息后的文本块与元数据(见 tools/connector-content.ts)。 */
|
|
93
|
-
export type ResolveAttachments = (orgId: string, accountId: string, refs: AttachmentRef[]) => Promise<ResolvedExtra>;
|
|
94
96
|
/** Resolved `@` resources: the blocks after the user text and their metadata. */
|
|
95
97
|
export interface ResolvedExtra {
|
|
96
98
|
blocks: {
|
|
@@ -105,16 +107,7 @@ export interface ResolvedExtra {
|
|
|
105
107
|
name: string;
|
|
106
108
|
}[];
|
|
107
109
|
}
|
|
108
|
-
|
|
109
|
-
* 消息引用的上传附件(`files`):在发消息的事务里校验并绑定到会话,返回写进 user_message 的媒体块
|
|
110
|
-
* (`source: {kind: "ref"}`,见 AttachmentsService.bindForMessage)。
|
|
111
|
-
*/
|
|
112
|
-
export type BindFiles = (trx: Transaction<KernelDatabase>, orgId: string, conversationId: string, accountId: string, ids: readonly string[]) => Promise<LogContentBlock[]>;
|
|
113
|
-
/**
|
|
114
|
-
* 用户消息的幂等键:客户端的 `clientMessageId` 加前缀,与运行流水线自用的幂等键分开,
|
|
115
|
-
* 避免客户端恰好选中内部键而命中别的事件。
|
|
116
|
-
*/
|
|
117
|
-
export declare const userMessageIdemKey: (clientMessageId: string) => string;
|
|
110
|
+
export { userMessageIdemKey } from "./idem-keys.js";
|
|
118
111
|
/** The longest conversation title (characters, after trimming). */
|
|
119
112
|
export declare const CONVERSATION_TITLE_MAX_CHARS = 120;
|
|
120
113
|
/** A user message as posted (`POST …/messages`, or the first message of `POST /conversations`). */
|
|
@@ -145,19 +138,30 @@ export declare class ConversationsService {
|
|
|
145
138
|
private readonly db;
|
|
146
139
|
private readonly eventLog;
|
|
147
140
|
private readonly agents;
|
|
148
|
-
private readonly
|
|
149
|
-
|
|
150
|
-
private readonly
|
|
151
|
-
private readonly bindFiles?;
|
|
141
|
+
private readonly access;
|
|
142
|
+
/** Starts and stops the conversation's runs. */
|
|
143
|
+
private readonly runs;
|
|
152
144
|
/** Resolves a switched-to model and its declared parameters (UI refresh B). */
|
|
153
|
-
private readonly
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
145
|
+
private readonly providers;
|
|
146
|
+
private readonly log;
|
|
147
|
+
/** Reads `@` resources with the sender's credentials. */
|
|
148
|
+
private readonly content;
|
|
149
|
+
/** Binds uploaded files to the conversation in the message's transaction. */
|
|
150
|
+
private readonly attachments;
|
|
151
|
+
/** Renders a person's skill invocation (phase D). */
|
|
152
|
+
private readonly invoker;
|
|
153
|
+
readonly txHost: TransactionHost;
|
|
154
|
+
constructor(db: KernelDb, eventLog: EventLog, agents: Pick<AgentLookup, "get">, access: Pick<ConversationAccess, "isAccessible">,
|
|
155
|
+
/** Starts and stops the conversation's runs. */
|
|
156
|
+
runs: RunControl,
|
|
157
157
|
/** Resolves a switched-to model and its declared parameters (UI refresh B). */
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
|
|
158
|
+
providers: Pick<ProviderRegistry, "resolve">, log: Pick<KernelLogger, "warn">,
|
|
159
|
+
/** Reads `@` resources with the sender's credentials. */
|
|
160
|
+
content: Pick<ConnectorContent, "resolveAttachments">,
|
|
161
|
+
/** Binds uploaded files to the conversation in the message's transaction. */
|
|
162
|
+
attachments: Pick<AttachmentsService, "bindForMessage">,
|
|
163
|
+
/** Renders a person's skill invocation (phase D). */
|
|
164
|
+
invoker: Pick<SkillInvoker, "prepare">, txHost: TransactionHost);
|
|
161
165
|
/**
|
|
162
166
|
* 不阻塞地调用一次 `ensureRun`(打开 SSE、读事件时):它幂等,并顺带清理孤儿运行,
|
|
163
167
|
* 会话不会因为某次运行结束后的投递失败而永远停在「运行中」。失败只记日志。
|
|
@@ -179,6 +183,8 @@ export declare class ConversationsService {
|
|
|
179
183
|
event: ConversationEvent;
|
|
180
184
|
created: boolean;
|
|
181
185
|
}>;
|
|
186
|
+
/** The conversation row and its first message (undefined: a concurrent retry committed first). */
|
|
187
|
+
private createIn;
|
|
182
188
|
/**
|
|
183
189
|
* The conversation (and its first event) an earlier first send with this id created. The id used
|
|
184
190
|
* for another agent's conversation → `conflict` (the caller only checked access to `agentId`, so
|
|
@@ -200,11 +206,7 @@ export declare class ConversationsService {
|
|
|
200
206
|
writable(orgId: string, conversationId: string, accountId: string): Promise<ConversationView>;
|
|
201
207
|
/** {@link get}'s row, with the conversation's kind. */
|
|
202
208
|
private readable;
|
|
203
|
-
/**
|
|
204
|
-
* 轻量的可见性判定(一条查询,不加载 agent 视图),供长连接(SSE)建立时与定期复核用:
|
|
205
|
-
* 会话属于该组织且归 viewer 所有、viewer 账号仍为 active、agent 未删除且对 viewer 仍可见
|
|
206
|
-
* (`visibleTo` 已含「组织未删除、viewer 仍是成员」)。
|
|
207
|
-
*/
|
|
209
|
+
/** The stream's visibility check ({@link ConversationAccess.isAccessible}). */
|
|
208
210
|
isAccessible(orgId: string, conversationId: string, viewerAccountId: string): Promise<boolean>;
|
|
209
211
|
/**
|
|
210
212
|
* 我的会话,最近更新的在前;只含 agent 仍可用的会话。`after` 为上一页最后一个会话的 id,
|
|
@@ -271,6 +273,8 @@ export declare class ConversationsService {
|
|
|
271
273
|
* `text` 为空时(只发附件,HTTP 层保证此时有 `files` 且没有 `@` 资源)不写文本块。
|
|
272
274
|
*/
|
|
273
275
|
postUserMessage(orgId: string, conversationId: string, accountId: string, input: UserMessageInput): Promise<ConversationEvent>;
|
|
276
|
+
/** A message with files or a model switch: binds the files and writes it in one transaction. */
|
|
277
|
+
private postIn;
|
|
274
278
|
/**
|
|
275
279
|
* The selection a message switches to, or null when it changes nothing. A model equal to the
|
|
276
280
|
* agent's means "back to the agent's model" (null); a model change without `effort` resets the
|
|
@@ -302,15 +306,13 @@ export declare class ConversationsService {
|
|
|
302
306
|
* `skill`. The queue stores the result and sends it unchanged later.
|
|
303
307
|
*/
|
|
304
308
|
prepareQueuedSkill(orgId: string, conv: ConversationView, accountId: string, input: Pick<UserMessageInput, "skill" | "text">): Promise<RenderedInvocation | undefined>;
|
|
305
|
-
/** `files` need the attachments service (shared with the queue). */
|
|
306
|
-
checkFilesSupported(input: Pick<UserMessageInput, "files">): void;
|
|
307
309
|
/**
|
|
308
310
|
* Reads the `@` resources with the sender's credentials (nothing when there are none). Shared
|
|
309
311
|
* with the queue, which reads them when a message is queued (decision 15).
|
|
310
312
|
*/
|
|
311
313
|
resolveExtra(orgId: string, accountId: string, input: Pick<UserMessageInput, "attachments">): Promise<ResolvedExtra>;
|
|
312
314
|
/** Binds uploaded files inside the message's (or queue item's) transaction; none → no blocks. */
|
|
313
|
-
bindIn(
|
|
315
|
+
bindIn(orgId: string, conversationId: string, accountId: string, files: readonly string[]): Promise<LogContentBlock[]>;
|
|
314
316
|
private userMessage;
|
|
315
317
|
/**
|
|
316
318
|
* 中止会话当前的运行(queued / running / waiting):返回 runId;没有 → `run.not_active`。
|
|
@@ -1,14 +1,32 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
1
10
|
import { randomUUID } from "node:crypto";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
2
12
|
import { sql } from "kysely";
|
|
3
|
-
import { visibleTo } from "../agents/
|
|
13
|
+
import { AgentLookup, visibleTo } from "../agents/agent-lookup.js";
|
|
4
14
|
import { ApiError } from "../errors.js";
|
|
5
|
-
import {
|
|
15
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
16
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
17
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
18
|
+
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
19
|
+
import { ProviderRegistry } from "../runtime/providers.js";
|
|
20
|
+
import { RunControl as RunControlService } from "../runtime/run-control.js";
|
|
21
|
+
import { SkillInvoker } from "../skills/invoke.js";
|
|
22
|
+
import { ConnectorContent } from "../tools/connector-content.js";
|
|
23
|
+
import { ConversationAccess, parentReachable } from "./access.js";
|
|
24
|
+
import { AttachmentsService } from "./attachments.service.js";
|
|
25
|
+
import { EventLog } from "./event-log.js";
|
|
26
|
+
import { userMessageIdemKey } from "./idem-keys.js";
|
|
27
|
+
import { NO_SELECTION, planSelection, readSelection } from "./selection.js";
|
|
6
28
|
const notFound = () => new ApiError("conversation.not_found", "Conversation not found");
|
|
7
|
-
|
|
8
|
-
* 用户消息的幂等键:客户端的 `clientMessageId` 加前缀,与运行流水线自用的幂等键分开,
|
|
9
|
-
* 避免客户端恰好选中内部键而命中别的事件。
|
|
10
|
-
*/
|
|
11
|
-
export const userMessageIdemKey = (clientMessageId) => `msg:${clientMessageId}`;
|
|
29
|
+
export { userMessageIdemKey } from "./idem-keys.js";
|
|
12
30
|
const COLUMNS = [
|
|
13
31
|
"id",
|
|
14
32
|
"org_id",
|
|
@@ -41,25 +59,6 @@ function toView(r) {
|
|
|
41
59
|
}
|
|
42
60
|
/** The longest conversation title (characters, after trimming). */
|
|
43
61
|
export const CONVERSATION_TITLE_MAX_CHARS = 120;
|
|
44
|
-
/**
|
|
45
|
-
* A sub-agent's conversation is reached through its parent (sub-agents spec §6.1, review m6, the
|
|
46
|
-
* same rule as its trajectory): the parent is a chat conversation of the same owner whose agent is
|
|
47
|
-
* not deleted and still visible to the viewer. Any other kind passes. The child's own `agent_id`
|
|
48
|
-
* (the dispatched agent for an org agent, §5.5) is checked on top by the callers.
|
|
49
|
-
*/
|
|
50
|
-
const parentReachable = (viewerAccountId) => (eb) => eb.or([
|
|
51
|
-
eb("conversations.kind", "<>", "subagent"),
|
|
52
|
-
eb.exists(eb
|
|
53
|
-
.selectFrom("conversations as p")
|
|
54
|
-
.innerJoin("agents", "agents.id", "p.agent_id")
|
|
55
|
-
.select(sql `1`.as("one"))
|
|
56
|
-
.whereRef("p.id", "=", "conversations.parent_conversation_id")
|
|
57
|
-
.whereRef("p.org_id", "=", "conversations.org_id")
|
|
58
|
-
.where("p.account_id", "=", viewerAccountId)
|
|
59
|
-
.where("p.kind", "=", "chat")
|
|
60
|
-
.where("agents.deleted_at", "is", null)
|
|
61
|
-
.where(visibleTo(viewerAccountId))),
|
|
62
|
-
]);
|
|
63
62
|
/** The sums of the `usage` events matching `where` (over `conversation_events e`), one row. */
|
|
64
63
|
const usageSums = (where) => sql `
|
|
65
64
|
SELECT
|
|
@@ -80,41 +79,49 @@ const toUsage = (r) => ({
|
|
|
80
79
|
* 会话:只有所有者可见;每次访问都实时复核 agent 对所有者仍可用(spec 3.6 R5),
|
|
81
80
|
* 不可用时会话也按不存在处理(`conversation.not_found`)。
|
|
82
81
|
*/
|
|
83
|
-
|
|
82
|
+
let ConversationsService = class ConversationsService {
|
|
84
83
|
db;
|
|
85
84
|
eventLog;
|
|
86
85
|
agents;
|
|
86
|
+
access;
|
|
87
87
|
runs;
|
|
88
|
+
providers;
|
|
88
89
|
log;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
models;
|
|
90
|
+
content;
|
|
91
|
+
attachments;
|
|
92
92
|
invoker;
|
|
93
|
-
|
|
93
|
+
txHost;
|
|
94
|
+
constructor(db, eventLog, agents, access,
|
|
95
|
+
/** Starts and stops the conversation's runs. */
|
|
96
|
+
runs,
|
|
94
97
|
/** Resolves a switched-to model and its declared parameters (UI refresh B). */
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
|
|
98
|
+
providers, log,
|
|
99
|
+
/** Reads `@` resources with the sender's credentials. */
|
|
100
|
+
content,
|
|
101
|
+
/** Binds uploaded files to the conversation in the message's transaction. */
|
|
102
|
+
attachments,
|
|
103
|
+
/** Renders a person's skill invocation (phase D). */
|
|
104
|
+
invoker, txHost) {
|
|
98
105
|
this.db = db;
|
|
99
106
|
this.eventLog = eventLog;
|
|
100
107
|
this.agents = agents;
|
|
108
|
+
this.access = access;
|
|
101
109
|
this.runs = runs;
|
|
110
|
+
this.providers = providers;
|
|
102
111
|
this.log = log;
|
|
103
|
-
this.
|
|
104
|
-
this.
|
|
105
|
-
this.models = models;
|
|
112
|
+
this.content = content;
|
|
113
|
+
this.attachments = attachments;
|
|
106
114
|
this.invoker = invoker;
|
|
115
|
+
this.txHost = txHost;
|
|
107
116
|
}
|
|
108
117
|
/**
|
|
109
118
|
* 不阻塞地调用一次 `ensureRun`(打开 SSE、读事件时):它幂等,并顺带清理孤儿运行,
|
|
110
119
|
* 会话不会因为某次运行结束后的投递失败而永远停在「运行中」。失败只记日志。
|
|
111
120
|
*/
|
|
112
121
|
kickRun(conversationId) {
|
|
113
|
-
if (!this.runs)
|
|
114
|
-
return;
|
|
115
122
|
this.runs
|
|
116
123
|
.ensureRun(conversationId)
|
|
117
|
-
.catch((err) => this.log
|
|
124
|
+
.catch((err) => this.log.warn("ensureRun on conversation open failed", { conversationId, err }));
|
|
118
125
|
}
|
|
119
126
|
/** 新建会话;agent 对该账号不可用 → `agent.not_found`。 */
|
|
120
127
|
async create(orgId, accountId, agentId) {
|
|
@@ -138,33 +145,11 @@ export class ConversationsService {
|
|
|
138
145
|
const prior = await this.findCreated(orgId, accountId, agentId, input.clientMessageId);
|
|
139
146
|
if (prior)
|
|
140
147
|
return prior;
|
|
141
|
-
this.checkFilesSupported(input);
|
|
142
148
|
const next = await this.planSwitch(agent.definition, NO_SELECTION, input);
|
|
143
149
|
const extra = await this.resolveExtra(orgId, accountId, input);
|
|
144
150
|
const invoked = await this.prepareSkill(orgId, agentId, undefined, agent.definition, input);
|
|
145
151
|
const id = randomUUID();
|
|
146
|
-
const written = await this.
|
|
147
|
-
const row = await t
|
|
148
|
-
.insertInto("conversations")
|
|
149
|
-
.values({
|
|
150
|
-
id,
|
|
151
|
-
org_id: orgId,
|
|
152
|
-
agent_id: agentId,
|
|
153
|
-
account_id: accountId,
|
|
154
|
-
create_request_id: input.clientMessageId,
|
|
155
|
-
})
|
|
156
|
-
.onConflict((oc) => oc
|
|
157
|
-
.columns(["org_id", "account_id", "create_request_id"])
|
|
158
|
-
.where("create_request_id", "is not", null)
|
|
159
|
-
.doNothing())
|
|
160
|
-
.returning("id")
|
|
161
|
-
.executeTakeFirst();
|
|
162
|
-
// a concurrent retry committed first: answer with its conversation below
|
|
163
|
-
if (!row)
|
|
164
|
-
return undefined;
|
|
165
|
-
const blocks = await this.bindIn(t, orgId, id, accountId, input.files ?? []);
|
|
166
|
-
return this.writeMessage(t, id, accountId, input, next, extra, blocks, invoked);
|
|
167
|
-
});
|
|
152
|
+
const written = await this.createIn(id, orgId, accountId, agentId, input, next, extra, invoked);
|
|
168
153
|
if (!written) {
|
|
169
154
|
const raced = await this.findCreated(orgId, accountId, agentId, input.clientMessageId);
|
|
170
155
|
if (!raced)
|
|
@@ -172,9 +157,33 @@ export class ConversationsService {
|
|
|
172
157
|
return raced;
|
|
173
158
|
}
|
|
174
159
|
await this.eventLog.notify(id, written.seq);
|
|
175
|
-
await this.runs
|
|
160
|
+
await this.runs.ensureRun(id);
|
|
176
161
|
return { conversation: await this.rowView(id), event: written, created: true };
|
|
177
162
|
}
|
|
163
|
+
/** The conversation row and its first message (undefined: a concurrent retry committed first). */
|
|
164
|
+
// its own transaction: the caller notifies and publishes after the commit
|
|
165
|
+
async createIn(id, orgId, accountId, agentId, input, next, extra, invoked) {
|
|
166
|
+
const row = await this.db
|
|
167
|
+
.insertInto("conversations")
|
|
168
|
+
.values({
|
|
169
|
+
id,
|
|
170
|
+
org_id: orgId,
|
|
171
|
+
agent_id: agentId,
|
|
172
|
+
account_id: accountId,
|
|
173
|
+
create_request_id: input.clientMessageId,
|
|
174
|
+
})
|
|
175
|
+
.onConflict((oc) => oc
|
|
176
|
+
.columns(["org_id", "account_id", "create_request_id"])
|
|
177
|
+
.where("create_request_id", "is not", null)
|
|
178
|
+
.doNothing())
|
|
179
|
+
.returning("id")
|
|
180
|
+
.executeTakeFirst();
|
|
181
|
+
// a concurrent retry committed first: answer with its conversation below
|
|
182
|
+
if (!row)
|
|
183
|
+
return undefined;
|
|
184
|
+
const blocks = await this.bindIn(orgId, id, accountId, input.files ?? []);
|
|
185
|
+
return this.writeMessage(id, accountId, input, next, extra, blocks, invoked);
|
|
186
|
+
}
|
|
178
187
|
/**
|
|
179
188
|
* The conversation (and its first event) an earlier first send with this id created. The id used
|
|
180
189
|
* for another agent's conversation → `conflict` (the caller only checked access to `agentId`, so
|
|
@@ -197,7 +206,7 @@ export class ConversationsService {
|
|
|
197
206
|
const event = await this.eventLog.findByIdem(row.id, userMessageIdemKey(clientMessageId));
|
|
198
207
|
if (!event)
|
|
199
208
|
return null;
|
|
200
|
-
await this.runs
|
|
209
|
+
await this.runs.ensureRun(row.id);
|
|
201
210
|
return { conversation: toView(row), event, created: false };
|
|
202
211
|
}
|
|
203
212
|
async rowView(id) {
|
|
@@ -263,35 +272,9 @@ export class ConversationsService {
|
|
|
263
272
|
}
|
|
264
273
|
return row;
|
|
265
274
|
}
|
|
266
|
-
/**
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
* (`visibleTo` 已含「组织未删除、viewer 仍是成员」)。
|
|
270
|
-
*/
|
|
271
|
-
async isAccessible(orgId, conversationId, viewerAccountId) {
|
|
272
|
-
const row = await this.db
|
|
273
|
-
.selectFrom("conversations")
|
|
274
|
-
.select("conversations.id")
|
|
275
|
-
.where("conversations.id", "=", conversationId)
|
|
276
|
-
.where("conversations.org_id", "=", orgId)
|
|
277
|
-
.where("conversations.account_id", "=", viewerAccountId)
|
|
278
|
-
.where("conversations.kind", "in", ["chat", "subagent"])
|
|
279
|
-
.where(parentReachable(viewerAccountId))
|
|
280
|
-
.where((eb) => eb.and([
|
|
281
|
-
eb.exists(eb
|
|
282
|
-
.selectFrom("accounts")
|
|
283
|
-
.select(sql `1`.as("one"))
|
|
284
|
-
.where("accounts.id", "=", viewerAccountId)
|
|
285
|
-
.where("accounts.status", "=", "active")),
|
|
286
|
-
eb.exists(eb
|
|
287
|
-
.selectFrom("agents")
|
|
288
|
-
.select(sql `1`.as("one"))
|
|
289
|
-
.whereRef("agents.id", "=", "conversations.agent_id")
|
|
290
|
-
.where("agents.deleted_at", "is", null)
|
|
291
|
-
.where(visibleTo(viewerAccountId))),
|
|
292
|
-
]))
|
|
293
|
-
.executeTakeFirst();
|
|
294
|
-
return row !== undefined;
|
|
275
|
+
/** The stream's visibility check ({@link ConversationAccess.isAccessible}). */
|
|
276
|
+
isAccessible(orgId, conversationId, viewerAccountId) {
|
|
277
|
+
return this.access.isAccessible(orgId, conversationId, viewerAccountId);
|
|
295
278
|
}
|
|
296
279
|
/**
|
|
297
280
|
* 我的会话,最近更新的在前;只含 agent 仍可用的会话。`after` 为上一页最后一个会话的 id,
|
|
@@ -373,7 +356,7 @@ export class ConversationsService {
|
|
|
373
356
|
LIMIT ${opts.perGroup + 1}
|
|
374
357
|
) cs
|
|
375
358
|
ORDER BY page.latest_at DESC, page.agent_id DESC, cs.updated_at DESC, cs.id DESC
|
|
376
|
-
`.execute(this.db);
|
|
359
|
+
`.execute(this.db.db);
|
|
377
360
|
const groups = [];
|
|
378
361
|
let current;
|
|
379
362
|
for (const r of rows) {
|
|
@@ -459,7 +442,7 @@ export class ConversationsService {
|
|
|
459
442
|
CROSS JOIN LATERAL (${usageSums(sql `e.conversation_id = c.id`)}) u
|
|
460
443
|
LEFT JOIN described d ON d.id = c.id
|
|
461
444
|
ORDER BY c.created_at DESC, c.id DESC
|
|
462
|
-
`.execute(this.db);
|
|
445
|
+
`.execute(this.db.db);
|
|
463
446
|
const subagents = rows.slice(0, opts.limit).map((r) => ({
|
|
464
447
|
id: r.id,
|
|
465
448
|
agentType: r.subagent_type ?? "",
|
|
@@ -487,7 +470,7 @@ export class ConversationsService {
|
|
|
487
470
|
UNION ALL
|
|
488
471
|
SELECT c.id FROM capybara.conversations c
|
|
489
472
|
WHERE c.parent_conversation_id = ${conversationId} AND c.kind = 'subagent'
|
|
490
|
-
)`)}`.execute(this.db);
|
|
473
|
+
)`)}`.execute(this.db.db);
|
|
491
474
|
const row = rows[0];
|
|
492
475
|
return row
|
|
493
476
|
? toUsage(row)
|
|
@@ -529,13 +512,12 @@ export class ConversationsService {
|
|
|
529
512
|
const conv = await this.writable(orgId, conversationId, accountId);
|
|
530
513
|
const refs = input.attachments ?? [];
|
|
531
514
|
const files = input.files ?? [];
|
|
532
|
-
this.checkFilesSupported(input);
|
|
533
515
|
// A retry returns the written event (no resource read, no file check, no skill resolution)
|
|
534
516
|
if ((refs.length > 0 || files.length > 0 || input.skill !== undefined) &&
|
|
535
517
|
input.clientMessageId !== undefined) {
|
|
536
518
|
const existing = await this.eventLog.findByIdem(conversationId, userMessageIdemKey(input.clientMessageId));
|
|
537
519
|
if (existing) {
|
|
538
|
-
await this.runs
|
|
520
|
+
await this.runs.ensureRun(conversationId);
|
|
539
521
|
return existing;
|
|
540
522
|
}
|
|
541
523
|
}
|
|
@@ -552,10 +534,7 @@ export class ConversationsService {
|
|
|
552
534
|
: await this.prepareSkill(orgId, conv.agentId, conversationId, agent, input);
|
|
553
535
|
let event;
|
|
554
536
|
if (files.length > 0 || next !== null) {
|
|
555
|
-
event = await this.
|
|
556
|
-
const blocks = await this.bindIn(t, orgId, conversationId, accountId, files);
|
|
557
|
-
return this.writeMessage(t, conversationId, accountId, input, next, extra, blocks, invoked);
|
|
558
|
-
});
|
|
537
|
+
event = await this.postIn(orgId, conversationId, accountId, input, next, extra, invoked);
|
|
559
538
|
await this.eventLog.notify(conversationId, event.seq);
|
|
560
539
|
if (next !== null)
|
|
561
540
|
await this.eventLog.publishChanged(conversationId, "selection");
|
|
@@ -565,9 +544,15 @@ export class ConversationsService {
|
|
|
565
544
|
this.userMessage(accountId, input, extra, [], invoked),
|
|
566
545
|
]);
|
|
567
546
|
}
|
|
568
|
-
await this.runs
|
|
547
|
+
await this.runs.ensureRun(conversationId);
|
|
569
548
|
return event;
|
|
570
549
|
}
|
|
550
|
+
/** A message with files or a model switch: binds the files and writes it in one transaction. */
|
|
551
|
+
// its own transaction: the caller notifies and publishes after the commit
|
|
552
|
+
async postIn(orgId, conversationId, accountId, input, next, extra, invoked) {
|
|
553
|
+
const blocks = await this.bindIn(orgId, conversationId, accountId, input.files ?? []);
|
|
554
|
+
return this.writeMessage(conversationId, accountId, input, next, extra, blocks, invoked);
|
|
555
|
+
}
|
|
571
556
|
/**
|
|
572
557
|
* The selection a message switches to, or null when it changes nothing. A model equal to the
|
|
573
558
|
* agent's means "back to the agent's model" (null); a model change without `effort` resets the
|
|
@@ -581,12 +566,7 @@ export class ConversationsService {
|
|
|
581
566
|
if (next === null)
|
|
582
567
|
return null;
|
|
583
568
|
const { model, effort } = next;
|
|
584
|
-
|
|
585
|
-
throw new ApiError("validation_failed", "Request validation failed", [
|
|
586
|
-
{ path: "model", message: "Model switching is not supported" },
|
|
587
|
-
]);
|
|
588
|
-
}
|
|
589
|
-
const { info } = await this.models.resolve(model ?? agent.model);
|
|
569
|
+
const { info } = await this.providers.resolve(model ?? agent.model);
|
|
590
570
|
if (effort !== null) {
|
|
591
571
|
const knob = info.parameters.find((p) => p.key === "effort");
|
|
592
572
|
const values = knob?.schema?.enum ?? [];
|
|
@@ -613,7 +593,7 @@ export class ConversationsService {
|
|
|
613
593
|
* Writes the message (preceded by its `model_switched` when it switches) inside `t` and updates
|
|
614
594
|
* `conversations.selection`; returns the `user_message` event. The caller notifies after commit.
|
|
615
595
|
*/
|
|
616
|
-
async writeMessage(
|
|
596
|
+
async writeMessage(conversationId, accountId, input, next, extra, blocks, invoked) {
|
|
617
597
|
const events = [];
|
|
618
598
|
if (next !== null) {
|
|
619
599
|
events.push({
|
|
@@ -625,8 +605,9 @@ export class ConversationsService {
|
|
|
625
605
|
});
|
|
626
606
|
}
|
|
627
607
|
events.push(this.userMessage(accountId, input, extra, blocks, invoked));
|
|
628
|
-
const written = await this.eventLog.
|
|
608
|
+
const written = await this.eventLog.appendIn(conversationId, events);
|
|
629
609
|
if (next !== null) {
|
|
610
|
+
const t = this.db.db;
|
|
630
611
|
// the cache follows the log (a retried message's switch may be an old, deduped event that a
|
|
631
612
|
// later switch already replaced), read under the row lock append took
|
|
632
613
|
await t
|
|
@@ -644,11 +625,6 @@ export class ConversationsService {
|
|
|
644
625
|
async prepareSkill(orgId, agentId, conversationId, agent, input) {
|
|
645
626
|
if (input.skill === undefined)
|
|
646
627
|
return undefined;
|
|
647
|
-
if (!this.invoker) {
|
|
648
|
-
throw new ApiError("validation_failed", "Request validation failed", [
|
|
649
|
-
{ path: "skill", message: "Skill invocation is not supported" },
|
|
650
|
-
]);
|
|
651
|
-
}
|
|
652
628
|
return this.invoker.prepare({
|
|
653
629
|
orgId,
|
|
654
630
|
agentId,
|
|
@@ -669,14 +645,6 @@ export class ConversationsService {
|
|
|
669
645
|
const agent = await this.agents.get(orgId, conv.agentId, accountId);
|
|
670
646
|
return this.prepareSkill(orgId, conv.agentId, conv.id, agent.definition, input);
|
|
671
647
|
}
|
|
672
|
-
/** `files` need the attachments service (shared with the queue). */
|
|
673
|
-
checkFilesSupported(input) {
|
|
674
|
-
if ((input.files?.length ?? 0) > 0 && !this.bindFiles) {
|
|
675
|
-
throw new ApiError("validation_failed", "Request validation failed", [
|
|
676
|
-
{ path: "files", message: "Files are not supported" },
|
|
677
|
-
]);
|
|
678
|
-
}
|
|
679
|
-
}
|
|
680
648
|
/**
|
|
681
649
|
* Reads the `@` resources with the sender's credentials (nothing when there are none). Shared
|
|
682
650
|
* with the queue, which reads them when a message is queued (decision 15).
|
|
@@ -685,18 +653,13 @@ export class ConversationsService {
|
|
|
685
653
|
const refs = input.attachments ?? [];
|
|
686
654
|
if (refs.length === 0)
|
|
687
655
|
return { blocks: [], attachments: [] };
|
|
688
|
-
|
|
689
|
-
throw new ApiError("validation_failed", "Request validation failed", [
|
|
690
|
-
{ path: "attachments", message: "Attachments are not supported" },
|
|
691
|
-
]);
|
|
692
|
-
}
|
|
693
|
-
return this.resolveAttachments(orgId, accountId, refs);
|
|
656
|
+
return this.content.resolveAttachments(orgId, accountId, refs);
|
|
694
657
|
}
|
|
695
658
|
/** Binds uploaded files inside the message's (or queue item's) transaction; none → no blocks. */
|
|
696
|
-
async bindIn(
|
|
697
|
-
if (files.length === 0
|
|
659
|
+
async bindIn(orgId, conversationId, accountId, files) {
|
|
660
|
+
if (files.length === 0)
|
|
698
661
|
return [];
|
|
699
|
-
return this.
|
|
662
|
+
return this.attachments.bindForMessage(orgId, conversationId, accountId, files);
|
|
700
663
|
}
|
|
701
664
|
userMessage(accountId, input, extra, fileBlocks, invoked) {
|
|
702
665
|
// a skill invocation's rendered text replaces the typed arguments as content[0]
|
|
@@ -735,20 +698,47 @@ export class ConversationsService {
|
|
|
735
698
|
.where("status", "in", ["queued", "running", "waiting"])
|
|
736
699
|
.orderBy("created_at", "desc")
|
|
737
700
|
.executeTakeFirst();
|
|
738
|
-
if (!run
|
|
701
|
+
if (!run)
|
|
739
702
|
throw new ApiError("run.not_active", "No active run to abort");
|
|
703
|
+
const runs = this.runs;
|
|
740
704
|
// 等待中:直接结束;没成功(刚被续跑、已回到 queued)则按下面的常规路径中止。
|
|
741
|
-
if (run.status === "waiting" &&
|
|
742
|
-
(await this.runs.abortWaiting(conversationId, run.id, accountId))) {
|
|
705
|
+
if (run.status === "waiting" && (await runs.abortWaiting(conversationId, run.id, accountId))) {
|
|
743
706
|
this.kickRun(conversationId);
|
|
744
707
|
return run.id;
|
|
745
708
|
}
|
|
746
709
|
// 孤儿运行没有 worker 在听中止广播:直接写成 aborted,之后再看有没有等待中的消息要起新一轮。
|
|
747
|
-
if (await
|
|
710
|
+
if (await runs.abortIfOrphaned(conversationId, run.id, accountId)) {
|
|
748
711
|
this.kickRun(conversationId);
|
|
749
712
|
return run.id;
|
|
750
713
|
}
|
|
751
|
-
await
|
|
714
|
+
await runs.requestAbort(run.id, accountId);
|
|
752
715
|
return run.id;
|
|
753
716
|
}
|
|
754
|
-
}
|
|
717
|
+
};
|
|
718
|
+
__decorate([
|
|
719
|
+
Transactional({ propagation: "requires_new" })
|
|
720
|
+
], ConversationsService.prototype, "createIn", null);
|
|
721
|
+
__decorate([
|
|
722
|
+
Transactional({ propagation: "requires_new" })
|
|
723
|
+
], ConversationsService.prototype, "postIn", null);
|
|
724
|
+
__decorate([
|
|
725
|
+
Transactional({ propagation: "mandatory" })
|
|
726
|
+
], ConversationsService.prototype, "writeMessage", null);
|
|
727
|
+
__decorate([
|
|
728
|
+
Transactional({ propagation: "mandatory" })
|
|
729
|
+
], ConversationsService.prototype, "bindIn", null);
|
|
730
|
+
ConversationsService = __decorate([
|
|
731
|
+
Injectable(),
|
|
732
|
+
__param(0, Inject(KernelDb)),
|
|
733
|
+
__param(1, Inject(EventLog)),
|
|
734
|
+
__param(2, Inject(AgentLookup)),
|
|
735
|
+
__param(3, Inject(ConversationAccess)),
|
|
736
|
+
__param(4, Inject(RunControlService)),
|
|
737
|
+
__param(5, Inject(ProviderRegistry)),
|
|
738
|
+
__param(6, Inject(KERNEL_LOGGER)),
|
|
739
|
+
__param(7, Inject(ConnectorContent)),
|
|
740
|
+
__param(8, Inject(AttachmentsService)),
|
|
741
|
+
__param(9, Inject(SkillInvoker)),
|
|
742
|
+
__param(10, Inject(TransactionHost))
|
|
743
|
+
], ConversationsService);
|
|
744
|
+
export { ConversationsService };
|