@capybara-hq/kernel 0.0.0-stage → 0.1.0-rc.0
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/LICENSE +202 -0
- package/NOTICE +2 -0
- package/README.md +20 -2
- package/bootstrap.json +22 -0
- package/dist/admin/admin.controller.d.ts +139 -0
- package/dist/admin/admin.controller.js +238 -0
- package/dist/admin/extensions.controller.d.ts +100 -0
- package/dist/admin/extensions.controller.js +226 -0
- package/dist/admin/setup.controller.d.ts +36 -0
- package/dist/admin/setup.controller.js +106 -0
- package/dist/admin/setup.service.d.ts +47 -0
- package/dist/admin/setup.service.js +90 -0
- package/dist/agents/agents.controller.d.ts +205 -0
- package/dist/agents/agents.controller.js +144 -0
- package/dist/agents/agents.service.d.ts +177 -0
- package/dist/agents/agents.service.js +677 -0
- package/dist/agents/definition.d.ts +198 -0
- package/dist/agents/definition.js +152 -0
- package/dist/agents/models.controller.d.ts +13 -0
- package/dist/agents/models.controller.js +31 -0
- package/dist/agents/templates.controller.d.ts +15 -0
- package/dist/agents/templates.controller.js +37 -0
- package/dist/agents/templates.d.ts +83 -0
- package/dist/agents/templates.js +173 -0
- package/dist/catalog/admin-catalog.controller.d.ts +143 -0
- package/dist/catalog/admin-catalog.controller.js +245 -0
- package/dist/catalog/catalog.service.d.ts +430 -0
- package/dist/catalog/catalog.service.js +882 -0
- package/dist/catalog/claude/agents.d.ts +27 -0
- package/dist/catalog/claude/agents.js +270 -0
- package/dist/catalog/claude/commands.d.ts +50 -0
- package/dist/catalog/claude/commands.js +179 -0
- package/dist/catalog/claude/manifest.d.ts +69 -0
- package/dist/catalog/claude/manifest.js +134 -0
- package/dist/catalog/claude/marketplace.d.ts +35 -0
- package/dist/catalog/claude/marketplace.js +194 -0
- package/dist/catalog/claude/mcp.d.ts +33 -0
- package/dist/catalog/claude/mcp.js +226 -0
- package/dist/catalog/claude/report.d.ts +86 -0
- package/dist/catalog/claude/report.js +121 -0
- package/dist/catalog/claude/translate.d.ts +56 -0
- package/dist/catalog/claude/translate.js +857 -0
- package/dist/catalog/cli.d.ts +46 -0
- package/dist/catalog/cli.js +211 -0
- package/dist/catalog/git-source.d.ts +127 -0
- package/dist/catalog/git-source.js +520 -0
- package/dist/catalog/marketplace-fetch.d.ts +99 -0
- package/dist/catalog/marketplace-fetch.js +203 -0
- package/dist/catalog/marketplaces.controller.d.ts +97 -0
- package/dist/catalog/marketplaces.controller.js +197 -0
- package/dist/catalog/marketplaces.service.d.ts +340 -0
- package/dist/catalog/marketplaces.service.js +1217 -0
- package/dist/catalog/org-catalog.controller.d.ts +128 -0
- package/dist/catalog/org-catalog.controller.js +277 -0
- package/dist/catalog/org-catalog.service.d.ts +246 -0
- package/dist/catalog/org-catalog.service.js +625 -0
- package/dist/catalog/plugin-import.d.ts +436 -0
- package/dist/catalog/plugin-import.js +1069 -0
- package/dist/catalog/plugin-install.d.ts +447 -0
- package/dist/catalog/plugin-install.js +1333 -0
- package/dist/catalog/plugin-package.d.ts +143 -0
- package/dist/catalog/plugin-package.js +382 -0
- package/dist/catalog/plugin-upgrade.d.ts +222 -0
- package/dist/catalog/plugin-upgrade.js +1219 -0
- package/dist/catalog/requests.service.d.ts +162 -0
- package/dist/catalog/requests.service.js +504 -0
- package/dist/catalog/schema-path.d.ts +7 -0
- package/dist/catalog/schema-path.js +63 -0
- package/dist/catalog/upgrade-targets.d.ts +59 -0
- package/dist/catalog/upgrade-targets.js +90 -0
- package/dist/catalog/versions.d.ts +31 -0
- package/dist/catalog/versions.js +44 -0
- package/dist/channels/actions.d.ts +37 -0
- package/dist/channels/actions.js +121 -0
- package/dist/channels/cards.d.ts +44 -0
- package/dist/channels/cards.js +156 -0
- package/dist/channels/connections.controller.d.ts +59 -0
- package/dist/channels/connections.controller.js +115 -0
- package/dist/channels/connections.service.d.ts +187 -0
- package/dist/channels/connections.service.js +534 -0
- package/dist/channels/features.d.ts +12 -0
- package/dist/channels/features.js +22 -0
- package/dist/channels/inbound.d.ts +120 -0
- package/dist/channels/inbound.js +332 -0
- package/dist/channels/outbound.d.ts +140 -0
- package/dist/channels/outbound.js +1125 -0
- package/dist/channels/phrases.d.ts +100 -0
- package/dist/channels/phrases.js +81 -0
- package/dist/channels/supervisor.d.ts +182 -0
- package/dist/channels/supervisor.js +625 -0
- package/dist/channels/threads.d.ts +29 -0
- package/dist/channels/threads.js +104 -0
- package/dist/channels/webhook-url.d.ts +16 -0
- package/dist/channels/webhook-url.js +34 -0
- package/dist/channels/webhook.controller.d.ts +19 -0
- package/dist/channels/webhook.controller.js +72 -0
- package/dist/channels/webhook.d.ts +73 -0
- package/dist/channels/webhook.js +274 -0
- package/dist/config/docs.d.ts +9 -0
- package/dist/config/docs.js +85 -0
- package/dist/config/env.d.ts +6 -0
- package/dist/config/env.js +73 -0
- package/dist/config/fields.d.ts +42 -0
- package/dist/config/fields.js +214 -0
- package/dist/config/file-source.d.ts +3 -0
- package/dist/config/file-source.js +31 -0
- package/dist/config/load.d.ts +20 -0
- package/dist/config/load.js +98 -0
- package/dist/config/nacos-source.d.ts +31 -0
- package/dist/config/nacos-source.js +229 -0
- package/dist/config/schema.d.ts +223 -0
- package/dist/config/schema.js +1151 -0
- package/dist/config/sources.d.ts +18 -0
- package/dist/config/sources.js +59 -0
- package/dist/config/types.d.ts +9 -0
- package/dist/config/types.js +7 -0
- package/dist/conversations/artifacts.d.ts +52 -0
- package/dist/conversations/artifacts.js +137 -0
- package/dist/conversations/attachments.controller.d.ts +28 -0
- package/dist/conversations/attachments.controller.js +96 -0
- package/dist/conversations/attachments.service.d.ts +180 -0
- package/dist/conversations/attachments.service.js +578 -0
- package/dist/conversations/conversations.controller.d.ts +288 -0
- package/dist/conversations/conversations.controller.js +607 -0
- package/dist/conversations/conversations.service.d.ts +321 -0
- package/dist/conversations/conversations.service.js +754 -0
- package/dist/conversations/event-log.d.ts +122 -0
- package/dist/conversations/event-log.js +259 -0
- package/dist/conversations/events.d.ts +856 -0
- package/dist/conversations/events.js +639 -0
- package/dist/conversations/files.d.ts +92 -0
- package/dist/conversations/files.js +213 -0
- package/dist/conversations/outputs-read.d.ts +34 -0
- package/dist/conversations/outputs-read.js +37 -0
- package/dist/conversations/queue.d.ts +169 -0
- package/dist/conversations/queue.js +527 -0
- package/dist/conversations/sandbox-status.d.ts +21 -0
- package/dist/conversations/sandbox-status.js +24 -0
- package/dist/conversations/selection.d.ts +46 -0
- package/dist/conversations/selection.js +75 -0
- package/dist/conversations/titles.d.ts +93 -0
- package/dist/conversations/titles.js +422 -0
- package/dist/ctx/bus.d.ts +16 -0
- package/dist/ctx/bus.js +101 -0
- package/dist/ctx/create-ctx.d.ts +109 -0
- package/dist/ctx/create-ctx.js +592 -0
- package/dist/ctx/kv.d.ts +4 -0
- package/dist/ctx/kv.js +31 -0
- package/dist/ctx/lock.d.ts +4 -0
- package/dist/ctx/lock.js +39 -0
- package/dist/ctx/namespace.d.ts +6 -0
- package/dist/ctx/namespace.js +12 -0
- package/dist/ctx/queue.d.ts +25 -0
- package/dist/ctx/queue.js +150 -0
- package/dist/ctx/secrets.d.ts +45 -0
- package/dist/ctx/secrets.js +175 -0
- package/dist/db/kernel-schema.d.ts +1122 -0
- package/dist/db/kernel-schema.js +5 -0
- package/dist/db/migrator.d.ts +28 -0
- package/dist/db/migrator.js +140 -0
- package/dist/db/pool.d.ts +21 -0
- package/dist/db/pool.js +28 -0
- package/dist/db/sql-statements.d.ts +34 -0
- package/dist/db/sql-statements.js +168 -0
- package/dist/errors.d.ts +210 -0
- package/dist/errors.js +212 -0
- package/dist/evals/budget.d.ts +61 -0
- package/dist/evals/budget.js +181 -0
- package/dist/evals/diff.d.ts +55 -0
- package/dist/evals/diff.js +133 -0
- package/dist/evals/judge.d.ts +53 -0
- package/dist/evals/judge.js +149 -0
- package/dist/evals/plan.d.ts +47 -0
- package/dist/evals/plan.js +77 -0
- package/dist/evals/reconstruct.d.ts +137 -0
- package/dist/evals/reconstruct.js +322 -0
- package/dist/evals/recorded-tools.d.ts +54 -0
- package/dist/evals/recorded-tools.js +167 -0
- package/dist/evals/run-replay.d.ts +86 -0
- package/dist/evals/run-replay.js +502 -0
- package/dist/evals/runs.controller.d.ts +100 -0
- package/dist/evals/runs.controller.js +199 -0
- package/dist/evals/runs.service.d.ts +275 -0
- package/dist/evals/runs.service.js +836 -0
- package/dist/evals/sets.controller.d.ts +61 -0
- package/dist/evals/sets.controller.js +183 -0
- package/dist/evals/sets.service.d.ts +128 -0
- package/dist/evals/sets.service.js +558 -0
- package/dist/evals/snapshot.d.ts +76 -0
- package/dist/evals/snapshot.js +207 -0
- package/dist/evals/step-replay.d.ts +113 -0
- package/dist/evals/step-replay.js +181 -0
- package/dist/evals/trajectory.controller.d.ts +41 -0
- package/dist/evals/trajectory.controller.js +88 -0
- package/dist/evals/trajectory.d.ts +144 -0
- package/dist/evals/trajectory.js +338 -0
- package/dist/evals/trajectory.service.d.ts +108 -0
- package/dist/evals/trajectory.service.js +323 -0
- package/dist/evals/worker.d.ts +101 -0
- package/dist/evals/worker.js +789 -0
- package/dist/extensions/admin-ops.d.ts +105 -0
- package/dist/extensions/admin-ops.js +353 -0
- package/dist/extensions/admin-view.d.ts +79 -0
- package/dist/extensions/admin-view.js +327 -0
- package/dist/extensions/approvals.d.ts +119 -0
- package/dist/extensions/approvals.js +205 -0
- package/dist/extensions/blobs.d.ts +45 -0
- package/dist/extensions/blobs.js +160 -0
- package/dist/extensions/bootstrap.d.ts +149 -0
- package/dist/extensions/bootstrap.js +441 -0
- package/dist/extensions/cli.d.ts +61 -0
- package/dist/extensions/cli.js +165 -0
- package/dist/extensions/config-json-schema.d.ts +9 -0
- package/dist/extensions/config-json-schema.js +73 -0
- package/dist/extensions/deployment-config.d.ts +138 -0
- package/dist/extensions/deployment-config.js +394 -0
- package/dist/extensions/enabled.d.ts +31 -0
- package/dist/extensions/enabled.js +55 -0
- package/dist/extensions/hooks.d.ts +161 -0
- package/dist/extensions/hooks.js +425 -0
- package/dist/extensions/host.d.ts +577 -0
- package/dist/extensions/host.js +2071 -0
- package/dist/extensions/inflight.d.ts +69 -0
- package/dist/extensions/inflight.js +277 -0
- package/dist/extensions/installs.d.ts +166 -0
- package/dist/extensions/installs.js +253 -0
- package/dist/extensions/instance.d.ts +167 -0
- package/dist/extensions/instance.js +329 -0
- package/dist/extensions/ledger.d.ts +30 -0
- package/dist/extensions/ledger.js +50 -0
- package/dist/extensions/lifecycle.d.ts +80 -0
- package/dist/extensions/lifecycle.js +152 -0
- package/dist/extensions/migrate-lock.d.ts +51 -0
- package/dist/extensions/migrate-lock.js +100 -0
- package/dist/extensions/org-config.controller.d.ts +24 -0
- package/dist/extensions/org-config.controller.js +59 -0
- package/dist/extensions/org-config.d.ts +169 -0
- package/dist/extensions/org-config.js +520 -0
- package/dist/extensions/package.d.ts +115 -0
- package/dist/extensions/package.js +246 -0
- package/dist/extensions/permission-set.d.ts +117 -0
- package/dist/extensions/permission-set.js +184 -0
- package/dist/extensions/permission-view.d.ts +194 -0
- package/dist/extensions/permission-view.js +284 -0
- package/dist/extensions/registry.d.ts +24 -0
- package/dist/extensions/registry.js +56 -0
- package/dist/extensions/resolve.d.ts +12 -0
- package/dist/extensions/resolve.js +71 -0
- package/dist/extensions/sources.d.ts +69 -0
- package/dist/extensions/sources.js +120 -0
- package/dist/extensions/sync.d.ts +40 -0
- package/dist/extensions/sync.js +242 -0
- package/dist/files/previewers.controller.d.ts +46 -0
- package/dist/files/previewers.controller.js +105 -0
- package/dist/files/previewers.d.ts +100 -0
- package/dist/files/previewers.js +250 -0
- package/dist/http/api.module.d.ts +114 -0
- package/dist/http/api.module.js +448 -0
- package/dist/http/app.d.ts +77 -0
- package/dist/http/app.js +170 -0
- package/dist/http/error.filter.d.ts +21 -0
- package/dist/http/error.filter.js +85 -0
- package/dist/http/gateway.module.d.ts +15 -0
- package/dist/http/gateway.module.js +13 -0
- package/dist/http/health.controller.d.ts +26 -0
- package/dist/http/health.controller.js +79 -0
- package/dist/http/nest-logger.d.ts +20 -0
- package/dist/http/nest-logger.js +28 -0
- package/dist/http/plugin-dispatch.d.ts +68 -0
- package/dist/http/plugin-dispatch.js +200 -0
- package/dist/http/tokens.d.ts +131 -0
- package/dist/http/tokens.js +131 -0
- package/dist/http/zod.pipe.d.ts +8 -0
- package/dist/http/zod.pipe.js +14 -0
- package/dist/identity/accounts.d.ts +93 -0
- package/dist/identity/accounts.js +367 -0
- package/dist/identity/api-tokens.d.ts +73 -0
- package/dist/identity/api-tokens.js +197 -0
- package/dist/identity/audit.d.ts +23 -0
- package/dist/identity/audit.js +41 -0
- package/dist/identity/auth.controller.d.ts +40 -0
- package/dist/identity/auth.controller.js +130 -0
- package/dist/identity/auth.guard.d.ts +41 -0
- package/dist/identity/auth.guard.js +162 -0
- package/dist/identity/binding.d.ts +47 -0
- package/dist/identity/binding.js +84 -0
- package/dist/identity/cookies.d.ts +16 -0
- package/dist/identity/cookies.js +32 -0
- package/dist/identity/credential-check.d.ts +17 -0
- package/dist/identity/credential-check.js +24 -0
- package/dist/identity/enterprise-admin.d.ts +14 -0
- package/dist/identity/enterprise-admin.js +27 -0
- package/dist/identity/external.d.ts +106 -0
- package/dist/identity/external.js +337 -0
- package/dist/identity/hash.d.ts +2 -0
- package/dist/identity/hash.js +3 -0
- package/dist/identity/login.d.ts +6 -0
- package/dist/identity/login.js +20 -0
- package/dist/identity/me.controller.d.ts +61 -0
- package/dist/identity/me.controller.js +159 -0
- package/dist/identity/passwords.d.ts +6 -0
- package/dist/identity/passwords.js +37 -0
- package/dist/identity/principal.d.ts +56 -0
- package/dist/identity/principal.js +38 -0
- package/dist/identity/rate-limit.d.ts +55 -0
- package/dist/identity/rate-limit.js +121 -0
- package/dist/identity/sessions.d.ts +84 -0
- package/dist/identity/sessions.js +306 -0
- package/dist/identity/settings.d.ts +121 -0
- package/dist/identity/settings.js +248 -0
- package/dist/identity/sso.controller.d.ts +59 -0
- package/dist/identity/sso.controller.js +192 -0
- package/dist/identity/sso.d.ts +83 -0
- package/dist/identity/sso.js +202 -0
- package/dist/inbox/inbox.service.d.ts +43 -0
- package/dist/inbox/inbox.service.js +57 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.js +65 -0
- package/dist/kernel.d.ts +256 -0
- package/dist/kernel.js +1326 -0
- package/dist/log.d.ts +48 -0
- package/dist/log.js +229 -0
- package/dist/models/prices.d.ts +53 -0
- package/dist/models/prices.js +121 -0
- package/dist/models/purposes.controller.d.ts +19 -0
- package/dist/models/purposes.controller.js +56 -0
- package/dist/models/purposes.d.ts +140 -0
- package/dist/models/purposes.js +267 -0
- package/dist/net/proxy.d.ts +44 -0
- package/dist/net/proxy.js +162 -0
- package/dist/net/public-address.d.ts +60 -0
- package/dist/net/public-address.js +271 -0
- package/dist/net/safe-fetch.d.ts +38 -0
- package/dist/net/safe-fetch.js +140 -0
- package/dist/orgs/directory-sync.controller.d.ts +14 -0
- package/dist/orgs/directory-sync.controller.js +40 -0
- package/dist/orgs/directory-sync.d.ts +166 -0
- package/dist/orgs/directory-sync.js +558 -0
- package/dist/orgs/invitations.controller.d.ts +58 -0
- package/dist/orgs/invitations.controller.js +137 -0
- package/dist/orgs/invitations.service.d.ts +80 -0
- package/dist/orgs/invitations.service.js +217 -0
- package/dist/orgs/members.service.d.ts +63 -0
- package/dist/orgs/members.service.js +234 -0
- package/dist/orgs/offboarding.d.ts +141 -0
- package/dist/orgs/offboarding.js +398 -0
- package/dist/orgs/org-lock.d.ts +32 -0
- package/dist/orgs/org-lock.js +46 -0
- package/dist/orgs/org.guard.d.ts +35 -0
- package/dist/orgs/org.guard.js +95 -0
- package/dist/orgs/orgs.controller.d.ts +78 -0
- package/dist/orgs/orgs.controller.js +192 -0
- package/dist/orgs/orgs.service.d.ts +61 -0
- package/dist/orgs/orgs.service.js +209 -0
- package/dist/orgs/roles.d.ts +13 -0
- package/dist/orgs/roles.js +58 -0
- package/dist/orgs/settings.controller.d.ts +20 -0
- package/dist/orgs/settings.controller.js +53 -0
- package/dist/orgs/settings.service.d.ts +120 -0
- package/dist/orgs/settings.service.js +178 -0
- package/dist/packages/npm.d.ts +50 -0
- package/dist/packages/npm.js +218 -0
- package/dist/packages/provenance.d.ts +47 -0
- package/dist/packages/provenance.js +147 -0
- package/dist/packages/tgz.d.ts +76 -0
- package/dist/packages/tgz.js +225 -0
- package/dist/runtime/abort.d.ts +32 -0
- package/dist/runtime/abort.js +71 -0
- package/dist/runtime/checkpointer.d.ts +32 -0
- package/dist/runtime/checkpointer.js +243 -0
- package/dist/runtime/context/build.d.ts +254 -0
- package/dist/runtime/context/build.js +693 -0
- package/dist/runtime/context/claude-tools.d.ts +11 -0
- package/dist/runtime/context/claude-tools.js +24 -0
- package/dist/runtime/context/compaction.d.ts +26 -0
- package/dist/runtime/context/compaction.js +195 -0
- package/dist/runtime/context/pairing.d.ts +11 -0
- package/dist/runtime/context/pairing.js +82 -0
- package/dist/runtime/context/reminders.d.ts +5 -0
- package/dist/runtime/context/reminders.js +11 -0
- package/dist/runtime/context/skills.d.ts +105 -0
- package/dist/runtime/context/skills.js +283 -0
- package/dist/runtime/context/tokens.d.ts +19 -0
- package/dist/runtime/context/tokens.js +104 -0
- package/dist/runtime/conversation-lock.d.ts +40 -0
- package/dist/runtime/conversation-lock.js +97 -0
- package/dist/runtime/hook-calls.d.ts +84 -0
- package/dist/runtime/hook-calls.js +136 -0
- package/dist/runtime/langgraph-loop.d.ts +52 -0
- package/dist/runtime/langgraph-loop.js +247 -0
- package/dist/runtime/loop.d.ts +93 -0
- package/dist/runtime/loop.js +7 -0
- package/dist/runtime/maintenance.d.ts +80 -0
- package/dist/runtime/maintenance.js +147 -0
- package/dist/runtime/media-cache.d.ts +21 -0
- package/dist/runtime/media-cache.js +51 -0
- package/dist/runtime/model-call.d.ts +176 -0
- package/dist/runtime/model-call.js +1049 -0
- package/dist/runtime/providers.d.ts +86 -0
- package/dist/runtime/providers.js +224 -0
- package/dist/runtime/quota.d.ts +29 -0
- package/dist/runtime/quota.js +70 -0
- package/dist/runtime/run-finish.d.ts +45 -0
- package/dist/runtime/run-finish.js +69 -0
- package/dist/runtime/run-queue.d.ts +121 -0
- package/dist/runtime/run-queue.js +493 -0
- package/dist/runtime/run-worker.d.ts +138 -0
- package/dist/runtime/run-worker.js +805 -0
- package/dist/runtime/stream.controller.d.ts +34 -0
- package/dist/runtime/stream.controller.js +122 -0
- package/dist/runtime/stream.d.ts +63 -0
- package/dist/runtime/stream.js +262 -0
- package/dist/runtime/subagents/child.d.ts +80 -0
- package/dist/runtime/subagents/child.js +225 -0
- package/dist/runtime/subagents/definition.d.ts +103 -0
- package/dist/runtime/subagents/definition.js +392 -0
- package/dist/runtime/subagents/dispatch.d.ts +69 -0
- package/dist/runtime/subagents/dispatch.js +502 -0
- package/dist/runtime/subagents/limits.d.ts +23 -0
- package/dist/runtime/subagents/limits.js +34 -0
- package/dist/runtime/subagents/org-agents.d.ts +50 -0
- package/dist/runtime/subagents/org-agents.js +70 -0
- package/dist/runtime/subagents/preamble.d.ts +7 -0
- package/dist/runtime/subagents/preamble.js +11 -0
- package/dist/runtime/subagents/progress.d.ts +26 -0
- package/dist/runtime/subagents/progress.js +36 -0
- package/dist/runtime/subagents/roster.d.ts +55 -0
- package/dist/runtime/subagents/roster.js +111 -0
- package/dist/runtime/subagents/skill-fork.d.ts +123 -0
- package/dist/runtime/subagents/skill-fork.js +259 -0
- package/dist/runtime/usage-report.d.ts +163 -0
- package/dist/runtime/usage-report.js +550 -0
- package/dist/runtime/waits.d.ts +233 -0
- package/dist/runtime/waits.js +883 -0
- package/dist/sandbox/leases.d.ts +169 -0
- package/dist/sandbox/leases.js +515 -0
- package/dist/sandbox/lifecycle.d.ts +21 -0
- package/dist/sandbox/lifecycle.js +68 -0
- package/dist/sandbox/sandbox.service.d.ts +249 -0
- package/dist/sandbox/sandbox.service.js +908 -0
- package/dist/skills/catalog.d.ts +149 -0
- package/dist/skills/catalog.js +405 -0
- package/dist/skills/changes.controller.d.ts +56 -0
- package/dist/skills/changes.controller.js +136 -0
- package/dist/skills/changes.service.d.ts +175 -0
- package/dist/skills/changes.service.js +805 -0
- package/dist/skills/invocable.controller.d.ts +23 -0
- package/dist/skills/invocable.controller.js +50 -0
- package/dist/skills/invocation-keys.d.ts +23 -0
- package/dist/skills/invocation-keys.js +44 -0
- package/dist/skills/invoke.d.ts +135 -0
- package/dist/skills/invoke.js +286 -0
- package/dist/skills/package.d.ts +87 -0
- package/dist/skills/package.js +227 -0
- package/dist/skills/skills.controller.d.ts +40 -0
- package/dist/skills/skills.controller.js +110 -0
- package/dist/skills/skills.service.d.ts +192 -0
- package/dist/skills/skills.service.js +567 -0
- package/dist/storage/prefix.d.ts +36 -0
- package/dist/storage/prefix.js +104 -0
- package/dist/storage/purge.d.ts +27 -0
- package/dist/storage/purge.js +75 -0
- package/dist/storage/storage.service.d.ts +44 -0
- package/dist/storage/storage.service.js +145 -0
- package/dist/text.d.ts +13 -0
- package/dist/text.js +13 -0
- package/dist/tools/approvals.controller.d.ts +53 -0
- package/dist/tools/approvals.controller.js +128 -0
- package/dist/tools/approvals.service.d.ts +172 -0
- package/dist/tools/approvals.service.js +568 -0
- package/dist/tools/breaker.d.ts +28 -0
- package/dist/tools/breaker.js +72 -0
- package/dist/tools/builtins/agent.d.ts +81 -0
- package/dist/tools/builtins/agent.js +223 -0
- package/dist/tools/builtins/ask-user.d.ts +28 -0
- package/dist/tools/builtins/ask-user.js +139 -0
- package/dist/tools/builtins/read-tool-output.d.ts +18 -0
- package/dist/tools/builtins/read-tool-output.js +108 -0
- package/dist/tools/builtins/sandbox/bash.d.ts +16 -0
- package/dist/tools/builtins/sandbox/bash.js +137 -0
- package/dist/tools/builtins/sandbox/common.d.ts +114 -0
- package/dist/tools/builtins/sandbox/common.js +304 -0
- package/dist/tools/builtins/sandbox/deliver.d.ts +5 -0
- package/dist/tools/builtins/sandbox/deliver.js +180 -0
- package/dist/tools/builtins/sandbox/edit.d.ts +4 -0
- package/dist/tools/builtins/sandbox/edit.js +98 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +25 -0
- package/dist/tools/builtins/sandbox/glob-match.js +240 -0
- package/dist/tools/builtins/sandbox/glob.d.ts +4 -0
- package/dist/tools/builtins/sandbox/glob.js +104 -0
- package/dist/tools/builtins/sandbox/grep.d.ts +9 -0
- package/dist/tools/builtins/sandbox/grep.js +133 -0
- package/dist/tools/builtins/sandbox/index.d.ts +12 -0
- package/dist/tools/builtins/sandbox/index.js +27 -0
- package/dist/tools/builtins/sandbox/names.d.ts +7 -0
- package/dist/tools/builtins/sandbox/names.js +20 -0
- package/dist/tools/builtins/sandbox/read.d.ts +8 -0
- package/dist/tools/builtins/sandbox/read.js +121 -0
- package/dist/tools/builtins/sandbox/write.d.ts +4 -0
- package/dist/tools/builtins/sandbox/write.js +88 -0
- package/dist/tools/builtins/skill-load.d.ts +53 -0
- package/dist/tools/builtins/skill-load.js +446 -0
- package/dist/tools/builtins/skill-write.d.ts +59 -0
- package/dist/tools/builtins/skill-write.js +244 -0
- package/dist/tools/builtins/tool-search.d.ts +31 -0
- package/dist/tools/builtins/tool-search.js +171 -0
- package/dist/tools/connector-content.controller.d.ts +34 -0
- package/dist/tools/connector-content.controller.js +78 -0
- package/dist/tools/connector-content.d.ts +104 -0
- package/dist/tools/connector-content.js +267 -0
- package/dist/tools/connectors.controller.d.ts +210 -0
- package/dist/tools/connectors.controller.js +234 -0
- package/dist/tools/connectors.service.d.ts +303 -0
- package/dist/tools/connectors.service.js +1102 -0
- package/dist/tools/credentials.d.ts +139 -0
- package/dist/tools/credentials.js +351 -0
- package/dist/tools/drift.d.ts +141 -0
- package/dist/tools/drift.js +539 -0
- package/dist/tools/elicitation.d.ts +81 -0
- package/dist/tools/elicitation.js +266 -0
- package/dist/tools/endpoint.d.ts +18 -0
- package/dist/tools/endpoint.js +115 -0
- package/dist/tools/info.d.ts +67 -0
- package/dist/tools/info.js +113 -0
- package/dist/tools/naming.d.ts +27 -0
- package/dist/tools/naming.js +47 -0
- package/dist/tools/oauth/discovery.d.ts +65 -0
- package/dist/tools/oauth/discovery.js +307 -0
- package/dist/tools/oauth/flow.d.ts +63 -0
- package/dist/tools/oauth/flow.js +237 -0
- package/dist/tools/oauth/oauth.controller.d.ts +31 -0
- package/dist/tools/oauth/oauth.controller.js +95 -0
- package/dist/tools/oauth/tokens.d.ts +111 -0
- package/dist/tools/oauth/tokens.js +258 -0
- package/dist/tools/outputs.d.ts +61 -0
- package/dist/tools/outputs.js +156 -0
- package/dist/tools/pipeline.d.ts +322 -0
- package/dist/tools/pipeline.js +1236 -0
- package/dist/tools/policy.d.ts +60 -0
- package/dist/tools/policy.js +236 -0
- package/dist/tools/questions.controller.d.ts +24 -0
- package/dist/tools/questions.controller.js +58 -0
- package/dist/tools/questions.service.d.ts +103 -0
- package/dist/tools/questions.service.js +295 -0
- package/dist/tools/redact.d.ts +20 -0
- package/dist/tools/redact.js +60 -0
- package/dist/tools/registry.d.ts +246 -0
- package/dist/tools/registry.js +481 -0
- package/dist/tools/resources.d.ts +16 -0
- package/dist/tools/resources.js +76 -0
- package/dist/tools/specs.d.ts +14 -0
- package/dist/tools/specs.js +31 -0
- package/dist/tools/validate.d.ts +20 -0
- package/dist/tools/validate.js +183 -0
- package/dist/tools/view.d.ts +43 -0
- package/dist/tools/view.js +225 -0
- package/dist/ui/embed-token.d.ts +31 -0
- package/dist/ui/embed-token.js +132 -0
- package/dist/ui/registry.d.ts +58 -0
- package/dist/ui/registry.js +90 -0
- package/dist/ui/ui-stream.d.ts +37 -0
- package/dist/ui/ui-stream.js +162 -0
- package/dist/ui/views.controller.d.ts +81 -0
- package/dist/ui/views.controller.js +261 -0
- package/dist/ui/views.d.ts +155 -0
- package/dist/ui/views.js +306 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.js +6 -0
- package/package.json +67 -3
- package/src/migrations/0001_init.sql +8 -0
- package/src/migrations/0002_secrets.sql +8 -0
- package/src/migrations/0003_identity.sql +117 -0
- package/src/migrations/0004_plugin_org_config_nullable.sql +3 -0
- package/src/migrations/0005_agents.sql +27 -0
- package/src/migrations/0006_conversations.sql +37 -0
- package/src/migrations/0007_checkpoints.sql +26 -0
- package/src/migrations/0008_runs_trigger_seq.sql +3 -0
- package/src/migrations/0009_runs_active_unique.sql +4 -0
- package/src/migrations/0010_tools.sql +125 -0
- package/src/migrations/0011_approvals_spec.sql +10 -0
- package/src/migrations/0012_run_waits.sql +24 -0
- package/src/migrations/0013_app_tools_source.sql +4 -0
- package/src/migrations/0014_tool_specs.sql +8 -0
- package/src/migrations/0015_tool_drift.sql +20 -0
- package/src/migrations/0016_plugin_permissions.sql +11 -0
- package/src/migrations/0017_identity_sources.sql +6 -0
- package/src/migrations/0018_channels.sql +74 -0
- package/src/migrations/0019_identity_trust.sql +17 -0
- package/src/migrations/0020_channel_card_lookup.sql +10 -0
- package/src/migrations/0021_org_storage_purge.sql +9 -0
- package/src/migrations/0022_attachments.sql +29 -0
- package/src/migrations/0023_sandboxes.sql +37 -0
- package/src/migrations/0024_skills.sql +46 -0
- package/src/migrations/0025_skills_catalog_idx.sql +6 -0
- package/src/migrations/0026_skill_changes.sql +34 -0
- package/src/migrations/0027_model_prices.sql +18 -0
- package/src/migrations/0028_evals.sql +105 -0
- package/src/migrations/0029_model_purposes.sql +18 -0
- package/src/migrations/0030_plugin_installs.sql +73 -0
- package/src/migrations/0031_plugin_snapshot_source.sql +6 -0
- package/src/migrations/0032_plugin_deployment_configs.sql +10 -0
- package/src/migrations/0033_rename_apps_to_connectors.sql +25 -0
- package/src/migrations/0034_directory.sql +49 -0
- package/src/migrations/0035_catalogs.sql +40 -0
- package/src/migrations/0036_app_import_staging.sql +17 -0
- package/src/migrations/0037_directory_installs.sql +92 -0
- package/src/migrations/0038_channel_inbound_mode.sql +6 -0
- package/src/migrations/0039_channel_card_pending.sql +8 -0
- package/src/migrations/0040_usage_report_sweep.sql +10 -0
- package/src/migrations/0041_rename_plugins_to_extensions.sql +38 -0
- package/src/migrations/0042_rename_directory_to_catalog.sql +80 -0
- package/src/migrations/0043_rename_app_installs_to_plugin_installs.sql +20 -0
- package/src/migrations/0044_catalog_one_kind.sql +90 -0
- package/src/migrations/0045_plugin_dependencies.sql +9 -0
- package/src/migrations/0046_git_sources.sql +25 -0
- package/src/migrations/0047_marketplace_entry_heads.sql +7 -0
- package/src/migrations/0048_marketplace_entry_trees.sql +8 -0
- package/src/migrations/0049_plugin_upgrades.sql +37 -0
- package/src/migrations/0050_bootstrap.sql +53 -0
- package/src/migrations/0051_claude_compat.sql +26 -0
- package/src/migrations/0052_conversations_account_agent_idx.sql +5 -0
- package/src/migrations/0053_subagents.sql +73 -0
- package/src/migrations/0054_subagent_wait_expiry.sql +7 -0
- package/src/migrations/0055_subagent_parent_indexes.sql +10 -0
- package/src/migrations/0056_approval_reason.sql +3 -0
- package/src/migrations/0057_conversation_titles.sql +11 -0
- package/src/migrations/0058_conversation_selection.sql +4 -0
- package/src/migrations/0059_conversation_queue.sql +22 -0
- package/src/migrations/0060_file_previewers.sql +10 -0
- package/src/migrations/0061_queue_selection.sql +5 -0
- package/src/migrations/0062_queued_skill.sql +8 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Logger } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import type { Maintenance } from "../runtime/maintenance.js";
|
|
3
|
+
import type { SandboxService } from "./sandbox.service.js";
|
|
4
|
+
/** 空闲休眠扫描:任务名、job scheduler id(不含 `:`)与周期。 */
|
|
5
|
+
export declare const SANDBOX_SUSPEND_JOB = "sandbox-suspend-idle";
|
|
6
|
+
export declare const SANDBOX_SUSPEND_SCHEDULER_ID = "sandbox-suspend-idle-every-minute";
|
|
7
|
+
export declare const SANDBOX_SUSPEND_EVERY_MS = 60000;
|
|
8
|
+
/** 不活跃销毁扫描:任务名、job scheduler id(不含 `:`)与周期。 */
|
|
9
|
+
export declare const SANDBOX_DESTROY_JOB = "sandbox-destroy-inactive";
|
|
10
|
+
export declare const SANDBOX_DESTROY_SCHEDULER_ID = "sandbox-destroy-inactive-hourly";
|
|
11
|
+
export declare const SANDBOX_DESTROY_EVERY_MS = 3600000;
|
|
12
|
+
/** 一次性任务:立即销毁一批对话的沙箱(成员离职后投递,数据 `{ conversationIds }`)。 */
|
|
13
|
+
export declare const SANDBOX_DESTROY_FOR_JOB = "sandbox-destroy-for";
|
|
14
|
+
/** 投递 {@link SANDBOX_DESTROY_FOR_JOB}:失败的整批重试(已销毁的再调一次什么也不做)。 */
|
|
15
|
+
export declare function scheduleSandboxDestroy(maintenance: Pick<Maintenance, "add">, conversationIds: string[]): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* 在维护队列(`cap-kernel-maintenance`)登记沙箱的两个周期任务(worker 角色执行):
|
|
18
|
+
* 每分钟休眠空闲 / 连续运行超时的沙箱,每小时销毁不活跃、组织已删除或对话已删除的沙箱。
|
|
19
|
+
* 没有沙箱提供方时两个任务什么也不做。另登记一次性任务 {@link SANDBOX_DESTROY_FOR_JOB}(成员离职)。
|
|
20
|
+
*/
|
|
21
|
+
export declare function registerSandboxMaintenance(maintenance: Maintenance, sandbox: SandboxService, log: Pick<Logger, "info" | "warn">): void;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/** 空闲休眠扫描:任务名、job scheduler id(不含 `:`)与周期。 */
|
|
2
|
+
export const SANDBOX_SUSPEND_JOB = "sandbox-suspend-idle";
|
|
3
|
+
export const SANDBOX_SUSPEND_SCHEDULER_ID = "sandbox-suspend-idle-every-minute";
|
|
4
|
+
export const SANDBOX_SUSPEND_EVERY_MS = 60_000;
|
|
5
|
+
/** 不活跃销毁扫描:任务名、job scheduler id(不含 `:`)与周期。 */
|
|
6
|
+
export const SANDBOX_DESTROY_JOB = "sandbox-destroy-inactive";
|
|
7
|
+
export const SANDBOX_DESTROY_SCHEDULER_ID = "sandbox-destroy-inactive-hourly";
|
|
8
|
+
export const SANDBOX_DESTROY_EVERY_MS = 3_600_000;
|
|
9
|
+
/** 一次性任务:立即销毁一批对话的沙箱(成员离职后投递,数据 `{ conversationIds }`)。 */
|
|
10
|
+
export const SANDBOX_DESTROY_FOR_JOB = "sandbox-destroy-for";
|
|
11
|
+
/** 投递 {@link SANDBOX_DESTROY_FOR_JOB}:失败的整批重试(已销毁的再调一次什么也不做)。 */
|
|
12
|
+
export async function scheduleSandboxDestroy(maintenance, conversationIds) {
|
|
13
|
+
await maintenance.add(SANDBOX_DESTROY_FOR_JOB, { conversationIds }, {
|
|
14
|
+
attempts: 5,
|
|
15
|
+
backoff: { type: "exponential", delay: 30_000 },
|
|
16
|
+
removeOnComplete: true,
|
|
17
|
+
removeOnFail: 100,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 在维护队列(`cap-kernel-maintenance`)登记沙箱的两个周期任务(worker 角色执行):
|
|
22
|
+
* 每分钟休眠空闲 / 连续运行超时的沙箱,每小时销毁不活跃、组织已删除或对话已删除的沙箱。
|
|
23
|
+
* 没有沙箱提供方时两个任务什么也不做。另登记一次性任务 {@link SANDBOX_DESTROY_FOR_JOB}(成员离职)。
|
|
24
|
+
*/
|
|
25
|
+
export function registerSandboxMaintenance(maintenance, sandbox, log) {
|
|
26
|
+
maintenance.handle(SANDBOX_DESTROY_FOR_JOB, async (job) => {
|
|
27
|
+
const ids = job.data.conversationIds;
|
|
28
|
+
if (!Array.isArray(ids))
|
|
29
|
+
return;
|
|
30
|
+
let failed = 0;
|
|
31
|
+
for (const id of ids) {
|
|
32
|
+
if (typeof id !== "string")
|
|
33
|
+
continue;
|
|
34
|
+
try {
|
|
35
|
+
await sandbox.destroyFor(id);
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
failed++;
|
|
39
|
+
log.warn("cannot destroy sandbox of an offboarded member; will retry", {
|
|
40
|
+
conversationId: id,
|
|
41
|
+
err,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (failed > 0)
|
|
46
|
+
throw new Error(`${failed} of ${ids.length} sandboxes could not be destroyed`);
|
|
47
|
+
});
|
|
48
|
+
maintenance.handle(SANDBOX_SUSPEND_JOB, async () => {
|
|
49
|
+
const n = await sandbox.suspendIdle(new Date());
|
|
50
|
+
if (n > 0)
|
|
51
|
+
log.info("idle sandboxes suspended", { count: n });
|
|
52
|
+
});
|
|
53
|
+
maintenance.schedule({
|
|
54
|
+
id: SANDBOX_SUSPEND_SCHEDULER_ID,
|
|
55
|
+
name: SANDBOX_SUSPEND_JOB,
|
|
56
|
+
everyMs: () => SANDBOX_SUSPEND_EVERY_MS,
|
|
57
|
+
});
|
|
58
|
+
maintenance.handle(SANDBOX_DESTROY_JOB, async () => {
|
|
59
|
+
const n = await sandbox.destroyInactive(new Date());
|
|
60
|
+
if (n > 0)
|
|
61
|
+
log.info("inactive sandboxes destroyed", { count: n });
|
|
62
|
+
});
|
|
63
|
+
maintenance.schedule({
|
|
64
|
+
id: SANDBOX_DESTROY_SCHEDULER_ID,
|
|
65
|
+
name: SANDBOX_DESTROY_JOB,
|
|
66
|
+
everyMs: () => SANDBOX_DESTROY_EVERY_MS,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { type Logger, type SandboxHandle, type SandboxProvider } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import type { Redis } from "ioredis";
|
|
3
|
+
import { type Selectable } from "kysely";
|
|
4
|
+
import { type KernelConfig } from "../config/schema.js";
|
|
5
|
+
import type { KernelDb, SandboxesTable } from "../db/kernel-schema.js";
|
|
6
|
+
import { ApiError } from "../errors.js";
|
|
7
|
+
import { SandboxLeases, type SandboxPathLease } from "./leases.js";
|
|
8
|
+
export { SANDBOX_BUSY_PREFIX, SANDBOX_LOCK_PREFIX, SANDBOX_LOCK_TTL_MS, SandboxLockLostError, sandboxBusy, } from "./leases.js";
|
|
9
|
+
/** `withSandbox` 回调的第三个参数。 */
|
|
10
|
+
export interface SandboxUseInfo {
|
|
11
|
+
/** 本次调用新建了沙箱(首次使用或重建)。 */
|
|
12
|
+
fresh: boolean;
|
|
13
|
+
/** 之前有过实例、但已不在(被销毁、提供方返回 gone、换了提供方),这是重建的空沙箱。 */
|
|
14
|
+
recreated: boolean;
|
|
15
|
+
}
|
|
16
|
+
/** 当前的 `sandbox@1` 提供方:插件名与实现。 */
|
|
17
|
+
export interface SandboxProviderEntry {
|
|
18
|
+
plugin: string;
|
|
19
|
+
impl: SandboxProvider;
|
|
20
|
+
}
|
|
21
|
+
export interface SandboxServiceDeps {
|
|
22
|
+
db: KernelDb;
|
|
23
|
+
redis: Redis;
|
|
24
|
+
/** 每次调用时取(提供方在插件加载后才就绪);没有提供方为 undefined。 */
|
|
25
|
+
provider: () => SandboxProviderEntry | undefined;
|
|
26
|
+
/** 按插件名找仍加载着的提供方(销毁换提供方前的旧实例);省略则视为找不到。 */
|
|
27
|
+
lookup?: (plugin: string) => SandboxProvider | undefined;
|
|
28
|
+
config: () => Pick<KernelConfig, "sandbox">;
|
|
29
|
+
log: Pick<Logger, "info" | "warn">;
|
|
30
|
+
/** Poll interval while waiting for a lease (ms), default 100; tests make it shorter. */
|
|
31
|
+
lockPollMs?: number;
|
|
32
|
+
/** Lease TTL (ms), default {@link SANDBOX_LOCK_TTL_MS}; tests make it shorter to notice a lost lease quickly. */
|
|
33
|
+
lockTtlMs?: number;
|
|
34
|
+
/** Lease implementation, default a {@link SandboxLeases} on `redis` (tests may wrap one). */
|
|
35
|
+
leases?: SandboxLeases;
|
|
36
|
+
}
|
|
37
|
+
type Row = Selectable<SandboxesTable>;
|
|
38
|
+
/**
|
|
39
|
+
* One instance of a conversation's sandbox: its handle and the row's `created_at`, which the
|
|
40
|
+
* fenced write after every `create` sets. The handle alone is not enough: sandbox-docker's handle
|
|
41
|
+
* is the instance name, the same after a rebuild (spec §10.10).
|
|
42
|
+
*/
|
|
43
|
+
interface Instance {
|
|
44
|
+
handle: SandboxHandle;
|
|
45
|
+
createdAt: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The row still records the instance `gone` (same handle and same `created_at`). Handles compare
|
|
49
|
+
* canonically: a jsonb round trip reorders a multi-key handle's keys (final review m9).
|
|
50
|
+
*/
|
|
51
|
+
export declare const isInstance: (row: Pick<Row, "handle" | "created_at">, gone: Instance | null) => boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Concurrent commands a provider gets (spec §10.7): `max` when it declares both `concurrentExec`
|
|
54
|
+
* and `killTagged`, else 1 (one call at a time, the behavior before phase C).
|
|
55
|
+
*/
|
|
56
|
+
export declare function sandboxConcurrency(impl: Pick<SandboxProvider, "concurrentExec" | "killTagged">, max: number): number;
|
|
57
|
+
/**
|
|
58
|
+
* 启动时要提醒运维的沙箱配置问题(英文日志):
|
|
59
|
+
* - `runtime.maxRunSeconds` 小于 `sandbox.limits.maxCommandSeconds`:长命令会被运行时限截断(Ruling M20);
|
|
60
|
+
* - `sandbox.limits.egress` 为 open、但当前提供方插件没打开 `allowOpenEgress`:每次创建沙箱都会被拒。
|
|
61
|
+
* 两个时限都是默认值(900 < 7200,已知的取舍)时只记 info;运维改过其中一个却仍不一致时才 warn。
|
|
62
|
+
* - the provider declares only one of `concurrentExec` and `killTagged`: it is used one call at a
|
|
63
|
+
* time (spec §10.7).
|
|
64
|
+
*/
|
|
65
|
+
export declare function sandboxConfigWarnings(cfg: Pick<KernelConfig, "runtime" | "sandbox" | "extensionConfig">, providerPlugin?: string, impl?: Pick<SandboxProvider, "concurrentExec" | "killTagged">): {
|
|
66
|
+
level: "info" | "warn";
|
|
67
|
+
message: string;
|
|
68
|
+
}[];
|
|
69
|
+
/** 没有沙箱提供方时的错误(503)。 */
|
|
70
|
+
export declare const sandboxUnavailable: () => ApiError;
|
|
71
|
+
/**
|
|
72
|
+
* 内核的沙箱服务(M5 T7):在 `sandbox@1` 提供方之上,每个对话一个沙箱。
|
|
73
|
+
*
|
|
74
|
+
* - **懒创建**:第一次 {@link withSandbox} 才创建;状态在 PG 表 `sandboxes`。
|
|
75
|
+
* - **Leases** (phase C, spec §10, {@link SandboxLeases}): using a sandbox recorded `running` with
|
|
76
|
+
* the current provider takes a **shared** lease, so up to `sandbox.maxConcurrentCommands` holders
|
|
77
|
+
* (commands of parallel sub-agents) run at once ({@link sandboxConcurrency}: 1 for a provider
|
|
78
|
+
* without `concurrentExec` + `killTagged`). Every lifecycle change (create, resume, rebuild,
|
|
79
|
+
* suspend, destroy) takes the **exclusive** lease, alone; a caller that needs one on the use path
|
|
80
|
+
* sets the intent so new shared leases wait for it, and downgrades to a shared lease to run its
|
|
81
|
+
* own command once the sandbox is running. Waiting is capped at `sandbox.lockWaitSeconds`
|
|
82
|
+
* (`sandbox.busy`); two replicas using it for the first time at once still build only one.
|
|
83
|
+
* - **防护**:exclusive holders read `generation` and compare-and-increment it with every write of
|
|
84
|
+
* status / handle ({@link SandboxLockLostError}); every acquisition (shared ones too) bumps it
|
|
85
|
+
* first, so a stale exclusive holder's later writes fail. Shared holders write nothing else but
|
|
86
|
+
* `last_used_at` (monotonic). A lost
|
|
87
|
+
* lease aborts the signal passed to `fn` and to maintenance provider calls.
|
|
88
|
+
* - **休眠与销毁**由维护队列定期调用 {@link suspendIdle} / {@link destroyInactive};它们只试一次 exclusive
|
|
89
|
+
* lease and skip a sandbox with any holder; a sandbox past `maxRunningMinutes` gets the intent for
|
|
90
|
+
* a short window (about a second) so the suspension can get in when its commands end.
|
|
91
|
+
* - **透明恢复**:已休眠的在下次使用时恢复;恢复返回 `gone`、已销毁、记录的提供方不是当前提供方、
|
|
92
|
+
* 或 `fn` 抛 `SandboxGoneError`(重试一次)时重建空沙箱,`recreated` 为 true(工具层告诉模型「之前的文件已不在」)。
|
|
93
|
+
* Several holders hitting `gone` together rebuild once: the others find the new instance.
|
|
94
|
+
* - **Takeover** (spec §10.5): every holder records itself in `capk:sandbox-holders:<conv>` (again
|
|
95
|
+
* before each `exec`) and its commands carry its lease token as `tag`. An acquirer that finds a
|
|
96
|
+
* record without a live lease (a crashed holder) kills its commands: `killTagged` on the shared
|
|
97
|
+
* path whenever the provider has it (else `killAll` only while it is the one shared holder),
|
|
98
|
+
* `killAll` under the exclusive lease (no live sibling can exist). The single marker
|
|
99
|
+
* `capk:sandbox-busy:<conv>` of kernels before phase C sends the next use down the exclusive
|
|
100
|
+
* path, which `killAll`s; holders of this kernel write it as `v2` for older replicas (§10.8),
|
|
101
|
+
* which this kernel ignores. A sandbox just resumed from `suspended` is `killAll`ed too. Failures
|
|
102
|
+
* are only warned (the in-sandbox time limit is the backstop).
|
|
103
|
+
* - **Instance identity**: a holder that hits `gone` names the instance by its handle and the
|
|
104
|
+
* row's `created_at` (set by the fenced write after each `create`); the handle alone is the same
|
|
105
|
+
* after a rebuild on providers whose handle is the instance name (sandbox-docker).
|
|
106
|
+
*
|
|
107
|
+
* 换提供方会泄漏旧实例:新提供方销毁不了旧提供方的实例,只有旧提供方仍加载时才能清理(记在 `prev_*` 列)。
|
|
108
|
+
* 没有提供方时 {@link available} 为 false,使用时抛 `sandbox.unavailable`(503)。本身无进程内状态,可多副本共用。
|
|
109
|
+
*/
|
|
110
|
+
export declare class SandboxService {
|
|
111
|
+
private readonly d;
|
|
112
|
+
private readonly leases;
|
|
113
|
+
private readonly pollMs;
|
|
114
|
+
constructor(d: SandboxServiceDeps);
|
|
115
|
+
/** 是否有沙箱提供方。 */
|
|
116
|
+
get available(): boolean;
|
|
117
|
+
/** Concurrent holders the provider gets ({@link sandboxConcurrency} with the current config). */
|
|
118
|
+
effectiveCap(p: SandboxProviderEntry): number;
|
|
119
|
+
/**
|
|
120
|
+
* 该对话沙箱的对外状态(只读,不拿锁):`running` / `suspended` 与最近使用时间。
|
|
121
|
+
* 还没有、已销毁、或停在 `creating`(正在创建,或创建失败等下次使用重建)的都返回 null(界面显示「未创建」)。
|
|
122
|
+
*/
|
|
123
|
+
status(orgId: string, conversationId: string): Promise<{
|
|
124
|
+
status: "running" | "suspended";
|
|
125
|
+
lastUsedAt: Date;
|
|
126
|
+
} | null>;
|
|
127
|
+
/**
|
|
128
|
+
* A short lease on one path of the conversation's sandbox around the kernel's own
|
|
129
|
+
* read-modify-write of that file (spec §10.4); waits up to 30 s, then throws
|
|
130
|
+
* `SandboxPathBusyError`. Its `signal` aborts when a renewal finds it lost.
|
|
131
|
+
*/
|
|
132
|
+
pathLease(conversationId: string, path: string, signal: AbortSignal): Promise<SandboxPathLease>;
|
|
133
|
+
/**
|
|
134
|
+
* 在该对话(the sandbox conversation)的沙箱上执行 `fn`: take a lease → make sure the sandbox runs
|
|
135
|
+
* (create / resume / rebuild, under the exclusive lease) → `fn` under a shared lease → update
|
|
136
|
+
* `last_used_at` → release.
|
|
137
|
+
* - 等待超过 `sandbox.lockWaitSeconds` 抛 `sandbox.busy`(409);`signal` 中止等待与创建 / 恢复。
|
|
138
|
+
* - `fn` 的第四个参数是 `signal` 与「lease 已丢失」的合并:执行命令时用它,lease 丢失就中止。
|
|
139
|
+
* - The provider passed to `fn` labels every `exec` with this holder's tag.
|
|
140
|
+
* - `fn` 抛 `SandboxGoneError`(实例已不在)时重建(or take the instance another holder rebuilt)、
|
|
141
|
+
* 以 `recreated: true` 再调用一次;再次 gone 则抛出。其余错误原样抛出。
|
|
142
|
+
* - `holderConversationId` (default `conversationId`): the agent conversation using it, a
|
|
143
|
+
* sub-agent's own for a child. When that holder last used another instance (another holder
|
|
144
|
+
* rebuilt it meanwhile), `info.recreated` is true, so it learns its files are gone (final
|
|
145
|
+
* review m5).
|
|
146
|
+
*/
|
|
147
|
+
withSandbox<T>(ctx: {
|
|
148
|
+
orgId: string;
|
|
149
|
+
conversationId: string;
|
|
150
|
+
holderConversationId?: string;
|
|
151
|
+
}, fn: (h: SandboxHandle, p: SandboxProvider, info: SandboxUseInfo, signal: AbortSignal) => Promise<T>, signal: AbortSignal): Promise<T>;
|
|
152
|
+
/**
|
|
153
|
+
* Records that `holder` uses the instance of `e` (`capk:sandbox-seen:<conv>:<holder>`, its
|
|
154
|
+
* `created_at`, with a TTL of the inactivity destruction plus a day) and marks `e` recreated
|
|
155
|
+
* when the holder last used another instance. Best effort: a Redis error only logs.
|
|
156
|
+
*/
|
|
157
|
+
private seenBy;
|
|
158
|
+
/** Runs `fn` as the holder `e`: its tag on every exec, its lease's signal. */
|
|
159
|
+
private runAs;
|
|
160
|
+
/**
|
|
161
|
+
* Becomes a holder: loops until it has a shared lease on a running instance, or `sandbox.busy`.
|
|
162
|
+
* A sandbox recorded `running` (with the current provider, not the `gone` instance, and no legacy
|
|
163
|
+
* busy marker) is used under a shared lease; otherwise the exclusive lease (with intent) makes it
|
|
164
|
+
* run and is downgraded. One token serves both, so the waiter passes its own intent.
|
|
165
|
+
*/
|
|
166
|
+
private enter;
|
|
167
|
+
private clearIntent;
|
|
168
|
+
private readRow;
|
|
169
|
+
/** Recorded running with the current provider, and not the instance found gone. */
|
|
170
|
+
private usable;
|
|
171
|
+
/**
|
|
172
|
+
* Under a just-taken shared lease: confirms the row is still usable (else releases and returns
|
|
173
|
+
* null), records the holder and kills crashed holders' commands.
|
|
174
|
+
*/
|
|
175
|
+
private asShared;
|
|
176
|
+
/**
|
|
177
|
+
* Under a just-taken exclusive lease: makes the sandbox run (create / resume / rebuild when the
|
|
178
|
+
* recorded instance is the one found gone), kills leftovers, then downgrades to a shared lease.
|
|
179
|
+
*/
|
|
180
|
+
private asExclusive;
|
|
181
|
+
/** Ends a holder: unregisters it before releasing its lease, then moves `last_used_at` forward. */
|
|
182
|
+
private leave;
|
|
183
|
+
private register;
|
|
184
|
+
private unregister;
|
|
185
|
+
/**
|
|
186
|
+
* Crashed holders' tags (claimed), and an older kernel's busy marker when `exclusiveToken` is
|
|
187
|
+
* the caller's exclusive lease; a Redis error counts as none.
|
|
188
|
+
*/
|
|
189
|
+
private claim;
|
|
190
|
+
/** Runs one kill call: gone and abort are thrown, other failures only warned. */
|
|
191
|
+
private kill;
|
|
192
|
+
/**
|
|
193
|
+
* 休眠:空闲超过 `suspendAfterIdleMinutes`、或连续运行超过 `maxRunningMinutes` 的运行中沙箱。
|
|
194
|
+
* Skips a sandbox with any holder; one past `maxRunningMinutes` gets the intent for one poll
|
|
195
|
+
* window (about a second) first. 返回本次休眠的个数。由维护队列每分钟调用。
|
|
196
|
+
*/
|
|
197
|
+
suspendIdle(now: Date): Promise<number>;
|
|
198
|
+
/**
|
|
199
|
+
* 销毁:超过 `destroyAfterInactiveDays` 没用过的、所属组织已删除的、对话已不存在的沙箱
|
|
200
|
+
* (对话已不存在的,销毁后删掉记录)。有 holder 的跳过。返回本次销毁的个数。由维护队列每小时调用。
|
|
201
|
+
*/
|
|
202
|
+
destroyInactive(now: Date): Promise<number>;
|
|
203
|
+
/**
|
|
204
|
+
* 立即销毁该对话的沙箱(对话删除、离职处理时调用);没有沙箱或已销毁时什么也不做。
|
|
205
|
+
* Waits for the exclusive lease (with intent, so running commands finish and new ones wait) up
|
|
206
|
+
* to 10 minutes. 没有提供方时只记 warn。
|
|
207
|
+
*/
|
|
208
|
+
destroyFor(conversationId: string): Promise<void>;
|
|
209
|
+
/**
|
|
210
|
+
* 接手前任:杀掉沙箱里遗留的全部命令(killAll)。实例已不在(SandboxGoneError)与中止照常抛出(交给 withSandbox 重建 /
|
|
211
|
+
* 结束);其余失败只记 warn。提供方没有 `killAll` 时只记 info。
|
|
212
|
+
*/
|
|
213
|
+
private killLeftovers;
|
|
214
|
+
private require;
|
|
215
|
+
/**
|
|
216
|
+
* 防护写入:lease 仍在、且记录的 generation 仍是锁内读到的值时才写(并加一);否则抛 {@link SandboxLockLostError}。
|
|
217
|
+
*/
|
|
218
|
+
private fenced;
|
|
219
|
+
/** 扫描的候选:上次扫描失败的排在后面,其余按最久未用在前。 */
|
|
220
|
+
private candidates;
|
|
221
|
+
/**
|
|
222
|
+
* One try at the exclusive lease: null → false; else runs `fn`. With `overdue` (past
|
|
223
|
+
* `maxRunningMinutes`) a busy sandbox gets the intent for about a second, so new commands wait
|
|
224
|
+
* briefly and the sweep gets in if the running ones end. Failures are warned, recorded in
|
|
225
|
+
* `sweep_failed_at` (sorted last next time) and return false.
|
|
226
|
+
*/
|
|
227
|
+
private tryLocked;
|
|
228
|
+
/**
|
|
229
|
+
* Under the exclusive lease: make the conversation's sandbox run. `gone`: the instance a holder
|
|
230
|
+
* found gone; when it is still the recorded one it is rebuilt, when another holder already
|
|
231
|
+
* rebuilt it the new one is used.
|
|
232
|
+
*/
|
|
233
|
+
private ensure;
|
|
234
|
+
/**
|
|
235
|
+
* 在锁内创建:先防护地重置为 creating,再调提供方,最后防护地写入句柄。
|
|
236
|
+
* 写句柄时发现锁已丢失:尽力销毁刚建好的实例,再抛 {@link SandboxLockLostError}。
|
|
237
|
+
*/
|
|
238
|
+
private create;
|
|
239
|
+
/**
|
|
240
|
+
* 用旧提供方销毁别的提供方创建的实例:旧提供方仍加载且销毁成功 → false;否则 warn 并返回 true(需要留着记录)。
|
|
241
|
+
*/
|
|
242
|
+
private retire;
|
|
243
|
+
/** 在锁内:销毁实例(与遗留的旧提供方实例);对话已不存在的删掉记录,否则标记 destroyed。 */
|
|
244
|
+
private destroyRow;
|
|
245
|
+
/** 该休眠的:本提供方创建、运行中,且空闲到期或连续运行超时。 */
|
|
246
|
+
private suspendDue;
|
|
247
|
+
/** 该销毁的:未销毁,且不活跃到期、组织已删除或对话已不存在。 */
|
|
248
|
+
private destroyDue;
|
|
249
|
+
}
|