@capybara-hq/kernel 0.0.0-stage → 0.1.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +2 -0
- package/README.md +20 -2
- package/bootstrap.json +22 -0
- package/dist/admin/admin.controller.d.ts +139 -0
- package/dist/admin/admin.controller.js +238 -0
- package/dist/admin/extensions.controller.d.ts +100 -0
- package/dist/admin/extensions.controller.js +226 -0
- package/dist/admin/setup.controller.d.ts +36 -0
- package/dist/admin/setup.controller.js +106 -0
- package/dist/admin/setup.service.d.ts +47 -0
- package/dist/admin/setup.service.js +90 -0
- package/dist/agents/agents.controller.d.ts +205 -0
- package/dist/agents/agents.controller.js +144 -0
- package/dist/agents/agents.service.d.ts +177 -0
- package/dist/agents/agents.service.js +677 -0
- package/dist/agents/definition.d.ts +198 -0
- package/dist/agents/definition.js +152 -0
- package/dist/agents/models.controller.d.ts +13 -0
- package/dist/agents/models.controller.js +31 -0
- package/dist/agents/templates.controller.d.ts +15 -0
- package/dist/agents/templates.controller.js +37 -0
- package/dist/agents/templates.d.ts +83 -0
- package/dist/agents/templates.js +173 -0
- package/dist/catalog/admin-catalog.controller.d.ts +143 -0
- package/dist/catalog/admin-catalog.controller.js +245 -0
- package/dist/catalog/catalog.service.d.ts +430 -0
- package/dist/catalog/catalog.service.js +882 -0
- package/dist/catalog/claude/agents.d.ts +27 -0
- package/dist/catalog/claude/agents.js +270 -0
- package/dist/catalog/claude/commands.d.ts +50 -0
- package/dist/catalog/claude/commands.js +179 -0
- package/dist/catalog/claude/manifest.d.ts +69 -0
- package/dist/catalog/claude/manifest.js +134 -0
- package/dist/catalog/claude/marketplace.d.ts +35 -0
- package/dist/catalog/claude/marketplace.js +194 -0
- package/dist/catalog/claude/mcp.d.ts +33 -0
- package/dist/catalog/claude/mcp.js +226 -0
- package/dist/catalog/claude/report.d.ts +86 -0
- package/dist/catalog/claude/report.js +121 -0
- package/dist/catalog/claude/translate.d.ts +56 -0
- package/dist/catalog/claude/translate.js +857 -0
- package/dist/catalog/cli.d.ts +46 -0
- package/dist/catalog/cli.js +211 -0
- package/dist/catalog/git-source.d.ts +127 -0
- package/dist/catalog/git-source.js +520 -0
- package/dist/catalog/marketplace-fetch.d.ts +99 -0
- package/dist/catalog/marketplace-fetch.js +203 -0
- package/dist/catalog/marketplaces.controller.d.ts +97 -0
- package/dist/catalog/marketplaces.controller.js +197 -0
- package/dist/catalog/marketplaces.service.d.ts +340 -0
- package/dist/catalog/marketplaces.service.js +1217 -0
- package/dist/catalog/org-catalog.controller.d.ts +128 -0
- package/dist/catalog/org-catalog.controller.js +277 -0
- package/dist/catalog/org-catalog.service.d.ts +246 -0
- package/dist/catalog/org-catalog.service.js +625 -0
- package/dist/catalog/plugin-import.d.ts +436 -0
- package/dist/catalog/plugin-import.js +1069 -0
- package/dist/catalog/plugin-install.d.ts +447 -0
- package/dist/catalog/plugin-install.js +1333 -0
- package/dist/catalog/plugin-package.d.ts +143 -0
- package/dist/catalog/plugin-package.js +382 -0
- package/dist/catalog/plugin-upgrade.d.ts +222 -0
- package/dist/catalog/plugin-upgrade.js +1219 -0
- package/dist/catalog/requests.service.d.ts +162 -0
- package/dist/catalog/requests.service.js +504 -0
- package/dist/catalog/schema-path.d.ts +7 -0
- package/dist/catalog/schema-path.js +63 -0
- package/dist/catalog/upgrade-targets.d.ts +59 -0
- package/dist/catalog/upgrade-targets.js +90 -0
- package/dist/catalog/versions.d.ts +31 -0
- package/dist/catalog/versions.js +44 -0
- package/dist/channels/actions.d.ts +37 -0
- package/dist/channels/actions.js +121 -0
- package/dist/channels/cards.d.ts +44 -0
- package/dist/channels/cards.js +156 -0
- package/dist/channels/connections.controller.d.ts +59 -0
- package/dist/channels/connections.controller.js +115 -0
- package/dist/channels/connections.service.d.ts +187 -0
- package/dist/channels/connections.service.js +534 -0
- package/dist/channels/features.d.ts +12 -0
- package/dist/channels/features.js +22 -0
- package/dist/channels/inbound.d.ts +120 -0
- package/dist/channels/inbound.js +332 -0
- package/dist/channels/outbound.d.ts +140 -0
- package/dist/channels/outbound.js +1125 -0
- package/dist/channels/phrases.d.ts +100 -0
- package/dist/channels/phrases.js +81 -0
- package/dist/channels/supervisor.d.ts +182 -0
- package/dist/channels/supervisor.js +625 -0
- package/dist/channels/threads.d.ts +29 -0
- package/dist/channels/threads.js +104 -0
- package/dist/channels/webhook-url.d.ts +16 -0
- package/dist/channels/webhook-url.js +34 -0
- package/dist/channels/webhook.controller.d.ts +19 -0
- package/dist/channels/webhook.controller.js +72 -0
- package/dist/channels/webhook.d.ts +73 -0
- package/dist/channels/webhook.js +274 -0
- package/dist/config/docs.d.ts +9 -0
- package/dist/config/docs.js +85 -0
- package/dist/config/env.d.ts +6 -0
- package/dist/config/env.js +73 -0
- package/dist/config/fields.d.ts +42 -0
- package/dist/config/fields.js +214 -0
- package/dist/config/file-source.d.ts +3 -0
- package/dist/config/file-source.js +31 -0
- package/dist/config/load.d.ts +20 -0
- package/dist/config/load.js +98 -0
- package/dist/config/nacos-source.d.ts +31 -0
- package/dist/config/nacos-source.js +229 -0
- package/dist/config/schema.d.ts +223 -0
- package/dist/config/schema.js +1151 -0
- package/dist/config/sources.d.ts +18 -0
- package/dist/config/sources.js +59 -0
- package/dist/config/types.d.ts +9 -0
- package/dist/config/types.js +7 -0
- package/dist/conversations/artifacts.d.ts +52 -0
- package/dist/conversations/artifacts.js +137 -0
- package/dist/conversations/attachments.controller.d.ts +28 -0
- package/dist/conversations/attachments.controller.js +96 -0
- package/dist/conversations/attachments.service.d.ts +180 -0
- package/dist/conversations/attachments.service.js +578 -0
- package/dist/conversations/conversations.controller.d.ts +288 -0
- package/dist/conversations/conversations.controller.js +607 -0
- package/dist/conversations/conversations.service.d.ts +321 -0
- package/dist/conversations/conversations.service.js +754 -0
- package/dist/conversations/event-log.d.ts +122 -0
- package/dist/conversations/event-log.js +259 -0
- package/dist/conversations/events.d.ts +856 -0
- package/dist/conversations/events.js +639 -0
- package/dist/conversations/files.d.ts +92 -0
- package/dist/conversations/files.js +213 -0
- package/dist/conversations/outputs-read.d.ts +34 -0
- package/dist/conversations/outputs-read.js +37 -0
- package/dist/conversations/queue.d.ts +169 -0
- package/dist/conversations/queue.js +527 -0
- package/dist/conversations/sandbox-status.d.ts +21 -0
- package/dist/conversations/sandbox-status.js +24 -0
- package/dist/conversations/selection.d.ts +46 -0
- package/dist/conversations/selection.js +75 -0
- package/dist/conversations/titles.d.ts +93 -0
- package/dist/conversations/titles.js +422 -0
- package/dist/ctx/bus.d.ts +16 -0
- package/dist/ctx/bus.js +101 -0
- package/dist/ctx/create-ctx.d.ts +109 -0
- package/dist/ctx/create-ctx.js +592 -0
- package/dist/ctx/kv.d.ts +4 -0
- package/dist/ctx/kv.js +31 -0
- package/dist/ctx/lock.d.ts +4 -0
- package/dist/ctx/lock.js +39 -0
- package/dist/ctx/namespace.d.ts +6 -0
- package/dist/ctx/namespace.js +12 -0
- package/dist/ctx/queue.d.ts +25 -0
- package/dist/ctx/queue.js +150 -0
- package/dist/ctx/secrets.d.ts +45 -0
- package/dist/ctx/secrets.js +175 -0
- package/dist/db/kernel-schema.d.ts +1122 -0
- package/dist/db/kernel-schema.js +5 -0
- package/dist/db/migrator.d.ts +28 -0
- package/dist/db/migrator.js +140 -0
- package/dist/db/pool.d.ts +21 -0
- package/dist/db/pool.js +28 -0
- package/dist/db/sql-statements.d.ts +34 -0
- package/dist/db/sql-statements.js +168 -0
- package/dist/errors.d.ts +210 -0
- package/dist/errors.js +212 -0
- package/dist/evals/budget.d.ts +61 -0
- package/dist/evals/budget.js +181 -0
- package/dist/evals/diff.d.ts +55 -0
- package/dist/evals/diff.js +133 -0
- package/dist/evals/judge.d.ts +53 -0
- package/dist/evals/judge.js +149 -0
- package/dist/evals/plan.d.ts +47 -0
- package/dist/evals/plan.js +77 -0
- package/dist/evals/reconstruct.d.ts +137 -0
- package/dist/evals/reconstruct.js +322 -0
- package/dist/evals/recorded-tools.d.ts +54 -0
- package/dist/evals/recorded-tools.js +167 -0
- package/dist/evals/run-replay.d.ts +86 -0
- package/dist/evals/run-replay.js +502 -0
- package/dist/evals/runs.controller.d.ts +100 -0
- package/dist/evals/runs.controller.js +199 -0
- package/dist/evals/runs.service.d.ts +275 -0
- package/dist/evals/runs.service.js +836 -0
- package/dist/evals/sets.controller.d.ts +61 -0
- package/dist/evals/sets.controller.js +183 -0
- package/dist/evals/sets.service.d.ts +128 -0
- package/dist/evals/sets.service.js +558 -0
- package/dist/evals/snapshot.d.ts +76 -0
- package/dist/evals/snapshot.js +207 -0
- package/dist/evals/step-replay.d.ts +113 -0
- package/dist/evals/step-replay.js +181 -0
- package/dist/evals/trajectory.controller.d.ts +41 -0
- package/dist/evals/trajectory.controller.js +88 -0
- package/dist/evals/trajectory.d.ts +144 -0
- package/dist/evals/trajectory.js +338 -0
- package/dist/evals/trajectory.service.d.ts +108 -0
- package/dist/evals/trajectory.service.js +323 -0
- package/dist/evals/worker.d.ts +101 -0
- package/dist/evals/worker.js +789 -0
- package/dist/extensions/admin-ops.d.ts +105 -0
- package/dist/extensions/admin-ops.js +353 -0
- package/dist/extensions/admin-view.d.ts +79 -0
- package/dist/extensions/admin-view.js +327 -0
- package/dist/extensions/approvals.d.ts +119 -0
- package/dist/extensions/approvals.js +205 -0
- package/dist/extensions/blobs.d.ts +45 -0
- package/dist/extensions/blobs.js +160 -0
- package/dist/extensions/bootstrap.d.ts +149 -0
- package/dist/extensions/bootstrap.js +441 -0
- package/dist/extensions/cli.d.ts +61 -0
- package/dist/extensions/cli.js +165 -0
- package/dist/extensions/config-json-schema.d.ts +9 -0
- package/dist/extensions/config-json-schema.js +73 -0
- package/dist/extensions/deployment-config.d.ts +138 -0
- package/dist/extensions/deployment-config.js +394 -0
- package/dist/extensions/enabled.d.ts +31 -0
- package/dist/extensions/enabled.js +55 -0
- package/dist/extensions/hooks.d.ts +161 -0
- package/dist/extensions/hooks.js +425 -0
- package/dist/extensions/host.d.ts +577 -0
- package/dist/extensions/host.js +2071 -0
- package/dist/extensions/inflight.d.ts +69 -0
- package/dist/extensions/inflight.js +277 -0
- package/dist/extensions/installs.d.ts +166 -0
- package/dist/extensions/installs.js +253 -0
- package/dist/extensions/instance.d.ts +167 -0
- package/dist/extensions/instance.js +329 -0
- package/dist/extensions/ledger.d.ts +30 -0
- package/dist/extensions/ledger.js +50 -0
- package/dist/extensions/lifecycle.d.ts +80 -0
- package/dist/extensions/lifecycle.js +152 -0
- package/dist/extensions/migrate-lock.d.ts +51 -0
- package/dist/extensions/migrate-lock.js +100 -0
- package/dist/extensions/org-config.controller.d.ts +24 -0
- package/dist/extensions/org-config.controller.js +59 -0
- package/dist/extensions/org-config.d.ts +169 -0
- package/dist/extensions/org-config.js +520 -0
- package/dist/extensions/package.d.ts +115 -0
- package/dist/extensions/package.js +246 -0
- package/dist/extensions/permission-set.d.ts +117 -0
- package/dist/extensions/permission-set.js +184 -0
- package/dist/extensions/permission-view.d.ts +194 -0
- package/dist/extensions/permission-view.js +284 -0
- package/dist/extensions/registry.d.ts +24 -0
- package/dist/extensions/registry.js +56 -0
- package/dist/extensions/resolve.d.ts +12 -0
- package/dist/extensions/resolve.js +71 -0
- package/dist/extensions/sources.d.ts +69 -0
- package/dist/extensions/sources.js +120 -0
- package/dist/extensions/sync.d.ts +40 -0
- package/dist/extensions/sync.js +242 -0
- package/dist/files/previewers.controller.d.ts +46 -0
- package/dist/files/previewers.controller.js +105 -0
- package/dist/files/previewers.d.ts +100 -0
- package/dist/files/previewers.js +250 -0
- package/dist/http/api.module.d.ts +114 -0
- package/dist/http/api.module.js +448 -0
- package/dist/http/app.d.ts +77 -0
- package/dist/http/app.js +170 -0
- package/dist/http/error.filter.d.ts +21 -0
- package/dist/http/error.filter.js +85 -0
- package/dist/http/gateway.module.d.ts +15 -0
- package/dist/http/gateway.module.js +13 -0
- package/dist/http/health.controller.d.ts +26 -0
- package/dist/http/health.controller.js +79 -0
- package/dist/http/nest-logger.d.ts +20 -0
- package/dist/http/nest-logger.js +28 -0
- package/dist/http/plugin-dispatch.d.ts +68 -0
- package/dist/http/plugin-dispatch.js +200 -0
- package/dist/http/tokens.d.ts +131 -0
- package/dist/http/tokens.js +131 -0
- package/dist/http/zod.pipe.d.ts +8 -0
- package/dist/http/zod.pipe.js +14 -0
- package/dist/identity/accounts.d.ts +93 -0
- package/dist/identity/accounts.js +367 -0
- package/dist/identity/api-tokens.d.ts +73 -0
- package/dist/identity/api-tokens.js +197 -0
- package/dist/identity/audit.d.ts +23 -0
- package/dist/identity/audit.js +41 -0
- package/dist/identity/auth.controller.d.ts +40 -0
- package/dist/identity/auth.controller.js +130 -0
- package/dist/identity/auth.guard.d.ts +41 -0
- package/dist/identity/auth.guard.js +162 -0
- package/dist/identity/binding.d.ts +47 -0
- package/dist/identity/binding.js +84 -0
- package/dist/identity/cookies.d.ts +16 -0
- package/dist/identity/cookies.js +32 -0
- package/dist/identity/credential-check.d.ts +17 -0
- package/dist/identity/credential-check.js +24 -0
- package/dist/identity/enterprise-admin.d.ts +14 -0
- package/dist/identity/enterprise-admin.js +27 -0
- package/dist/identity/external.d.ts +106 -0
- package/dist/identity/external.js +337 -0
- package/dist/identity/hash.d.ts +2 -0
- package/dist/identity/hash.js +3 -0
- package/dist/identity/login.d.ts +6 -0
- package/dist/identity/login.js +20 -0
- package/dist/identity/me.controller.d.ts +61 -0
- package/dist/identity/me.controller.js +159 -0
- package/dist/identity/passwords.d.ts +6 -0
- package/dist/identity/passwords.js +37 -0
- package/dist/identity/principal.d.ts +56 -0
- package/dist/identity/principal.js +38 -0
- package/dist/identity/rate-limit.d.ts +55 -0
- package/dist/identity/rate-limit.js +121 -0
- package/dist/identity/sessions.d.ts +84 -0
- package/dist/identity/sessions.js +306 -0
- package/dist/identity/settings.d.ts +121 -0
- package/dist/identity/settings.js +248 -0
- package/dist/identity/sso.controller.d.ts +59 -0
- package/dist/identity/sso.controller.js +192 -0
- package/dist/identity/sso.d.ts +83 -0
- package/dist/identity/sso.js +202 -0
- package/dist/inbox/inbox.service.d.ts +43 -0
- package/dist/inbox/inbox.service.js +57 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.js +65 -0
- package/dist/kernel.d.ts +256 -0
- package/dist/kernel.js +1326 -0
- package/dist/log.d.ts +48 -0
- package/dist/log.js +229 -0
- package/dist/models/prices.d.ts +53 -0
- package/dist/models/prices.js +121 -0
- package/dist/models/purposes.controller.d.ts +19 -0
- package/dist/models/purposes.controller.js +56 -0
- package/dist/models/purposes.d.ts +140 -0
- package/dist/models/purposes.js +267 -0
- package/dist/net/proxy.d.ts +44 -0
- package/dist/net/proxy.js +162 -0
- package/dist/net/public-address.d.ts +60 -0
- package/dist/net/public-address.js +271 -0
- package/dist/net/safe-fetch.d.ts +38 -0
- package/dist/net/safe-fetch.js +140 -0
- package/dist/orgs/directory-sync.controller.d.ts +14 -0
- package/dist/orgs/directory-sync.controller.js +40 -0
- package/dist/orgs/directory-sync.d.ts +166 -0
- package/dist/orgs/directory-sync.js +558 -0
- package/dist/orgs/invitations.controller.d.ts +58 -0
- package/dist/orgs/invitations.controller.js +137 -0
- package/dist/orgs/invitations.service.d.ts +80 -0
- package/dist/orgs/invitations.service.js +217 -0
- package/dist/orgs/members.service.d.ts +63 -0
- package/dist/orgs/members.service.js +234 -0
- package/dist/orgs/offboarding.d.ts +141 -0
- package/dist/orgs/offboarding.js +398 -0
- package/dist/orgs/org-lock.d.ts +32 -0
- package/dist/orgs/org-lock.js +46 -0
- package/dist/orgs/org.guard.d.ts +35 -0
- package/dist/orgs/org.guard.js +95 -0
- package/dist/orgs/orgs.controller.d.ts +78 -0
- package/dist/orgs/orgs.controller.js +192 -0
- package/dist/orgs/orgs.service.d.ts +61 -0
- package/dist/orgs/orgs.service.js +209 -0
- package/dist/orgs/roles.d.ts +13 -0
- package/dist/orgs/roles.js +58 -0
- package/dist/orgs/settings.controller.d.ts +20 -0
- package/dist/orgs/settings.controller.js +53 -0
- package/dist/orgs/settings.service.d.ts +120 -0
- package/dist/orgs/settings.service.js +178 -0
- package/dist/packages/npm.d.ts +50 -0
- package/dist/packages/npm.js +218 -0
- package/dist/packages/provenance.d.ts +47 -0
- package/dist/packages/provenance.js +147 -0
- package/dist/packages/tgz.d.ts +76 -0
- package/dist/packages/tgz.js +225 -0
- package/dist/runtime/abort.d.ts +32 -0
- package/dist/runtime/abort.js +71 -0
- package/dist/runtime/checkpointer.d.ts +32 -0
- package/dist/runtime/checkpointer.js +243 -0
- package/dist/runtime/context/build.d.ts +254 -0
- package/dist/runtime/context/build.js +693 -0
- package/dist/runtime/context/claude-tools.d.ts +11 -0
- package/dist/runtime/context/claude-tools.js +24 -0
- package/dist/runtime/context/compaction.d.ts +26 -0
- package/dist/runtime/context/compaction.js +195 -0
- package/dist/runtime/context/pairing.d.ts +11 -0
- package/dist/runtime/context/pairing.js +82 -0
- package/dist/runtime/context/reminders.d.ts +5 -0
- package/dist/runtime/context/reminders.js +11 -0
- package/dist/runtime/context/skills.d.ts +105 -0
- package/dist/runtime/context/skills.js +283 -0
- package/dist/runtime/context/tokens.d.ts +19 -0
- package/dist/runtime/context/tokens.js +104 -0
- package/dist/runtime/conversation-lock.d.ts +40 -0
- package/dist/runtime/conversation-lock.js +97 -0
- package/dist/runtime/hook-calls.d.ts +84 -0
- package/dist/runtime/hook-calls.js +136 -0
- package/dist/runtime/langgraph-loop.d.ts +52 -0
- package/dist/runtime/langgraph-loop.js +247 -0
- package/dist/runtime/loop.d.ts +93 -0
- package/dist/runtime/loop.js +7 -0
- package/dist/runtime/maintenance.d.ts +80 -0
- package/dist/runtime/maintenance.js +147 -0
- package/dist/runtime/media-cache.d.ts +21 -0
- package/dist/runtime/media-cache.js +51 -0
- package/dist/runtime/model-call.d.ts +176 -0
- package/dist/runtime/model-call.js +1049 -0
- package/dist/runtime/providers.d.ts +86 -0
- package/dist/runtime/providers.js +224 -0
- package/dist/runtime/quota.d.ts +29 -0
- package/dist/runtime/quota.js +70 -0
- package/dist/runtime/run-finish.d.ts +45 -0
- package/dist/runtime/run-finish.js +69 -0
- package/dist/runtime/run-queue.d.ts +121 -0
- package/dist/runtime/run-queue.js +493 -0
- package/dist/runtime/run-worker.d.ts +138 -0
- package/dist/runtime/run-worker.js +805 -0
- package/dist/runtime/stream.controller.d.ts +34 -0
- package/dist/runtime/stream.controller.js +122 -0
- package/dist/runtime/stream.d.ts +63 -0
- package/dist/runtime/stream.js +262 -0
- package/dist/runtime/subagents/child.d.ts +80 -0
- package/dist/runtime/subagents/child.js +225 -0
- package/dist/runtime/subagents/definition.d.ts +103 -0
- package/dist/runtime/subagents/definition.js +392 -0
- package/dist/runtime/subagents/dispatch.d.ts +69 -0
- package/dist/runtime/subagents/dispatch.js +502 -0
- package/dist/runtime/subagents/limits.d.ts +23 -0
- package/dist/runtime/subagents/limits.js +34 -0
- package/dist/runtime/subagents/org-agents.d.ts +50 -0
- package/dist/runtime/subagents/org-agents.js +70 -0
- package/dist/runtime/subagents/preamble.d.ts +7 -0
- package/dist/runtime/subagents/preamble.js +11 -0
- package/dist/runtime/subagents/progress.d.ts +26 -0
- package/dist/runtime/subagents/progress.js +36 -0
- package/dist/runtime/subagents/roster.d.ts +55 -0
- package/dist/runtime/subagents/roster.js +111 -0
- package/dist/runtime/subagents/skill-fork.d.ts +123 -0
- package/dist/runtime/subagents/skill-fork.js +259 -0
- package/dist/runtime/usage-report.d.ts +163 -0
- package/dist/runtime/usage-report.js +550 -0
- package/dist/runtime/waits.d.ts +233 -0
- package/dist/runtime/waits.js +883 -0
- package/dist/sandbox/leases.d.ts +169 -0
- package/dist/sandbox/leases.js +515 -0
- package/dist/sandbox/lifecycle.d.ts +21 -0
- package/dist/sandbox/lifecycle.js +68 -0
- package/dist/sandbox/sandbox.service.d.ts +249 -0
- package/dist/sandbox/sandbox.service.js +908 -0
- package/dist/skills/catalog.d.ts +149 -0
- package/dist/skills/catalog.js +405 -0
- package/dist/skills/changes.controller.d.ts +56 -0
- package/dist/skills/changes.controller.js +136 -0
- package/dist/skills/changes.service.d.ts +175 -0
- package/dist/skills/changes.service.js +805 -0
- package/dist/skills/invocable.controller.d.ts +23 -0
- package/dist/skills/invocable.controller.js +50 -0
- package/dist/skills/invocation-keys.d.ts +23 -0
- package/dist/skills/invocation-keys.js +44 -0
- package/dist/skills/invoke.d.ts +135 -0
- package/dist/skills/invoke.js +286 -0
- package/dist/skills/package.d.ts +87 -0
- package/dist/skills/package.js +227 -0
- package/dist/skills/skills.controller.d.ts +40 -0
- package/dist/skills/skills.controller.js +110 -0
- package/dist/skills/skills.service.d.ts +192 -0
- package/dist/skills/skills.service.js +567 -0
- package/dist/storage/prefix.d.ts +36 -0
- package/dist/storage/prefix.js +104 -0
- package/dist/storage/purge.d.ts +27 -0
- package/dist/storage/purge.js +75 -0
- package/dist/storage/storage.service.d.ts +44 -0
- package/dist/storage/storage.service.js +145 -0
- package/dist/text.d.ts +13 -0
- package/dist/text.js +13 -0
- package/dist/tools/approvals.controller.d.ts +53 -0
- package/dist/tools/approvals.controller.js +128 -0
- package/dist/tools/approvals.service.d.ts +172 -0
- package/dist/tools/approvals.service.js +568 -0
- package/dist/tools/breaker.d.ts +28 -0
- package/dist/tools/breaker.js +72 -0
- package/dist/tools/builtins/agent.d.ts +81 -0
- package/dist/tools/builtins/agent.js +223 -0
- package/dist/tools/builtins/ask-user.d.ts +28 -0
- package/dist/tools/builtins/ask-user.js +139 -0
- package/dist/tools/builtins/read-tool-output.d.ts +18 -0
- package/dist/tools/builtins/read-tool-output.js +108 -0
- package/dist/tools/builtins/sandbox/bash.d.ts +16 -0
- package/dist/tools/builtins/sandbox/bash.js +137 -0
- package/dist/tools/builtins/sandbox/common.d.ts +114 -0
- package/dist/tools/builtins/sandbox/common.js +304 -0
- package/dist/tools/builtins/sandbox/deliver.d.ts +5 -0
- package/dist/tools/builtins/sandbox/deliver.js +180 -0
- package/dist/tools/builtins/sandbox/edit.d.ts +4 -0
- package/dist/tools/builtins/sandbox/edit.js +98 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +25 -0
- package/dist/tools/builtins/sandbox/glob-match.js +240 -0
- package/dist/tools/builtins/sandbox/glob.d.ts +4 -0
- package/dist/tools/builtins/sandbox/glob.js +104 -0
- package/dist/tools/builtins/sandbox/grep.d.ts +9 -0
- package/dist/tools/builtins/sandbox/grep.js +133 -0
- package/dist/tools/builtins/sandbox/index.d.ts +12 -0
- package/dist/tools/builtins/sandbox/index.js +27 -0
- package/dist/tools/builtins/sandbox/names.d.ts +7 -0
- package/dist/tools/builtins/sandbox/names.js +20 -0
- package/dist/tools/builtins/sandbox/read.d.ts +8 -0
- package/dist/tools/builtins/sandbox/read.js +121 -0
- package/dist/tools/builtins/sandbox/write.d.ts +4 -0
- package/dist/tools/builtins/sandbox/write.js +88 -0
- package/dist/tools/builtins/skill-load.d.ts +53 -0
- package/dist/tools/builtins/skill-load.js +446 -0
- package/dist/tools/builtins/skill-write.d.ts +59 -0
- package/dist/tools/builtins/skill-write.js +244 -0
- package/dist/tools/builtins/tool-search.d.ts +31 -0
- package/dist/tools/builtins/tool-search.js +171 -0
- package/dist/tools/connector-content.controller.d.ts +34 -0
- package/dist/tools/connector-content.controller.js +78 -0
- package/dist/tools/connector-content.d.ts +104 -0
- package/dist/tools/connector-content.js +267 -0
- package/dist/tools/connectors.controller.d.ts +210 -0
- package/dist/tools/connectors.controller.js +234 -0
- package/dist/tools/connectors.service.d.ts +303 -0
- package/dist/tools/connectors.service.js +1102 -0
- package/dist/tools/credentials.d.ts +139 -0
- package/dist/tools/credentials.js +351 -0
- package/dist/tools/drift.d.ts +141 -0
- package/dist/tools/drift.js +539 -0
- package/dist/tools/elicitation.d.ts +81 -0
- package/dist/tools/elicitation.js +266 -0
- package/dist/tools/endpoint.d.ts +18 -0
- package/dist/tools/endpoint.js +115 -0
- package/dist/tools/info.d.ts +67 -0
- package/dist/tools/info.js +113 -0
- package/dist/tools/naming.d.ts +27 -0
- package/dist/tools/naming.js +47 -0
- package/dist/tools/oauth/discovery.d.ts +65 -0
- package/dist/tools/oauth/discovery.js +307 -0
- package/dist/tools/oauth/flow.d.ts +63 -0
- package/dist/tools/oauth/flow.js +237 -0
- package/dist/tools/oauth/oauth.controller.d.ts +31 -0
- package/dist/tools/oauth/oauth.controller.js +95 -0
- package/dist/tools/oauth/tokens.d.ts +111 -0
- package/dist/tools/oauth/tokens.js +258 -0
- package/dist/tools/outputs.d.ts +61 -0
- package/dist/tools/outputs.js +156 -0
- package/dist/tools/pipeline.d.ts +322 -0
- package/dist/tools/pipeline.js +1236 -0
- package/dist/tools/policy.d.ts +60 -0
- package/dist/tools/policy.js +236 -0
- package/dist/tools/questions.controller.d.ts +24 -0
- package/dist/tools/questions.controller.js +58 -0
- package/dist/tools/questions.service.d.ts +103 -0
- package/dist/tools/questions.service.js +295 -0
- package/dist/tools/redact.d.ts +20 -0
- package/dist/tools/redact.js +60 -0
- package/dist/tools/registry.d.ts +246 -0
- package/dist/tools/registry.js +481 -0
- package/dist/tools/resources.d.ts +16 -0
- package/dist/tools/resources.js +76 -0
- package/dist/tools/specs.d.ts +14 -0
- package/dist/tools/specs.js +31 -0
- package/dist/tools/validate.d.ts +20 -0
- package/dist/tools/validate.js +183 -0
- package/dist/tools/view.d.ts +43 -0
- package/dist/tools/view.js +225 -0
- package/dist/ui/embed-token.d.ts +31 -0
- package/dist/ui/embed-token.js +132 -0
- package/dist/ui/registry.d.ts +58 -0
- package/dist/ui/registry.js +90 -0
- package/dist/ui/ui-stream.d.ts +37 -0
- package/dist/ui/ui-stream.js +162 -0
- package/dist/ui/views.controller.d.ts +81 -0
- package/dist/ui/views.controller.js +261 -0
- package/dist/ui/views.d.ts +155 -0
- package/dist/ui/views.js +306 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.js +6 -0
- package/package.json +67 -3
- package/src/migrations/0001_init.sql +8 -0
- package/src/migrations/0002_secrets.sql +8 -0
- package/src/migrations/0003_identity.sql +117 -0
- package/src/migrations/0004_plugin_org_config_nullable.sql +3 -0
- package/src/migrations/0005_agents.sql +27 -0
- package/src/migrations/0006_conversations.sql +37 -0
- package/src/migrations/0007_checkpoints.sql +26 -0
- package/src/migrations/0008_runs_trigger_seq.sql +3 -0
- package/src/migrations/0009_runs_active_unique.sql +4 -0
- package/src/migrations/0010_tools.sql +125 -0
- package/src/migrations/0011_approvals_spec.sql +10 -0
- package/src/migrations/0012_run_waits.sql +24 -0
- package/src/migrations/0013_app_tools_source.sql +4 -0
- package/src/migrations/0014_tool_specs.sql +8 -0
- package/src/migrations/0015_tool_drift.sql +20 -0
- package/src/migrations/0016_plugin_permissions.sql +11 -0
- package/src/migrations/0017_identity_sources.sql +6 -0
- package/src/migrations/0018_channels.sql +74 -0
- package/src/migrations/0019_identity_trust.sql +17 -0
- package/src/migrations/0020_channel_card_lookup.sql +10 -0
- package/src/migrations/0021_org_storage_purge.sql +9 -0
- package/src/migrations/0022_attachments.sql +29 -0
- package/src/migrations/0023_sandboxes.sql +37 -0
- package/src/migrations/0024_skills.sql +46 -0
- package/src/migrations/0025_skills_catalog_idx.sql +6 -0
- package/src/migrations/0026_skill_changes.sql +34 -0
- package/src/migrations/0027_model_prices.sql +18 -0
- package/src/migrations/0028_evals.sql +105 -0
- package/src/migrations/0029_model_purposes.sql +18 -0
- package/src/migrations/0030_plugin_installs.sql +73 -0
- package/src/migrations/0031_plugin_snapshot_source.sql +6 -0
- package/src/migrations/0032_plugin_deployment_configs.sql +10 -0
- package/src/migrations/0033_rename_apps_to_connectors.sql +25 -0
- package/src/migrations/0034_directory.sql +49 -0
- package/src/migrations/0035_catalogs.sql +40 -0
- package/src/migrations/0036_app_import_staging.sql +17 -0
- package/src/migrations/0037_directory_installs.sql +92 -0
- package/src/migrations/0038_channel_inbound_mode.sql +6 -0
- package/src/migrations/0039_channel_card_pending.sql +8 -0
- package/src/migrations/0040_usage_report_sweep.sql +10 -0
- package/src/migrations/0041_rename_plugins_to_extensions.sql +38 -0
- package/src/migrations/0042_rename_directory_to_catalog.sql +80 -0
- package/src/migrations/0043_rename_app_installs_to_plugin_installs.sql +20 -0
- package/src/migrations/0044_catalog_one_kind.sql +90 -0
- package/src/migrations/0045_plugin_dependencies.sql +9 -0
- package/src/migrations/0046_git_sources.sql +25 -0
- package/src/migrations/0047_marketplace_entry_heads.sql +7 -0
- package/src/migrations/0048_marketplace_entry_trees.sql +8 -0
- package/src/migrations/0049_plugin_upgrades.sql +37 -0
- package/src/migrations/0050_bootstrap.sql +53 -0
- package/src/migrations/0051_claude_compat.sql +26 -0
- package/src/migrations/0052_conversations_account_agent_idx.sql +5 -0
- package/src/migrations/0053_subagents.sql +73 -0
- package/src/migrations/0054_subagent_wait_expiry.sql +7 -0
- package/src/migrations/0055_subagent_parent_indexes.sql +10 -0
- package/src/migrations/0056_approval_reason.sql +3 -0
- package/src/migrations/0057_conversation_titles.sql +11 -0
- package/src/migrations/0058_conversation_selection.sql +4 -0
- package/src/migrations/0059_conversation_queue.sql +22 -0
- package/src/migrations/0060_file_previewers.sql +10 -0
- package/src/migrations/0061_queue_selection.sql +5 -0
- package/src/migrations/0062_queued_skill.sql +8 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Claude Code tool-name map (phase B, spec §9.4): skills written for Claude Code name its tools
|
|
3
|
+
* (`Bash`, `Read`, `Skill`, …). When a conversation's skills include one from a Claude Code plugin,
|
|
4
|
+
* the run start writes this text into the `skills_catalog` snapshot (`toolMap`), and request
|
|
5
|
+
* building renders it from the log, so a replay never depends on this constant. Model-visible:
|
|
6
|
+
* English, fixed (Decision 15: not tailored to the agent's tools; it says "when it is in your
|
|
7
|
+
* tools" instead). Changing it only affects snapshots written afterwards: a conversation's next
|
|
8
|
+
* run writes a new snapshot announcing the new map, and old snapshots keep their text (phase C
|
|
9
|
+
* changed the Task / Agent line, sub-agents spec §16.5).
|
|
10
|
+
*/
|
|
11
|
+
export declare const CLAUDE_CODE_TOOL_MAP: string;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Claude Code tool-name map (phase B, spec §9.4): skills written for Claude Code name its tools
|
|
3
|
+
* (`Bash`, `Read`, `Skill`, …). When a conversation's skills include one from a Claude Code plugin,
|
|
4
|
+
* the run start writes this text into the `skills_catalog` snapshot (`toolMap`), and request
|
|
5
|
+
* building renders it from the log, so a replay never depends on this constant. Model-visible:
|
|
6
|
+
* English, fixed (Decision 15: not tailored to the agent's tools; it says "when it is in your
|
|
7
|
+
* tools" instead). Changing it only affects snapshots written afterwards: a conversation's next
|
|
8
|
+
* run writes a new snapshot announcing the new map, and old snapshots keep their text (phase C
|
|
9
|
+
* changed the Task / Agent line, sub-agents spec §16.5).
|
|
10
|
+
*/
|
|
11
|
+
export const CLAUDE_CODE_TOOL_MAP = [
|
|
12
|
+
"Some skills in this conversation were written for Claude Code and name its tools. Use these tools instead:",
|
|
13
|
+
"- Bash -> sandbox_bash",
|
|
14
|
+
"- Read -> sandbox_read; Write -> sandbox_write; Edit and MultiEdit -> sandbox_edit; Glob -> sandbox_glob; Grep -> sandbox_grep",
|
|
15
|
+
'- Skill -> skill_load (a name such as "superpowers:brainstorming" also works)',
|
|
16
|
+
"- TodoWrite -> todo__write when it is in your tools; otherwise keep the task list in your replies",
|
|
17
|
+
"- AskUserQuestion -> ask_user",
|
|
18
|
+
"- ToolSearch -> tool_search when it is in your tools",
|
|
19
|
+
"- Task and Agent (sub-agents) -> agent when it is in your tools (subagent_type names one of the types its description lists; model names haiku / sonnet / opus -> fast / standard / capable; SendMessage to a sub-agent -> agent with resume); otherwise not available: do the steps yourself, in order",
|
|
20
|
+
"- TaskOutput, TaskStop -> not available",
|
|
21
|
+
"- Any other tool a skill names (for example WebFetch, WebSearch, NotebookEdit, EnterWorktree) -> not available unless one of your tools does the same job",
|
|
22
|
+
// biome-ignore lint/suspicious/noTemplateCurlyInString: the literal Claude Code variable the model reads
|
|
23
|
+
"The sandbox tools exist only when this agent has a sandbox; without them a skill's scripts cannot run. A path such as ${CLAUDE_PLUGIN_ROOT}/skills/<name>/... means /skills/<name>/... after skill_load has copied that skill into the sandbox.",
|
|
24
|
+
].join("\n");
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ModelInfo, ModelRequest } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import type { ConversationEvent } from "../../conversations/events.js";
|
|
3
|
+
/** 压缩请求的标记:放在 system 中,便于识别(model-fake 据此返回摘要)。 */
|
|
4
|
+
export declare const COMPACTION_MARKER = "CAPYBARA_COMPACTION";
|
|
5
|
+
/** 压缩请求的输出上限。 */
|
|
6
|
+
export declare const COMPACTION_MAX_OUTPUT_TOKENS = 4096;
|
|
7
|
+
/** 估算 token 数达到上下文窗口的 `threshold`(如 0.8)时压缩。 */
|
|
8
|
+
export declare function shouldCompact(estimatedTokens: number, model: ModelInfo, threshold: number): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* 压缩计划:保留最近 `keepRecentTurns` 个「以 user_message 开头的轮次」原文,把更早、且尚未被
|
|
11
|
+
* 上一条摘要覆盖的内容转成纯文本对话记录(上一条摘要放在记录开头,由新摘要合并)。
|
|
12
|
+
* `coversUpToSeq` 为第一条保留的 user_message 之前的最大 seq。可压缩的内容为空时返回 null。
|
|
13
|
+
*/
|
|
14
|
+
export declare function compactionPlan(events: ConversationEvent[], keepRecentTurns: number): {
|
|
15
|
+
coversUpToSeq: number;
|
|
16
|
+
transcript: string;
|
|
17
|
+
} | null;
|
|
18
|
+
/** 摘要请求:system 为带标记的英文摘要指令,对话记录作为唯一一条 user 消息。 */
|
|
19
|
+
export declare function buildCompactionRequest(transcript: string, model: string): ModelRequest;
|
|
20
|
+
/** 摘要(去掉首尾空白)至少 min(200, 原文 5%) 个字符才接受;过短视为失败(可靠性清单 A)。 */
|
|
21
|
+
export declare function acceptSummary(text: string, transcript: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* 压缩失败后的退避:最近一次 `compaction_failed`(attempt = n)之后新增的 user 轮次少于 2^n 时
|
|
24
|
+
* 返回 true(本轮跳过压缩)。之后已有成功摘要、或从未失败,返回 false。
|
|
25
|
+
*/
|
|
26
|
+
export declare function compactionBackoff(events: ConversationEvent[]): boolean;
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { latestSummary } from "./build.js";
|
|
2
|
+
/** 压缩请求的标记:放在 system 中,便于识别(model-fake 据此返回摘要)。 */
|
|
3
|
+
export const COMPACTION_MARKER = "CAPYBARA_COMPACTION";
|
|
4
|
+
/** 压缩请求的输出上限。 */
|
|
5
|
+
export const COMPACTION_MAX_OUTPUT_TOKENS = 4096;
|
|
6
|
+
/** 摘要的最短长度:200 字符或原文的 5%,取较小者。 */
|
|
7
|
+
const MIN_SUMMARY_CHARS = 200;
|
|
8
|
+
const MIN_SUMMARY_RATIO = 0.05;
|
|
9
|
+
/** 摘要指令(模型可见,英文)。 */
|
|
10
|
+
const COMPACTION_INSTRUCTION = [
|
|
11
|
+
COMPACTION_MARKER,
|
|
12
|
+
"You are summarizing the earlier part of a conversation between people and an AI agent, so the agent can continue without the full history.",
|
|
13
|
+
"Write a concise but complete summary that preserves: the users' goals and requests, decisions made, facts and data established (names, numbers, identifiers, file names, links), work completed and its results, and open questions or pending tasks.",
|
|
14
|
+
"If the transcript starts with an earlier summary, merge it into your summary.",
|
|
15
|
+
"Write in the same language as the conversation. Output only the summary text.",
|
|
16
|
+
].join("\n");
|
|
17
|
+
/** 估算 token 数达到上下文窗口的 `threshold`(如 0.8)时压缩。 */
|
|
18
|
+
export function shouldCompact(estimatedTokens, model, threshold) {
|
|
19
|
+
return estimatedTokens >= model.contextWindow * threshold;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 压缩计划:保留最近 `keepRecentTurns` 个「以 user_message 开头的轮次」原文,把更早、且尚未被
|
|
23
|
+
* 上一条摘要覆盖的内容转成纯文本对话记录(上一条摘要放在记录开头,由新摘要合并)。
|
|
24
|
+
* `coversUpToSeq` 为第一条保留的 user_message 之前的最大 seq。可压缩的内容为空时返回 null。
|
|
25
|
+
*/
|
|
26
|
+
export function compactionPlan(events, keepRecentTurns) {
|
|
27
|
+
const sorted = [...events].sort((a, b) => a.seq - b.seq);
|
|
28
|
+
const prev = latestSummary(sorted);
|
|
29
|
+
const floor = prev ? prev.payload.coversUpToSeq : Number.NEGATIVE_INFINITY;
|
|
30
|
+
const candidate = sorted.filter((e) => e.seq > floor && e.type !== "compaction_summary");
|
|
31
|
+
const userIdx = [];
|
|
32
|
+
candidate.forEach((e, i) => {
|
|
33
|
+
if (e.type === "user_message")
|
|
34
|
+
userIdx.push(i);
|
|
35
|
+
});
|
|
36
|
+
let boundary;
|
|
37
|
+
if (keepRecentTurns <= 0)
|
|
38
|
+
boundary = candidate.length;
|
|
39
|
+
else if (userIdx.length < keepRecentTurns)
|
|
40
|
+
boundary = 0;
|
|
41
|
+
else
|
|
42
|
+
boundary = userIdx[userIdx.length - keepRecentTurns];
|
|
43
|
+
boundary = keepToolPairs(candidate, userIdx, boundary);
|
|
44
|
+
const lines = [];
|
|
45
|
+
for (const e of candidate.slice(0, boundary)) {
|
|
46
|
+
const line = transcriptLine(e);
|
|
47
|
+
if (line)
|
|
48
|
+
lines.push(line);
|
|
49
|
+
}
|
|
50
|
+
if (lines.length === 0)
|
|
51
|
+
return null;
|
|
52
|
+
const boundarySeq = candidate[boundary]?.seq ?? Number.POSITIVE_INFINITY;
|
|
53
|
+
let coversUpToSeq = floor;
|
|
54
|
+
for (const e of sorted)
|
|
55
|
+
if (e.seq < boundarySeq && e.seq > coversUpToSeq)
|
|
56
|
+
coversUpToSeq = e.seq;
|
|
57
|
+
const parts = prev ? [`[Earlier summary]\n${prev.payload.text}`, ...lines] : lines;
|
|
58
|
+
return { coversUpToSeq, transcript: parts.join("\n\n") };
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 边界不得切开工具调用与其结果:工具运行期间到达的插话(user_message)记在 assistant 的 tool_call 与
|
|
62
|
+
* tool_result 之间,若它成了边界,assistant 进摘要而结果留在原文,构建请求时结果因找不到调用被丢弃。
|
|
63
|
+
* 做法:边界之前仍「未结束」(结果在边界之后)的调用存在时,把边界退到最早那条未结束 assistant 之前的
|
|
64
|
+
* 最近一个 user_message(没有则 0,即不压缩这段),重复直到没有被切开的调用。结果从未写入的调用不算
|
|
65
|
+
* (它们由配对守卫补 unknown,与边界无关)。
|
|
66
|
+
*/
|
|
67
|
+
function keepToolPairs(candidate, userIdx, boundary) {
|
|
68
|
+
const key = (runId, callId) => `${runId ?? ""}\u0000${callId}`;
|
|
69
|
+
const resultAt = new Map();
|
|
70
|
+
candidate.forEach((e, i) => {
|
|
71
|
+
if (e.type !== "tool_result")
|
|
72
|
+
return;
|
|
73
|
+
const k = key(e.runId, e.payload.callId);
|
|
74
|
+
if (!resultAt.has(k))
|
|
75
|
+
resultAt.set(k, i);
|
|
76
|
+
});
|
|
77
|
+
for (;;) {
|
|
78
|
+
let earliestOpen = -1;
|
|
79
|
+
for (let i = 0; i < boundary && earliestOpen < 0; i++) {
|
|
80
|
+
const e = candidate[i];
|
|
81
|
+
if (e.type !== "assistant_message")
|
|
82
|
+
continue;
|
|
83
|
+
for (const b of e.payload.content) {
|
|
84
|
+
if (b.type !== "tool_call")
|
|
85
|
+
continue;
|
|
86
|
+
const at = resultAt.get(key(e.runId, b.id));
|
|
87
|
+
if (at !== undefined && at >= boundary) {
|
|
88
|
+
earliestOpen = i;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (earliestOpen < 0)
|
|
94
|
+
return boundary;
|
|
95
|
+
let next = 0;
|
|
96
|
+
for (const u of userIdx)
|
|
97
|
+
if (u < earliestOpen)
|
|
98
|
+
next = u;
|
|
99
|
+
boundary = next;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function transcriptLine(e) {
|
|
103
|
+
switch (e.type) {
|
|
104
|
+
case "user_message": {
|
|
105
|
+
const text = renderBlocks(e.payload.content);
|
|
106
|
+
return text ? `User: ${text}` : null;
|
|
107
|
+
}
|
|
108
|
+
case "assistant_message": {
|
|
109
|
+
const text = renderBlocks(e.payload.content);
|
|
110
|
+
return text ? `Assistant: ${text}` : null;
|
|
111
|
+
}
|
|
112
|
+
case "reminder":
|
|
113
|
+
return `System reminder: ${e.payload.text}`;
|
|
114
|
+
// phase D: a forked skill's report is user content of the request (build.ts)
|
|
115
|
+
case "skill_fork_result":
|
|
116
|
+
return `User: ${e.payload.text}`;
|
|
117
|
+
case "tool_result":
|
|
118
|
+
return `Tool result ${e.payload.toolKey}${e.payload.isError ? " (error)" : ""}: ${e.payload.content}`;
|
|
119
|
+
default:
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* 内容块转纯文本;思考块不进记录,媒体块记为 `[image: "<name>"]` / `[document: "<name>"]`
|
|
125
|
+
* (名字按 JSON.stringify 加引号,与请求里的占位一致)。
|
|
126
|
+
*/
|
|
127
|
+
function renderBlocks(blocks) {
|
|
128
|
+
const out = [];
|
|
129
|
+
for (const b of blocks) {
|
|
130
|
+
switch (b.type) {
|
|
131
|
+
case "text":
|
|
132
|
+
if (b.text)
|
|
133
|
+
out.push(b.text);
|
|
134
|
+
break;
|
|
135
|
+
case "tool_call":
|
|
136
|
+
out.push(`[Tool call ${b.name}: ${JSON.stringify(b.input) ?? ""}]`);
|
|
137
|
+
break;
|
|
138
|
+
case "tool_result":
|
|
139
|
+
out.push(`[Tool result${b.isError ? " (error)" : ""}: ${b.content}]`);
|
|
140
|
+
break;
|
|
141
|
+
case "thinking":
|
|
142
|
+
break;
|
|
143
|
+
case "image":
|
|
144
|
+
case "document":
|
|
145
|
+
out.push(`[${b.type}: ${JSON.stringify(b.name ?? "attachment")}]`);
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return out.join("\n");
|
|
150
|
+
}
|
|
151
|
+
/** 摘要请求:system 为带标记的英文摘要指令,对话记录作为唯一一条 user 消息。 */
|
|
152
|
+
export function buildCompactionRequest(transcript, model) {
|
|
153
|
+
return {
|
|
154
|
+
model,
|
|
155
|
+
system: [{ text: COMPACTION_INSTRUCTION, cache: false }],
|
|
156
|
+
messages: [
|
|
157
|
+
{
|
|
158
|
+
role: "user",
|
|
159
|
+
content: [{ type: "text", text: `<transcript>\n${transcript}\n</transcript>` }],
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
tools: [],
|
|
163
|
+
maxOutputTokens: COMPACTION_MAX_OUTPUT_TOKENS,
|
|
164
|
+
params: {},
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/** 摘要(去掉首尾空白)至少 min(200, 原文 5%) 个字符才接受;过短视为失败(可靠性清单 A)。 */
|
|
168
|
+
export function acceptSummary(text, transcript) {
|
|
169
|
+
const min = Math.min(MIN_SUMMARY_CHARS, transcript.length * MIN_SUMMARY_RATIO);
|
|
170
|
+
return text.trim().length >= min;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* 压缩失败后的退避:最近一次 `compaction_failed`(attempt = n)之后新增的 user 轮次少于 2^n 时
|
|
174
|
+
* 返回 true(本轮跳过压缩)。之后已有成功摘要、或从未失败,返回 false。
|
|
175
|
+
*/
|
|
176
|
+
export function compactionBackoff(events) {
|
|
177
|
+
let failure = null;
|
|
178
|
+
for (const e of events) {
|
|
179
|
+
if (e.type === "compaction_failed" && (!failure || e.seq > failure.seq)) {
|
|
180
|
+
failure = { seq: e.seq, attempt: e.payload.attempt };
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (!failure)
|
|
184
|
+
return false;
|
|
185
|
+
let turns = 0;
|
|
186
|
+
for (const e of events) {
|
|
187
|
+
if (e.seq <= failure.seq)
|
|
188
|
+
continue;
|
|
189
|
+
if (e.type === "compaction_summary")
|
|
190
|
+
return false;
|
|
191
|
+
if (e.type === "user_message")
|
|
192
|
+
turns++;
|
|
193
|
+
}
|
|
194
|
+
return turns < 2 ** failure.attempt;
|
|
195
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ModelMessage } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
/** 补给缺失结果的 tool_call 的结果文案(模型可见,英文)。 */
|
|
3
|
+
export declare const UNKNOWN_RESULT_TEXT = "Result unknown: the call was interrupted before a result was recorded. Verify the outcome before retrying.";
|
|
4
|
+
/**
|
|
5
|
+
* tool_call / tool_result 配对守卫(spec 6.2 的独立管线阶段):
|
|
6
|
+
* - assistant 消息里的 tool_call,若在下一条 assistant 消息之前没有对应的 tool_result,
|
|
7
|
+
* 紧跟该 assistant 消息补一条 user 消息,内含 `isError: true` 的 unknown 结果;
|
|
8
|
+
* - 找不到对应 call(或出现在下一条 assistant 之后)的孤立 tool_result 删除,删空的消息一并去掉。
|
|
9
|
+
* 不修改入参。
|
|
10
|
+
*/
|
|
11
|
+
export declare function guardToolPairs(messages: ModelMessage[]): ModelMessage[];
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/** 补给缺失结果的 tool_call 的结果文案(模型可见,英文)。 */
|
|
2
|
+
export const UNKNOWN_RESULT_TEXT = "Result unknown: the call was interrupted before a result was recorded. Verify the outcome before retrying.";
|
|
3
|
+
/**
|
|
4
|
+
* tool_call / tool_result 配对守卫(spec 6.2 的独立管线阶段):
|
|
5
|
+
* - assistant 消息里的 tool_call,若在下一条 assistant 消息之前没有对应的 tool_result,
|
|
6
|
+
* 紧跟该 assistant 消息补一条 user 消息,内含 `isError: true` 的 unknown 结果;
|
|
7
|
+
* - 找不到对应 call(或出现在下一条 assistant 之后)的孤立 tool_result 删除,删空的消息一并去掉。
|
|
8
|
+
* 不修改入参。
|
|
9
|
+
*/
|
|
10
|
+
export function guardToolPairs(messages) {
|
|
11
|
+
const out = [];
|
|
12
|
+
let i = 0;
|
|
13
|
+
while (i < messages.length) {
|
|
14
|
+
const m = messages[i];
|
|
15
|
+
i++;
|
|
16
|
+
if (m.role !== "assistant") {
|
|
17
|
+
// 不在任何 assistant 之后窗口内的结果都是孤立的。
|
|
18
|
+
pushFiltered(out, m, new Set());
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
out.push(m);
|
|
22
|
+
const callIds = m.content.flatMap((b) => (b.type === "tool_call" ? [b.id] : []));
|
|
23
|
+
if (callIds.length === 0)
|
|
24
|
+
continue;
|
|
25
|
+
// 收集到下一条 assistant 之前的消息,并统计其中已有的结果。
|
|
26
|
+
const window = [];
|
|
27
|
+
while (i < messages.length && messages[i].role !== "assistant") {
|
|
28
|
+
window.push(messages[i]);
|
|
29
|
+
i++;
|
|
30
|
+
}
|
|
31
|
+
const answered = new Set();
|
|
32
|
+
for (const w of window) {
|
|
33
|
+
if (w.role === "system")
|
|
34
|
+
continue;
|
|
35
|
+
for (const b of w.content)
|
|
36
|
+
if (b.type === "tool_result")
|
|
37
|
+
answered.add(b.callId);
|
|
38
|
+
}
|
|
39
|
+
const missing = callIds.filter((id) => !answered.has(id));
|
|
40
|
+
if (missing.length > 0) {
|
|
41
|
+
out.push({
|
|
42
|
+
role: "user",
|
|
43
|
+
content: missing.map((callId) => ({
|
|
44
|
+
type: "tool_result",
|
|
45
|
+
callId,
|
|
46
|
+
content: UNKNOWN_RESULT_TEXT,
|
|
47
|
+
isError: true,
|
|
48
|
+
})),
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
const valid = new Set(callIds);
|
|
52
|
+
// 同一 call 只保留第一个结果。
|
|
53
|
+
for (const w of window)
|
|
54
|
+
pushFiltered(out, w, valid);
|
|
55
|
+
}
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
/** 只保留 callId 在 `valid` 中(且尚未用过)的 tool_result;消息删空则丢弃。 */
|
|
59
|
+
function pushFiltered(out, m, valid) {
|
|
60
|
+
if (m.role === "system") {
|
|
61
|
+
out.push(m);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (!m.content.some((b) => b.type === "tool_result")) {
|
|
65
|
+
out.push(m);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const content = m.content.filter((b) => {
|
|
69
|
+
if (b.type !== "tool_result")
|
|
70
|
+
return true;
|
|
71
|
+
if (!valid.has(b.callId))
|
|
72
|
+
return false;
|
|
73
|
+
valid.delete(b.callId);
|
|
74
|
+
return true;
|
|
75
|
+
});
|
|
76
|
+
if (content.length === m.content.length) {
|
|
77
|
+
out.push(m);
|
|
78
|
+
}
|
|
79
|
+
else if (content.length > 0) {
|
|
80
|
+
out.push({ ...m, content });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** 距本轮步数上限还剩几步时开始提醒。 */
|
|
2
|
+
const TURN_LIMIT_LEAD = 2;
|
|
3
|
+
/**
|
|
4
|
+
* 轮次收尾的尾部提醒:`step >= maxSteps - 2` 时返回英文软提醒,否则 null。
|
|
5
|
+
* 调用方先把它写成 `reminder` 事件,再由 `buildModelRequest` 按事件重建进请求。
|
|
6
|
+
*/
|
|
7
|
+
export function turnLimitReminder(step, maxSteps) {
|
|
8
|
+
if (step < maxSteps - TURN_LIMIT_LEAD)
|
|
9
|
+
return null;
|
|
10
|
+
return `You are close to the step limit for this turn (step ${step} of ${maxSteps}). Wrap up and give the user your best answer now.`;
|
|
11
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { ConversationEvent, EventPayload } from "../../conversations/events.js";
|
|
2
|
+
/**
|
|
3
|
+
* 技能目录在模型请求里的渲染(M5 T14,Ruling M17)。纯函数:只取决于日志里的 `skills_catalog` 快照,
|
|
4
|
+
* 请求可由日志还原。模型可见文案一律英文。
|
|
5
|
+
*/
|
|
6
|
+
/** 快照里的一项技能。 */
|
|
7
|
+
export type CatalogSkill = EventPayload<"skills_catalog">["skills"][number];
|
|
8
|
+
/** The whole `skills_catalog` payload. */
|
|
9
|
+
export type SkillsSnapshot = EventPayload<"skills_catalog">;
|
|
10
|
+
/** A pinned skill in a snapshot (phase B, spec §9.1). */
|
|
11
|
+
export type PinnedSkill = NonNullable<SkillsSnapshot["pinned"]>[number];
|
|
12
|
+
/** 日志里的 `skills_catalog` 事件。 */
|
|
13
|
+
export type SkillsCatalogEvent = Extract<ConversationEvent, {
|
|
14
|
+
type: "skills_catalog";
|
|
15
|
+
}>;
|
|
16
|
+
/** 加载技能的内置工具名。 */
|
|
17
|
+
export declare const SKILL_LOAD = "skill_load";
|
|
18
|
+
/** 目录开头的说明(system 缓存段里的第一份目录)。 */
|
|
19
|
+
export declare const SKILLS_CATALOG_HEADER: string;
|
|
20
|
+
/** 目录里每个技能描述最多的码点数(超出确定地截断;`skill_load` 仍返回完整正文)。 */
|
|
21
|
+
export declare const CATALOG_DESCRIPTION_MAX_CHARS = 300;
|
|
22
|
+
/** 第一份目录(进 system 缓存段),按名字排序。 */
|
|
23
|
+
export declare function skillsCatalogText(skills: readonly CatalogSkill[]): string;
|
|
24
|
+
/** 两份快照是否相同(按 id、版本、名字、描述与来源)。顺序无关。 */
|
|
25
|
+
export declare function sameSkills(a: readonly CatalogSkill[], b: readonly CatalogSkill[]): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Two pinned lists are the same: id, version and source in order (absent = []). Bodies follow the
|
|
28
|
+
* source. The order counts, so a reordered `skills.pinned` writes a new snapshot; that snapshot
|
|
29
|
+
* renders no message ({@link pinnedChangeText} is "" and the catalog part is skipped), and only the
|
|
30
|
+
* system segment of a new conversation or a compaction restore shows the new order. This is
|
|
31
|
+
* deliberate and consistent from the log: do not "fix" the missing message.
|
|
32
|
+
*/
|
|
33
|
+
export declare function samePinned(a: readonly PinnedSkill[] | undefined, b: readonly PinnedSkill[] | undefined): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Two snapshots are the same: {@link sameSkills} (`plugin` is not compared, so a snapshot written
|
|
36
|
+
* before phase B stays current), {@link samePinned} and the same `toolMap` (absent = undefined).
|
|
37
|
+
*/
|
|
38
|
+
export declare function sameSnapshot(a: SkillsSnapshot, b: SkillsSnapshot): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* 目录变更提醒(之后的快照在所在位置以 system 消息追加):新增、移除、更新(同一 id 的版本、描述或来源变了:
|
|
41
|
+
* 试用草稿被拒绝 / 批准了别人的同号版本时,内容变了而版本号可能不变)。
|
|
42
|
+
* `prev` 为上一份快照(没有为空)。
|
|
43
|
+
*/
|
|
44
|
+
export declare function skillsChangeText(prev: readonly CatalogSkill[], next: readonly CatalogSkill[], pinnedIds?: ReadonlySet<string>): string;
|
|
45
|
+
/** 压缩摘要之后补上的「当前目录」(与 system 里的第一份不同时):完整列出,替代之前的目录与提醒。 */
|
|
46
|
+
export declare function skillsCurrentText(skills: readonly CatalogSkill[]): string;
|
|
47
|
+
/**
|
|
48
|
+
* The line restored after a compaction summary whose range holds inline skill invocations
|
|
49
|
+
* (`names`: distinct, code point order); empty for none. Bodies are not re-injected.
|
|
50
|
+
*/
|
|
51
|
+
export declare function invokedSkillsText(names: readonly string[]): string;
|
|
52
|
+
/** The distinct names (code point order) of the inline invocations in `events` up to `upToSeq`. */
|
|
53
|
+
export declare function invokedSkillNames(events: readonly ConversationEvent[], upToSeq: number): string[];
|
|
54
|
+
/** A skill a person invoked: the version recorded in their message. */
|
|
55
|
+
export interface InvokedSkill {
|
|
56
|
+
id: string;
|
|
57
|
+
version: number;
|
|
58
|
+
source: string;
|
|
59
|
+
name: string;
|
|
60
|
+
plugin?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The latest invocation in `events` of the skill `name` (its bare name, or `<plugin>:<name>`),
|
|
64
|
+
* from the `skill` field of the `user_message`s; undefined when none.
|
|
65
|
+
*/
|
|
66
|
+
export declare function latestInvocation(events: readonly ConversationEvent[], name: string): InvokedSkill | undefined;
|
|
67
|
+
/** 日志里的全部 `skills_catalog` 事件,按 seq 升序。 */
|
|
68
|
+
export declare function skillsCatalogEvents(events: readonly ConversationEvent[]): SkillsCatalogEvent[];
|
|
69
|
+
/** 最新一份快照;没有为 null。 */
|
|
70
|
+
export declare function latestSkillsCatalog(events: readonly ConversationEvent[]): SkillsCatalogEvent | null;
|
|
71
|
+
/**
|
|
72
|
+
* 进 system 缓存段的快照:第一份快照,且它之前没有任何 `model_call`(对话已经发过请求之后才有技能时,
|
|
73
|
+
* 改为在所在位置追加提醒,已发送的前缀不变)。没有为 null。
|
|
74
|
+
*/
|
|
75
|
+
export declare function systemSkillsCatalog(events: readonly ConversationEvent[]): SkillsCatalogEvent | null;
|
|
76
|
+
/** The header of the pinned skills in the system cache segment. */
|
|
77
|
+
export declare const PINNED_SKILLS_HEADER: string;
|
|
78
|
+
/** One pinned skill with its body. */
|
|
79
|
+
export declare function pinnedBlock(p: PinnedSkill): string;
|
|
80
|
+
/** The pinned skills of the system snapshot (non-empty), after the catalog. */
|
|
81
|
+
export declare function pinnedSystemText(pinned: readonly PinnedSkill[]): string;
|
|
82
|
+
/**
|
|
83
|
+
* The pinned change notice between two snapshots ({@link samePinned} false): each entry that is new
|
|
84
|
+
* or has another version or source, with its whole body; then the names of the removed ones.
|
|
85
|
+
* Empty when nothing changed.
|
|
86
|
+
*/
|
|
87
|
+
export declare function pinnedChangeText(prev: readonly PinnedSkill[] | undefined, next: readonly PinnedSkill[] | undefined): string;
|
|
88
|
+
/** The pinned skills after a compaction summary, when they differ from the system snapshot's. */
|
|
89
|
+
export declare function pinnedCurrentText(pinned: readonly PinnedSkill[] | undefined): string;
|
|
90
|
+
/** The tool-name map change notice (the map differs from the previous one). */
|
|
91
|
+
export declare function toolMapChangeText(next: string | undefined): string;
|
|
92
|
+
/**
|
|
93
|
+
* The one system message of a later snapshot: the catalog change (when the skills differ, or when
|
|
94
|
+
* nothing else differs: logs before phase B render exactly as before), the pinned change, the
|
|
95
|
+
* tool-name map change; joined by blank lines.
|
|
96
|
+
*/
|
|
97
|
+
export declare function snapshotChangeText(prev: SkillsSnapshot | undefined, next: SkillsSnapshot): string;
|
|
98
|
+
/**
|
|
99
|
+
* What follows a compaction summary when the covered snapshot is not the system one: today's
|
|
100
|
+
* current catalog (when the skills differ from the system snapshot's), the current pinned skills
|
|
101
|
+
* (when they differ), the tool-name map (when it differs); joined by blank lines, "" for nothing.
|
|
102
|
+
*/
|
|
103
|
+
export declare function snapshotCurrentText(system: SkillsSnapshot | undefined, covered: SkillsSnapshot): string;
|
|
104
|
+
/** The system snapshot's text after the agent's instructions: catalog, pinned skills, tool map. */
|
|
105
|
+
export declare function snapshotSystemText(s: SkillsSnapshot): string;
|