@capybara-hq/kernel 0.1.0-rc.1 → 0.1.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin.controller.d.ts +17 -17
- package/dist/admin/admin.controller.js +43 -26
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/extensions.controller.d.ts +14 -14
- package/dist/admin/extensions.controller.js +30 -17
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +8 -8
- package/dist/admin/setup.controller.js +27 -25
- package/dist/admin/setup.service.d.ts +19 -27
- package/dist/admin/setup.service.js +61 -61
- package/dist/agents/agent-lookup.d.ts +53 -0
- package/dist/agents/agent-lookup.js +187 -0
- package/dist/agents/agents.controller.d.ts +1 -1
- package/dist/agents/agents.controller.js +14 -8
- package/dist/agents/agents.module.d.ts +7 -0
- package/dist/agents/agents.module.js +41 -0
- package/dist/agents/agents.service.d.ts +39 -58
- package/dist/agents/agents.service.js +280 -335
- package/dist/agents/definition.d.ts +39 -8
- package/dist/agents/definition.js +201 -17
- package/dist/agents/models.controller.d.ts +1 -1
- package/dist/agents/models.controller.js +2 -2
- package/dist/agents/templates.controller.d.ts +1 -1
- package/dist/agents/templates.controller.js +2 -2
- package/dist/agents/templates.d.ts +6 -8
- package/dist/agents/templates.js +39 -8
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -0
- package/dist/catalog/admin-catalog.controller.d.ts +3 -3
- package/dist/catalog/admin-catalog.controller.js +27 -13
- package/dist/catalog/catalog-content.d.ts +185 -0
- package/dist/catalog/catalog-content.js +326 -0
- package/dist/catalog/catalog-items.d.ts +186 -0
- package/dist/catalog/catalog-items.js +410 -0
- package/dist/catalog/catalog.module.d.ts +14 -0
- package/dist/catalog/catalog.module.js +71 -0
- package/dist/catalog/catalog.service.d.ts +34 -188
- package/dist/catalog/catalog.service.js +155 -489
- package/dist/catalog/claude/agents.js +13 -10
- package/dist/catalog/cli.d.ts +3 -2
- package/dist/catalog/cli.js +13 -31
- package/dist/catalog/job-ids.d.ts +15 -0
- package/dist/catalog/job-ids.js +15 -0
- package/dist/catalog/jobs.d.ts +27 -0
- package/dist/catalog/jobs.js +70 -0
- package/dist/catalog/locks.d.ts +24 -0
- package/dist/catalog/locks.js +63 -0
- package/dist/catalog/marketplaces.controller.d.ts +4 -4
- package/dist/catalog/marketplaces.controller.js +22 -11
- package/dist/catalog/marketplaces.service.d.ts +31 -14
- package/dist/catalog/marketplaces.service.js +330 -256
- package/dist/catalog/org-catalog.controller.d.ts +4 -3
- package/dist/catalog/org-catalog.controller.js +29 -14
- package/dist/catalog/org-catalog.service.d.ts +32 -198
- package/dist/catalog/org-catalog.service.js +159 -400
- package/dist/catalog/plugin-import.d.ts +73 -34
- package/dist/catalog/plugin-import.js +356 -217
- package/dist/catalog/plugin-install.d.ts +83 -41
- package/dist/catalog/plugin-install.js +421 -269
- package/dist/catalog/plugin-upgrade.d.ts +59 -4
- package/dist/catalog/plugin-upgrade.js +407 -282
- package/dist/catalog/requests.service.d.ts +27 -15
- package/dist/catalog/requests.service.js +201 -145
- package/dist/catalog/upgrade-targets.d.ts +4 -7
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +1 -1
- package/dist/channels/cards.d.ts +10 -4
- package/dist/channels/cards.js +16 -8
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +128 -0
- package/dist/channels/connections.controller.d.ts +1 -1
- package/dist/channels/connections.controller.js +11 -6
- package/dist/channels/connections.service.d.ts +43 -21
- package/dist/channels/connections.service.js +236 -131
- package/dist/channels/inbound.d.ts +34 -38
- package/dist/channels/inbound.js +107 -41
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +60 -82
- package/dist/channels/outbound.js +165 -194
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +29 -8
- package/dist/channels/threads.js +71 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +1 -0
- package/dist/config/schema.js +12 -6
- package/dist/conversations/access.d.ts +29 -0
- package/dist/conversations/access.js +86 -0
- package/dist/conversations/artifacts.d.ts +11 -11
- package/dist/conversations/artifacts.js +36 -10
- package/dist/conversations/attachments.controller.d.ts +1 -1
- package/dist/conversations/attachments.controller.js +8 -6
- package/dist/conversations/attachments.module.d.ts +7 -0
- package/dist/conversations/attachments.module.js +25 -0
- package/dist/conversations/attachments.service.d.ts +30 -22
- package/dist/conversations/attachments.service.js +119 -46
- package/dist/conversations/conversations.controller.d.ts +8 -7
- package/dist/conversations/conversations.controller.js +59 -29
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +69 -0
- package/dist/conversations/conversations.service.d.ts +40 -38
- package/dist/conversations/conversations.service.js +130 -140
- package/dist/conversations/event-log.d.ts +39 -18
- package/dist/conversations/event-log.js +93 -27
- package/dist/conversations/events.d.ts +23 -3
- package/dist/conversations/events.js +26 -14
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +48 -56
- package/dist/conversations/queue.js +13 -289
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +343 -0
- package/dist/conversations/sandbox-status.d.ts +13 -10
- package/dist/conversations/sandbox-status.js +36 -8
- package/dist/conversations/titles.d.ts +71 -24
- package/dist/conversations/titles.js +159 -63
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +6 -0
- package/dist/ctx/create-ctx.js +7 -9
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +4 -4
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +1 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +1 -0
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/recorded-tools.d.ts +27 -1
- package/dist/evals/recorded-tools.js +85 -10
- package/dist/evals/run-replay.d.ts +61 -8
- package/dist/evals/run-replay.js +159 -85
- package/dist/evals/runs.controller.d.ts +1 -1
- package/dist/evals/runs.controller.js +17 -8
- package/dist/evals/runs.service.d.ts +23 -45
- package/dist/evals/runs.service.js +245 -234
- package/dist/evals/sets.controller.d.ts +1 -1
- package/dist/evals/sets.controller.js +17 -8
- package/dist/evals/sets.service.d.ts +22 -6
- package/dist/evals/sets.service.js +248 -194
- package/dist/evals/snapshot.d.ts +2 -2
- package/dist/evals/step-replay.d.ts +2 -2
- package/dist/evals/step-replay.js +1 -1
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.d.ts +2 -2
- package/dist/evals/trajectory.service.d.ts +5 -4
- package/dist/evals/trajectory.service.js +30 -7
- package/dist/evals/worker.d.ts +44 -27
- package/dist/evals/worker.js +220 -121
- package/dist/extensions/admin-ops.d.ts +61 -33
- package/dist/extensions/admin-ops.js +248 -154
- package/dist/extensions/admin-view.d.ts +38 -27
- package/dist/extensions/admin-view.js +126 -55
- package/dist/extensions/approvals.d.ts +12 -8
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +111 -45
- package/dist/extensions/bootstrap.d.ts +58 -31
- package/dist/extensions/bootstrap.js +175 -121
- package/dist/extensions/cli.d.ts +20 -10
- package/dist/extensions/cli.js +41 -96
- package/dist/extensions/config-issues.d.ts +7 -0
- package/dist/extensions/config-issues.js +31 -0
- package/dist/extensions/deployment-config-store.d.ts +49 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +58 -67
- package/dist/extensions/deployment-config.js +202 -230
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +77 -0
- package/dist/extensions/hooks.d.ts +3 -2
- package/dist/extensions/hooks.js +1 -1
- package/dist/extensions/host.d.ts +72 -68
- package/dist/extensions/host.js +191 -152
- package/dist/extensions/installs.d.ts +49 -16
- package/dist/extensions/installs.js +128 -32
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +33 -0
- package/dist/extensions/locks.js +86 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.controller.d.ts +1 -1
- package/dist/extensions/org-config.controller.js +8 -5
- package/dist/extensions/org-config.d.ts +48 -46
- package/dist/extensions/org-config.js +284 -226
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +89 -4
- package/dist/extensions/sources.d.ts +12 -8
- package/dist/extensions/sources.js +34 -13
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +17 -9
- package/dist/files/previewers.d.ts +13 -18
- package/dist/files/previewers.js +83 -36
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +47 -355
- package/dist/http/app.d.ts +11 -15
- package/dist/http/app.js +17 -62
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/identity/accounts.d.ts +82 -29
- package/dist/identity/accounts.js +294 -175
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +7 -4
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +31 -25
- package/dist/identity/auth.guard.d.ts +3 -3
- package/dist/identity/auth.guard.js +6 -4
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/enterprise-admin.d.ts +18 -12
- package/dist/identity/enterprise-admin.js +67 -13
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +56 -0
- package/dist/identity/me.controller.d.ts +16 -15
- package/dist/identity/me.controller.js +37 -31
- package/dist/identity/sessions.d.ts +12 -10
- package/dist/identity/sessions.js +74 -42
- package/dist/identity/settings.d.ts +20 -14
- package/dist/identity/settings.js +86 -58
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/inbox/inbox.module.d.ts +3 -0
- package/dist/inbox/inbox.module.js +22 -0
- package/dist/inbox/inbox.service.d.ts +7 -9
- package/dist/inbox/inbox.service.js +32 -11
- package/dist/index.d.ts +16 -11
- package/dist/index.js +9 -6
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +165 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +126 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +90 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +96 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +86 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +16 -0
- package/dist/infra/logging/logging.module.js +34 -0
- package/dist/infra/queue/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +7 -0
- package/dist/infra/queue/redis-connection.js +18 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +87 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +31 -0
- package/dist/infra/throttler/named-throttlers.js +119 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +15 -0
- package/dist/infra/tokens.js +15 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -244
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +136 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +456 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-context.d.ts +2 -0
- package/dist/log-context.js +4 -0
- package/dist/models/models.module.d.ts +3 -0
- package/dist/models/models.module.js +24 -0
- package/dist/models/prices.d.ts +8 -2
- package/dist/models/prices.js +65 -37
- package/dist/models/purposes.controller.d.ts +1 -1
- package/dist/models/purposes.controller.js +5 -6
- package/dist/models/purposes.d.ts +35 -13
- package/dist/models/purposes.js +101 -51
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +61 -31
- package/dist/orgs/directory-sync.js +212 -125
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +54 -57
- package/dist/orgs/offboarding.js +161 -71
- package/dist/orgs/org-lock.d.ts +28 -19
- package/dist/orgs/org-lock.js +81 -35
- package/dist/orgs/org.guard.d.ts +1 -1
- package/dist/orgs/org.guard.js +2 -2
- package/dist/orgs/orgs.controller.d.ts +13 -13
- package/dist/orgs/orgs.controller.js +29 -17
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +68 -0
- package/dist/orgs/orgs.service.d.ts +30 -19
- package/dist/orgs/orgs.service.js +139 -86
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +16 -10
- package/dist/orgs/settings.service.js +77 -48
- package/dist/overrides.d.ts +56 -0
- package/dist/overrides.js +30 -0
- package/dist/roles/gateway-role.d.ts +43 -0
- package/dist/roles/gateway-role.js +98 -0
- package/dist/roles/gateway.module.d.ts +8 -0
- package/dist/roles/gateway.module.js +28 -0
- package/dist/roles/worker-role.d.ts +63 -0
- package/dist/roles/worker-role.js +144 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +90 -0
- package/dist/runtime/abort.js +19 -2
- package/dist/runtime/checkpointer.d.ts +8 -3
- package/dist/runtime/checkpointer.js +87 -55
- package/dist/runtime/context/build.d.ts +6 -6
- package/dist/runtime/context/build.js +18 -8
- package/dist/runtime/context/claude-tools.d.ts +2 -1
- package/dist/runtime/context/claude-tools.js +9 -10
- package/dist/runtime/context/legacy-text.d.ts +22 -0
- package/dist/runtime/context/legacy-text.js +37 -0
- package/dist/runtime/context/skills.d.ts +29 -11
- package/dist/runtime/context/skills.js +37 -30
- package/dist/runtime/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +3 -3
- package/dist/runtime/hook-calls.js +1 -6
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.js +1 -1
- package/dist/runtime/loop.d.ts +8 -1
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +45 -74
- package/dist/runtime/maintenance.js +139 -137
- package/dist/runtime/model-call.d.ts +7 -4
- package/dist/runtime/model-call.js +25 -58
- package/dist/runtime/providers.d.ts +17 -6
- package/dist/runtime/providers.js +66 -25
- package/dist/runtime/quota.d.ts +17 -3
- package/dist/runtime/quota.js +27 -2
- package/dist/runtime/retired-schedulers.d.ts +7 -0
- package/dist/runtime/retired-schedulers.js +31 -0
- package/dist/runtime/run-control.d.ts +33 -0
- package/dist/runtime/run-control.js +77 -0
- package/dist/runtime/run-finish.d.ts +27 -18
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +48 -0
- package/dist/runtime/run-jobs.js +95 -0
- package/dist/runtime/run-processors.d.ts +60 -0
- package/dist/runtime/run-processors.js +185 -0
- package/dist/runtime/run-queue.d.ts +32 -57
- package/dist/runtime/run-queue.js +291 -295
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +122 -76
- package/dist/runtime/run-worker.js +343 -229
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +112 -0
- package/dist/runtime/step-log.d.ts +40 -0
- package/dist/runtime/step-log.js +94 -0
- package/dist/runtime/stream.controller.d.ts +5 -8
- package/dist/runtime/stream.controller.js +14 -12
- package/dist/runtime/stream.d.ts +24 -6
- package/dist/runtime/stream.js +78 -7
- package/dist/runtime/subagents/child.d.ts +3 -44
- package/dist/runtime/subagents/child.js +0 -79
- package/dist/runtime/subagents/definition.d.ts +5 -10
- package/dist/runtime/subagents/definition.js +13 -14
- package/dist/runtime/subagents/dispatch.d.ts +89 -8
- package/dist/runtime/subagents/dispatch.js +137 -142
- package/dist/runtime/subagents/limits.d.ts +9 -4
- package/dist/runtime/subagents/limits.js +4 -2
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +3 -2
- package/dist/runtime/subagents/progress.d.ts +2 -2
- package/dist/runtime/subagents/roster.d.ts +4 -4
- package/dist/runtime/subagents/roster.js +2 -2
- package/dist/runtime/subagents/skill-fork.d.ts +8 -9
- package/dist/runtime/subagents/skill-fork.js +17 -6
- package/dist/runtime/subagents/subagents.service.d.ts +40 -0
- package/dist/runtime/subagents/subagents.service.js +101 -0
- package/dist/runtime/usage-report.d.ts +94 -52
- package/dist/runtime/usage-report.js +200 -100
- package/dist/runtime/waits.d.ts +127 -59
- package/dist/runtime/waits.js +433 -210
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +41 -0
- package/dist/sandbox/jobs.js +113 -0
- package/dist/sandbox/leases.d.ts +39 -31
- package/dist/sandbox/leases.js +117 -257
- package/dist/sandbox/providers.d.ts +19 -0
- package/dist/sandbox/providers.js +38 -0
- package/dist/sandbox/sandbox.module.d.ts +8 -0
- package/dist/sandbox/sandbox.module.js +30 -0
- package/dist/sandbox/sandbox.service.d.ts +24 -29
- package/dist/sandbox/sandbox.service.js +106 -75
- package/dist/skills/catalog.d.ts +37 -24
- package/dist/skills/catalog.js +100 -57
- package/dist/skills/changes.controller.d.ts +4 -4
- package/dist/skills/changes.controller.js +15 -9
- package/dist/skills/changes.service.d.ts +30 -20
- package/dist/skills/changes.service.js +425 -367
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +8 -5
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +17 -16
- package/dist/skills/invoke.js +53 -21
- package/dist/skills/skills.controller.d.ts +1 -1
- package/dist/skills/skills.controller.js +11 -6
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +30 -0
- package/dist/skills/skills.service.d.ts +47 -30
- package/dist/skills/skills.service.js +221 -158
- package/dist/storage/job-ids.d.ts +6 -0
- package/dist/storage/job-ids.js +6 -0
- package/dist/storage/purge.d.ts +22 -7
- package/dist/storage/purge.js +55 -3
- package/dist/storage/storage.module.d.ts +6 -0
- package/dist/storage/storage.module.js +23 -0
- package/dist/storage/storage.service.d.ts +18 -4
- package/dist/storage/storage.service.js +44 -3
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +12 -8
- package/dist/tools/approvals.service.d.ts +33 -25
- package/dist/tools/approvals.service.js +343 -259
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtin-names.d.ts +73 -0
- package/dist/tools/builtin-names.js +116 -0
- package/dist/tools/builtins/agent.d.ts +7 -7
- package/dist/tools/builtins/agent.js +7 -11
- package/dist/tools/builtins/ask-user.d.ts +3 -3
- package/dist/tools/builtins/ask-user.js +3 -3
- package/dist/tools/builtins/builtin-tools.d.ts +21 -0
- package/dist/tools/builtins/builtin-tools.js +80 -0
- package/dist/tools/builtins/read-tool-output.d.ts +3 -3
- package/dist/tools/builtins/read-tool-output.js +3 -3
- package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
- package/dist/tools/builtins/sandbox/bash.js +33 -30
- package/dist/tools/builtins/sandbox/common.d.ts +5 -4
- package/dist/tools/builtins/sandbox/common.js +2 -2
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +13 -13
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +42 -31
- package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
- package/dist/tools/builtins/sandbox/file-state.js +34 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob-match.js +1 -1
- package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob.js +6 -6
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +149 -32
- package/dist/tools/builtins/sandbox/index.d.ts +1 -1
- package/dist/tools/builtins/sandbox/index.js +1 -1
- package/dist/tools/builtins/sandbox/read.d.ts +2 -2
- package/dist/tools/builtins/sandbox/read.js +22 -15
- package/dist/tools/builtins/sandbox/write.d.ts +1 -1
- package/dist/tools/builtins/sandbox/write.js +38 -34
- package/dist/tools/builtins/skill-load.d.ts +6 -6
- package/dist/tools/builtins/skill-load.js +33 -17
- package/dist/tools/builtins/skill-write.d.ts +4 -4
- package/dist/tools/builtins/skill-write.js +10 -10
- package/dist/tools/builtins/tool-search.d.ts +13 -9
- package/dist/tools/builtins/tool-search.js +25 -14
- package/dist/tools/canonical-json.d.ts +6 -0
- package/dist/tools/canonical-json.js +16 -0
- package/dist/tools/connector-content.controller.d.ts +1 -1
- package/dist/tools/connector-content.controller.js +11 -6
- package/dist/tools/connector-content.d.ts +12 -15
- package/dist/tools/connector-content.js +53 -18
- package/dist/tools/connectors.controller.d.ts +1 -1
- package/dist/tools/connectors.controller.js +21 -10
- package/dist/tools/connectors.service.d.ts +31 -13
- package/dist/tools/connectors.service.js +438 -348
- package/dist/tools/credentials.d.ts +17 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/display-names.d.ts +9 -0
- package/dist/tools/display-names.js +24 -0
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +116 -84
- package/dist/tools/elicitation.js +1 -1
- package/dist/tools/info.d.ts +32 -13
- package/dist/tools/info.js +88 -39
- package/dist/tools/job-ids.d.ts +13 -0
- package/dist/tools/job-ids.js +15 -0
- package/dist/tools/jobs.d.ts +24 -0
- package/dist/tools/jobs.js +69 -0
- package/dist/tools/legacy-data.d.ts +34 -0
- package/dist/tools/legacy-data.js +76 -0
- package/dist/tools/legacy-keys.d.ts +51 -0
- package/dist/tools/legacy-keys.js +115 -0
- package/dist/tools/naming.d.ts +1 -5
- package/dist/tools/naming.js +1 -7
- package/dist/tools/oauth/flow-paths.d.ts +16 -0
- package/dist/tools/oauth/flow-paths.js +38 -0
- package/dist/tools/oauth/flow.d.ts +30 -30
- package/dist/tools/oauth/flow.js +109 -81
- package/dist/tools/oauth/oauth.controller.d.ts +3 -3
- package/dist/tools/oauth/oauth.controller.js +12 -9
- package/dist/tools/oauth/tokens.d.ts +11 -3
- package/dist/tools/oauth/tokens.js +15 -14
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +48 -4
- package/dist/tools/pipeline.d.ts +72 -50
- package/dist/tools/pipeline.js +239 -100
- package/dist/tools/policy.d.ts +3 -16
- package/dist/tools/policy.js +13 -19
- package/dist/tools/questions.controller.d.ts +2 -2
- package/dist/tools/questions.controller.js +9 -6
- package/dist/tools/questions.service.d.ts +26 -25
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +43 -38
- package/dist/tools/registry.js +100 -72
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +1 -1
- package/dist/tools/specs.d.ts +5 -4
- package/dist/tools/specs.js +3 -1
- package/dist/tools/tools.module.d.ts +10 -0
- package/dist/tools/tools.module.js +91 -0
- package/dist/ui/call-extension.d.ts +16 -0
- package/dist/ui/call-extension.js +38 -0
- package/dist/ui/embed-token.d.ts +9 -5
- package/dist/ui/embed-token.js +34 -6
- package/dist/ui/ui-stream.d.ts +22 -17
- package/dist/ui/ui-stream.js +72 -12
- package/dist/ui/ui.module.d.ts +7 -0
- package/dist/ui/ui.module.js +28 -0
- package/dist/ui/views.controller.d.ts +14 -12
- package/dist/ui/views.controller.js +32 -25
- package/dist/ui/views.d.ts +9 -57
- package/dist/ui/views.js +43 -45
- package/package.json +10 -3
- package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- package/dist/tools/builtins/sandbox/names.d.ts +0 -7
- package/dist/tools/builtins/sandbox/names.js +0 -20
- /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
- /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
|
@@ -1,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, ...).
|
|
@@ -116,7 +123,21 @@ export declare class EventLog {
|
|
|
116
123
|
latestOfType<T extends ConversationEventType>(conversationId: string, type: T): Promise<Extract<ConversationEvent, {
|
|
117
124
|
type: T;
|
|
118
125
|
}> | undefined>;
|
|
126
|
+
/**
|
|
127
|
+
* The file state (`tool_result.view.file`) the latest `Read` / `Write` / `Edit` result of this
|
|
128
|
+
* conversation recorded for `path` (a normalized sandbox path); null when none did. One index
|
|
129
|
+
* probe per call: the partial index `conversation_events_file_state_idx` of migration 0063
|
|
130
|
+
* (conversation_id, view.file.path, seq DESC; tool_result rows only) answers it, also for a path
|
|
131
|
+
* never read (the query's predicate must keep matching that index's expression).
|
|
132
|
+
*/
|
|
133
|
+
latestFileState(conversationId: string, path: string): Promise<{
|
|
134
|
+
size: number;
|
|
135
|
+
sha256: string;
|
|
136
|
+
} | null>;
|
|
119
137
|
private validate;
|
|
120
|
-
|
|
138
|
+
/** The append itself, in the context's transaction (both callers open or join one). */
|
|
139
|
+
private write;
|
|
140
|
+
}
|
|
141
|
+
/** The one {@link EventLog} (infra dependencies only, so every domain can import it). */
|
|
142
|
+
export declare class EventLogModule {
|
|
121
143
|
}
|
|
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` 条。 */
|
|
@@ -168,6 +191,25 @@ export class EventLog {
|
|
|
168
191
|
.executeTakeFirst();
|
|
169
192
|
return r && toEvent(r);
|
|
170
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* The file state (`tool_result.view.file`) the latest `Read` / `Write` / `Edit` result of this
|
|
196
|
+
* conversation recorded for `path` (a normalized sandbox path); null when none did. One index
|
|
197
|
+
* probe per call: the partial index `conversation_events_file_state_idx` of migration 0063
|
|
198
|
+
* (conversation_id, view.file.path, seq DESC; tool_result rows only) answers it, also for a path
|
|
199
|
+
* never read (the query's predicate must keep matching that index's expression).
|
|
200
|
+
*/
|
|
201
|
+
async latestFileState(conversationId, path) {
|
|
202
|
+
const r = await this.db
|
|
203
|
+
.selectFrom("conversation_events")
|
|
204
|
+
.select(sql `payload->'view'->'file'`.as("file"))
|
|
205
|
+
.where("conversation_id", "=", conversationId)
|
|
206
|
+
.where("type", "=", "tool_result")
|
|
207
|
+
.where(sql `payload->'view'->'file'->>'path' = ${path}`)
|
|
208
|
+
.orderBy("seq", "desc")
|
|
209
|
+
.limit(1)
|
|
210
|
+
.executeTakeFirst();
|
|
211
|
+
return r ? { size: r.file.size, sha256: r.file.sha256 } : null;
|
|
212
|
+
}
|
|
171
213
|
validate(e) {
|
|
172
214
|
const r = ConversationEventSchema.safeParse({ type: e.type, payload: e.payload });
|
|
173
215
|
if (!r.success) {
|
|
@@ -175,7 +217,9 @@ export class EventLog {
|
|
|
175
217
|
}
|
|
176
218
|
return r.data;
|
|
177
219
|
}
|
|
178
|
-
|
|
220
|
+
/** The append itself, in the context's transaction (both callers open or join one). */
|
|
221
|
+
async write(conversationId, events, bodies) {
|
|
222
|
+
const t = this.db;
|
|
179
223
|
// 先锁会话行:之后的幂等查询与 seq 分配都在这把锁内,并发 append 依次执行。
|
|
180
224
|
const conv = await t
|
|
181
225
|
.selectFrom("conversations")
|
|
@@ -256,4 +300,26 @@ export class EventLog {
|
|
|
256
300
|
toSeq,
|
|
257
301
|
};
|
|
258
302
|
}
|
|
259
|
-
}
|
|
303
|
+
};
|
|
304
|
+
__decorate([
|
|
305
|
+
Transactional({ propagation: "mandatory" })
|
|
306
|
+
], EventLog.prototype, "appendIn", null);
|
|
307
|
+
__decorate([
|
|
308
|
+
Transactional({ propagation: "requires_new" })
|
|
309
|
+
], EventLog.prototype, "appendOwn", null);
|
|
310
|
+
EventLog = __decorate([
|
|
311
|
+
Injectable(),
|
|
312
|
+
__param(0, Inject(KernelDb)),
|
|
313
|
+
__param(1, Inject(KERNEL_BUS)),
|
|
314
|
+
__param(2, Inject(KERNEL_LOGGER)),
|
|
315
|
+
__param(3, Inject(KernelEvents)),
|
|
316
|
+
__param(4, Inject(TransactionHost))
|
|
317
|
+
], EventLog);
|
|
318
|
+
export { EventLog };
|
|
319
|
+
/** The one {@link EventLog} (infra dependencies only, so every domain can import it). */
|
|
320
|
+
let EventLogModule = class EventLogModule {
|
|
321
|
+
};
|
|
322
|
+
EventLogModule = __decorate([
|
|
323
|
+
Module({ providers: [EventLog], exports: [EventLog] })
|
|
324
|
+
], EventLogModule);
|
|
325
|
+
export { EventLogModule };
|
|
@@ -86,10 +86,10 @@ export type LogContentBlock = Exclude<ContentBlock, MediaBlock> | (MediaBlock ex
|
|
|
86
86
|
} : never : never);
|
|
87
87
|
/**
|
|
88
88
|
* Structured view of a builtin tool's result (UI refresh B, spec §5.5 / §5.9): display only, like
|
|
89
|
-
* `display`. `command`: `
|
|
89
|
+
* `display`. `command`: `Bash` (the model's `description`, the exit code, null when the
|
|
90
90
|
* command was stopped, and whether it timed out; the web shows "Failed" for a non-zero exit even
|
|
91
|
-
* though `isError` stays false); `edit`: `
|
|
92
|
-
* `read`: `
|
|
91
|
+
* though `isError` stays false); `edit`: `Edit` / `Write` (a capped line diff);
|
|
92
|
+
* `read`: `Read` (the line range shown).
|
|
93
93
|
*/
|
|
94
94
|
export declare const ToolViewSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
95
95
|
kind: z.ZodLiteral<"command">;
|
|
@@ -103,6 +103,11 @@ export declare const ToolViewSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
103
103
|
added: z.ZodNumber;
|
|
104
104
|
removed: z.ZodNumber;
|
|
105
105
|
truncated: z.ZodBoolean;
|
|
106
|
+
file: z.ZodOptional<z.ZodObject<{
|
|
107
|
+
path: z.ZodString;
|
|
108
|
+
size: z.ZodNumber;
|
|
109
|
+
sha256: z.ZodString;
|
|
110
|
+
}, z.core.$strip>>;
|
|
106
111
|
hunks: z.ZodArray<z.ZodObject<{
|
|
107
112
|
oldStart: z.ZodNumber;
|
|
108
113
|
newStart: z.ZodNumber;
|
|
@@ -120,6 +125,11 @@ export declare const ToolViewSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
120
125
|
path: z.ZodString;
|
|
121
126
|
fromLine: z.ZodOptional<z.ZodNumber>;
|
|
122
127
|
toLine: z.ZodOptional<z.ZodNumber>;
|
|
128
|
+
file: z.ZodOptional<z.ZodObject<{
|
|
129
|
+
path: z.ZodString;
|
|
130
|
+
size: z.ZodNumber;
|
|
131
|
+
sha256: z.ZodString;
|
|
132
|
+
}, z.core.$strip>>;
|
|
123
133
|
}, z.core.$strip>], "kind">;
|
|
124
134
|
export type ToolView = z.infer<typeof ToolViewSchema>;
|
|
125
135
|
/**
|
|
@@ -441,6 +451,11 @@ export declare const ConversationEventSchema: z.ZodDiscriminatedUnion<[z.ZodObje
|
|
|
441
451
|
added: z.ZodNumber;
|
|
442
452
|
removed: z.ZodNumber;
|
|
443
453
|
truncated: z.ZodBoolean;
|
|
454
|
+
file: z.ZodOptional<z.ZodObject<{
|
|
455
|
+
path: z.ZodString;
|
|
456
|
+
size: z.ZodNumber;
|
|
457
|
+
sha256: z.ZodString;
|
|
458
|
+
}, z.core.$strip>>;
|
|
444
459
|
hunks: z.ZodArray<z.ZodObject<{
|
|
445
460
|
oldStart: z.ZodNumber;
|
|
446
461
|
newStart: z.ZodNumber;
|
|
@@ -458,6 +473,11 @@ export declare const ConversationEventSchema: z.ZodDiscriminatedUnion<[z.ZodObje
|
|
|
458
473
|
path: z.ZodString;
|
|
459
474
|
fromLine: z.ZodOptional<z.ZodNumber>;
|
|
460
475
|
toLine: z.ZodOptional<z.ZodNumber>;
|
|
476
|
+
file: z.ZodOptional<z.ZodObject<{
|
|
477
|
+
path: z.ZodString;
|
|
478
|
+
size: z.ZodNumber;
|
|
479
|
+
sha256: z.ZodString;
|
|
480
|
+
}, z.core.$strip>>;
|
|
461
481
|
}, z.core.$strip>], "kind">>;
|
|
462
482
|
card: z.ZodOptional<z.ZodObject<{
|
|
463
483
|
plugin: z.ZodString;
|
|
@@ -75,12 +75,22 @@ const STOP_REASONS = ["end_turn", "tool_use", "max_tokens", "refusal", "other"];
|
|
|
75
75
|
const EFFORT_ENUM = ["low", "medium", "high", "xhigh", "max"];
|
|
76
76
|
const seqNo = z.number().int().nonnegative();
|
|
77
77
|
const count = z.number().int().nonnegative();
|
|
78
|
+
/**
|
|
79
|
+
* The state of a file a `Read` / `Write` / `Edit` saw or left (display only, but the kernel reads it
|
|
80
|
+
* back from the log to decide read-before-write): the full normalized path, the file's full size and
|
|
81
|
+
* the sha256 of the bytes handled (the first bytes only for a file over `Read`'s byte limit).
|
|
82
|
+
*/
|
|
83
|
+
const FileStateViewSchema = z.object({
|
|
84
|
+
path: z.string().max(4096),
|
|
85
|
+
size: count,
|
|
86
|
+
sha256: z.string().regex(/^[0-9a-f]{64}$/),
|
|
87
|
+
});
|
|
78
88
|
/**
|
|
79
89
|
* Structured view of a builtin tool's result (UI refresh B, spec §5.5 / §5.9): display only, like
|
|
80
|
-
* `display`. `command`: `
|
|
90
|
+
* `display`. `command`: `Bash` (the model's `description`, the exit code, null when the
|
|
81
91
|
* command was stopped, and whether it timed out; the web shows "Failed" for a non-zero exit even
|
|
82
|
-
* though `isError` stays false); `edit`: `
|
|
83
|
-
* `read`: `
|
|
92
|
+
* though `isError` stays false); `edit`: `Edit` / `Write` (a capped line diff);
|
|
93
|
+
* `read`: `Read` (the line range shown).
|
|
84
94
|
*/
|
|
85
95
|
export const ToolViewSchema = z.discriminatedUnion("kind", [
|
|
86
96
|
z.object({
|
|
@@ -96,6 +106,7 @@ export const ToolViewSchema = z.discriminatedUnion("kind", [
|
|
|
96
106
|
added: count,
|
|
97
107
|
removed: count,
|
|
98
108
|
truncated: z.boolean(),
|
|
109
|
+
file: FileStateViewSchema.optional(),
|
|
99
110
|
hunks: z
|
|
100
111
|
.array(z.object({
|
|
101
112
|
oldStart: count,
|
|
@@ -114,6 +125,7 @@ export const ToolViewSchema = z.discriminatedUnion("kind", [
|
|
|
114
125
|
path: z.string().max(TOOL_VIEW_PATH_MAX_CHARS),
|
|
115
126
|
fromLine: count.optional(),
|
|
116
127
|
toLine: count.optional(),
|
|
128
|
+
file: FileStateViewSchema.optional(),
|
|
117
129
|
}),
|
|
118
130
|
]);
|
|
119
131
|
const ModelUsageShape = {
|
|
@@ -260,13 +272,13 @@ export const ConversationEventSchema = z.discriminatedUnion("type", [
|
|
|
260
272
|
*/
|
|
261
273
|
absorbedUpToSeq: seqNo.optional(),
|
|
262
274
|
/**
|
|
263
|
-
* 本次请求带给模型的工具(按发送顺序:未启用
|
|
275
|
+
* 本次请求带给模型的工具(按发送顺序:未启用 ToolSearch 时按 key 排序;启用时为内置工具按 key 排序,
|
|
264
276
|
* 其后是已加载工具按首次加载顺序)及其定义指纹(`ResolvedTool.specHash`)。
|
|
265
277
|
* 模型不支持工具时为空数组。较早的事件可能没有。
|
|
266
278
|
*/
|
|
267
279
|
tools: z.array(z.object({ key: z.string(), specHash: z.string() })).optional(),
|
|
268
280
|
/**
|
|
269
|
-
* 启用
|
|
281
|
+
* 启用 ToolSearch 时 system 第二块目录里的工具(按 key 排序)及定义指纹;定义同样存在
|
|
270
282
|
* `capybara.tool_specs`,目录文本可由它们还原。未启用时不写。
|
|
271
283
|
*/
|
|
272
284
|
catalog: z.array(z.object({ key: z.string(), specHash: z.string() })).optional(),
|
|
@@ -339,7 +351,7 @@ export const ConversationEventSchema = z.discriminatedUnion("type", [
|
|
|
339
351
|
outputId: z.string().optional(),
|
|
340
352
|
contentTypes: z.array(z.string()).optional(),
|
|
341
353
|
/**
|
|
342
|
-
* `
|
|
354
|
+
* `ToolSearch` 本次加载的工具 key(没有匹配时不写)。已加载集合 = 会话中全部 tool_result 的
|
|
343
355
|
* `loadedTools` 并集(含已被摘要覆盖的部分),构建请求时由日志还原,不放进程内存。
|
|
344
356
|
*/
|
|
345
357
|
loadedTools: z.array(z.string()).optional(),
|
|
@@ -395,7 +407,7 @@ export const ConversationEventSchema = z.discriminatedUnion("type", [
|
|
|
395
407
|
reason: z.string().max(APPROVAL_DENY_REASON_MAX_CHARS).optional(),
|
|
396
408
|
})),
|
|
397
409
|
/**
|
|
398
|
-
* 工具调用需要用户输入(`
|
|
410
|
+
* 工具调用需要用户输入(`AskUserQuestion`、插件工具的 `input_required`、MCP elicitation):输入请求已建,
|
|
399
411
|
* run 暂停等待回答。界面据此显示表单卡片(不进模型请求)。
|
|
400
412
|
*/
|
|
401
413
|
ev("question_asked", z.object({
|
|
@@ -423,7 +435,7 @@ export const ConversationEventSchema = z.discriminatedUnion("type", [
|
|
|
423
435
|
reason: z.enum(["provider_rejected"]),
|
|
424
436
|
})),
|
|
425
437
|
/**
|
|
426
|
-
* agent 经 `
|
|
438
|
+
* agent 经 `Deliver` 把沙箱里的文件交付给用户(M5 T8,C3):字节在对象存储
|
|
427
439
|
* `kernel/<orgId>/<objectKey>`(`objectKey` = `artifacts/<conversationId>/<artifactId>`,相对内核前缀),
|
|
428
440
|
* 这里只有元数据。网页从日志重建产物列表;不进模型请求(模型看到的是同一调用的 tool_result 确认)。
|
|
429
441
|
*/
|
|
@@ -439,7 +451,7 @@ export const ConversationEventSchema = z.discriminatedUnion("type", [
|
|
|
439
451
|
/**
|
|
440
452
|
* 本对话此刻生效的技能(M5 T14,Ruling M17):运行开始时内核解析生效的技能集合(agent 版本选中的组织技能 +
|
|
441
453
|
* agent 自己的技能,未删除,取 current_version),与日志里上一份快照不同才写。模型看到的技能目录只来自这里:
|
|
442
|
-
* 第一份(在任何 `model_call` 之前)进 system 缓存段,之后的在所在位置渲染为英文变更提醒;`
|
|
454
|
+
* 第一份(在任何 `model_call` 之前)进 system 缓存段,之后的在所在位置渲染为英文变更提醒;`Skill` 按最新一份
|
|
443
455
|
* 把名字解析为 id 与版本。按 name 排序。
|
|
444
456
|
*/
|
|
445
457
|
ev("skills_catalog", z.object({
|
|
@@ -451,12 +463,12 @@ export const ConversationEventSchema = z.discriminatedUnion("type", [
|
|
|
451
463
|
version: z.number().int().positive(),
|
|
452
464
|
/**
|
|
453
465
|
* 内容来源(对象前缀,T15):已生成的版本为 `skill_versions.object_prefix`,试用中的草稿为申请的
|
|
454
|
-
* `object_prefix`。同号的草稿与正式版本靠它区分;`
|
|
466
|
+
* `object_prefix`。同号的草稿与正式版本靠它区分;`Skill` 只按它解析。
|
|
455
467
|
*/
|
|
456
468
|
source: z.string().min(1).max(512),
|
|
457
469
|
/**
|
|
458
470
|
* The catalog item (plugin) name the skill came from (phase B); absent for the org's
|
|
459
|
-
* own and the agent's skills, and in snapshots written before phase B. `
|
|
471
|
+
* own and the agent's skills, and in snapshots written before phase B. `Skill`
|
|
460
472
|
* resolves `<plugin>:<name>` with it; it is not model-visible otherwise.
|
|
461
473
|
*/
|
|
462
474
|
plugin: z.string().min(1).max(64).optional(),
|
|
@@ -465,7 +477,7 @@ export const ConversationEventSchema = z.discriminatedUnion("type", [
|
|
|
465
477
|
/**
|
|
466
478
|
* Pinned skills (phase B, spec §9.1) in the agent's order: each a skill of `skills` (same
|
|
467
479
|
* id, version and source) with its SKILL.md body as read at run start or written by
|
|
468
|
-
*
|
|
480
|
+
* SkillWrite. Absent means none (every snapshot before phase B).
|
|
469
481
|
*/
|
|
470
482
|
pinned: z
|
|
471
483
|
.array(z.object({
|
|
@@ -534,7 +546,7 @@ export const ConversationEventSchema = z.discriminatedUnion("type", [
|
|
|
534
546
|
warnings: z.array(z.string()).optional(),
|
|
535
547
|
})),
|
|
536
548
|
/**
|
|
537
|
-
* Parent log (phase C, spec §14.1): the `
|
|
549
|
+
* Parent log (phase C, spec §14.1): the `Agent` call `callId` started (or resumed) the sub-agent
|
|
538
550
|
* `subagentId` (its child conversation id) with run `childRunId`. Not model-visible: the model
|
|
539
551
|
* sees the call's tool_call / tool_result pair.
|
|
540
552
|
*/
|
|
@@ -550,7 +562,7 @@ export const ConversationEventSchema = z.discriminatedUnion("type", [
|
|
|
550
562
|
tierFallback: z.boolean().optional(),
|
|
551
563
|
/**
|
|
552
564
|
* Phase D: the seq of the person's fork invocation this dispatch runs (`callId` is
|
|
553
|
-
* `skill-<seq>`, step 0, no tool call); absent for an `
|
|
565
|
+
* `skill-<seq>`, step 0, no tool call); absent for an `Agent` call.
|
|
554
566
|
*/
|
|
555
567
|
invokedSeq: seqNo.optional(),
|
|
556
568
|
})),
|
|
@@ -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";
|