@capybara-hq/kernel 0.1.0-rc.0 → 0.1.0-rc.10
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 +92 -8
- package/dist/admin/admin.controller.d.ts +52 -71
- package/dist/admin/admin.controller.js +117 -63
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/admin.schemas.d.ts +57 -0
- package/dist/admin/admin.schemas.js +50 -0
- package/dist/admin/extensions.controller.d.ts +47 -16
- package/dist/admin/extensions.controller.js +94 -23
- package/dist/admin/extensions.schemas.d.ts +7 -0
- package/dist/admin/extensions.schemas.js +10 -0
- package/dist/admin/limit-defaults.d.ts +20 -0
- package/dist/admin/limit-defaults.js +10 -0
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +9 -9
- package/dist/admin/setup.controller.js +28 -26
- package/dist/admin/setup.service.d.ts +20 -28
- package/dist/admin/setup.service.js +65 -65
- package/dist/agents/agent-lookup.d.ts +72 -0
- package/dist/agents/agent-lookup.js +208 -0
- package/dist/agents/agent-profile.service.d.ts +31 -0
- package/dist/agents/agent-profile.service.js +122 -0
- package/dist/agents/agents.controller.d.ts +54 -169
- package/dist/agents/agents.controller.js +172 -37
- package/dist/agents/agents.module.d.ts +10 -0
- package/dist/agents/agents.module.js +71 -0
- package/dist/agents/agents.schemas.d.ts +389 -0
- package/dist/agents/agents.schemas.js +126 -0
- package/dist/agents/agents.service.d.ts +104 -76
- package/dist/agents/agents.service.js +509 -383
- package/dist/agents/definition.d.ts +133 -21
- package/dist/agents/definition.js +361 -41
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +680 -0
- package/dist/agents/from-template.service.d.ts +72 -0
- package/dist/agents/from-template.service.js +178 -0
- package/dist/agents/instruction-files.d.ts +60 -0
- package/dist/agents/instruction-files.js +111 -0
- package/dist/agents/models.controller.d.ts +44 -6
- package/dist/agents/models.controller.js +84 -8
- package/dist/agents/org-templates.d.ts +186 -0
- package/dist/agents/org-templates.js +868 -0
- package/dist/agents/pending-connector-requests.d.ts +79 -0
- package/dist/agents/pending-connector-requests.js +215 -0
- package/dist/agents/pending-connectors.controller.d.ts +39 -0
- package/dist/agents/pending-connectors.controller.js +91 -0
- package/dist/agents/pending-connectors.service.d.ts +62 -0
- package/dist/agents/pending-connectors.service.js +282 -0
- package/dist/agents/profile.d.ts +114 -0
- package/dist/agents/profile.js +55 -0
- package/dist/agents/readiness.controller.d.ts +26 -0
- package/dist/agents/readiness.controller.js +56 -0
- package/dist/agents/templates.controller.d.ts +78 -6
- package/dist/agents/templates.controller.js +154 -8
- package/dist/agents/templates.d.ts +132 -30
- package/dist/agents/templates.js +500 -46
- package/dist/agents/templates.schemas.d.ts +20 -0
- package/dist/agents/templates.schemas.js +45 -0
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -0
- package/dist/background/background.controller.d.ts +38 -0
- package/dist/background/background.controller.js +88 -0
- package/dist/background/background.module.d.ts +10 -0
- package/dist/background/background.module.js +39 -0
- package/dist/background/background.schemas.d.ts +10 -0
- package/dist/background/background.schemas.js +16 -0
- package/dist/background/finish.d.ts +44 -0
- package/dist/background/finish.js +95 -0
- package/dist/background/launch-lock.d.ts +15 -0
- package/dist/background/launch-lock.js +40 -0
- package/dist/background/launch.d.ts +42 -0
- package/dist/background/launch.js +77 -0
- package/dist/background/poll.job.d.ts +56 -0
- package/dist/background/poll.job.js +195 -0
- package/dist/background/render.d.ts +23 -0
- package/dist/background/render.js +48 -0
- package/dist/background/session.d.ts +48 -0
- package/dist/background/session.js +80 -0
- package/dist/background/status.d.ts +35 -0
- package/dist/background/status.js +57 -0
- package/dist/background/stop.d.ts +68 -0
- package/dist/background/stop.js +244 -0
- package/dist/background/store.d.ts +167 -0
- package/dist/background/store.js +361 -0
- package/dist/background/store.module.d.ts +6 -0
- package/dist/background/store.module.js +22 -0
- package/dist/background/tasks.service.d.ts +77 -0
- package/dist/background/tasks.service.js +216 -0
- package/dist/background/wake-rules.d.ts +66 -0
- package/dist/background/wake-rules.js +113 -0
- package/dist/background/wake.d.ts +30 -0
- package/dist/background/wake.js +63 -0
- package/dist/catalog/admin-catalog.controller.d.ts +102 -52
- package/dist/catalog/admin-catalog.controller.js +222 -67
- package/dist/catalog/admin-catalog.schemas.d.ts +72 -0
- package/dist/catalog/admin-catalog.schemas.js +92 -0
- package/dist/catalog/catalog-content.d.ts +232 -0
- package/dist/catalog/catalog-content.js +367 -0
- package/dist/catalog/catalog-files.d.ts +41 -0
- package/dist/catalog/catalog-files.js +86 -0
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +60 -0
- package/dist/catalog/catalog-items.d.ts +290 -0
- package/dist/catalog/catalog-items.js +676 -0
- package/dist/catalog/catalog-scope.service.d.ts +260 -0
- package/dist/catalog/catalog-scope.service.js +1124 -0
- package/dist/catalog/catalog.module.d.ts +12 -0
- package/dist/catalog/catalog.module.js +81 -0
- package/dist/catalog/catalog.service.d.ts +141 -206
- package/dist/catalog/catalog.service.js +237 -528
- package/dist/catalog/claude/agents.js +15 -10
- package/dist/catalog/cli.d.ts +14 -3
- package/dist/catalog/cli.js +39 -32
- package/dist/catalog/component-promotion.d.ts +96 -0
- package/dist/catalog/component-promotion.js +395 -0
- package/dist/catalog/component-scope.controller.d.ts +90 -0
- package/dist/catalog/component-scope.controller.js +234 -0
- package/dist/catalog/component-scope.schemas.d.ts +114 -0
- package/dist/catalog/component-scope.schemas.js +97 -0
- package/dist/catalog/component-scope.service.d.ts +327 -0
- package/dist/catalog/component-scope.service.js +990 -0
- package/dist/catalog/component-state.d.ts +188 -0
- package/dist/catalog/component-state.js +455 -0
- package/dist/catalog/git-source.d.ts +9 -1
- package/dist/catalog/git-source.js +29 -2
- package/dist/catalog/job-ids.d.ts +45 -0
- package/dist/catalog/job-ids.js +40 -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/marketplace-fetch.d.ts +1 -1
- package/dist/catalog/marketplace-icons.d.ts +64 -0
- package/dist/catalog/marketplace-icons.js +131 -0
- package/dist/catalog/marketplaces.controller.d.ts +53 -44
- package/dist/catalog/marketplaces.controller.js +146 -51
- package/dist/catalog/marketplaces.schemas.d.ts +48 -0
- package/dist/catalog/marketplaces.schemas.js +53 -0
- package/dist/catalog/marketplaces.service.d.ts +136 -26
- package/dist/catalog/marketplaces.service.js +663 -281
- package/dist/catalog/org-catalog.controller.d.ts +115 -63
- package/dist/catalog/org-catalog.controller.js +207 -100
- package/dist/catalog/org-catalog.schemas.d.ts +88 -0
- package/dist/catalog/org-catalog.schemas.js +93 -0
- package/dist/catalog/org-catalog.service.d.ts +89 -216
- package/dist/catalog/org-catalog.service.js +431 -472
- package/dist/catalog/org-extension-switch.d.ts +41 -0
- package/dist/catalog/org-extension-switch.js +115 -0
- package/dist/catalog/org-extension.controller.d.ts +113 -0
- package/dist/catalog/org-extension.controller.js +271 -0
- package/dist/catalog/org-extension.schemas.d.ts +15 -0
- package/dist/catalog/org-extension.schemas.js +22 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +77 -0
- package/dist/catalog/org-plugin-uploads.controller.js +200 -0
- package/dist/catalog/org-plugin-uploads.d.ts +71 -0
- package/dist/catalog/org-plugin-uploads.js +122 -0
- package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
- package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
- package/dist/catalog/owned-items.d.ts +188 -0
- package/dist/catalog/owned-items.js +801 -0
- package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
- package/dist/catalog/owned-plugin-cleanup.js +194 -0
- package/dist/catalog/ownership.d.ts +172 -0
- package/dist/catalog/ownership.js +326 -0
- package/dist/catalog/platform-components.d.ts +223 -0
- package/dist/catalog/platform-components.js +763 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +582 -0
- package/dist/catalog/plugin-import.d.ts +270 -68
- package/dist/catalog/plugin-import.js +1004 -277
- package/dist/catalog/plugin-install.d.ts +251 -65
- package/dist/catalog/plugin-install.js +1128 -344
- package/dist/catalog/plugin-package.js +14 -1
- package/dist/catalog/plugin-upgrade.d.ts +301 -188
- package/dist/catalog/plugin-upgrade.js +1256 -1068
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +205 -117
- package/dist/catalog/requests.service.js +612 -369
- package/dist/catalog/reserved-names.d.ts +8 -0
- package/dist/catalog/reserved-names.js +42 -0
- package/dist/catalog/scope-orgs.d.ts +21 -0
- package/dist/catalog/scope-orgs.js +67 -0
- package/dist/catalog/scope-state.d.ts +35 -0
- package/dist/catalog/scope-state.js +87 -0
- package/dist/catalog/scope-sync-workers.d.ts +7 -0
- package/dist/catalog/scope-sync-workers.js +29 -0
- package/dist/catalog/scope-sync.d.ts +176 -0
- package/dist/catalog/scope-sync.js +576 -0
- package/dist/catalog/scope.d.ts +42 -0
- package/dist/catalog/scope.js +42 -0
- package/dist/catalog/unshare.d.ts +22 -0
- package/dist/catalog/unshare.js +118 -0
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +11 -4
- package/dist/channels/cards.d.ts +33 -11
- package/dist/channels/cards.js +96 -24
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +130 -0
- package/dist/channels/channels.schemas.d.ts +37 -0
- package/dist/channels/channels.schemas.js +38 -0
- package/dist/channels/connections.controller.d.ts +44 -37
- package/dist/channels/connections.controller.js +83 -38
- package/dist/channels/connections.service.d.ts +101 -30
- package/dist/channels/connections.service.js +380 -147
- package/dist/channels/inbound.d.ts +44 -38
- package/dist/channels/inbound.js +190 -44
- 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 +71 -80
- package/dist/channels/outbound.js +219 -201
- package/dist/channels/phrases.d.ts +33 -2
- package/dist/channels/phrases.js +29 -1
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +34 -8
- package/dist/channels/threads.js +79 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/docs.js +5 -1
- 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 +51 -3
- package/dist/config/schema.js +269 -27
- package/dist/conversations/access.d.ts +31 -0
- package/dist/conversations/access.js +110 -0
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -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 +60 -22
- package/dist/conversations/attachments.service.js +249 -51
- package/dist/conversations/conversations.controller.d.ts +86 -50
- package/dist/conversations/conversations.controller.js +184 -103
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +72 -0
- package/dist/conversations/conversations.schemas.d.ts +52 -0
- package/dist/conversations/conversations.schemas.js +79 -0
- package/dist/conversations/conversations.service.d.ts +166 -49
- package/dist/conversations/conversations.service.js +383 -179
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +64 -27
- package/dist/conversations/event-log.js +167 -31
- package/dist/conversations/events.d.ts +252 -9
- package/dist/conversations/events.js +243 -32
- 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/message-context.d.ts +79 -0
- package/dist/conversations/message-context.js +145 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +53 -58
- package/dist/conversations/queue.js +37 -293
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +350 -0
- package/dist/conversations/titles.d.ts +83 -27
- package/dist/conversations/titles.js +195 -70
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +26 -1
- package/dist/ctx/create-ctx.js +45 -16
- 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 +550 -25
- package/dist/db/pool.d.ts +10 -0
- package/dist/db/pool.js +4 -0
- package/dist/devices/device-auth.controller.d.ts +42 -0
- package/dist/devices/device-auth.controller.js +116 -0
- package/dist/devices/device-auth.d.ts +119 -0
- package/dist/devices/device-auth.js +403 -0
- package/dist/devices/device-auth.module.d.ts +7 -0
- package/dist/devices/device-auth.module.js +25 -0
- package/dist/devices/device-gateway.d.ts +128 -0
- package/dist/devices/device-gateway.js +530 -0
- package/dist/devices/device-provider.d.ts +89 -0
- package/dist/devices/device-provider.js +151 -0
- package/dist/devices/device-routes.d.ts +36 -0
- package/dist/devices/device-routes.js +90 -0
- package/dist/devices/devices.module.d.ts +16 -0
- package/dist/devices/devices.module.js +44 -0
- package/dist/devices/dto.d.ts +66 -0
- package/dist/devices/dto.js +44 -0
- package/dist/devices/keys.d.ts +25 -0
- package/dist/devices/keys.js +25 -0
- package/dist/devices/machines.d.ts +118 -0
- package/dist/devices/machines.js +366 -0
- package/dist/devices/relay.d.ts +100 -0
- package/dist/devices/relay.js +373 -0
- package/dist/devices/targets.d.ts +28 -0
- package/dist/devices/targets.js +73 -0
- package/dist/environments/access.d.ts +66 -0
- package/dist/environments/access.js +113 -0
- package/dist/environments/conversation-environments.d.ts +75 -0
- package/dist/environments/conversation-environments.js +231 -0
- package/dist/environments/dto.d.ts +25 -0
- package/dist/environments/dto.js +12 -0
- package/dist/environments/environments.controller.d.ts +36 -0
- package/dist/environments/environments.controller.js +124 -0
- package/dist/environments/environments.module.d.ts +8 -0
- package/dist/environments/environments.module.js +31 -0
- package/dist/environments/environments.schemas.d.ts +3 -0
- package/dist/environments/environments.schemas.js +14 -0
- package/dist/environments/environments.service.d.ts +251 -0
- package/dist/environments/environments.service.js +791 -0
- package/dist/environments/label.d.ts +11 -0
- package/dist/environments/label.js +25 -0
- package/dist/environments/legacy-cleanup.job.d.ts +34 -0
- package/dist/environments/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +136 -2
- package/dist/errors.js +136 -2
- 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/evals.schemas.d.ts +110 -0
- package/dist/evals/evals.schemas.js +107 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +36 -10
- package/dist/evals/recorded-tools.d.ts +37 -1
- package/dist/evals/recorded-tools.js +120 -10
- package/dist/evals/run-replay.d.ts +75 -10
- package/dist/evals/run-replay.js +218 -94
- package/dist/evals/runs.controller.d.ts +3 -58
- package/dist/evals/runs.controller.js +18 -50
- package/dist/evals/runs.service.d.ts +31 -52
- package/dist/evals/runs.service.js +281 -255
- package/dist/evals/sets.controller.d.ts +3 -29
- package/dist/evals/sets.controller.js +18 -39
- package/dist/evals/sets.service.d.ts +29 -13
- package/dist/evals/sets.service.js +262 -202
- package/dist/evals/snapshot.d.ts +5 -4
- package/dist/evals/snapshot.js +17 -4
- package/dist/evals/step-replay.d.ts +6 -8
- package/dist/evals/step-replay.js +17 -10
- 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.js +1 -1
- package/dist/evals/trajectory.service.d.ts +13 -7
- package/dist/evals/trajectory.service.js +56 -21
- package/dist/evals/worker.d.ts +48 -31
- package/dist/evals/worker.js +229 -123
- package/dist/extensions/admin-ops.d.ts +133 -41
- package/dist/extensions/admin-ops.js +378 -172
- package/dist/extensions/admin-view.d.ts +82 -32
- package/dist/extensions/admin-view.js +284 -71
- package/dist/extensions/approvals.d.ts +24 -10
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +112 -45
- package/dist/extensions/bootstrap.d.ts +136 -46
- package/dist/extensions/bootstrap.js +417 -167
- package/dist/extensions/cli.d.ts +32 -10
- package/dist/extensions/cli.js +52 -98
- package/dist/extensions/config-hash.d.ts +10 -0
- package/dist/extensions/config-hash.js +38 -0
- package/dist/extensions/config-issues.d.ts +19 -0
- package/dist/extensions/config-issues.js +48 -0
- package/dist/extensions/config-json-schema.d.ts +43 -7
- package/dist/extensions/config-json-schema.js +124 -58
- package/dist/extensions/deployment-config-store.d.ts +55 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +146 -70
- package/dist/extensions/deployment-config.js +439 -246
- package/dist/extensions/display-name.d.ts +22 -0
- package/dist/extensions/display-name.js +77 -0
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +96 -0
- package/dist/extensions/hooks.d.ts +40 -6
- package/dist/extensions/hooks.js +83 -17
- package/dist/extensions/host.d.ts +161 -80
- package/dist/extensions/host.js +505 -213
- package/dist/extensions/installs.d.ts +73 -19
- package/dist/extensions/installs.js +174 -37
- 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 +45 -0
- package/dist/extensions/locks.js +112 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.d.ts +141 -49
- package/dist/extensions/org-config.js +471 -243
- package/dist/extensions/org-levels.d.ts +37 -0
- package/dist/extensions/org-levels.js +71 -0
- package/dist/extensions/org-overrides.d.ts +151 -0
- package/dist/extensions/org-overrides.js +524 -0
- package/dist/extensions/package.d.ts +14 -1
- package/dist/extensions/package.js +51 -2
- package/dist/extensions/permission-view.d.ts +59 -6
- package/dist/extensions/permission-view.js +7 -5
- package/dist/extensions/plugin-guides.d.ts +129 -0
- package/dist/extensions/plugin-guides.js +283 -0
- package/dist/extensions/plugin-icons.d.ts +54 -0
- package/dist/extensions/plugin-icons.js +125 -0
- package/dist/extensions/plugin-items.d.ts +21 -0
- package/dist/extensions/plugin-items.js +42 -0
- package/dist/extensions/point-defaults.controller.d.ts +28 -0
- package/dist/extensions/point-defaults.controller.js +69 -0
- package/dist/extensions/point-defaults.d.ts +73 -0
- package/dist/extensions/point-defaults.js +236 -0
- package/dist/extensions/point-defaults.schemas.d.ts +9 -0
- package/dist/extensions/point-defaults.schemas.js +14 -0
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +91 -4
- package/dist/extensions/resolve.d.ts +51 -1
- package/dist/extensions/resolve.js +85 -3
- package/dist/extensions/single-provider.d.ts +92 -0
- package/dist/extensions/single-provider.js +180 -0
- package/dist/extensions/sources.d.ts +19 -10
- package/dist/extensions/sources.js +34 -13
- package/dist/extensions/state.module.d.ts +9 -0
- package/dist/extensions/state.module.js +38 -0
- package/dist/extensions/unavailable.d.ts +50 -0
- package/dist/extensions/unavailable.js +115 -0
- 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 +19 -12
- package/dist/files/previewers.d.ts +21 -19
- package/dist/files/previewers.js +114 -38
- package/dist/files/previewers.schemas.d.ts +10 -0
- package/dist/files/previewers.schemas.js +9 -0
- 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 +86 -358
- package/dist/http/app.d.ts +22 -17
- package/dist/http/app.js +83 -52
- 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/http/{gateway.module.d.ts → gateway-routes.d.ts} +7 -3
- package/dist/http/gateway-routes.js +16 -0
- package/dist/http/nest-logger.d.ts +6 -5
- package/dist/http/nest-logger.js +24 -10
- package/dist/http/plugin-dispatch.d.ts +4 -1
- package/dist/http/plugin-dispatch.js +14 -2
- package/dist/identity/accounts.d.ts +130 -38
- package/dist/identity/accounts.js +373 -186
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +9 -5
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +40 -30
- package/dist/identity/auth.guard.d.ts +16 -8
- package/dist/identity/auth.guard.js +41 -13
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/cookies.d.ts +26 -5
- package/dist/identity/cookies.js +58 -6
- 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 +59 -0
- package/dist/identity/initial-passwords.controller.d.ts +22 -0
- package/dist/identity/initial-passwords.controller.js +49 -0
- package/dist/identity/initial-passwords.d.ts +61 -0
- package/dist/identity/initial-passwords.job.d.ts +16 -0
- package/dist/identity/initial-passwords.job.js +46 -0
- package/dist/identity/initial-passwords.js +159 -0
- package/dist/identity/me.controller.d.ts +32 -15
- package/dist/identity/me.controller.js +78 -33
- package/dist/identity/me.schemas.d.ts +14 -0
- package/dist/identity/me.schemas.js +17 -0
- package/dist/identity/principal.d.ts +11 -3
- package/dist/identity/principal.js +11 -3
- package/dist/identity/sessions.d.ts +24 -10
- package/dist/identity/sessions.js +119 -42
- package/dist/identity/settings.d.ts +42 -23
- package/dist/identity/settings.js +137 -72
- 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/identity/super-admin.d.ts +20 -0
- package/dist/identity/super-admin.js +81 -0
- package/dist/inbox/inbox.module.d.ts +6 -0
- package/dist/inbox/inbox.module.js +26 -0
- package/dist/inbox/inbox.schemas.d.ts +8 -0
- package/dist/inbox/inbox.schemas.js +11 -0
- package/dist/inbox/inbox.service.d.ts +68 -11
- package/dist/inbox/inbox.service.js +104 -13
- package/dist/inbox/org-notices.d.ts +63 -0
- package/dist/inbox/org-notices.js +91 -0
- package/dist/inbox/platform-inbox.controller.d.ts +23 -0
- package/dist/inbox/platform-inbox.controller.js +58 -0
- package/dist/inbox/platform-inbox.service.d.ts +151 -0
- package/dist/inbox/platform-inbox.service.js +263 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +25 -14
- package/dist/index.js +20 -9
- 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 +173 -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 +157 -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 +91 -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 +121 -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 +90 -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 +18 -0
- package/dist/infra/logging/logging.module.js +52 -0
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -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 +13 -0
- package/dist/infra/queue/redis-connection.js +25 -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 +91 -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 +36 -0
- package/dist/infra/throttler/named-throttlers.js +157 -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 +20 -0
- package/dist/infra/tokens.js +20 -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 +145 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +465 -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 +53 -10
- package/dist/log.js +168 -18
- package/dist/models/embeddings.d.ts +82 -0
- package/dist/models/embeddings.js +326 -0
- package/dist/models/enablement.controller.d.ts +40 -0
- package/dist/models/enablement.controller.js +74 -0
- package/dist/models/enablement.d.ts +101 -0
- package/dist/models/enablement.js +264 -0
- package/dist/models/models.module.d.ts +7 -0
- package/dist/models/models.module.js +36 -0
- package/dist/models/org-models.schemas.d.ts +8 -0
- package/dist/models/org-models.schemas.js +22 -0
- package/dist/models/prices.d.ts +13 -5
- package/dist/models/prices.js +69 -39
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +16 -11
- package/dist/models/purposes.d.ts +103 -23
- package/dist/models/purposes.js +208 -77
- 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 +74 -35
- package/dist/orgs/directory-sync.js +243 -132
- 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 +61 -60
- package/dist/orgs/offboarding.js +206 -95
- package/dist/orgs/org-lock.d.ts +33 -19
- package/dist/orgs/org-lock.js +94 -35
- package/dist/orgs/org.guard.d.ts +11 -1
- package/dist/orgs/org.guard.js +45 -34
- package/dist/orgs/orgs.controller.d.ts +13 -16
- package/dist/orgs/orgs.controller.js +29 -20
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +71 -0
- package/dist/orgs/orgs.schemas.d.ts +8 -0
- package/dist/orgs/orgs.schemas.js +16 -0
- package/dist/orgs/orgs.service.d.ts +47 -21
- package/dist/orgs/orgs.service.js +166 -91
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +2 -2
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +45 -14
- package/dist/orgs/settings.service.js +110 -51
- package/dist/overrides.d.ts +63 -0
- package/dist/overrides.js +34 -0
- package/dist/platform/actor.d.ts +48 -0
- package/dist/platform/actor.js +100 -0
- package/dist/platform/agent-docs.d.ts +18 -0
- package/dist/platform/agent-docs.js +59 -0
- package/dist/platform/availability.d.ts +14 -0
- package/dist/platform/availability.js +43 -0
- package/dist/platform/errors.d.ts +28 -0
- package/dist/platform/errors.js +65 -0
- package/dist/platform/exclusions.d.ts +11 -0
- package/dist/platform/exclusions.js +667 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +169 -0
- package/dist/platform/operation.js +90 -0
- package/dist/platform/ops/accounts.ops.d.ts +32 -0
- package/dist/platform/ops/accounts.ops.js +291 -0
- package/dist/platform/ops/admin.ops.d.ts +36 -0
- package/dist/platform/ops/admin.ops.js +389 -0
- package/dist/platform/ops/agent-skills.ops.d.ts +24 -0
- package/dist/platform/ops/agent-skills.ops.js +226 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +17 -0
- package/dist/platform/ops/agent-templates.ops.js +272 -0
- package/dist/platform/ops/agents.ops.d.ts +37 -0
- package/dist/platform/ops/agents.ops.js +717 -0
- package/dist/platform/ops/approvals.ops.d.ts +30 -0
- package/dist/platform/ops/approvals.ops.js +116 -0
- package/dist/platform/ops/background.ops.d.ts +14 -0
- package/dist/platform/ops/background.ops.js +134 -0
- package/dist/platform/ops/catalog-admin.ops.d.ts +74 -0
- package/dist/platform/ops/catalog-admin.ops.js +599 -0
- package/dist/platform/ops/channels.ops.d.ts +16 -0
- package/dist/platform/ops/channels.ops.js +195 -0
- package/dist/platform/ops/components.ops.d.ts +46 -0
- package/dist/platform/ops/components.ops.js +853 -0
- package/dist/platform/ops/connectors.ops.d.ts +17 -0
- package/dist/platform/ops/connectors.ops.js +188 -0
- package/dist/platform/ops/conversations.ops.d.ts +30 -0
- package/dist/platform/ops/conversations.ops.js +470 -0
- package/dist/platform/ops/environments.ops.d.ts +26 -0
- package/dist/platform/ops/environments.ops.js +311 -0
- package/dist/platform/ops/errors.d.ts +16 -0
- package/dist/platform/ops/errors.js +30 -0
- package/dist/platform/ops/evals.ops.d.ts +28 -0
- package/dist/platform/ops/evals.ops.js +783 -0
- package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
- package/dist/platform/ops/extensions-admin.ops.js +372 -0
- package/dist/platform/ops/extensions.ops.d.ts +25 -0
- package/dist/platform/ops/extensions.ops.js +347 -0
- package/dist/platform/ops/inbox.ops.d.ts +25 -0
- package/dist/platform/ops/inbox.ops.js +378 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +22 -0
- package/dist/platform/ops/marketplaces.ops.js +466 -0
- package/dist/platform/ops/models.ops.d.ts +25 -0
- package/dist/platform/ops/models.ops.js +232 -0
- package/dist/platform/ops/org-plugins.ops.d.ts +29 -0
- package/dist/platform/ops/org-plugins.ops.js +329 -0
- package/dist/platform/ops/org-settings.ops.d.ts +16 -0
- package/dist/platform/ops/org-settings.ops.js +102 -0
- package/dist/platform/ops/orgs.ops.d.ts +28 -0
- package/dist/platform/ops/orgs.ops.js +295 -0
- package/dist/platform/ops/other-orgs.d.ts +20 -0
- package/dist/platform/ops/other-orgs.js +72 -0
- package/dist/platform/ops/paging.d.ts +14 -0
- package/dist/platform/ops/paging.js +20 -0
- package/dist/platform/ops/platform.ops.d.ts +28 -0
- package/dist/platform/ops/platform.ops.js +204 -0
- package/dist/platform/ops/plugins.ops.d.ts +35 -0
- package/dist/platform/ops/plugins.ops.js +476 -0
- package/dist/platform/ops/previewers.ops.d.ts +14 -0
- package/dist/platform/ops/previewers.ops.js +109 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +191 -0
- package/dist/platform/ops/role.d.ts +4 -0
- package/dist/platform/ops/role.js +10 -0
- package/dist/platform/ops/skills.ops.d.ts +17 -0
- package/dist/platform/ops/skills.ops.js +216 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/ops/unavailable.d.ts +23 -0
- package/dist/platform/ops/unavailable.js +118 -0
- package/dist/platform/parity.d.ts +33 -0
- package/dist/platform/parity.js +272 -0
- package/dist/platform/platform-ops.module.d.ts +39 -0
- package/dist/platform/platform-ops.module.js +122 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/platform/route-schemas.d.ts +18 -0
- package/dist/platform/route-schemas.js +63 -0
- package/dist/roles/gateway-role.d.ts +54 -0
- package/dist/roles/gateway-role.js +118 -0
- package/dist/roles/gateway.module.d.ts +9 -0
- package/dist/roles/gateway.module.js +31 -0
- package/dist/roles/worker-role.d.ts +65 -0
- package/dist/roles/worker-role.js +151 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +106 -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 +21 -13
- package/dist/runtime/context/build.js +106 -29
- package/dist/runtime/context/claude-tools.d.ts +4 -1
- package/dist/runtime/context/claude-tools.js +13 -12
- package/dist/runtime/context/compaction.js +24 -1
- package/dist/runtime/context/environment-paths.d.ts +40 -0
- package/dist/runtime/context/environment-paths.js +48 -0
- package/dist/runtime/context/legacy-text.d.ts +22 -0
- package/dist/runtime/context/legacy-text.js +37 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/run-context.d.ts +65 -0
- package/dist/runtime/context/run-context.js +215 -0
- package/dist/runtime/context/skills.d.ts +29 -11
- package/dist/runtime/context/skills.js +46 -32
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +11 -4
- package/dist/runtime/hook-calls.js +41 -13
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +37 -18
- package/dist/runtime/loop.d.ts +42 -6
- 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 +50 -74
- package/dist/runtime/maintenance.js +166 -136
- package/dist/runtime/model-call.d.ts +61 -15
- package/dist/runtime/model-call.js +128 -84
- package/dist/runtime/providers.d.ts +158 -27
- package/dist/runtime/providers.js +373 -63
- 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-context.service.d.ts +65 -0
- package/dist/runtime/run-context.service.js +236 -0
- package/dist/runtime/run-control.d.ts +43 -0
- package/dist/runtime/run-control.js +89 -0
- package/dist/runtime/run-drafts.d.ts +85 -0
- package/dist/runtime/run-drafts.js +230 -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 +46 -0
- package/dist/runtime/run-jobs.js +91 -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 +90 -58
- package/dist/runtime/run-queue.js +566 -297
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +134 -77
- package/dist/runtime/run-worker.js +412 -236
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +122 -0
- package/dist/runtime/step-log.d.ts +51 -0
- package/dist/runtime/step-log.js +111 -0
- package/dist/runtime/stream.controller.d.ts +28 -9
- package/dist/runtime/stream.controller.js +72 -13
- package/dist/runtime/stream.d.ts +27 -6
- package/dist/runtime/stream.js +102 -7
- package/dist/runtime/subagents/child.d.ts +58 -51
- package/dist/runtime/subagents/child.js +105 -86
- package/dist/runtime/subagents/definition.d.ts +32 -28
- package/dist/runtime/subagents/definition.js +89 -143
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +197 -27
- package/dist/runtime/subagents/dispatch.js +336 -270
- package/dist/runtime/subagents/limits.d.ts +32 -8
- package/dist/runtime/subagents/limits.js +44 -8
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +3 -2
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +10 -8
- package/dist/runtime/subagents/progress.js +11 -6
- package/dist/runtime/subagents/render.d.ts +30 -0
- package/dist/runtime/subagents/render.js +53 -0
- package/dist/runtime/subagents/roster.d.ts +27 -10
- package/dist/runtime/subagents/roster.js +49 -13
- package/dist/runtime/subagents/skill-fork.d.ts +10 -10
- package/dist/runtime/subagents/skill-fork.js +23 -8
- package/dist/runtime/subagents/status.d.ts +14 -0
- package/dist/runtime/subagents/status.js +23 -0
- package/dist/runtime/subagents/subagents.service.d.ts +43 -0
- package/dist/runtime/subagents/subagents.service.js +106 -0
- package/dist/runtime/usage-report-jobs.d.ts +88 -0
- package/dist/runtime/usage-report-jobs.js +158 -0
- package/dist/runtime/usage-report.d.ts +121 -83
- package/dist/runtime/usage-report.js +355 -180
- package/dist/runtime/waits.d.ts +258 -81
- package/dist/runtime/waits.js +800 -263
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +68 -0
- package/dist/sandbox/jobs.js +150 -0
- package/dist/sandbox/leases.d.ts +73 -82
- package/dist/sandbox/leases.js +162 -346
- package/dist/sandbox/providers.d.ts +46 -0
- package/dist/sandbox/providers.js +83 -0
- package/dist/sandbox/sandbox.module.d.ts +9 -0
- package/dist/sandbox/sandbox.module.js +36 -0
- package/dist/sandbox/sandbox.service.d.ts +359 -151
- package/dist/sandbox/sandbox.service.js +950 -435
- package/dist/sandbox/unreachable.d.ts +30 -0
- package/dist/sandbox/unreachable.js +108 -0
- package/dist/skills/catalog.d.ts +40 -26
- package/dist/skills/catalog.js +120 -99
- package/dist/skills/changes.controller.d.ts +11 -4
- package/dist/skills/changes.controller.js +34 -9
- package/dist/skills/changes.service.d.ts +31 -21
- package/dist/skills/changes.service.js +426 -368
- package/dist/skills/invocable.controller.d.ts +2 -2
- package/dist/skills/invocable.controller.js +10 -7
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +19 -18
- package/dist/skills/invoke.js +68 -24
- package/dist/skills/package.d.ts +20 -1
- package/dist/skills/package.js +28 -1
- package/dist/skills/skills.controller.d.ts +33 -7
- package/dist/skills/skills.controller.js +79 -12
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +39 -0
- package/dist/skills/skills.schemas.d.ts +48 -0
- package/dist/skills/skills.schemas.js +61 -0
- package/dist/skills/skills.service.d.ts +151 -44
- package/dist/skills/skills.service.js +636 -204
- package/dist/skills/usable.d.ts +81 -0
- package/dist/skills/usable.js +379 -0
- 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/time-zone.d.ts +5 -0
- package/dist/time-zone.js +19 -0
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +14 -11
- package/dist/tools/approvals.schemas.d.ts +21 -0
- package/dist/tools/approvals.schemas.js +15 -0
- package/dist/tools/approvals.service.d.ts +53 -27
- package/dist/tools/approvals.service.js +365 -260
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtin-names.d.ts +109 -0
- package/dist/tools/builtin-names.js +173 -0
- package/dist/tools/builtins/agent.d.ts +27 -25
- package/dist/tools/builtins/agent.js +66 -63
- 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 +41 -0
- package/dist/tools/builtins/builtin-tools.js +151 -0
- package/dist/tools/builtins/current-time.d.ts +26 -0
- package/dist/tools/builtins/current-time.js +99 -0
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +51 -0
- package/dist/tools/builtins/platform.js +451 -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 +293 -41
- package/dist/tools/builtins/sandbox/common.d.ts +142 -40
- package/dist/tools/builtins/sandbox/common.js +227 -65
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +21 -18
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +65 -51
- 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 +19 -14
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +155 -36
- package/dist/tools/builtins/sandbox/index.d.ts +9 -5
- package/dist/tools/builtins/sandbox/index.js +13 -5
- package/dist/tools/builtins/sandbox/read.d.ts +2 -2
- package/dist/tools/builtins/sandbox/read.js +30 -20
- package/dist/tools/builtins/sandbox/task-output.d.ts +79 -0
- package/dist/tools/builtins/sandbox/task-output.js +334 -0
- package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
- package/dist/tools/builtins/sandbox/task-stop.js +113 -0
- package/dist/tools/builtins/sandbox/write.d.ts +1 -1
- package/dist/tools/builtins/sandbox/write.js +52 -45
- package/dist/tools/builtins/send-message.d.ts +56 -0
- package/dist/tools/builtins/send-message.js +100 -0
- package/dist/tools/builtins/skill-load.d.ts +32 -21
- package/dist/tools/builtins/skill-load.js +125 -74
- package/dist/tools/builtins/skill-write.d.ts +4 -4
- package/dist/tools/builtins/skill-write.js +12 -12
- package/dist/tools/builtins/tool-search.d.ts +13 -9
- package/dist/tools/builtins/tool-search.js +25 -14
- package/dist/tools/builtins/web/errors.d.ts +8 -0
- package/dist/tools/builtins/web/errors.js +53 -0
- package/dist/tools/builtins/web/extract.d.ts +62 -0
- package/dist/tools/builtins/web/extract.js +271 -0
- package/dist/tools/builtins/web/fetch.d.ts +55 -0
- package/dist/tools/builtins/web/fetch.js +175 -0
- package/dist/tools/builtins/web/index.d.ts +13 -0
- package/dist/tools/builtins/web/index.js +12 -0
- package/dist/tools/builtins/web/page-cache.d.ts +25 -0
- package/dist/tools/builtins/web/page-cache.js +77 -0
- package/dist/tools/builtins/web/search.d.ts +25 -0
- package/dist/tools/builtins/web/search.js +210 -0
- package/dist/tools/builtins/web/url.d.ts +17 -0
- package/dist/tools/builtins/web/url.js +43 -0
- 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 +16 -3
- package/dist/tools/connectors.controller.js +34 -14
- package/dist/tools/connectors.schemas.d.ts +12 -0
- package/dist/tools/connectors.schemas.js +19 -0
- package/dist/tools/connectors.service.d.ts +80 -18
- package/dist/tools/connectors.service.js +529 -358
- package/dist/tools/credentials.d.ts +20 -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/extension-tools.controller.d.ts +14 -0
- package/dist/tools/extension-tools.controller.js +37 -0
- package/dist/tools/info.d.ts +73 -13
- package/dist/tools/info.js +151 -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 +45 -10
- package/dist/tools/oauth/tokens.js +70 -24
- package/dist/tools/org-tool-switches.d.ts +88 -0
- package/dist/tools/org-tool-switches.js +201 -0
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +48 -4
- package/dist/tools/pipeline.d.ts +108 -80
- package/dist/tools/pipeline.js +396 -409
- package/dist/tools/policy.d.ts +4 -17
- package/dist/tools/policy.js +49 -35
- 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 +215 -84
- package/dist/tools/registry.js +382 -264
- 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 +113 -0
- package/dist/tools/validate.js +1 -1
- 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 +10 -57
- package/dist/ui/views.js +58 -46
- package/package.json +15 -3
- package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
- package/src/migrations/0064_account_last_org.sql +7 -0
- package/src/migrations/0065_conversation_archive.sql +8 -0
- package/src/migrations/0066_extension_display_name.sql +4 -0
- package/src/migrations/0067_agent_profiles.sql +20 -0
- package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
- package/src/migrations/0069_attachments_agent_idx.sql +3 -0
- package/src/migrations/0070_background_tasks.sql +37 -0
- package/src/migrations/0071_background_tasks_reserve.sql +6 -0
- package/src/migrations/0072_background_tasks_stopping.sql +5 -0
- package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
- package/src/migrations/0074_subagent_tree.sql +50 -0
- package/src/migrations/0075_plugin_scope.sql +61 -0
- package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
- package/src/migrations/0077_scope_requests.sql +52 -0
- package/src/migrations/0078_scope_grant_switches.sql +18 -0
- package/src/migrations/0079_scope_live_install_switches.sql +19 -0
- package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
- package/src/migrations/0081_platform_components.sql +129 -0
- package/src/migrations/0082_platform_migration.sql +33 -0
- package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
- package/src/migrations/0084_org_owned_items.sql +85 -0
- package/src/migrations/0085_agent_templates_phase4.sql +45 -0
- package/src/migrations/0086_org_layering.sql +30 -0
- package/src/migrations/0087_approval_summary.sql +6 -0
- package/src/migrations/0088_environments.sql +80 -0
- package/src/migrations/0089_model_kinds_usage.sql +38 -0
- package/src/migrations/0090_initial_passwords.sql +27 -0
- package/src/migrations/0091_account_time_zone.sql +4 -0
- package/src/migrations/0092_tools_default_on.sql +27 -0
- package/src/migrations/0093_connected_environments.sql +37 -0
- package/src/migrations/0094_environment_paths_idx.sql +7 -0
- package/src/migrations/0095_environment_files_resets.sql +5 -0
- package/src/migrations/0096_environment_demoted_default.sql +18 -0
- package/src/migrations/0097_extension_installs_enabled_at.sql +16 -0
- package/src/migrations/0098_single_provider_running_first.sql +41 -0
- package/src/migrations/0099_channel_connection_guide_ack.sql +6 -0
- package/src/migrations/0100_catalog_files.sql +13 -0
- package/src/migrations/0101_marketplace_icons.sql +32 -0
- package/dist/catalog/upgrade-targets.d.ts +0 -59
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -21
- package/dist/conversations/sandbox-status.js +0 -24
- package/dist/extensions/org-config.controller.d.ts +0 -24
- package/dist/extensions/org-config.controller.js +0 -59
- package/dist/http/gateway.module.js +0 -13
- 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/enterprise-admin.d.ts +0 -14
- package/dist/identity/enterprise-admin.js +0 -27
- 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/sandbox/leases.js
CHANGED
|
@@ -1,44 +1,48 @@
|
|
|
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
|
-
* Shared and exclusive sandbox leases (sub-agents spec §10.3): the Redis
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
17
|
+
* Shared and exclusive sandbox leases (sub-agents spec §10.3; environments spec §4.2): the Redis
|
|
18
|
+
* protocol that lets several holders (every conversation bound to the environment, and their
|
|
19
|
+
* sub-agents) use one environment's running instance concurrently (shared leases: commands, file
|
|
20
|
+
* reads and writes) while lifecycle changes (create, resume, rebuild, suspend, destroy, reset) stay
|
|
21
|
+
* alone (exclusive leases). Every `sandbox@2` provider runs commands concurrently and kills by tag,
|
|
22
|
+
* so there is no single-holder mode. Keys, env = the environment id:
|
|
8
23
|
*
|
|
9
|
-
* - `capk:sandbox:<
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* - `capk:sandbox-users:<conv>`: sorted set of shared lease tokens scored by their expiry (ms, Redis
|
|
24
|
+
* - `capk:sandbox:<env>`: the lock key: an exclusive holder's token, or `shared` while shared
|
|
25
|
+
* leases exist.
|
|
26
|
+
* - `capk:sandbox-users:<env>`: sorted set of shared lease tokens scored by their expiry (ms, Redis
|
|
13
27
|
* server clock).
|
|
14
|
-
* - `capk:sandbox-intent:<
|
|
28
|
+
* - `capk:sandbox-intent:<env>`: an exclusive waiter's token (writer preference); while it exists
|
|
15
29
|
* no new shared lease is granted.
|
|
16
|
-
* - `capk:sandbox-holders:<
|
|
17
|
-
*
|
|
18
|
-
*
|
|
30
|
+
* - `capk:sandbox-holders:<env>`: hash token → expiry of holders that may have commands running;
|
|
31
|
+
* a record without a live lease is a crashed holder whose commands (tagged with its token) are
|
|
32
|
+
* killed by the next acquirer.
|
|
33
|
+
* - `capk:sandbox-path:<env>:<sha256hex(path)>`: a short per-path lease around the kernel's own
|
|
19
34
|
* read-modify-write of one file.
|
|
20
35
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
36
|
+
* The first three keys are a {@link LockService} shared lease (`tryShared` / `tryExclusive`,
|
|
37
|
+
* infra/lock/shared-lease.ts); the holder records and the path leases are this file's. Every key
|
|
38
|
+
* carries a TTL. A holder renews every TTL / 3 (LockService's watchdog) and loses the lease at
|
|
39
|
+
* the renewal deadline (send time of the last successful renewal + 2/3 TTL): its `signal` aborts
|
|
40
|
+
* with {@link SandboxLockLostError}.
|
|
24
41
|
*/
|
|
25
|
-
/** Prefix of the lock key `capk:sandbox:<
|
|
42
|
+
/** Prefix of the lock key `capk:sandbox:<environmentId>`. */
|
|
26
43
|
export const SANDBOX_LOCK_PREFIX = "capk:sandbox:";
|
|
27
44
|
/** TTL of a lease (ms): renewed every TTL / 3 while held. */
|
|
28
45
|
export const SANDBOX_LOCK_TTL_MS = 60_000;
|
|
29
|
-
/**
|
|
30
|
-
* Prefix of the single "sandbox in use" marker of kernels before phase C,
|
|
31
|
-
* `capk:sandbox-busy:<conversationId>`: present while such a holder ran commands. Found by an
|
|
32
|
-
* exclusive acquirer, it means that holder crashed and its commands may still run.
|
|
33
|
-
*
|
|
34
|
-
* Holders of this kernel write it too, with the value {@link BUSY_V2}, while any holder record
|
|
35
|
-
* exists (spec §10.8): this kernel ignores that value, and a replica from before phase C that
|
|
36
|
-
* takes the lock after a new holder crashed sees a marker and kills everything, which is safe
|
|
37
|
-
* because it only gets the lock when no shared lease is live.
|
|
38
|
-
*/
|
|
39
|
-
export const SANDBOX_BUSY_PREFIX = "capk:sandbox-busy:";
|
|
40
|
-
/** Value of the busy marker written by holders of this kernel (ignored by it). */
|
|
41
|
-
export const BUSY_V2 = "v2";
|
|
42
46
|
const USERS_PREFIX = "capk:sandbox-users:";
|
|
43
47
|
const INTENT_PREFIX = "capk:sandbox-intent:";
|
|
44
48
|
const HOLDERS_PREFIX = "capk:sandbox-holders:";
|
|
@@ -47,16 +51,16 @@ const PATH_PREFIX = "capk:sandbox-path:";
|
|
|
47
51
|
const PATH_LEASE_TTL_MS = 30_000;
|
|
48
52
|
/** Shortest life of an exclusive waiter's intent (ms): outlasts event-loop lag between polls. */
|
|
49
53
|
const INTENT_TTL_FLOOR_MS = 2000;
|
|
50
|
-
/** The sandbox
|
|
51
|
-
export const sandboxBusy = () => new ApiError("sandbox.busy", "The sandbox
|
|
54
|
+
/** The environment's sandbox is busy: waited longer than `sandbox.lockWaitSeconds` (409). */
|
|
55
|
+
export const sandboxBusy = () => new ApiError("sandbox.busy", "The sandbox of this environment is busy with other commands; wait for them to finish and try again");
|
|
52
56
|
/** A lease was lost while held, or the record changed under it (generation mismatch). */
|
|
53
57
|
export class SandboxLockLostError extends Error {
|
|
54
58
|
/** `lock`: the lease was lost (renewal failed or none succeeded in time); `generation`: the record's fence changed. */
|
|
55
59
|
reason;
|
|
56
|
-
constructor(
|
|
60
|
+
constructor(environmentId, reason = "lock") {
|
|
57
61
|
super(reason === "lock"
|
|
58
|
-
? `sandbox lock lost for
|
|
59
|
-
: `sandbox state of
|
|
62
|
+
? `sandbox lock lost for environment ${environmentId}`
|
|
63
|
+
: `sandbox state of environment ${environmentId} changed concurrently (generation mismatch)`);
|
|
60
64
|
this.name = "SandboxLockLostError";
|
|
61
65
|
this.reason = reason;
|
|
62
66
|
}
|
|
@@ -68,125 +72,18 @@ export class SandboxPathBusyError extends Error {
|
|
|
68
72
|
this.name = "SandboxPathBusyError";
|
|
69
73
|
}
|
|
70
74
|
}
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
/**
|
|
157
|
-
* KEYS holders, busy; ARGV token, ttl. Also writes the busy marker as v2 (kept for at least `ttl`)
|
|
158
|
-
* unless an older kernel's holder owns it.
|
|
159
|
-
*/
|
|
160
|
-
const REGISTER = `${NOW}
|
|
161
|
-
local ttl = tonumber(ARGV[2])
|
|
75
|
+
/** KEYS holders; ARGV token, ttl. The hash is kept for at least `ttl`. */
|
|
76
|
+
const REGISTER = redisClockScript(`local ttl = tonumber(ARGV[2])
|
|
162
77
|
redis.call('HSET', KEYS[1], ARGV[1], now + ttl)
|
|
163
78
|
if redis.call('PTTL', KEYS[1]) < ttl then redis.call('PEXPIRE', KEYS[1], ttl) end
|
|
164
|
-
|
|
165
|
-
if (not b) or (b == '${BUSY_V2}' and redis.call('PTTL', KEYS[2]) < ttl) then
|
|
166
|
-
redis.call('SET', KEYS[2], '${BUSY_V2}', 'PX', ttl)
|
|
167
|
-
end
|
|
168
|
-
return 1`;
|
|
169
|
-
/** Deletes the v2 busy marker (key `busy`) once no holder record (hash `holders`) is left. */
|
|
170
|
-
const dropV2 = (holders, busy) => `
|
|
171
|
-
if redis.call('HLEN', ${holders}) == 0 and redis.call('GET', ${busy}) == '${BUSY_V2}' then
|
|
172
|
-
redis.call('DEL', ${busy})
|
|
173
|
-
end`;
|
|
174
|
-
/** KEYS holders, busy; ARGV token. */
|
|
175
|
-
const UNREGISTER = `
|
|
176
|
-
redis.call('HDEL', KEYS[1], ARGV[1])
|
|
177
|
-
${dropV2("KEYS[1]", "KEYS[2]")}
|
|
178
|
-
return 1`;
|
|
79
|
+
return 1`);
|
|
179
80
|
/**
|
|
180
|
-
* KEYS lock, users, holders
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
* everything cannot hit a live sibling). The v2 marker is never claimed; it goes with the last
|
|
185
|
-
* record. Returns { legacy, tag… }.
|
|
81
|
+
* KEYS lock, users, holders. Removes and returns the holder fields without a live lease (expired
|
|
82
|
+
* fields are dropped without being returned: the in-sandbox time limit ended their commands). The
|
|
83
|
+
* caller's own token is live (a shared lease, or the exclusive token in the lock key), so it is
|
|
84
|
+
* never returned. Returns the tags.
|
|
186
85
|
*/
|
|
187
|
-
const CLAIM =
|
|
188
|
-
${PURGE}
|
|
189
|
-
local out = {0}
|
|
86
|
+
const CLAIM = sharedLeaseReadScript(`local out = {}
|
|
190
87
|
local f = redis.call('HGETALL', KEYS[3])
|
|
191
88
|
for i = 1, #f, 2 do
|
|
192
89
|
local tok = f[i]
|
|
@@ -197,16 +94,7 @@ for i = 1, #f, 2 do
|
|
|
197
94
|
table.insert(out, tok)
|
|
198
95
|
end
|
|
199
96
|
end
|
|
200
|
-
|
|
201
|
-
local b = redis.call('GET', KEYS[4])
|
|
202
|
-
if ARGV[1] ~= '' and cur == ARGV[1] and b and b ~= '${BUSY_V2}' then
|
|
203
|
-
redis.call('DEL', KEYS[4])
|
|
204
|
-
out[1] = 1
|
|
205
|
-
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`;
|
|
97
|
+
return out`);
|
|
210
98
|
const abortReason = (signal) => signal.reason ?? new DOMException("This operation was aborted", "AbortError");
|
|
211
99
|
function sleep(ms, signal) {
|
|
212
100
|
return new Promise((resolve, reject) => {
|
|
@@ -225,19 +113,41 @@ function sleep(ms, signal) {
|
|
|
225
113
|
signal.addEventListener("abort", onAbort, { once: true });
|
|
226
114
|
});
|
|
227
115
|
}
|
|
228
|
-
/**
|
|
229
|
-
|
|
116
|
+
/** A signal that aborts with {@link SandboxLockLostError} when `lost` aborts. */
|
|
117
|
+
function lostSignal(lost, env) {
|
|
118
|
+
const ctl = new AbortController();
|
|
119
|
+
const abort = () => ctl.abort(new SandboxLockLostError(env));
|
|
120
|
+
if (lost.aborted)
|
|
121
|
+
abort();
|
|
122
|
+
else
|
|
123
|
+
lost.addEventListener("abort", abort, { once: true });
|
|
124
|
+
return ctl.signal;
|
|
125
|
+
}
|
|
126
|
+
/** Optional provider: {@link SandboxLeaseTimings} that replace some defaults (tests make them shorter). */
|
|
127
|
+
export const SANDBOX_LEASE_TIMINGS = Symbol("SANDBOX_LEASE_TIMINGS");
|
|
128
|
+
/**
|
|
129
|
+
* The lease protocol over {@link LockService}'s shared leases; no state in process beyond the
|
|
130
|
+
* leases this process holds.
|
|
131
|
+
*/
|
|
132
|
+
let SandboxLeases = class SandboxLeases {
|
|
133
|
+
locks;
|
|
230
134
|
redis;
|
|
231
135
|
log;
|
|
136
|
+
/** Lease TTL (ms). */
|
|
232
137
|
ttlMs;
|
|
138
|
+
/** Poll interval while waiting (ms, jittered up to 2×). */
|
|
233
139
|
pollMs;
|
|
140
|
+
/** Path lease TTL (ms). */
|
|
234
141
|
pathTtlMs;
|
|
235
|
-
constructor(
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
this.
|
|
239
|
-
this.
|
|
240
|
-
this.
|
|
142
|
+
constructor(locks,
|
|
143
|
+
/** The holder records (scripts of this file). */
|
|
144
|
+
redis, log, timings = {}) {
|
|
145
|
+
this.locks = locks;
|
|
146
|
+
this.redis = redis;
|
|
147
|
+
this.log = log;
|
|
148
|
+
this.ttlMs = timings.ttlMs ?? SANDBOX_LOCK_TTL_MS;
|
|
149
|
+
this.pollMs = timings.pollMs ?? 100;
|
|
150
|
+
this.pathTtlMs = timings.pathTtlMs ?? PATH_LEASE_TTL_MS;
|
|
241
151
|
}
|
|
242
152
|
/**
|
|
243
153
|
* TTL of an intent (ms): 4 × the poll interval (a jittered wait is up to 2 × the interval plus
|
|
@@ -246,8 +156,12 @@ export class SandboxLeases {
|
|
|
246
156
|
get intentTtlMs() {
|
|
247
157
|
return Math.max(this.pollMs * 4, INTENT_TTL_FLOOR_MS);
|
|
248
158
|
}
|
|
249
|
-
keys(
|
|
250
|
-
return
|
|
159
|
+
keys(env) {
|
|
160
|
+
return {
|
|
161
|
+
lock: `${SANDBOX_LOCK_PREFIX}${env}`,
|
|
162
|
+
users: `${USERS_PREFIX}${env}`,
|
|
163
|
+
intent: `${INTENT_PREFIX}${env}`,
|
|
164
|
+
};
|
|
251
165
|
}
|
|
252
166
|
wait(signal) {
|
|
253
167
|
return sleep(this.pollMs + Math.floor(Math.random() * this.pollMs), signal);
|
|
@@ -257,15 +171,15 @@ export class SandboxLeases {
|
|
|
257
171
|
* `capMs`, the signal's reason when it aborts. Not granted while an exclusive lease, an older
|
|
258
172
|
* replica's lock token or another caller's intent exists.
|
|
259
173
|
*/
|
|
260
|
-
async acquireShared(
|
|
174
|
+
async acquireShared(env, cap, signal, capMs) {
|
|
261
175
|
const token = randomUUID();
|
|
262
176
|
const deadline = Date.now() + capMs;
|
|
263
177
|
for (;;) {
|
|
264
178
|
if (signal.aborted)
|
|
265
179
|
throw abortReason(signal);
|
|
266
|
-
const
|
|
267
|
-
if (
|
|
268
|
-
return
|
|
180
|
+
const lease = await this.tryShared(env, cap, token);
|
|
181
|
+
if (lease)
|
|
182
|
+
return lease;
|
|
269
183
|
if (Date.now() + this.pollMs > deadline)
|
|
270
184
|
throw sandboxBusy();
|
|
271
185
|
await this.wait(signal);
|
|
@@ -277,17 +191,16 @@ export class SandboxLeases {
|
|
|
277
191
|
* (refreshed while it waits) so new shared leases stop being granted; it is cleared on success
|
|
278
192
|
* and when the wait ends otherwise.
|
|
279
193
|
*/
|
|
280
|
-
async acquireExclusive(
|
|
194
|
+
async acquireExclusive(env, signal, capMs, o = {}) {
|
|
281
195
|
const token = randomUUID();
|
|
282
196
|
const deadline = capMs === undefined ? Number.POSITIVE_INFINITY : Date.now() + capMs;
|
|
283
|
-
const keys = this.keys(conv);
|
|
284
197
|
try {
|
|
285
198
|
for (;;) {
|
|
286
199
|
if (signal.aborted)
|
|
287
200
|
throw abortReason(signal);
|
|
288
|
-
const
|
|
289
|
-
if (
|
|
290
|
-
return
|
|
201
|
+
const lease = await this.tryExclusive(env, { token, intent: o.intent === true });
|
|
202
|
+
if (lease)
|
|
203
|
+
return lease;
|
|
291
204
|
if (Date.now() + this.pollMs > deadline)
|
|
292
205
|
throw sandboxBusy();
|
|
293
206
|
await this.wait(signal);
|
|
@@ -295,9 +208,7 @@ export class SandboxLeases {
|
|
|
295
208
|
}
|
|
296
209
|
catch (e) {
|
|
297
210
|
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 }));
|
|
211
|
+
await this.clearIntent(env, token).catch((err) => this.log.warn("cannot clear sandbox intent", { environmentId: env, err }));
|
|
301
212
|
}
|
|
302
213
|
throw e;
|
|
303
214
|
}
|
|
@@ -307,209 +218,114 @@ export class SandboxLeases {
|
|
|
307
218
|
* intent. With `o.token` the lease (and, when `o.intent`, the intent set on failure) carries that
|
|
308
219
|
* token, so one waiter can alternate between this and {@link tryShared} with the same token.
|
|
309
220
|
*/
|
|
310
|
-
async tryExclusive(
|
|
311
|
-
const
|
|
312
|
-
|
|
313
|
-
return Number(ok) === 1 ? this.hold(conv, token, "exclusive") : null;
|
|
221
|
+
async tryExclusive(env, o = {}) {
|
|
222
|
+
const h = await this.locks.tryExclusive(this.keys(env), o.token ?? randomUUID(), this.ttlMs, o.intent ? this.intentTtlMs : undefined);
|
|
223
|
+
return h ? this.held(env, h) : null;
|
|
314
224
|
}
|
|
315
225
|
/**
|
|
316
226
|
* One try at a shared lease (`cap` holders at most); null when it is not granted. `token` is the
|
|
317
227
|
* lease token; a waiter that set an intent with the same token is let through its own intent
|
|
318
228
|
* (it should then {@link clearIntent}).
|
|
319
229
|
*/
|
|
320
|
-
async tryShared(
|
|
321
|
-
const
|
|
322
|
-
return
|
|
323
|
-
}
|
|
324
|
-
/** Deletes the conversation's intent when it is `token`'s. */
|
|
325
|
-
async clearIntent(conv, token) {
|
|
326
|
-
await this.redis.eval(DEL_IF, 1, this.keys(conv)[2], token);
|
|
230
|
+
async tryShared(env, cap, token = randomUUID()) {
|
|
231
|
+
const h = await this.locks.tryShared(this.keys(env), token, cap, this.ttlMs);
|
|
232
|
+
return h ? this.held(env, h) : null;
|
|
327
233
|
}
|
|
328
|
-
/**
|
|
329
|
-
async
|
|
330
|
-
|
|
331
|
-
return v !== null && v !== BUSY_V2;
|
|
234
|
+
/** Deletes the environment's intent when it is `token`'s. */
|
|
235
|
+
async clearIntent(env, token) {
|
|
236
|
+
await this.locks.releaseIf(this.keys(env).intent, token);
|
|
332
237
|
}
|
|
333
|
-
/** Live shared leases of the
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
return Number(await this.redis.eval(COUNT, 2, lock, users));
|
|
238
|
+
/** Live shared leases of the environment. */
|
|
239
|
+
sharedCount(env) {
|
|
240
|
+
return this.locks.sharedCount(this.keys(env));
|
|
337
241
|
}
|
|
338
242
|
/**
|
|
339
243
|
* Records (or refreshes) a holder that may run commands (before its provider calls); `ttlMs`
|
|
340
|
-
* bounds the record.
|
|
244
|
+
* bounds the record.
|
|
341
245
|
*/
|
|
342
|
-
async registerHolder(
|
|
343
|
-
await this.redis.eval(REGISTER,
|
|
246
|
+
async registerHolder(env, token, ttlMs) {
|
|
247
|
+
await this.redis.eval(REGISTER, 1, `${HOLDERS_PREFIX}${env}`, token, ttlMs);
|
|
344
248
|
}
|
|
345
|
-
/** Deletes a holder record (after its provider calls)
|
|
346
|
-
async unregisterHolder(
|
|
347
|
-
await this.redis.
|
|
249
|
+
/** Deletes a holder record (after its provider calls). */
|
|
250
|
+
async unregisterHolder(env, token) {
|
|
251
|
+
await this.redis.hdel(`${HOLDERS_PREFIX}${env}`, token);
|
|
348
252
|
}
|
|
349
253
|
/**
|
|
350
|
-
* Tags of holders without a live lease,
|
|
351
|
-
*
|
|
352
|
-
* claimed only when `exclusiveToken` is the caller's exclusive lease (no shared lease live).
|
|
254
|
+
* Tags of holders without a live lease, atomically claimed (their fields removed) so only one
|
|
255
|
+
* caller kills them.
|
|
353
256
|
*/
|
|
354
|
-
async claimDeadHolders(
|
|
355
|
-
const
|
|
356
|
-
|
|
357
|
-
const [legacy, ...tags] = r;
|
|
358
|
-
return { tags, legacyMarker: Number(legacy) === 1 };
|
|
257
|
+
async claimDeadHolders(env) {
|
|
258
|
+
const { lock, users } = this.keys(env);
|
|
259
|
+
return (await this.redis.eval(CLAIM, 3, lock, users, `${HOLDERS_PREFIX}${env}`));
|
|
359
260
|
}
|
|
360
261
|
/**
|
|
361
262
|
* 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
|
-
*
|
|
263
|
+
* up to `capMs`, then throws {@link SandboxPathBusyError}. A {@link LockService.hold} lease
|
|
264
|
+
* (renewed every TTL / 3): when it is lost its `signal` aborts.
|
|
364
265
|
*/
|
|
365
|
-
async pathLease(
|
|
366
|
-
const key = `${PATH_PREFIX}${
|
|
266
|
+
async pathLease(env, path, signal, capMs) {
|
|
267
|
+
const key = `${PATH_PREFIX}${env}:${createHash("sha256").update(path).digest("hex")}`;
|
|
367
268
|
const token = randomUUID();
|
|
368
|
-
const ttl = this.pathTtlMs;
|
|
369
269
|
const deadline = Date.now() + capMs;
|
|
270
|
+
let h;
|
|
370
271
|
for (;;) {
|
|
371
272
|
if (signal.aborted)
|
|
372
273
|
throw abortReason(signal);
|
|
373
|
-
|
|
274
|
+
h = await this.locks.hold(key, token, this.pathTtlMs);
|
|
275
|
+
if (h)
|
|
374
276
|
break;
|
|
375
277
|
if (Date.now() + this.pollMs > deadline)
|
|
376
278
|
throw new SandboxPathBusyError();
|
|
377
279
|
await this.wait(signal);
|
|
378
280
|
}
|
|
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);
|
|
281
|
+
const held = h;
|
|
282
|
+
return { signal: lostSignal(held.lost, env), release: () => held.release() };
|
|
448
283
|
}
|
|
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();
|
|
284
|
+
/** A sandbox lease over a held {@link SharedLeaseHandle}, as its current kind. */
|
|
285
|
+
held(env, h) {
|
|
286
|
+
return this.view(env, h, lostSignal(h.lost, env), h.kind);
|
|
455
287
|
}
|
|
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;
|
|
288
|
+
/** A lease view of `h` as `kind`; a view stops working once the lease changes kind. */
|
|
289
|
+
view(env, h, signal, kind) {
|
|
290
|
+
const current = () => h.kind === kind;
|
|
480
291
|
return {
|
|
481
292
|
kind,
|
|
482
|
-
token:
|
|
483
|
-
|
|
484
|
-
signal
|
|
485
|
-
|
|
293
|
+
token: h.token,
|
|
294
|
+
environmentId: env,
|
|
295
|
+
signal,
|
|
296
|
+
// a Redis error is warned, not thrown: the deadline decides whether the lease is lost
|
|
297
|
+
renew: async () => {
|
|
298
|
+
if (!current())
|
|
299
|
+
return false;
|
|
300
|
+
try {
|
|
301
|
+
return await h.renew();
|
|
302
|
+
}
|
|
303
|
+
catch (err) {
|
|
304
|
+
this.log.warn("sandbox lease renew failed", { environmentId: env, err });
|
|
305
|
+
return !signal.aborted;
|
|
306
|
+
}
|
|
307
|
+
},
|
|
486
308
|
// Any view releases the lease in its current kind (a caller that kept only the exclusive
|
|
487
309
|
// 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
|
-
},
|
|
310
|
+
release: () => h.release(),
|
|
497
311
|
downgrade: async () => {
|
|
498
|
-
if (!current() ||
|
|
312
|
+
if (!current() || h.kind !== "exclusive")
|
|
499
313
|
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");
|
|
314
|
+
if (signal.aborted)
|
|
315
|
+
throw abortReason(signal);
|
|
316
|
+
if (!(await h.downgrade()))
|
|
317
|
+
throw new SandboxLockLostError(env);
|
|
318
|
+
return this.view(env, h, signal, "shared");
|
|
512
319
|
},
|
|
513
320
|
};
|
|
514
321
|
}
|
|
515
|
-
}
|
|
322
|
+
};
|
|
323
|
+
SandboxLeases = __decorate([
|
|
324
|
+
Injectable(),
|
|
325
|
+
__param(0, Inject(LockService)),
|
|
326
|
+
__param(1, Inject(REDIS)),
|
|
327
|
+
__param(2, Inject(KERNEL_LOGGER)),
|
|
328
|
+
__param(3, Optional()),
|
|
329
|
+
__param(3, Inject(SANDBOX_LEASE_TIMINGS))
|
|
330
|
+
], SandboxLeases);
|
|
331
|
+
export { SandboxLeases };
|