@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
package/dist/log.d.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Logger } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
/** 日志级别,按严重程度递增。 */
|
|
3
|
+
export declare const LOG_LEVELS: readonly ["debug", "info", "warn", "error"];
|
|
4
|
+
/** 日志级别。 */
|
|
5
|
+
export type LogLevel = (typeof LOG_LEVELS)[number];
|
|
6
|
+
/** 内核 logger:在插件 Logger 之上增加 debug、运行时改级别与登记需打码的密钥值。 */
|
|
7
|
+
export interface KernelLogger extends Logger {
|
|
8
|
+
debug(msg: string, fields?: Record<string, unknown>): void;
|
|
9
|
+
readonly level: LogLevel;
|
|
10
|
+
/** 修改级别;非法级别抛错且保持原级别。 */
|
|
11
|
+
setLevel(level: string): void;
|
|
12
|
+
/**
|
|
13
|
+
* 登记部署方(运维)给的密钥值:内核配置与插件部署级配置里的 secret 字段。此后日志消息与字段里出现这些值都替换为
|
|
14
|
+
* `[REDACTED]`(顶层的 `ts` / `level` 不打码)。字符串与数字(转成字符串)登记,布尔不登记;
|
|
15
|
+
* 数组与对象递归展开其中的标量;短于 4 个字符的值不登记(会误伤普通文本)。
|
|
16
|
+
* 数值字段的字符串形式等于已登记值时同样打码。
|
|
17
|
+
*/
|
|
18
|
+
addSecrets(values: readonly unknown[]): void;
|
|
19
|
+
/**
|
|
20
|
+
* 登记组织级插件配置里的密钥值(来源是组织管理员,不完全可信):只登记长度 ≥ 12 的值,
|
|
21
|
+
* 放在单独的有界集合里(默认最多 10000 个,满了淘汰最早登记的),防止任一租户用 `info` 这类短值
|
|
22
|
+
* 遮蔽其他租户的日志,也防止集合无限增长;只在字段里打码,不动顶层 `msg`。展开规则同 `addSecrets`。
|
|
23
|
+
*/
|
|
24
|
+
addOrgSecrets(values: readonly unknown[]): void;
|
|
25
|
+
/**
|
|
26
|
+
* 按已登记的密钥(部署方与组织来源,同日志字段的规则)给一段文本打码;写到日志之外的地方(如 PG 里给后台看的
|
|
27
|
+
* 报错说明)之前用。
|
|
28
|
+
*/
|
|
29
|
+
redact(text: string): string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 用与 logger 相同的匹配器打码任意文本(工具结果等不经过日志的内容用):展开规则同 `addOrgSecrets`
|
|
33
|
+
* (URL 形式的值另登记 `user:password@` 片段),只取长度 ≥ `minLength` 的值(默认 12,同组织来源密钥;
|
|
34
|
+
* 不得小于匹配器的分桶前缀长度 4)。没有可用的值时原样返回。
|
|
35
|
+
*/
|
|
36
|
+
export declare function createRedactor(values: readonly unknown[], minLength?: number): (s: string) => string;
|
|
37
|
+
/**
|
|
38
|
+
* 创建结构化 JSON logger:每条日志写一行 `{ ts, level, msg, ...fields }`。
|
|
39
|
+
* 字段不能覆盖 ts / level / msg;Error 序列化为 name / message / stack;
|
|
40
|
+
* 经 `addSecrets` 登记的部署方密钥在消息与字段的任何字符串里都被打码;经 `addOrgSecrets` 登记的组织来源密钥
|
|
41
|
+
* 只在字段里打码,不动顶层 msg;顶层 ts / level 从不打码。
|
|
42
|
+
* `opts.orgSecretCapacity` 为组织来源密钥集合的容量(测试用);`opts.onMatcherBuild` 在每次重建匹配器时调用(测试用)。
|
|
43
|
+
*/
|
|
44
|
+
export declare function createLogger(level?: string, opts?: {
|
|
45
|
+
write?: (line: string) => void;
|
|
46
|
+
orgSecretCapacity?: number;
|
|
47
|
+
onMatcherBuild?: () => void;
|
|
48
|
+
}): KernelLogger;
|
package/dist/log.js
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { secretScalars } from "./config/fields.js";
|
|
2
|
+
/** 日志级别,按严重程度递增。 */
|
|
3
|
+
export const LOG_LEVELS = ["debug", "info", "warn", "error"];
|
|
4
|
+
const LEVELS = LOG_LEVELS;
|
|
5
|
+
const REDACTED = "[REDACTED]";
|
|
6
|
+
const RESERVED = new Set(["ts", "level", "msg"]);
|
|
7
|
+
/** 部署方密钥的最短登记长度:过短的值打码会误伤普通文本。 */
|
|
8
|
+
const MIN_SECRET_LEN = 4;
|
|
9
|
+
/** 组织来源密钥的最短登记长度。 */
|
|
10
|
+
const MIN_ORG_SECRET_LEN = 12;
|
|
11
|
+
/** 组织来源密钥集合的默认容量。 */
|
|
12
|
+
const ORG_SECRET_CAPACITY = 10_000;
|
|
13
|
+
/** 匹配器按前缀分桶的前缀长度(不超过两种最短登记长度)。 */
|
|
14
|
+
const PREFIX_LEN = MIN_SECRET_LEN;
|
|
15
|
+
/**
|
|
16
|
+
* 编译后的打码匹配器:按值的前 `PREFIX_LEN` 个字符分桶,桶内按长度降序。扫描字符串时每个位置查一次桶、
|
|
17
|
+
* 记下最长命中的区间,重叠或相邻的区间合并后替换;开销与字符串长度成正比,与登记的密钥数基本无关。
|
|
18
|
+
*/
|
|
19
|
+
function compileMatcher(values) {
|
|
20
|
+
const buckets = new Map();
|
|
21
|
+
for (const v of values) {
|
|
22
|
+
const key = v.slice(0, PREFIX_LEN);
|
|
23
|
+
const b = buckets.get(key);
|
|
24
|
+
if (b)
|
|
25
|
+
b.push(v);
|
|
26
|
+
else
|
|
27
|
+
buckets.set(key, [v]);
|
|
28
|
+
}
|
|
29
|
+
if (buckets.size === 0)
|
|
30
|
+
return (s) => s;
|
|
31
|
+
for (const b of buckets.values())
|
|
32
|
+
b.sort((a, c) => c.length - a.length);
|
|
33
|
+
return (s) => {
|
|
34
|
+
if (s.length < PREFIX_LEN)
|
|
35
|
+
return s;
|
|
36
|
+
// 每个位置都记下最长命中的区间 [i, i + len),不跳过(否则先开始的密钥会吞掉与之重叠的后一个密钥的开头,
|
|
37
|
+
// 使后者剩余部分明文输出);重叠或相邻的区间合并后整段替换为一个 [REDACTED]。
|
|
38
|
+
let out = "";
|
|
39
|
+
let last = 0;
|
|
40
|
+
let runStart = -1;
|
|
41
|
+
let runEnd = -1;
|
|
42
|
+
for (let i = 0; i <= s.length - PREFIX_LEN; i++) {
|
|
43
|
+
const b = buckets.get(s.slice(i, i + PREFIX_LEN));
|
|
44
|
+
const hit = b?.find((v) => s.startsWith(v, i));
|
|
45
|
+
if (!hit)
|
|
46
|
+
continue;
|
|
47
|
+
const end = i + hit.length;
|
|
48
|
+
if (runStart >= 0 && i <= runEnd) {
|
|
49
|
+
if (end > runEnd)
|
|
50
|
+
runEnd = end;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (runStart >= 0) {
|
|
54
|
+
out += s.slice(last, runStart) + REDACTED;
|
|
55
|
+
last = runEnd;
|
|
56
|
+
}
|
|
57
|
+
runStart = i;
|
|
58
|
+
runEnd = end;
|
|
59
|
+
}
|
|
60
|
+
if (runStart < 0)
|
|
61
|
+
return s;
|
|
62
|
+
return out + s.slice(last, runStart) + REDACTED + s.slice(runEnd);
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 用与 logger 相同的匹配器打码任意文本(工具结果等不经过日志的内容用):展开规则同 `addOrgSecrets`
|
|
67
|
+
* (URL 形式的值另登记 `user:password@` 片段),只取长度 ≥ `minLength` 的值(默认 12,同组织来源密钥;
|
|
68
|
+
* 不得小于匹配器的分桶前缀长度 4)。没有可用的值时原样返回。
|
|
69
|
+
*/
|
|
70
|
+
export function createRedactor(values, minLength = MIN_ORG_SECRET_LEN) {
|
|
71
|
+
const min = Math.max(minLength, PREFIX_LEN);
|
|
72
|
+
const set = new Set();
|
|
73
|
+
for (const v of secretScalars(values)) {
|
|
74
|
+
for (const s of expandSecret(v))
|
|
75
|
+
if (s.length >= min)
|
|
76
|
+
set.add(s);
|
|
77
|
+
}
|
|
78
|
+
return compileMatcher(set);
|
|
79
|
+
}
|
|
80
|
+
function isLevel(v) {
|
|
81
|
+
return LEVELS.includes(v);
|
|
82
|
+
}
|
|
83
|
+
function parseLevel(v) {
|
|
84
|
+
if (!isLevel(v))
|
|
85
|
+
throw new Error(`invalid log level "${v}" (expected ${LEVELS.join(", ")})`);
|
|
86
|
+
return v;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* URL 形式的密钥(连接串)另外登记 `user:password@` 片段:同一凭据可能以别的 host / 参数出现。
|
|
90
|
+
* 不单独登记裸密码——开发环境常见「密码 = 用户名 = 库名 = schema 名」,会把正常字段全部打码。
|
|
91
|
+
*/
|
|
92
|
+
function expandSecret(value) {
|
|
93
|
+
const out = [value];
|
|
94
|
+
try {
|
|
95
|
+
const u = new URL(value);
|
|
96
|
+
if (u.password)
|
|
97
|
+
out.push(`${u.username}:${u.password}@`);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// 不是 URL
|
|
101
|
+
}
|
|
102
|
+
return out;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* 创建结构化 JSON logger:每条日志写一行 `{ ts, level, msg, ...fields }`。
|
|
106
|
+
* 字段不能覆盖 ts / level / msg;Error 序列化为 name / message / stack;
|
|
107
|
+
* 经 `addSecrets` 登记的部署方密钥在消息与字段的任何字符串里都被打码;经 `addOrgSecrets` 登记的组织来源密钥
|
|
108
|
+
* 只在字段里打码,不动顶层 msg;顶层 ts / level 从不打码。
|
|
109
|
+
* `opts.orgSecretCapacity` 为组织来源密钥集合的容量(测试用);`opts.onMatcherBuild` 在每次重建匹配器时调用(测试用)。
|
|
110
|
+
*/
|
|
111
|
+
export function createLogger(level = "info", opts = {}) {
|
|
112
|
+
let current = parseLevel(level);
|
|
113
|
+
const write = opts.write ?? ((line) => process.stdout.write(`${line}\n`));
|
|
114
|
+
const orgCapacity = opts.orgSecretCapacity ?? ORG_SECRET_CAPACITY;
|
|
115
|
+
/** 部署方密钥(数量由配置决定,不淘汰)。 */
|
|
116
|
+
const secrets = new Set();
|
|
117
|
+
/** 组织来源密钥:Set 保持插入顺序,重复登记时移到末尾,满了从头淘汰(LRU)。 */
|
|
118
|
+
const orgSecrets = new Set();
|
|
119
|
+
/** 字段用:两个集合的并集;任一集合变化后置空,下次打码时重建一次。 */
|
|
120
|
+
let matcher;
|
|
121
|
+
/** 顶层 msg 用:只含部署方密钥;部署方集合变化后置空。 */
|
|
122
|
+
let deployMatcher;
|
|
123
|
+
const redact = (s) => {
|
|
124
|
+
if (!matcher) {
|
|
125
|
+
matcher = compileMatcher(new Set([...secrets, ...orgSecrets]));
|
|
126
|
+
opts.onMatcherBuild?.();
|
|
127
|
+
}
|
|
128
|
+
return matcher(s);
|
|
129
|
+
};
|
|
130
|
+
/** 顶层 msg 只按部署方密钥打码:组织来源的值不能遮蔽日志消息。 */
|
|
131
|
+
const redactMsg = (s) => {
|
|
132
|
+
if (!deployMatcher) {
|
|
133
|
+
deployMatcher = compileMatcher(secrets);
|
|
134
|
+
opts.onMatcherBuild?.();
|
|
135
|
+
}
|
|
136
|
+
return deployMatcher(s);
|
|
137
|
+
};
|
|
138
|
+
const isSecret = (v) => secrets.has(v) || orgSecrets.has(v);
|
|
139
|
+
const serialize = (entry) => {
|
|
140
|
+
const seen = new WeakSet();
|
|
141
|
+
return JSON.stringify(entry, function (key, value) {
|
|
142
|
+
if (this === entry && RESERVED.has(key)) {
|
|
143
|
+
return key === "msg" && typeof value === "string" ? redactMsg(value) : value;
|
|
144
|
+
}
|
|
145
|
+
if (typeof value === "string")
|
|
146
|
+
return redact(value);
|
|
147
|
+
if ((typeof value === "number" || typeof value === "bigint") && isSecret(String(value))) {
|
|
148
|
+
return REDACTED;
|
|
149
|
+
}
|
|
150
|
+
if (value instanceof Error) {
|
|
151
|
+
const e = {
|
|
152
|
+
name: value.name,
|
|
153
|
+
message: value.message,
|
|
154
|
+
stack: value.stack,
|
|
155
|
+
};
|
|
156
|
+
if (value.cause !== undefined)
|
|
157
|
+
e.cause = value.cause;
|
|
158
|
+
return e;
|
|
159
|
+
}
|
|
160
|
+
if (typeof value === "bigint")
|
|
161
|
+
return value.toString();
|
|
162
|
+
if (typeof value === "object" && value !== null) {
|
|
163
|
+
if (seen.has(value))
|
|
164
|
+
return "[Circular]";
|
|
165
|
+
seen.add(value);
|
|
166
|
+
}
|
|
167
|
+
return value;
|
|
168
|
+
});
|
|
169
|
+
};
|
|
170
|
+
const emit = (lvl, msg, fields) => {
|
|
171
|
+
if (LEVELS.indexOf(lvl) < LEVELS.indexOf(current))
|
|
172
|
+
return;
|
|
173
|
+
const entry = { ts: new Date().toISOString(), level: lvl, msg };
|
|
174
|
+
for (const [k, v] of Object.entries(fields ?? {}))
|
|
175
|
+
if (!RESERVED.has(k))
|
|
176
|
+
entry[k] = v;
|
|
177
|
+
let line;
|
|
178
|
+
try {
|
|
179
|
+
line = serialize(entry);
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
line = serialize({ ts: entry.ts, level: lvl, msg, logError: "unserializable fields" });
|
|
183
|
+
}
|
|
184
|
+
write(line);
|
|
185
|
+
};
|
|
186
|
+
return {
|
|
187
|
+
debug: (msg, fields) => emit("debug", msg, fields),
|
|
188
|
+
info: (msg, fields) => emit("info", msg, fields),
|
|
189
|
+
warn: (msg, fields) => emit("warn", msg, fields),
|
|
190
|
+
error: (msg, fields) => emit("error", msg, fields),
|
|
191
|
+
get level() {
|
|
192
|
+
return current;
|
|
193
|
+
},
|
|
194
|
+
redact: (text) => redact(text),
|
|
195
|
+
setLevel(l) {
|
|
196
|
+
current = parseLevel(l);
|
|
197
|
+
},
|
|
198
|
+
addSecrets(values) {
|
|
199
|
+
for (const v of secretScalars(values)) {
|
|
200
|
+
for (const s of expandSecret(v)) {
|
|
201
|
+
if (s.length >= MIN_SECRET_LEN && !secrets.has(s)) {
|
|
202
|
+
secrets.add(s);
|
|
203
|
+
matcher = undefined;
|
|
204
|
+
deployMatcher = undefined;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
addOrgSecrets(values) {
|
|
210
|
+
for (const v of secretScalars(values)) {
|
|
211
|
+
for (const s of expandSecret(v)) {
|
|
212
|
+
if (s.length < MIN_ORG_SECRET_LEN)
|
|
213
|
+
continue;
|
|
214
|
+
if (orgSecrets.has(s)) {
|
|
215
|
+
// 刷新位置,不改变集合内容,无需重建匹配器
|
|
216
|
+
orgSecrets.delete(s);
|
|
217
|
+
orgSecrets.add(s);
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
orgSecrets.add(s);
|
|
221
|
+
while (orgSecrets.size > orgCapacity) {
|
|
222
|
+
orgSecrets.delete(orgSecrets.values().next().value);
|
|
223
|
+
}
|
|
224
|
+
matcher = undefined;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { ModelUsage } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import type { KernelDb } from "../db/kernel-schema.js";
|
|
4
|
+
/**
|
|
5
|
+
* 一个模型的价格(C2):每百万 token,币种为部署设置 `priceCurrency`。由企业管理员录入,插件不声明价格。
|
|
6
|
+
* 缓存读 / 写价为 null 时按输入价计。
|
|
7
|
+
*/
|
|
8
|
+
export interface ModelPrice {
|
|
9
|
+
provider: string;
|
|
10
|
+
model: string;
|
|
11
|
+
inputPerMTok: number;
|
|
12
|
+
outputPerMTok: number;
|
|
13
|
+
cacheReadPerMTok: number | null;
|
|
14
|
+
cacheWritePerMTok: number | null;
|
|
15
|
+
}
|
|
16
|
+
/** 价格表:键为 {@link priceKey}(`${provider}\n${model}`)。 */
|
|
17
|
+
export type PriceTable = ReadonlyMap<string, ModelPrice>;
|
|
18
|
+
/** 价格表的键。供应商名与模型 id 不含换行,拼接不会撞键。 */
|
|
19
|
+
export declare const priceKey: (provider: string, model: string) => string;
|
|
20
|
+
/** 一次调用的估算成本;没有价格 → null。用量的四项互不重叠(见 plugin-sdk `ModelUsage`)。 */
|
|
21
|
+
export declare function costOf(usage: ModelUsage, price: ModelPrice | undefined): number | null;
|
|
22
|
+
/** `PUT /api/v1/admin/model-prices` 的 body:设一个价格,或 `price: null` 删除。 */
|
|
23
|
+
export declare const MODEL_PRICE_PUT: z.ZodUnion<readonly [z.ZodObject<{
|
|
24
|
+
provider: z.ZodString;
|
|
25
|
+
model: z.ZodString;
|
|
26
|
+
inputPerMTok: z.ZodNumber;
|
|
27
|
+
outputPerMTok: z.ZodNumber;
|
|
28
|
+
cacheReadPerMTok: z.ZodNullable<z.ZodNumber>;
|
|
29
|
+
cacheWritePerMTok: z.ZodNullable<z.ZodNumber>;
|
|
30
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
31
|
+
provider: z.ZodString;
|
|
32
|
+
model: z.ZodString;
|
|
33
|
+
price: z.ZodNull;
|
|
34
|
+
}, z.core.$strict>]>;
|
|
35
|
+
export type ModelPricePut = z.infer<typeof MODEL_PRICE_PUT>;
|
|
36
|
+
/** 模型价格(PG `model_prices`):每次读都查库,不在进程内缓存(多副本下改价立刻生效)。 */
|
|
37
|
+
export declare class PricesService {
|
|
38
|
+
private readonly db;
|
|
39
|
+
constructor(db: KernelDb);
|
|
40
|
+
/** 全部价格,按 provider、model 排序。 */
|
|
41
|
+
list(): Promise<ModelPrice[]>;
|
|
42
|
+
/** 价格表(按 {@link priceKey} 查)。 */
|
|
43
|
+
table(): Promise<PriceTable>;
|
|
44
|
+
/**
|
|
45
|
+
* 设置或删除(`price: null`)一个模型的价格:事务内取企业管理员锁并复核发起人仍是活跃企业管理员
|
|
46
|
+
* (否则 `forbidden`),写审计 `model_price.updated` / `model_price.deleted`。
|
|
47
|
+
*/
|
|
48
|
+
put(input: ModelPrice | {
|
|
49
|
+
provider: string;
|
|
50
|
+
model: string;
|
|
51
|
+
price: null;
|
|
52
|
+
}, actorAccountId: string, actorTokenId?: string): Promise<void>;
|
|
53
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ApiError } from "../errors.js";
|
|
3
|
+
import { audit } from "../identity/audit.js";
|
|
4
|
+
import { lockEnterpriseAdminsAndAuthorize } from "../identity/enterprise-admin.js";
|
|
5
|
+
/** 价格表的键。供应商名与模型 id 不含换行,拼接不会撞键。 */
|
|
6
|
+
export const priceKey = (provider, model) => `${provider}\n${model}`;
|
|
7
|
+
/** 一次调用的估算成本;没有价格 → null。用量的四项互不重叠(见 plugin-sdk `ModelUsage`)。 */
|
|
8
|
+
export function costOf(usage, price) {
|
|
9
|
+
if (price === undefined)
|
|
10
|
+
return null;
|
|
11
|
+
const cacheRead = price.cacheReadPerMTok ?? price.inputPerMTok;
|
|
12
|
+
const cacheWrite = price.cacheWritePerMTok ?? price.inputPerMTok;
|
|
13
|
+
return ((usage.inputTokens * price.inputPerMTok +
|
|
14
|
+
usage.outputTokens * price.outputPerMTok +
|
|
15
|
+
usage.cacheReadTokens * cacheRead +
|
|
16
|
+
usage.cacheWriteTokens * cacheWrite) /
|
|
17
|
+
1_000_000);
|
|
18
|
+
}
|
|
19
|
+
/** 单价:≥ 0 且 ≤ 1e6(有限数)。 */
|
|
20
|
+
const PerMTok = z.number().min(0).max(1_000_000);
|
|
21
|
+
const Name = z.string().min(1).max(200);
|
|
22
|
+
/** `PUT /api/v1/admin/model-prices` 的 body:设一个价格,或 `price: null` 删除。 */
|
|
23
|
+
export const MODEL_PRICE_PUT = z.union([
|
|
24
|
+
z
|
|
25
|
+
.object({
|
|
26
|
+
provider: Name,
|
|
27
|
+
model: Name,
|
|
28
|
+
inputPerMTok: PerMTok,
|
|
29
|
+
outputPerMTok: PerMTok,
|
|
30
|
+
cacheReadPerMTok: PerMTok.nullable(),
|
|
31
|
+
cacheWritePerMTok: PerMTok.nullable(),
|
|
32
|
+
})
|
|
33
|
+
.strict(),
|
|
34
|
+
z.object({ provider: Name, model: Name, price: z.null() }).strict(),
|
|
35
|
+
]);
|
|
36
|
+
const num = (v) => Number(v);
|
|
37
|
+
const numOrNull = (v) => (v === null ? null : Number(v));
|
|
38
|
+
/** 模型价格(PG `model_prices`):每次读都查库,不在进程内缓存(多副本下改价立刻生效)。 */
|
|
39
|
+
export class PricesService {
|
|
40
|
+
db;
|
|
41
|
+
constructor(db) {
|
|
42
|
+
this.db = db;
|
|
43
|
+
}
|
|
44
|
+
/** 全部价格,按 provider、model 排序。 */
|
|
45
|
+
async list() {
|
|
46
|
+
const rows = await this.db
|
|
47
|
+
.selectFrom("model_prices")
|
|
48
|
+
.select([
|
|
49
|
+
"provider",
|
|
50
|
+
"model",
|
|
51
|
+
"input_per_mtok",
|
|
52
|
+
"output_per_mtok",
|
|
53
|
+
"cache_read_per_mtok",
|
|
54
|
+
"cache_write_per_mtok",
|
|
55
|
+
])
|
|
56
|
+
.orderBy("provider")
|
|
57
|
+
.orderBy("model")
|
|
58
|
+
.execute();
|
|
59
|
+
return rows.map((r) => ({
|
|
60
|
+
provider: r.provider,
|
|
61
|
+
model: r.model,
|
|
62
|
+
inputPerMTok: num(r.input_per_mtok),
|
|
63
|
+
outputPerMTok: num(r.output_per_mtok),
|
|
64
|
+
cacheReadPerMTok: numOrNull(r.cache_read_per_mtok),
|
|
65
|
+
cacheWritePerMTok: numOrNull(r.cache_write_per_mtok),
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
/** 价格表(按 {@link priceKey} 查)。 */
|
|
69
|
+
async table() {
|
|
70
|
+
return new Map((await this.list()).map((p) => [priceKey(p.provider, p.model), p]));
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 设置或删除(`price: null`)一个模型的价格:事务内取企业管理员锁并复核发起人仍是活跃企业管理员
|
|
74
|
+
* (否则 `forbidden`),写审计 `model_price.updated` / `model_price.deleted`。
|
|
75
|
+
*/
|
|
76
|
+
async put(input, actorAccountId, actorTokenId) {
|
|
77
|
+
const check = MODEL_PRICE_PUT.safeParse(input);
|
|
78
|
+
if (!check.success) {
|
|
79
|
+
throw new ApiError("validation_failed", "Invalid model price", check.error.issues.map((i) => ({ path: i.path.join("."), message: i.message })));
|
|
80
|
+
}
|
|
81
|
+
const v = check.data;
|
|
82
|
+
await this.db.transaction().execute(async (trx) => {
|
|
83
|
+
await lockEnterpriseAdminsAndAuthorize(trx, actorAccountId);
|
|
84
|
+
const target = `${v.provider}/${v.model}`;
|
|
85
|
+
if ("price" in v) {
|
|
86
|
+
await trx
|
|
87
|
+
.deleteFrom("model_prices")
|
|
88
|
+
.where("provider", "=", v.provider)
|
|
89
|
+
.where("model", "=", v.model)
|
|
90
|
+
.execute();
|
|
91
|
+
await audit(trx, {
|
|
92
|
+
actorAccountId,
|
|
93
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
94
|
+
action: "model_price.deleted",
|
|
95
|
+
target,
|
|
96
|
+
detail: { provider: v.provider, model: v.model },
|
|
97
|
+
});
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const values = {
|
|
101
|
+
input_per_mtok: v.inputPerMTok,
|
|
102
|
+
output_per_mtok: v.outputPerMTok,
|
|
103
|
+
cache_read_per_mtok: v.cacheReadPerMTok,
|
|
104
|
+
cache_write_per_mtok: v.cacheWritePerMTok,
|
|
105
|
+
updated_by: actorAccountId,
|
|
106
|
+
};
|
|
107
|
+
await trx
|
|
108
|
+
.insertInto("model_prices")
|
|
109
|
+
.values({ provider: v.provider, model: v.model, ...values })
|
|
110
|
+
.onConflict((oc) => oc.columns(["provider", "model"]).doUpdateSet({ ...values, updated_at: new Date() }))
|
|
111
|
+
.execute();
|
|
112
|
+
await audit(trx, {
|
|
113
|
+
actorAccountId,
|
|
114
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
115
|
+
action: "model_price.updated",
|
|
116
|
+
target,
|
|
117
|
+
detail: { ...v },
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Principal } from "../identity/principal.js";
|
|
2
|
+
import { type OrgContext } from "../orgs/org.guard.js";
|
|
3
|
+
import { type ModelPurposesService, type PurposePut, type PurposeTarget, type PurposeView } from "./purposes.js";
|
|
4
|
+
/** body 的目标(参数缺省为 `{}`)。 */
|
|
5
|
+
export declare const purposeTargetOf: (b: PurposePut) => PurposeTarget | null;
|
|
6
|
+
/**
|
|
7
|
+
* 本组织的模型用途映射(`/api/v1/orgs/:orgId/model-purposes`):`org.models.manage`(admin 起、只给人)。
|
|
8
|
+
* 列表给出每个用途的部署默认、组织覆盖与生效的映射;PUT 设置或(`target: null`)清除组织覆盖。
|
|
9
|
+
*/
|
|
10
|
+
export declare class ModelPurposesController {
|
|
11
|
+
private readonly purposes;
|
|
12
|
+
constructor(purposes: ModelPurposesService);
|
|
13
|
+
list(principal: Principal, org: OrgContext): Promise<{
|
|
14
|
+
purposes: PurposeView[];
|
|
15
|
+
}>;
|
|
16
|
+
put(principal: Principal, org: OrgContext, purpose: string, body: PurposePut): Promise<{
|
|
17
|
+
purpose: PurposeView;
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
10
|
+
import { Body, Controller, Get, Inject, Param, Put } from "@nestjs/common";
|
|
11
|
+
import { MODEL_PURPOSES } from "../http/tokens.js";
|
|
12
|
+
import { ZodPipe } from "../http/zod.pipe.js";
|
|
13
|
+
import { CurrentPrincipal, patTokenId, requireUser, } from "../identity/principal.js";
|
|
14
|
+
import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
|
|
15
|
+
import { PURPOSE_PUT, } from "./purposes.js";
|
|
16
|
+
/** body 的目标(参数缺省为 `{}`)。 */
|
|
17
|
+
export const purposeTargetOf = (b) => b.target === null ? null : { model: b.target.model, params: b.target.params ?? {} };
|
|
18
|
+
/**
|
|
19
|
+
* 本组织的模型用途映射(`/api/v1/orgs/:orgId/model-purposes`):`org.models.manage`(admin 起、只给人)。
|
|
20
|
+
* 列表给出每个用途的部署默认、组织覆盖与生效的映射;PUT 设置或(`target: null`)清除组织覆盖。
|
|
21
|
+
*/
|
|
22
|
+
let ModelPurposesController = class ModelPurposesController {
|
|
23
|
+
purposes;
|
|
24
|
+
constructor(purposes) {
|
|
25
|
+
this.purposes = purposes;
|
|
26
|
+
}
|
|
27
|
+
async list(principal, org) {
|
|
28
|
+
requireUser(principal);
|
|
29
|
+
return { purposes: await this.purposes.list(org.orgId) };
|
|
30
|
+
}
|
|
31
|
+
async put(principal, org, purpose, body) {
|
|
32
|
+
const p = requireUser(principal);
|
|
33
|
+
return {
|
|
34
|
+
purpose: await this.purposes.setOrg(org.orgId, purpose, purposeTargetOf(body), p.account.id, patTokenId(p)),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
__decorate([
|
|
39
|
+
Get(),
|
|
40
|
+
OrgAction("org.models.manage"),
|
|
41
|
+
__param(0, CurrentPrincipal()),
|
|
42
|
+
__param(1, CurrentOrg())
|
|
43
|
+
], ModelPurposesController.prototype, "list", null);
|
|
44
|
+
__decorate([
|
|
45
|
+
Put(":purpose"),
|
|
46
|
+
OrgAction("org.models.manage"),
|
|
47
|
+
__param(0, CurrentPrincipal()),
|
|
48
|
+
__param(1, CurrentOrg()),
|
|
49
|
+
__param(2, Param("purpose")),
|
|
50
|
+
__param(3, Body(new ZodPipe(PURPOSE_PUT)))
|
|
51
|
+
], ModelPurposesController.prototype, "put", null);
|
|
52
|
+
ModelPurposesController = __decorate([
|
|
53
|
+
Controller("api/v1/orgs/:orgId/model-purposes"),
|
|
54
|
+
__param(0, Inject(MODEL_PURPOSES))
|
|
55
|
+
], ModelPurposesController);
|
|
56
|
+
export { ModelPurposesController };
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { type ContentBlock, type ExtensionManifest, type ModelRequest, type ModelUsage, type ParamValue, type StopReason } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { ModelRef } from "../agents/definition.js";
|
|
4
|
+
import type { KernelConfig } from "../config/schema.js";
|
|
5
|
+
import type { KernelDb } from "../db/kernel-schema.js";
|
|
6
|
+
import { type ProviderRegistry } from "../runtime/providers.js";
|
|
7
|
+
/**
|
|
8
|
+
* 模型用途映射(C9):内核与插件按「用途」取模型,不在代码里写死模型。
|
|
9
|
+
* - 用途 = 内核用途 {@link KERNEL_PURPOSES}(目前只有评委 `eval`),或已加载插件 `permissions.models` 声明的;
|
|
10
|
+
* - 映射 = 部署默认(`org_id` 为 null,企业管理员设)+ 组织覆盖(组织管理员设,`org.models.manage`);
|
|
11
|
+
* 生效的映射先取组织覆盖、再取部署默认,都没有 → `model.unconfigured`;
|
|
12
|
+
* - 目标模型按部署范围解析(与运行时一致),参数按目标模型自己的声明严格校验;不做模型白名单;
|
|
13
|
+
* - 每次都查 PG,不在进程内缓存(多副本下改映射立即生效)。`ctx.models` 仍预留,插件暂不能调用。
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Purposes the kernel declares: the eval judge, and the three sub-agent model tiers (phase C,
|
|
17
|
+
* spec §5.4: `fast` / `standard` / `capable` → `subagent_<tier>`; an unmapped tier runs on the
|
|
18
|
+
* parent's model).
|
|
19
|
+
*/
|
|
20
|
+
export declare const KERNEL_PURPOSES: readonly [{
|
|
21
|
+
readonly purpose: "eval";
|
|
22
|
+
readonly kind: "chat";
|
|
23
|
+
readonly label: {
|
|
24
|
+
readonly zh: "评测评委";
|
|
25
|
+
readonly en: "Eval judge";
|
|
26
|
+
};
|
|
27
|
+
}, {
|
|
28
|
+
readonly purpose: "title";
|
|
29
|
+
readonly kind: "chat";
|
|
30
|
+
readonly label: {
|
|
31
|
+
readonly zh: "会话标题";
|
|
32
|
+
readonly en: "Conversation titles";
|
|
33
|
+
};
|
|
34
|
+
}, {
|
|
35
|
+
readonly purpose: "subagent_fast";
|
|
36
|
+
readonly kind: "chat";
|
|
37
|
+
readonly label: {
|
|
38
|
+
readonly zh: "子代理:快速";
|
|
39
|
+
readonly en: "Sub-agent: fast";
|
|
40
|
+
};
|
|
41
|
+
}, {
|
|
42
|
+
readonly purpose: "subagent_standard";
|
|
43
|
+
readonly kind: "chat";
|
|
44
|
+
readonly label: {
|
|
45
|
+
readonly zh: "子代理:标准";
|
|
46
|
+
readonly en: "Sub-agent: standard";
|
|
47
|
+
};
|
|
48
|
+
}, {
|
|
49
|
+
readonly purpose: "subagent_capable";
|
|
50
|
+
readonly kind: "chat";
|
|
51
|
+
readonly label: {
|
|
52
|
+
readonly zh: "子代理:最强";
|
|
53
|
+
readonly en: "Sub-agent: capable";
|
|
54
|
+
};
|
|
55
|
+
}];
|
|
56
|
+
/** 一个用途映射到的模型与参数。 */
|
|
57
|
+
export interface PurposeTarget {
|
|
58
|
+
model: ModelRef;
|
|
59
|
+
params: Record<string, ParamValue>;
|
|
60
|
+
}
|
|
61
|
+
export interface PurposeView {
|
|
62
|
+
purpose: string;
|
|
63
|
+
kind: "chat" | "embedding";
|
|
64
|
+
label: {
|
|
65
|
+
zh: string;
|
|
66
|
+
en: string;
|
|
67
|
+
};
|
|
68
|
+
/** `kernel` 或声明它的插件名。 */
|
|
69
|
+
declaredBy: string;
|
|
70
|
+
default: PurposeTarget | null;
|
|
71
|
+
override: PurposeTarget | null;
|
|
72
|
+
effective: PurposeTarget | null;
|
|
73
|
+
}
|
|
74
|
+
/** `PUT …/model-purposes/:purpose` 的 body:设映射,或 `target: null` 清除。 */
|
|
75
|
+
export declare const PURPOSE_PUT: z.ZodObject<{
|
|
76
|
+
target: z.ZodNullable<z.ZodObject<{
|
|
77
|
+
model: z.ZodObject<{
|
|
78
|
+
provider: z.ZodString;
|
|
79
|
+
model: z.ZodString;
|
|
80
|
+
}, z.core.$strict>;
|
|
81
|
+
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
|
|
82
|
+
}, z.core.$strict>>;
|
|
83
|
+
}, z.core.$strict>;
|
|
84
|
+
export type PurposePut = z.infer<typeof PURPOSE_PUT>;
|
|
85
|
+
/**
|
|
86
|
+
* 用途请求已经发出、但没有正常收完(出错、超时、中止):`tokens` 是应计入预算的估算用量(输入估算 + 已流出字符 / 4,
|
|
87
|
+
* 与评测回放一致),`cause` 是原始错误。请求发出之前的失败(未映射、模型不可用)原样抛出。
|
|
88
|
+
*/
|
|
89
|
+
export declare class PurposeAttemptError extends Error {
|
|
90
|
+
readonly cause: unknown;
|
|
91
|
+
readonly tokens: number;
|
|
92
|
+
readonly provider: string;
|
|
93
|
+
readonly model: string;
|
|
94
|
+
constructor(cause: unknown, tokens: number, provider: string, model: string);
|
|
95
|
+
}
|
|
96
|
+
export interface ModelPurposesDeps {
|
|
97
|
+
db: KernelDb;
|
|
98
|
+
registry: Pick<ProviderRegistry, "resolve">;
|
|
99
|
+
config: () => KernelConfig;
|
|
100
|
+
/** 已加载插件的清单(取 `permissions.models`)。 */
|
|
101
|
+
manifests: () => readonly ExtensionManifest[];
|
|
102
|
+
}
|
|
103
|
+
export declare class ModelPurposesService {
|
|
104
|
+
private readonly d;
|
|
105
|
+
constructor(d: ModelPurposesDeps);
|
|
106
|
+
/** 全部已声明的用途:内核的在前,其后按插件加载顺序。 */
|
|
107
|
+
private declared;
|
|
108
|
+
private find;
|
|
109
|
+
private rows;
|
|
110
|
+
private views;
|
|
111
|
+
/** 全部用途与映射;不给 `orgId` = 部署级视图(`override` 一律为 null)。 */
|
|
112
|
+
list(orgId?: string): Promise<PurposeView[]>;
|
|
113
|
+
/** 校验目标:模型可解析(部署范围)、参数按它的声明严格通过。 */
|
|
114
|
+
private check;
|
|
115
|
+
private set;
|
|
116
|
+
/** 设置(或 `null` 清除)部署默认;只有企业管理员(事务内复核)。 */
|
|
117
|
+
setDefault(purpose: string, target: PurposeTarget | null, actor: string, actorTokenId?: string): Promise<PurposeView>;
|
|
118
|
+
/** 设置(或 `null` 清除)组织覆盖;事务内锁组织并复核 `org.models.manage`。 */
|
|
119
|
+
setOrg(orgId: string, purpose: string, target: PurposeTarget | null, actor: string, actorTokenId?: string): Promise<PurposeView>;
|
|
120
|
+
/** 生效的映射:组织覆盖,否则部署默认;都没有 → `model.unconfigured`;用途未声明 → `model.purpose_unknown`。 */
|
|
121
|
+
resolve(orgId: string, purpose: string): Promise<PurposeTarget>;
|
|
122
|
+
/**
|
|
123
|
+
* 按用途发一次对话请求:解析映射、按目标模型的声明宽松处理参数(补默认值,与运行时一致),用 `consumeModelStream`
|
|
124
|
+
* 收完(只有流空闲看门狗)。输出上限取 `min(req.maxOutputTokens, 目标模型的 maxOutputTokens)`。
|
|
125
|
+
* 请求发出之前的失败原样抛出;发出之后的失败包成 {@link PurposeAttemptError}(带估算用量)。
|
|
126
|
+
* `opts.fallback`: the target used when the purpose is not mapped (`model.unconfigured`).
|
|
127
|
+
* `opts.beforeSend`: called with the resolved target and the final request just before sending;
|
|
128
|
+
* what it throws is thrown as is (a pre-send failure, e.g. a denied `model.request` hook).
|
|
129
|
+
*/
|
|
130
|
+
chat(orgId: string, purpose: string, req: Omit<ModelRequest, "model" | "params">, signal: AbortSignal, opts?: {
|
|
131
|
+
fallback?: PurposeTarget;
|
|
132
|
+
beforeSend?: (target: ModelRef, request: ModelRequest) => Promise<void>;
|
|
133
|
+
}): Promise<{
|
|
134
|
+
content: ContentBlock[];
|
|
135
|
+
stopReason: StopReason;
|
|
136
|
+
usage: ModelUsage;
|
|
137
|
+
provider: string;
|
|
138
|
+
model: string;
|
|
139
|
+
}>;
|
|
140
|
+
}
|