@capybara-hq/kernel 0.0.0-stage → 0.1.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +2 -0
- package/README.md +20 -2
- package/bootstrap.json +26 -0
- package/dist/admin/admin.controller.d.ts +139 -0
- package/dist/admin/admin.controller.js +238 -0
- package/dist/admin/extensions.controller.d.ts +100 -0
- package/dist/admin/extensions.controller.js +226 -0
- package/dist/admin/setup.controller.d.ts +36 -0
- package/dist/admin/setup.controller.js +106 -0
- package/dist/admin/setup.service.d.ts +47 -0
- package/dist/admin/setup.service.js +90 -0
- package/dist/agents/agents.controller.d.ts +205 -0
- package/dist/agents/agents.controller.js +144 -0
- package/dist/agents/agents.service.d.ts +177 -0
- package/dist/agents/agents.service.js +677 -0
- package/dist/agents/definition.d.ts +198 -0
- package/dist/agents/definition.js +152 -0
- package/dist/agents/models.controller.d.ts +13 -0
- package/dist/agents/models.controller.js +31 -0
- package/dist/agents/templates.controller.d.ts +15 -0
- package/dist/agents/templates.controller.js +37 -0
- package/dist/agents/templates.d.ts +83 -0
- package/dist/agents/templates.js +173 -0
- package/dist/catalog/admin-catalog.controller.d.ts +143 -0
- package/dist/catalog/admin-catalog.controller.js +245 -0
- package/dist/catalog/catalog.service.d.ts +430 -0
- package/dist/catalog/catalog.service.js +882 -0
- package/dist/catalog/claude/agents.d.ts +27 -0
- package/dist/catalog/claude/agents.js +270 -0
- package/dist/catalog/claude/commands.d.ts +50 -0
- package/dist/catalog/claude/commands.js +179 -0
- package/dist/catalog/claude/manifest.d.ts +69 -0
- package/dist/catalog/claude/manifest.js +134 -0
- package/dist/catalog/claude/marketplace.d.ts +35 -0
- package/dist/catalog/claude/marketplace.js +194 -0
- package/dist/catalog/claude/mcp.d.ts +33 -0
- package/dist/catalog/claude/mcp.js +226 -0
- package/dist/catalog/claude/report.d.ts +86 -0
- package/dist/catalog/claude/report.js +121 -0
- package/dist/catalog/claude/translate.d.ts +56 -0
- package/dist/catalog/claude/translate.js +857 -0
- package/dist/catalog/cli.d.ts +46 -0
- package/dist/catalog/cli.js +211 -0
- package/dist/catalog/git-source.d.ts +127 -0
- package/dist/catalog/git-source.js +520 -0
- package/dist/catalog/marketplace-fetch.d.ts +99 -0
- package/dist/catalog/marketplace-fetch.js +203 -0
- package/dist/catalog/marketplaces.controller.d.ts +97 -0
- package/dist/catalog/marketplaces.controller.js +197 -0
- package/dist/catalog/marketplaces.service.d.ts +340 -0
- package/dist/catalog/marketplaces.service.js +1217 -0
- package/dist/catalog/org-catalog.controller.d.ts +128 -0
- package/dist/catalog/org-catalog.controller.js +277 -0
- package/dist/catalog/org-catalog.service.d.ts +246 -0
- package/dist/catalog/org-catalog.service.js +625 -0
- package/dist/catalog/plugin-import.d.ts +436 -0
- package/dist/catalog/plugin-import.js +1069 -0
- package/dist/catalog/plugin-install.d.ts +447 -0
- package/dist/catalog/plugin-install.js +1333 -0
- package/dist/catalog/plugin-package.d.ts +143 -0
- package/dist/catalog/plugin-package.js +382 -0
- package/dist/catalog/plugin-upgrade.d.ts +222 -0
- package/dist/catalog/plugin-upgrade.js +1219 -0
- package/dist/catalog/requests.service.d.ts +162 -0
- package/dist/catalog/requests.service.js +504 -0
- package/dist/catalog/schema-path.d.ts +7 -0
- package/dist/catalog/schema-path.js +63 -0
- package/dist/catalog/upgrade-targets.d.ts +59 -0
- package/dist/catalog/upgrade-targets.js +90 -0
- package/dist/catalog/versions.d.ts +31 -0
- package/dist/catalog/versions.js +44 -0
- package/dist/channels/actions.d.ts +37 -0
- package/dist/channels/actions.js +121 -0
- package/dist/channels/cards.d.ts +44 -0
- package/dist/channels/cards.js +156 -0
- package/dist/channels/connections.controller.d.ts +59 -0
- package/dist/channels/connections.controller.js +115 -0
- package/dist/channels/connections.service.d.ts +187 -0
- package/dist/channels/connections.service.js +534 -0
- package/dist/channels/features.d.ts +12 -0
- package/dist/channels/features.js +22 -0
- package/dist/channels/inbound.d.ts +120 -0
- package/dist/channels/inbound.js +332 -0
- package/dist/channels/outbound.d.ts +140 -0
- package/dist/channels/outbound.js +1126 -0
- package/dist/channels/phrases.d.ts +100 -0
- package/dist/channels/phrases.js +81 -0
- package/dist/channels/supervisor.d.ts +182 -0
- package/dist/channels/supervisor.js +625 -0
- package/dist/channels/threads.d.ts +29 -0
- package/dist/channels/threads.js +104 -0
- package/dist/channels/webhook-url.d.ts +16 -0
- package/dist/channels/webhook-url.js +34 -0
- package/dist/channels/webhook.controller.d.ts +19 -0
- package/dist/channels/webhook.controller.js +72 -0
- package/dist/channels/webhook.d.ts +73 -0
- package/dist/channels/webhook.js +274 -0
- package/dist/config/docs.d.ts +9 -0
- package/dist/config/docs.js +85 -0
- package/dist/config/env.d.ts +6 -0
- package/dist/config/env.js +73 -0
- package/dist/config/fields.d.ts +42 -0
- package/dist/config/fields.js +214 -0
- package/dist/config/file-source.d.ts +3 -0
- package/dist/config/file-source.js +31 -0
- package/dist/config/load.d.ts +20 -0
- package/dist/config/load.js +98 -0
- package/dist/config/nacos-source.d.ts +31 -0
- package/dist/config/nacos-source.js +229 -0
- package/dist/config/schema.d.ts +237 -0
- package/dist/config/schema.js +1192 -0
- package/dist/config/sources.d.ts +18 -0
- package/dist/config/sources.js +59 -0
- package/dist/config/types.d.ts +9 -0
- package/dist/config/types.js +7 -0
- package/dist/conversations/artifacts.d.ts +52 -0
- package/dist/conversations/artifacts.js +137 -0
- package/dist/conversations/attachments.controller.d.ts +28 -0
- package/dist/conversations/attachments.controller.js +96 -0
- package/dist/conversations/attachments.service.d.ts +180 -0
- package/dist/conversations/attachments.service.js +578 -0
- package/dist/conversations/conversations.controller.d.ts +288 -0
- package/dist/conversations/conversations.controller.js +607 -0
- package/dist/conversations/conversations.service.d.ts +321 -0
- package/dist/conversations/conversations.service.js +754 -0
- package/dist/conversations/event-log.d.ts +122 -0
- package/dist/conversations/event-log.js +259 -0
- package/dist/conversations/events.d.ts +856 -0
- package/dist/conversations/events.js +639 -0
- package/dist/conversations/files.d.ts +92 -0
- package/dist/conversations/files.js +213 -0
- package/dist/conversations/outputs-read.d.ts +34 -0
- package/dist/conversations/outputs-read.js +37 -0
- package/dist/conversations/queue.d.ts +169 -0
- package/dist/conversations/queue.js +527 -0
- package/dist/conversations/sandbox-status.d.ts +21 -0
- package/dist/conversations/sandbox-status.js +24 -0
- package/dist/conversations/selection.d.ts +46 -0
- package/dist/conversations/selection.js +75 -0
- package/dist/conversations/titles.d.ts +93 -0
- package/dist/conversations/titles.js +423 -0
- package/dist/ctx/bus.d.ts +16 -0
- package/dist/ctx/bus.js +101 -0
- package/dist/ctx/create-ctx.d.ts +109 -0
- package/dist/ctx/create-ctx.js +592 -0
- package/dist/ctx/kv.d.ts +4 -0
- package/dist/ctx/kv.js +31 -0
- package/dist/ctx/lock.d.ts +4 -0
- package/dist/ctx/lock.js +39 -0
- package/dist/ctx/namespace.d.ts +6 -0
- package/dist/ctx/namespace.js +12 -0
- package/dist/ctx/queue.d.ts +25 -0
- package/dist/ctx/queue.js +151 -0
- package/dist/ctx/secrets.d.ts +45 -0
- package/dist/ctx/secrets.js +175 -0
- package/dist/db/kernel-schema.d.ts +1122 -0
- package/dist/db/kernel-schema.js +5 -0
- package/dist/db/migrator.d.ts +28 -0
- package/dist/db/migrator.js +140 -0
- package/dist/db/pool.d.ts +21 -0
- package/dist/db/pool.js +28 -0
- package/dist/db/sql-statements.d.ts +34 -0
- package/dist/db/sql-statements.js +168 -0
- package/dist/errors.d.ts +211 -0
- package/dist/errors.js +213 -0
- package/dist/evals/budget.d.ts +61 -0
- package/dist/evals/budget.js +181 -0
- package/dist/evals/diff.d.ts +55 -0
- package/dist/evals/diff.js +133 -0
- package/dist/evals/judge.d.ts +53 -0
- package/dist/evals/judge.js +149 -0
- package/dist/evals/plan.d.ts +47 -0
- package/dist/evals/plan.js +77 -0
- package/dist/evals/reconstruct.d.ts +137 -0
- package/dist/evals/reconstruct.js +322 -0
- package/dist/evals/recorded-tools.d.ts +54 -0
- package/dist/evals/recorded-tools.js +167 -0
- package/dist/evals/run-replay.d.ts +86 -0
- package/dist/evals/run-replay.js +502 -0
- package/dist/evals/runs.controller.d.ts +100 -0
- package/dist/evals/runs.controller.js +199 -0
- package/dist/evals/runs.service.d.ts +275 -0
- package/dist/evals/runs.service.js +836 -0
- package/dist/evals/sets.controller.d.ts +61 -0
- package/dist/evals/sets.controller.js +183 -0
- package/dist/evals/sets.service.d.ts +128 -0
- package/dist/evals/sets.service.js +558 -0
- package/dist/evals/snapshot.d.ts +76 -0
- package/dist/evals/snapshot.js +207 -0
- package/dist/evals/step-replay.d.ts +113 -0
- package/dist/evals/step-replay.js +181 -0
- package/dist/evals/trajectory.controller.d.ts +41 -0
- package/dist/evals/trajectory.controller.js +88 -0
- package/dist/evals/trajectory.d.ts +144 -0
- package/dist/evals/trajectory.js +338 -0
- package/dist/evals/trajectory.service.d.ts +108 -0
- package/dist/evals/trajectory.service.js +323 -0
- package/dist/evals/worker.d.ts +101 -0
- package/dist/evals/worker.js +790 -0
- package/dist/extensions/admin-ops.d.ts +105 -0
- package/dist/extensions/admin-ops.js +353 -0
- package/dist/extensions/admin-view.d.ts +79 -0
- package/dist/extensions/admin-view.js +327 -0
- package/dist/extensions/approvals.d.ts +119 -0
- package/dist/extensions/approvals.js +205 -0
- package/dist/extensions/blobs.d.ts +45 -0
- package/dist/extensions/blobs.js +160 -0
- package/dist/extensions/bootstrap.d.ts +176 -0
- package/dist/extensions/bootstrap.js +535 -0
- package/dist/extensions/cli.d.ts +61 -0
- package/dist/extensions/cli.js +165 -0
- package/dist/extensions/config-json-schema.d.ts +9 -0
- package/dist/extensions/config-json-schema.js +73 -0
- package/dist/extensions/deployment-config.d.ts +138 -0
- package/dist/extensions/deployment-config.js +394 -0
- package/dist/extensions/enabled.d.ts +31 -0
- package/dist/extensions/enabled.js +55 -0
- package/dist/extensions/hooks.d.ts +161 -0
- package/dist/extensions/hooks.js +425 -0
- package/dist/extensions/host.d.ts +577 -0
- package/dist/extensions/host.js +2071 -0
- package/dist/extensions/inflight.d.ts +69 -0
- package/dist/extensions/inflight.js +277 -0
- package/dist/extensions/installs.d.ts +166 -0
- package/dist/extensions/installs.js +253 -0
- package/dist/extensions/instance.d.ts +167 -0
- package/dist/extensions/instance.js +329 -0
- package/dist/extensions/ledger.d.ts +30 -0
- package/dist/extensions/ledger.js +50 -0
- package/dist/extensions/lifecycle.d.ts +80 -0
- package/dist/extensions/lifecycle.js +152 -0
- package/dist/extensions/migrate-lock.d.ts +51 -0
- package/dist/extensions/migrate-lock.js +100 -0
- package/dist/extensions/org-config.controller.d.ts +24 -0
- package/dist/extensions/org-config.controller.js +59 -0
- package/dist/extensions/org-config.d.ts +169 -0
- package/dist/extensions/org-config.js +520 -0
- package/dist/extensions/package.d.ts +115 -0
- package/dist/extensions/package.js +246 -0
- package/dist/extensions/permission-set.d.ts +117 -0
- package/dist/extensions/permission-set.js +184 -0
- package/dist/extensions/permission-view.d.ts +194 -0
- package/dist/extensions/permission-view.js +284 -0
- package/dist/extensions/registry.d.ts +24 -0
- package/dist/extensions/registry.js +56 -0
- package/dist/extensions/resolve.d.ts +12 -0
- package/dist/extensions/resolve.js +71 -0
- package/dist/extensions/sources.d.ts +69 -0
- package/dist/extensions/sources.js +120 -0
- package/dist/extensions/sync.d.ts +40 -0
- package/dist/extensions/sync.js +242 -0
- package/dist/files/previewers.controller.d.ts +46 -0
- package/dist/files/previewers.controller.js +105 -0
- package/dist/files/previewers.d.ts +100 -0
- package/dist/files/previewers.js +250 -0
- package/dist/http/api.module.d.ts +114 -0
- package/dist/http/api.module.js +448 -0
- package/dist/http/app.d.ts +77 -0
- package/dist/http/app.js +220 -0
- package/dist/http/error.filter.d.ts +21 -0
- package/dist/http/error.filter.js +85 -0
- package/dist/http/gateway.module.d.ts +15 -0
- package/dist/http/gateway.module.js +13 -0
- package/dist/http/health.controller.d.ts +26 -0
- package/dist/http/health.controller.js +79 -0
- package/dist/http/nest-logger.d.ts +20 -0
- package/dist/http/nest-logger.js +28 -0
- package/dist/http/plugin-dispatch.d.ts +68 -0
- package/dist/http/plugin-dispatch.js +200 -0
- package/dist/http/tokens.d.ts +131 -0
- package/dist/http/tokens.js +131 -0
- package/dist/http/zod.pipe.d.ts +8 -0
- package/dist/http/zod.pipe.js +14 -0
- package/dist/identity/accounts.d.ts +93 -0
- package/dist/identity/accounts.js +367 -0
- package/dist/identity/api-tokens.d.ts +73 -0
- package/dist/identity/api-tokens.js +197 -0
- package/dist/identity/audit.d.ts +23 -0
- package/dist/identity/audit.js +41 -0
- package/dist/identity/auth.controller.d.ts +40 -0
- package/dist/identity/auth.controller.js +130 -0
- package/dist/identity/auth.guard.d.ts +41 -0
- package/dist/identity/auth.guard.js +162 -0
- package/dist/identity/binding.d.ts +47 -0
- package/dist/identity/binding.js +84 -0
- package/dist/identity/cookies.d.ts +16 -0
- package/dist/identity/cookies.js +32 -0
- package/dist/identity/credential-check.d.ts +17 -0
- package/dist/identity/credential-check.js +24 -0
- package/dist/identity/enterprise-admin.d.ts +14 -0
- package/dist/identity/enterprise-admin.js +27 -0
- package/dist/identity/external.d.ts +106 -0
- package/dist/identity/external.js +337 -0
- package/dist/identity/hash.d.ts +2 -0
- package/dist/identity/hash.js +3 -0
- package/dist/identity/login.d.ts +6 -0
- package/dist/identity/login.js +20 -0
- package/dist/identity/me.controller.d.ts +61 -0
- package/dist/identity/me.controller.js +159 -0
- package/dist/identity/passwords.d.ts +6 -0
- package/dist/identity/passwords.js +37 -0
- package/dist/identity/principal.d.ts +56 -0
- package/dist/identity/principal.js +38 -0
- package/dist/identity/rate-limit.d.ts +55 -0
- package/dist/identity/rate-limit.js +121 -0
- package/dist/identity/sessions.d.ts +84 -0
- package/dist/identity/sessions.js +306 -0
- package/dist/identity/settings.d.ts +121 -0
- package/dist/identity/settings.js +248 -0
- package/dist/identity/sso.controller.d.ts +59 -0
- package/dist/identity/sso.controller.js +192 -0
- package/dist/identity/sso.d.ts +83 -0
- package/dist/identity/sso.js +202 -0
- package/dist/inbox/inbox.service.d.ts +43 -0
- package/dist/inbox/inbox.service.js +57 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.js +67 -0
- package/dist/kernel.d.ts +259 -0
- package/dist/kernel.js +1326 -0
- package/dist/log-config.d.ts +9 -0
- package/dist/log-config.js +27 -0
- package/dist/log-context.d.ts +32 -0
- package/dist/log-context.js +40 -0
- package/dist/log-loki.d.ts +34 -0
- package/dist/log-loki.js +145 -0
- package/dist/log.d.ts +79 -0
- package/dist/log.js +303 -0
- package/dist/models/prices.d.ts +53 -0
- package/dist/models/prices.js +121 -0
- package/dist/models/purposes.controller.d.ts +19 -0
- package/dist/models/purposes.controller.js +56 -0
- package/dist/models/purposes.d.ts +140 -0
- package/dist/models/purposes.js +267 -0
- package/dist/net/proxy.d.ts +44 -0
- package/dist/net/proxy.js +162 -0
- package/dist/net/public-address.d.ts +60 -0
- package/dist/net/public-address.js +272 -0
- package/dist/net/safe-fetch.d.ts +38 -0
- package/dist/net/safe-fetch.js +140 -0
- package/dist/orgs/directory-sync.controller.d.ts +14 -0
- package/dist/orgs/directory-sync.controller.js +40 -0
- package/dist/orgs/directory-sync.d.ts +166 -0
- package/dist/orgs/directory-sync.js +558 -0
- package/dist/orgs/invitations.controller.d.ts +58 -0
- package/dist/orgs/invitations.controller.js +137 -0
- package/dist/orgs/invitations.service.d.ts +80 -0
- package/dist/orgs/invitations.service.js +217 -0
- package/dist/orgs/members.service.d.ts +63 -0
- package/dist/orgs/members.service.js +234 -0
- package/dist/orgs/offboarding.d.ts +141 -0
- package/dist/orgs/offboarding.js +398 -0
- package/dist/orgs/org-lock.d.ts +32 -0
- package/dist/orgs/org-lock.js +46 -0
- package/dist/orgs/org.guard.d.ts +35 -0
- package/dist/orgs/org.guard.js +95 -0
- package/dist/orgs/orgs.controller.d.ts +78 -0
- package/dist/orgs/orgs.controller.js +192 -0
- package/dist/orgs/orgs.service.d.ts +61 -0
- package/dist/orgs/orgs.service.js +209 -0
- package/dist/orgs/roles.d.ts +13 -0
- package/dist/orgs/roles.js +58 -0
- package/dist/orgs/settings.controller.d.ts +20 -0
- package/dist/orgs/settings.controller.js +53 -0
- package/dist/orgs/settings.service.d.ts +120 -0
- package/dist/orgs/settings.service.js +178 -0
- package/dist/packages/npm.d.ts +50 -0
- package/dist/packages/npm.js +218 -0
- package/dist/packages/provenance.d.ts +47 -0
- package/dist/packages/provenance.js +147 -0
- package/dist/packages/tgz.d.ts +76 -0
- package/dist/packages/tgz.js +225 -0
- package/dist/runtime/abort.d.ts +32 -0
- package/dist/runtime/abort.js +71 -0
- package/dist/runtime/checkpointer.d.ts +32 -0
- package/dist/runtime/checkpointer.js +243 -0
- package/dist/runtime/context/build.d.ts +254 -0
- package/dist/runtime/context/build.js +693 -0
- package/dist/runtime/context/claude-tools.d.ts +11 -0
- package/dist/runtime/context/claude-tools.js +24 -0
- package/dist/runtime/context/compaction.d.ts +26 -0
- package/dist/runtime/context/compaction.js +195 -0
- package/dist/runtime/context/pairing.d.ts +11 -0
- package/dist/runtime/context/pairing.js +82 -0
- package/dist/runtime/context/reminders.d.ts +5 -0
- package/dist/runtime/context/reminders.js +11 -0
- package/dist/runtime/context/skills.d.ts +105 -0
- package/dist/runtime/context/skills.js +283 -0
- package/dist/runtime/context/tokens.d.ts +19 -0
- package/dist/runtime/context/tokens.js +104 -0
- package/dist/runtime/conversation-lock.d.ts +40 -0
- package/dist/runtime/conversation-lock.js +97 -0
- package/dist/runtime/hook-calls.d.ts +84 -0
- package/dist/runtime/hook-calls.js +136 -0
- package/dist/runtime/langgraph-loop.d.ts +52 -0
- package/dist/runtime/langgraph-loop.js +247 -0
- package/dist/runtime/loop.d.ts +93 -0
- package/dist/runtime/loop.js +7 -0
- package/dist/runtime/maintenance.d.ts +80 -0
- package/dist/runtime/maintenance.js +148 -0
- package/dist/runtime/media-cache.d.ts +21 -0
- package/dist/runtime/media-cache.js +51 -0
- package/dist/runtime/model-call.d.ts +176 -0
- package/dist/runtime/model-call.js +1049 -0
- package/dist/runtime/providers.d.ts +86 -0
- package/dist/runtime/providers.js +224 -0
- package/dist/runtime/quota.d.ts +29 -0
- package/dist/runtime/quota.js +70 -0
- package/dist/runtime/run-finish.d.ts +45 -0
- package/dist/runtime/run-finish.js +69 -0
- package/dist/runtime/run-queue.d.ts +121 -0
- package/dist/runtime/run-queue.js +493 -0
- package/dist/runtime/run-worker.d.ts +138 -0
- package/dist/runtime/run-worker.js +806 -0
- package/dist/runtime/stream.controller.d.ts +34 -0
- package/dist/runtime/stream.controller.js +122 -0
- package/dist/runtime/stream.d.ts +63 -0
- package/dist/runtime/stream.js +262 -0
- package/dist/runtime/subagents/child.d.ts +80 -0
- package/dist/runtime/subagents/child.js +225 -0
- package/dist/runtime/subagents/definition.d.ts +103 -0
- package/dist/runtime/subagents/definition.js +392 -0
- package/dist/runtime/subagents/dispatch.d.ts +69 -0
- package/dist/runtime/subagents/dispatch.js +502 -0
- package/dist/runtime/subagents/limits.d.ts +23 -0
- package/dist/runtime/subagents/limits.js +34 -0
- package/dist/runtime/subagents/org-agents.d.ts +50 -0
- package/dist/runtime/subagents/org-agents.js +70 -0
- package/dist/runtime/subagents/preamble.d.ts +7 -0
- package/dist/runtime/subagents/preamble.js +11 -0
- package/dist/runtime/subagents/progress.d.ts +26 -0
- package/dist/runtime/subagents/progress.js +36 -0
- package/dist/runtime/subagents/roster.d.ts +55 -0
- package/dist/runtime/subagents/roster.js +111 -0
- package/dist/runtime/subagents/skill-fork.d.ts +123 -0
- package/dist/runtime/subagents/skill-fork.js +259 -0
- package/dist/runtime/usage-report.d.ts +163 -0
- package/dist/runtime/usage-report.js +551 -0
- package/dist/runtime/waits.d.ts +233 -0
- package/dist/runtime/waits.js +883 -0
- package/dist/sandbox/leases.d.ts +169 -0
- package/dist/sandbox/leases.js +515 -0
- package/dist/sandbox/lifecycle.d.ts +21 -0
- package/dist/sandbox/lifecycle.js +68 -0
- package/dist/sandbox/sandbox.service.d.ts +249 -0
- package/dist/sandbox/sandbox.service.js +908 -0
- package/dist/skills/catalog.d.ts +149 -0
- package/dist/skills/catalog.js +405 -0
- package/dist/skills/changes.controller.d.ts +56 -0
- package/dist/skills/changes.controller.js +136 -0
- package/dist/skills/changes.service.d.ts +175 -0
- package/dist/skills/changes.service.js +805 -0
- package/dist/skills/invocable.controller.d.ts +23 -0
- package/dist/skills/invocable.controller.js +50 -0
- package/dist/skills/invocation-keys.d.ts +23 -0
- package/dist/skills/invocation-keys.js +44 -0
- package/dist/skills/invoke.d.ts +135 -0
- package/dist/skills/invoke.js +286 -0
- package/dist/skills/package.d.ts +87 -0
- package/dist/skills/package.js +227 -0
- package/dist/skills/skills.controller.d.ts +40 -0
- package/dist/skills/skills.controller.js +110 -0
- package/dist/skills/skills.service.d.ts +192 -0
- package/dist/skills/skills.service.js +567 -0
- package/dist/storage/prefix.d.ts +36 -0
- package/dist/storage/prefix.js +104 -0
- package/dist/storage/purge.d.ts +27 -0
- package/dist/storage/purge.js +75 -0
- package/dist/storage/storage.service.d.ts +44 -0
- package/dist/storage/storage.service.js +145 -0
- package/dist/text.d.ts +13 -0
- package/dist/text.js +13 -0
- package/dist/tools/approvals.controller.d.ts +53 -0
- package/dist/tools/approvals.controller.js +128 -0
- package/dist/tools/approvals.service.d.ts +172 -0
- package/dist/tools/approvals.service.js +568 -0
- package/dist/tools/breaker.d.ts +28 -0
- package/dist/tools/breaker.js +72 -0
- package/dist/tools/builtins/agent.d.ts +81 -0
- package/dist/tools/builtins/agent.js +223 -0
- package/dist/tools/builtins/ask-user.d.ts +28 -0
- package/dist/tools/builtins/ask-user.js +139 -0
- package/dist/tools/builtins/read-tool-output.d.ts +18 -0
- package/dist/tools/builtins/read-tool-output.js +108 -0
- package/dist/tools/builtins/sandbox/bash.d.ts +16 -0
- package/dist/tools/builtins/sandbox/bash.js +137 -0
- package/dist/tools/builtins/sandbox/common.d.ts +116 -0
- package/dist/tools/builtins/sandbox/common.js +306 -0
- package/dist/tools/builtins/sandbox/deliver.d.ts +5 -0
- package/dist/tools/builtins/sandbox/deliver.js +180 -0
- package/dist/tools/builtins/sandbox/edit.d.ts +4 -0
- package/dist/tools/builtins/sandbox/edit.js +98 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +25 -0
- package/dist/tools/builtins/sandbox/glob-match.js +240 -0
- package/dist/tools/builtins/sandbox/glob.d.ts +4 -0
- package/dist/tools/builtins/sandbox/glob.js +104 -0
- package/dist/tools/builtins/sandbox/grep.d.ts +9 -0
- package/dist/tools/builtins/sandbox/grep.js +133 -0
- package/dist/tools/builtins/sandbox/index.d.ts +12 -0
- package/dist/tools/builtins/sandbox/index.js +27 -0
- package/dist/tools/builtins/sandbox/names.d.ts +7 -0
- package/dist/tools/builtins/sandbox/names.js +20 -0
- package/dist/tools/builtins/sandbox/read.d.ts +8 -0
- package/dist/tools/builtins/sandbox/read.js +121 -0
- package/dist/tools/builtins/sandbox/write.d.ts +4 -0
- package/dist/tools/builtins/sandbox/write.js +88 -0
- package/dist/tools/builtins/skill-load.d.ts +53 -0
- package/dist/tools/builtins/skill-load.js +446 -0
- package/dist/tools/builtins/skill-write.d.ts +59 -0
- package/dist/tools/builtins/skill-write.js +244 -0
- package/dist/tools/builtins/tool-search.d.ts +31 -0
- package/dist/tools/builtins/tool-search.js +171 -0
- package/dist/tools/connector-content.controller.d.ts +34 -0
- package/dist/tools/connector-content.controller.js +78 -0
- package/dist/tools/connector-content.d.ts +104 -0
- package/dist/tools/connector-content.js +267 -0
- package/dist/tools/connectors.controller.d.ts +210 -0
- package/dist/tools/connectors.controller.js +234 -0
- package/dist/tools/connectors.service.d.ts +303 -0
- package/dist/tools/connectors.service.js +1102 -0
- package/dist/tools/credentials.d.ts +139 -0
- package/dist/tools/credentials.js +351 -0
- package/dist/tools/drift.d.ts +141 -0
- package/dist/tools/drift.js +539 -0
- package/dist/tools/elicitation.d.ts +81 -0
- package/dist/tools/elicitation.js +266 -0
- package/dist/tools/endpoint.d.ts +18 -0
- package/dist/tools/endpoint.js +115 -0
- package/dist/tools/info.d.ts +67 -0
- package/dist/tools/info.js +113 -0
- package/dist/tools/naming.d.ts +27 -0
- package/dist/tools/naming.js +47 -0
- package/dist/tools/oauth/discovery.d.ts +65 -0
- package/dist/tools/oauth/discovery.js +307 -0
- package/dist/tools/oauth/flow.d.ts +63 -0
- package/dist/tools/oauth/flow.js +237 -0
- package/dist/tools/oauth/oauth.controller.d.ts +31 -0
- package/dist/tools/oauth/oauth.controller.js +95 -0
- package/dist/tools/oauth/tokens.d.ts +111 -0
- package/dist/tools/oauth/tokens.js +258 -0
- package/dist/tools/outputs.d.ts +61 -0
- package/dist/tools/outputs.js +156 -0
- package/dist/tools/pipeline.d.ts +322 -0
- package/dist/tools/pipeline.js +1236 -0
- package/dist/tools/policy.d.ts +60 -0
- package/dist/tools/policy.js +236 -0
- package/dist/tools/questions.controller.d.ts +24 -0
- package/dist/tools/questions.controller.js +58 -0
- package/dist/tools/questions.service.d.ts +103 -0
- package/dist/tools/questions.service.js +295 -0
- package/dist/tools/redact.d.ts +20 -0
- package/dist/tools/redact.js +60 -0
- package/dist/tools/registry.d.ts +246 -0
- package/dist/tools/registry.js +481 -0
- package/dist/tools/resources.d.ts +16 -0
- package/dist/tools/resources.js +76 -0
- package/dist/tools/specs.d.ts +14 -0
- package/dist/tools/specs.js +31 -0
- package/dist/tools/validate.d.ts +20 -0
- package/dist/tools/validate.js +183 -0
- package/dist/tools/view.d.ts +43 -0
- package/dist/tools/view.js +225 -0
- package/dist/ui/embed-token.d.ts +31 -0
- package/dist/ui/embed-token.js +132 -0
- package/dist/ui/registry.d.ts +58 -0
- package/dist/ui/registry.js +90 -0
- package/dist/ui/ui-stream.d.ts +37 -0
- package/dist/ui/ui-stream.js +162 -0
- package/dist/ui/views.controller.d.ts +81 -0
- package/dist/ui/views.controller.js +261 -0
- package/dist/ui/views.d.ts +155 -0
- package/dist/ui/views.js +306 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.js +6 -0
- package/package.json +69 -3
- package/src/migrations/0001_init.sql +8 -0
- package/src/migrations/0002_secrets.sql +8 -0
- package/src/migrations/0003_identity.sql +117 -0
- package/src/migrations/0004_plugin_org_config_nullable.sql +3 -0
- package/src/migrations/0005_agents.sql +27 -0
- package/src/migrations/0006_conversations.sql +37 -0
- package/src/migrations/0007_checkpoints.sql +26 -0
- package/src/migrations/0008_runs_trigger_seq.sql +3 -0
- package/src/migrations/0009_runs_active_unique.sql +4 -0
- package/src/migrations/0010_tools.sql +125 -0
- package/src/migrations/0011_approvals_spec.sql +10 -0
- package/src/migrations/0012_run_waits.sql +24 -0
- package/src/migrations/0013_app_tools_source.sql +4 -0
- package/src/migrations/0014_tool_specs.sql +8 -0
- package/src/migrations/0015_tool_drift.sql +20 -0
- package/src/migrations/0016_plugin_permissions.sql +11 -0
- package/src/migrations/0017_identity_sources.sql +6 -0
- package/src/migrations/0018_channels.sql +74 -0
- package/src/migrations/0019_identity_trust.sql +17 -0
- package/src/migrations/0020_channel_card_lookup.sql +10 -0
- package/src/migrations/0021_org_storage_purge.sql +9 -0
- package/src/migrations/0022_attachments.sql +29 -0
- package/src/migrations/0023_sandboxes.sql +37 -0
- package/src/migrations/0024_skills.sql +46 -0
- package/src/migrations/0025_skills_catalog_idx.sql +6 -0
- package/src/migrations/0026_skill_changes.sql +34 -0
- package/src/migrations/0027_model_prices.sql +18 -0
- package/src/migrations/0028_evals.sql +105 -0
- package/src/migrations/0029_model_purposes.sql +18 -0
- package/src/migrations/0030_plugin_installs.sql +73 -0
- package/src/migrations/0031_plugin_snapshot_source.sql +6 -0
- package/src/migrations/0032_plugin_deployment_configs.sql +10 -0
- package/src/migrations/0033_rename_apps_to_connectors.sql +25 -0
- package/src/migrations/0034_directory.sql +49 -0
- package/src/migrations/0035_catalogs.sql +40 -0
- package/src/migrations/0036_app_import_staging.sql +17 -0
- package/src/migrations/0037_directory_installs.sql +92 -0
- package/src/migrations/0038_channel_inbound_mode.sql +6 -0
- package/src/migrations/0039_channel_card_pending.sql +8 -0
- package/src/migrations/0040_usage_report_sweep.sql +10 -0
- package/src/migrations/0041_rename_plugins_to_extensions.sql +38 -0
- package/src/migrations/0042_rename_directory_to_catalog.sql +80 -0
- package/src/migrations/0043_rename_app_installs_to_plugin_installs.sql +20 -0
- package/src/migrations/0044_catalog_one_kind.sql +90 -0
- package/src/migrations/0045_plugin_dependencies.sql +9 -0
- package/src/migrations/0046_git_sources.sql +25 -0
- package/src/migrations/0047_marketplace_entry_heads.sql +7 -0
- package/src/migrations/0048_marketplace_entry_trees.sql +8 -0
- package/src/migrations/0049_plugin_upgrades.sql +37 -0
- package/src/migrations/0050_bootstrap.sql +53 -0
- package/src/migrations/0051_claude_compat.sql +26 -0
- package/src/migrations/0052_conversations_account_agent_idx.sql +5 -0
- package/src/migrations/0053_subagents.sql +73 -0
- package/src/migrations/0054_subagent_wait_expiry.sql +7 -0
- package/src/migrations/0055_subagent_parent_indexes.sql +10 -0
- package/src/migrations/0056_approval_reason.sql +3 -0
- package/src/migrations/0057_conversation_titles.sql +11 -0
- package/src/migrations/0058_conversation_selection.sql +4 -0
- package/src/migrations/0059_conversation_queue.sql +22 -0
- package/src/migrations/0060_file_previewers.sql +10 -0
- package/src/migrations/0061_queue_selection.sql +5 -0
- package/src/migrations/0062_queued_skill.sql +8 -0
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
import { SKILL_ENTRY_FILE, sanitizeParams, } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { loadTemplates } from "../../agents/templates.js";
|
|
3
|
+
import { ApiError } from "../../errors.js";
|
|
4
|
+
import { PINNED_SKILLS_LIMITS } from "../../skills/catalog.js";
|
|
5
|
+
import { toolKey } from "../../tools/naming.js";
|
|
6
|
+
/**
|
|
7
|
+
* Tools a sub-agent never gets (spec §5.3, §5.5): `agent` (depth 1), `ask_user` (the person does not
|
|
8
|
+
* see the child), `sandbox_deliver` (delivering files is the parent's job) and `skill_write`.
|
|
9
|
+
*/
|
|
10
|
+
export const CHILD_REMOVED_TOOLS = ["agent", "ask_user", "sandbox_deliver", "skill_write"];
|
|
11
|
+
/**
|
|
12
|
+
* The roster entry's template is gone (an inline template edited away, a plugin template
|
|
13
|
+
* uninstalled) between resolving the roster and reading it. The dispatch refuses the call as an
|
|
14
|
+
* unknown type.
|
|
15
|
+
*/
|
|
16
|
+
export class SubagentTypeGoneError extends Error {
|
|
17
|
+
type;
|
|
18
|
+
constructor(type) {
|
|
19
|
+
super(`agent template ${type} not found`);
|
|
20
|
+
this.type = type;
|
|
21
|
+
this.name = "SubagentTypeGoneError";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const RANK = { ask: 1, deny: 2 };
|
|
25
|
+
const isPolicy = (p) => p === "ask" || p === "deny";
|
|
26
|
+
/**
|
|
27
|
+
* `base` with `over` applied on top, the stricter value winning per key (`deny` > `ask`). Values
|
|
28
|
+
* other than `ask` / `deny` (stored template data is not re-validated) are skipped on both sides.
|
|
29
|
+
*/
|
|
30
|
+
export function stricterPolicies(base, over) {
|
|
31
|
+
const out = {};
|
|
32
|
+
for (const [key, p] of Object.entries(base))
|
|
33
|
+
if (isPolicy(p))
|
|
34
|
+
out[key] = p;
|
|
35
|
+
for (const [key, p] of Object.entries(over)) {
|
|
36
|
+
if (!isPolicy(p))
|
|
37
|
+
continue;
|
|
38
|
+
const prev = out[key];
|
|
39
|
+
if (prev === undefined || RANK[p] > RANK[prev])
|
|
40
|
+
out[key] = p;
|
|
41
|
+
}
|
|
42
|
+
return out;
|
|
43
|
+
}
|
|
44
|
+
async function loadConnectors(db, orgId, refs) {
|
|
45
|
+
const ids = [...new Set(refs.flatMap((r) => (r.kind === "connector" ? [r.connectorId] : [])))];
|
|
46
|
+
const out = new Map();
|
|
47
|
+
if (ids.length === 0)
|
|
48
|
+
return out;
|
|
49
|
+
const rows = await db
|
|
50
|
+
.selectFrom("connectors")
|
|
51
|
+
.select(["id", "slug"])
|
|
52
|
+
.where("org_id", "=", orgId)
|
|
53
|
+
.where("deleted_at", "is", null)
|
|
54
|
+
.where("id", "in", ids)
|
|
55
|
+
.execute();
|
|
56
|
+
const tools = rows.length === 0
|
|
57
|
+
? []
|
|
58
|
+
: await db
|
|
59
|
+
.selectFrom("connector_tools")
|
|
60
|
+
.select(["connector_id", "name"])
|
|
61
|
+
.where("connector_id", "in", rows.map((r) => r.id))
|
|
62
|
+
.orderBy("name")
|
|
63
|
+
.execute();
|
|
64
|
+
for (const r of rows) {
|
|
65
|
+
out.set(r.id, {
|
|
66
|
+
slug: r.slug,
|
|
67
|
+
tools: tools.filter((t) => t.connector_id === r.id).map((t) => t.name),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return out;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Narrows tool refs by resolved key (spec §5.3): keeps a key when `allow` (if given) lists it and
|
|
74
|
+
* neither `deny` nor {@link CHILD_REMOVED_TOOLS} does. A connector ref with `tools: "all"` stays
|
|
75
|
+
* live only when nothing can narrow it (no allowlist and no deny key under `<slug>__`), so a tool
|
|
76
|
+
* the connector gains later never slips past the template; otherwise it becomes the kept names, or
|
|
77
|
+
* is dropped. A connector that no longer exists keeps its ref only without an allowlist.
|
|
78
|
+
*/
|
|
79
|
+
function narrowTools(refs, connectors, allow, deny) {
|
|
80
|
+
const removed = new Set(CHILD_REMOVED_TOOLS);
|
|
81
|
+
const keep = (key) => !removed.has(key) && !deny.has(key) && (allow === null || allow.has(key));
|
|
82
|
+
const out = [];
|
|
83
|
+
for (const ref of refs) {
|
|
84
|
+
if (ref.kind === "builtin") {
|
|
85
|
+
if (keep(ref.name))
|
|
86
|
+
out.push(ref);
|
|
87
|
+
}
|
|
88
|
+
else if (ref.kind === "plugin") {
|
|
89
|
+
if (keep(toolKey(ref.plugin, ref.name)))
|
|
90
|
+
out.push(ref);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
const c = connectors.get(ref.connectorId);
|
|
94
|
+
if (!c) {
|
|
95
|
+
if (allow === null)
|
|
96
|
+
out.push(ref);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const prefix = toolKey(c.slug, "");
|
|
100
|
+
if (ref.tools === "all" && allow === null && ![...deny].some((k) => k.startsWith(prefix))) {
|
|
101
|
+
out.push(ref);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const names = ref.tools === "all" ? c.tools : ref.tools;
|
|
105
|
+
const kept = names.filter((name) => keep(toolKey(c.slug, name)));
|
|
106
|
+
if (kept.length > 0)
|
|
107
|
+
out.push({ ...ref, tools: kept });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return out;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* The template's skills the parent selects (its `orgSkills` or the parent agent's own skills),
|
|
114
|
+
* within the pinned limits (spec §5.3): inline templates name skill ids, plugin templates skill
|
|
115
|
+
* names (`<name>` or `<plugin>:<name>`). A name that matches more than one selected skill picks, in
|
|
116
|
+
* this order, the skill from the template's own plugin, the agent's own skill, the org skill (ties
|
|
117
|
+
* by id), with a warning. Dropped ones get a warning.
|
|
118
|
+
*/
|
|
119
|
+
async function pinnedFor(db, a, refs, byName) {
|
|
120
|
+
if (refs.length === 0)
|
|
121
|
+
return { pinned: [], warnings: [] };
|
|
122
|
+
const orgSkills = a.parent.skills?.orgSkills ?? [];
|
|
123
|
+
const rows = (await db
|
|
124
|
+
.selectFrom("skills as s")
|
|
125
|
+
.innerJoin("skill_versions as v", (j) => j.onRef("v.skill_id", "=", "s.id").onRef("v.version", "=", "s.current_version"))
|
|
126
|
+
.leftJoin("catalog_items as c", "c.id", "s.catalog_item_id")
|
|
127
|
+
.select(["s.id", "s.name", "s.scope", "v.manifest", "c.name as plugin"])
|
|
128
|
+
.where("s.org_id", "=", a.orgId)
|
|
129
|
+
.where("s.deleted_at", "is", null)
|
|
130
|
+
.where((eb) => {
|
|
131
|
+
const own = eb.and([eb("s.scope", "=", "agent"), eb("s.agent_id", "=", a.parentAgentId)]);
|
|
132
|
+
return orgSkills.length === 0
|
|
133
|
+
? own
|
|
134
|
+
: eb.or([own, eb.and([eb("s.scope", "=", "org"), eb("s.id", "in", orgSkills)])]);
|
|
135
|
+
})
|
|
136
|
+
.orderBy("s.id")
|
|
137
|
+
.execute()).map((r) => ({
|
|
138
|
+
id: r.id,
|
|
139
|
+
name: r.name,
|
|
140
|
+
scope: r.scope,
|
|
141
|
+
plugin: r.plugin,
|
|
142
|
+
bytes: r.manifest.files.find((f) => f.path === SKILL_ENTRY_FILE)?.size ?? 0,
|
|
143
|
+
}));
|
|
144
|
+
const pinned = [];
|
|
145
|
+
const warnings = [];
|
|
146
|
+
const own = byName?.plugin;
|
|
147
|
+
const rank = (r) => own !== undefined && r.plugin === own ? 0 : r.scope === "agent" ? 1 : 2;
|
|
148
|
+
const match = (ref) => {
|
|
149
|
+
if (byName === null)
|
|
150
|
+
return rows.find((r) => r.id === ref);
|
|
151
|
+
const i = ref.indexOf(":");
|
|
152
|
+
const found = i < 0
|
|
153
|
+
? rows.filter((r) => r.name === ref)
|
|
154
|
+
: rows.filter((r) => r.name === ref.slice(i + 1) && r.plugin === ref.slice(0, i));
|
|
155
|
+
// rows are ordered by id, and the sort is stable: ties keep that order
|
|
156
|
+
const [first, ...rest] = found.sort((x, y) => rank(x) - rank(y));
|
|
157
|
+
if (first && rest.length > 0) {
|
|
158
|
+
const which = [`the one from the plugin ${own}`, "the agent's own skill", "the org skill"][rank(first)];
|
|
159
|
+
warnings.push(`The skill name "${ref}" matches more than one selected skill; ${which} was pinned.`);
|
|
160
|
+
}
|
|
161
|
+
return first;
|
|
162
|
+
};
|
|
163
|
+
let total = 0;
|
|
164
|
+
for (const ref of refs) {
|
|
165
|
+
const r = match(ref);
|
|
166
|
+
if (!r) {
|
|
167
|
+
warnings.push(`The skill "${ref}" was not pinned: the agent does not select it.`);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
if (pinned.includes(r.id))
|
|
171
|
+
continue;
|
|
172
|
+
if (pinned.length >= PINNED_SKILLS_LIMITS.count) {
|
|
173
|
+
warnings.push(`The skill "${r.name}" was not pinned: at most 3 skills can be pinned.`);
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
if (total + r.bytes > PINNED_SKILLS_LIMITS.totalBytes) {
|
|
177
|
+
warnings.push(`The skill "${r.name}" was not pinned: pinned skills are limited to 32 KB in total.`);
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
total += r.bytes;
|
|
181
|
+
pinned.push(r.id);
|
|
182
|
+
}
|
|
183
|
+
return { pinned, warnings };
|
|
184
|
+
}
|
|
185
|
+
/** The `effort` declaration of `model`, or null (or when the model cannot be resolved). */
|
|
186
|
+
async function effortDecl(registry, model) {
|
|
187
|
+
try {
|
|
188
|
+
const { info } = await registry.resolve(model);
|
|
189
|
+
return info.parameters.find((p) => p.standard === "effort") ?? null;
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/** Model, params and fallback of a sub-agent (spec §5.4). */
|
|
196
|
+
async function resolveTier(d, orgId, parent, tier) {
|
|
197
|
+
const inherit = {
|
|
198
|
+
model: parent.model,
|
|
199
|
+
modelParams: parent.modelParams,
|
|
200
|
+
fallback: parent.fallback,
|
|
201
|
+
fallbackParams: parent.fallbackParams,
|
|
202
|
+
};
|
|
203
|
+
if (tier === "inherit")
|
|
204
|
+
return { ...inherit, tierFallback: false };
|
|
205
|
+
try {
|
|
206
|
+
const target = await d.purposes.resolve(orgId, `subagent_${tier}`);
|
|
207
|
+
return {
|
|
208
|
+
model: target.model,
|
|
209
|
+
modelParams: target.params,
|
|
210
|
+
fallback: null,
|
|
211
|
+
fallbackParams: {},
|
|
212
|
+
tierFallback: false,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
catch (e) {
|
|
216
|
+
if (e instanceof ApiError && e.code === "model.unconfigured") {
|
|
217
|
+
return { ...inherit, tierFallback: true };
|
|
218
|
+
}
|
|
219
|
+
throw e;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/** `"{parent name} › {agent type}"`, within the 80-character name limit. */
|
|
223
|
+
const childName = (parent, type) => `${parent} › ${type}`.slice(0, 80);
|
|
224
|
+
function orgAgentDefinition(d, a) {
|
|
225
|
+
// the version the gates checked (checkOrgAgent), never read again here: a version saved in
|
|
226
|
+
// between could be one the gates never saw (batch 3 review M1)
|
|
227
|
+
if (a.orgAgent === undefined) {
|
|
228
|
+
throw new Error(`org agent ${a.entry.type} dispatched without its checked version`);
|
|
229
|
+
}
|
|
230
|
+
const agentId = a.entry.agentId ?? "";
|
|
231
|
+
const own = a.orgAgent.definition;
|
|
232
|
+
const { subagents: _subagents, skills, ...rest } = own;
|
|
233
|
+
const definition = {
|
|
234
|
+
...rest,
|
|
235
|
+
// its own tools, not intersected with the parent's; only the child-removed ones go
|
|
236
|
+
tools: narrowTools(own.tools, new Map(), null, new Set()),
|
|
237
|
+
// its policies, then the parent's on top, stricter wins (keys outside its tools are inert)
|
|
238
|
+
toolPolicies: stricterPolicies(own.toolPolicies ?? {}, a.parent.toolPolicies ?? {}),
|
|
239
|
+
...(skills !== undefined && {
|
|
240
|
+
skills: {
|
|
241
|
+
orgSkills: skills.orgSkills,
|
|
242
|
+
...(skills.pinned !== undefined && { pinned: skills.pinned }),
|
|
243
|
+
},
|
|
244
|
+
}),
|
|
245
|
+
};
|
|
246
|
+
return {
|
|
247
|
+
definition,
|
|
248
|
+
template: { source: "agent", id: agentId, version: a.orgAgent.version },
|
|
249
|
+
maxSteps: d.config().runtime.maxSteps,
|
|
250
|
+
warnings: [],
|
|
251
|
+
model: own.model,
|
|
252
|
+
tierFallback: false,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* The effective definition of a sub-agent at its first dispatch (spec §5.3–§5.5):
|
|
257
|
+
* - `general` / `inline` / `plugin`: the parent's definition narrowed by the template (tools by
|
|
258
|
+
* resolved key, `disallowedTools`, {@link CHILD_REMOVED_TOOLS}; policies stricter-wins), the
|
|
259
|
+
* template's instructions, pinned = the template's skills the parent selects (general pins
|
|
260
|
+
* nothing), `maxSteps = min(template ?? runtime.maxSteps, runtime.maxSteps)`, and the model tier
|
|
261
|
+
* `tier` (the call's) → the template's → `inherit`; an unmapped tier runs on the parent's model
|
|
262
|
+
* (`tierFallback`); a template `effort` is set when the resolved model declares it;
|
|
263
|
+
* - `agent`: the org agent's version that passed the gates (`orgAgent`, from {@link checkOrgAgent}),
|
|
264
|
+
* its own tools minus the child-removed ones, its policies with the parent's on top (stricter
|
|
265
|
+
* wins), its skills and model; `tier` ignored.
|
|
266
|
+
* The `subagents` block is never part of a child's definition (depth 1).
|
|
267
|
+
*/
|
|
268
|
+
export async function effectiveDefinition(d, a) {
|
|
269
|
+
if (a.entry.source === "agent")
|
|
270
|
+
return orgAgentDefinition(d, a);
|
|
271
|
+
const runtimeMax = d.config().runtime.maxSteps;
|
|
272
|
+
const { parent, entry } = a;
|
|
273
|
+
let template = null;
|
|
274
|
+
let ref = { source: entry.source };
|
|
275
|
+
if (entry.source === "inline") {
|
|
276
|
+
template = parent.subagents?.inline?.find((t) => t.name === entry.type) ?? null;
|
|
277
|
+
if (!template)
|
|
278
|
+
throw new SubagentTypeGoneError(entry.type);
|
|
279
|
+
}
|
|
280
|
+
else if (entry.source === "plugin") {
|
|
281
|
+
const row = (await loadTemplates(d.db, a.orgId, [entry.templateId ?? ""])).get(entry.templateId ?? "");
|
|
282
|
+
if (!row)
|
|
283
|
+
throw new SubagentTypeGoneError(entry.type);
|
|
284
|
+
template = row.template;
|
|
285
|
+
ref = { source: "plugin", id: row.id, version: row.version, plugin: row.plugin };
|
|
286
|
+
}
|
|
287
|
+
const connectors = await loadConnectors(d.db, a.orgId, parent.tools);
|
|
288
|
+
const tools = narrowTools(parent.tools, connectors, template?.tools !== undefined ? new Set(template.tools) : null, new Set(template?.disallowedTools ?? []));
|
|
289
|
+
const toolPolicies = stricterPolicies(parent.toolPolicies ?? {}, template?.toolPolicies ?? {});
|
|
290
|
+
const { pinned, warnings } = await pinnedFor(d.db, a, template?.skills ?? [], entry.source === "plugin" ? { plugin: entry.plugin } : null);
|
|
291
|
+
const tier = a.tier ?? template?.model ?? "inherit";
|
|
292
|
+
const m = await resolveTier(d, a.orgId, parent, tier);
|
|
293
|
+
let modelParams = m.modelParams;
|
|
294
|
+
if (template?.effort !== undefined) {
|
|
295
|
+
const decl = await effortDecl(d.registry, m.model);
|
|
296
|
+
if (decl) {
|
|
297
|
+
const v = sanitizeParams([decl], { [decl.key]: template.effort }).value[decl.key];
|
|
298
|
+
if (v !== undefined)
|
|
299
|
+
modelParams = { ...modelParams, [decl.key]: v };
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
const parentSkills = parent.skills;
|
|
303
|
+
const definition = {
|
|
304
|
+
name: childName(parent.name, entry.type),
|
|
305
|
+
avatarUrl: parent.avatarUrl,
|
|
306
|
+
instructions: template?.instructions ?? parent.instructions,
|
|
307
|
+
model: m.model,
|
|
308
|
+
fallback: m.fallback,
|
|
309
|
+
modelParams,
|
|
310
|
+
fallbackParams: m.fallbackParams,
|
|
311
|
+
tools,
|
|
312
|
+
toolPolicies,
|
|
313
|
+
...((parentSkills !== undefined || pinned.length > 0) && {
|
|
314
|
+
skills: {
|
|
315
|
+
orgSkills: parentSkills?.orgSkills ?? [],
|
|
316
|
+
...(pinned.length > 0 && { pinned }),
|
|
317
|
+
},
|
|
318
|
+
}),
|
|
319
|
+
};
|
|
320
|
+
return {
|
|
321
|
+
definition,
|
|
322
|
+
template: ref,
|
|
323
|
+
maxSteps: Math.min(template?.maxSteps ?? runtimeMax, runtimeMax),
|
|
324
|
+
warnings,
|
|
325
|
+
model: m.model,
|
|
326
|
+
tierFallback: m.tierFallback,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* The refs of `frozen` that `current` still has: a builtin or plugin tool by name, a connector by
|
|
331
|
+
* id; a connector's `all` meets the other side's names (`all` on both stays `all`), and a
|
|
332
|
+
* connector left with no names is dropped. Pure: a connector `current` lists is not looked up.
|
|
333
|
+
*/
|
|
334
|
+
export function intersectTools(frozen, current) {
|
|
335
|
+
const out = [];
|
|
336
|
+
for (const ref of frozen) {
|
|
337
|
+
if (ref.kind === "builtin") {
|
|
338
|
+
if (current.some((c) => c.kind === "builtin" && c.name === ref.name))
|
|
339
|
+
out.push(ref);
|
|
340
|
+
}
|
|
341
|
+
else if (ref.kind === "plugin") {
|
|
342
|
+
if (current.some((c) => c.kind === "plugin" && c.plugin === ref.plugin && c.name === ref.name)) {
|
|
343
|
+
out.push(ref);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
const c = current.find((x) => x.kind === "connector" && x.connectorId === ref.connectorId);
|
|
348
|
+
if (!c)
|
|
349
|
+
continue;
|
|
350
|
+
if (c.tools === "all") {
|
|
351
|
+
out.push(ref);
|
|
352
|
+
continue;
|
|
353
|
+
}
|
|
354
|
+
const names = ref.tools === "all" ? c.tools : ref.tools.filter((n) => c.tools.includes(n));
|
|
355
|
+
if (names.length > 0)
|
|
356
|
+
out.push({ ...ref, tools: names });
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
return out;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* The narrowing of a follow-up (final review I1): `frozen` (the child's `subagent_started`
|
|
363
|
+
* definition) against `current`, the definition a fresh dispatch would read now: the dispatching
|
|
364
|
+
* parent run's version for `general` / inline / plugin children, the dispatched org agent's
|
|
365
|
+
* current version for an org agent child (whose tools are its own at dispatch too, §5.5). Its
|
|
366
|
+
* `orgSkills` keep only those `current` still selects; a pinned id that was one of the frozen org
|
|
367
|
+
* skills goes with it (the agent's own skills stay).
|
|
368
|
+
*/
|
|
369
|
+
export function narrowFollowUp(frozen, current) {
|
|
370
|
+
const tools = intersectTools(frozen.tools, current.tools);
|
|
371
|
+
if (frozen.skills === undefined)
|
|
372
|
+
return { tools };
|
|
373
|
+
const frozenOrg = new Set(frozen.skills.orgSkills);
|
|
374
|
+
const now = new Set(current.skills?.orgSkills ?? []);
|
|
375
|
+
const orgSkills = frozen.skills.orgSkills.filter((id) => now.has(id));
|
|
376
|
+
const pinned = frozen.skills.pinned?.filter((id) => !frozenOrg.has(id) || now.has(id));
|
|
377
|
+
return { tools, skills: { orgSkills, ...(pinned !== undefined && { pinned }) } };
|
|
378
|
+
}
|
|
379
|
+
/** The definition a child run uses: the frozen one with its trigger's follow-up narrowing. */
|
|
380
|
+
export function childRunDefinition(frozen, narrowed) {
|
|
381
|
+
if (narrowed === undefined)
|
|
382
|
+
return frozen;
|
|
383
|
+
const { skills, ...rest } = frozen;
|
|
384
|
+
const kept = skills === undefined || narrowed.skills === undefined
|
|
385
|
+
? skills
|
|
386
|
+
: {
|
|
387
|
+
...skills,
|
|
388
|
+
orgSkills: narrowed.skills.orgSkills,
|
|
389
|
+
...(narrowed.skills.pinned !== undefined && { pinned: narrowed.skills.pinned }),
|
|
390
|
+
};
|
|
391
|
+
return { ...rest, tools: narrowed.tools, ...(kept !== undefined && { skills: kept }) };
|
|
392
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { Logger } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { type AgentDefinition } from "../../agents/definition.js";
|
|
3
|
+
import type { KernelConfig } from "../../config/schema.js";
|
|
4
|
+
import type { EventLog } from "../../conversations/event-log.js";
|
|
5
|
+
import type { EventPayload } from "../../conversations/events.js";
|
|
6
|
+
import type { ConversationKind, KernelDb } from "../../db/kernel-schema.js";
|
|
7
|
+
import type { ModelPurposesService } from "../../models/purposes.js";
|
|
8
|
+
import { type AgentToolInputT } from "../../tools/builtins/agent.js";
|
|
9
|
+
import type { ToolStepContext } from "../../tools/pipeline.js";
|
|
10
|
+
import type { ProviderRegistry } from "../providers.js";
|
|
11
|
+
import { type RunJobData } from "../run-queue.js";
|
|
12
|
+
export interface DispatchDeps {
|
|
13
|
+
db: KernelDb;
|
|
14
|
+
eventLog: EventLog;
|
|
15
|
+
purposes: Pick<ModelPurposesService, "resolve">;
|
|
16
|
+
registry: Pick<ProviderRegistry, "resolve">;
|
|
17
|
+
config: () => KernelConfig;
|
|
18
|
+
/** Enqueues a child run (on the sub-agent run queue: `kind` is always `subagent`). */
|
|
19
|
+
enqueue: (data: RunJobData, jobId: string, kind: ConversationKind) => Promise<void>;
|
|
20
|
+
log: Pick<Logger, "error" | "warn">;
|
|
21
|
+
}
|
|
22
|
+
export type DispatchOutcome = {
|
|
23
|
+
kind: "dispatched";
|
|
24
|
+
childRunId: string;
|
|
25
|
+
} | {
|
|
26
|
+
kind: "refused";
|
|
27
|
+
content: string;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* A dispatch for a person's fork invocation (phase D spec §6.2, `advanceSkillForks`), not for a
|
|
31
|
+
* model's `agent` call: `general-purpose` is always available (the `agent` tool and
|
|
32
|
+
* `subagents.general` do not gate it), an unknown type falls back to it with a warning, and the
|
|
33
|
+
* child records the invoked skill.
|
|
34
|
+
*/
|
|
35
|
+
export interface SkillForkDispatch {
|
|
36
|
+
/** The invocation message's seq. */
|
|
37
|
+
seq: number;
|
|
38
|
+
/** The invocation record (`user_message.skill`), also put on the child's task message. */
|
|
39
|
+
skill: NonNullable<EventPayload<"user_message">["skill"]>;
|
|
40
|
+
/** Warnings decided when rendering the task (`SkillInvoker.renderTask`). */
|
|
41
|
+
warnings: string[];
|
|
42
|
+
/** The task for the sub-agent's effective definition (replaces `input.prompt`). */
|
|
43
|
+
task: (child: AgentDefinition) => string;
|
|
44
|
+
}
|
|
45
|
+
/** Idempotency key of the parent's `subagent_dispatched` event. */
|
|
46
|
+
export declare const dispatchedIdemKey: (runId: string, callId: string) => string;
|
|
47
|
+
/**
|
|
48
|
+
* Dispatches the sub-agent of one `agent` call (spec §7.1), after the pipeline's validation,
|
|
49
|
+
* policy, approval and `tool.preExecute` stages. A new sub-agent: resolves its type and effective
|
|
50
|
+
* definition, then in one transaction (holding the parent run's row lock, so the dispatches of one
|
|
51
|
+
* run serialize) inserts the child conversation, appends `subagent_started` and the task message,
|
|
52
|
+
* inserts the child run (`queued`) and the `subagent_dispatches` row, appends `subagent_dispatched`
|
|
53
|
+
* to the parent and audits `subagent.dispatched`. A `resume` appends the follow-up message and
|
|
54
|
+
* starts the child's next run the same way. After commit the child run is enqueued; a failed
|
|
55
|
+
* enqueue only logs (the dispatch is durable, the wait sweep re-enqueues it).
|
|
56
|
+
*
|
|
57
|
+
* Refusals (§4.5) start nothing: a call from a sub-agent, an unknown type, an org agent that fails
|
|
58
|
+
* one of its gates ({@link orgAgentGates}, at every dispatch and follow-up; audited
|
|
59
|
+
* `subagent.refused`), `resume` with `subagent_type` / `model`, a `resume` id that is not a
|
|
60
|
+
* sub-agent of this conversation (whatever it is otherwise: no detail about other conversations),
|
|
61
|
+
* or one whose run is still active.
|
|
62
|
+
*/
|
|
63
|
+
export declare function dispatchSubagent(d: DispatchDeps, a: {
|
|
64
|
+
ctx: ToolStepContext;
|
|
65
|
+
callId: string;
|
|
66
|
+
input: AgentToolInputT;
|
|
67
|
+
/** Phase D: a person's fork invocation (see {@link SkillForkDispatch}). */
|
|
68
|
+
forSkill?: SkillForkDispatch;
|
|
69
|
+
}): Promise<DispatchOutcome>;
|