@capybara-hq/kernel 0.1.0-rc.0 → 0.1.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bootstrap.json +10 -6
- package/dist/admin/admin.controller.d.ts +17 -17
- package/dist/admin/admin.controller.js +43 -26
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/extensions.controller.d.ts +14 -14
- package/dist/admin/extensions.controller.js +30 -17
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +8 -8
- package/dist/admin/setup.controller.js +27 -25
- package/dist/admin/setup.service.d.ts +19 -27
- package/dist/admin/setup.service.js +61 -61
- package/dist/agents/agent-lookup.d.ts +53 -0
- package/dist/agents/agent-lookup.js +179 -0
- package/dist/agents/agents.controller.d.ts +1 -1
- package/dist/agents/agents.controller.js +14 -8
- package/dist/agents/agents.module.d.ts +7 -0
- package/dist/agents/agents.module.js +41 -0
- package/dist/agents/agents.service.d.ts +39 -58
- package/dist/agents/agents.service.js +261 -329
- package/dist/agents/definition.d.ts +8 -0
- package/dist/agents/definition.js +8 -0
- package/dist/agents/models.controller.d.ts +1 -1
- package/dist/agents/models.controller.js +2 -2
- package/dist/agents/templates.controller.d.ts +1 -1
- package/dist/agents/templates.controller.js +2 -2
- package/dist/agents/templates.d.ts +6 -8
- package/dist/agents/templates.js +20 -4
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -0
- package/dist/catalog/admin-catalog.controller.d.ts +3 -3
- package/dist/catalog/admin-catalog.controller.js +27 -13
- package/dist/catalog/catalog-content.d.ts +185 -0
- package/dist/catalog/catalog-content.js +323 -0
- package/dist/catalog/catalog-items.d.ts +186 -0
- package/dist/catalog/catalog-items.js +410 -0
- package/dist/catalog/catalog.module.d.ts +14 -0
- package/dist/catalog/catalog.module.js +71 -0
- package/dist/catalog/catalog.service.d.ts +34 -188
- package/dist/catalog/catalog.service.js +155 -489
- package/dist/catalog/cli.d.ts +3 -2
- package/dist/catalog/cli.js +13 -31
- package/dist/catalog/job-ids.d.ts +15 -0
- package/dist/catalog/job-ids.js +15 -0
- package/dist/catalog/jobs.d.ts +27 -0
- package/dist/catalog/jobs.js +70 -0
- package/dist/catalog/locks.d.ts +24 -0
- package/dist/catalog/locks.js +63 -0
- package/dist/catalog/marketplaces.controller.d.ts +4 -4
- package/dist/catalog/marketplaces.controller.js +22 -11
- package/dist/catalog/marketplaces.service.d.ts +30 -13
- package/dist/catalog/marketplaces.service.js +330 -256
- package/dist/catalog/org-catalog.controller.d.ts +4 -3
- package/dist/catalog/org-catalog.controller.js +29 -14
- package/dist/catalog/org-catalog.service.d.ts +32 -198
- package/dist/catalog/org-catalog.service.js +159 -400
- package/dist/catalog/plugin-import.d.ts +73 -34
- package/dist/catalog/plugin-import.js +356 -217
- package/dist/catalog/plugin-install.d.ts +83 -41
- package/dist/catalog/plugin-install.js +421 -269
- package/dist/catalog/plugin-upgrade.d.ts +59 -4
- package/dist/catalog/plugin-upgrade.js +407 -282
- package/dist/catalog/requests.service.d.ts +27 -15
- package/dist/catalog/requests.service.js +201 -145
- package/dist/catalog/upgrade-targets.d.ts +4 -7
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +1 -1
- package/dist/channels/cards.d.ts +2 -2
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +128 -0
- package/dist/channels/connections.controller.d.ts +1 -1
- package/dist/channels/connections.controller.js +11 -6
- package/dist/channels/connections.service.d.ts +43 -21
- package/dist/channels/connections.service.js +236 -131
- package/dist/channels/inbound.d.ts +34 -38
- package/dist/channels/inbound.js +107 -41
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +60 -82
- package/dist/channels/outbound.js +165 -193
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +29 -8
- package/dist/channels/threads.js +71 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +16 -1
- package/dist/config/schema.js +54 -7
- package/dist/conversations/access.d.ts +29 -0
- package/dist/conversations/access.js +86 -0
- package/dist/conversations/artifacts.d.ts +10 -10
- package/dist/conversations/artifacts.js +35 -9
- package/dist/conversations/attachments.controller.d.ts +1 -1
- package/dist/conversations/attachments.controller.js +8 -6
- package/dist/conversations/attachments.module.d.ts +7 -0
- package/dist/conversations/attachments.module.js +25 -0
- package/dist/conversations/attachments.service.d.ts +30 -22
- package/dist/conversations/attachments.service.js +119 -46
- package/dist/conversations/conversations.controller.d.ts +8 -7
- package/dist/conversations/conversations.controller.js +59 -29
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +69 -0
- package/dist/conversations/conversations.service.d.ts +40 -38
- package/dist/conversations/conversations.service.js +130 -140
- package/dist/conversations/event-log.d.ts +28 -18
- package/dist/conversations/event-log.js +74 -27
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +48 -56
- package/dist/conversations/queue.js +13 -289
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +343 -0
- package/dist/conversations/sandbox-status.d.ts +13 -10
- package/dist/conversations/sandbox-status.js +36 -8
- package/dist/conversations/titles.d.ts +71 -24
- package/dist/conversations/titles.js +159 -62
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +6 -0
- package/dist/ctx/create-ctx.js +7 -9
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/queue.js +3 -2
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +2 -2
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +1 -0
- package/dist/errors.d.ts +2 -0
- package/dist/errors.js +2 -0
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/run-replay.d.ts +56 -8
- package/dist/evals/run-replay.js +140 -80
- package/dist/evals/runs.controller.d.ts +1 -1
- package/dist/evals/runs.controller.js +17 -8
- package/dist/evals/runs.service.d.ts +23 -45
- package/dist/evals/runs.service.js +245 -234
- package/dist/evals/sets.controller.d.ts +1 -1
- package/dist/evals/sets.controller.js +17 -8
- package/dist/evals/sets.service.d.ts +22 -6
- package/dist/evals/sets.service.js +248 -194
- package/dist/evals/snapshot.d.ts +2 -2
- package/dist/evals/step-replay.d.ts +2 -2
- package/dist/evals/step-replay.js +1 -1
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.service.d.ts +5 -4
- package/dist/evals/trajectory.service.js +30 -7
- package/dist/evals/worker.d.ts +44 -27
- package/dist/evals/worker.js +220 -120
- package/dist/extensions/admin-ops.d.ts +61 -33
- package/dist/extensions/admin-ops.js +248 -154
- package/dist/extensions/admin-view.d.ts +38 -27
- package/dist/extensions/admin-view.js +126 -55
- package/dist/extensions/approvals.d.ts +12 -8
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +111 -45
- package/dist/extensions/bootstrap.d.ts +96 -42
- package/dist/extensions/bootstrap.js +303 -155
- package/dist/extensions/cli.d.ts +20 -10
- package/dist/extensions/cli.js +41 -96
- package/dist/extensions/config-issues.d.ts +7 -0
- package/dist/extensions/config-issues.js +31 -0
- package/dist/extensions/deployment-config-store.d.ts +49 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +58 -67
- package/dist/extensions/deployment-config.js +202 -230
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +77 -0
- package/dist/extensions/hooks.d.ts +3 -2
- package/dist/extensions/hooks.js +1 -1
- package/dist/extensions/host.d.ts +72 -68
- package/dist/extensions/host.js +191 -152
- package/dist/extensions/installs.d.ts +49 -16
- package/dist/extensions/installs.js +128 -32
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +33 -0
- package/dist/extensions/locks.js +86 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.controller.d.ts +1 -1
- package/dist/extensions/org-config.controller.js +8 -5
- package/dist/extensions/org-config.d.ts +48 -46
- package/dist/extensions/org-config.js +284 -226
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +89 -4
- package/dist/extensions/sources.d.ts +12 -8
- package/dist/extensions/sources.js +34 -13
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +17 -9
- package/dist/files/previewers.d.ts +13 -18
- package/dist/files/previewers.js +83 -36
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +47 -355
- package/dist/http/app.d.ts +11 -15
- package/dist/http/app.js +52 -47
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/identity/accounts.d.ts +82 -29
- package/dist/identity/accounts.js +294 -175
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +7 -4
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +31 -25
- package/dist/identity/auth.guard.d.ts +3 -3
- package/dist/identity/auth.guard.js +6 -4
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/enterprise-admin.d.ts +18 -12
- package/dist/identity/enterprise-admin.js +67 -13
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +56 -0
- package/dist/identity/me.controller.d.ts +16 -15
- package/dist/identity/me.controller.js +37 -31
- package/dist/identity/sessions.d.ts +12 -10
- package/dist/identity/sessions.js +74 -42
- package/dist/identity/settings.d.ts +20 -14
- package/dist/identity/settings.js +85 -57
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/inbox/inbox.module.d.ts +3 -0
- package/dist/inbox/inbox.module.js +22 -0
- package/dist/inbox/inbox.service.d.ts +7 -9
- package/dist/inbox/inbox.service.js +32 -11
- package/dist/index.d.ts +19 -12
- package/dist/index.js +13 -8
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +165 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +126 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +90 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +96 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +86 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +16 -0
- package/dist/infra/logging/logging.module.js +34 -0
- package/dist/infra/queue/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +7 -0
- package/dist/infra/queue/redis-connection.js +18 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +87 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +31 -0
- package/dist/infra/throttler/named-throttlers.js +119 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +15 -0
- package/dist/infra/tokens.js +15 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -241
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +136 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +451 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-config.d.ts +9 -0
- package/dist/log-config.js +27 -0
- package/dist/log-context.d.ts +34 -0
- package/dist/log-context.js +44 -0
- package/dist/log-loki.d.ts +34 -0
- package/dist/log-loki.js +145 -0
- package/dist/log.d.ts +41 -10
- package/dist/log.js +91 -17
- package/dist/models/models.module.d.ts +3 -0
- package/dist/models/models.module.js +24 -0
- package/dist/models/prices.d.ts +8 -2
- package/dist/models/prices.js +65 -37
- package/dist/models/purposes.controller.d.ts +1 -1
- package/dist/models/purposes.controller.js +5 -6
- package/dist/models/purposes.d.ts +35 -13
- package/dist/models/purposes.js +101 -51
- package/dist/net/public-address.js +3 -2
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +61 -31
- package/dist/orgs/directory-sync.js +212 -125
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +54 -57
- package/dist/orgs/offboarding.js +161 -71
- package/dist/orgs/org-lock.d.ts +28 -19
- package/dist/orgs/org-lock.js +81 -35
- package/dist/orgs/org.guard.d.ts +1 -1
- package/dist/orgs/org.guard.js +2 -2
- package/dist/orgs/orgs.controller.d.ts +13 -13
- package/dist/orgs/orgs.controller.js +29 -17
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +68 -0
- package/dist/orgs/orgs.service.d.ts +30 -19
- package/dist/orgs/orgs.service.js +139 -86
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +14 -8
- package/dist/orgs/settings.service.js +75 -46
- package/dist/overrides.d.ts +56 -0
- package/dist/overrides.js +30 -0
- package/dist/roles/gateway-role.d.ts +43 -0
- package/dist/roles/gateway-role.js +98 -0
- package/dist/roles/gateway.module.d.ts +8 -0
- package/dist/roles/gateway.module.js +28 -0
- package/dist/roles/worker-role.d.ts +63 -0
- package/dist/roles/worker-role.js +144 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +90 -0
- package/dist/runtime/abort.js +19 -2
- package/dist/runtime/checkpointer.d.ts +8 -3
- package/dist/runtime/checkpointer.js +87 -55
- package/dist/runtime/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +3 -3
- package/dist/runtime/hook-calls.js +1 -6
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.js +1 -1
- package/dist/runtime/loop.d.ts +7 -0
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +45 -74
- package/dist/runtime/maintenance.js +139 -136
- package/dist/runtime/model-call.d.ts +7 -4
- package/dist/runtime/model-call.js +24 -57
- package/dist/runtime/providers.d.ts +17 -6
- package/dist/runtime/providers.js +66 -25
- package/dist/runtime/quota.d.ts +17 -3
- package/dist/runtime/quota.js +27 -2
- package/dist/runtime/retired-schedulers.d.ts +7 -0
- package/dist/runtime/retired-schedulers.js +31 -0
- package/dist/runtime/run-control.d.ts +33 -0
- package/dist/runtime/run-control.js +77 -0
- package/dist/runtime/run-finish.d.ts +26 -17
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +48 -0
- package/dist/runtime/run-jobs.js +95 -0
- package/dist/runtime/run-processors.d.ts +60 -0
- package/dist/runtime/run-processors.js +185 -0
- package/dist/runtime/run-queue.d.ts +32 -57
- package/dist/runtime/run-queue.js +291 -295
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +121 -75
- package/dist/runtime/run-worker.js +340 -225
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +112 -0
- package/dist/runtime/step-log.d.ts +40 -0
- package/dist/runtime/step-log.js +94 -0
- package/dist/runtime/stream.controller.d.ts +5 -8
- package/dist/runtime/stream.controller.js +14 -12
- package/dist/runtime/stream.d.ts +24 -6
- package/dist/runtime/stream.js +78 -7
- package/dist/runtime/subagents/child.d.ts +3 -44
- package/dist/runtime/subagents/child.js +0 -79
- package/dist/runtime/subagents/definition.d.ts +4 -4
- package/dist/runtime/subagents/definition.js +2 -2
- package/dist/runtime/subagents/dispatch.d.ts +87 -6
- package/dist/runtime/subagents/dispatch.js +135 -140
- package/dist/runtime/subagents/limits.d.ts +9 -4
- package/dist/runtime/subagents/limits.js +4 -2
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +1 -1
- package/dist/runtime/subagents/progress.d.ts +2 -2
- package/dist/runtime/subagents/roster.d.ts +3 -3
- package/dist/runtime/subagents/roster.js +1 -1
- package/dist/runtime/subagents/skill-fork.d.ts +6 -7
- package/dist/runtime/subagents/skill-fork.js +16 -5
- package/dist/runtime/subagents/subagents.service.d.ts +40 -0
- package/dist/runtime/subagents/subagents.service.js +101 -0
- package/dist/runtime/usage-report.d.ts +94 -52
- package/dist/runtime/usage-report.js +200 -99
- package/dist/runtime/waits.d.ts +125 -57
- package/dist/runtime/waits.js +431 -208
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +41 -0
- package/dist/sandbox/jobs.js +113 -0
- package/dist/sandbox/leases.d.ts +39 -31
- package/dist/sandbox/leases.js +117 -257
- package/dist/sandbox/providers.d.ts +19 -0
- package/dist/sandbox/providers.js +38 -0
- package/dist/sandbox/sandbox.module.d.ts +8 -0
- package/dist/sandbox/sandbox.module.js +30 -0
- package/dist/sandbox/sandbox.service.d.ts +24 -29
- package/dist/sandbox/sandbox.service.js +106 -75
- package/dist/skills/catalog.d.ts +33 -20
- package/dist/skills/catalog.js +96 -53
- package/dist/skills/changes.controller.d.ts +4 -4
- package/dist/skills/changes.controller.js +15 -9
- package/dist/skills/changes.service.d.ts +28 -18
- package/dist/skills/changes.service.js +421 -364
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +8 -5
- package/dist/skills/invoke.d.ts +16 -15
- package/dist/skills/invoke.js +48 -17
- package/dist/skills/skills.controller.d.ts +1 -1
- package/dist/skills/skills.controller.js +11 -6
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +30 -0
- package/dist/skills/skills.service.d.ts +47 -30
- package/dist/skills/skills.service.js +221 -158
- package/dist/storage/job-ids.d.ts +6 -0
- package/dist/storage/job-ids.js +6 -0
- package/dist/storage/purge.d.ts +22 -7
- package/dist/storage/purge.js +55 -3
- package/dist/storage/storage.module.d.ts +6 -0
- package/dist/storage/storage.module.js +23 -0
- package/dist/storage/storage.service.d.ts +18 -4
- package/dist/storage/storage.service.js +44 -3
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +12 -8
- package/dist/tools/approvals.service.d.ts +27 -25
- package/dist/tools/approvals.service.js +324 -258
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtins/ask-user.d.ts +2 -2
- package/dist/tools/builtins/ask-user.js +1 -1
- package/dist/tools/builtins/builtin-tools.d.ts +21 -0
- package/dist/tools/builtins/builtin-tools.js +80 -0
- package/dist/tools/builtins/read-tool-output.d.ts +2 -2
- package/dist/tools/builtins/read-tool-output.js +1 -1
- package/dist/tools/builtins/sandbox/bash.js +2 -2
- package/dist/tools/builtins/sandbox/common.d.ts +7 -4
- package/dist/tools/builtins/sandbox/common.js +5 -3
- package/dist/tools/builtins/sandbox/deliver.js +2 -2
- package/dist/tools/builtins/sandbox/edit.js +1 -1
- package/dist/tools/builtins/sandbox/glob.js +2 -2
- package/dist/tools/builtins/sandbox/grep.js +2 -2
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/write.js +1 -1
- package/dist/tools/builtins/skill-load.d.ts +3 -3
- package/dist/tools/builtins/skill-load.js +1 -1
- package/dist/tools/canonical-json.d.ts +6 -0
- package/dist/tools/canonical-json.js +16 -0
- package/dist/tools/connector-content.controller.d.ts +1 -1
- package/dist/tools/connector-content.controller.js +11 -6
- package/dist/tools/connector-content.d.ts +12 -15
- package/dist/tools/connector-content.js +53 -18
- package/dist/tools/connectors.controller.d.ts +1 -1
- package/dist/tools/connectors.controller.js +21 -10
- package/dist/tools/connectors.service.d.ts +31 -13
- package/dist/tools/connectors.service.js +434 -344
- package/dist/tools/credentials.d.ts +17 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +111 -79
- package/dist/tools/info.d.ts +12 -9
- package/dist/tools/info.js +33 -7
- package/dist/tools/job-ids.d.ts +13 -0
- package/dist/tools/job-ids.js +15 -0
- package/dist/tools/jobs.d.ts +24 -0
- package/dist/tools/jobs.js +69 -0
- package/dist/tools/oauth/flow-paths.d.ts +16 -0
- package/dist/tools/oauth/flow-paths.js +38 -0
- package/dist/tools/oauth/flow.d.ts +30 -30
- package/dist/tools/oauth/flow.js +109 -81
- package/dist/tools/oauth/oauth.controller.d.ts +3 -3
- package/dist/tools/oauth/oauth.controller.js +12 -9
- package/dist/tools/oauth/tokens.d.ts +11 -3
- package/dist/tools/oauth/tokens.js +15 -14
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +47 -3
- package/dist/tools/pipeline.d.ts +62 -46
- package/dist/tools/pipeline.js +145 -64
- package/dist/tools/policy.d.ts +2 -2
- package/dist/tools/questions.controller.d.ts +1 -1
- package/dist/tools/questions.controller.js +8 -5
- package/dist/tools/questions.service.d.ts +25 -24
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +30 -20
- package/dist/tools/registry.js +73 -37
- package/dist/tools/specs.d.ts +5 -4
- package/dist/tools/specs.js +3 -1
- package/dist/tools/tools.module.d.ts +10 -0
- package/dist/tools/tools.module.js +91 -0
- package/dist/ui/call-extension.d.ts +16 -0
- package/dist/ui/call-extension.js +38 -0
- package/dist/ui/embed-token.d.ts +9 -5
- package/dist/ui/embed-token.js +34 -6
- package/dist/ui/ui-stream.d.ts +22 -17
- package/dist/ui/ui-stream.js +72 -12
- package/dist/ui/ui.module.d.ts +7 -0
- package/dist/ui/ui.module.js +28 -0
- package/dist/ui/views.controller.d.ts +14 -12
- package/dist/ui/views.controller.js +32 -25
- package/dist/ui/views.d.ts +9 -57
- package/dist/ui/views.js +43 -45
- package/package.json +11 -2
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
- /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
|
@@ -1,11 +1,30 @@
|
|
|
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 { isModelError, } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import {
|
|
11
|
+
import { getQueueToken } from "@nestjs/bullmq";
|
|
12
|
+
import { Inject, Injectable, Module } from "@nestjs/common";
|
|
3
13
|
import { sql } from "kysely";
|
|
14
|
+
import { ExtensionsModule } from "../extensions/extensions.module.js";
|
|
15
|
+
import { ExtensionHost } from "../extensions/host.js";
|
|
4
16
|
import { audit } from "../identity/audit.js";
|
|
5
|
-
import {
|
|
17
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
18
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
19
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
20
|
+
import { QueueModule } from "../infra/queue/queue.module.js";
|
|
21
|
+
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
22
|
+
import { ModelsModule } from "../models/models.module.js";
|
|
23
|
+
import { ModelPurposesService, PurposeAttemptError } from "../models/purposes.js";
|
|
6
24
|
import { fireObserve, hookDeniedAudit, hookDeniedEvent, hookRequestOf, } from "../runtime/hook-calls.js";
|
|
7
|
-
import {
|
|
25
|
+
import { UsageReporter, UsageReportModule } from "../runtime/usage-report.js";
|
|
8
26
|
import { HIDDEN_FORMAT_RE } from "../text.js";
|
|
27
|
+
import { EventLog, EventLogModule } from "./event-log.js";
|
|
9
28
|
import { typedInvocation } from "./events.js";
|
|
10
29
|
/**
|
|
11
30
|
* Model-generated conversation titles (UI refresh B, spec §5.1 "Titles").
|
|
@@ -227,23 +246,7 @@ export async function runTitleJob(d, conversationId, attempt) {
|
|
|
227
246
|
if (sent && d.hooks)
|
|
228
247
|
observeTitle(d, scope, sent, out, null, signal);
|
|
229
248
|
const title = cleanTitle(textOf(out.content));
|
|
230
|
-
const { written, usage } = await d.
|
|
231
|
-
// Append first: it locks the conversation row FOR UPDATE before this transaction touches it.
|
|
232
|
-
// Updating the title first held the row FOR NO KEY UPDATE, which lets in another
|
|
233
|
-
// transaction's foreign key check (FOR KEY SHARE, e.g. inserting an approval); the append's
|
|
234
|
-
// FOR UPDATE then waited for that one while it waited for the title row: 40P01
|
|
235
|
-
const [ev] = await d.eventLog.append(conversationId, [usageEvent(attempt, out)], t);
|
|
236
|
-
const row = title === null
|
|
237
|
-
? undefined
|
|
238
|
-
: await t
|
|
239
|
-
.updateTable("conversations")
|
|
240
|
-
.set({ title, title_source: "generated" })
|
|
241
|
-
.where("id", "=", conversationId)
|
|
242
|
-
.where("title_source", "is", null)
|
|
243
|
-
.returning("id")
|
|
244
|
-
.executeTakeFirst();
|
|
245
|
-
return { written: row !== undefined, usage: ev };
|
|
246
|
-
});
|
|
249
|
+
const { written, usage } = await d.writes.writeResult(conversationId, attempt, out, title);
|
|
247
250
|
if (usage) {
|
|
248
251
|
await d.eventLog.notify(conversationId, usage.seq);
|
|
249
252
|
void d.usageReport?.enqueue(conversationId, usage.seq);
|
|
@@ -312,7 +315,7 @@ async function checkTitleHooks(d, scope, target, request, signal) {
|
|
|
312
315
|
};
|
|
313
316
|
const entry = hookDeniedAudit(site, hookDeniedEvent(site, "model.request", verdict, { step: 0, attempt: 1 }).payload, verdict);
|
|
314
317
|
entry.detail = { ...entry.detail, purpose: "title" };
|
|
315
|
-
await d.
|
|
318
|
+
await d.writes.auditDenied(entry);
|
|
316
319
|
d.log.warn("conversation title blocked by a policy hook", {
|
|
317
320
|
conversationId: scope.conversationId,
|
|
318
321
|
plugin: verdict.plugin,
|
|
@@ -343,31 +346,118 @@ function observeTitle(d, scope, sent, out, err, signal) {
|
|
|
343
346
|
...(out === null && { errorCode: errorCodeOf(err) }),
|
|
344
347
|
}, signal, d.log);
|
|
345
348
|
}
|
|
349
|
+
/**
|
|
350
|
+
* One title attempt's work ({@link runTitleJob}) over the injected services, with its writes in
|
|
351
|
+
* transactions of their own: the title with the call's usage event, and a policy denial's audit row.
|
|
352
|
+
*/
|
|
353
|
+
let TitleGenerator = class TitleGenerator {
|
|
354
|
+
kdb;
|
|
355
|
+
eventLog;
|
|
356
|
+
purposes;
|
|
357
|
+
host;
|
|
358
|
+
usageReport;
|
|
359
|
+
log;
|
|
360
|
+
txHost;
|
|
361
|
+
constructor(kdb, eventLog, purposes,
|
|
362
|
+
/** The title call fires the plugin hooks (`model.request`, `model.response`). */
|
|
363
|
+
host, usageReport, log, txHost) {
|
|
364
|
+
this.kdb = kdb;
|
|
365
|
+
this.eventLog = eventLog;
|
|
366
|
+
this.purposes = purposes;
|
|
367
|
+
this.host = host;
|
|
368
|
+
this.usageReport = usageReport;
|
|
369
|
+
this.log = log;
|
|
370
|
+
this.txHost = txHost;
|
|
371
|
+
}
|
|
372
|
+
/** One attempt ({@link runTitleJob}); `signal` aborts the call (the worker stopping). */
|
|
373
|
+
run(conversationId, attempt, signal) {
|
|
374
|
+
const kdb = this.kdb;
|
|
375
|
+
const hooks = this.host?.hooks;
|
|
376
|
+
return runTitleJob({
|
|
377
|
+
get db() {
|
|
378
|
+
return kdb.db;
|
|
379
|
+
},
|
|
380
|
+
eventLog: this.eventLog,
|
|
381
|
+
purposes: this.purposes,
|
|
382
|
+
log: this.log,
|
|
383
|
+
...(hooks !== undefined && { hooks }),
|
|
384
|
+
...(this.usageReport !== undefined && { usageReport: this.usageReport }),
|
|
385
|
+
...(signal !== undefined && { signal }),
|
|
386
|
+
writes: this,
|
|
387
|
+
}, conversationId, attempt);
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Appends the call's `usage` event and writes the title while `title_source IS NULL` (a rename
|
|
391
|
+
* wins), in one transaction.
|
|
392
|
+
*/
|
|
393
|
+
async writeResult(conversationId, attempt, out, title) {
|
|
394
|
+
// Append first: it locks the conversation row FOR UPDATE before this transaction touches it.
|
|
395
|
+
// Updating the title first held the row FOR NO KEY UPDATE, which lets in another
|
|
396
|
+
// transaction's foreign key check (FOR KEY SHARE, e.g. inserting an approval); the append's
|
|
397
|
+
// FOR UPDATE then waited for that one while it waited for the title row: 40P01
|
|
398
|
+
const [ev] = await this.eventLog.appendIn(conversationId, [usageEvent(attempt, out)]);
|
|
399
|
+
const row = title === null
|
|
400
|
+
? undefined
|
|
401
|
+
: await this.kdb.db
|
|
402
|
+
.updateTable("conversations")
|
|
403
|
+
.set({ title, title_source: "generated" })
|
|
404
|
+
.where("id", "=", conversationId)
|
|
405
|
+
.where("title_source", "is", null)
|
|
406
|
+
.returning("id")
|
|
407
|
+
.executeTakeFirst();
|
|
408
|
+
return { written: row !== undefined, usage: ev };
|
|
409
|
+
}
|
|
410
|
+
/** The `hook.denied` audit row of a denied title call. */
|
|
411
|
+
async auditDenied(entry) {
|
|
412
|
+
await audit(this.kdb.db, entry);
|
|
413
|
+
}
|
|
414
|
+
};
|
|
415
|
+
__decorate([
|
|
416
|
+
Transactional({ propagation: "requires_new" })
|
|
417
|
+
], TitleGenerator.prototype, "writeResult", null);
|
|
418
|
+
__decorate([
|
|
419
|
+
Transactional({ propagation: "requires_new" })
|
|
420
|
+
], TitleGenerator.prototype, "auditDenied", null);
|
|
421
|
+
TitleGenerator = __decorate([
|
|
422
|
+
Injectable(),
|
|
423
|
+
__param(0, Inject(KernelDb)),
|
|
424
|
+
__param(1, Inject(EventLog)),
|
|
425
|
+
__param(2, Inject(ModelPurposesService)),
|
|
426
|
+
__param(3, Inject(ExtensionHost)),
|
|
427
|
+
__param(4, Inject(UsageReporter)),
|
|
428
|
+
__param(5, Inject(KERNEL_LOGGER)),
|
|
429
|
+
__param(6, Inject(TransactionHost))
|
|
430
|
+
], TitleGenerator);
|
|
431
|
+
export { TitleGenerator };
|
|
346
432
|
/**
|
|
347
433
|
* The title queue: `maybeEnqueue` on any role (called by the run worker after a completed run),
|
|
348
|
-
*
|
|
349
|
-
* enqueues the next attempt.
|
|
434
|
+
* consumed on the `worker` role by its `@Processor`. One attempt per job, no BullMQ retries: the
|
|
435
|
+
* next completed run enqueues the next attempt.
|
|
350
436
|
*/
|
|
351
|
-
|
|
352
|
-
|
|
437
|
+
let TitleQueue = class TitleQueue {
|
|
438
|
+
kdb;
|
|
353
439
|
queue;
|
|
354
|
-
|
|
440
|
+
generator;
|
|
441
|
+
log;
|
|
355
442
|
worker;
|
|
356
|
-
workerConn;
|
|
357
443
|
closed = false;
|
|
358
444
|
stopping = new AbortController();
|
|
359
|
-
constructor(
|
|
360
|
-
this.
|
|
445
|
+
constructor(kdb, queue, generator, log) {
|
|
446
|
+
this.kdb = kdb;
|
|
447
|
+
this.queue = queue;
|
|
448
|
+
this.generator = generator;
|
|
449
|
+
this.log = log;
|
|
450
|
+
queue.on("error", (err) => this.log.error("title queue error", { err }));
|
|
361
451
|
}
|
|
362
452
|
/** Enqueues the next title attempt when one is due. Never throws (logs instead). */
|
|
363
453
|
async maybeEnqueue(conversationId) {
|
|
364
454
|
if (this.closed)
|
|
365
455
|
return;
|
|
366
456
|
try {
|
|
367
|
-
const attempt = await titleAttemptDue(this.
|
|
457
|
+
const attempt = await titleAttemptDue(this.kdb.db, conversationId);
|
|
368
458
|
if (attempt === null)
|
|
369
459
|
return;
|
|
370
|
-
await this.
|
|
460
|
+
await this.queue.add(JOB, { conversationId, attempt }, {
|
|
371
461
|
jobId: titleJobId(conversationId, attempt),
|
|
372
462
|
attempts: 1,
|
|
373
463
|
removeOnComplete: true,
|
|
@@ -375,48 +465,55 @@ export class TitleQueue {
|
|
|
375
465
|
});
|
|
376
466
|
}
|
|
377
467
|
catch (err) {
|
|
378
|
-
this.
|
|
468
|
+
this.log.warn("cannot enqueue conversation title", { conversationId, err });
|
|
379
469
|
}
|
|
380
470
|
}
|
|
381
|
-
|
|
471
|
+
/** Starts consuming (worker role only): `worker` is the `@Processor` worker of {@link TITLE_QUEUE}. */
|
|
472
|
+
startWorker(worker) {
|
|
382
473
|
if (this.worker || this.closed)
|
|
383
474
|
return;
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
stalledInterval: stalledIntervalMs,
|
|
391
|
-
maxStalledCount: 1,
|
|
392
|
-
});
|
|
393
|
-
this.worker.on("error", (err) => this.d.log.error("title worker error", { err }));
|
|
475
|
+
this.worker = worker;
|
|
476
|
+
void worker.run().catch((err) => this.log.error("title worker error", { err }));
|
|
477
|
+
}
|
|
478
|
+
/** The worker's `error` event. */
|
|
479
|
+
onError(err) {
|
|
480
|
+
this.log.error("title worker error", { err });
|
|
394
481
|
}
|
|
482
|
+
/** One title job (the `@Processor` calls it). */
|
|
395
483
|
async process(j) {
|
|
396
|
-
await
|
|
484
|
+
await this.generator.run(j.data.conversationId, j.data.attempt, this.stopping.signal);
|
|
397
485
|
}
|
|
486
|
+
/** Stops: no more enqueues, the call in flight is aborted, the worker closes. */
|
|
398
487
|
async stop() {
|
|
399
488
|
this.closed = true;
|
|
400
489
|
this.stopping.abort();
|
|
401
490
|
const w = this.worker;
|
|
402
491
|
this.worker = undefined;
|
|
403
492
|
await w?.close().catch(() => { });
|
|
404
|
-
const q = this.queue;
|
|
405
|
-
this.queue = undefined;
|
|
406
|
-
await q?.close().catch(() => { });
|
|
407
|
-
for (const c of [this.workerConn, this.queueConn]) {
|
|
408
|
-
if (c)
|
|
409
|
-
await c.quit().catch(() => c.disconnect());
|
|
410
|
-
}
|
|
411
|
-
this.workerConn = undefined;
|
|
412
|
-
this.queueConn = undefined;
|
|
413
493
|
}
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
}
|
|
494
|
+
};
|
|
495
|
+
TitleQueue = __decorate([
|
|
496
|
+
Injectable(),
|
|
497
|
+
__param(0, Inject(KernelDb)),
|
|
498
|
+
__param(1, Inject(getQueueToken(TITLE_QUEUE))),
|
|
499
|
+
__param(2, Inject(TitleGenerator)),
|
|
500
|
+
__param(3, Inject(KERNEL_LOGGER))
|
|
501
|
+
], TitleQueue);
|
|
502
|
+
export { TitleQueue };
|
|
503
|
+
/** Conversation titles: the queue and the job (consumed on the worker role). */
|
|
504
|
+
let TitlesModule = class TitlesModule {
|
|
505
|
+
};
|
|
506
|
+
TitlesModule = __decorate([
|
|
507
|
+
Module({
|
|
508
|
+
imports: [
|
|
509
|
+
EventLogModule,
|
|
510
|
+
ModelsModule,
|
|
511
|
+
ExtensionsModule,
|
|
512
|
+
UsageReportModule,
|
|
513
|
+
QueueModule.registerQueue(TITLE_QUEUE),
|
|
514
|
+
],
|
|
515
|
+
providers: [TitleGenerator, TitleQueue],
|
|
516
|
+
exports: [TitleQueue],
|
|
517
|
+
})
|
|
518
|
+
], TitlesModule);
|
|
519
|
+
export { TitlesModule };
|
package/dist/ctx/bus.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { runOutsideTransaction } from "../infra/database/transaction-host.js";
|
|
2
|
+
import { withoutLogContext } from "../log-context.js";
|
|
1
3
|
import { assertNamespace } from "./namespace.js";
|
|
2
4
|
/** 未注入 logger 时的兜底:输出到 stderr。 */
|
|
3
5
|
const consoleLog = {
|
|
@@ -19,9 +21,13 @@ export function createBusSubscriber(subFactory, log = consoleLog) {
|
|
|
19
21
|
return conn;
|
|
20
22
|
const c = subFactory();
|
|
21
23
|
c.on("message", (channel, message) => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
// the connection's callbacks carry the async context of the first subscribe (a request's
|
|
25
|
+
// log fields, possibly an open transaction): every handler starts from an empty one
|
|
26
|
+
runOutsideTransaction(() => withoutLogContext(() => {
|
|
27
|
+
for (const h of [...(channels.get(channel)?.handlers ?? [])]) {
|
|
28
|
+
invokeIsolated(log, channel, () => h(message));
|
|
29
|
+
}
|
|
30
|
+
}));
|
|
25
31
|
});
|
|
26
32
|
c.on("error", (err) => log.error("bus subscriber connection error", { err }));
|
|
27
33
|
conn = c;
|
package/dist/ctx/create-ctx.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ import type { Redis } from "ioredis";
|
|
|
3
3
|
import { Kysely } from "kysely";
|
|
4
4
|
import { type RegisteredHook } from "../extensions/hooks.js";
|
|
5
5
|
import { RegistrationLedger } from "../extensions/ledger.js";
|
|
6
|
+
import type { LockService } from "../infra/lock/lock.service.js";
|
|
7
|
+
import type { EmbedTokens } from "../ui/embed-token.js";
|
|
6
8
|
import { type UiActionHandler, type UiRender } from "../ui/registry.js";
|
|
7
9
|
import { type BusSubscriber } from "./bus.js";
|
|
8
10
|
import { type Keyring } from "./secrets.js";
|
|
@@ -13,9 +15,13 @@ export interface KernelDeps {
|
|
|
13
15
|
/** PG 建立连接的超时(迁移器的独立连接使用)。 */
|
|
14
16
|
connectTimeoutMs?: number;
|
|
15
17
|
redis: Redis;
|
|
18
|
+
/** The kernel's lock primitives (`ctx.lock`, the dedupe markers). */
|
|
19
|
+
locks: Pick<LockService, "lease" | "renew" | "releaseIf">;
|
|
16
20
|
busSubscriber: BusSubscriber;
|
|
17
21
|
redisUrl: string;
|
|
18
22
|
keyring: Keyring;
|
|
23
|
+
/** Verifies embed tokens (`ctx.ui` embed requests; the one `EmbedTokens` provider). */
|
|
24
|
+
embedTokens: Pick<EmbedTokens, "verify">;
|
|
19
25
|
runWorkers: boolean;
|
|
20
26
|
/** 内核 logger(`debug` 可选:插件 Logger 没有它,测试可不给)。 */
|
|
21
27
|
log: Logger & {
|
package/dist/ctx/create-ctx.js
CHANGED
|
@@ -6,8 +6,7 @@ import { enabledExtensionsQuery, isExtensionEnabled } from "../extensions/enable
|
|
|
6
6
|
import { checkHookRegistration } from "../extensions/hooks.js";
|
|
7
7
|
import { RegistrationLedger } from "../extensions/ledger.js";
|
|
8
8
|
import { audit } from "../identity/audit.js";
|
|
9
|
-
import {
|
|
10
|
-
import { EmbedTokens } from "../ui/embed-token.js";
|
|
9
|
+
import { PrefixedStorage } from "../storage/storage.service.js";
|
|
11
10
|
import { canUsePlace, orgUiTopic, PluginUiRegistration, } from "../ui/registry.js";
|
|
12
11
|
import { createBus } from "./bus.js";
|
|
13
12
|
import { createKv } from "./kv.js";
|
|
@@ -58,16 +57,15 @@ async function invalidateTargetOk(db, plugin, orgId, conversationId) {
|
|
|
58
57
|
/** 越权审计去重键的 TTL:同一插件同一项在此期间只记一次。 */
|
|
59
58
|
const DENIAL_DEDUPE_TTL_SECONDS = 30 * 24 * 3600;
|
|
60
59
|
/**
|
|
61
|
-
* Records one `extension.permission_denied` audit, deduplicated per (extension, item) through
|
|
62
|
-
*
|
|
60
|
+
* Records one `extension.permission_denied` audit, deduplicated per (extension, item) through a
|
|
61
|
+
* Redis marker set unless present (`LockService.lease`; once across replicas). When the audit write fails, the dedup key is removed (the next
|
|
63
62
|
* violation tries again) and a warning is logged; nothing is thrown to the extension (it already got
|
|
64
63
|
* an ExtensionPermissionError).
|
|
65
64
|
*/
|
|
66
65
|
async function recordDenial(deps, plugin, item) {
|
|
67
66
|
const key = `capk:plugin-permission-denied:${plugin}:${item}`;
|
|
68
67
|
try {
|
|
69
|
-
|
|
70
|
-
if (first !== "OK")
|
|
68
|
+
if (!(await deps.locks.lease(key, "1", DENIAL_DEDUPE_TTL_SECONDS * 1000)))
|
|
71
69
|
return;
|
|
72
70
|
try {
|
|
73
71
|
await audit(kernelDb(deps.db), {
|
|
@@ -195,7 +193,7 @@ export function createExtensionContext(deps, manifest, deploymentConfig, extensi
|
|
|
195
193
|
const lifecycle = new AbortController();
|
|
196
194
|
/** 撤销时队列 worker 排空的截止时刻(epoch 毫秒);undefined = 一直等(停机路径)。 */
|
|
197
195
|
let drainDeadline;
|
|
198
|
-
const lock = createLock(deps.
|
|
196
|
+
const lock = createLock(deps.locks, name);
|
|
199
197
|
const tag = (fields) => ({ ...fields, plugin: name });
|
|
200
198
|
let closing;
|
|
201
199
|
const perms = manifest.permissions ?? {};
|
|
@@ -214,7 +212,7 @@ export function createExtensionContext(deps, manifest, deploymentConfig, extensi
|
|
|
214
212
|
// 键加前缀 plugins/<name>/<orgId>/。没有提供方时各方法 reject storage.unavailable
|
|
215
213
|
// (宿主不会加载这样的插件,见 approvals.ts;单独构造 ctx 的测试会走到这里)
|
|
216
214
|
const storageApi = perms.storage
|
|
217
|
-
? new
|
|
215
|
+
? new PrefixedStorage({
|
|
218
216
|
provider: () => extensionPointAccess.providers(OBJECT_STORE_EXTENSION_POINT)[0]?.impl,
|
|
219
217
|
plugins: async () => [name],
|
|
220
218
|
}).forPlugin(name)
|
|
@@ -229,7 +227,7 @@ export function createExtensionContext(deps, manifest, deploymentConfig, extensi
|
|
|
229
227
|
...(manifest.optional ?? []),
|
|
230
228
|
]);
|
|
231
229
|
const uiReg = new PluginUiRegistration(manifest, deny);
|
|
232
|
-
const embedTokens =
|
|
230
|
+
const embedTokens = deps.embedTokens;
|
|
233
231
|
const uiPlaces = new Map((manifest.ui ?? []).map((c) => [c.id, c.place]));
|
|
234
232
|
/** 校验能力可取用(非 brokered、已在清单声明),返回其登记信息。 */
|
|
235
233
|
const checkExtensionPoint = (ref) => {
|
package/dist/ctx/lock.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { ExtensionContext } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import type {
|
|
3
|
-
/**
|
|
4
|
-
|
|
2
|
+
import type { LockService } from "../infra/lock/lock.service.js";
|
|
3
|
+
/**
|
|
4
|
+
* Builds a namespaced `ctx.lock` on the kernel's lock primitives (`LockService.lease / renew /
|
|
5
|
+
* releaseIf`): key `cap:<namespace>:lock:<key>`, a random token per acquisition, so renew and
|
|
6
|
+
* release only touch a lock this holder still owns. The extension renews it itself (no timer).
|
|
7
|
+
*/
|
|
8
|
+
export declare function createLock(locks: Pick<LockService, "lease" | "renew" | "releaseIf">, namespace: string): ExtensionContext["lock"];
|
package/dist/ctx/lock.js
CHANGED
|
@@ -1,19 +1,11 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { assertNamespace } from "./namespace.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const RELEASE = `
|
|
10
|
-
if redis.call('GET', KEYS[1]) == ARGV[1] then
|
|
11
|
-
return redis.call('DEL', KEYS[1])
|
|
12
|
-
end
|
|
13
|
-
return 0
|
|
14
|
-
`;
|
|
15
|
-
/** 创建带命名空间的 ctx.lock:键为 `cap:<namespace>:lock:<key>`,token 比对保证只操作自己持有的锁。 */
|
|
16
|
-
export function createLock(redis, namespace) {
|
|
3
|
+
/**
|
|
4
|
+
* Builds a namespaced `ctx.lock` on the kernel's lock primitives (`LockService.lease / renew /
|
|
5
|
+
* releaseIf`): key `cap:<namespace>:lock:<key>`, a random token per acquisition, so renew and
|
|
6
|
+
* release only touch a lock this holder still owns. The extension renews it itself (no timer).
|
|
7
|
+
*/
|
|
8
|
+
export function createLock(locks, namespace) {
|
|
17
9
|
assertNamespace(namespace);
|
|
18
10
|
return {
|
|
19
11
|
async acquire(key, opts) {
|
|
@@ -23,15 +15,12 @@ export function createLock(redis, namespace) {
|
|
|
23
15
|
}
|
|
24
16
|
const redisKey = `cap:${namespace}:lock:${key}`;
|
|
25
17
|
const token = randomUUID();
|
|
26
|
-
|
|
27
|
-
if (ok !== "OK")
|
|
18
|
+
if (!(await locks.lease(redisKey, token, ttlMs)))
|
|
28
19
|
return null;
|
|
29
20
|
return {
|
|
30
|
-
|
|
31
|
-
return Number(await redis.eval(RENEW, 1, redisKey, token, ttlMs)) === 1;
|
|
32
|
-
},
|
|
21
|
+
renew: () => locks.renew(redisKey, token, ttlMs),
|
|
33
22
|
async release() {
|
|
34
|
-
await
|
|
23
|
+
await locks.releaseIf(redisKey, token);
|
|
35
24
|
},
|
|
36
25
|
};
|
|
37
26
|
},
|
package/dist/ctx/queue.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Queue, Worker } from "bullmq";
|
|
2
2
|
import { Redis } from "ioredis";
|
|
3
|
+
import { withJobContext } from "../log-context.js";
|
|
3
4
|
import { assertNamespace } from "./namespace.js";
|
|
4
5
|
/** 未注入 logger 时的兜底:输出到 stderr。 */
|
|
5
6
|
const consoleLog = {
|
|
@@ -60,7 +61,7 @@ export function createQueue(redisUrl, namespace, opts) {
|
|
|
60
61
|
return;
|
|
61
62
|
const st = { n: 0, idle: [] };
|
|
62
63
|
active.set(name, st);
|
|
63
|
-
const worker = new Worker(queueName(name), async (
|
|
64
|
+
const worker = new Worker(queueName(name), (job) => withJobContext(queueName(name), job, async () => {
|
|
64
65
|
st.n += 1;
|
|
65
66
|
try {
|
|
66
67
|
await handler(job.data);
|
|
@@ -71,7 +72,7 @@ export function createQueue(redisUrl, namespace, opts) {
|
|
|
71
72
|
for (const w of st.idle.splice(0))
|
|
72
73
|
w();
|
|
73
74
|
}
|
|
74
|
-
},
|
|
75
|
+
}),
|
|
75
76
|
// 撤销插件实例时到点仍未完成的任务被强制留在队列里(锁过期后按 stalled 交回),新实例再执行一次:
|
|
76
77
|
// 任务是至少一次。stalled 次数放宽到 3,连续几次撤销 / 升级不至于把任务判为失败
|
|
77
78
|
{ connection: newConn(), concurrency: o?.concurrency ?? 1, maxStalledCount: 3 });
|
package/dist/ctx/secrets.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { ExtensionContext } from "@capybara-hq/plugin-sdk";
|
|
2
2
|
import type { Kysely } from "kysely";
|
|
3
|
+
import type { KernelDb } from "../infra/database/kernel-db.js";
|
|
4
|
+
import type { TransactionHost } from "../infra/database/transaction-host.js";
|
|
3
5
|
/** 主密钥环:current 用于新包装,previous 仅用于解包。原始密钥只存在于闭包内。 */
|
|
4
6
|
export interface Keyring {
|
|
5
7
|
readonly currentId: string;
|
|
@@ -40,6 +42,12 @@ export type KernelSecrets = ExtensionContext["secrets"] & {
|
|
|
40
42
|
* `db` 可以是 Kysely 事务:此时读写(含首次创建组织数据密钥)都在该事务内。
|
|
41
43
|
*/
|
|
42
44
|
export declare function createSecrets(db: AnyDb, keyring: Keyring, namespace: string): KernelSecrets;
|
|
43
|
-
/**
|
|
44
|
-
|
|
45
|
+
/**
|
|
46
|
+
* 把非当前主密钥包装的数据密钥改用当前主密钥重新包装,返回处理条数。One transaction over the given
|
|
47
|
+
* handles (`KernelDb` + its `TransactionHost`, as `DatabaseModule` provides them).
|
|
48
|
+
*/
|
|
49
|
+
export declare function rewrapDataKeys(handles: {
|
|
50
|
+
db: Pick<KernelDb, "db">;
|
|
51
|
+
txHost: Pick<TransactionHost, "run">;
|
|
52
|
+
}, keyring: Keyring): Promise<number>;
|
|
45
53
|
export {};
|
package/dist/ctx/secrets.js
CHANGED
|
@@ -142,9 +142,13 @@ export function createSecrets(db, keyring, namespace) {
|
|
|
142
142
|
},
|
|
143
143
|
};
|
|
144
144
|
}
|
|
145
|
-
/**
|
|
146
|
-
|
|
147
|
-
|
|
145
|
+
/**
|
|
146
|
+
* 把非当前主密钥包装的数据密钥改用当前主密钥重新包装,返回处理条数。One transaction over the given
|
|
147
|
+
* handles (`KernelDb` + its `TransactionHost`, as `DatabaseModule` provides them).
|
|
148
|
+
*/
|
|
149
|
+
export async function rewrapDataKeys(handles, keyring) {
|
|
150
|
+
return handles.txHost.run(async () => {
|
|
151
|
+
const trx = handles.db.db;
|
|
148
152
|
const rows = await trx
|
|
149
153
|
.withSchema("capybara")
|
|
150
154
|
.selectFrom("org_data_keys")
|
|
@@ -1116,7 +1116,7 @@ export interface PluginInstallComponentsTable {
|
|
|
1116
1116
|
*/
|
|
1117
1117
|
dropped: ColumnType<boolean, boolean | undefined, boolean>;
|
|
1118
1118
|
}
|
|
1119
|
-
export type
|
|
1119
|
+
export type KernelSchemaDb = Kysely<KernelDatabase>;
|
|
1120
1120
|
/** 把无类型的 Kysely 实例收窄成内核 schema 视图(`capybara`)。 */
|
|
1121
|
-
export declare function kernelDb(db: Kysely<any>):
|
|
1121
|
+
export declare function kernelDb(db: Kysely<any>): KernelSchemaDb;
|
|
1122
1122
|
export {};
|
package/dist/db/pool.d.ts
CHANGED
|
@@ -18,4 +18,9 @@ export declare function pgConnectOptions(cfg: {
|
|
|
18
18
|
*/
|
|
19
19
|
export declare function createDb(url: string, poolMax: number, onError?: (err: Error) => void, opts?: {
|
|
20
20
|
connectTimeoutMs?: number | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Error of a client while it is checked out: pg-pool drops its own listener on checkout, so
|
|
23
|
+
* without this a backend killed between two statements is an uncaught exception.
|
|
24
|
+
*/
|
|
25
|
+
onClientError?: ((err: Error) => void) | undefined;
|
|
21
26
|
}): Kysely<any>;
|
package/dist/db/pool.js
CHANGED
|
@@ -24,5 +24,6 @@ export function createDb(url, poolMax, onError = (err) => console.error("[db] id
|
|
|
24
24
|
...pgConnectOptions(opts),
|
|
25
25
|
});
|
|
26
26
|
pool.on("error", onError);
|
|
27
|
+
pool.on("connect", (client) => client.on("error", opts.onClientError ?? onError));
|
|
27
28
|
return new Kysely({ dialect: new PostgresDialect({ pool }) });
|
|
28
29
|
}
|
package/dist/errors.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export declare const ERROR_CODES: {
|
|
|
8
8
|
readonly validation_failed: 400;
|
|
9
9
|
readonly forbidden: 403;
|
|
10
10
|
readonly conflict: 409;
|
|
11
|
+
readonly "lock.acquire_failed": 409;
|
|
11
12
|
readonly payload_too_large: 413;
|
|
12
13
|
readonly unsupported_media_type: 415;
|
|
13
14
|
readonly rate_limited: 429;
|
|
@@ -61,6 +62,7 @@ export declare const ERROR_CODES: {
|
|
|
61
62
|
readonly "extension.not_disabled": 409;
|
|
62
63
|
readonly "packages.npm_failed": 502;
|
|
63
64
|
readonly "bootstrap.integrity_mismatch": 500;
|
|
65
|
+
readonly "bootstrap.download_failed": 502;
|
|
64
66
|
readonly "bootstrap.missing_file": 500;
|
|
65
67
|
readonly "catalog.invalid_manifest": 422;
|
|
66
68
|
readonly "catalog.legacy_format": 422;
|
package/dist/errors.js
CHANGED
|
@@ -8,6 +8,7 @@ export const ERROR_CODES = {
|
|
|
8
8
|
validation_failed: 400,
|
|
9
9
|
forbidden: 403,
|
|
10
10
|
conflict: 409,
|
|
11
|
+
"lock.acquire_failed": 409,
|
|
11
12
|
payload_too_large: 413,
|
|
12
13
|
unsupported_media_type: 415,
|
|
13
14
|
rate_limited: 429,
|
|
@@ -61,6 +62,7 @@ export const ERROR_CODES = {
|
|
|
61
62
|
"extension.not_disabled": 409,
|
|
62
63
|
"packages.npm_failed": 502,
|
|
63
64
|
"bootstrap.integrity_mismatch": 500,
|
|
65
|
+
"bootstrap.download_failed": 502,
|
|
64
66
|
"bootstrap.missing_file": 500,
|
|
65
67
|
"catalog.invalid_manifest": 422,
|
|
66
68
|
"catalog.legacy_format": 422,
|