@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,23 +1,42 @@
|
|
|
1
1
|
import { isSandboxGoneError, ToolError, validateSandboxPath, } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { ANONYMOUS_NO_ENVIRONMENT, } from "../../../environments/conversation-environments.js";
|
|
2
3
|
import { ApiError } from "../../../errors.js";
|
|
3
4
|
import { SandboxPathBusyError } from "../../../sandbox/leases.js";
|
|
4
|
-
import { SandboxLockLostError } from "../../../sandbox/sandbox.service.js";
|
|
5
|
+
import { SandboxLockLostError, } from "../../../sandbox/sandbox.service.js";
|
|
5
6
|
// ---- 模型可见文案(英文) ----
|
|
6
7
|
/** 没有沙箱提供方时「工具不可用」的原因(进提醒与调用结果)。 */
|
|
7
|
-
/**
|
|
8
|
-
export const SANDBOX_STARTED_NOTICE = "
|
|
9
|
-
/**
|
|
10
|
-
export const
|
|
11
|
-
const BUSY_TEXT = "The
|
|
8
|
+
/** This conversation's first use of its environment. */
|
|
9
|
+
export const SANDBOX_STARTED_NOTICE = "Environment started (first use in this conversation); the working directory is /workspace, shared with the environment's other conversations.";
|
|
10
|
+
/** A new instance came up on the environment's kept files. */
|
|
11
|
+
export const SANDBOX_RESTARTED_NOTICE = "The environment's instance was restarted; files are kept, running processes and /tmp are gone.";
|
|
12
|
+
const BUSY_TEXT = "The environment is busy: all its command slots are taken by commands of this or another conversation sharing it; wait for one to finish and retry.";
|
|
12
13
|
const NO_SANDBOX_TEXT = "No sandbox is configured in this deployment; ask an administrator to install a sandbox plugin, or do the task without the sandbox.";
|
|
13
14
|
/** 没有沙箱提供方时「工具不可用」的原因(进提醒,内核在后面补句号):与调用时的错误同一句话。 */
|
|
14
15
|
export const SANDBOX_UNAVAILABLE_REASON = NO_SANDBOX_TEXT.slice(0, -1);
|
|
15
|
-
|
|
16
|
+
/** The error of a sandbox call in a deployment without a sandbox provider. */
|
|
17
|
+
export function noSandboxError() {
|
|
18
|
+
return new ToolError(NO_SANDBOX_TEXT);
|
|
19
|
+
}
|
|
20
|
+
const PATH_BUSY_TEXT = "Another sub-agent or another conversation in this environment is writing this file; wait a moment and retry.";
|
|
21
|
+
const ANONYMOUS_TEXT = "The sandbox is not available to anonymous IM senders; do the task without the sandbox, or ask the person to link their account and start a new conversation.";
|
|
22
|
+
const ENV_NOT_FOUND_TEXT = "This conversation's environment was deleted or its owner can no longer use it; ask the user to start a new conversation in another environment.";
|
|
23
|
+
const ENV_FORBIDDEN_TEXT = "This conversation's owner may no longer use its environment; ask the user to start a new conversation in an environment they can use.";
|
|
24
|
+
const ENV_UNAVAILABLE_TEXT = "This conversation's environment is kept by a sandbox provider that is not active in this deployment; ask the user to start a new conversation in another environment, or an administrator to re-enable that provider.";
|
|
25
|
+
const ENV_FILES_LOST_TEXT = "This environment's files are gone. Ask the user to reset its files on the environments page, then retry.";
|
|
16
26
|
const LOCK_LOST_TEXT = "The sandbox operation was interrupted because the sandbox lock was lost; check the sandbox state and retry.";
|
|
17
|
-
/**
|
|
18
|
-
export const
|
|
19
|
-
/**
|
|
20
|
-
|
|
27
|
+
/** The directory of attachments in the environment (each conversation has a subdirectory). */
|
|
28
|
+
export const ATTACHMENTS_ROOT = "/workspace/attachments";
|
|
29
|
+
/**
|
|
30
|
+
* One conversation's attachment directory: the first 12 hex digits of the root conversation's
|
|
31
|
+
* UUID, so conversations sharing an environment do not overwrite each other's files.
|
|
32
|
+
*/
|
|
33
|
+
export const attachmentsDir = (rootConversationId) => `${ATTACHMENTS_ROOT}/${rootConversationId.replaceAll("-", "").slice(0, 12)}`;
|
|
34
|
+
/** The conversation's marker of synced attachments: `{ <attachment id>: <file name> }`. */
|
|
35
|
+
export const syncMarkerPath = (rootConversationId) => `${attachmentsDir(rootConversationId)}/.capybara-sync.json`;
|
|
36
|
+
const SYNC_MARKER_NAME = ".capybara-sync.json";
|
|
37
|
+
const SYNC_MARKER_RE = new RegExp(`^${ATTACHMENTS_ROOT}/[^/]+/${SYNC_MARKER_NAME.replaceAll(".", "\\.")}(?=$|[:-])`);
|
|
38
|
+
/** Whether a path, or a Grep output line starting with one, belongs to a sync marker (hidden from Glob / Grep). */
|
|
39
|
+
export const isSyncMarkerEntry = (pathOrLine) => SYNC_MARKER_RE.test(pathOrLine);
|
|
21
40
|
const MARKER_MAX_BYTES = 1024 * 1024;
|
|
22
41
|
/** 附件文件名的上限(UTF-8 字节,常见文件系统单个文件名上限 255 字节,留出 `-N` 后缀的余量)。 */
|
|
23
42
|
export const ATTACHMENT_NAME_MAX_BYTES = 200;
|
|
@@ -129,11 +148,11 @@ function sanitizeName(raw) {
|
|
|
129
148
|
*/
|
|
130
149
|
export function assignAttachmentNames(items, used) {
|
|
131
150
|
const taken = new Set(used);
|
|
132
|
-
taken.add(
|
|
151
|
+
taken.add(SYNC_MARKER_NAME);
|
|
133
152
|
const out = new Map();
|
|
134
153
|
for (const a of items) {
|
|
135
154
|
let base = sanitizeName(a.name);
|
|
136
|
-
if (validateSandboxPath(`${
|
|
155
|
+
if (validateSandboxPath(`${ATTACHMENTS_ROOT}/${base}`).length > 0) {
|
|
137
156
|
base = `attachment-${a.id.slice(0, 8)}`;
|
|
138
157
|
}
|
|
139
158
|
let name = base;
|
|
@@ -167,35 +186,36 @@ function copyFailureReason(e) {
|
|
|
167
186
|
return "a temporary error occurred; it will be retried on the next sandbox call";
|
|
168
187
|
}
|
|
169
188
|
/**
|
|
170
|
-
* 把本对话已 ready 的附件复制到 `/workspace/attachments/<name
|
|
171
|
-
*
|
|
189
|
+
* 把本对话已 ready 的附件复制到 `/workspace/attachments/<conversation>/<name>`({@link attachmentsDir}),
|
|
190
|
+
* 标记文件记下已复制的(不重复复制)。对象已不在的附件跳过(下次再试)。
|
|
172
191
|
* 每复制一个就更新标记文件:中途超时 / 中止,下次从停下的地方继续。
|
|
173
192
|
* 单个附件失败(存储故障等)只跳过它并给出说明,不让工具调用失败;signal 已中止或实例已不在时照常抛出。
|
|
174
193
|
* 返回本次复制的沙箱路径与失败说明。
|
|
175
194
|
*/
|
|
176
|
-
async function syncAttachments(deps, ctx, s
|
|
195
|
+
async function syncAttachments(deps, ctx, s) {
|
|
177
196
|
const none = { copied: [], failures: [] };
|
|
178
197
|
const conv = sandboxConversationOf(ctx);
|
|
179
198
|
const list = await deps.attachments.listForConversation(ctx.orgId, conv);
|
|
180
199
|
if (list.length === 0)
|
|
181
200
|
return none;
|
|
182
201
|
// nothing to copy (the usual case): no path lease, so calls do not queue on the marker
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
return none;
|
|
187
|
-
}
|
|
202
|
+
const marker = await readSyncMarker(s, conv);
|
|
203
|
+
if (list.every((a) => Object.hasOwn(marker, a.id)))
|
|
204
|
+
return none;
|
|
188
205
|
// the sync marker is read, changed and written: one holder at a time
|
|
189
|
-
return withPathLease(deps,
|
|
206
|
+
return withPathLease(deps, s, syncMarkerPath(conv), s.signal, (signal) => copyAttachments(deps, ctx, { ...s, signal }, conv, list));
|
|
190
207
|
}
|
|
191
208
|
/** The sync marker's entries (`{}` when it is missing, too large or unreadable). */
|
|
192
|
-
async function readSyncMarker(s) {
|
|
193
|
-
const m = await s.p.readFile(s.h,
|
|
209
|
+
async function readSyncMarker(s, conv) {
|
|
210
|
+
const m = await s.p.readFile(s.h, syncMarkerPath(conv), {
|
|
211
|
+
maxBytes: MARKER_MAX_BYTES,
|
|
212
|
+
signal: s.signal,
|
|
213
|
+
});
|
|
194
214
|
return m && !m.truncated ? parseMarker(m.data) : {};
|
|
195
215
|
}
|
|
196
|
-
async function copyAttachments(deps, ctx, s,
|
|
216
|
+
async function copyAttachments(deps, ctx, s, conv, list) {
|
|
197
217
|
const none = { copied: [], failures: [] };
|
|
198
|
-
let marker =
|
|
218
|
+
let marker = await readSyncMarker(s, conv);
|
|
199
219
|
const pending = list.filter((a) => !Object.hasOwn(marker, a.id));
|
|
200
220
|
if (pending.length === 0)
|
|
201
221
|
return none;
|
|
@@ -204,7 +224,7 @@ async function copyAttachments(deps, ctx, s, reset, conv, list) {
|
|
|
204
224
|
const failures = [];
|
|
205
225
|
for (const a of pending) {
|
|
206
226
|
const name = names.get(a.id);
|
|
207
|
-
const path = `${
|
|
227
|
+
const path = `${attachmentsDir(conv)}/${name}`;
|
|
208
228
|
try {
|
|
209
229
|
const opened = await deps.attachments.openForConversation(ctx.orgId, conv, a.id);
|
|
210
230
|
if (!opened)
|
|
@@ -224,7 +244,7 @@ async function copyAttachments(deps, ctx, s, reset, conv, list) {
|
|
|
224
244
|
copied.push(path);
|
|
225
245
|
const next = { ...marker, [a.id]: name };
|
|
226
246
|
try {
|
|
227
|
-
await s.p.writeFile(s.h,
|
|
247
|
+
await s.p.writeFile(s.h, syncMarkerPath(conv), utf8.encode(JSON.stringify(next)), s.signal);
|
|
228
248
|
marker = next;
|
|
229
249
|
}
|
|
230
250
|
catch (e) {
|
|
@@ -235,12 +255,24 @@ async function copyAttachments(deps, ctx, s, reset, conv, list) {
|
|
|
235
255
|
return { copied, failures };
|
|
236
256
|
}
|
|
237
257
|
/** 沙箱服务的错误 → 给模型的可执行说明;其余原样抛出(管线按「工具失败」处理)。 */
|
|
238
|
-
function
|
|
258
|
+
export function mapSandboxError(e) {
|
|
239
259
|
if (e instanceof ApiError) {
|
|
240
260
|
if (e.code === "sandbox.busy")
|
|
241
261
|
return new ToolError(BUSY_TEXT);
|
|
242
|
-
if (e.code === "sandbox.unavailable")
|
|
262
|
+
if (e.code === "sandbox.unavailable") {
|
|
263
|
+
const reason = e.details?.[0]?.reason;
|
|
264
|
+
if (reason === ANONYMOUS_NO_ENVIRONMENT)
|
|
265
|
+
return new ToolError(ANONYMOUS_TEXT);
|
|
243
266
|
return new ToolError(NO_SANDBOX_TEXT);
|
|
267
|
+
}
|
|
268
|
+
if (e.code === "environment.not_found")
|
|
269
|
+
return new ToolError(ENV_NOT_FOUND_TEXT);
|
|
270
|
+
if (e.code === "environment.forbidden")
|
|
271
|
+
return new ToolError(ENV_FORBIDDEN_TEXT);
|
|
272
|
+
if (e.code === "environment.unavailable")
|
|
273
|
+
return new ToolError(ENV_UNAVAILABLE_TEXT);
|
|
274
|
+
if (e.code === "environment.files_lost")
|
|
275
|
+
return new ToolError(ENV_FILES_LOST_TEXT);
|
|
244
276
|
}
|
|
245
277
|
if (e instanceof SandboxLockLostError)
|
|
246
278
|
return new ToolError(LOCK_LOST_TEXT);
|
|
@@ -249,25 +281,31 @@ function mapError(e) {
|
|
|
249
281
|
return e;
|
|
250
282
|
}
|
|
251
283
|
/**
|
|
252
|
-
*
|
|
253
|
-
*
|
|
254
|
-
* `withSandbox`
|
|
284
|
+
* Runs `fn` in the environment of the call's conversation (a sub-agent: its root's): resolves and
|
|
285
|
+
* checks the environment for the conversation's owner (binding an unbound conversation to the
|
|
286
|
+
* owner's default first), then `SandboxService.withSandbox` (the instance created, resumed or
|
|
287
|
+
* rebuilt on the kept files as needed, every `exec` carrying the call's actor). Attachments are
|
|
288
|
+
* synced first. Returns the value and the notices to put before the result (first use, a new
|
|
289
|
+
* instance, newly copied attachments). When `withSandbox` rebuilds a gone instance and calls
|
|
290
|
+
* `fn` again, the notices are the last call's.
|
|
255
291
|
*/
|
|
256
292
|
export async function inSandbox(deps, ctx, fn) {
|
|
257
293
|
try {
|
|
294
|
+
const environmentId = await deps.environments.forTool(ctx.orgId, sandboxConversationOf(ctx));
|
|
258
295
|
return await deps.sandbox.withSandbox({
|
|
259
296
|
orgId: ctx.orgId,
|
|
260
|
-
|
|
261
|
-
// a sub-agent is told when another holder rebuilt the shared
|
|
297
|
+
environmentId,
|
|
298
|
+
// a sub-agent is told when another holder rebuilt the shared instance (final review m5)
|
|
262
299
|
holderConversationId: ctx.conversationId,
|
|
300
|
+
actor: { accountId: ctx.accountId, conversationId: ctx.conversationId },
|
|
263
301
|
}, async (h, p, info, signal) => {
|
|
264
|
-
const s = { h, p, signal
|
|
302
|
+
const s = { environmentId, h, p, signal };
|
|
265
303
|
const notices = [];
|
|
266
|
-
if (info.
|
|
267
|
-
notices.push(
|
|
304
|
+
if (info.restarted)
|
|
305
|
+
notices.push(SANDBOX_RESTARTED_NOTICE);
|
|
268
306
|
else if (info.fresh)
|
|
269
307
|
notices.push(SANDBOX_STARTED_NOTICE);
|
|
270
|
-
const { copied, failures } = await syncAttachments(deps, ctx, s
|
|
308
|
+
const { copied, failures } = await syncAttachments(deps, ctx, s);
|
|
271
309
|
if (copied.length > 0) {
|
|
272
310
|
notices.push(`Attachments copied into the sandbox: ${copied.join(", ")}.`);
|
|
273
311
|
}
|
|
@@ -276,21 +314,22 @@ export async function inSandbox(deps, ctx, fn) {
|
|
|
276
314
|
}, ctx.signal);
|
|
277
315
|
}
|
|
278
316
|
catch (e) {
|
|
279
|
-
throw
|
|
317
|
+
throw mapSandboxError(e);
|
|
280
318
|
}
|
|
281
319
|
}
|
|
282
|
-
/** The conversation whose
|
|
320
|
+
/** The conversation whose environment a call uses (the root conversation's for a sub-agent). */
|
|
283
321
|
export const sandboxConversationOf = (ctx) => ctx.sandboxConversationId ?? ctx.conversationId;
|
|
284
322
|
/**
|
|
285
|
-
* Runs `fn` under the per-path lease of `path` in the
|
|
286
|
-
* read-modify-write of one file never loses another holder's update
|
|
287
|
-
*
|
|
288
|
-
*
|
|
323
|
+
* Runs `fn` under the per-path lease of `path` in the session's environment (spec §10.4: the
|
|
324
|
+
* kernel's own read-modify-write of one file never loses another holder's update, from any
|
|
325
|
+
* conversation sharing the environment). `fn` gets `signal` combined with the path lease's: pass
|
|
326
|
+
* it to every provider call, so a lost path lease stops the write. Without `pathLease` (test
|
|
327
|
+
* stubs) it just runs `fn` with `signal`.
|
|
289
328
|
*/
|
|
290
|
-
export async function withPathLease(deps,
|
|
329
|
+
export async function withPathLease(deps, s, path, signal, fn) {
|
|
291
330
|
if (!deps.sandbox.pathLease)
|
|
292
331
|
return fn(signal);
|
|
293
|
-
const lease = await deps.sandbox.pathLease(
|
|
332
|
+
const lease = await deps.sandbox.pathLease(s.environmentId, path, signal);
|
|
294
333
|
try {
|
|
295
334
|
return await fn(AbortSignal.any([signal, lease.signal]));
|
|
296
335
|
}
|
|
@@ -299,7 +338,7 @@ export async function withPathLease(deps, ctx, path, signal, fn) {
|
|
|
299
338
|
}
|
|
300
339
|
}
|
|
301
340
|
/** 本部署是否有沙箱:没有时返回「不可用」原因(注册表据此把沙箱工具报为不可用)。 */
|
|
302
|
-
export const unavailableWhenNoSandbox = (deps) => () => deps.sandbox.available ? null : SANDBOX_UNAVAILABLE_REASON;
|
|
341
|
+
export const unavailableWhenNoSandbox = (deps) => (_ctx) => deps.sandbox.available ? null : SANDBOX_UNAVAILABLE_REASON;
|
|
303
342
|
/** 读出的字节是否像二进制(开头 8 KB 里有 NUL)。 */
|
|
304
343
|
export function looksBinary(data) {
|
|
305
344
|
return data.subarray(0, 8192).includes(0);
|
|
@@ -96,7 +96,7 @@ export function sandboxDeliverTool(deps) {
|
|
|
96
96
|
spec: SPEC,
|
|
97
97
|
defaultPolicy: "allow",
|
|
98
98
|
// 没有沙箱或没有对象存储都交付不了(先报沙箱的原因)
|
|
99
|
-
unavailable: () => unavailableWhenNoSandbox(deps)() ?? (deps.storage.available ? null : NO_STORAGE_REASON),
|
|
99
|
+
unavailable: (ctx) => unavailableWhenNoSandbox(deps)(ctx) ?? (deps.storage.available ? null : NO_STORAGE_REASON),
|
|
100
100
|
timeoutMs: () => 2 * sandboxBaseTimeoutMs(deps.config.get()),
|
|
101
101
|
async run(input, ctx) {
|
|
102
102
|
// 存储在调用前就核对:不为一个交付不了的文件去 stat / 读沙箱
|
|
@@ -56,9 +56,9 @@ export function sandboxEditTool(deps) {
|
|
|
56
56
|
const path = checkWritable(input.file_path);
|
|
57
57
|
if (old_string === new_string)
|
|
58
58
|
throw new ToolError(SAME_TEXT);
|
|
59
|
-
const { value: edit, notices } = await inSandbox(deps, ctx, ({ h, p, signal }) =>
|
|
59
|
+
const { value: edit, notices } = await inSandbox(deps, ctx, ({ environmentId, h, p, signal }) =>
|
|
60
60
|
// read, replace, write: one holder at a time per file
|
|
61
|
-
withPathLease(deps,
|
|
61
|
+
withPathLease(deps, { environmentId }, path, signal, async (signal) => {
|
|
62
62
|
const st = await p.stat(h, path, signal);
|
|
63
63
|
if (st === null)
|
|
64
64
|
throw new ToolError(notFound(path));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ToolError } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import { checkPath, clip, display, inSandbox,
|
|
2
|
+
import { checkPath, clip, display, inSandbox, isSyncMarkerEntry, sandboxBaseTimeoutMs, searchTimeoutMs, unavailableWhenNoSandbox, withNotices, } from "./common.js";
|
|
3
3
|
import { compileGlob, GlobPatternError } from "./glob-match.js";
|
|
4
4
|
/** 最多列出的文件数。 */
|
|
5
5
|
const MAX_RESULTS = 1000;
|
|
@@ -82,7 +82,7 @@ export function sandboxGlobTool(deps) {
|
|
|
82
82
|
.map((l) => l.slice(2))
|
|
83
83
|
.filter((rel) => matches(rel))
|
|
84
84
|
.map((rel) => `${base}/${rel}`)
|
|
85
|
-
.filter((abs) => abs
|
|
85
|
+
.filter((abs) => !isSyncMarkerEntry(abs))
|
|
86
86
|
.sort()
|
|
87
87
|
// 文件名里的换行显示为 `\n`(与 Grep 一致),一行一个文件
|
|
88
88
|
.map((abs) => abs.replace(/\n/g, "\\n")));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ToolError } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import { checkPath, clip, display, inSandbox,
|
|
2
|
+
import { checkPath, clip, display, inSandbox, isSyncMarkerEntry, sandboxBaseTimeoutMs, searchTimeoutMs, shellQuote, unavailableWhenNoSandbox, withNotices, } from "./common.js";
|
|
3
3
|
/** The most output entries (lines, files or counts) returned in one call, whatever `head_limit` says. */
|
|
4
4
|
const MAX_MATCHES = 500;
|
|
5
5
|
/** `head_limit` when the model gives none. */
|
|
@@ -207,9 +207,7 @@ export function sandboxGrepTool(deps) {
|
|
|
207
207
|
: mode === "count"
|
|
208
208
|
? parseCounts(r.stdout, base)
|
|
209
209
|
: parseGrepNull(r.stdout, base, numbered);
|
|
210
|
-
const entries = all.filter((l) => l
|
|
211
|
-
!l.startsWith(`${SYNC_MARKER}:`) &&
|
|
212
|
-
!l.startsWith(`${SYNC_MARKER}-`));
|
|
210
|
+
const entries = all.filter((l) => !isSyncMarkerEntry(l));
|
|
213
211
|
// 退出码 2 = 有错误(如个别文件不可读);有输出时照常返回(可能为空:只匹配到隐藏的标记文件)并附上说明
|
|
214
212
|
if (r.exitCode !== 0 && all.length === 0)
|
|
215
213
|
throw new ToolError(failed(r.stderr));
|
|
@@ -2,11 +2,13 @@ import type { BuiltinTool } from "../../registry.js";
|
|
|
2
2
|
import type { SandboxToolDeps } from "./common.js";
|
|
3
3
|
export { SANDBOX_ASK_TOOL_NAMES, SANDBOX_TOOL_NAMES } from "../../builtin-names.js";
|
|
4
4
|
export { BASH_SPILL_CHARS, formatExec } from "./bash.js";
|
|
5
|
-
export { assignAttachmentNames, RUN_DEADLINE_MARGIN_MS, runTimeLeftMs,
|
|
5
|
+
export { assignAttachmentNames, RUN_DEADLINE_MARGIN_MS, runTimeLeftMs, SANDBOX_RESTARTED_NOTICE, SANDBOX_SETUP_MARGIN_MS, SANDBOX_STARTED_NOTICE, SANDBOX_UNAVAILABLE_REASON, type SandboxToolDeps, sandboxBaseTimeoutMs, searchTimeoutMs, shellQuote, } from "./common.js";
|
|
6
6
|
export { compileGlob, GlobPatternError, MAX_GLOB_STARS } from "./glob-match.js";
|
|
7
7
|
/**
|
|
8
8
|
* 沙箱内置工具(M5 T8):bash / read / write / edit / glob / grep / deliver,都在本对话的沙箱上执行
|
|
9
9
|
* (`SandboxService.withSandbox`),执行前同步附件到 `/workspace/attachments`。没有沙箱提供方时报不可用。
|
|
10
10
|
* 默认 allow;组织设置 `sandboxToolPolicy` 为 ask 时除 read / glob / grep 外需要审批(见 policy.ts)。
|
|
11
|
+
* `TaskOutput` and `TaskStop` read and stop background `Bash` tasks through
|
|
12
|
+
* `SandboxService.ifRunning` (never creating or resuming a sandbox); always allowed.
|
|
11
13
|
*/
|
|
12
14
|
export declare function sandboxTools(deps: SandboxToolDeps): BuiltinTool[];
|
|
@@ -4,15 +4,19 @@ import { sandboxEditTool } from "./edit.js";
|
|
|
4
4
|
import { sandboxGlobTool } from "./glob.js";
|
|
5
5
|
import { sandboxGrepTool } from "./grep.js";
|
|
6
6
|
import { sandboxReadTool } from "./read.js";
|
|
7
|
+
import { taskOutputTool } from "./task-output.js";
|
|
8
|
+
import { taskStopTool } from "./task-stop.js";
|
|
7
9
|
import { sandboxWriteTool } from "./write.js";
|
|
8
10
|
export { SANDBOX_ASK_TOOL_NAMES, SANDBOX_TOOL_NAMES } from "../../builtin-names.js";
|
|
9
11
|
export { BASH_SPILL_CHARS, formatExec } from "./bash.js";
|
|
10
|
-
export { assignAttachmentNames, RUN_DEADLINE_MARGIN_MS, runTimeLeftMs,
|
|
12
|
+
export { assignAttachmentNames, RUN_DEADLINE_MARGIN_MS, runTimeLeftMs, SANDBOX_RESTARTED_NOTICE, SANDBOX_SETUP_MARGIN_MS, SANDBOX_STARTED_NOTICE, SANDBOX_UNAVAILABLE_REASON, sandboxBaseTimeoutMs, searchTimeoutMs, shellQuote, } from "./common.js";
|
|
11
13
|
export { compileGlob, GlobPatternError, MAX_GLOB_STARS } from "./glob-match.js";
|
|
12
14
|
/**
|
|
13
15
|
* 沙箱内置工具(M5 T8):bash / read / write / edit / glob / grep / deliver,都在本对话的沙箱上执行
|
|
14
16
|
* (`SandboxService.withSandbox`),执行前同步附件到 `/workspace/attachments`。没有沙箱提供方时报不可用。
|
|
15
17
|
* 默认 allow;组织设置 `sandboxToolPolicy` 为 ask 时除 read / glob / grep 外需要审批(见 policy.ts)。
|
|
18
|
+
* `TaskOutput` and `TaskStop` read and stop background `Bash` tasks through
|
|
19
|
+
* `SandboxService.ifRunning` (never creating or resuming a sandbox); always allowed.
|
|
16
20
|
*/
|
|
17
21
|
export function sandboxTools(deps) {
|
|
18
22
|
return [
|
|
@@ -23,5 +27,7 @@ export function sandboxTools(deps) {
|
|
|
23
27
|
sandboxGlobTool(deps),
|
|
24
28
|
sandboxGrepTool(deps),
|
|
25
29
|
sandboxDeliverTool(deps),
|
|
30
|
+
taskOutputTool(deps),
|
|
31
|
+
taskStopTool(deps),
|
|
26
32
|
];
|
|
27
33
|
}
|
|
@@ -13,7 +13,7 @@ const SPEC = {
|
|
|
13
13
|
// Display only (the tool row; not in the fingerprint, never sent to the model).
|
|
14
14
|
keyArgs: ["file_path"],
|
|
15
15
|
description: "Read a text file from this conversation's sandbox, with line numbers. Use it to look at " +
|
|
16
|
-
"source code, data files, logs and files the user attached (under /workspace/attachments). " +
|
|
16
|
+
"source code, data files, logs and files the user attached (under /workspace/attachments/<conversation>/). " +
|
|
17
17
|
"Paths are absolute, under /workspace, /skills or /tmp. Lines are numbered from 1; pass " +
|
|
18
18
|
"offset and limit to read part of a long file. Binary files are not shown; use Bash " +
|
|
19
19
|
"to inspect them. Do not use it to list directories; use Glob instead. Read a file before you " +
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { type SandboxHandle } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import type { BackgroundTaskRow } from "../../../background/store.js";
|
|
3
|
+
import type { HeldProvider, IfRunningResult, SandboxService } from "../../../sandbox/sandbox.service.js";
|
|
4
|
+
import type { BuiltinCallContext, BuiltinTool } from "../../registry.js";
|
|
5
|
+
import { type SandboxToolDeps } from "./common.js";
|
|
6
|
+
/** How long `TaskOutput` waits with `block` when `timeout` is not given (ms). */
|
|
7
|
+
export declare const TASK_OUTPUT_DEFAULT_TIMEOUT_MS = 30000;
|
|
8
|
+
/** The longest `TaskOutput` wait (ms). */
|
|
9
|
+
export declare const TASK_OUTPUT_MAX_TIMEOUT_MS = 600000;
|
|
10
|
+
/** How often a blocking `TaskOutput` checks the task (each check a short exec of its own). */
|
|
11
|
+
export declare const TASK_CHECK_INTERVAL_MS = 2000;
|
|
12
|
+
/** What `TaskOutput` and `TaskStop` work with. */
|
|
13
|
+
export interface TaskEnv {
|
|
14
|
+
store: NonNullable<SandboxToolDeps["background"]>;
|
|
15
|
+
tasks: NonNullable<SandboxToolDeps["tasks"]>;
|
|
16
|
+
ifRunning: SandboxService["ifRunning"];
|
|
17
|
+
environments: SandboxToolDeps["environments"];
|
|
18
|
+
}
|
|
19
|
+
/** The task tools' dependencies; throws the tool's error when they are missing. */
|
|
20
|
+
export declare function taskEnv(deps: SandboxToolDeps): TaskEnv;
|
|
21
|
+
/**
|
|
22
|
+
* The task `id` when it belongs to the calling conversation; a task of another conversation (a
|
|
23
|
+
* sub-agent's, when called from its parent) is not found, the same as an unknown id.
|
|
24
|
+
*/
|
|
25
|
+
export declare function ownedTask(env: TaskEnv, ctx: BuiltinCallContext, id: string): Promise<BackgroundTaskRow>;
|
|
26
|
+
/**
|
|
27
|
+
* The per-call access re-check of every sandbox tool (`inSandbox`): the conversation's environment
|
|
28
|
+
* may still be used by its owner. The task tools read a task's own instance without `inSandbox`,
|
|
29
|
+
* so they check here first; errors become the tools' errors.
|
|
30
|
+
*/
|
|
31
|
+
export declare function recheckEnvironment(env: TaskEnv, ctx: BuiltinCallContext): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* `ifRunning` on the task's own environment instance (its execs act for the task's trigger in its
|
|
34
|
+
* conversation); sandbox errors become the tools' errors. A task from before environments has no
|
|
35
|
+
* instance (`not_running`).
|
|
36
|
+
*/
|
|
37
|
+
export declare function onTaskInstance<T>(env: TaskEnv, task: BackgroundTaskRow, fn: (p: HeldProvider, h: SandboxHandle, signal: AbortSignal) => Promise<T>, signal: AbortSignal): Promise<IfRunningResult<T>>;
|
|
38
|
+
/**
|
|
39
|
+
* The task's status line: `Status: running (2m05s)`, `Status: failed, exit code 3, after 4m12s`,
|
|
40
|
+
* `Status: stopped after 1m00s`, `Status: lost (the sandbox was suspended) after 3s`.
|
|
41
|
+
*/
|
|
42
|
+
export declare function statusLine(task: BackgroundTaskRow, now?: Date): string;
|
|
43
|
+
/** The absolute path of the task's output file, as the model sees it. */
|
|
44
|
+
export declare const outputFile: (task: BackgroundTaskRow) => string;
|
|
45
|
+
/** Why the output cannot be read: the task's sandbox instance is not running. */
|
|
46
|
+
export declare function unavailableText(task: BackgroundTaskRow, r: IfRunningResult<unknown>): string;
|
|
47
|
+
/**
|
|
48
|
+
* The exec that checks and reads task `t` (relative to `/workspace`): for a running task first
|
|
49
|
+
* its status line (the poller's, {@link pollScript}: liveness, then the exit file), then
|
|
50
|
+
* `size <bytes>` and `out <base64>`, at most `cap` bytes of the output from byte `offset` on.
|
|
51
|
+
* The file is never read whole: `tail -c +<offset+1> | head -c <cap>`. Without `read` only the
|
|
52
|
+
* status line.
|
|
53
|
+
*/
|
|
54
|
+
export declare function taskReadScript(t: {
|
|
55
|
+
id: string;
|
|
56
|
+
sid: string | null;
|
|
57
|
+
running: boolean;
|
|
58
|
+
}, offset: number, cap: number, read?: boolean): string;
|
|
59
|
+
/**
|
|
60
|
+
* The bytes of `buf` up to its last whole UTF-8 character: a character cut by the read's cap is
|
|
61
|
+
* left for the next read.
|
|
62
|
+
*/
|
|
63
|
+
export declare function wholeUtf8Length(buf: Uint8Array): number;
|
|
64
|
+
/**
|
|
65
|
+
* Built-in `TaskOutput` (spec 2026-11-05-background-bash-design §2.2): a task's status and the
|
|
66
|
+
* output since this conversation's last read of it. Every check is a short exec through
|
|
67
|
+
* `SandboxService.ifRunning` on the task's own sandbox instance: it never creates or resumes a
|
|
68
|
+
* sandbox, so a suspended or rebuilt one means the task is lost (its output unavailable). With
|
|
69
|
+
* `block`, checks every {@link TASK_CHECK_INTERVAL_MS}, each under a lease of its own, until the
|
|
70
|
+
* task ends or the wait (at most `timeout` and the run's time left) is over; the checks only
|
|
71
|
+
* detect the end, and the one read that makes the result finishes the task (reported). The output
|
|
72
|
+
* read is capped at `tools.outputSpillChars` bytes; the pipeline spills the result beyond that.
|
|
73
|
+
*/
|
|
74
|
+
export declare function taskOutputTool(deps: SandboxToolDeps): BuiltinTool;
|