@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
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ToolError } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { backgroundMaxSeconds, LAUNCH_EXEC_TIMEOUT_MS, launchScript, newTaskId, startedText, taskOutputPath, taskSidPath, } from "../../../background/launch.js";
|
|
3
|
+
import { KILL_SESSION_TIMEOUT_MS, killSession, SID_RE } from "../../../background/session.js";
|
|
4
|
+
import { clip, display, inSandbox, mapSandboxError, noSandboxError, runBudgetNote, runTimeLeftMs, sandboxBaseTimeoutMs, sandboxConversationOf, unavailableWhenNoSandbox, withNotices, } from "./common.js";
|
|
2
5
|
/** The command timeout in seconds when `timeout` is not given, at most `sandbox.limits.maxCommandSeconds`. */
|
|
3
6
|
export const BASH_DEFAULT_TIMEOUT_SECONDS = 120;
|
|
4
7
|
/** The longest `description` (the shell row shows it instead of the command). */
|
|
@@ -16,7 +19,8 @@ const SPEC = {
|
|
|
16
19
|
"filesystem. The working directory is /workspace; files persist between calls in the same " +
|
|
17
20
|
"conversation, but background processes may not: when the sandbox is suspended after a period " +
|
|
18
21
|
"without use they can be stopped and /tmp cleared, so keep results in files under /workspace. " +
|
|
19
|
-
"Files the user attached to the conversation are
|
|
22
|
+
"Files the user attached to the conversation are copied to /workspace/attachments/<conversation>/ " +
|
|
23
|
+
"(the result names the paths), " +
|
|
20
24
|
"and skill files under /skills (read-only). Each call runs in a fresh shell (no state such as " +
|
|
21
25
|
"cd or environment variables carries over). The result has stdout, stderr and the exit code; " +
|
|
22
26
|
"long output is saved and can be paged with ReadToolOutput. A command that runs longer than " +
|
|
@@ -24,7 +28,17 @@ const SPEC = {
|
|
|
24
28
|
"Grep for reading, writing and searching files. To give a file to the user, use " +
|
|
25
29
|
"Deliver. Other sub-agents of this conversation may run commands in this sandbox at " +
|
|
26
30
|
"the same time. Always pass description: a few words saying what the command is for; the " +
|
|
27
|
-
"user sees it instead of the command
|
|
31
|
+
"user sees it instead of the command.\n\n" +
|
|
32
|
+
"You can use the run_in_background parameter to run the command in the background, which " +
|
|
33
|
+
"allows you to continue working while the command runs, e.g. a dev server, a long build or a " +
|
|
34
|
+
"test suite. The call returns at once with a task id and the command's output goes to a file " +
|
|
35
|
+
"under /workspace/.capybara/tasks. Read the output with TaskOutput (or Read) and stop the " +
|
|
36
|
+
"task with TaskStop; you will be told when it finishes. You do not need to use '&' at the end " +
|
|
37
|
+
"of the command when using this parameter. In the background, timeout defaults to the " +
|
|
38
|
+
"deployment's background maximum (7200000 by default). A background task ends when its " +
|
|
39
|
+
"command exits, and processes it left running are stopped. A background task is lost if the " +
|
|
40
|
+
"sandbox is suspended (it is suspended after it has been running for a while, " +
|
|
41
|
+
"sandbox.limits.maxRunningMinutes), so keep its results in files under /workspace.",
|
|
28
42
|
inputSchema: {
|
|
29
43
|
type: "object",
|
|
30
44
|
properties: {
|
|
@@ -42,7 +56,11 @@ const SPEC = {
|
|
|
42
56
|
timeout: {
|
|
43
57
|
type: "integer",
|
|
44
58
|
minimum: 1,
|
|
45
|
-
description: `Milliseconds before the command is stopped. Default ${BASH_DEFAULT_TIMEOUT_SECONDS * 1000}; the deployment sets a maximum (7200000 by default); a larger value is lowered to it.`,
|
|
59
|
+
description: `Milliseconds before the command is stopped. Default ${BASH_DEFAULT_TIMEOUT_SECONDS * 1000} (in the background: the background maximum); the deployment sets a maximum (7200000 by default); a larger value is lowered to it.`,
|
|
60
|
+
},
|
|
61
|
+
run_in_background: {
|
|
62
|
+
type: "boolean",
|
|
63
|
+
description: "Set to true to run this command in the background. Use TaskOutput to read the output later.",
|
|
46
64
|
},
|
|
47
65
|
},
|
|
48
66
|
required: ["command", "description"],
|
|
@@ -79,6 +97,218 @@ export function formatExec(r, seconds, budgetClamped = false) {
|
|
|
79
97
|
}
|
|
80
98
|
return parts.join("\n");
|
|
81
99
|
}
|
|
100
|
+
/** The most output the launch exec keeps (it prints only the session id, or an error). */
|
|
101
|
+
const LAUNCH_MAX_OUTPUT_BYTES = 64 * 1024;
|
|
102
|
+
/** Above about this many bytes of base64, a provider may refuse the launch exec's command. */
|
|
103
|
+
const LARGE_COMMAND_BASE64_BYTES = 96 * 1024;
|
|
104
|
+
/** Why a launch exec did not start the command, for the model and the row's reason. */
|
|
105
|
+
function launchFailure(r) {
|
|
106
|
+
if (r.timedOut)
|
|
107
|
+
return `the launch did not finish within ${LAUNCH_EXEC_TIMEOUT_MS / 1000}s`;
|
|
108
|
+
if (r.exitCode === null)
|
|
109
|
+
return "the launch was stopped before it finished";
|
|
110
|
+
const said = clip(r.stderr || (r.exitCode === 0 ? "" : r.stdout), 500).replace(/\.$/, "");
|
|
111
|
+
if (said !== "")
|
|
112
|
+
return said;
|
|
113
|
+
return r.exitCode === 0
|
|
114
|
+
? "the launch printed no session id"
|
|
115
|
+
: `the launch exited with code ${r.exitCode}`;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* `Bash` with `run_in_background` (spec 2026-11-05-background-bash-design §2.1, §4.2):
|
|
119
|
+
* 1. reserves the task's row (`BackgroundTaskStore.reserve`: `running`, no `sid`), refused once
|
|
120
|
+
* the sandbox runs `sandbox.background.maxTasks` tasks; the count and the insert are one step
|
|
121
|
+
* under the sandbox's launch lock;
|
|
122
|
+
* 2. runs one short launch exec under the call's shared lease, and in the same lease records the
|
|
123
|
+
* session id and the instance (`markStarted`); a command that started but could not be
|
|
124
|
+
* recorded is killed there (`pkill -KILL -s <sid>`), so no process runs untracked;
|
|
125
|
+
* 3. any failure finishes the row as `failed` with the reason (`failLaunch`);
|
|
126
|
+
* 4. a stop that claimed the reservation meanwhile (`markStarted` answers `stopping`) has the
|
|
127
|
+
* command killed at once and the row finished `stopped` (`finishStoppedLaunch`).
|
|
128
|
+
* The command runs in a session of its own under its own `timeout` (default and maximum
|
|
129
|
+
* {@link backgroundMaxSeconds}).
|
|
130
|
+
*/
|
|
131
|
+
async function runInBackground(deps, ctx, input) {
|
|
132
|
+
const { background, sandbox } = deps;
|
|
133
|
+
if (!background || !sandbox.currentInstance) {
|
|
134
|
+
throw new ToolError("Background tasks are not available here; call Bash without run_in_background.");
|
|
135
|
+
}
|
|
136
|
+
if (ctx.runId === undefined) {
|
|
137
|
+
throw new ToolError("Background tasks can only be started from an agent run; call Bash without run_in_background.");
|
|
138
|
+
}
|
|
139
|
+
if (!sandbox.available)
|
|
140
|
+
throw noSandboxError();
|
|
141
|
+
const currentInstance = sandbox.currentInstance.bind(sandbox);
|
|
142
|
+
const cfg = deps.config.get();
|
|
143
|
+
const maxMs = backgroundMaxSeconds(cfg) * 1000;
|
|
144
|
+
const requested = input.timeout;
|
|
145
|
+
const seconds = Math.max(1, Math.ceil(Math.min(requested ?? maxMs, maxMs) / 1000));
|
|
146
|
+
const root = sandboxConversationOf(ctx);
|
|
147
|
+
// the environment the task will run in (the root conversation's, bound for good)
|
|
148
|
+
let environmentId;
|
|
149
|
+
try {
|
|
150
|
+
environmentId = await deps.environments.forTool(ctx.orgId, root);
|
|
151
|
+
}
|
|
152
|
+
catch (e) {
|
|
153
|
+
throw mapSandboxError(e);
|
|
154
|
+
}
|
|
155
|
+
const maxTasks = cfg.sandbox.background.maxTasks;
|
|
156
|
+
const id = newTaskId();
|
|
157
|
+
const description = input.description ?? clip(input.command, 120);
|
|
158
|
+
const startedAt = new Date();
|
|
159
|
+
const reserved = await background.reserve({
|
|
160
|
+
id,
|
|
161
|
+
orgId: ctx.orgId,
|
|
162
|
+
conversationId: ctx.conversationId,
|
|
163
|
+
sandboxConversationId: root,
|
|
164
|
+
environmentId,
|
|
165
|
+
runId: ctx.runId,
|
|
166
|
+
callId: ctx.callId,
|
|
167
|
+
// the run's trigger account (the pipeline passes `runs.trigger_account_id` as `accountId`)
|
|
168
|
+
triggerAccountId: ctx.accountId,
|
|
169
|
+
description,
|
|
170
|
+
command: input.command,
|
|
171
|
+
outputPath: taskOutputPath(id),
|
|
172
|
+
startedAt,
|
|
173
|
+
deadlineAt: new Date(startedAt.getTime() + seconds * 1000),
|
|
174
|
+
}, maxTasks);
|
|
175
|
+
if (!reserved) {
|
|
176
|
+
throw new ToolError(`${maxTasks} background tasks are already running; stop one with TaskStop or wait for one to finish, then retry`);
|
|
177
|
+
}
|
|
178
|
+
// the conversation's background panel lists the task live (a sub-agent's task shows in its
|
|
179
|
+
// parent's panel too): announced when it starts and when its launch ends it (failed, stopped),
|
|
180
|
+
// since a client may have listed the reservation as running meanwhile; a failed publish only logs
|
|
181
|
+
const announce = async () => {
|
|
182
|
+
if (!deps.eventLog.publishChanged)
|
|
183
|
+
return;
|
|
184
|
+
for (const c of new Set([ctx.conversationId, root])) {
|
|
185
|
+
await deps.eventLog.publishChanged(c, "background");
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
const large = Math.ceil(Buffer.byteLength(input.command, "utf8") / 3) * 4 > LARGE_COMMAND_BASE64_BYTES
|
|
189
|
+
? " A very large command (over about 96 KB after base64) cannot be started in the background; write it to a script under /workspace and run that instead."
|
|
190
|
+
: "";
|
|
191
|
+
// set once the row has its sid: from then on the task runs and is tracked, whatever follows
|
|
192
|
+
let started = false;
|
|
193
|
+
let launch;
|
|
194
|
+
let notices;
|
|
195
|
+
try {
|
|
196
|
+
({ value: launch, notices } = await inSandbox(deps, ctx, async ({ h, p, signal }) => {
|
|
197
|
+
// right after the launch a process may fork while it is killed: killSession repeats
|
|
198
|
+
const kill = (sid) => killSession(p, h, sid);
|
|
199
|
+
// the session id the launch wrote before printing it: the launch may have ended (aborted,
|
|
200
|
+
// timed out, thrown) after starting the command but before its output came back
|
|
201
|
+
const sidFile = async () => {
|
|
202
|
+
const f = await p
|
|
203
|
+
.readFile(h, `/workspace/${taskSidPath(id)}`, {
|
|
204
|
+
maxBytes: 64,
|
|
205
|
+
signal: AbortSignal.timeout(KILL_SESSION_TIMEOUT_MS),
|
|
206
|
+
})
|
|
207
|
+
.catch(() => null);
|
|
208
|
+
const v = f ? new TextDecoder().decode(f.data).trim() : "";
|
|
209
|
+
return SID_RE.test(v) ? v : null;
|
|
210
|
+
};
|
|
211
|
+
let r;
|
|
212
|
+
try {
|
|
213
|
+
r = await p.exec(h, {
|
|
214
|
+
command: launchScript(id, input.command, seconds),
|
|
215
|
+
cwd: "/workspace",
|
|
216
|
+
timeoutMs: LAUNCH_EXEC_TIMEOUT_MS,
|
|
217
|
+
maxOutputBytes: LAUNCH_MAX_OUTPUT_BYTES,
|
|
218
|
+
signal,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
catch (e) {
|
|
222
|
+
const sid = await sidFile();
|
|
223
|
+
if (sid !== null)
|
|
224
|
+
await kill(sid);
|
|
225
|
+
throw e;
|
|
226
|
+
}
|
|
227
|
+
const out = r.stdout.trim();
|
|
228
|
+
if (r.exitCode !== 0 || !SID_RE.test(out)) {
|
|
229
|
+
const sid = SID_RE.test(out) ? out : await sidFile();
|
|
230
|
+
if (sid !== null)
|
|
231
|
+
await kill(sid);
|
|
232
|
+
return { kind: "not_started", why: launchFailure(r) };
|
|
233
|
+
}
|
|
234
|
+
const sid = out;
|
|
235
|
+
try {
|
|
236
|
+
// under the shared lease: no rebuild can come between the launch and this read
|
|
237
|
+
const instance = await currentInstance(environmentId);
|
|
238
|
+
if (instance === null)
|
|
239
|
+
throw new Error("the sandbox instance could not be read");
|
|
240
|
+
const marked = await background.markStarted(id, {
|
|
241
|
+
sid,
|
|
242
|
+
sandboxCreatedAt: instance.createdAt,
|
|
243
|
+
});
|
|
244
|
+
if (!marked)
|
|
245
|
+
throw new Error("its task record was finished meanwhile");
|
|
246
|
+
started = true;
|
|
247
|
+
if (marked === "stopping") {
|
|
248
|
+
// a stop claimed the reservation before the command started: kill it at once
|
|
249
|
+
if (await kill(sid)) {
|
|
250
|
+
await background.finishStoppedLaunch(id);
|
|
251
|
+
return { kind: "stopped" };
|
|
252
|
+
}
|
|
253
|
+
// not confirmed: the task runs on and is tracked like any other (the poller checks it)
|
|
254
|
+
await background.releaseStop(id);
|
|
255
|
+
}
|
|
256
|
+
return { kind: "started" };
|
|
257
|
+
}
|
|
258
|
+
catch (e) {
|
|
259
|
+
const stopped = await kill(sid);
|
|
260
|
+
const why = e instanceof Error ? e.message : String(e);
|
|
261
|
+
return { kind: "unrecorded", why, stopped };
|
|
262
|
+
}
|
|
263
|
+
}));
|
|
264
|
+
}
|
|
265
|
+
catch (e) {
|
|
266
|
+
if (started) {
|
|
267
|
+
// the task runs and its row has its sid: an error after that (releasing the lease, say)
|
|
268
|
+
// does not undo the launch
|
|
269
|
+
launch = { kind: "started" };
|
|
270
|
+
notices = [];
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
// no sandbox, a busy or lost lease, an abort, a provider error: nothing started (or what
|
|
274
|
+
// did was killed above, when its session id could be read)
|
|
275
|
+
const why = e instanceof Error ? e.message : String(e);
|
|
276
|
+
await background.failLaunch(id, `launch failed: ${why}`).catch(() => undefined);
|
|
277
|
+
await announce();
|
|
278
|
+
if (large === "" || e instanceof ToolError)
|
|
279
|
+
throw e;
|
|
280
|
+
throw new ToolError(`The background task was not started: ${clip(why, 500).replace(/\.$/, "")}. Check the sandbox, or call Bash without run_in_background.${large}`);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
if (launch.kind === "not_started") {
|
|
284
|
+
await background.failLaunch(id, launch.why);
|
|
285
|
+
await announce();
|
|
286
|
+
throw new ToolError(`The background task was not started: ${launch.why}. Check the sandbox, or call Bash without run_in_background.${large}`);
|
|
287
|
+
}
|
|
288
|
+
if (launch.kind === "stopped") {
|
|
289
|
+
await announce();
|
|
290
|
+
throw new ToolError(`Background task ${id} ("${description}") was stopped while it was starting, so nothing runs. Call Bash again if it is still needed.`);
|
|
291
|
+
}
|
|
292
|
+
if (launch.kind === "unrecorded") {
|
|
293
|
+
await background.failLaunch(id, `started but not recorded: ${launch.why}`);
|
|
294
|
+
await announce();
|
|
295
|
+
if (launch.stopped) {
|
|
296
|
+
throw new ToolError(`The background command started but could not be recorded (${launch.why}), so it was stopped. Retry, or call Bash without run_in_background.`);
|
|
297
|
+
}
|
|
298
|
+
throw new ToolError(`The background command started but could not be recorded (${launch.why}); an attempt to stop it failed, so it ends at its timeout. Check the sandbox before you retry, or call Bash without run_in_background.`);
|
|
299
|
+
}
|
|
300
|
+
await announce();
|
|
301
|
+
const lowered = requested !== undefined && requested > maxMs
|
|
302
|
+
? `\n[timeout ${requested} ms is over the background task maximum; it was lowered to ${maxMs} ms.]`
|
|
303
|
+
: "";
|
|
304
|
+
const shown = clip(input.command, 120);
|
|
305
|
+
return {
|
|
306
|
+
content: [{ type: "text", text: withNotices(notices, startedText(id, description) + lowered) }],
|
|
307
|
+
isError: false,
|
|
308
|
+
view: { kind: "command", description, exitCode: null, timedOut: false },
|
|
309
|
+
display: display(`后台运行命令:${shown}`, `Started in the background: ${shown}`),
|
|
310
|
+
};
|
|
311
|
+
}
|
|
82
312
|
/** 内置工具 `Bash`:在本对话的沙箱里执行命令。 */
|
|
83
313
|
export function sandboxBashTool(deps) {
|
|
84
314
|
return {
|
|
@@ -89,10 +319,17 @@ export function sandboxBashTool(deps) {
|
|
|
89
319
|
// 命令自己的超时先到(提供方停掉命令、返回 timedOut),管线的时限再留出等锁与创建 / 恢复的余量
|
|
90
320
|
timeoutMs: (input) => {
|
|
91
321
|
const cfg = deps.config.get();
|
|
322
|
+
// a background call is only the short launch; the task's own timeout runs in the sandbox
|
|
323
|
+
if (input.run_in_background === true) {
|
|
324
|
+
return LAUNCH_EXEC_TIMEOUT_MS + sandboxBaseTimeoutMs(cfg);
|
|
325
|
+
}
|
|
92
326
|
const max = cfg.sandbox.limits.maxCommandSeconds;
|
|
93
327
|
return msFor(input, max) + sandboxBaseTimeoutMs(cfg);
|
|
94
328
|
},
|
|
95
329
|
async run(input, ctx) {
|
|
330
|
+
if (input.run_in_background === true) {
|
|
331
|
+
return runInBackground(deps, ctx, input);
|
|
332
|
+
}
|
|
96
333
|
const { command, description } = input;
|
|
97
334
|
const max = deps.config.get().sandbox.limits.maxCommandSeconds;
|
|
98
335
|
const requested = input.timeout;
|
|
@@ -1,40 +1,73 @@
|
|
|
1
|
-
import { type SandboxHandle,
|
|
1
|
+
import { type SandboxHandle, ToolError } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import type { BackgroundTaskFinisher } from "../../../background/finish.js";
|
|
3
|
+
import type { BackgroundTaskStopper } from "../../../background/stop.js";
|
|
4
|
+
import type { BackgroundTaskStore } from "../../../background/store.js";
|
|
2
5
|
import type { KernelConfig } from "../../../config/schema.js";
|
|
3
6
|
import type { AttachmentsService } from "../../../conversations/attachments.service.js";
|
|
4
7
|
import type { EventLog } from "../../../conversations/event-log.js";
|
|
8
|
+
import { type ConversationEnvironments } from "../../../environments/conversation-environments.js";
|
|
5
9
|
import type { KernelConfigService } from "../../../infra/config/kernel-config.service.js";
|
|
6
|
-
import { type SandboxService } from "../../../sandbox/sandbox.service.js";
|
|
10
|
+
import { type HeldProvider, type SandboxService } from "../../../sandbox/sandbox.service.js";
|
|
7
11
|
import type { StorageService } from "../../../storage/storage.service.js";
|
|
8
12
|
import type { BuiltinCallContext } from "../../registry.js";
|
|
9
13
|
/** 沙箱工具的依赖(都按调用时取,多副本下无进程内状态)。 */
|
|
10
14
|
export interface SandboxToolDeps {
|
|
11
|
-
/**
|
|
12
|
-
|
|
15
|
+
/**
|
|
16
|
+
* `pathLease` may be absent (test stubs): the kernel's own file writes then take no path lease.
|
|
17
|
+
* `currentInstance` too: a background `Bash` launch records the instance it started in; and
|
|
18
|
+
* `ifRunning`, which `TaskOutput` reads a task through.
|
|
19
|
+
*/
|
|
20
|
+
sandbox: Pick<SandboxService, "available" | "withSandbox"> & Partial<Pick<SandboxService, "pathLease" | "currentInstance" | "ifRunning">>;
|
|
21
|
+
/** The environment a call enters: the root conversation's, checked for its owner every call. */
|
|
22
|
+
environments: Pick<ConversationEnvironments, "forTool">;
|
|
23
|
+
/** Background `Bash` tasks; absent in test stubs, where `run_in_background` is refused. */
|
|
24
|
+
background?: Pick<BackgroundTaskStore, "reserve" | "markStarted" | "failLaunch" | "finishStoppedLaunch" | "releaseStop" | "get" | "advanceOffset">;
|
|
25
|
+
/**
|
|
26
|
+
* What `TaskOutput` and `TaskStop` finish and stop tasks with; absent in test stubs, where both
|
|
27
|
+
* answer that background tasks are not available.
|
|
28
|
+
*/
|
|
29
|
+
tasks?: {
|
|
30
|
+
finisher: Pick<BackgroundTaskFinisher, "finish">;
|
|
31
|
+
stopper: Pick<BackgroundTaskStopper, "stop">;
|
|
32
|
+
};
|
|
13
33
|
attachments: Pick<AttachmentsService, "listForConversation" | "openForConversation">;
|
|
14
|
-
storage: Pick<StorageService, "kernel" | "available">;
|
|
34
|
+
storage: Pick<StorageService, "kernel" | "deployment" | "available">;
|
|
15
35
|
/** `publishChanged`: `Deliver` announces `changed: files` (UI refresh B). */
|
|
16
36
|
eventLog: Pick<EventLog, "append" | "latestFileState"> & Partial<Pick<EventLog, "publishChanged">>;
|
|
17
37
|
config: Pick<KernelConfigService, "get">;
|
|
18
38
|
}
|
|
19
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* The sandbox a callback gets: the instance handle, the provider (every `exec` carries the
|
|
41
|
+
* holder's tag and the call's actor) and the call's signal combined with the lease's (pass it to
|
|
42
|
+
* every provider call).
|
|
43
|
+
*/
|
|
20
44
|
export interface SandboxSession {
|
|
45
|
+
/** The environment the call runs in (path leases are taken on it). */
|
|
46
|
+
environmentId: string;
|
|
21
47
|
h: SandboxHandle;
|
|
22
|
-
p:
|
|
48
|
+
p: HeldProvider;
|
|
23
49
|
signal: AbortSignal;
|
|
24
|
-
/** 本次是新建 / 重建的沙箱(之前复制进去的文件都已不在)。 */
|
|
25
|
-
reset: boolean;
|
|
26
50
|
}
|
|
27
51
|
/** 没有沙箱提供方时「工具不可用」的原因(进提醒与调用结果)。 */
|
|
28
|
-
/**
|
|
29
|
-
export declare const SANDBOX_STARTED_NOTICE = "
|
|
30
|
-
/**
|
|
31
|
-
export declare const
|
|
52
|
+
/** This conversation's first use of its environment. */
|
|
53
|
+
export declare const SANDBOX_STARTED_NOTICE = "Environment started (first use in this conversation); the working directory is /workspace, shared with the environment's other conversations.";
|
|
54
|
+
/** A new instance came up on the environment's kept files. */
|
|
55
|
+
export declare const SANDBOX_RESTARTED_NOTICE = "The environment's instance was restarted; files are kept, running processes and /tmp are gone.";
|
|
32
56
|
/** 没有沙箱提供方时「工具不可用」的原因(进提醒,内核在后面补句号):与调用时的错误同一句话。 */
|
|
33
57
|
export declare const SANDBOX_UNAVAILABLE_REASON: string;
|
|
34
|
-
/**
|
|
35
|
-
export declare
|
|
36
|
-
/**
|
|
37
|
-
export declare const
|
|
58
|
+
/** The error of a sandbox call in a deployment without a sandbox provider. */
|
|
59
|
+
export declare function noSandboxError(): ToolError;
|
|
60
|
+
/** The directory of attachments in the environment (each conversation has a subdirectory). */
|
|
61
|
+
export declare const ATTACHMENTS_ROOT = "/workspace/attachments";
|
|
62
|
+
/**
|
|
63
|
+
* One conversation's attachment directory: the first 12 hex digits of the root conversation's
|
|
64
|
+
* UUID, so conversations sharing an environment do not overwrite each other's files.
|
|
65
|
+
*/
|
|
66
|
+
export declare const attachmentsDir: (rootConversationId: string) => string;
|
|
67
|
+
/** The conversation's marker of synced attachments: `{ <attachment id>: <file name> }`. */
|
|
68
|
+
export declare const syncMarkerPath: (rootConversationId: string) => string;
|
|
69
|
+
/** Whether a path, or a Grep output line starting with one, belongs to a sync marker (hidden from Glob / Grep). */
|
|
70
|
+
export declare const isSyncMarkerEntry: (pathOrLine: string) => boolean;
|
|
38
71
|
/** 附件文件名的上限(UTF-8 字节,常见文件系统单个文件名上限 255 字节,留出 `-N` 后缀的余量)。 */
|
|
39
72
|
export declare const ATTACHMENT_NAME_MAX_BYTES = 200;
|
|
40
73
|
/**
|
|
@@ -93,25 +126,34 @@ export declare function assignAttachmentNames(items: readonly {
|
|
|
93
126
|
id: string;
|
|
94
127
|
name: string;
|
|
95
128
|
}[], used: ReadonlySet<string>): Map<string, string>;
|
|
129
|
+
/** 沙箱服务的错误 → 给模型的可执行说明;其余原样抛出(管线按「工具失败」处理)。 */
|
|
130
|
+
export declare function mapSandboxError(e: unknown): unknown;
|
|
96
131
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
* `withSandbox`
|
|
132
|
+
* Runs `fn` in the environment of the call's conversation (a sub-agent: its root's): resolves and
|
|
133
|
+
* checks the environment for the conversation's owner (binding an unbound conversation to the
|
|
134
|
+
* owner's default first), then `SandboxService.withSandbox` (the instance created, resumed or
|
|
135
|
+
* rebuilt on the kept files as needed, every `exec` carrying the call's actor). Attachments are
|
|
136
|
+
* synced first. Returns the value and the notices to put before the result (first use, a new
|
|
137
|
+
* instance, newly copied attachments). When `withSandbox` rebuilds a gone instance and calls
|
|
138
|
+
* `fn` again, the notices are the last call's.
|
|
100
139
|
*/
|
|
101
140
|
export declare function inSandbox<T>(deps: SandboxToolDeps, ctx: BuiltinCallContext, fn: (s: SandboxSession) => Promise<T>): Promise<{
|
|
102
141
|
value: T;
|
|
103
142
|
notices: string[];
|
|
104
143
|
}>;
|
|
105
|
-
/** The conversation whose
|
|
144
|
+
/** The conversation whose environment a call uses (the root conversation's for a sub-agent). */
|
|
106
145
|
export declare const sandboxConversationOf: (ctx: BuiltinCallContext) => string;
|
|
107
146
|
/**
|
|
108
|
-
* Runs `fn` under the per-path lease of `path` in the
|
|
109
|
-
* read-modify-write of one file never loses another holder's update
|
|
110
|
-
*
|
|
111
|
-
*
|
|
147
|
+
* Runs `fn` under the per-path lease of `path` in the session's environment (spec §10.4: the
|
|
148
|
+
* kernel's own read-modify-write of one file never loses another holder's update, from any
|
|
149
|
+
* conversation sharing the environment). `fn` gets `signal` combined with the path lease's: pass
|
|
150
|
+
* it to every provider call, so a lost path lease stops the write. Without `pathLease` (test
|
|
151
|
+
* stubs) it just runs `fn` with `signal`.
|
|
112
152
|
*/
|
|
113
|
-
export declare function withPathLease<T>(deps: Pick<SandboxToolDeps, "sandbox">,
|
|
153
|
+
export declare function withPathLease<T>(deps: Pick<SandboxToolDeps, "sandbox">, s: Pick<SandboxSession, "environmentId">, path: string, signal: AbortSignal, fn: (signal: AbortSignal) => Promise<T>): Promise<T>;
|
|
114
154
|
/** 本部署是否有沙箱:没有时返回「不可用」原因(注册表据此把沙箱工具报为不可用)。 */
|
|
115
|
-
export declare const unavailableWhenNoSandbox: (deps: Pick<SandboxToolDeps, "sandbox">) => (
|
|
155
|
+
export declare const unavailableWhenNoSandbox: (deps: Pick<SandboxToolDeps, "sandbox">) => (_ctx?: {
|
|
156
|
+
orgId: string;
|
|
157
|
+
}) => string | null;
|
|
116
158
|
/** 读出的字节是否像二进制(开头 8 KB 里有 NUL)。 */
|
|
117
159
|
export declare function looksBinary(data: Uint8Array): boolean;
|