@capybara-hq/kernel 0.1.0-rc.1 → 0.1.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin.controller.d.ts +17 -17
- package/dist/admin/admin.controller.js +43 -26
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/extensions.controller.d.ts +14 -14
- package/dist/admin/extensions.controller.js +30 -17
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +8 -8
- package/dist/admin/setup.controller.js +27 -25
- package/dist/admin/setup.service.d.ts +19 -27
- package/dist/admin/setup.service.js +61 -61
- package/dist/agents/agent-lookup.d.ts +53 -0
- package/dist/agents/agent-lookup.js +187 -0
- package/dist/agents/agents.controller.d.ts +1 -1
- package/dist/agents/agents.controller.js +14 -8
- package/dist/agents/agents.module.d.ts +7 -0
- package/dist/agents/agents.module.js +41 -0
- package/dist/agents/agents.service.d.ts +39 -58
- package/dist/agents/agents.service.js +280 -335
- package/dist/agents/definition.d.ts +39 -8
- package/dist/agents/definition.js +201 -17
- package/dist/agents/models.controller.d.ts +1 -1
- package/dist/agents/models.controller.js +2 -2
- package/dist/agents/templates.controller.d.ts +1 -1
- package/dist/agents/templates.controller.js +2 -2
- package/dist/agents/templates.d.ts +6 -8
- package/dist/agents/templates.js +39 -8
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -0
- package/dist/catalog/admin-catalog.controller.d.ts +3 -3
- package/dist/catalog/admin-catalog.controller.js +27 -13
- package/dist/catalog/catalog-content.d.ts +185 -0
- package/dist/catalog/catalog-content.js +326 -0
- package/dist/catalog/catalog-items.d.ts +186 -0
- package/dist/catalog/catalog-items.js +410 -0
- package/dist/catalog/catalog.module.d.ts +14 -0
- package/dist/catalog/catalog.module.js +71 -0
- package/dist/catalog/catalog.service.d.ts +34 -188
- package/dist/catalog/catalog.service.js +155 -489
- package/dist/catalog/claude/agents.js +13 -10
- package/dist/catalog/cli.d.ts +3 -2
- package/dist/catalog/cli.js +13 -31
- package/dist/catalog/job-ids.d.ts +15 -0
- package/dist/catalog/job-ids.js +15 -0
- package/dist/catalog/jobs.d.ts +27 -0
- package/dist/catalog/jobs.js +70 -0
- package/dist/catalog/locks.d.ts +24 -0
- package/dist/catalog/locks.js +63 -0
- package/dist/catalog/marketplaces.controller.d.ts +4 -4
- package/dist/catalog/marketplaces.controller.js +22 -11
- package/dist/catalog/marketplaces.service.d.ts +31 -14
- package/dist/catalog/marketplaces.service.js +330 -256
- package/dist/catalog/org-catalog.controller.d.ts +4 -3
- package/dist/catalog/org-catalog.controller.js +29 -14
- package/dist/catalog/org-catalog.service.d.ts +32 -198
- package/dist/catalog/org-catalog.service.js +159 -400
- package/dist/catalog/plugin-import.d.ts +73 -34
- package/dist/catalog/plugin-import.js +356 -217
- package/dist/catalog/plugin-install.d.ts +83 -41
- package/dist/catalog/plugin-install.js +421 -269
- package/dist/catalog/plugin-upgrade.d.ts +59 -4
- package/dist/catalog/plugin-upgrade.js +407 -282
- package/dist/catalog/requests.service.d.ts +27 -15
- package/dist/catalog/requests.service.js +201 -145
- package/dist/catalog/upgrade-targets.d.ts +4 -7
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +1 -1
- package/dist/channels/cards.d.ts +10 -4
- package/dist/channels/cards.js +16 -8
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +128 -0
- package/dist/channels/connections.controller.d.ts +1 -1
- package/dist/channels/connections.controller.js +11 -6
- package/dist/channels/connections.service.d.ts +43 -21
- package/dist/channels/connections.service.js +236 -131
- package/dist/channels/inbound.d.ts +34 -38
- package/dist/channels/inbound.js +107 -41
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +60 -82
- package/dist/channels/outbound.js +165 -194
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +29 -8
- package/dist/channels/threads.js +71 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +1 -0
- package/dist/config/schema.js +12 -6
- package/dist/conversations/access.d.ts +29 -0
- package/dist/conversations/access.js +86 -0
- package/dist/conversations/artifacts.d.ts +11 -11
- package/dist/conversations/artifacts.js +36 -10
- package/dist/conversations/attachments.controller.d.ts +1 -1
- package/dist/conversations/attachments.controller.js +8 -6
- package/dist/conversations/attachments.module.d.ts +7 -0
- package/dist/conversations/attachments.module.js +25 -0
- package/dist/conversations/attachments.service.d.ts +30 -22
- package/dist/conversations/attachments.service.js +119 -46
- package/dist/conversations/conversations.controller.d.ts +8 -7
- package/dist/conversations/conversations.controller.js +59 -29
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +69 -0
- package/dist/conversations/conversations.service.d.ts +40 -38
- package/dist/conversations/conversations.service.js +130 -140
- package/dist/conversations/event-log.d.ts +39 -18
- package/dist/conversations/event-log.js +93 -27
- package/dist/conversations/events.d.ts +23 -3
- package/dist/conversations/events.js +26 -14
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +48 -56
- package/dist/conversations/queue.js +13 -289
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +343 -0
- package/dist/conversations/sandbox-status.d.ts +13 -10
- package/dist/conversations/sandbox-status.js +36 -8
- package/dist/conversations/titles.d.ts +71 -24
- package/dist/conversations/titles.js +159 -63
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +6 -0
- package/dist/ctx/create-ctx.js +7 -9
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +4 -4
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +1 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +1 -0
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/recorded-tools.d.ts +27 -1
- package/dist/evals/recorded-tools.js +85 -10
- package/dist/evals/run-replay.d.ts +61 -8
- package/dist/evals/run-replay.js +159 -85
- package/dist/evals/runs.controller.d.ts +1 -1
- package/dist/evals/runs.controller.js +17 -8
- package/dist/evals/runs.service.d.ts +23 -45
- package/dist/evals/runs.service.js +245 -234
- package/dist/evals/sets.controller.d.ts +1 -1
- package/dist/evals/sets.controller.js +17 -8
- package/dist/evals/sets.service.d.ts +22 -6
- package/dist/evals/sets.service.js +248 -194
- package/dist/evals/snapshot.d.ts +2 -2
- package/dist/evals/step-replay.d.ts +2 -2
- package/dist/evals/step-replay.js +1 -1
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.d.ts +2 -2
- package/dist/evals/trajectory.service.d.ts +5 -4
- package/dist/evals/trajectory.service.js +30 -7
- package/dist/evals/worker.d.ts +44 -27
- package/dist/evals/worker.js +220 -121
- package/dist/extensions/admin-ops.d.ts +61 -33
- package/dist/extensions/admin-ops.js +248 -154
- package/dist/extensions/admin-view.d.ts +38 -27
- package/dist/extensions/admin-view.js +126 -55
- package/dist/extensions/approvals.d.ts +12 -8
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +111 -45
- package/dist/extensions/bootstrap.d.ts +58 -31
- package/dist/extensions/bootstrap.js +175 -121
- package/dist/extensions/cli.d.ts +20 -10
- package/dist/extensions/cli.js +41 -96
- package/dist/extensions/config-issues.d.ts +7 -0
- package/dist/extensions/config-issues.js +31 -0
- package/dist/extensions/deployment-config-store.d.ts +49 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +58 -67
- package/dist/extensions/deployment-config.js +202 -230
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +77 -0
- package/dist/extensions/hooks.d.ts +3 -2
- package/dist/extensions/hooks.js +1 -1
- package/dist/extensions/host.d.ts +72 -68
- package/dist/extensions/host.js +191 -152
- package/dist/extensions/installs.d.ts +49 -16
- package/dist/extensions/installs.js +128 -32
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +33 -0
- package/dist/extensions/locks.js +86 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.controller.d.ts +1 -1
- package/dist/extensions/org-config.controller.js +8 -5
- package/dist/extensions/org-config.d.ts +48 -46
- package/dist/extensions/org-config.js +284 -226
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +89 -4
- package/dist/extensions/sources.d.ts +12 -8
- package/dist/extensions/sources.js +34 -13
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +17 -9
- package/dist/files/previewers.d.ts +13 -18
- package/dist/files/previewers.js +83 -36
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +47 -355
- package/dist/http/app.d.ts +11 -15
- package/dist/http/app.js +17 -62
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/identity/accounts.d.ts +82 -29
- package/dist/identity/accounts.js +294 -175
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +7 -4
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +31 -25
- package/dist/identity/auth.guard.d.ts +3 -3
- package/dist/identity/auth.guard.js +6 -4
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/enterprise-admin.d.ts +18 -12
- package/dist/identity/enterprise-admin.js +67 -13
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +56 -0
- package/dist/identity/me.controller.d.ts +16 -15
- package/dist/identity/me.controller.js +37 -31
- package/dist/identity/sessions.d.ts +12 -10
- package/dist/identity/sessions.js +74 -42
- package/dist/identity/settings.d.ts +20 -14
- package/dist/identity/settings.js +86 -58
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/inbox/inbox.module.d.ts +3 -0
- package/dist/inbox/inbox.module.js +22 -0
- package/dist/inbox/inbox.service.d.ts +7 -9
- package/dist/inbox/inbox.service.js +32 -11
- package/dist/index.d.ts +16 -11
- package/dist/index.js +9 -6
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +165 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +126 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +90 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +96 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +86 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +16 -0
- package/dist/infra/logging/logging.module.js +34 -0
- package/dist/infra/queue/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +7 -0
- package/dist/infra/queue/redis-connection.js +18 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +87 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +31 -0
- package/dist/infra/throttler/named-throttlers.js +119 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +15 -0
- package/dist/infra/tokens.js +15 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -244
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +136 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +456 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-context.d.ts +2 -0
- package/dist/log-context.js +4 -0
- package/dist/models/models.module.d.ts +3 -0
- package/dist/models/models.module.js +24 -0
- package/dist/models/prices.d.ts +8 -2
- package/dist/models/prices.js +65 -37
- package/dist/models/purposes.controller.d.ts +1 -1
- package/dist/models/purposes.controller.js +5 -6
- package/dist/models/purposes.d.ts +35 -13
- package/dist/models/purposes.js +101 -51
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +61 -31
- package/dist/orgs/directory-sync.js +212 -125
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +54 -57
- package/dist/orgs/offboarding.js +161 -71
- package/dist/orgs/org-lock.d.ts +28 -19
- package/dist/orgs/org-lock.js +81 -35
- package/dist/orgs/org.guard.d.ts +1 -1
- package/dist/orgs/org.guard.js +2 -2
- package/dist/orgs/orgs.controller.d.ts +13 -13
- package/dist/orgs/orgs.controller.js +29 -17
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +68 -0
- package/dist/orgs/orgs.service.d.ts +30 -19
- package/dist/orgs/orgs.service.js +139 -86
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +16 -10
- package/dist/orgs/settings.service.js +77 -48
- package/dist/overrides.d.ts +56 -0
- package/dist/overrides.js +30 -0
- package/dist/roles/gateway-role.d.ts +43 -0
- package/dist/roles/gateway-role.js +98 -0
- package/dist/roles/gateway.module.d.ts +8 -0
- package/dist/roles/gateway.module.js +28 -0
- package/dist/roles/worker-role.d.ts +63 -0
- package/dist/roles/worker-role.js +144 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +90 -0
- package/dist/runtime/abort.js +19 -2
- package/dist/runtime/checkpointer.d.ts +8 -3
- package/dist/runtime/checkpointer.js +87 -55
- package/dist/runtime/context/build.d.ts +6 -6
- package/dist/runtime/context/build.js +18 -8
- package/dist/runtime/context/claude-tools.d.ts +2 -1
- package/dist/runtime/context/claude-tools.js +9 -10
- package/dist/runtime/context/legacy-text.d.ts +22 -0
- package/dist/runtime/context/legacy-text.js +37 -0
- package/dist/runtime/context/skills.d.ts +29 -11
- package/dist/runtime/context/skills.js +37 -30
- package/dist/runtime/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +3 -3
- package/dist/runtime/hook-calls.js +1 -6
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.js +1 -1
- package/dist/runtime/loop.d.ts +8 -1
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +45 -74
- package/dist/runtime/maintenance.js +139 -137
- package/dist/runtime/model-call.d.ts +7 -4
- package/dist/runtime/model-call.js +25 -58
- package/dist/runtime/providers.d.ts +17 -6
- package/dist/runtime/providers.js +66 -25
- package/dist/runtime/quota.d.ts +17 -3
- package/dist/runtime/quota.js +27 -2
- package/dist/runtime/retired-schedulers.d.ts +7 -0
- package/dist/runtime/retired-schedulers.js +31 -0
- package/dist/runtime/run-control.d.ts +33 -0
- package/dist/runtime/run-control.js +77 -0
- package/dist/runtime/run-finish.d.ts +27 -18
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +48 -0
- package/dist/runtime/run-jobs.js +95 -0
- package/dist/runtime/run-processors.d.ts +60 -0
- package/dist/runtime/run-processors.js +185 -0
- package/dist/runtime/run-queue.d.ts +32 -57
- package/dist/runtime/run-queue.js +291 -295
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +122 -76
- package/dist/runtime/run-worker.js +343 -229
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +112 -0
- package/dist/runtime/step-log.d.ts +40 -0
- package/dist/runtime/step-log.js +94 -0
- package/dist/runtime/stream.controller.d.ts +5 -8
- package/dist/runtime/stream.controller.js +14 -12
- package/dist/runtime/stream.d.ts +24 -6
- package/dist/runtime/stream.js +78 -7
- package/dist/runtime/subagents/child.d.ts +3 -44
- package/dist/runtime/subagents/child.js +0 -79
- package/dist/runtime/subagents/definition.d.ts +5 -10
- package/dist/runtime/subagents/definition.js +13 -14
- package/dist/runtime/subagents/dispatch.d.ts +89 -8
- package/dist/runtime/subagents/dispatch.js +137 -142
- package/dist/runtime/subagents/limits.d.ts +9 -4
- package/dist/runtime/subagents/limits.js +4 -2
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +3 -2
- package/dist/runtime/subagents/progress.d.ts +2 -2
- package/dist/runtime/subagents/roster.d.ts +4 -4
- package/dist/runtime/subagents/roster.js +2 -2
- package/dist/runtime/subagents/skill-fork.d.ts +8 -9
- package/dist/runtime/subagents/skill-fork.js +17 -6
- package/dist/runtime/subagents/subagents.service.d.ts +40 -0
- package/dist/runtime/subagents/subagents.service.js +101 -0
- package/dist/runtime/usage-report.d.ts +94 -52
- package/dist/runtime/usage-report.js +200 -100
- package/dist/runtime/waits.d.ts +127 -59
- package/dist/runtime/waits.js +433 -210
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +41 -0
- package/dist/sandbox/jobs.js +113 -0
- package/dist/sandbox/leases.d.ts +39 -31
- package/dist/sandbox/leases.js +117 -257
- package/dist/sandbox/providers.d.ts +19 -0
- package/dist/sandbox/providers.js +38 -0
- package/dist/sandbox/sandbox.module.d.ts +8 -0
- package/dist/sandbox/sandbox.module.js +30 -0
- package/dist/sandbox/sandbox.service.d.ts +24 -29
- package/dist/sandbox/sandbox.service.js +106 -75
- package/dist/skills/catalog.d.ts +37 -24
- package/dist/skills/catalog.js +100 -57
- package/dist/skills/changes.controller.d.ts +4 -4
- package/dist/skills/changes.controller.js +15 -9
- package/dist/skills/changes.service.d.ts +30 -20
- package/dist/skills/changes.service.js +425 -367
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +8 -5
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +17 -16
- package/dist/skills/invoke.js +53 -21
- package/dist/skills/skills.controller.d.ts +1 -1
- package/dist/skills/skills.controller.js +11 -6
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +30 -0
- package/dist/skills/skills.service.d.ts +47 -30
- package/dist/skills/skills.service.js +221 -158
- package/dist/storage/job-ids.d.ts +6 -0
- package/dist/storage/job-ids.js +6 -0
- package/dist/storage/purge.d.ts +22 -7
- package/dist/storage/purge.js +55 -3
- package/dist/storage/storage.module.d.ts +6 -0
- package/dist/storage/storage.module.js +23 -0
- package/dist/storage/storage.service.d.ts +18 -4
- package/dist/storage/storage.service.js +44 -3
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +12 -8
- package/dist/tools/approvals.service.d.ts +33 -25
- package/dist/tools/approvals.service.js +343 -259
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtin-names.d.ts +73 -0
- package/dist/tools/builtin-names.js +116 -0
- package/dist/tools/builtins/agent.d.ts +7 -7
- package/dist/tools/builtins/agent.js +7 -11
- package/dist/tools/builtins/ask-user.d.ts +3 -3
- package/dist/tools/builtins/ask-user.js +3 -3
- package/dist/tools/builtins/builtin-tools.d.ts +21 -0
- package/dist/tools/builtins/builtin-tools.js +80 -0
- package/dist/tools/builtins/read-tool-output.d.ts +3 -3
- package/dist/tools/builtins/read-tool-output.js +3 -3
- package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
- package/dist/tools/builtins/sandbox/bash.js +33 -30
- package/dist/tools/builtins/sandbox/common.d.ts +5 -4
- package/dist/tools/builtins/sandbox/common.js +2 -2
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +13 -13
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +42 -31
- package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
- package/dist/tools/builtins/sandbox/file-state.js +34 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob-match.js +1 -1
- package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob.js +6 -6
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +149 -32
- package/dist/tools/builtins/sandbox/index.d.ts +1 -1
- package/dist/tools/builtins/sandbox/index.js +1 -1
- package/dist/tools/builtins/sandbox/read.d.ts +2 -2
- package/dist/tools/builtins/sandbox/read.js +22 -15
- package/dist/tools/builtins/sandbox/write.d.ts +1 -1
- package/dist/tools/builtins/sandbox/write.js +38 -34
- package/dist/tools/builtins/skill-load.d.ts +6 -6
- package/dist/tools/builtins/skill-load.js +33 -17
- package/dist/tools/builtins/skill-write.d.ts +4 -4
- package/dist/tools/builtins/skill-write.js +10 -10
- package/dist/tools/builtins/tool-search.d.ts +13 -9
- package/dist/tools/builtins/tool-search.js +25 -14
- package/dist/tools/canonical-json.d.ts +6 -0
- package/dist/tools/canonical-json.js +16 -0
- package/dist/tools/connector-content.controller.d.ts +1 -1
- package/dist/tools/connector-content.controller.js +11 -6
- package/dist/tools/connector-content.d.ts +12 -15
- package/dist/tools/connector-content.js +53 -18
- package/dist/tools/connectors.controller.d.ts +1 -1
- package/dist/tools/connectors.controller.js +21 -10
- package/dist/tools/connectors.service.d.ts +31 -13
- package/dist/tools/connectors.service.js +438 -348
- package/dist/tools/credentials.d.ts +17 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/display-names.d.ts +9 -0
- package/dist/tools/display-names.js +24 -0
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +116 -84
- package/dist/tools/elicitation.js +1 -1
- package/dist/tools/info.d.ts +32 -13
- package/dist/tools/info.js +88 -39
- package/dist/tools/job-ids.d.ts +13 -0
- package/dist/tools/job-ids.js +15 -0
- package/dist/tools/jobs.d.ts +24 -0
- package/dist/tools/jobs.js +69 -0
- package/dist/tools/legacy-data.d.ts +34 -0
- package/dist/tools/legacy-data.js +76 -0
- package/dist/tools/legacy-keys.d.ts +51 -0
- package/dist/tools/legacy-keys.js +115 -0
- package/dist/tools/naming.d.ts +1 -5
- package/dist/tools/naming.js +1 -7
- package/dist/tools/oauth/flow-paths.d.ts +16 -0
- package/dist/tools/oauth/flow-paths.js +38 -0
- package/dist/tools/oauth/flow.d.ts +30 -30
- package/dist/tools/oauth/flow.js +109 -81
- package/dist/tools/oauth/oauth.controller.d.ts +3 -3
- package/dist/tools/oauth/oauth.controller.js +12 -9
- package/dist/tools/oauth/tokens.d.ts +11 -3
- package/dist/tools/oauth/tokens.js +15 -14
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +48 -4
- package/dist/tools/pipeline.d.ts +72 -50
- package/dist/tools/pipeline.js +239 -100
- package/dist/tools/policy.d.ts +3 -16
- package/dist/tools/policy.js +13 -19
- package/dist/tools/questions.controller.d.ts +2 -2
- package/dist/tools/questions.controller.js +9 -6
- package/dist/tools/questions.service.d.ts +26 -25
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +43 -38
- package/dist/tools/registry.js +100 -72
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +1 -1
- package/dist/tools/specs.d.ts +5 -4
- package/dist/tools/specs.js +3 -1
- package/dist/tools/tools.module.d.ts +10 -0
- package/dist/tools/tools.module.js +91 -0
- package/dist/ui/call-extension.d.ts +16 -0
- package/dist/ui/call-extension.js +38 -0
- package/dist/ui/embed-token.d.ts +9 -5
- package/dist/ui/embed-token.js +34 -6
- package/dist/ui/ui-stream.d.ts +22 -17
- package/dist/ui/ui-stream.js +72 -12
- package/dist/ui/ui.module.d.ts +7 -0
- package/dist/ui/ui.module.js +28 -0
- package/dist/ui/views.controller.d.ts +14 -12
- package/dist/ui/views.controller.js +32 -25
- package/dist/ui/views.d.ts +9 -57
- package/dist/ui/views.js +43 -45
- package/package.json +10 -3
- package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- package/dist/tools/builtins/sandbox/names.d.ts +0 -7
- package/dist/tools/builtins/sandbox/names.js +0 -20
- /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
- /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
package/dist/sandbox/leases.js
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
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 { createHash, randomUUID } from "node:crypto";
|
|
11
|
+
import { Inject, Injectable, Optional } from "@nestjs/common";
|
|
2
12
|
import { ApiError } from "../errors.js";
|
|
13
|
+
import { LockService, } from "../infra/lock/lock.service.js";
|
|
14
|
+
import { redisClockScript, sharedLeaseReadScript, } from "../infra/lock/shared-lease.js";
|
|
15
|
+
import { KERNEL_LOGGER, REDIS } from "../infra/tokens.js";
|
|
3
16
|
/**
|
|
4
17
|
* Shared and exclusive sandbox leases (sub-agents spec §10.3): the Redis protocol that lets several
|
|
5
18
|
* holders use one conversation's running sandbox concurrently (shared leases: commands, file reads
|
|
@@ -18,9 +31,11 @@ import { ApiError } from "../errors.js";
|
|
|
18
31
|
* - `capk:sandbox-path:<conv>:<sha256hex(path)>`: a short per-path lease around the kernel's own
|
|
19
32
|
* read-modify-write of one file.
|
|
20
33
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
34
|
+
* The first three keys are a {@link LockService} shared lease (`tryShared` / `tryExclusive`,
|
|
35
|
+
* infra/lock/shared-lease.ts); the holder records and the path leases are this file's. Every key
|
|
36
|
+
* carries a TTL. A holder renews every TTL / 3 (LockService's watchdog) and loses the lease at
|
|
37
|
+
* the renewal deadline (send time of the last successful renewal + 2/3 TTL): its `signal` aborts
|
|
38
|
+
* with {@link SandboxLockLostError}.
|
|
24
39
|
*/
|
|
25
40
|
/** Prefix of the lock key `capk:sandbox:<conversationId>`. */
|
|
26
41
|
export const SANDBOX_LOCK_PREFIX = "capk:sandbox:";
|
|
@@ -68,104 +83,18 @@ export class SandboxPathBusyError extends Error {
|
|
|
68
83
|
this.name = "SandboxPathBusyError";
|
|
69
84
|
}
|
|
70
85
|
}
|
|
71
|
-
const NOW = `local t = redis.call('TIME'); local now = tonumber(t[1]) * 1000 + math.floor(tonumber(t[2]) / 1000)`;
|
|
72
|
-
/** Drops expired shared leases; drops a `shared` lock value no live shared lease backs. */
|
|
73
|
-
const PURGE = `
|
|
74
|
-
redis.call('ZREMRANGEBYSCORE', KEYS[2], '-inf', now)
|
|
75
|
-
local cur = redis.call('GET', KEYS[1])
|
|
76
|
-
if cur == 'shared' and redis.call('ZCARD', KEYS[2]) == 0 then
|
|
77
|
-
redis.call('DEL', KEYS[1])
|
|
78
|
-
cur = false
|
|
79
|
-
end`;
|
|
80
|
-
/**
|
|
81
|
-
* Keeps the users set and the `shared` lock value alive for at least `ttl` without shortening a
|
|
82
|
-
* longer TTL another holder set (holders may use different TTLs).
|
|
83
|
-
*/
|
|
84
|
-
const KEEP_SHARED = `
|
|
85
|
-
if redis.call('PTTL', KEYS[2]) < ttl then redis.call('PEXPIRE', KEYS[2], ttl) end
|
|
86
|
-
local lt = redis.call('PTTL', KEYS[1])
|
|
87
|
-
if redis.call('GET', KEYS[1]) ~= 'shared' or lt < ttl then
|
|
88
|
-
redis.call('SET', KEYS[1], 'shared', 'PX', math.max(ttl, lt))
|
|
89
|
-
end`;
|
|
90
|
-
/** KEYS lock, users, intent; ARGV token, cap, ttl. */
|
|
91
|
-
const ACQUIRE_SHARED = `${NOW}
|
|
92
|
-
${PURGE}
|
|
93
|
-
if cur and cur ~= 'shared' then return 0 end
|
|
94
|
-
local it = redis.call('GET', KEYS[3])
|
|
95
|
-
if it and it ~= ARGV[1] then return 0 end
|
|
96
|
-
if redis.call('ZCARD', KEYS[2]) >= tonumber(ARGV[2]) then return 0 end
|
|
97
|
-
local ttl = tonumber(ARGV[3])
|
|
98
|
-
redis.call('ZADD', KEYS[2], now + ttl, ARGV[1])
|
|
99
|
-
${KEEP_SHARED}
|
|
100
|
-
return 1`;
|
|
101
|
-
/** KEYS lock, users, intent; ARGV token, ttl, setIntent (0/1), intentTtl. */
|
|
102
|
-
const ACQUIRE_EXCLUSIVE = `${NOW}
|
|
103
|
-
${PURGE}
|
|
104
|
-
if cur or redis.call('ZCARD', KEYS[2]) > 0 then
|
|
105
|
-
if ARGV[3] == '1' then
|
|
106
|
-
local it = redis.call('GET', KEYS[3])
|
|
107
|
-
if (not it) or it == ARGV[1] then
|
|
108
|
-
redis.call('SET', KEYS[3], ARGV[1], 'PX', tonumber(ARGV[4]))
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
return 0
|
|
112
|
-
end
|
|
113
|
-
redis.call('SET', KEYS[1], ARGV[1], 'PX', tonumber(ARGV[2]))
|
|
114
|
-
if redis.call('GET', KEYS[3]) == ARGV[1] then redis.call('DEL', KEYS[3]) end
|
|
115
|
-
return 1`;
|
|
116
|
-
/** KEYS lock, users; ARGV token, ttl, kind. Shared: lost when the member is gone or the lock holds a token. */
|
|
117
|
-
const RENEW = `${NOW}
|
|
118
|
-
local ttl = tonumber(ARGV[2])
|
|
119
|
-
if ARGV[3] == 'exclusive' then
|
|
120
|
-
if redis.call('GET', KEYS[1]) == ARGV[1] then
|
|
121
|
-
redis.call('PEXPIRE', KEYS[1], ttl)
|
|
122
|
-
return 1
|
|
123
|
-
end
|
|
124
|
-
return 0
|
|
125
|
-
end
|
|
126
|
-
redis.call('ZREMRANGEBYSCORE', KEYS[2], '-inf', now)
|
|
127
|
-
if not redis.call('ZSCORE', KEYS[2], ARGV[1]) then return 0 end
|
|
128
|
-
local cur = redis.call('GET', KEYS[1])
|
|
129
|
-
if cur and cur ~= 'shared' then
|
|
130
|
-
redis.call('ZREM', KEYS[2], ARGV[1])
|
|
131
|
-
return 0
|
|
132
|
-
end
|
|
133
|
-
redis.call('ZADD', KEYS[2], 'XX', now + ttl, ARGV[1])
|
|
134
|
-
${KEEP_SHARED}
|
|
135
|
-
return 1`;
|
|
136
|
-
/** KEYS lock, users; ARGV token, kind. */
|
|
137
|
-
const RELEASE = `${NOW}
|
|
138
|
-
if ARGV[2] == 'exclusive' then
|
|
139
|
-
if redis.call('GET', KEYS[1]) == ARGV[1] then redis.call('DEL', KEYS[1]) end
|
|
140
|
-
return 1
|
|
141
|
-
end
|
|
142
|
-
redis.call('ZREM', KEYS[2], ARGV[1])
|
|
143
|
-
${PURGE}
|
|
144
|
-
return 1`;
|
|
145
|
-
/** KEYS lock, users; ARGV token, ttl. */
|
|
146
|
-
const DOWNGRADE = `${NOW}
|
|
147
|
-
if redis.call('GET', KEYS[1]) ~= ARGV[1] then return 0 end
|
|
148
|
-
local ttl = tonumber(ARGV[2])
|
|
149
|
-
redis.call('ZADD', KEYS[2], now + ttl, ARGV[1])
|
|
150
|
-
${KEEP_SHARED}
|
|
151
|
-
return 1`;
|
|
152
|
-
/** KEYS lock, users; returns the live shared count. */
|
|
153
|
-
const COUNT = `${NOW}
|
|
154
|
-
${PURGE}
|
|
155
|
-
return redis.call('ZCARD', KEYS[2])`;
|
|
156
86
|
/**
|
|
157
87
|
* KEYS holders, busy; ARGV token, ttl. Also writes the busy marker as v2 (kept for at least `ttl`)
|
|
158
88
|
* unless an older kernel's holder owns it.
|
|
159
89
|
*/
|
|
160
|
-
const REGISTER =
|
|
161
|
-
local ttl = tonumber(ARGV[2])
|
|
90
|
+
const REGISTER = redisClockScript(`local ttl = tonumber(ARGV[2])
|
|
162
91
|
redis.call('HSET', KEYS[1], ARGV[1], now + ttl)
|
|
163
92
|
if redis.call('PTTL', KEYS[1]) < ttl then redis.call('PEXPIRE', KEYS[1], ttl) end
|
|
164
93
|
local b = redis.call('GET', KEYS[2])
|
|
165
94
|
if (not b) or (b == '${BUSY_V2}' and redis.call('PTTL', KEYS[2]) < ttl) then
|
|
166
95
|
redis.call('SET', KEYS[2], '${BUSY_V2}', 'PX', ttl)
|
|
167
96
|
end
|
|
168
|
-
return 1
|
|
97
|
+
return 1`);
|
|
169
98
|
/** Deletes the v2 busy marker (key `busy`) once no holder record (hash `holders`) is left. */
|
|
170
99
|
const dropV2 = (holders, busy) => `
|
|
171
100
|
if redis.call('HLEN', ${holders}) == 0 and redis.call('GET', ${busy}) == '${BUSY_V2}' then
|
|
@@ -184,9 +113,7 @@ return 1`;
|
|
|
184
113
|
* everything cannot hit a live sibling). The v2 marker is never claimed; it goes with the last
|
|
185
114
|
* record. Returns { legacy, tag… }.
|
|
186
115
|
*/
|
|
187
|
-
const CLAIM =
|
|
188
|
-
${PURGE}
|
|
189
|
-
local out = {0}
|
|
116
|
+
const CLAIM = sharedLeaseReadScript(`local out = {0}
|
|
190
117
|
local f = redis.call('HGETALL', KEYS[3])
|
|
191
118
|
for i = 1, #f, 2 do
|
|
192
119
|
local tok = f[i]
|
|
@@ -203,10 +130,7 @@ if ARGV[1] ~= '' and cur == ARGV[1] and b and b ~= '${BUSY_V2}' then
|
|
|
203
130
|
redis.call('DEL', KEYS[4])
|
|
204
131
|
out[1] = 1
|
|
205
132
|
end
|
|
206
|
-
return out
|
|
207
|
-
/** Compare-and-delete / compare-and-expire of a single-valued key. */
|
|
208
|
-
const DEL_IF = `if redis.call('GET', KEYS[1]) == ARGV[1] then return redis.call('DEL', KEYS[1]) end return 0`;
|
|
209
|
-
const EXPIRE_IF = `if redis.call('GET', KEYS[1]) == ARGV[1] then return redis.call('PEXPIRE', KEYS[1], ARGV[2]) end return 0`;
|
|
133
|
+
return out`);
|
|
210
134
|
const abortReason = (signal) => signal.reason ?? new DOMException("This operation was aborted", "AbortError");
|
|
211
135
|
function sleep(ms, signal) {
|
|
212
136
|
return new Promise((resolve, reject) => {
|
|
@@ -225,19 +149,41 @@ function sleep(ms, signal) {
|
|
|
225
149
|
signal.addEventListener("abort", onAbort, { once: true });
|
|
226
150
|
});
|
|
227
151
|
}
|
|
228
|
-
/**
|
|
229
|
-
|
|
152
|
+
/** A signal that aborts with {@link SandboxLockLostError} when `lost` aborts. */
|
|
153
|
+
function lostSignal(lost, conv) {
|
|
154
|
+
const ctl = new AbortController();
|
|
155
|
+
const abort = () => ctl.abort(new SandboxLockLostError(conv));
|
|
156
|
+
if (lost.aborted)
|
|
157
|
+
abort();
|
|
158
|
+
else
|
|
159
|
+
lost.addEventListener("abort", abort, { once: true });
|
|
160
|
+
return ctl.signal;
|
|
161
|
+
}
|
|
162
|
+
/** Optional provider: {@link SandboxLeaseTimings} that replace some defaults (tests make them shorter). */
|
|
163
|
+
export const SANDBOX_LEASE_TIMINGS = Symbol("SANDBOX_LEASE_TIMINGS");
|
|
164
|
+
/**
|
|
165
|
+
* The lease protocol over {@link LockService}'s shared leases; no state in process beyond the
|
|
166
|
+
* leases this process holds.
|
|
167
|
+
*/
|
|
168
|
+
let SandboxLeases = class SandboxLeases {
|
|
169
|
+
locks;
|
|
230
170
|
redis;
|
|
231
171
|
log;
|
|
172
|
+
/** Lease TTL (ms). */
|
|
232
173
|
ttlMs;
|
|
174
|
+
/** Poll interval while waiting (ms, jittered up to 2×). */
|
|
233
175
|
pollMs;
|
|
176
|
+
/** Path lease TTL (ms). */
|
|
234
177
|
pathTtlMs;
|
|
235
|
-
constructor(
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
this.
|
|
239
|
-
this.
|
|
240
|
-
this.
|
|
178
|
+
constructor(locks,
|
|
179
|
+
/** The holder records and the legacy busy marker (scripts of this file). */
|
|
180
|
+
redis, log, timings = {}) {
|
|
181
|
+
this.locks = locks;
|
|
182
|
+
this.redis = redis;
|
|
183
|
+
this.log = log;
|
|
184
|
+
this.ttlMs = timings.ttlMs ?? SANDBOX_LOCK_TTL_MS;
|
|
185
|
+
this.pollMs = timings.pollMs ?? 100;
|
|
186
|
+
this.pathTtlMs = timings.pathTtlMs ?? PATH_LEASE_TTL_MS;
|
|
241
187
|
}
|
|
242
188
|
/**
|
|
243
189
|
* TTL of an intent (ms): 4 × the poll interval (a jittered wait is up to 2 × the interval plus
|
|
@@ -247,7 +193,11 @@ export class SandboxLeases {
|
|
|
247
193
|
return Math.max(this.pollMs * 4, INTENT_TTL_FLOOR_MS);
|
|
248
194
|
}
|
|
249
195
|
keys(conv) {
|
|
250
|
-
return
|
|
196
|
+
return {
|
|
197
|
+
lock: `${SANDBOX_LOCK_PREFIX}${conv}`,
|
|
198
|
+
users: `${USERS_PREFIX}${conv}`,
|
|
199
|
+
intent: `${INTENT_PREFIX}${conv}`,
|
|
200
|
+
};
|
|
251
201
|
}
|
|
252
202
|
wait(signal) {
|
|
253
203
|
return sleep(this.pollMs + Math.floor(Math.random() * this.pollMs), signal);
|
|
@@ -263,9 +213,9 @@ export class SandboxLeases {
|
|
|
263
213
|
for (;;) {
|
|
264
214
|
if (signal.aborted)
|
|
265
215
|
throw abortReason(signal);
|
|
266
|
-
const
|
|
267
|
-
if (
|
|
268
|
-
return
|
|
216
|
+
const lease = await this.tryShared(conv, cap, token);
|
|
217
|
+
if (lease)
|
|
218
|
+
return lease;
|
|
269
219
|
if (Date.now() + this.pollMs > deadline)
|
|
270
220
|
throw sandboxBusy();
|
|
271
221
|
await this.wait(signal);
|
|
@@ -280,14 +230,13 @@ export class SandboxLeases {
|
|
|
280
230
|
async acquireExclusive(conv, signal, capMs, o = {}) {
|
|
281
231
|
const token = randomUUID();
|
|
282
232
|
const deadline = capMs === undefined ? Number.POSITIVE_INFINITY : Date.now() + capMs;
|
|
283
|
-
const keys = this.keys(conv);
|
|
284
233
|
try {
|
|
285
234
|
for (;;) {
|
|
286
235
|
if (signal.aborted)
|
|
287
236
|
throw abortReason(signal);
|
|
288
|
-
const
|
|
289
|
-
if (
|
|
290
|
-
return
|
|
237
|
+
const lease = await this.tryExclusive(conv, { token, intent: o.intent === true });
|
|
238
|
+
if (lease)
|
|
239
|
+
return lease;
|
|
291
240
|
if (Date.now() + this.pollMs > deadline)
|
|
292
241
|
throw sandboxBusy();
|
|
293
242
|
await this.wait(signal);
|
|
@@ -295,9 +244,7 @@ export class SandboxLeases {
|
|
|
295
244
|
}
|
|
296
245
|
catch (e) {
|
|
297
246
|
if (o.intent) {
|
|
298
|
-
await this.
|
|
299
|
-
.eval(DEL_IF, 1, keys[2], token)
|
|
300
|
-
.catch((err) => this.log.warn("cannot clear sandbox intent", { conversationId: conv, err }));
|
|
247
|
+
await this.clearIntent(conv, token).catch((err) => this.log.warn("cannot clear sandbox intent", { conversationId: conv, err }));
|
|
301
248
|
}
|
|
302
249
|
throw e;
|
|
303
250
|
}
|
|
@@ -308,9 +255,8 @@ export class SandboxLeases {
|
|
|
308
255
|
* token, so one waiter can alternate between this and {@link tryShared} with the same token.
|
|
309
256
|
*/
|
|
310
257
|
async tryExclusive(conv, o = {}) {
|
|
311
|
-
const
|
|
312
|
-
|
|
313
|
-
return Number(ok) === 1 ? this.hold(conv, token, "exclusive") : null;
|
|
258
|
+
const h = await this.locks.tryExclusive(this.keys(conv), o.token ?? randomUUID(), this.ttlMs, o.intent ? this.intentTtlMs : undefined);
|
|
259
|
+
return h ? this.held(conv, h) : null;
|
|
314
260
|
}
|
|
315
261
|
/**
|
|
316
262
|
* One try at a shared lease (`cap` holders at most); null when it is not granted. `token` is the
|
|
@@ -318,12 +264,12 @@ export class SandboxLeases {
|
|
|
318
264
|
* (it should then {@link clearIntent}).
|
|
319
265
|
*/
|
|
320
266
|
async tryShared(conv, cap, token = randomUUID()) {
|
|
321
|
-
const
|
|
322
|
-
return
|
|
267
|
+
const h = await this.locks.tryShared(this.keys(conv), token, cap, this.ttlMs);
|
|
268
|
+
return h ? this.held(conv, h) : null;
|
|
323
269
|
}
|
|
324
270
|
/** Deletes the conversation's intent when it is `token`'s. */
|
|
325
271
|
async clearIntent(conv, token) {
|
|
326
|
-
await this.
|
|
272
|
+
await this.locks.releaseIf(this.keys(conv).intent, token);
|
|
327
273
|
}
|
|
328
274
|
/** Whether the single busy marker of a kernel before phase C is present (v2 does not count). */
|
|
329
275
|
async legacyMarker(conv) {
|
|
@@ -331,9 +277,8 @@ export class SandboxLeases {
|
|
|
331
277
|
return v !== null && v !== BUSY_V2;
|
|
332
278
|
}
|
|
333
279
|
/** Live shared leases of the conversation. */
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
return Number(await this.redis.eval(COUNT, 2, lock, users));
|
|
280
|
+
sharedCount(conv) {
|
|
281
|
+
return this.locks.sharedCount(this.keys(conv));
|
|
337
282
|
}
|
|
338
283
|
/**
|
|
339
284
|
* Records (or refreshes) a holder that may run commands (before its provider calls); `ttlMs`
|
|
@@ -352,164 +297,79 @@ export class SandboxLeases {
|
|
|
352
297
|
* claimed only when `exclusiveToken` is the caller's exclusive lease (no shared lease live).
|
|
353
298
|
*/
|
|
354
299
|
async claimDeadHolders(conv, exclusiveToken) {
|
|
355
|
-
const
|
|
300
|
+
const { lock, users } = this.keys(conv);
|
|
356
301
|
const r = (await this.redis.eval(CLAIM, 4, lock, users, `${HOLDERS_PREFIX}${conv}`, `${SANDBOX_BUSY_PREFIX}${conv}`, exclusiveToken ?? ""));
|
|
357
302
|
const [legacy, ...tags] = r;
|
|
358
303
|
return { tags, legacyMarker: Number(legacy) === 1 };
|
|
359
304
|
}
|
|
360
305
|
/**
|
|
361
306
|
* A short lease on one path of the sandbox (the kernel's own read-modify-write of a file); waits
|
|
362
|
-
* up to `capMs`, then throws {@link SandboxPathBusyError}.
|
|
363
|
-
*
|
|
307
|
+
* up to `capMs`, then throws {@link SandboxPathBusyError}. A {@link LockService.hold} lease
|
|
308
|
+
* (renewed every TTL / 3): when it is lost its `signal` aborts.
|
|
364
309
|
*/
|
|
365
310
|
async pathLease(conv, path, signal, capMs) {
|
|
366
311
|
const key = `${PATH_PREFIX}${conv}:${createHash("sha256").update(path).digest("hex")}`;
|
|
367
312
|
const token = randomUUID();
|
|
368
|
-
const ttl = this.pathTtlMs;
|
|
369
313
|
const deadline = Date.now() + capMs;
|
|
314
|
+
let h;
|
|
370
315
|
for (;;) {
|
|
371
316
|
if (signal.aborted)
|
|
372
317
|
throw abortReason(signal);
|
|
373
|
-
|
|
318
|
+
h = await this.locks.hold(key, token, this.pathTtlMs);
|
|
319
|
+
if (h)
|
|
374
320
|
break;
|
|
375
321
|
if (Date.now() + this.pollMs > deadline)
|
|
376
322
|
throw new SandboxPathBusyError();
|
|
377
323
|
await this.wait(signal);
|
|
378
324
|
}
|
|
379
|
-
const
|
|
380
|
-
|
|
381
|
-
this.redis
|
|
382
|
-
.eval(EXPIRE_IF, 1, key, token, ttl)
|
|
383
|
-
.then((ok) => {
|
|
384
|
-
if (Number(ok) === 1 || ctl.signal.aborted)
|
|
385
|
-
return;
|
|
386
|
-
this.log.warn("sandbox path lease lost", { conversationId: conv });
|
|
387
|
-
ctl.abort(new SandboxLockLostError(conv));
|
|
388
|
-
clearInterval(timer);
|
|
389
|
-
})
|
|
390
|
-
.catch((err) => this.log.warn("sandbox path lease renew failed", { conversationId: conv, err }));
|
|
391
|
-
}, Math.max(1, Math.floor(ttl / 3)));
|
|
392
|
-
timer.unref();
|
|
393
|
-
return {
|
|
394
|
-
signal: ctl.signal,
|
|
395
|
-
release: async () => {
|
|
396
|
-
clearInterval(timer);
|
|
397
|
-
await this.redis.eval(DEL_IF, 1, key, token);
|
|
398
|
-
},
|
|
399
|
-
};
|
|
400
|
-
}
|
|
401
|
-
/**
|
|
402
|
-
* Wraps a just-acquired lease: renews every TTL / 3 and remembers the last successful renewal;
|
|
403
|
-
* the lease is lost when a renewal reports it gone or none succeeded for 2/3 TTL (leaving margin
|
|
404
|
-
* so the abort takes effect before the key expires).
|
|
405
|
-
*/
|
|
406
|
-
hold(conv, token, kind) {
|
|
407
|
-
const ctl = new AbortController();
|
|
408
|
-
const staleMs = Math.floor((this.ttlMs * 2) / 3);
|
|
409
|
-
let inFlight = false;
|
|
410
|
-
const s = {
|
|
411
|
-
kind,
|
|
412
|
-
token,
|
|
413
|
-
conv,
|
|
414
|
-
ctl,
|
|
415
|
-
lastOk: Date.now(),
|
|
416
|
-
released: false,
|
|
417
|
-
stop: () => {
|
|
418
|
-
clearInterval(timer);
|
|
419
|
-
clearInterval(watchdog);
|
|
420
|
-
},
|
|
421
|
-
};
|
|
422
|
-
const stale = () => Date.now() - s.lastOk > staleMs;
|
|
423
|
-
const tick = () => {
|
|
424
|
-
if (stale())
|
|
425
|
-
this.lose(s);
|
|
426
|
-
if (ctl.signal.aborted) {
|
|
427
|
-
s.stop();
|
|
428
|
-
return;
|
|
429
|
-
}
|
|
430
|
-
if (inFlight)
|
|
431
|
-
return;
|
|
432
|
-
inFlight = true;
|
|
433
|
-
void this.renew(s).finally(() => {
|
|
434
|
-
inFlight = false;
|
|
435
|
-
});
|
|
436
|
-
};
|
|
437
|
-
const timer = setInterval(tick, Math.max(1, Math.floor(this.ttlMs / 3)));
|
|
438
|
-
timer.unref();
|
|
439
|
-
// a finer check (at most every 5 s): notices a renewal that hangs
|
|
440
|
-
const watchdog = setInterval(() => {
|
|
441
|
-
if (stale())
|
|
442
|
-
this.lose(s);
|
|
443
|
-
if (ctl.signal.aborted)
|
|
444
|
-
s.stop();
|
|
445
|
-
}, Math.min(5000, Math.max(1, Math.floor(this.ttlMs / 6))));
|
|
446
|
-
watchdog.unref();
|
|
447
|
-
return this.view(s, kind);
|
|
325
|
+
const held = h;
|
|
326
|
+
return { signal: lostSignal(held.lost, conv), release: () => held.release() };
|
|
448
327
|
}
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
this.log.warn("sandbox lease lost", { conversationId: s.conv, kind: s.kind });
|
|
453
|
-
s.ctl.abort(new SandboxLockLostError(s.conv));
|
|
454
|
-
s.stop();
|
|
328
|
+
/** A sandbox lease over a held {@link SharedLeaseHandle}, as its current kind. */
|
|
329
|
+
held(conv, h) {
|
|
330
|
+
return this.view(conv, h, lostSignal(h.lost, conv), h.kind);
|
|
455
331
|
}
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
const [lock, users] = this.keys(s.conv);
|
|
460
|
-
// Redis computes the new expiry when it runs the script: freshness counts from the send
|
|
461
|
-
const sent = Date.now();
|
|
462
|
-
try {
|
|
463
|
-
const ok = Number(await this.redis.eval(RENEW, 2, lock, users, s.token, this.ttlMs, s.kind));
|
|
464
|
-
if (ok === 1)
|
|
465
|
-
s.lastOk = Math.max(s.lastOk, sent);
|
|
466
|
-
else
|
|
467
|
-
this.lose(s);
|
|
468
|
-
}
|
|
469
|
-
catch (err) {
|
|
470
|
-
this.log.warn("sandbox lease renew failed", { conversationId: s.conv, err });
|
|
471
|
-
}
|
|
472
|
-
if (Date.now() - s.lastOk > Math.floor((this.ttlMs * 2) / 3))
|
|
473
|
-
this.lose(s);
|
|
474
|
-
return !s.ctl.signal.aborted;
|
|
475
|
-
}
|
|
476
|
-
/** A lease view of `s` as `kind`; a view stops working once the lease changes kind. */
|
|
477
|
-
view(s, kind) {
|
|
478
|
-
const [lock, users] = this.keys(s.conv);
|
|
479
|
-
const current = () => s.kind === kind;
|
|
332
|
+
/** A lease view of `h` as `kind`; a view stops working once the lease changes kind. */
|
|
333
|
+
view(conv, h, signal, kind) {
|
|
334
|
+
const current = () => h.kind === kind;
|
|
480
335
|
return {
|
|
481
336
|
kind,
|
|
482
|
-
token:
|
|
483
|
-
conversationId:
|
|
484
|
-
signal
|
|
485
|
-
|
|
337
|
+
token: h.token,
|
|
338
|
+
conversationId: conv,
|
|
339
|
+
signal,
|
|
340
|
+
// a Redis error is warned, not thrown: the deadline decides whether the lease is lost
|
|
341
|
+
renew: async () => {
|
|
342
|
+
if (!current())
|
|
343
|
+
return false;
|
|
344
|
+
try {
|
|
345
|
+
return await h.renew();
|
|
346
|
+
}
|
|
347
|
+
catch (err) {
|
|
348
|
+
this.log.warn("sandbox lease renew failed", { conversationId: conv, err });
|
|
349
|
+
return !signal.aborted;
|
|
350
|
+
}
|
|
351
|
+
},
|
|
486
352
|
// Any view releases the lease in its current kind (a caller that kept only the exclusive
|
|
487
353
|
// view after a downgrade must not leak the shared lease, which would renew forever)
|
|
488
|
-
release:
|
|
489
|
-
if (s.released)
|
|
490
|
-
return;
|
|
491
|
-
s.released = true;
|
|
492
|
-
s.stop();
|
|
493
|
-
await this.redis
|
|
494
|
-
.eval(RELEASE, 2, lock, users, s.token, s.kind)
|
|
495
|
-
.catch((err) => this.log.warn("cannot release sandbox lease", { conversationId: s.conv, err }));
|
|
496
|
-
},
|
|
354
|
+
release: () => h.release(),
|
|
497
355
|
downgrade: async () => {
|
|
498
|
-
if (!current() ||
|
|
356
|
+
if (!current() || h.kind !== "exclusive")
|
|
499
357
|
throw new Error("sandbox lease is not exclusive");
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
if (ok !== 1) {
|
|
506
|
-
this.lose(s);
|
|
507
|
-
throw new SandboxLockLostError(s.conv);
|
|
508
|
-
}
|
|
509
|
-
s.kind = "shared";
|
|
510
|
-
s.lastOk = Math.max(s.lastOk, sent);
|
|
511
|
-
return this.view(s, "shared");
|
|
358
|
+
if (signal.aborted)
|
|
359
|
+
throw abortReason(signal);
|
|
360
|
+
if (!(await h.downgrade()))
|
|
361
|
+
throw new SandboxLockLostError(conv);
|
|
362
|
+
return this.view(conv, h, signal, "shared");
|
|
512
363
|
},
|
|
513
364
|
};
|
|
514
365
|
}
|
|
515
|
-
}
|
|
366
|
+
};
|
|
367
|
+
SandboxLeases = __decorate([
|
|
368
|
+
Injectable(),
|
|
369
|
+
__param(0, Inject(LockService)),
|
|
370
|
+
__param(1, Inject(REDIS)),
|
|
371
|
+
__param(2, Inject(KERNEL_LOGGER)),
|
|
372
|
+
__param(3, Optional()),
|
|
373
|
+
__param(3, Inject(SANDBOX_LEASE_TIMINGS))
|
|
374
|
+
], SandboxLeases);
|
|
375
|
+
export { SandboxLeases };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type SandboxProvider } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { ExtensionRegistry } from "../extensions/registry.js";
|
|
3
|
+
/** 当前的 `sandbox@1` 提供方:插件名与实现。 */
|
|
4
|
+
export interface SandboxProviderEntry {
|
|
5
|
+
plugin: string;
|
|
6
|
+
impl: SandboxProvider;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The `sandbox@1` providers of this process, read from the {@link ExtensionRegistry} at every
|
|
10
|
+
* call: providers are ready only after the extension load, and change with installs.
|
|
11
|
+
*/
|
|
12
|
+
export declare class SandboxProviders {
|
|
13
|
+
private readonly registry;
|
|
14
|
+
constructor(registry: Pick<ExtensionRegistry, "list">);
|
|
15
|
+
/** The current provider; undefined without one. */
|
|
16
|
+
current(): SandboxProviderEntry | undefined;
|
|
17
|
+
/** A still-loaded provider by plugin name (to destroy an earlier provider's instance). */
|
|
18
|
+
lookup(plugin: string): SandboxProvider | undefined;
|
|
19
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
10
|
+
import { SANDBOX_EXTENSION_POINT } from "@capybara-hq/plugin-sdk";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
12
|
+
import { ExtensionRegistry } from "../extensions/registry.js";
|
|
13
|
+
/**
|
|
14
|
+
* The `sandbox@1` providers of this process, read from the {@link ExtensionRegistry} at every
|
|
15
|
+
* call: providers are ready only after the extension load, and change with installs.
|
|
16
|
+
*/
|
|
17
|
+
let SandboxProviders = class SandboxProviders {
|
|
18
|
+
registry;
|
|
19
|
+
constructor(registry) {
|
|
20
|
+
this.registry = registry;
|
|
21
|
+
}
|
|
22
|
+
/** The current provider; undefined without one. */
|
|
23
|
+
current() {
|
|
24
|
+
const e = this.registry.list("sandbox").find((x) => x.capability === SANDBOX_EXTENSION_POINT);
|
|
25
|
+
return e ? { plugin: e.plugin, impl: e.impl } : undefined;
|
|
26
|
+
}
|
|
27
|
+
/** A still-loaded provider by plugin name (to destroy an earlier provider's instance). */
|
|
28
|
+
lookup(plugin) {
|
|
29
|
+
return this.registry
|
|
30
|
+
.list("sandbox")
|
|
31
|
+
.find((x) => x.capability === SANDBOX_EXTENSION_POINT && x.plugin === plugin)?.impl;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
SandboxProviders = __decorate([
|
|
35
|
+
Injectable(),
|
|
36
|
+
__param(0, Inject(ExtensionRegistry))
|
|
37
|
+
], SandboxProviders);
|
|
38
|
+
export { SandboxProviders };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandboxes: the one {@link SandboxService} (a conversation's sandbox over the `sandbox@1`
|
|
3
|
+
* provider, with the shared / exclusive leases of {@link SandboxLeases}) and the producer of the
|
|
4
|
+
* one-off `sandbox-destroy-for` jobs (`MaintenanceProcessor` consumes them). The sweeps
|
|
5
|
+
* (`SandboxSweepJobs`) are the worker role's (`WorkerModule`).
|
|
6
|
+
*/
|
|
7
|
+
export declare class SandboxModule {
|
|
8
|
+
}
|
|
@@ -0,0 +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
|
+
import { Module } from "@nestjs/common";
|
|
8
|
+
import { ExtensionRegistryModule } from "../extensions/registry.js";
|
|
9
|
+
import { QueueModule } from "../infra/queue/queue.module.js";
|
|
10
|
+
import { MAINTENANCE_QUEUE_NAME } from "../runtime/maintenance-queue.js";
|
|
11
|
+
import { SandboxJobs } from "./jobs.js";
|
|
12
|
+
import { SandboxLeases } from "./leases.js";
|
|
13
|
+
import { SandboxProviders } from "./providers.js";
|
|
14
|
+
import { SandboxService } from "./sandbox.service.js";
|
|
15
|
+
/**
|
|
16
|
+
* Sandboxes: the one {@link SandboxService} (a conversation's sandbox over the `sandbox@1`
|
|
17
|
+
* provider, with the shared / exclusive leases of {@link SandboxLeases}) and the producer of the
|
|
18
|
+
* one-off `sandbox-destroy-for` jobs (`MaintenanceProcessor` consumes them). The sweeps
|
|
19
|
+
* (`SandboxSweepJobs`) are the worker role's (`WorkerModule`).
|
|
20
|
+
*/
|
|
21
|
+
let SandboxModule = class SandboxModule {
|
|
22
|
+
};
|
|
23
|
+
SandboxModule = __decorate([
|
|
24
|
+
Module({
|
|
25
|
+
imports: [ExtensionRegistryModule, QueueModule.registerQueue(MAINTENANCE_QUEUE_NAME)],
|
|
26
|
+
providers: [SandboxProviders, SandboxLeases, SandboxService, SandboxJobs],
|
|
27
|
+
exports: [SandboxService, SandboxJobs],
|
|
28
|
+
})
|
|
29
|
+
], SandboxModule);
|
|
30
|
+
export { SandboxModule };
|