@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,10 +1,14 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type SandboxHandle, type SandboxProvider } from "@capybara-hq/plugin-sdk";
|
|
2
2
|
import type { Redis } from "ioredis";
|
|
3
3
|
import { type Selectable } from "kysely";
|
|
4
4
|
import { type KernelConfig } from "../config/schema.js";
|
|
5
|
-
import type {
|
|
5
|
+
import type { SandboxesTable } from "../db/kernel-schema.js";
|
|
6
6
|
import { ApiError } from "../errors.js";
|
|
7
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
8
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
9
|
+
import type { KernelLogger } from "../log.js";
|
|
7
10
|
import { SandboxLeases, type SandboxPathLease } from "./leases.js";
|
|
11
|
+
import { type SandboxProviderEntry, SandboxProviders } from "./providers.js";
|
|
8
12
|
export { SANDBOX_BUSY_PREFIX, SANDBOX_LOCK_PREFIX, SANDBOX_LOCK_TTL_MS, SandboxLockLostError, sandboxBusy, } from "./leases.js";
|
|
9
13
|
/** `withSandbox` 回调的第三个参数。 */
|
|
10
14
|
export interface SandboxUseInfo {
|
|
@@ -13,27 +17,7 @@ export interface SandboxUseInfo {
|
|
|
13
17
|
/** 之前有过实例、但已不在(被销毁、提供方返回 gone、换了提供方),这是重建的空沙箱。 */
|
|
14
18
|
recreated: boolean;
|
|
15
19
|
}
|
|
16
|
-
|
|
17
|
-
export interface SandboxProviderEntry {
|
|
18
|
-
plugin: string;
|
|
19
|
-
impl: SandboxProvider;
|
|
20
|
-
}
|
|
21
|
-
export interface SandboxServiceDeps {
|
|
22
|
-
db: KernelDb;
|
|
23
|
-
redis: Redis;
|
|
24
|
-
/** 每次调用时取(提供方在插件加载后才就绪);没有提供方为 undefined。 */
|
|
25
|
-
provider: () => SandboxProviderEntry | undefined;
|
|
26
|
-
/** 按插件名找仍加载着的提供方(销毁换提供方前的旧实例);省略则视为找不到。 */
|
|
27
|
-
lookup?: (plugin: string) => SandboxProvider | undefined;
|
|
28
|
-
config: () => Pick<KernelConfig, "sandbox">;
|
|
29
|
-
log: Pick<Logger, "info" | "warn">;
|
|
30
|
-
/** Poll interval while waiting for a lease (ms), default 100; tests make it shorter. */
|
|
31
|
-
lockPollMs?: number;
|
|
32
|
-
/** Lease TTL (ms), default {@link SANDBOX_LOCK_TTL_MS}; tests make it shorter to notice a lost lease quickly. */
|
|
33
|
-
lockTtlMs?: number;
|
|
34
|
-
/** Lease implementation, default a {@link SandboxLeases} on `redis` (tests may wrap one). */
|
|
35
|
-
leases?: SandboxLeases;
|
|
36
|
-
}
|
|
20
|
+
export type { SandboxProviderEntry } from "./providers.js";
|
|
37
21
|
type Row = Selectable<SandboxesTable>;
|
|
38
22
|
/**
|
|
39
23
|
* One instance of a conversation's sandbox: its handle and the row's `created_at`, which the
|
|
@@ -85,7 +69,7 @@ export declare const sandboxUnavailable: () => ApiError;
|
|
|
85
69
|
* first, so a stale exclusive holder's later writes fail. Shared holders write nothing else but
|
|
86
70
|
* `last_used_at` (monotonic). A lost
|
|
87
71
|
* lease aborts the signal passed to `fn` and to maintenance provider calls.
|
|
88
|
-
* -
|
|
72
|
+
* - **Suspension and destruction**: the sweeps (`SandboxSweepJobs`, crons) call {@link suspendIdle} / {@link destroyInactive};它们只试一次 exclusive
|
|
89
73
|
* lease and skip a sandbox with any holder; a sandbox past `maxRunningMinutes` gets the intent for
|
|
90
74
|
* a short window (about a second) so the suspension can get in when its commands end.
|
|
91
75
|
* - **透明恢复**:已休眠的在下次使用时恢复;恢复返回 `gone`、已销毁、记录的提供方不是当前提供方、
|
|
@@ -108,10 +92,21 @@ export declare const sandboxUnavailable: () => ApiError;
|
|
|
108
92
|
* 没有提供方时 {@link available} 为 false,使用时抛 `sandbox.unavailable`(503)。本身无进程内状态,可多副本共用。
|
|
109
93
|
*/
|
|
110
94
|
export declare class SandboxService {
|
|
111
|
-
private readonly
|
|
95
|
+
private readonly db;
|
|
96
|
+
/** The record of the instance each holder last used (`capk:sandbox-seen:…`). */
|
|
97
|
+
private readonly redis;
|
|
112
98
|
private readonly leases;
|
|
113
|
-
|
|
114
|
-
|
|
99
|
+
/** The `sandbox@1` provider (read at every call: providers are ready after the extension load). */
|
|
100
|
+
private readonly providers;
|
|
101
|
+
private readonly config;
|
|
102
|
+
private readonly log;
|
|
103
|
+
constructor(db: KernelDb,
|
|
104
|
+
/** The record of the instance each holder last used (`capk:sandbox-seen:…`). */
|
|
105
|
+
redis: Pick<Redis, "set">, leases: SandboxLeases,
|
|
106
|
+
/** The `sandbox@1` provider (read at every call: providers are ready after the extension load). */
|
|
107
|
+
providers: Pick<SandboxProviders, "current" | "lookup">, config: Pick<KernelConfigService, "get">, log: Pick<KernelLogger, "info" | "warn">);
|
|
108
|
+
/** Poll interval while waiting for a lease (the leases' own). */
|
|
109
|
+
private get pollMs();
|
|
115
110
|
/** 是否有沙箱提供方。 */
|
|
116
111
|
get available(): boolean;
|
|
117
112
|
/** Concurrent holders the provider gets ({@link sandboxConcurrency} with the current config). */
|
|
@@ -192,12 +187,12 @@ export declare class SandboxService {
|
|
|
192
187
|
/**
|
|
193
188
|
* 休眠:空闲超过 `suspendAfterIdleMinutes`、或连续运行超过 `maxRunningMinutes` 的运行中沙箱。
|
|
194
189
|
* Skips a sandbox with any holder; one past `maxRunningMinutes` gets the intent for one poll
|
|
195
|
-
* window (about a second) first.
|
|
190
|
+
* window (about a second) first. 返回本次休眠的个数。Called every minute by the `sandbox-suspend-idle` cron.
|
|
196
191
|
*/
|
|
197
192
|
suspendIdle(now: Date): Promise<number>;
|
|
198
193
|
/**
|
|
199
194
|
* 销毁:超过 `destroyAfterInactiveDays` 没用过的、所属组织已删除的、对话已不存在的沙箱
|
|
200
|
-
* (对话已不存在的,销毁后删掉记录)。有 holder
|
|
195
|
+
* (对话已不存在的,销毁后删掉记录)。有 holder 的跳过。返回本次销毁的个数。Called hourly by the `sandbox-destroy-inactive` cron.
|
|
201
196
|
*/
|
|
202
197
|
destroyInactive(now: Date): Promise<number>;
|
|
203
198
|
/**
|
|
@@ -1,12 +1,26 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
1
10
|
import { randomUUID } from "node:crypto";
|
|
2
11
|
import { isSandboxGoneError, } from "@capybara-hq/plugin-sdk";
|
|
12
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
3
13
|
import { sql, } from "kysely";
|
|
4
14
|
import { DEFAULT_MAX_COMMAND_SECONDS, DEFAULT_MAX_RUN_SECONDS, } from "../config/schema.js";
|
|
5
15
|
import { ApiError } from "../errors.js";
|
|
6
16
|
import { readSandboxLimitOverride } from "../identity/settings.js";
|
|
17
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
18
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
19
|
+
import { KERNEL_LOGGER, REDIS } from "../infra/tokens.js";
|
|
7
20
|
import { effectiveSandboxEgress, effectiveSandboxLimits, readOrgSettings, } from "../orgs/settings.service.js";
|
|
8
|
-
import { canonicalJson } from "../tools/
|
|
9
|
-
import {
|
|
21
|
+
import { canonicalJson } from "../tools/canonical-json.js";
|
|
22
|
+
import { SandboxLeases, SandboxLockLostError, sandboxBusy, } from "./leases.js";
|
|
23
|
+
import { SandboxProviders } from "./providers.js";
|
|
10
24
|
// Moved to leases.ts (phase C); re-exported for existing importers
|
|
11
25
|
export { SANDBOX_BUSY_PREFIX, SANDBOX_LOCK_PREFIX, SANDBOX_LOCK_TTL_MS, SandboxLockLostError, sandboxBusy, } from "./leases.js";
|
|
12
26
|
/** Margin (ms) of a holder record's TTL beyond the longest command: by then the in-sandbox limit has ended its commands. */
|
|
@@ -137,7 +151,7 @@ async function inPool(items, limit, fn) {
|
|
|
137
151
|
* first, so a stale exclusive holder's later writes fail. Shared holders write nothing else but
|
|
138
152
|
* `last_used_at` (monotonic). A lost
|
|
139
153
|
* lease aborts the signal passed to `fn` and to maintenance provider calls.
|
|
140
|
-
* -
|
|
154
|
+
* - **Suspension and destruction**: the sweeps (`SandboxSweepJobs`, crons) call {@link suspendIdle} / {@link destroyInactive};它们只试一次 exclusive
|
|
141
155
|
* lease and skip a sandbox with any holder; a sandbox past `maxRunningMinutes` gets the intent for
|
|
142
156
|
* a short window (about a second) so the suspension can get in when its commands end.
|
|
143
157
|
* - **透明恢复**:已休眠的在下次使用时恢复;恢复返回 `gone`、已销毁、记录的提供方不是当前提供方、
|
|
@@ -159,36 +173,43 @@ async function inPool(items, limit, fn) {
|
|
|
159
173
|
* 换提供方会泄漏旧实例:新提供方销毁不了旧提供方的实例,只有旧提供方仍加载时才能清理(记在 `prev_*` 列)。
|
|
160
174
|
* 没有提供方时 {@link available} 为 false,使用时抛 `sandbox.unavailable`(503)。本身无进程内状态,可多副本共用。
|
|
161
175
|
*/
|
|
162
|
-
|
|
163
|
-
|
|
176
|
+
let SandboxService = class SandboxService {
|
|
177
|
+
db;
|
|
178
|
+
redis;
|
|
164
179
|
leases;
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
180
|
+
providers;
|
|
181
|
+
config;
|
|
182
|
+
log;
|
|
183
|
+
constructor(db,
|
|
184
|
+
/** The record of the instance each holder last used (`capk:sandbox-seen:…`). */
|
|
185
|
+
redis, leases,
|
|
186
|
+
/** The `sandbox@1` provider (read at every call: providers are ready after the extension load). */
|
|
187
|
+
providers, config, log) {
|
|
188
|
+
this.db = db;
|
|
189
|
+
this.redis = redis;
|
|
190
|
+
this.leases = leases;
|
|
191
|
+
this.providers = providers;
|
|
192
|
+
this.config = config;
|
|
193
|
+
this.log = log;
|
|
194
|
+
}
|
|
195
|
+
/** Poll interval while waiting for a lease (the leases' own). */
|
|
196
|
+
get pollMs() {
|
|
197
|
+
return this.leases.pollMs;
|
|
177
198
|
}
|
|
178
199
|
/** 是否有沙箱提供方。 */
|
|
179
200
|
get available() {
|
|
180
|
-
return this.
|
|
201
|
+
return this.providers.current() !== undefined;
|
|
181
202
|
}
|
|
182
203
|
/** Concurrent holders the provider gets ({@link sandboxConcurrency} with the current config). */
|
|
183
204
|
effectiveCap(p) {
|
|
184
|
-
return sandboxConcurrency(p.impl, this.
|
|
205
|
+
return sandboxConcurrency(p.impl, this.config.get().sandbox.maxConcurrentCommands);
|
|
185
206
|
}
|
|
186
207
|
/**
|
|
187
208
|
* 该对话沙箱的对外状态(只读,不拿锁):`running` / `suspended` 与最近使用时间。
|
|
188
209
|
* 还没有、已销毁、或停在 `creating`(正在创建,或创建失败等下次使用重建)的都返回 null(界面显示「未创建」)。
|
|
189
210
|
*/
|
|
190
211
|
async status(orgId, conversationId) {
|
|
191
|
-
const row = await this.
|
|
212
|
+
const row = await this.db
|
|
192
213
|
.selectFrom("sandboxes")
|
|
193
214
|
.select(["status", "last_used_at"])
|
|
194
215
|
.where("conversation_id", "=", conversationId)
|
|
@@ -231,7 +252,7 @@ export class SandboxService {
|
|
|
231
252
|
catch (err) {
|
|
232
253
|
if (!isSandboxGoneError(err))
|
|
233
254
|
throw err;
|
|
234
|
-
this.
|
|
255
|
+
this.log.info("sandbox instance is gone during use; recreating", {
|
|
235
256
|
conversationId: ctx.conversationId,
|
|
236
257
|
});
|
|
237
258
|
const gone = { handle: e.handle, createdAt: e.createdAt };
|
|
@@ -252,14 +273,14 @@ export class SandboxService {
|
|
|
252
273
|
*/
|
|
253
274
|
async seenBy(conversationId, holder, e) {
|
|
254
275
|
try {
|
|
255
|
-
const ttl = (this.
|
|
256
|
-
const prev = await this.
|
|
276
|
+
const ttl = (this.config.get().sandbox.limits.destroyAfterInactiveDays + 1) * 86_400;
|
|
277
|
+
const prev = await this.redis.set(`capk:sandbox-seen:${conversationId}:${holder}`, String(e.createdAt), "EX", ttl, "GET");
|
|
257
278
|
if (prev !== null && prev !== String(e.createdAt) && !e.info.recreated) {
|
|
258
279
|
return { ...e, info: { fresh: e.info.fresh, recreated: true } };
|
|
259
280
|
}
|
|
260
281
|
}
|
|
261
282
|
catch (err) {
|
|
262
|
-
this.
|
|
283
|
+
this.log.warn("cannot record the sandbox instance a holder uses", {
|
|
263
284
|
conversationId,
|
|
264
285
|
holder,
|
|
265
286
|
err,
|
|
@@ -283,7 +304,7 @@ export class SandboxService {
|
|
|
283
304
|
async enter(ctx, p, signal, gone) {
|
|
284
305
|
const conv = ctx.conversationId;
|
|
285
306
|
const cap = this.effectiveCap(p);
|
|
286
|
-
const deadline = Date.now() + this.
|
|
307
|
+
const deadline = Date.now() + this.config.get().sandbox.lockWaitSeconds * 1000;
|
|
287
308
|
const token = randomUUID();
|
|
288
309
|
let intent = false;
|
|
289
310
|
try {
|
|
@@ -322,10 +343,10 @@ export class SandboxService {
|
|
|
322
343
|
async clearIntent(conv, token) {
|
|
323
344
|
await this.leases
|
|
324
345
|
.clearIntent(conv, token)
|
|
325
|
-
.catch((err) => this.
|
|
346
|
+
.catch((err) => this.log.warn("cannot clear sandbox intent", { conversationId: conv, err }));
|
|
326
347
|
}
|
|
327
348
|
async readRow(ctx) {
|
|
328
|
-
const row = await this.
|
|
349
|
+
const row = await this.db
|
|
329
350
|
.selectFrom("sandboxes")
|
|
330
351
|
.selectAll()
|
|
331
352
|
.where("conversation_id", "=", ctx.conversationId)
|
|
@@ -358,7 +379,7 @@ export class SandboxService {
|
|
|
358
379
|
// Bump the fence as every acquisition did before phase C: an exclusive holder whose lease
|
|
359
380
|
// expired unnoticed (a stalled sweep) then fails its next write instead of suspending or
|
|
360
381
|
// destroying the instance under this holder. Shared holders never compare it.
|
|
361
|
-
await this.
|
|
382
|
+
await this.db
|
|
362
383
|
.updateTable("sandboxes")
|
|
363
384
|
.set((eb) => ({ generation: eb("generation", "+", 1) }))
|
|
364
385
|
.where("conversation_id", "=", conv)
|
|
@@ -379,7 +400,7 @@ export class SandboxService {
|
|
|
379
400
|
await this.killLeftovers(conv, row.handle, p, sig, "takeover");
|
|
380
401
|
}
|
|
381
402
|
else {
|
|
382
|
-
this.
|
|
403
|
+
this.log.warn("cannot kill leftover sandbox commands: the provider has no killTagged and another holder is live; the in-sandbox time limit ends them", { conversationId: conv });
|
|
383
404
|
}
|
|
384
405
|
}
|
|
385
406
|
return {
|
|
@@ -423,24 +444,24 @@ export class SandboxService {
|
|
|
423
444
|
async leave(conv, e) {
|
|
424
445
|
await this.unregister(conv, e.lease.token);
|
|
425
446
|
await e.lease.release();
|
|
426
|
-
await this.
|
|
447
|
+
await this.db
|
|
427
448
|
.updateTable("sandboxes")
|
|
428
449
|
.set({ last_used_at: sql `GREATEST(last_used_at, now())` })
|
|
429
450
|
.where("conversation_id", "=", conv)
|
|
430
451
|
.where("status", "=", "running")
|
|
431
452
|
.execute()
|
|
432
|
-
.catch((err) => this.
|
|
453
|
+
.catch((err) => this.log.warn("cannot update sandbox last_used_at", { conversationId: conv, err }));
|
|
433
454
|
}
|
|
434
455
|
async register(conv, token) {
|
|
435
|
-
const ttl = this.
|
|
456
|
+
const ttl = this.config.get().sandbox.limits.maxCommandSeconds * 1000 + HOLDER_TTL_MARGIN_MS;
|
|
436
457
|
await this.leases
|
|
437
458
|
.registerHolder(conv, token, ttl)
|
|
438
|
-
.catch((err) => this.
|
|
459
|
+
.catch((err) => this.log.warn("cannot record sandbox holder", { conversationId: conv, err }));
|
|
439
460
|
}
|
|
440
461
|
async unregister(conv, token) {
|
|
441
462
|
await this.leases
|
|
442
463
|
.unregisterHolder(conv, token)
|
|
443
|
-
.catch((err) => this.
|
|
464
|
+
.catch((err) => this.log.warn("cannot clear sandbox holder record", { conversationId: conv, err }));
|
|
444
465
|
}
|
|
445
466
|
/**
|
|
446
467
|
* Crashed holders' tags (claimed), and an older kernel's busy marker when `exclusiveToken` is
|
|
@@ -451,7 +472,7 @@ export class SandboxService {
|
|
|
451
472
|
return await this.leases.claimDeadHolders(conv, exclusiveToken);
|
|
452
473
|
}
|
|
453
474
|
catch (err) {
|
|
454
|
-
this.
|
|
475
|
+
this.log.warn("cannot read sandbox holder records", { conversationId: conv, err });
|
|
455
476
|
return { tags: [], legacyMarker: false };
|
|
456
477
|
}
|
|
457
478
|
}
|
|
@@ -460,33 +481,33 @@ export class SandboxService {
|
|
|
460
481
|
try {
|
|
461
482
|
await call();
|
|
462
483
|
if (why === "takeover") {
|
|
463
|
-
this.
|
|
484
|
+
this.log.info("sandbox taken over from a holder that did not finish; leftover commands killed", { conversationId });
|
|
464
485
|
}
|
|
465
486
|
}
|
|
466
487
|
catch (err) {
|
|
467
488
|
if (signal?.aborted || isSandboxGoneError(err))
|
|
468
489
|
throw err;
|
|
469
|
-
this.
|
|
490
|
+
this.log.warn("cannot kill leftover sandbox commands", { conversationId, err });
|
|
470
491
|
}
|
|
471
492
|
}
|
|
472
493
|
/**
|
|
473
494
|
* 休眠:空闲超过 `suspendAfterIdleMinutes`、或连续运行超过 `maxRunningMinutes` 的运行中沙箱。
|
|
474
495
|
* Skips a sandbox with any holder; one past `maxRunningMinutes` gets the intent for one poll
|
|
475
|
-
* window (about a second) first.
|
|
496
|
+
* window (about a second) first. 返回本次休眠的个数。Called every minute by the `sandbox-suspend-idle` cron.
|
|
476
497
|
*/
|
|
477
498
|
async suspendIdle(now) {
|
|
478
|
-
const p = this.
|
|
499
|
+
const p = this.providers.current();
|
|
479
500
|
if (!p)
|
|
480
501
|
return 0;
|
|
481
502
|
const due = this.suspendDue(now, p.plugin);
|
|
482
|
-
const runningBefore = new Date(now.getTime() - this.
|
|
503
|
+
const runningBefore = new Date(now.getTime() - this.config.get().sandbox.limits.maxRunningMinutes * 60_000);
|
|
483
504
|
const rows = await this.candidates(due);
|
|
484
505
|
let n = 0;
|
|
485
506
|
await inPool(rows, SWEEP_CONCURRENCY, async (c) => {
|
|
486
507
|
const overdue = c.running_since !== null && c.running_since < runningBefore;
|
|
487
508
|
const done = await this.tryLocked(c.conversation_id, async (lease) => {
|
|
488
509
|
const id = c.conversation_id;
|
|
489
|
-
const row = await this.
|
|
510
|
+
const row = await this.db
|
|
490
511
|
.selectFrom("sandboxes")
|
|
491
512
|
.selectAll()
|
|
492
513
|
.where("conversation_id", "=", id)
|
|
@@ -504,7 +525,7 @@ export class SandboxService {
|
|
|
504
525
|
running_since: null,
|
|
505
526
|
sweep_failed_at: null,
|
|
506
527
|
});
|
|
507
|
-
this.
|
|
528
|
+
this.log.info("sandbox suspended", { conversationId: id });
|
|
508
529
|
return true;
|
|
509
530
|
}, overdue);
|
|
510
531
|
if (done)
|
|
@@ -514,10 +535,10 @@ export class SandboxService {
|
|
|
514
535
|
}
|
|
515
536
|
/**
|
|
516
537
|
* 销毁:超过 `destroyAfterInactiveDays` 没用过的、所属组织已删除的、对话已不存在的沙箱
|
|
517
|
-
* (对话已不存在的,销毁后删掉记录)。有 holder
|
|
538
|
+
* (对话已不存在的,销毁后删掉记录)。有 holder 的跳过。返回本次销毁的个数。Called hourly by the `sandbox-destroy-inactive` cron.
|
|
518
539
|
*/
|
|
519
540
|
async destroyInactive(now) {
|
|
520
|
-
const p = this.
|
|
541
|
+
const p = this.providers.current();
|
|
521
542
|
if (!p)
|
|
522
543
|
return 0;
|
|
523
544
|
const due = this.destroyDue(now);
|
|
@@ -525,7 +546,7 @@ export class SandboxService {
|
|
|
525
546
|
let n = 0;
|
|
526
547
|
await inPool(rows, SWEEP_CONCURRENCY, async ({ conversation_id: id }) => {
|
|
527
548
|
const done = await this.tryLocked(id, async (lease) => {
|
|
528
|
-
const row = await this.
|
|
549
|
+
const row = await this.db
|
|
529
550
|
.selectFrom("sandboxes")
|
|
530
551
|
.selectAll()
|
|
531
552
|
.where("conversation_id", "=", id)
|
|
@@ -540,7 +561,7 @@ export class SandboxService {
|
|
|
540
561
|
n++;
|
|
541
562
|
});
|
|
542
563
|
// 早先已销毁、对话后来才删除、且没有遗留旧实例的记录
|
|
543
|
-
await this.
|
|
564
|
+
await this.db
|
|
544
565
|
.deleteFrom("sandboxes")
|
|
545
566
|
.where("status", "=", "destroyed")
|
|
546
567
|
.where("prev_handle", "is", null)
|
|
@@ -556,21 +577,21 @@ export class SandboxService {
|
|
|
556
577
|
* to 10 minutes. 没有提供方时只记 warn。
|
|
557
578
|
*/
|
|
558
579
|
async destroyFor(conversationId) {
|
|
559
|
-
const row = await this.
|
|
580
|
+
const row = await this.db
|
|
560
581
|
.selectFrom("sandboxes")
|
|
561
582
|
.select("status")
|
|
562
583
|
.where("conversation_id", "=", conversationId)
|
|
563
584
|
.executeTakeFirst();
|
|
564
585
|
if (!row || row.status === "destroyed")
|
|
565
586
|
return;
|
|
566
|
-
const p = this.
|
|
587
|
+
const p = this.providers.current();
|
|
567
588
|
if (!p) {
|
|
568
|
-
this.
|
|
589
|
+
this.log.warn("cannot destroy sandbox: no sandbox provider", { conversationId });
|
|
569
590
|
return;
|
|
570
591
|
}
|
|
571
592
|
const lease = await this.leases.acquireExclusive(conversationId, AbortSignal.timeout(DESTROY_FOR_WAIT_MS), undefined, { intent: true });
|
|
572
593
|
try {
|
|
573
|
-
const current = await this.
|
|
594
|
+
const current = await this.db
|
|
574
595
|
.selectFrom("sandboxes")
|
|
575
596
|
.selectAll()
|
|
576
597
|
.where("conversation_id", "=", conversationId)
|
|
@@ -591,14 +612,14 @@ export class SandboxService {
|
|
|
591
612
|
const killAll = p.impl.killAll;
|
|
592
613
|
if (!killAll) {
|
|
593
614
|
if (why === "takeover") {
|
|
594
|
-
this.
|
|
615
|
+
this.log.info("sandbox taken over from a holder that did not finish; provider cannot kill its commands", { conversationId });
|
|
595
616
|
}
|
|
596
617
|
return;
|
|
597
618
|
}
|
|
598
619
|
await this.kill(conversationId, why, () => killAll.call(p.impl, handle, signal), signal);
|
|
599
620
|
}
|
|
600
621
|
require() {
|
|
601
|
-
const p = this.
|
|
622
|
+
const p = this.providers.current();
|
|
602
623
|
if (!p)
|
|
603
624
|
throw sandboxUnavailable();
|
|
604
625
|
return p;
|
|
@@ -609,7 +630,7 @@ export class SandboxService {
|
|
|
609
630
|
async fenced(lease, id, fence, set) {
|
|
610
631
|
if (lease.signal.aborted)
|
|
611
632
|
throw new SandboxLockLostError(id);
|
|
612
|
-
const r = await this.
|
|
633
|
+
const r = await this.db
|
|
613
634
|
.updateTable("sandboxes")
|
|
614
635
|
.set({ ...set, generation: fence.gen + 1 })
|
|
615
636
|
.where("conversation_id", "=", id)
|
|
@@ -623,7 +644,7 @@ export class SandboxService {
|
|
|
623
644
|
}
|
|
624
645
|
/** 扫描的候选:上次扫描失败的排在后面,其余按最久未用在前。 */
|
|
625
646
|
async candidates(due) {
|
|
626
|
-
return await this.
|
|
647
|
+
return await this.db
|
|
627
648
|
.selectFrom("sandboxes")
|
|
628
649
|
.select(["conversation_id", "running_since"])
|
|
629
650
|
.where(due)
|
|
@@ -653,7 +674,7 @@ export class SandboxService {
|
|
|
653
674
|
}
|
|
654
675
|
}
|
|
655
676
|
catch (err) {
|
|
656
|
-
this.
|
|
677
|
+
this.log.warn("cannot take sandbox lock", { conversationId, err });
|
|
657
678
|
return false;
|
|
658
679
|
}
|
|
659
680
|
if (!lease)
|
|
@@ -662,8 +683,8 @@ export class SandboxService {
|
|
|
662
683
|
return await fn(lease);
|
|
663
684
|
}
|
|
664
685
|
catch (err) {
|
|
665
|
-
this.
|
|
666
|
-
await this.
|
|
686
|
+
this.log.warn("sandbox maintenance failed; will retry", { conversationId, err });
|
|
687
|
+
await this.db
|
|
667
688
|
.updateTable("sandboxes")
|
|
668
689
|
.set({ sweep_failed_at: sql `now()` })
|
|
669
690
|
.where("conversation_id", "=", conversationId)
|
|
@@ -682,12 +703,12 @@ export class SandboxService {
|
|
|
682
703
|
*/
|
|
683
704
|
async ensure(ctx, p, held, signal, gone) {
|
|
684
705
|
const id = ctx.conversationId;
|
|
685
|
-
await this.
|
|
706
|
+
await this.db
|
|
686
707
|
.insertInto("sandboxes")
|
|
687
708
|
.values({ conversation_id: id, org_id: ctx.orgId, provider: p.plugin, status: "creating" })
|
|
688
709
|
.onConflict((oc) => oc.column("conversation_id").doNothing())
|
|
689
710
|
.execute();
|
|
690
|
-
const row = await this.
|
|
711
|
+
const row = await this.db
|
|
691
712
|
.selectFrom("sandboxes")
|
|
692
713
|
.selectAll()
|
|
693
714
|
.where("conversation_id", "=", id)
|
|
@@ -725,7 +746,7 @@ export class SandboxService {
|
|
|
725
746
|
resumed: true,
|
|
726
747
|
};
|
|
727
748
|
}
|
|
728
|
-
this.
|
|
749
|
+
this.log.info("sandbox is gone at the provider; recreating", { conversationId: id });
|
|
729
750
|
}
|
|
730
751
|
}
|
|
731
752
|
// 换了提供方且旧实例还没销毁:交给旧提供方(仍加载时)销毁,否则记进 prev_*
|
|
@@ -734,7 +755,7 @@ export class SandboxService {
|
|
|
734
755
|
const kept = await this.retire(id, row.provider, handle, signal);
|
|
735
756
|
if (kept) {
|
|
736
757
|
if (row.prev_handle) {
|
|
737
|
-
this.
|
|
758
|
+
this.log.warn("sandbox instance of an earlier provider is leaked", {
|
|
738
759
|
conversationId: id,
|
|
739
760
|
provider: row.prev_provider,
|
|
740
761
|
});
|
|
@@ -764,11 +785,11 @@ export class SandboxService {
|
|
|
764
785
|
sweep_failed_at: null,
|
|
765
786
|
...extra,
|
|
766
787
|
});
|
|
767
|
-
const cfg = this.
|
|
788
|
+
const cfg = this.config.get().sandbox;
|
|
768
789
|
// 出站按组织设置收窄(Ruling M19);只在创建时生效,改设置只影响之后新建的沙箱
|
|
769
|
-
const egress = effectiveSandboxEgress(cfg.limits, (await readOrgSettings(this.
|
|
790
|
+
const egress = effectiveSandboxEgress(cfg.limits, (await readOrgSettings(this.db.db, ctx.orgId)).sandboxEgress);
|
|
770
791
|
// cpu / 内存按企业管理员的组织覆盖(C19 / Ruling M16),同样只在创建时生效
|
|
771
|
-
const sized = effectiveSandboxLimits({ ...cfg.limits, ...egress }, await readSandboxLimitOverride(this.
|
|
792
|
+
const sized = effectiveSandboxLimits({ ...cfg.limits, ...egress }, await readSandboxLimitOverride(this.db.db, ctx.orgId));
|
|
772
793
|
const limits = {
|
|
773
794
|
cpu: sized.cpu,
|
|
774
795
|
memoryMb: sized.memoryMb,
|
|
@@ -792,27 +813,27 @@ export class SandboxService {
|
|
|
792
813
|
// 锁已丢失、没能记下句柄:尽力销毁刚建好的实例,免得泄漏。
|
|
793
814
|
// 提供方按名字(cap-<对话>)复用实例时(Ruling M10),这个 destroy 可能打到新持有者刚恢复 / 创建的同一个实例。
|
|
794
815
|
// 这能自愈:新持有者下一次提供方调用抛 SandboxGoneError(或 resume 返回 gone),withSandbox 原地重建并重试。
|
|
795
|
-
await p.impl.destroy(handle, AbortSignal.timeout(SWEEP_OP_TIMEOUT_MS)).catch((err) => this.
|
|
816
|
+
await p.impl.destroy(handle, AbortSignal.timeout(SWEEP_OP_TIMEOUT_MS)).catch((err) => this.log.warn("cannot destroy sandbox created after the lock was lost", {
|
|
796
817
|
conversationId: id,
|
|
797
818
|
err,
|
|
798
819
|
}));
|
|
799
820
|
throw e;
|
|
800
821
|
}
|
|
801
|
-
this.
|
|
822
|
+
this.log.info("sandbox created", { conversationId: id, provider: p.plugin });
|
|
802
823
|
return { handle, createdAt: createdAt.getTime() };
|
|
803
824
|
}
|
|
804
825
|
/**
|
|
805
826
|
* 用旧提供方销毁别的提供方创建的实例:旧提供方仍加载且销毁成功 → false;否则 warn 并返回 true(需要留着记录)。
|
|
806
827
|
*/
|
|
807
828
|
async retire(id, provider, handle, signal) {
|
|
808
|
-
const old = this.
|
|
829
|
+
const old = this.providers.lookup(provider);
|
|
809
830
|
if (old) {
|
|
810
831
|
try {
|
|
811
832
|
await old.destroy(handle, AbortSignal.any([signal, AbortSignal.timeout(SWEEP_OP_TIMEOUT_MS)]));
|
|
812
833
|
return false;
|
|
813
834
|
}
|
|
814
835
|
catch (err) {
|
|
815
|
-
this.
|
|
836
|
+
this.log.warn("cannot destroy sandbox instance of the previous provider", {
|
|
816
837
|
conversationId: id,
|
|
817
838
|
provider,
|
|
818
839
|
err,
|
|
@@ -820,7 +841,7 @@ export class SandboxService {
|
|
|
820
841
|
return true;
|
|
821
842
|
}
|
|
822
843
|
}
|
|
823
|
-
this.
|
|
844
|
+
this.log.warn("sandbox was created by another provider that is not loaded; its instance may leak", { conversationId: id, provider });
|
|
824
845
|
return true;
|
|
825
846
|
}
|
|
826
847
|
/** 在锁内:销毁实例(与遗留的旧提供方实例);对话已不存在的删掉记录,否则标记 destroyed。 */
|
|
@@ -848,7 +869,7 @@ export class SandboxService {
|
|
|
848
869
|
}
|
|
849
870
|
if (!(await held.renew()))
|
|
850
871
|
throw new SandboxLockLostError(id);
|
|
851
|
-
const conversation = await this.
|
|
872
|
+
const conversation = await this.db
|
|
852
873
|
.selectFrom("conversations")
|
|
853
874
|
.select("id")
|
|
854
875
|
.where("id", "=", id)
|
|
@@ -864,7 +885,7 @@ export class SandboxService {
|
|
|
864
885
|
});
|
|
865
886
|
}
|
|
866
887
|
else {
|
|
867
|
-
const r = await this.
|
|
888
|
+
const r = await this.db
|
|
868
889
|
.deleteFrom("sandboxes")
|
|
869
890
|
.where("conversation_id", "=", id)
|
|
870
891
|
.where("generation", "=", fence.gen)
|
|
@@ -872,11 +893,11 @@ export class SandboxService {
|
|
|
872
893
|
if (Number(r.numDeletedRows) !== 1)
|
|
873
894
|
throw new SandboxLockLostError(id, "generation");
|
|
874
895
|
}
|
|
875
|
-
this.
|
|
896
|
+
this.log.info("sandbox destroyed", { conversationId: id });
|
|
876
897
|
}
|
|
877
898
|
/** 该休眠的:本提供方创建、运行中,且空闲到期或连续运行超时。 */
|
|
878
899
|
suspendDue(now, plugin) {
|
|
879
|
-
const lim = this.
|
|
900
|
+
const lim = this.config.get().sandbox.limits;
|
|
880
901
|
const idleBefore = new Date(now.getTime() - lim.suspendAfterIdleMinutes * 60_000);
|
|
881
902
|
const runningBefore = new Date(now.getTime() - lim.maxRunningMinutes * 60_000);
|
|
882
903
|
return (eb) => eb.and([
|
|
@@ -887,7 +908,7 @@ export class SandboxService {
|
|
|
887
908
|
}
|
|
888
909
|
/** 该销毁的:未销毁,且不活跃到期、组织已删除或对话已不存在。 */
|
|
889
910
|
destroyDue(now) {
|
|
890
|
-
const days = this.
|
|
911
|
+
const days = this.config.get().sandbox.limits.destroyAfterInactiveDays;
|
|
891
912
|
const before = new Date(now.getTime() - days * 24 * 3_600_000);
|
|
892
913
|
return (eb) => eb.and([
|
|
893
914
|
eb("status", "<>", "destroyed"),
|
|
@@ -905,4 +926,14 @@ export class SandboxService {
|
|
|
905
926
|
]),
|
|
906
927
|
]);
|
|
907
928
|
}
|
|
908
|
-
}
|
|
929
|
+
};
|
|
930
|
+
SandboxService = __decorate([
|
|
931
|
+
Injectable(),
|
|
932
|
+
__param(0, Inject(KernelDb)),
|
|
933
|
+
__param(1, Inject(REDIS)),
|
|
934
|
+
__param(2, Inject(SandboxLeases)),
|
|
935
|
+
__param(3, Inject(SandboxProviders)),
|
|
936
|
+
__param(4, Inject(KernelConfigService)),
|
|
937
|
+
__param(5, Inject(KERNEL_LOGGER))
|
|
938
|
+
], SandboxService);
|
|
939
|
+
export { SandboxService };
|