@capybara-hq/kernel 0.1.0-rc.3 → 0.1.0-rc.5
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 +61 -5
- package/dist/admin/admin.controller.d.ts +47 -16
- package/dist/admin/admin.controller.js +44 -19
- package/dist/admin/extensions.controller.d.ts +24 -3
- package/dist/admin/extensions.controller.js +48 -8
- package/dist/admin/setup-lock.d.ts +1 -1
- package/dist/admin/setup-lock.js +1 -1
- package/dist/admin/setup.controller.d.ts +1 -1
- package/dist/admin/setup.controller.js +1 -1
- package/dist/admin/setup.service.d.ts +4 -4
- package/dist/admin/setup.service.js +8 -8
- package/dist/agents/agent-lookup.d.ts +19 -0
- package/dist/agents/agent-lookup.js +21 -0
- package/dist/agents/agent-profile.service.d.ts +29 -0
- package/dist/agents/agent-profile.service.js +117 -0
- package/dist/agents/agents.controller.d.ts +168 -3
- package/dist/agents/agents.controller.js +201 -12
- package/dist/agents/agents.module.d.ts +4 -1
- package/dist/agents/agents.module.js +36 -6
- package/dist/agents/agents.service.d.ts +64 -27
- package/dist/agents/agents.service.js +199 -74
- package/dist/agents/definition.d.ts +53 -0
- package/dist/agents/definition.js +55 -0
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +649 -0
- package/dist/agents/from-template.service.d.ts +60 -0
- package/dist/agents/from-template.service.js +161 -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 +9 -3
- package/dist/agents/models.controller.js +19 -4
- package/dist/agents/org-templates.d.ts +176 -0
- package/dist/agents/org-templates.js +827 -0
- package/dist/agents/pending-connector-requests.d.ts +77 -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 +96 -0
- package/dist/agents/profile.js +51 -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 +86 -5
- package/dist/agents/templates.controller.js +171 -7
- package/dist/agents/templates.d.ts +127 -23
- package/dist/agents/templates.js +476 -53
- package/dist/background/background.controller.d.ts +38 -0
- package/dist/background/background.controller.js +87 -0
- package/dist/background/background.module.d.ts +10 -0
- package/dist/background/background.module.js +39 -0
- package/dist/background/finish.d.ts +44 -0
- package/dist/background/finish.js +94 -0
- package/dist/background/launch-lock.d.ts +15 -0
- package/dist/background/launch-lock.js +40 -0
- package/dist/background/launch.d.ts +36 -0
- package/dist/background/launch.js +70 -0
- package/dist/background/poll.job.d.ts +56 -0
- package/dist/background/poll.job.js +190 -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 +79 -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 +243 -0
- package/dist/background/store.d.ts +162 -0
- package/dist/background/store.js +357 -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 +211 -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 +129 -30
- package/dist/catalog/admin-catalog.controller.js +213 -42
- package/dist/catalog/catalog-content.d.ts +58 -32
- package/dist/catalog/catalog-content.js +34 -8
- 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 +111 -7
- package/dist/catalog/catalog-items.js +279 -13
- package/dist/catalog/catalog-scope.service.d.ts +260 -0
- package/dist/catalog/catalog-scope.service.js +1116 -0
- package/dist/catalog/catalog.module.d.ts +7 -9
- package/dist/catalog/catalog.module.js +41 -31
- package/dist/catalog/catalog.service.d.ts +101 -29
- package/dist/catalog/catalog.service.js +104 -106
- package/dist/catalog/claude/agents.js +2 -0
- package/dist/catalog/cli.d.ts +11 -1
- package/dist/catalog/cli.js +26 -1
- 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 +152 -0
- package/dist/catalog/component-scope.controller.js +287 -0
- package/dist/catalog/component-scope.service.d.ts +303 -0
- package/dist/catalog/component-scope.service.js +936 -0
- package/dist/catalog/component-state.d.ts +174 -0
- package/dist/catalog/component-state.js +437 -0
- package/dist/catalog/job-ids.d.ts +30 -0
- package/dist/catalog/job-ids.js +25 -0
- package/dist/catalog/marketplace-fetch.d.ts +1 -1
- package/dist/catalog/marketplaces.controller.d.ts +22 -5
- package/dist/catalog/marketplaces.controller.js +56 -7
- package/dist/catalog/marketplaces.service.d.ts +54 -14
- package/dist/catalog/marketplaces.service.js +71 -22
- package/dist/catalog/org-catalog.controller.d.ts +125 -34
- package/dist/catalog/org-catalog.controller.js +181 -65
- package/dist/catalog/org-catalog.service.d.ts +65 -33
- package/dist/catalog/org-catalog.service.js +324 -157
- 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 +119 -0
- package/dist/catalog/org-extension.controller.js +266 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
- package/dist/catalog/org-plugin-uploads.controller.js +213 -0
- package/dist/catalog/org-plugin-uploads.d.ts +63 -0
- package/dist/catalog/org-plugin-uploads.js +116 -0
- package/dist/catalog/owned-items.d.ts +184 -0
- package/dist/catalog/owned-items.js +789 -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 +221 -0
- package/dist/catalog/platform-components.js +761 -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 +178 -34
- package/dist/catalog/plugin-import.js +623 -83
- package/dist/catalog/plugin-install.d.ts +185 -41
- package/dist/catalog/plugin-install.js +758 -126
- package/dist/catalog/plugin-upgrade.d.ts +260 -225
- package/dist/catalog/plugin-upgrade.js +1148 -1137
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +193 -118
- package/dist/catalog/requests.service.js +526 -343
- 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.js +1 -0
- package/dist/channels/cards.js +21 -3
- package/dist/channels/channels.module.js +2 -0
- package/dist/channels/connections.service.d.ts +16 -1
- package/dist/channels/connections.service.js +38 -4
- package/dist/channels/inbound.d.ts +9 -1
- package/dist/channels/inbound.js +67 -5
- package/dist/channels/phrases.d.ts +35 -0
- package/dist/channels/phrases.js +29 -0
- package/dist/channels/threads.d.ts +5 -0
- package/dist/channels/threads.js +8 -0
- package/dist/config/docs.js +3 -1
- package/dist/config/schema.d.ts +24 -2
- package/dist/config/schema.js +145 -19
- package/dist/conversations/access.d.ts +6 -4
- package/dist/conversations/access.js +29 -5
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/attachments.service.d.ts +30 -0
- package/dist/conversations/attachments.service.js +130 -5
- package/dist/conversations/conversations.controller.d.ts +79 -23
- package/dist/conversations/conversations.controller.js +141 -50
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +10 -7
- package/dist/conversations/conversations.service.d.ts +108 -9
- package/dist/conversations/conversations.service.js +237 -30
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +21 -6
- package/dist/conversations/event-log.js +70 -1
- package/dist/conversations/events.d.ts +140 -0
- package/dist/conversations/events.js +142 -13
- package/dist/conversations/queue.d.ts +3 -1
- package/dist/conversations/queue.js +13 -2
- package/dist/conversations/queue.service.d.ts +1 -1
- package/dist/conversations/queue.service.js +8 -1
- package/dist/conversations/titles.d.ts +12 -3
- package/dist/conversations/titles.js +36 -8
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/create-ctx.d.ts +5 -0
- package/dist/ctx/create-ctx.js +15 -5
- package/dist/db/kernel-schema.d.ts +420 -20
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +3 -0
- package/dist/environments/access.d.ts +41 -0
- package/dist/environments/access.js +77 -0
- package/dist/environments/conversation-environments.d.ts +61 -0
- package/dist/environments/conversation-environments.js +170 -0
- package/dist/environments/dto.d.ts +25 -0
- package/dist/environments/dto.js +12 -0
- package/dist/environments/environments.controller.d.ts +33 -0
- package/dist/environments/environments.controller.js +110 -0
- package/dist/environments/environments.module.d.ts +8 -0
- package/dist/environments/environments.module.js +27 -0
- package/dist/environments/environments.service.d.ts +153 -0
- package/dist/environments/environments.service.js +541 -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 +90 -2
- package/dist/errors.js +90 -2
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +26 -7
- package/dist/evals/run-replay.d.ts +7 -2
- package/dist/evals/run-replay.js +42 -7
- package/dist/evals/step-replay.d.ts +2 -5
- package/dist/evals/step-replay.js +13 -7
- package/dist/evals/trajectory.js +1 -1
- package/dist/evals/trajectory.service.d.ts +8 -3
- package/dist/evals/trajectory.service.js +26 -14
- package/dist/evals/worker.d.ts +5 -5
- package/dist/evals/worker.js +9 -3
- package/dist/extensions/admin-ops.d.ts +36 -10
- package/dist/extensions/admin-ops.js +67 -42
- package/dist/extensions/admin-view.d.ts +39 -10
- package/dist/extensions/admin-view.js +111 -20
- package/dist/extensions/blobs.js +1 -0
- package/dist/extensions/bootstrap.d.ts +17 -4
- package/dist/extensions/bootstrap.js +70 -9
- package/dist/extensions/cli.d.ts +12 -0
- package/dist/extensions/cli.js +11 -2
- package/dist/extensions/config-issues.d.ts +13 -1
- package/dist/extensions/config-issues.js +22 -5
- 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 +6 -0
- package/dist/extensions/deployment-config.d.ts +78 -8
- package/dist/extensions/deployment-config.js +172 -34
- 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/extensions.module.js +14 -2
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +45 -2
- package/dist/extensions/host.js +112 -16
- package/dist/extensions/installs.d.ts +20 -8
- package/dist/extensions/installs.js +37 -15
- package/dist/extensions/org-config.d.ts +81 -6
- package/dist/extensions/org-config.js +195 -44
- 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 +19 -4
- package/dist/extensions/permission-view.js +4 -4
- 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 +34 -0
- package/dist/extensions/point-defaults.controller.js +71 -0
- package/dist/extensions/point-defaults.d.ts +71 -0
- package/dist/extensions/point-defaults.js +234 -0
- package/dist/extensions/registry.d.ts +1 -1
- package/dist/extensions/registry.js +2 -0
- package/dist/extensions/resolve.d.ts +5 -1
- package/dist/extensions/resolve.js +15 -2
- package/dist/files/previewers.d.ts +8 -1
- package/dist/files/previewers.js +35 -6
- package/dist/http/api.module.js +31 -3
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/http/nest-logger.d.ts +6 -5
- package/dist/http/nest-logger.js +24 -10
- package/dist/identity/accounts.d.ts +29 -29
- package/dist/identity/accounts.js +47 -47
- package/dist/identity/audit.d.ts +2 -1
- package/dist/identity/auth.controller.js +9 -5
- package/dist/identity/auth.guard.d.ts +13 -5
- package/dist/identity/auth.guard.js +26 -9
- package/dist/identity/cookies.d.ts +20 -5
- package/dist/identity/cookies.js +44 -6
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +4 -4
- package/dist/identity/me.controller.d.ts +5 -1
- package/dist/identity/me.controller.js +12 -3
- package/dist/identity/principal.d.ts +3 -3
- package/dist/identity/principal.js +3 -3
- package/dist/identity/sessions.d.ts +12 -0
- package/dist/identity/sessions.js +45 -0
- package/dist/identity/settings.d.ts +22 -11
- package/dist/identity/settings.js +53 -18
- package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
- package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
- package/dist/inbox/inbox.module.d.ts +4 -1
- package/dist/inbox/inbox.module.js +7 -3
- package/dist/inbox/inbox.service.d.ts +62 -3
- package/dist/inbox/inbox.service.js +74 -4
- 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 +2 -2
- package/dist/index.js +1 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +27 -1
- package/dist/infra/database/database.module.js +1 -0
- package/dist/infra/database/xact-lock.d.ts +1 -1
- package/dist/infra/database/xact-lock.js +1 -1
- package/dist/infra/events/kernel-events.d.ts +19 -2
- package/dist/infra/lifecycle/process-guards.js +4 -0
- package/dist/infra/logging/logging.module.d.ts +4 -2
- package/dist/infra/logging/logging.module.js +24 -6
- 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/redis-connection.d.ts +6 -0
- package/dist/infra/queue/redis-connection.js +7 -0
- package/dist/infra/redis/redis.module.js +6 -2
- package/dist/infra/tokens.d.ts +6 -1
- package/dist/infra/tokens.js +6 -1
- package/dist/kernel.module.js +6 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
- package/dist/lifecycle/kernel-lifecycle.js +4 -4
- package/dist/log.d.ts +13 -1
- package/dist/log.js +93 -17
- package/dist/models/prices.d.ts +5 -5
- package/dist/models/prices.js +4 -4
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +13 -7
- package/dist/models/purposes.d.ts +43 -9
- package/dist/models/purposes.js +48 -18
- package/dist/orgs/directory-sync.d.ts +14 -5
- package/dist/orgs/directory-sync.js +41 -17
- package/dist/orgs/offboarding.d.ts +12 -8
- package/dist/orgs/offboarding.js +54 -33
- package/dist/orgs/org-lock.d.ts +5 -0
- package/dist/orgs/org-lock.js +13 -0
- package/dist/orgs/org.guard.d.ts +10 -0
- package/dist/orgs/org.guard.js +43 -32
- package/dist/orgs/orgs.module.js +3 -0
- package/dist/orgs/orgs.service.d.ts +20 -7
- package/dist/orgs/orgs.service.js +32 -12
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.service.d.ts +20 -3
- package/dist/orgs/settings.service.js +19 -4
- package/dist/overrides.d.ts +3 -0
- package/dist/overrides.js +2 -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 +11 -0
- package/dist/platform/errors.js +26 -0
- package/dist/platform/exclusions.d.ts +12 -0
- package/dist/platform/exclusions.js +1387 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +92 -0
- package/dist/platform/operation.js +35 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
- package/dist/platform/ops/agent-templates.ops.js +92 -0
- package/dist/platform/ops/agents.ops.d.ts +19 -0
- package/dist/platform/ops/agents.ops.js +294 -0
- package/dist/platform/ops/connectors.ops.d.ts +15 -0
- package/dist/platform/ops/connectors.ops.js +126 -0
- package/dist/platform/ops/errors.d.ts +11 -0
- package/dist/platform/ops/errors.js +22 -0
- package/dist/platform/ops/extensions.ops.d.ts +19 -0
- package/dist/platform/ops/extensions.ops.js +116 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
- package/dist/platform/ops/marketplaces.ops.js +157 -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 +23 -0
- package/dist/platform/ops/platform.ops.js +158 -0
- package/dist/platform/ops/plugins.ops.d.ts +33 -0
- package/dist/platform/ops/plugins.ops.js +377 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +153 -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 +13 -0
- package/dist/platform/ops/skills.ops.js +98 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/platform-ops.module.d.ts +7 -0
- package/dist/platform/platform-ops.module.js +55 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/redact-orgs.d.ts +7 -0
- package/dist/platform/redact-orgs.js +52 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/roles/worker-role.d.ts +6 -4
- package/dist/roles/worker-role.js +14 -7
- package/dist/roles/worker.module.d.ts +1 -1
- package/dist/roles/worker.module.js +15 -1
- package/dist/runtime/context/build.d.ts +11 -7
- package/dist/runtime/context/build.js +46 -19
- package/dist/runtime/context/claude-tools.d.ts +3 -1
- package/dist/runtime/context/claude-tools.js +8 -6
- package/dist/runtime/context/compaction.js +13 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/skills.js +9 -2
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/hook-calls.js +2 -0
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +36 -17
- package/dist/runtime/loop.d.ts +34 -5
- package/dist/runtime/maintenance.d.ts +9 -4
- package/dist/runtime/maintenance.js +35 -8
- package/dist/runtime/model-call.d.ts +46 -8
- package/dist/runtime/model-call.js +72 -21
- package/dist/runtime/providers.d.ts +6 -0
- package/dist/runtime/providers.js +8 -0
- package/dist/runtime/run-control.d.ts +11 -1
- package/dist/runtime/run-control.js +12 -0
- package/dist/runtime/run-drafts.d.ts +85 -0
- package/dist/runtime/run-drafts.js +230 -0
- package/dist/runtime/run-jobs.d.ts +3 -5
- package/dist/runtime/run-jobs.js +3 -7
- package/dist/runtime/run-queue.d.ts +59 -2
- package/dist/runtime/run-queue.js +311 -38
- package/dist/runtime/run-worker.d.ts +11 -5
- package/dist/runtime/run-worker.js +69 -33
- package/dist/runtime/runtime.module.js +11 -3
- package/dist/runtime/step-log.d.ts +15 -4
- package/dist/runtime/step-log.js +24 -7
- package/dist/runtime/stream.controller.d.ts +23 -1
- package/dist/runtime/stream.controller.js +60 -3
- package/dist/runtime/stream.d.ts +4 -1
- package/dist/runtime/stream.js +27 -3
- package/dist/runtime/subagents/child.d.ts +55 -7
- package/dist/runtime/subagents/child.js +105 -7
- package/dist/runtime/subagents/definition.d.ts +12 -3
- package/dist/runtime/subagents/definition.js +44 -28
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +115 -26
- package/dist/runtime/subagents/dispatch.js +212 -141
- package/dist/runtime/subagents/limits.d.ts +24 -5
- package/dist/runtime/subagents/limits.js +40 -6
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +8 -6
- 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 +24 -7
- package/dist/runtime/subagents/roster.js +47 -11
- package/dist/runtime/subagents/skill-fork.d.ts +3 -2
- package/dist/runtime/subagents/skill-fork.js +8 -4
- 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 +7 -4
- package/dist/runtime/subagents/subagents.service.js +11 -6
- package/dist/runtime/usage-report.d.ts +2 -1
- package/dist/runtime/usage-report.js +19 -13
- package/dist/runtime/waits.d.ts +145 -36
- package/dist/runtime/waits.js +423 -109
- package/dist/sandbox/jobs.d.ts +40 -13
- package/dist/sandbox/jobs.js +57 -20
- package/dist/sandbox/leases.d.ts +37 -54
- package/dist/sandbox/leases.js +71 -115
- package/dist/sandbox/providers.d.ts +2 -2
- package/dist/sandbox/providers.js +1 -1
- package/dist/sandbox/sandbox.module.d.ts +3 -2
- package/dist/sandbox/sandbox.module.js +10 -4
- package/dist/sandbox/sandbox.service.d.ts +282 -129
- package/dist/sandbox/sandbox.service.js +736 -381
- package/dist/skills/catalog.d.ts +3 -2
- package/dist/skills/catalog.js +21 -43
- package/dist/skills/changes.controller.d.ts +7 -0
- package/dist/skills/changes.controller.js +19 -1
- package/dist/skills/invoke.js +8 -3
- package/dist/skills/package.d.ts +20 -1
- package/dist/skills/package.js +28 -1
- package/dist/skills/skills.controller.d.ts +39 -4
- package/dist/skills/skills.controller.js +88 -10
- package/dist/skills/skills.module.js +10 -1
- package/dist/skills/skills.service.d.ts +106 -26
- package/dist/skills/skills.service.js +421 -75
- package/dist/skills/usable.d.ts +81 -0
- package/dist/skills/usable.js +379 -0
- package/dist/tools/approvals.service.d.ts +20 -2
- package/dist/tools/approvals.service.js +25 -4
- package/dist/tools/builtin-names.d.ts +41 -7
- package/dist/tools/builtin-names.js +59 -7
- package/dist/tools/builtins/agent.d.ts +23 -21
- package/dist/tools/builtins/agent.js +62 -55
- package/dist/tools/builtins/builtin-tools.d.ts +19 -1
- package/dist/tools/builtins/builtin-tools.js +59 -2
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +34 -0
- package/dist/tools/builtins/platform.js +362 -0
- package/dist/tools/builtins/sandbox/bash.d.ts +1 -1
- package/dist/tools/builtins/sandbox/bash.js +241 -4
- package/dist/tools/builtins/sandbox/common.d.ts +69 -27
- package/dist/tools/builtins/sandbox/common.js +87 -48
- package/dist/tools/builtins/sandbox/deliver.js +1 -1
- package/dist/tools/builtins/sandbox/edit.js +2 -2
- package/dist/tools/builtins/sandbox/glob.js +2 -2
- package/dist/tools/builtins/sandbox/grep.js +2 -4
- package/dist/tools/builtins/sandbox/index.d.ts +3 -1
- package/dist/tools/builtins/sandbox/index.js +7 -1
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/task-output.d.ts +74 -0
- package/dist/tools/builtins/sandbox/task-output.js +329 -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.js +2 -2
- 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 +22 -14
- package/dist/tools/builtins/skill-load.js +86 -57
- package/dist/tools/builtins/skill-write.js +1 -1
- 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/connectors.controller.d.ts +10 -0
- package/dist/tools/connectors.controller.js +12 -0
- package/dist/tools/connectors.service.d.ts +46 -5
- package/dist/tools/connectors.service.js +94 -15
- 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 +42 -1
- package/dist/tools/info.js +64 -1
- package/dist/tools/oauth/flow-paths.d.ts +1 -1
- package/dist/tools/oauth/flow-paths.js +1 -1
- package/dist/tools/org-tool-switches.d.ts +74 -0
- package/dist/tools/org-tool-switches.js +184 -0
- package/dist/tools/pipeline.d.ts +46 -40
- package/dist/tools/pipeline.js +202 -364
- package/dist/tools/policy.d.ts +1 -1
- package/dist/tools/policy.js +36 -16
- package/dist/tools/registry.d.ts +120 -8
- package/dist/tools/registry.js +112 -19
- package/dist/tools/tools.module.js +24 -2
- package/dist/tools/validate.js +1 -1
- package/dist/ui/views.d.ts +2 -1
- package/dist/ui/views.js +17 -3
- package/package.json +3 -3
- 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/dist/catalog/upgrade-targets.d.ts +0 -56
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -24
- package/dist/conversations/sandbox-status.js +0 -52
- package/dist/extensions/org-config.controller.d.ts +0 -24
- package/dist/extensions/org-config.controller.js +0 -62
package/dist/sandbox/leases.js
CHANGED
|
@@ -14,21 +14,23 @@ import { LockService, } from "../infra/lock/lock.service.js";
|
|
|
14
14
|
import { redisClockScript, sharedLeaseReadScript, } from "../infra/lock/shared-lease.js";
|
|
15
15
|
import { KERNEL_LOGGER, REDIS } from "../infra/tokens.js";
|
|
16
16
|
/**
|
|
17
|
-
* Shared and exclusive sandbox leases (sub-agents spec §10.3): the Redis
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
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:
|
|
21
23
|
*
|
|
22
|
-
* - `capk:sandbox:<
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* - `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
|
|
26
27
|
* server clock).
|
|
27
|
-
* - `capk:sandbox-intent:<
|
|
28
|
+
* - `capk:sandbox-intent:<env>`: an exclusive waiter's token (writer preference); while it exists
|
|
28
29
|
* no new shared lease is granted.
|
|
29
|
-
* - `capk:sandbox-holders:<
|
|
30
|
-
*
|
|
31
|
-
*
|
|
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
|
|
32
34
|
* read-modify-write of one file.
|
|
33
35
|
*
|
|
34
36
|
* The first three keys are a {@link LockService} shared lease (`tryShared` / `tryExclusive`,
|
|
@@ -37,23 +39,10 @@ import { KERNEL_LOGGER, REDIS } from "../infra/tokens.js";
|
|
|
37
39
|
* the renewal deadline (send time of the last successful renewal + 2/3 TTL): its `signal` aborts
|
|
38
40
|
* with {@link SandboxLockLostError}.
|
|
39
41
|
*/
|
|
40
|
-
/** Prefix of the lock key `capk:sandbox:<
|
|
42
|
+
/** Prefix of the lock key `capk:sandbox:<environmentId>`. */
|
|
41
43
|
export const SANDBOX_LOCK_PREFIX = "capk:sandbox:";
|
|
42
44
|
/** TTL of a lease (ms): renewed every TTL / 3 while held. */
|
|
43
45
|
export const SANDBOX_LOCK_TTL_MS = 60_000;
|
|
44
|
-
/**
|
|
45
|
-
* Prefix of the single "sandbox in use" marker of kernels before phase C,
|
|
46
|
-
* `capk:sandbox-busy:<conversationId>`: present while such a holder ran commands. Found by an
|
|
47
|
-
* exclusive acquirer, it means that holder crashed and its commands may still run.
|
|
48
|
-
*
|
|
49
|
-
* Holders of this kernel write it too, with the value {@link BUSY_V2}, while any holder record
|
|
50
|
-
* exists (spec §10.8): this kernel ignores that value, and a replica from before phase C that
|
|
51
|
-
* takes the lock after a new holder crashed sees a marker and kills everything, which is safe
|
|
52
|
-
* because it only gets the lock when no shared lease is live.
|
|
53
|
-
*/
|
|
54
|
-
export const SANDBOX_BUSY_PREFIX = "capk:sandbox-busy:";
|
|
55
|
-
/** Value of the busy marker written by holders of this kernel (ignored by it). */
|
|
56
|
-
export const BUSY_V2 = "v2";
|
|
57
46
|
const USERS_PREFIX = "capk:sandbox-users:";
|
|
58
47
|
const INTENT_PREFIX = "capk:sandbox-intent:";
|
|
59
48
|
const HOLDERS_PREFIX = "capk:sandbox-holders:";
|
|
@@ -62,16 +51,16 @@ const PATH_PREFIX = "capk:sandbox-path:";
|
|
|
62
51
|
const PATH_LEASE_TTL_MS = 30_000;
|
|
63
52
|
/** Shortest life of an exclusive waiter's intent (ms): outlasts event-loop lag between polls. */
|
|
64
53
|
const INTENT_TTL_FLOOR_MS = 2000;
|
|
65
|
-
/** The sandbox
|
|
66
|
-
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");
|
|
67
56
|
/** A lease was lost while held, or the record changed under it (generation mismatch). */
|
|
68
57
|
export class SandboxLockLostError extends Error {
|
|
69
58
|
/** `lock`: the lease was lost (renewal failed or none succeeded in time); `generation`: the record's fence changed. */
|
|
70
59
|
reason;
|
|
71
|
-
constructor(
|
|
60
|
+
constructor(environmentId, reason = "lock") {
|
|
72
61
|
super(reason === "lock"
|
|
73
|
-
? `sandbox lock lost for
|
|
74
|
-
: `sandbox state of
|
|
62
|
+
? `sandbox lock lost for environment ${environmentId}`
|
|
63
|
+
: `sandbox state of environment ${environmentId} changed concurrently (generation mismatch)`);
|
|
75
64
|
this.name = "SandboxLockLostError";
|
|
76
65
|
this.reason = reason;
|
|
77
66
|
}
|
|
@@ -83,37 +72,18 @@ export class SandboxPathBusyError extends Error {
|
|
|
83
72
|
this.name = "SandboxPathBusyError";
|
|
84
73
|
}
|
|
85
74
|
}
|
|
86
|
-
/**
|
|
87
|
-
* KEYS holders, busy; ARGV token, ttl. Also writes the busy marker as v2 (kept for at least `ttl`)
|
|
88
|
-
* unless an older kernel's holder owns it.
|
|
89
|
-
*/
|
|
75
|
+
/** KEYS holders; ARGV token, ttl. The hash is kept for at least `ttl`. */
|
|
90
76
|
const REGISTER = redisClockScript(`local ttl = tonumber(ARGV[2])
|
|
91
77
|
redis.call('HSET', KEYS[1], ARGV[1], now + ttl)
|
|
92
78
|
if redis.call('PTTL', KEYS[1]) < ttl then redis.call('PEXPIRE', KEYS[1], ttl) end
|
|
93
|
-
local b = redis.call('GET', KEYS[2])
|
|
94
|
-
if (not b) or (b == '${BUSY_V2}' and redis.call('PTTL', KEYS[2]) < ttl) then
|
|
95
|
-
redis.call('SET', KEYS[2], '${BUSY_V2}', 'PX', ttl)
|
|
96
|
-
end
|
|
97
79
|
return 1`);
|
|
98
|
-
/** Deletes the v2 busy marker (key `busy`) once no holder record (hash `holders`) is left. */
|
|
99
|
-
const dropV2 = (holders, busy) => `
|
|
100
|
-
if redis.call('HLEN', ${holders}) == 0 and redis.call('GET', ${busy}) == '${BUSY_V2}' then
|
|
101
|
-
redis.call('DEL', ${busy})
|
|
102
|
-
end`;
|
|
103
|
-
/** KEYS holders, busy; ARGV token. */
|
|
104
|
-
const UNREGISTER = `
|
|
105
|
-
redis.call('HDEL', KEYS[1], ARGV[1])
|
|
106
|
-
${dropV2("KEYS[1]", "KEYS[2]")}
|
|
107
|
-
return 1`;
|
|
108
80
|
/**
|
|
109
|
-
* KEYS lock, users, holders
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
* everything cannot hit a live sibling). The v2 marker is never claimed; it goes with the last
|
|
114
|
-
* 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.
|
|
115
85
|
*/
|
|
116
|
-
const CLAIM = sharedLeaseReadScript(`local out = {
|
|
86
|
+
const CLAIM = sharedLeaseReadScript(`local out = {}
|
|
117
87
|
local f = redis.call('HGETALL', KEYS[3])
|
|
118
88
|
for i = 1, #f, 2 do
|
|
119
89
|
local tok = f[i]
|
|
@@ -124,12 +94,6 @@ for i = 1, #f, 2 do
|
|
|
124
94
|
table.insert(out, tok)
|
|
125
95
|
end
|
|
126
96
|
end
|
|
127
|
-
${dropV2("KEYS[3]", "KEYS[4]")}
|
|
128
|
-
local b = redis.call('GET', KEYS[4])
|
|
129
|
-
if ARGV[1] ~= '' and cur == ARGV[1] and b and b ~= '${BUSY_V2}' then
|
|
130
|
-
redis.call('DEL', KEYS[4])
|
|
131
|
-
out[1] = 1
|
|
132
|
-
end
|
|
133
97
|
return out`);
|
|
134
98
|
const abortReason = (signal) => signal.reason ?? new DOMException("This operation was aborted", "AbortError");
|
|
135
99
|
function sleep(ms, signal) {
|
|
@@ -150,9 +114,9 @@ function sleep(ms, signal) {
|
|
|
150
114
|
});
|
|
151
115
|
}
|
|
152
116
|
/** A signal that aborts with {@link SandboxLockLostError} when `lost` aborts. */
|
|
153
|
-
function lostSignal(lost,
|
|
117
|
+
function lostSignal(lost, env) {
|
|
154
118
|
const ctl = new AbortController();
|
|
155
|
-
const abort = () => ctl.abort(new SandboxLockLostError(
|
|
119
|
+
const abort = () => ctl.abort(new SandboxLockLostError(env));
|
|
156
120
|
if (lost.aborted)
|
|
157
121
|
abort();
|
|
158
122
|
else
|
|
@@ -176,7 +140,7 @@ let SandboxLeases = class SandboxLeases {
|
|
|
176
140
|
/** Path lease TTL (ms). */
|
|
177
141
|
pathTtlMs;
|
|
178
142
|
constructor(locks,
|
|
179
|
-
/** The holder records
|
|
143
|
+
/** The holder records (scripts of this file). */
|
|
180
144
|
redis, log, timings = {}) {
|
|
181
145
|
this.locks = locks;
|
|
182
146
|
this.redis = redis;
|
|
@@ -192,11 +156,11 @@ let SandboxLeases = class SandboxLeases {
|
|
|
192
156
|
get intentTtlMs() {
|
|
193
157
|
return Math.max(this.pollMs * 4, INTENT_TTL_FLOOR_MS);
|
|
194
158
|
}
|
|
195
|
-
keys(
|
|
159
|
+
keys(env) {
|
|
196
160
|
return {
|
|
197
|
-
lock: `${SANDBOX_LOCK_PREFIX}${
|
|
198
|
-
users: `${USERS_PREFIX}${
|
|
199
|
-
intent: `${INTENT_PREFIX}${
|
|
161
|
+
lock: `${SANDBOX_LOCK_PREFIX}${env}`,
|
|
162
|
+
users: `${USERS_PREFIX}${env}`,
|
|
163
|
+
intent: `${INTENT_PREFIX}${env}`,
|
|
200
164
|
};
|
|
201
165
|
}
|
|
202
166
|
wait(signal) {
|
|
@@ -207,13 +171,13 @@ let SandboxLeases = class SandboxLeases {
|
|
|
207
171
|
* `capMs`, the signal's reason when it aborts. Not granted while an exclusive lease, an older
|
|
208
172
|
* replica's lock token or another caller's intent exists.
|
|
209
173
|
*/
|
|
210
|
-
async acquireShared(
|
|
174
|
+
async acquireShared(env, cap, signal, capMs) {
|
|
211
175
|
const token = randomUUID();
|
|
212
176
|
const deadline = Date.now() + capMs;
|
|
213
177
|
for (;;) {
|
|
214
178
|
if (signal.aborted)
|
|
215
179
|
throw abortReason(signal);
|
|
216
|
-
const lease = await this.tryShared(
|
|
180
|
+
const lease = await this.tryShared(env, cap, token);
|
|
217
181
|
if (lease)
|
|
218
182
|
return lease;
|
|
219
183
|
if (Date.now() + this.pollMs > deadline)
|
|
@@ -227,14 +191,14 @@ let SandboxLeases = class SandboxLeases {
|
|
|
227
191
|
* (refreshed while it waits) so new shared leases stop being granted; it is cleared on success
|
|
228
192
|
* and when the wait ends otherwise.
|
|
229
193
|
*/
|
|
230
|
-
async acquireExclusive(
|
|
194
|
+
async acquireExclusive(env, signal, capMs, o = {}) {
|
|
231
195
|
const token = randomUUID();
|
|
232
196
|
const deadline = capMs === undefined ? Number.POSITIVE_INFINITY : Date.now() + capMs;
|
|
233
197
|
try {
|
|
234
198
|
for (;;) {
|
|
235
199
|
if (signal.aborted)
|
|
236
200
|
throw abortReason(signal);
|
|
237
|
-
const lease = await this.tryExclusive(
|
|
201
|
+
const lease = await this.tryExclusive(env, { token, intent: o.intent === true });
|
|
238
202
|
if (lease)
|
|
239
203
|
return lease;
|
|
240
204
|
if (Date.now() + this.pollMs > deadline)
|
|
@@ -244,7 +208,7 @@ let SandboxLeases = class SandboxLeases {
|
|
|
244
208
|
}
|
|
245
209
|
catch (e) {
|
|
246
210
|
if (o.intent) {
|
|
247
|
-
await this.clearIntent(
|
|
211
|
+
await this.clearIntent(env, token).catch((err) => this.log.warn("cannot clear sandbox intent", { environmentId: env, err }));
|
|
248
212
|
}
|
|
249
213
|
throw e;
|
|
250
214
|
}
|
|
@@ -254,61 +218,53 @@ let SandboxLeases = class SandboxLeases {
|
|
|
254
218
|
* intent. With `o.token` the lease (and, when `o.intent`, the intent set on failure) carries that
|
|
255
219
|
* token, so one waiter can alternate between this and {@link tryShared} with the same token.
|
|
256
220
|
*/
|
|
257
|
-
async tryExclusive(
|
|
258
|
-
const h = await this.locks.tryExclusive(this.keys(
|
|
259
|
-
return h ? this.held(
|
|
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;
|
|
260
224
|
}
|
|
261
225
|
/**
|
|
262
226
|
* One try at a shared lease (`cap` holders at most); null when it is not granted. `token` is the
|
|
263
227
|
* lease token; a waiter that set an intent with the same token is let through its own intent
|
|
264
228
|
* (it should then {@link clearIntent}).
|
|
265
229
|
*/
|
|
266
|
-
async tryShared(
|
|
267
|
-
const h = await this.locks.tryShared(this.keys(
|
|
268
|
-
return h ? this.held(
|
|
269
|
-
}
|
|
270
|
-
/** Deletes the conversation's intent when it is `token`'s. */
|
|
271
|
-
async clearIntent(conv, token) {
|
|
272
|
-
await this.locks.releaseIf(this.keys(conv).intent, 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;
|
|
273
233
|
}
|
|
274
|
-
/**
|
|
275
|
-
async
|
|
276
|
-
|
|
277
|
-
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);
|
|
278
237
|
}
|
|
279
|
-
/** Live shared leases of the
|
|
280
|
-
sharedCount(
|
|
281
|
-
return this.locks.sharedCount(this.keys(
|
|
238
|
+
/** Live shared leases of the environment. */
|
|
239
|
+
sharedCount(env) {
|
|
240
|
+
return this.locks.sharedCount(this.keys(env));
|
|
282
241
|
}
|
|
283
242
|
/**
|
|
284
243
|
* Records (or refreshes) a holder that may run commands (before its provider calls); `ttlMs`
|
|
285
|
-
* bounds the record.
|
|
244
|
+
* bounds the record.
|
|
286
245
|
*/
|
|
287
|
-
async registerHolder(
|
|
288
|
-
await this.redis.eval(REGISTER,
|
|
246
|
+
async registerHolder(env, token, ttlMs) {
|
|
247
|
+
await this.redis.eval(REGISTER, 1, `${HOLDERS_PREFIX}${env}`, token, ttlMs);
|
|
289
248
|
}
|
|
290
|
-
/** Deletes a holder record (after its provider calls)
|
|
291
|
-
async unregisterHolder(
|
|
292
|
-
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);
|
|
293
252
|
}
|
|
294
253
|
/**
|
|
295
|
-
* Tags of holders without a live lease,
|
|
296
|
-
*
|
|
297
|
-
* 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.
|
|
298
256
|
*/
|
|
299
|
-
async claimDeadHolders(
|
|
300
|
-
const { lock, users } = this.keys(
|
|
301
|
-
|
|
302
|
-
const [legacy, ...tags] = r;
|
|
303
|
-
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}`));
|
|
304
260
|
}
|
|
305
261
|
/**
|
|
306
262
|
* A short lease on one path of the sandbox (the kernel's own read-modify-write of a file); waits
|
|
307
263
|
* up to `capMs`, then throws {@link SandboxPathBusyError}. A {@link LockService.hold} lease
|
|
308
264
|
* (renewed every TTL / 3): when it is lost its `signal` aborts.
|
|
309
265
|
*/
|
|
310
|
-
async pathLease(
|
|
311
|
-
const key = `${PATH_PREFIX}${
|
|
266
|
+
async pathLease(env, path, signal, capMs) {
|
|
267
|
+
const key = `${PATH_PREFIX}${env}:${createHash("sha256").update(path).digest("hex")}`;
|
|
312
268
|
const token = randomUUID();
|
|
313
269
|
const deadline = Date.now() + capMs;
|
|
314
270
|
let h;
|
|
@@ -323,19 +279,19 @@ let SandboxLeases = class SandboxLeases {
|
|
|
323
279
|
await this.wait(signal);
|
|
324
280
|
}
|
|
325
281
|
const held = h;
|
|
326
|
-
return { signal: lostSignal(held.lost,
|
|
282
|
+
return { signal: lostSignal(held.lost, env), release: () => held.release() };
|
|
327
283
|
}
|
|
328
284
|
/** A sandbox lease over a held {@link SharedLeaseHandle}, as its current kind. */
|
|
329
|
-
held(
|
|
330
|
-
return this.view(
|
|
285
|
+
held(env, h) {
|
|
286
|
+
return this.view(env, h, lostSignal(h.lost, env), h.kind);
|
|
331
287
|
}
|
|
332
288
|
/** A lease view of `h` as `kind`; a view stops working once the lease changes kind. */
|
|
333
|
-
view(
|
|
289
|
+
view(env, h, signal, kind) {
|
|
334
290
|
const current = () => h.kind === kind;
|
|
335
291
|
return {
|
|
336
292
|
kind,
|
|
337
293
|
token: h.token,
|
|
338
|
-
|
|
294
|
+
environmentId: env,
|
|
339
295
|
signal,
|
|
340
296
|
// a Redis error is warned, not thrown: the deadline decides whether the lease is lost
|
|
341
297
|
renew: async () => {
|
|
@@ -345,7 +301,7 @@ let SandboxLeases = class SandboxLeases {
|
|
|
345
301
|
return await h.renew();
|
|
346
302
|
}
|
|
347
303
|
catch (err) {
|
|
348
|
-
this.log.warn("sandbox lease renew failed", {
|
|
304
|
+
this.log.warn("sandbox lease renew failed", { environmentId: env, err });
|
|
349
305
|
return !signal.aborted;
|
|
350
306
|
}
|
|
351
307
|
},
|
|
@@ -358,8 +314,8 @@ let SandboxLeases = class SandboxLeases {
|
|
|
358
314
|
if (signal.aborted)
|
|
359
315
|
throw abortReason(signal);
|
|
360
316
|
if (!(await h.downgrade()))
|
|
361
|
-
throw new SandboxLockLostError(
|
|
362
|
-
return this.view(
|
|
317
|
+
throw new SandboxLockLostError(env);
|
|
318
|
+
return this.view(env, h, signal, "shared");
|
|
363
319
|
},
|
|
364
320
|
};
|
|
365
321
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { type SandboxProvider } from "@capybara-hq/plugin-sdk";
|
|
2
2
|
import { ExtensionRegistry } from "../extensions/registry.js";
|
|
3
|
-
/** 当前的 `sandbox@
|
|
3
|
+
/** 当前的 `sandbox@2` 提供方:插件名与实现。 */
|
|
4
4
|
export interface SandboxProviderEntry {
|
|
5
5
|
plugin: string;
|
|
6
6
|
impl: SandboxProvider;
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
|
-
* The `sandbox@
|
|
9
|
+
* The `sandbox@2` providers of this process, read from the {@link ExtensionRegistry} at every
|
|
10
10
|
* call: providers are ready only after the extension load, and change with installs.
|
|
11
11
|
*/
|
|
12
12
|
export declare class SandboxProviders {
|
|
@@ -11,7 +11,7 @@ import { SANDBOX_EXTENSION_POINT } from "@capybara-hq/plugin-sdk";
|
|
|
11
11
|
import { Inject, Injectable } from "@nestjs/common";
|
|
12
12
|
import { ExtensionRegistry } from "../extensions/registry.js";
|
|
13
13
|
/**
|
|
14
|
-
* The `sandbox@
|
|
14
|
+
* The `sandbox@2` providers of this process, read from the {@link ExtensionRegistry} at every
|
|
15
15
|
* call: providers are ready only after the extension load, and change with installs.
|
|
16
16
|
*/
|
|
17
17
|
let SandboxProviders = class SandboxProviders {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Sandboxes: the one {@link SandboxService} (
|
|
3
|
-
* provider, with the shared / exclusive leases of {@link SandboxLeases}) and the
|
|
2
|
+
* Sandboxes: the one {@link SandboxService} (an environment's file system and instance over the
|
|
3
|
+
* `sandbox@2` provider, with the shared / exclusive leases of {@link SandboxLeases}) and the
|
|
4
|
+
* producer of the
|
|
4
5
|
* one-off `sandbox-destroy-for` jobs (`MaintenanceProcessor` consumes them). The sweeps
|
|
5
6
|
* (`SandboxSweepJobs`) are the worker role's (`WorkerModule`).
|
|
6
7
|
*/
|
|
@@ -5,6 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { Module } from "@nestjs/common";
|
|
8
|
+
import { BackgroundStoreModule } from "../background/store.module.js";
|
|
8
9
|
import { ExtensionRegistryModule } from "../extensions/registry.js";
|
|
9
10
|
import { QueueModule } from "../infra/queue/queue.module.js";
|
|
10
11
|
import { MAINTENANCE_QUEUE_NAME } from "../runtime/maintenance-queue.js";
|
|
@@ -13,8 +14,9 @@ import { SandboxLeases } from "./leases.js";
|
|
|
13
14
|
import { SandboxProviders } from "./providers.js";
|
|
14
15
|
import { SandboxService } from "./sandbox.service.js";
|
|
15
16
|
/**
|
|
16
|
-
* Sandboxes: the one {@link SandboxService} (
|
|
17
|
-
* provider, with the shared / exclusive leases of {@link SandboxLeases}) and the
|
|
17
|
+
* Sandboxes: the one {@link SandboxService} (an environment's file system and instance over the
|
|
18
|
+
* `sandbox@2` provider, with the shared / exclusive leases of {@link SandboxLeases}) and the
|
|
19
|
+
* producer of the
|
|
18
20
|
* one-off `sandbox-destroy-for` jobs (`MaintenanceProcessor` consumes them). The sweeps
|
|
19
21
|
* (`SandboxSweepJobs`) are the worker role's (`WorkerModule`).
|
|
20
22
|
*/
|
|
@@ -22,9 +24,13 @@ let SandboxModule = class SandboxModule {
|
|
|
22
24
|
};
|
|
23
25
|
SandboxModule = __decorate([
|
|
24
26
|
Module({
|
|
25
|
-
imports: [
|
|
27
|
+
imports: [
|
|
28
|
+
ExtensionRegistryModule,
|
|
29
|
+
BackgroundStoreModule,
|
|
30
|
+
QueueModule.registerQueue(MAINTENANCE_QUEUE_NAME),
|
|
31
|
+
],
|
|
26
32
|
providers: [SandboxProviders, SandboxLeases, SandboxService, SandboxJobs],
|
|
27
|
-
exports: [SandboxService, SandboxJobs],
|
|
33
|
+
exports: [SandboxService, SandboxJobs, SandboxProviders],
|
|
28
34
|
})
|
|
29
35
|
], SandboxModule);
|
|
30
36
|
export { SandboxModule };
|