@capybara-hq/kernel 0.0.0-stage → 0.1.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +2 -0
- package/README.md +20 -2
- package/bootstrap.json +26 -0
- package/dist/admin/admin.controller.d.ts +139 -0
- package/dist/admin/admin.controller.js +238 -0
- package/dist/admin/extensions.controller.d.ts +100 -0
- package/dist/admin/extensions.controller.js +226 -0
- package/dist/admin/setup.controller.d.ts +36 -0
- package/dist/admin/setup.controller.js +106 -0
- package/dist/admin/setup.service.d.ts +47 -0
- package/dist/admin/setup.service.js +90 -0
- package/dist/agents/agents.controller.d.ts +205 -0
- package/dist/agents/agents.controller.js +144 -0
- package/dist/agents/agents.service.d.ts +177 -0
- package/dist/agents/agents.service.js +677 -0
- package/dist/agents/definition.d.ts +198 -0
- package/dist/agents/definition.js +152 -0
- package/dist/agents/models.controller.d.ts +13 -0
- package/dist/agents/models.controller.js +31 -0
- package/dist/agents/templates.controller.d.ts +15 -0
- package/dist/agents/templates.controller.js +37 -0
- package/dist/agents/templates.d.ts +83 -0
- package/dist/agents/templates.js +173 -0
- package/dist/catalog/admin-catalog.controller.d.ts +143 -0
- package/dist/catalog/admin-catalog.controller.js +245 -0
- package/dist/catalog/catalog.service.d.ts +430 -0
- package/dist/catalog/catalog.service.js +882 -0
- package/dist/catalog/claude/agents.d.ts +27 -0
- package/dist/catalog/claude/agents.js +270 -0
- package/dist/catalog/claude/commands.d.ts +50 -0
- package/dist/catalog/claude/commands.js +179 -0
- package/dist/catalog/claude/manifest.d.ts +69 -0
- package/dist/catalog/claude/manifest.js +134 -0
- package/dist/catalog/claude/marketplace.d.ts +35 -0
- package/dist/catalog/claude/marketplace.js +194 -0
- package/dist/catalog/claude/mcp.d.ts +33 -0
- package/dist/catalog/claude/mcp.js +226 -0
- package/dist/catalog/claude/report.d.ts +86 -0
- package/dist/catalog/claude/report.js +121 -0
- package/dist/catalog/claude/translate.d.ts +56 -0
- package/dist/catalog/claude/translate.js +857 -0
- package/dist/catalog/cli.d.ts +46 -0
- package/dist/catalog/cli.js +211 -0
- package/dist/catalog/git-source.d.ts +127 -0
- package/dist/catalog/git-source.js +520 -0
- package/dist/catalog/marketplace-fetch.d.ts +99 -0
- package/dist/catalog/marketplace-fetch.js +203 -0
- package/dist/catalog/marketplaces.controller.d.ts +97 -0
- package/dist/catalog/marketplaces.controller.js +197 -0
- package/dist/catalog/marketplaces.service.d.ts +340 -0
- package/dist/catalog/marketplaces.service.js +1217 -0
- package/dist/catalog/org-catalog.controller.d.ts +128 -0
- package/dist/catalog/org-catalog.controller.js +277 -0
- package/dist/catalog/org-catalog.service.d.ts +246 -0
- package/dist/catalog/org-catalog.service.js +625 -0
- package/dist/catalog/plugin-import.d.ts +436 -0
- package/dist/catalog/plugin-import.js +1069 -0
- package/dist/catalog/plugin-install.d.ts +447 -0
- package/dist/catalog/plugin-install.js +1333 -0
- package/dist/catalog/plugin-package.d.ts +143 -0
- package/dist/catalog/plugin-package.js +382 -0
- package/dist/catalog/plugin-upgrade.d.ts +222 -0
- package/dist/catalog/plugin-upgrade.js +1219 -0
- package/dist/catalog/requests.service.d.ts +162 -0
- package/dist/catalog/requests.service.js +504 -0
- package/dist/catalog/schema-path.d.ts +7 -0
- package/dist/catalog/schema-path.js +63 -0
- package/dist/catalog/upgrade-targets.d.ts +59 -0
- package/dist/catalog/upgrade-targets.js +90 -0
- package/dist/catalog/versions.d.ts +31 -0
- package/dist/catalog/versions.js +44 -0
- package/dist/channels/actions.d.ts +37 -0
- package/dist/channels/actions.js +121 -0
- package/dist/channels/cards.d.ts +44 -0
- package/dist/channels/cards.js +156 -0
- package/dist/channels/connections.controller.d.ts +59 -0
- package/dist/channels/connections.controller.js +115 -0
- package/dist/channels/connections.service.d.ts +187 -0
- package/dist/channels/connections.service.js +534 -0
- package/dist/channels/features.d.ts +12 -0
- package/dist/channels/features.js +22 -0
- package/dist/channels/inbound.d.ts +120 -0
- package/dist/channels/inbound.js +332 -0
- package/dist/channels/outbound.d.ts +140 -0
- package/dist/channels/outbound.js +1126 -0
- package/dist/channels/phrases.d.ts +100 -0
- package/dist/channels/phrases.js +81 -0
- package/dist/channels/supervisor.d.ts +182 -0
- package/dist/channels/supervisor.js +625 -0
- package/dist/channels/threads.d.ts +29 -0
- package/dist/channels/threads.js +104 -0
- package/dist/channels/webhook-url.d.ts +16 -0
- package/dist/channels/webhook-url.js +34 -0
- package/dist/channels/webhook.controller.d.ts +19 -0
- package/dist/channels/webhook.controller.js +72 -0
- package/dist/channels/webhook.d.ts +73 -0
- package/dist/channels/webhook.js +274 -0
- package/dist/config/docs.d.ts +9 -0
- package/dist/config/docs.js +85 -0
- package/dist/config/env.d.ts +6 -0
- package/dist/config/env.js +73 -0
- package/dist/config/fields.d.ts +42 -0
- package/dist/config/fields.js +214 -0
- package/dist/config/file-source.d.ts +3 -0
- package/dist/config/file-source.js +31 -0
- package/dist/config/load.d.ts +20 -0
- package/dist/config/load.js +98 -0
- package/dist/config/nacos-source.d.ts +31 -0
- package/dist/config/nacos-source.js +229 -0
- package/dist/config/schema.d.ts +237 -0
- package/dist/config/schema.js +1192 -0
- package/dist/config/sources.d.ts +18 -0
- package/dist/config/sources.js +59 -0
- package/dist/config/types.d.ts +9 -0
- package/dist/config/types.js +7 -0
- package/dist/conversations/artifacts.d.ts +52 -0
- package/dist/conversations/artifacts.js +137 -0
- package/dist/conversations/attachments.controller.d.ts +28 -0
- package/dist/conversations/attachments.controller.js +96 -0
- package/dist/conversations/attachments.service.d.ts +180 -0
- package/dist/conversations/attachments.service.js +578 -0
- package/dist/conversations/conversations.controller.d.ts +288 -0
- package/dist/conversations/conversations.controller.js +607 -0
- package/dist/conversations/conversations.service.d.ts +321 -0
- package/dist/conversations/conversations.service.js +754 -0
- package/dist/conversations/event-log.d.ts +122 -0
- package/dist/conversations/event-log.js +259 -0
- package/dist/conversations/events.d.ts +856 -0
- package/dist/conversations/events.js +639 -0
- package/dist/conversations/files.d.ts +92 -0
- package/dist/conversations/files.js +213 -0
- package/dist/conversations/outputs-read.d.ts +34 -0
- package/dist/conversations/outputs-read.js +37 -0
- package/dist/conversations/queue.d.ts +169 -0
- package/dist/conversations/queue.js +527 -0
- package/dist/conversations/sandbox-status.d.ts +21 -0
- package/dist/conversations/sandbox-status.js +24 -0
- package/dist/conversations/selection.d.ts +46 -0
- package/dist/conversations/selection.js +75 -0
- package/dist/conversations/titles.d.ts +93 -0
- package/dist/conversations/titles.js +423 -0
- package/dist/ctx/bus.d.ts +16 -0
- package/dist/ctx/bus.js +101 -0
- package/dist/ctx/create-ctx.d.ts +109 -0
- package/dist/ctx/create-ctx.js +592 -0
- package/dist/ctx/kv.d.ts +4 -0
- package/dist/ctx/kv.js +31 -0
- package/dist/ctx/lock.d.ts +4 -0
- package/dist/ctx/lock.js +39 -0
- package/dist/ctx/namespace.d.ts +6 -0
- package/dist/ctx/namespace.js +12 -0
- package/dist/ctx/queue.d.ts +25 -0
- package/dist/ctx/queue.js +151 -0
- package/dist/ctx/secrets.d.ts +45 -0
- package/dist/ctx/secrets.js +175 -0
- package/dist/db/kernel-schema.d.ts +1122 -0
- package/dist/db/kernel-schema.js +5 -0
- package/dist/db/migrator.d.ts +28 -0
- package/dist/db/migrator.js +140 -0
- package/dist/db/pool.d.ts +21 -0
- package/dist/db/pool.js +28 -0
- package/dist/db/sql-statements.d.ts +34 -0
- package/dist/db/sql-statements.js +168 -0
- package/dist/errors.d.ts +211 -0
- package/dist/errors.js +213 -0
- package/dist/evals/budget.d.ts +61 -0
- package/dist/evals/budget.js +181 -0
- package/dist/evals/diff.d.ts +55 -0
- package/dist/evals/diff.js +133 -0
- package/dist/evals/judge.d.ts +53 -0
- package/dist/evals/judge.js +149 -0
- package/dist/evals/plan.d.ts +47 -0
- package/dist/evals/plan.js +77 -0
- package/dist/evals/reconstruct.d.ts +137 -0
- package/dist/evals/reconstruct.js +322 -0
- package/dist/evals/recorded-tools.d.ts +54 -0
- package/dist/evals/recorded-tools.js +167 -0
- package/dist/evals/run-replay.d.ts +86 -0
- package/dist/evals/run-replay.js +502 -0
- package/dist/evals/runs.controller.d.ts +100 -0
- package/dist/evals/runs.controller.js +199 -0
- package/dist/evals/runs.service.d.ts +275 -0
- package/dist/evals/runs.service.js +836 -0
- package/dist/evals/sets.controller.d.ts +61 -0
- package/dist/evals/sets.controller.js +183 -0
- package/dist/evals/sets.service.d.ts +128 -0
- package/dist/evals/sets.service.js +558 -0
- package/dist/evals/snapshot.d.ts +76 -0
- package/dist/evals/snapshot.js +207 -0
- package/dist/evals/step-replay.d.ts +113 -0
- package/dist/evals/step-replay.js +181 -0
- package/dist/evals/trajectory.controller.d.ts +41 -0
- package/dist/evals/trajectory.controller.js +88 -0
- package/dist/evals/trajectory.d.ts +144 -0
- package/dist/evals/trajectory.js +338 -0
- package/dist/evals/trajectory.service.d.ts +108 -0
- package/dist/evals/trajectory.service.js +323 -0
- package/dist/evals/worker.d.ts +101 -0
- package/dist/evals/worker.js +790 -0
- package/dist/extensions/admin-ops.d.ts +105 -0
- package/dist/extensions/admin-ops.js +353 -0
- package/dist/extensions/admin-view.d.ts +79 -0
- package/dist/extensions/admin-view.js +327 -0
- package/dist/extensions/approvals.d.ts +119 -0
- package/dist/extensions/approvals.js +205 -0
- package/dist/extensions/blobs.d.ts +45 -0
- package/dist/extensions/blobs.js +160 -0
- package/dist/extensions/bootstrap.d.ts +176 -0
- package/dist/extensions/bootstrap.js +535 -0
- package/dist/extensions/cli.d.ts +61 -0
- package/dist/extensions/cli.js +165 -0
- package/dist/extensions/config-json-schema.d.ts +9 -0
- package/dist/extensions/config-json-schema.js +73 -0
- package/dist/extensions/deployment-config.d.ts +138 -0
- package/dist/extensions/deployment-config.js +394 -0
- package/dist/extensions/enabled.d.ts +31 -0
- package/dist/extensions/enabled.js +55 -0
- package/dist/extensions/hooks.d.ts +161 -0
- package/dist/extensions/hooks.js +425 -0
- package/dist/extensions/host.d.ts +577 -0
- package/dist/extensions/host.js +2071 -0
- package/dist/extensions/inflight.d.ts +69 -0
- package/dist/extensions/inflight.js +277 -0
- package/dist/extensions/installs.d.ts +166 -0
- package/dist/extensions/installs.js +253 -0
- package/dist/extensions/instance.d.ts +167 -0
- package/dist/extensions/instance.js +329 -0
- package/dist/extensions/ledger.d.ts +30 -0
- package/dist/extensions/ledger.js +50 -0
- package/dist/extensions/lifecycle.d.ts +80 -0
- package/dist/extensions/lifecycle.js +152 -0
- package/dist/extensions/migrate-lock.d.ts +51 -0
- package/dist/extensions/migrate-lock.js +100 -0
- package/dist/extensions/org-config.controller.d.ts +24 -0
- package/dist/extensions/org-config.controller.js +59 -0
- package/dist/extensions/org-config.d.ts +169 -0
- package/dist/extensions/org-config.js +520 -0
- package/dist/extensions/package.d.ts +115 -0
- package/dist/extensions/package.js +246 -0
- package/dist/extensions/permission-set.d.ts +117 -0
- package/dist/extensions/permission-set.js +184 -0
- package/dist/extensions/permission-view.d.ts +194 -0
- package/dist/extensions/permission-view.js +284 -0
- package/dist/extensions/registry.d.ts +24 -0
- package/dist/extensions/registry.js +56 -0
- package/dist/extensions/resolve.d.ts +12 -0
- package/dist/extensions/resolve.js +71 -0
- package/dist/extensions/sources.d.ts +69 -0
- package/dist/extensions/sources.js +120 -0
- package/dist/extensions/sync.d.ts +40 -0
- package/dist/extensions/sync.js +242 -0
- package/dist/files/previewers.controller.d.ts +46 -0
- package/dist/files/previewers.controller.js +105 -0
- package/dist/files/previewers.d.ts +100 -0
- package/dist/files/previewers.js +250 -0
- package/dist/http/api.module.d.ts +114 -0
- package/dist/http/api.module.js +448 -0
- package/dist/http/app.d.ts +77 -0
- package/dist/http/app.js +220 -0
- package/dist/http/error.filter.d.ts +21 -0
- package/dist/http/error.filter.js +85 -0
- package/dist/http/gateway.module.d.ts +15 -0
- package/dist/http/gateway.module.js +13 -0
- package/dist/http/health.controller.d.ts +26 -0
- package/dist/http/health.controller.js +79 -0
- package/dist/http/nest-logger.d.ts +20 -0
- package/dist/http/nest-logger.js +28 -0
- package/dist/http/plugin-dispatch.d.ts +68 -0
- package/dist/http/plugin-dispatch.js +200 -0
- package/dist/http/tokens.d.ts +131 -0
- package/dist/http/tokens.js +131 -0
- package/dist/http/zod.pipe.d.ts +8 -0
- package/dist/http/zod.pipe.js +14 -0
- package/dist/identity/accounts.d.ts +93 -0
- package/dist/identity/accounts.js +367 -0
- package/dist/identity/api-tokens.d.ts +73 -0
- package/dist/identity/api-tokens.js +197 -0
- package/dist/identity/audit.d.ts +23 -0
- package/dist/identity/audit.js +41 -0
- package/dist/identity/auth.controller.d.ts +40 -0
- package/dist/identity/auth.controller.js +130 -0
- package/dist/identity/auth.guard.d.ts +41 -0
- package/dist/identity/auth.guard.js +162 -0
- package/dist/identity/binding.d.ts +47 -0
- package/dist/identity/binding.js +84 -0
- package/dist/identity/cookies.d.ts +16 -0
- package/dist/identity/cookies.js +32 -0
- package/dist/identity/credential-check.d.ts +17 -0
- package/dist/identity/credential-check.js +24 -0
- package/dist/identity/enterprise-admin.d.ts +14 -0
- package/dist/identity/enterprise-admin.js +27 -0
- package/dist/identity/external.d.ts +106 -0
- package/dist/identity/external.js +337 -0
- package/dist/identity/hash.d.ts +2 -0
- package/dist/identity/hash.js +3 -0
- package/dist/identity/login.d.ts +6 -0
- package/dist/identity/login.js +20 -0
- package/dist/identity/me.controller.d.ts +61 -0
- package/dist/identity/me.controller.js +159 -0
- package/dist/identity/passwords.d.ts +6 -0
- package/dist/identity/passwords.js +37 -0
- package/dist/identity/principal.d.ts +56 -0
- package/dist/identity/principal.js +38 -0
- package/dist/identity/rate-limit.d.ts +55 -0
- package/dist/identity/rate-limit.js +121 -0
- package/dist/identity/sessions.d.ts +84 -0
- package/dist/identity/sessions.js +306 -0
- package/dist/identity/settings.d.ts +121 -0
- package/dist/identity/settings.js +248 -0
- package/dist/identity/sso.controller.d.ts +59 -0
- package/dist/identity/sso.controller.js +192 -0
- package/dist/identity/sso.d.ts +83 -0
- package/dist/identity/sso.js +202 -0
- package/dist/inbox/inbox.service.d.ts +43 -0
- package/dist/inbox/inbox.service.js +57 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.js +67 -0
- package/dist/kernel.d.ts +259 -0
- package/dist/kernel.js +1326 -0
- package/dist/log-config.d.ts +9 -0
- package/dist/log-config.js +27 -0
- package/dist/log-context.d.ts +32 -0
- package/dist/log-context.js +40 -0
- package/dist/log-loki.d.ts +34 -0
- package/dist/log-loki.js +145 -0
- package/dist/log.d.ts +79 -0
- package/dist/log.js +303 -0
- package/dist/models/prices.d.ts +53 -0
- package/dist/models/prices.js +121 -0
- package/dist/models/purposes.controller.d.ts +19 -0
- package/dist/models/purposes.controller.js +56 -0
- package/dist/models/purposes.d.ts +140 -0
- package/dist/models/purposes.js +267 -0
- package/dist/net/proxy.d.ts +44 -0
- package/dist/net/proxy.js +162 -0
- package/dist/net/public-address.d.ts +60 -0
- package/dist/net/public-address.js +272 -0
- package/dist/net/safe-fetch.d.ts +38 -0
- package/dist/net/safe-fetch.js +140 -0
- package/dist/orgs/directory-sync.controller.d.ts +14 -0
- package/dist/orgs/directory-sync.controller.js +40 -0
- package/dist/orgs/directory-sync.d.ts +166 -0
- package/dist/orgs/directory-sync.js +558 -0
- package/dist/orgs/invitations.controller.d.ts +58 -0
- package/dist/orgs/invitations.controller.js +137 -0
- package/dist/orgs/invitations.service.d.ts +80 -0
- package/dist/orgs/invitations.service.js +217 -0
- package/dist/orgs/members.service.d.ts +63 -0
- package/dist/orgs/members.service.js +234 -0
- package/dist/orgs/offboarding.d.ts +141 -0
- package/dist/orgs/offboarding.js +398 -0
- package/dist/orgs/org-lock.d.ts +32 -0
- package/dist/orgs/org-lock.js +46 -0
- package/dist/orgs/org.guard.d.ts +35 -0
- package/dist/orgs/org.guard.js +95 -0
- package/dist/orgs/orgs.controller.d.ts +78 -0
- package/dist/orgs/orgs.controller.js +192 -0
- package/dist/orgs/orgs.service.d.ts +61 -0
- package/dist/orgs/orgs.service.js +209 -0
- package/dist/orgs/roles.d.ts +13 -0
- package/dist/orgs/roles.js +58 -0
- package/dist/orgs/settings.controller.d.ts +20 -0
- package/dist/orgs/settings.controller.js +53 -0
- package/dist/orgs/settings.service.d.ts +120 -0
- package/dist/orgs/settings.service.js +178 -0
- package/dist/packages/npm.d.ts +50 -0
- package/dist/packages/npm.js +218 -0
- package/dist/packages/provenance.d.ts +47 -0
- package/dist/packages/provenance.js +147 -0
- package/dist/packages/tgz.d.ts +76 -0
- package/dist/packages/tgz.js +225 -0
- package/dist/runtime/abort.d.ts +32 -0
- package/dist/runtime/abort.js +71 -0
- package/dist/runtime/checkpointer.d.ts +32 -0
- package/dist/runtime/checkpointer.js +243 -0
- package/dist/runtime/context/build.d.ts +254 -0
- package/dist/runtime/context/build.js +693 -0
- package/dist/runtime/context/claude-tools.d.ts +11 -0
- package/dist/runtime/context/claude-tools.js +24 -0
- package/dist/runtime/context/compaction.d.ts +26 -0
- package/dist/runtime/context/compaction.js +195 -0
- package/dist/runtime/context/pairing.d.ts +11 -0
- package/dist/runtime/context/pairing.js +82 -0
- package/dist/runtime/context/reminders.d.ts +5 -0
- package/dist/runtime/context/reminders.js +11 -0
- package/dist/runtime/context/skills.d.ts +105 -0
- package/dist/runtime/context/skills.js +283 -0
- package/dist/runtime/context/tokens.d.ts +19 -0
- package/dist/runtime/context/tokens.js +104 -0
- package/dist/runtime/conversation-lock.d.ts +40 -0
- package/dist/runtime/conversation-lock.js +97 -0
- package/dist/runtime/hook-calls.d.ts +84 -0
- package/dist/runtime/hook-calls.js +136 -0
- package/dist/runtime/langgraph-loop.d.ts +52 -0
- package/dist/runtime/langgraph-loop.js +247 -0
- package/dist/runtime/loop.d.ts +93 -0
- package/dist/runtime/loop.js +7 -0
- package/dist/runtime/maintenance.d.ts +80 -0
- package/dist/runtime/maintenance.js +148 -0
- package/dist/runtime/media-cache.d.ts +21 -0
- package/dist/runtime/media-cache.js +51 -0
- package/dist/runtime/model-call.d.ts +176 -0
- package/dist/runtime/model-call.js +1049 -0
- package/dist/runtime/providers.d.ts +86 -0
- package/dist/runtime/providers.js +224 -0
- package/dist/runtime/quota.d.ts +29 -0
- package/dist/runtime/quota.js +70 -0
- package/dist/runtime/run-finish.d.ts +45 -0
- package/dist/runtime/run-finish.js +69 -0
- package/dist/runtime/run-queue.d.ts +121 -0
- package/dist/runtime/run-queue.js +493 -0
- package/dist/runtime/run-worker.d.ts +138 -0
- package/dist/runtime/run-worker.js +806 -0
- package/dist/runtime/stream.controller.d.ts +34 -0
- package/dist/runtime/stream.controller.js +122 -0
- package/dist/runtime/stream.d.ts +63 -0
- package/dist/runtime/stream.js +262 -0
- package/dist/runtime/subagents/child.d.ts +80 -0
- package/dist/runtime/subagents/child.js +225 -0
- package/dist/runtime/subagents/definition.d.ts +103 -0
- package/dist/runtime/subagents/definition.js +392 -0
- package/dist/runtime/subagents/dispatch.d.ts +69 -0
- package/dist/runtime/subagents/dispatch.js +502 -0
- package/dist/runtime/subagents/limits.d.ts +23 -0
- package/dist/runtime/subagents/limits.js +34 -0
- package/dist/runtime/subagents/org-agents.d.ts +50 -0
- package/dist/runtime/subagents/org-agents.js +70 -0
- package/dist/runtime/subagents/preamble.d.ts +7 -0
- package/dist/runtime/subagents/preamble.js +11 -0
- package/dist/runtime/subagents/progress.d.ts +26 -0
- package/dist/runtime/subagents/progress.js +36 -0
- package/dist/runtime/subagents/roster.d.ts +55 -0
- package/dist/runtime/subagents/roster.js +111 -0
- package/dist/runtime/subagents/skill-fork.d.ts +123 -0
- package/dist/runtime/subagents/skill-fork.js +259 -0
- package/dist/runtime/usage-report.d.ts +163 -0
- package/dist/runtime/usage-report.js +551 -0
- package/dist/runtime/waits.d.ts +233 -0
- package/dist/runtime/waits.js +883 -0
- package/dist/sandbox/leases.d.ts +169 -0
- package/dist/sandbox/leases.js +515 -0
- package/dist/sandbox/lifecycle.d.ts +21 -0
- package/dist/sandbox/lifecycle.js +68 -0
- package/dist/sandbox/sandbox.service.d.ts +249 -0
- package/dist/sandbox/sandbox.service.js +908 -0
- package/dist/skills/catalog.d.ts +149 -0
- package/dist/skills/catalog.js +405 -0
- package/dist/skills/changes.controller.d.ts +56 -0
- package/dist/skills/changes.controller.js +136 -0
- package/dist/skills/changes.service.d.ts +175 -0
- package/dist/skills/changes.service.js +805 -0
- package/dist/skills/invocable.controller.d.ts +23 -0
- package/dist/skills/invocable.controller.js +50 -0
- package/dist/skills/invocation-keys.d.ts +23 -0
- package/dist/skills/invocation-keys.js +44 -0
- package/dist/skills/invoke.d.ts +135 -0
- package/dist/skills/invoke.js +286 -0
- package/dist/skills/package.d.ts +87 -0
- package/dist/skills/package.js +227 -0
- package/dist/skills/skills.controller.d.ts +40 -0
- package/dist/skills/skills.controller.js +110 -0
- package/dist/skills/skills.service.d.ts +192 -0
- package/dist/skills/skills.service.js +567 -0
- package/dist/storage/prefix.d.ts +36 -0
- package/dist/storage/prefix.js +104 -0
- package/dist/storage/purge.d.ts +27 -0
- package/dist/storage/purge.js +75 -0
- package/dist/storage/storage.service.d.ts +44 -0
- package/dist/storage/storage.service.js +145 -0
- package/dist/text.d.ts +13 -0
- package/dist/text.js +13 -0
- package/dist/tools/approvals.controller.d.ts +53 -0
- package/dist/tools/approvals.controller.js +128 -0
- package/dist/tools/approvals.service.d.ts +172 -0
- package/dist/tools/approvals.service.js +568 -0
- package/dist/tools/breaker.d.ts +28 -0
- package/dist/tools/breaker.js +72 -0
- package/dist/tools/builtins/agent.d.ts +81 -0
- package/dist/tools/builtins/agent.js +223 -0
- package/dist/tools/builtins/ask-user.d.ts +28 -0
- package/dist/tools/builtins/ask-user.js +139 -0
- package/dist/tools/builtins/read-tool-output.d.ts +18 -0
- package/dist/tools/builtins/read-tool-output.js +108 -0
- package/dist/tools/builtins/sandbox/bash.d.ts +16 -0
- package/dist/tools/builtins/sandbox/bash.js +137 -0
- package/dist/tools/builtins/sandbox/common.d.ts +116 -0
- package/dist/tools/builtins/sandbox/common.js +306 -0
- package/dist/tools/builtins/sandbox/deliver.d.ts +5 -0
- package/dist/tools/builtins/sandbox/deliver.js +180 -0
- package/dist/tools/builtins/sandbox/edit.d.ts +4 -0
- package/dist/tools/builtins/sandbox/edit.js +98 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +25 -0
- package/dist/tools/builtins/sandbox/glob-match.js +240 -0
- package/dist/tools/builtins/sandbox/glob.d.ts +4 -0
- package/dist/tools/builtins/sandbox/glob.js +104 -0
- package/dist/tools/builtins/sandbox/grep.d.ts +9 -0
- package/dist/tools/builtins/sandbox/grep.js +133 -0
- package/dist/tools/builtins/sandbox/index.d.ts +12 -0
- package/dist/tools/builtins/sandbox/index.js +27 -0
- package/dist/tools/builtins/sandbox/names.d.ts +7 -0
- package/dist/tools/builtins/sandbox/names.js +20 -0
- package/dist/tools/builtins/sandbox/read.d.ts +8 -0
- package/dist/tools/builtins/sandbox/read.js +121 -0
- package/dist/tools/builtins/sandbox/write.d.ts +4 -0
- package/dist/tools/builtins/sandbox/write.js +88 -0
- package/dist/tools/builtins/skill-load.d.ts +53 -0
- package/dist/tools/builtins/skill-load.js +446 -0
- package/dist/tools/builtins/skill-write.d.ts +59 -0
- package/dist/tools/builtins/skill-write.js +244 -0
- package/dist/tools/builtins/tool-search.d.ts +31 -0
- package/dist/tools/builtins/tool-search.js +171 -0
- package/dist/tools/connector-content.controller.d.ts +34 -0
- package/dist/tools/connector-content.controller.js +78 -0
- package/dist/tools/connector-content.d.ts +104 -0
- package/dist/tools/connector-content.js +267 -0
- package/dist/tools/connectors.controller.d.ts +210 -0
- package/dist/tools/connectors.controller.js +234 -0
- package/dist/tools/connectors.service.d.ts +303 -0
- package/dist/tools/connectors.service.js +1102 -0
- package/dist/tools/credentials.d.ts +139 -0
- package/dist/tools/credentials.js +351 -0
- package/dist/tools/drift.d.ts +141 -0
- package/dist/tools/drift.js +539 -0
- package/dist/tools/elicitation.d.ts +81 -0
- package/dist/tools/elicitation.js +266 -0
- package/dist/tools/endpoint.d.ts +18 -0
- package/dist/tools/endpoint.js +115 -0
- package/dist/tools/info.d.ts +67 -0
- package/dist/tools/info.js +113 -0
- package/dist/tools/naming.d.ts +27 -0
- package/dist/tools/naming.js +47 -0
- package/dist/tools/oauth/discovery.d.ts +65 -0
- package/dist/tools/oauth/discovery.js +307 -0
- package/dist/tools/oauth/flow.d.ts +63 -0
- package/dist/tools/oauth/flow.js +237 -0
- package/dist/tools/oauth/oauth.controller.d.ts +31 -0
- package/dist/tools/oauth/oauth.controller.js +95 -0
- package/dist/tools/oauth/tokens.d.ts +111 -0
- package/dist/tools/oauth/tokens.js +258 -0
- package/dist/tools/outputs.d.ts +61 -0
- package/dist/tools/outputs.js +156 -0
- package/dist/tools/pipeline.d.ts +322 -0
- package/dist/tools/pipeline.js +1236 -0
- package/dist/tools/policy.d.ts +60 -0
- package/dist/tools/policy.js +236 -0
- package/dist/tools/questions.controller.d.ts +24 -0
- package/dist/tools/questions.controller.js +58 -0
- package/dist/tools/questions.service.d.ts +103 -0
- package/dist/tools/questions.service.js +295 -0
- package/dist/tools/redact.d.ts +20 -0
- package/dist/tools/redact.js +60 -0
- package/dist/tools/registry.d.ts +246 -0
- package/dist/tools/registry.js +481 -0
- package/dist/tools/resources.d.ts +16 -0
- package/dist/tools/resources.js +76 -0
- package/dist/tools/specs.d.ts +14 -0
- package/dist/tools/specs.js +31 -0
- package/dist/tools/validate.d.ts +20 -0
- package/dist/tools/validate.js +183 -0
- package/dist/tools/view.d.ts +43 -0
- package/dist/tools/view.js +225 -0
- package/dist/ui/embed-token.d.ts +31 -0
- package/dist/ui/embed-token.js +132 -0
- package/dist/ui/registry.d.ts +58 -0
- package/dist/ui/registry.js +90 -0
- package/dist/ui/ui-stream.d.ts +37 -0
- package/dist/ui/ui-stream.js +162 -0
- package/dist/ui/views.controller.d.ts +81 -0
- package/dist/ui/views.controller.js +261 -0
- package/dist/ui/views.d.ts +155 -0
- package/dist/ui/views.js +306 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.js +6 -0
- package/package.json +69 -3
- package/src/migrations/0001_init.sql +8 -0
- package/src/migrations/0002_secrets.sql +8 -0
- package/src/migrations/0003_identity.sql +117 -0
- package/src/migrations/0004_plugin_org_config_nullable.sql +3 -0
- package/src/migrations/0005_agents.sql +27 -0
- package/src/migrations/0006_conversations.sql +37 -0
- package/src/migrations/0007_checkpoints.sql +26 -0
- package/src/migrations/0008_runs_trigger_seq.sql +3 -0
- package/src/migrations/0009_runs_active_unique.sql +4 -0
- package/src/migrations/0010_tools.sql +125 -0
- package/src/migrations/0011_approvals_spec.sql +10 -0
- package/src/migrations/0012_run_waits.sql +24 -0
- package/src/migrations/0013_app_tools_source.sql +4 -0
- package/src/migrations/0014_tool_specs.sql +8 -0
- package/src/migrations/0015_tool_drift.sql +20 -0
- package/src/migrations/0016_plugin_permissions.sql +11 -0
- package/src/migrations/0017_identity_sources.sql +6 -0
- package/src/migrations/0018_channels.sql +74 -0
- package/src/migrations/0019_identity_trust.sql +17 -0
- package/src/migrations/0020_channel_card_lookup.sql +10 -0
- package/src/migrations/0021_org_storage_purge.sql +9 -0
- package/src/migrations/0022_attachments.sql +29 -0
- package/src/migrations/0023_sandboxes.sql +37 -0
- package/src/migrations/0024_skills.sql +46 -0
- package/src/migrations/0025_skills_catalog_idx.sql +6 -0
- package/src/migrations/0026_skill_changes.sql +34 -0
- package/src/migrations/0027_model_prices.sql +18 -0
- package/src/migrations/0028_evals.sql +105 -0
- package/src/migrations/0029_model_purposes.sql +18 -0
- package/src/migrations/0030_plugin_installs.sql +73 -0
- package/src/migrations/0031_plugin_snapshot_source.sql +6 -0
- package/src/migrations/0032_plugin_deployment_configs.sql +10 -0
- package/src/migrations/0033_rename_apps_to_connectors.sql +25 -0
- package/src/migrations/0034_directory.sql +49 -0
- package/src/migrations/0035_catalogs.sql +40 -0
- package/src/migrations/0036_app_import_staging.sql +17 -0
- package/src/migrations/0037_directory_installs.sql +92 -0
- package/src/migrations/0038_channel_inbound_mode.sql +6 -0
- package/src/migrations/0039_channel_card_pending.sql +8 -0
- package/src/migrations/0040_usage_report_sweep.sql +10 -0
- package/src/migrations/0041_rename_plugins_to_extensions.sql +38 -0
- package/src/migrations/0042_rename_directory_to_catalog.sql +80 -0
- package/src/migrations/0043_rename_app_installs_to_plugin_installs.sql +20 -0
- package/src/migrations/0044_catalog_one_kind.sql +90 -0
- package/src/migrations/0045_plugin_dependencies.sql +9 -0
- package/src/migrations/0046_git_sources.sql +25 -0
- package/src/migrations/0047_marketplace_entry_heads.sql +7 -0
- package/src/migrations/0048_marketplace_entry_trees.sql +8 -0
- package/src/migrations/0049_plugin_upgrades.sql +37 -0
- package/src/migrations/0050_bootstrap.sql +53 -0
- package/src/migrations/0051_claude_compat.sql +26 -0
- package/src/migrations/0052_conversations_account_agent_idx.sql +5 -0
- package/src/migrations/0053_subagents.sql +73 -0
- package/src/migrations/0054_subagent_wait_expiry.sql +7 -0
- package/src/migrations/0055_subagent_parent_indexes.sql +10 -0
- package/src/migrations/0056_approval_reason.sql +3 -0
- package/src/migrations/0057_conversation_titles.sql +11 -0
- package/src/migrations/0058_conversation_selection.sql +4 -0
- package/src/migrations/0059_conversation_queue.sql +22 -0
- package/src/migrations/0060_file_previewers.sql +10 -0
- package/src/migrations/0061_queue_selection.sql +5 -0
- package/src/migrations/0062_queued_skill.sql +8 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type Transaction } from "kysely";
|
|
2
|
+
import type { KernelDatabase, KernelDb } from "../db/kernel-schema.js";
|
|
3
|
+
/** 插件迁移完成(kernel bus 主题,频道 `cap:kernel:plugins.migrated`,payload `{ plugin, sha256 }`)。 */
|
|
4
|
+
export declare const PLUGINS_MIGRATED_TOPIC = "plugins.migrated";
|
|
5
|
+
/** 插件迁移咨询锁的键前缀(`hashtext(<前缀><插件名>)`)。 */
|
|
6
|
+
export declare const MIGRATE_LOCK_PREFIX = "capybara.plugin-migrate:";
|
|
7
|
+
/** {@link ensureMigrated} 的依赖。 */
|
|
8
|
+
export interface MigrateLockDeps {
|
|
9
|
+
db: KernelDb;
|
|
10
|
+
/** 迁移用独立连接(不走连接池)。 */
|
|
11
|
+
dbUrl: string;
|
|
12
|
+
connectTimeoutMs?: number | undefined;
|
|
13
|
+
/** 发布 `plugins.migrated`(kernel bus)。 */
|
|
14
|
+
bus: {
|
|
15
|
+
publish(topic: string, payload: unknown): Promise<void>;
|
|
16
|
+
};
|
|
17
|
+
log?: {
|
|
18
|
+
warn(msg: string, fields?: Record<string, unknown>): void;
|
|
19
|
+
};
|
|
20
|
+
/** 中止进行中的迁移(宿主关闭)。 */
|
|
21
|
+
signal?: AbortSignal | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* 迁移的总时限(毫秒,`extensionHost.migrationTimeoutSeconds`):到时终止迁移会话并抛错(调用方记 migration_failed),
|
|
24
|
+
* 咨询锁随会话结束释放;迁移会话另设同值的 `statement_timeout` 与不超过 {@link MIGRATION_LOCK_TIMEOUT_MS} 的
|
|
25
|
+
* `lock_timeout`。不给不限时。
|
|
26
|
+
*/
|
|
27
|
+
timeoutMs?: number | undefined;
|
|
28
|
+
}
|
|
29
|
+
/** 插件迁移等锁(表锁、按 schema 的咨询锁)的上限:排在它后面的业务查询不被长时间堵住。 */
|
|
30
|
+
export declare const MIGRATION_LOCK_TIMEOUT_MS = 30000;
|
|
31
|
+
/**
|
|
32
|
+
* 某插件某个包的迁移由一个副本持锁执行(C16,F-P):
|
|
33
|
+
* 1. 独立 `pg.Client`(不走连接池)上 `pg_try_advisory_lock(hashtext('capybara.plugin-migrate:' || name))`,
|
|
34
|
+
* 拿不到 → `busy`(别的副本正在迁移;调用方记 `pending_migration`,等 `plugins.migrated` 或下一个周期);
|
|
35
|
+
* 2. 拿到后复核安装记录:已换成别的包 → `busy`(不迁移过期目标,下一轮按新目标处理);`migrated_sha` 已是它 → `migrated`;
|
|
36
|
+
* 3. 执行迁移(迁移器另开会话,持按 schema 的锁;只做扩展,见 .agents/skills/writing-migrations;`timeoutMs` 限时),
|
|
37
|
+
* 写 `migrated_sha`;
|
|
38
|
+
* 4. 结束会话(锁随之释放,进程崩溃时同样释放),发布 `plugins.migrated {plugin, sha256}`(失败只告警)。
|
|
39
|
+
* `dir` 为迁移目录的绝对路径(只取审阅过的 `capybara.migrations`);没有迁移时直接记下 `migrated_sha`。
|
|
40
|
+
* 迁移出错时抛出(不写 `migrated_sha`)。
|
|
41
|
+
*/
|
|
42
|
+
export declare function ensureMigrated(d: MigrateLockDeps, name: string, sha256: string, dir: string | undefined): Promise<"migrated" | "busy">;
|
|
43
|
+
/**
|
|
44
|
+
* 目标包里尚未执行过的迁移文件(降级判断,C16:降级仅当目标版本的迁移文件都已执行过):
|
|
45
|
+
* 按插件 schema 的 `_migrations` 表比对文件名与 checksum(与迁移器相同的 sha256);改过内容的也算未执行。
|
|
46
|
+
* 插件从没迁移过时返回全部文件。
|
|
47
|
+
*/
|
|
48
|
+
export declare function unrunMigrations(db: KernelDb | Transaction<KernelDatabase>, name: string, files: {
|
|
49
|
+
file: string;
|
|
50
|
+
sql: string;
|
|
51
|
+
}[]): Promise<string[]>;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { sql } from "kysely";
|
|
3
|
+
import pg from "pg";
|
|
4
|
+
import { pluginSchemaName } from "../ctx/create-ctx.js";
|
|
5
|
+
import { migrate } from "../db/migrator.js";
|
|
6
|
+
import { pgConnectOptions } from "../db/pool.js";
|
|
7
|
+
/** 插件迁移完成(kernel bus 主题,频道 `cap:kernel:plugins.migrated`,payload `{ plugin, sha256 }`)。 */
|
|
8
|
+
export const PLUGINS_MIGRATED_TOPIC = "plugins.migrated";
|
|
9
|
+
/** 插件迁移咨询锁的键前缀(`hashtext(<前缀><插件名>)`)。 */
|
|
10
|
+
export const MIGRATE_LOCK_PREFIX = "capybara.plugin-migrate:";
|
|
11
|
+
/** 插件迁移等锁(表锁、按 schema 的咨询锁)的上限:排在它后面的业务查询不被长时间堵住。 */
|
|
12
|
+
export const MIGRATION_LOCK_TIMEOUT_MS = 30_000;
|
|
13
|
+
/**
|
|
14
|
+
* 某插件某个包的迁移由一个副本持锁执行(C16,F-P):
|
|
15
|
+
* 1. 独立 `pg.Client`(不走连接池)上 `pg_try_advisory_lock(hashtext('capybara.plugin-migrate:' || name))`,
|
|
16
|
+
* 拿不到 → `busy`(别的副本正在迁移;调用方记 `pending_migration`,等 `plugins.migrated` 或下一个周期);
|
|
17
|
+
* 2. 拿到后复核安装记录:已换成别的包 → `busy`(不迁移过期目标,下一轮按新目标处理);`migrated_sha` 已是它 → `migrated`;
|
|
18
|
+
* 3. 执行迁移(迁移器另开会话,持按 schema 的锁;只做扩展,见 .agents/skills/writing-migrations;`timeoutMs` 限时),
|
|
19
|
+
* 写 `migrated_sha`;
|
|
20
|
+
* 4. 结束会话(锁随之释放,进程崩溃时同样释放),发布 `plugins.migrated {plugin, sha256}`(失败只告警)。
|
|
21
|
+
* `dir` 为迁移目录的绝对路径(只取审阅过的 `capybara.migrations`);没有迁移时直接记下 `migrated_sha`。
|
|
22
|
+
* 迁移出错时抛出(不写 `migrated_sha`)。
|
|
23
|
+
*/
|
|
24
|
+
export async function ensureMigrated(d, name, sha256, dir) {
|
|
25
|
+
const client = new pg.Client({
|
|
26
|
+
connectionString: d.dbUrl,
|
|
27
|
+
...pgConnectOptions({ connectTimeoutMs: d.connectTimeoutMs }),
|
|
28
|
+
});
|
|
29
|
+
client.on("error", () => { });
|
|
30
|
+
let ran = false;
|
|
31
|
+
try {
|
|
32
|
+
await client.connect();
|
|
33
|
+
const lock = await client.query("SELECT pg_try_advisory_lock(hashtext($1)) AS ok", [`${MIGRATE_LOCK_PREFIX}${name}`]);
|
|
34
|
+
if (lock.rows[0]?.ok !== true)
|
|
35
|
+
return "busy";
|
|
36
|
+
const row = (await client.query("SELECT sha256, migrated_sha FROM capybara.extension_installs WHERE name = $1", [name])).rows[0];
|
|
37
|
+
if (row?.sha256 !== sha256)
|
|
38
|
+
return "busy";
|
|
39
|
+
if (row.migrated_sha === sha256)
|
|
40
|
+
return "migrated";
|
|
41
|
+
if (dir !== undefined) {
|
|
42
|
+
const timeout = d.timeoutMs === undefined ? undefined : AbortSignal.timeout(d.timeoutMs);
|
|
43
|
+
const signals = [d.signal, timeout].filter((x) => x !== undefined);
|
|
44
|
+
try {
|
|
45
|
+
await migrate(d.dbUrl, { schema: pluginSchemaName(name), dir }, {
|
|
46
|
+
connectTimeoutMs: d.connectTimeoutMs,
|
|
47
|
+
signal: signals.length > 0 ? AbortSignal.any(signals) : undefined,
|
|
48
|
+
...(d.timeoutMs !== undefined && {
|
|
49
|
+
statementTimeoutMs: d.timeoutMs,
|
|
50
|
+
lockTimeoutMs: Math.min(d.timeoutMs, MIGRATION_LOCK_TIMEOUT_MS),
|
|
51
|
+
}),
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
if (timeout?.aborted && !d.signal?.aborted) {
|
|
56
|
+
throw new Error(`plugin ${name}: migrations did not finish within ${Math.round(d.timeoutMs / 1000)}s (extensionHost.migrationTimeoutSeconds); the migration session was terminated`, { cause: e });
|
|
57
|
+
}
|
|
58
|
+
throw e;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
await client.query("UPDATE capybara.extension_installs SET migrated_sha = $2 WHERE name = $1 AND sha256 = $2", [name, sha256]);
|
|
62
|
+
ran = true;
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
// 会话结束即释放咨询锁(不把持锁连接还给任何池)
|
|
66
|
+
await client.end().catch(() => { });
|
|
67
|
+
}
|
|
68
|
+
if (ran) {
|
|
69
|
+
try {
|
|
70
|
+
await d.bus.publish(PLUGINS_MIGRATED_TOPIC, { plugin: name, sha256 });
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
d.log?.warn("cannot publish plugins.migrated; other replicas pick it up on the next reconcile", {
|
|
74
|
+
plugin: name,
|
|
75
|
+
err,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return "migrated";
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 目标包里尚未执行过的迁移文件(降级判断,C16:降级仅当目标版本的迁移文件都已执行过):
|
|
83
|
+
* 按插件 schema 的 `_migrations` 表比对文件名与 checksum(与迁移器相同的 sha256);改过内容的也算未执行。
|
|
84
|
+
* 插件从没迁移过时返回全部文件。
|
|
85
|
+
*/
|
|
86
|
+
export async function unrunMigrations(db, name, files) {
|
|
87
|
+
if (files.length === 0)
|
|
88
|
+
return [];
|
|
89
|
+
const schema = pluginSchemaName(name);
|
|
90
|
+
const exists = await sql `SELECT to_regclass(${`"${schema}"._migrations`})::text AS t`.execute(db);
|
|
91
|
+
const done = new Map();
|
|
92
|
+
if (exists.rows[0]?.t) {
|
|
93
|
+
const rows = await sql `SELECT name, checksum FROM ${sql.table(`${schema}._migrations`)}`.execute(db);
|
|
94
|
+
for (const r of rows.rows)
|
|
95
|
+
done.set(r.name, r.checksum);
|
|
96
|
+
}
|
|
97
|
+
return files
|
|
98
|
+
.filter((f) => done.get(f.file) !== createHash("sha256").update(f.sql).digest("hex"))
|
|
99
|
+
.map((f) => f.file);
|
|
100
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type Principal } from "../identity/principal.js";
|
|
3
|
+
import { type OrgContext } from "../orgs/org.guard.js";
|
|
4
|
+
import type { OrgExtensionConfigs, OrgExtensionView } from "./org-config.js";
|
|
5
|
+
declare const PutBody: z.ZodObject<{
|
|
6
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
7
|
+
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
8
|
+
force: z.ZodOptional<z.ZodBoolean>;
|
|
9
|
+
}, z.core.$strict>;
|
|
10
|
+
/**
|
|
11
|
+
* Org-level extension enablement and config (`/api/v1/orgs/:orgId/extensions`); responses echo only
|
|
12
|
+
* non-secret config and whether each secret is set.
|
|
13
|
+
*/
|
|
14
|
+
export declare class OrgExtensionConfigsController {
|
|
15
|
+
private readonly configs;
|
|
16
|
+
constructor(configs: OrgExtensionConfigs);
|
|
17
|
+
list(org: OrgContext): Promise<{
|
|
18
|
+
extensions: OrgExtensionView[];
|
|
19
|
+
}>;
|
|
20
|
+
put(principal: Principal, org: OrgContext, extension: string, body: z.infer<typeof PutBody>): Promise<{
|
|
21
|
+
extension: OrgExtensionView;
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
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 { z } from "zod";
|
|
12
|
+
import { ORG_EXTENSION_CONFIGS } from "../http/tokens.js";
|
|
13
|
+
import { ZodPipe } from "../http/zod.pipe.js";
|
|
14
|
+
import { CurrentPrincipal, patTokenId, requireUser, } from "../identity/principal.js";
|
|
15
|
+
import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
|
|
16
|
+
const PutBody = z
|
|
17
|
+
.object({
|
|
18
|
+
enabled: z.boolean().optional(),
|
|
19
|
+
config: z.record(z.string(), z.unknown()).optional(),
|
|
20
|
+
force: z.boolean().optional(),
|
|
21
|
+
})
|
|
22
|
+
.strict();
|
|
23
|
+
/**
|
|
24
|
+
* Org-level extension enablement and config (`/api/v1/orgs/:orgId/extensions`); responses echo only
|
|
25
|
+
* non-secret config and whether each secret is set.
|
|
26
|
+
*/
|
|
27
|
+
let OrgExtensionConfigsController = class OrgExtensionConfigsController {
|
|
28
|
+
configs;
|
|
29
|
+
constructor(configs) {
|
|
30
|
+
this.configs = configs;
|
|
31
|
+
}
|
|
32
|
+
async list(org) {
|
|
33
|
+
return { extensions: await this.configs.list(org.orgId) };
|
|
34
|
+
}
|
|
35
|
+
async put(principal, org, extension, body) {
|
|
36
|
+
const p = requireUser(principal);
|
|
37
|
+
return {
|
|
38
|
+
extension: await this.configs.put(org.orgId, extension, body, p.account.id, patTokenId(p)),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
__decorate([
|
|
43
|
+
Get(),
|
|
44
|
+
OrgAction("org.extensions.manage"),
|
|
45
|
+
__param(0, CurrentOrg())
|
|
46
|
+
], OrgExtensionConfigsController.prototype, "list", null);
|
|
47
|
+
__decorate([
|
|
48
|
+
Put(":extension"),
|
|
49
|
+
OrgAction("org.extensions.manage"),
|
|
50
|
+
__param(0, CurrentPrincipal()),
|
|
51
|
+
__param(1, CurrentOrg()),
|
|
52
|
+
__param(2, Param("extension")),
|
|
53
|
+
__param(3, Body(new ZodPipe(PutBody)))
|
|
54
|
+
], OrgExtensionConfigsController.prototype, "put", null);
|
|
55
|
+
OrgExtensionConfigsController = __decorate([
|
|
56
|
+
Controller("api/v1/orgs/:orgId/extensions"),
|
|
57
|
+
__param(0, Inject(ORG_EXTENSION_CONFIGS))
|
|
58
|
+
], OrgExtensionConfigsController);
|
|
59
|
+
export { OrgExtensionConfigsController };
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import type { Transaction } from "kysely";
|
|
2
|
+
import type { z } from "zod";
|
|
3
|
+
import { type Keyring } from "../ctx/secrets.js";
|
|
4
|
+
import type { KernelDatabase, KernelDb } from "../db/kernel-schema.js";
|
|
5
|
+
import { type JsonSchema } from "./config-json-schema.js";
|
|
6
|
+
import type { ExtensionHost } from "./host.js";
|
|
7
|
+
import { type PermissionGroup } from "./permission-view.js";
|
|
8
|
+
type Trx = Transaction<KernelDatabase>;
|
|
9
|
+
/** 组织视角下一个已加载插件的状态;`config` 永远不含密钥字段,密钥只回显「是否已设置」。 */
|
|
10
|
+
export interface OrgExtensionView {
|
|
11
|
+
plugin: string;
|
|
12
|
+
version: string;
|
|
13
|
+
enabled: boolean;
|
|
14
|
+
/** 插件是否声明了 `config.org`。 */
|
|
15
|
+
configurable: boolean;
|
|
16
|
+
/** 已存的非密钥配置;未配置或不可配置时为 null。 */
|
|
17
|
+
config: Record<string, unknown> | null;
|
|
18
|
+
secrets: {
|
|
19
|
+
path: string;
|
|
20
|
+
set: boolean;
|
|
21
|
+
}[];
|
|
22
|
+
/** 插件要用的权限,按类别分组并标出敏感项(密钥、公开路由、工具、hook)。 */
|
|
23
|
+
permissions: PermissionGroup[];
|
|
24
|
+
/** `config.org` 的 JSON Schema(密钥字段带 `x-secret`);不可配置时为 null。 */
|
|
25
|
+
orgConfigSchema: JsonSchema | null;
|
|
26
|
+
/**
|
|
27
|
+
* 插件此刻在部署上可用(已加载)。false:已安装但在部署上停用(或尚未加载),组织页显示「不可用」,
|
|
28
|
+
* 组织的启用开关保留不变(不能修改),其余字段为空。
|
|
29
|
+
*/
|
|
30
|
+
available: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* A required bootstrap plugin: enabled in every org (`enabled` is always true) and cannot be
|
|
33
|
+
* disabled here (`extension.required`); its org config, when it has one, can still be set.
|
|
34
|
+
*/
|
|
35
|
+
required: boolean;
|
|
36
|
+
}
|
|
37
|
+
/** `put` 的输入:`config` 中的密钥字段缺省 = 保留原值、`null` = 清除、其他值 = 新值。 */
|
|
38
|
+
export interface OrgExtensionInput {
|
|
39
|
+
enabled?: boolean | undefined;
|
|
40
|
+
config?: Record<string, unknown> | undefined;
|
|
41
|
+
/** Disable even when enabled dependents remain (default `extension.has_dependents`). */
|
|
42
|
+
force?: boolean | undefined;
|
|
43
|
+
}
|
|
44
|
+
/** `put` 的内部选项(不来自 HTTP)。 */
|
|
45
|
+
export interface OrgExtensionPutOptions {
|
|
46
|
+
/**
|
|
47
|
+
* Enable through this enterprise catalog item (the extension's own item, or an app item: plugins
|
|
48
|
+
* in an app follow the app item's policy, C22). When omitted, judged by every source item in
|
|
49
|
+
* `extension_catalog_sources` (the strictest wins); an extension not installed through the catalog
|
|
50
|
+
* is not bound by catalog policy.
|
|
51
|
+
*/
|
|
52
|
+
viaItem?: string;
|
|
53
|
+
/**
|
|
54
|
+
* With `viaItem`: the item whose policy approves the enabling (a dependency's extension: the
|
|
55
|
+
* plugin the org is installing; default `viaItem`).
|
|
56
|
+
*/
|
|
57
|
+
approvedBy?: string;
|
|
58
|
+
/**
|
|
59
|
+
* 应用安装用:在组织行锁内读到该插件已启用时什么都不写(不改配置、不审计),并把 `skipped` 置为 true——
|
|
60
|
+
* 「之前就启用」与「本次启用」在锁内判定,不会与并发的启用竞争。
|
|
61
|
+
*/
|
|
62
|
+
ifDisabled?: {
|
|
63
|
+
skipped: boolean;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* 在同一个事务(组织行锁内)里最后执行,`skipped` 同 {@link ifDisabled}:应用安装在这里记组件,启用与记录之间
|
|
67
|
+
* 插不进并发的卸载。
|
|
68
|
+
*/
|
|
69
|
+
inTransaction?: (t: Trx, skipped: boolean) => Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
/** 校验失败的单条原因:只含路径与按 issue 类型生成的说明,不回显字段值。 */
|
|
72
|
+
export interface ConfigIssue {
|
|
73
|
+
path: string;
|
|
74
|
+
message: string;
|
|
75
|
+
}
|
|
76
|
+
export declare function toIssues(error: z.ZodError): ConfigIssue[];
|
|
77
|
+
/**
|
|
78
|
+
* Org-level extension config: enablement and the `config.org` config stored per org.
|
|
79
|
+
* The non-secret part is stored in `capybara.extension_org_configs.config`; each secret field is
|
|
80
|
+
* encrypted separately in `capybara.secrets` (namespace `kernel`, key `plugin-config:<plugin>:<path>`),
|
|
81
|
+
* written in the same transaction as the config row.
|
|
82
|
+
* No in-process state: every call reads PG, safe with multiple replicas.
|
|
83
|
+
*/
|
|
84
|
+
export declare class OrgExtensionConfigs {
|
|
85
|
+
private readonly db;
|
|
86
|
+
private readonly keyring;
|
|
87
|
+
private readonly host;
|
|
88
|
+
private readonly hooks;
|
|
89
|
+
constructor(db: KernelDb, keyring: Keyring, host: ExtensionHost, hooks?: {
|
|
90
|
+
/**
|
|
91
|
+
* 经手(写入或解密读出)的密钥值,含嵌套字段;只在事务提交后调用(回滚的写入不上报)。
|
|
92
|
+
* 内核传 `log.addOrgSecrets` 使其在日志中打码。
|
|
93
|
+
*/
|
|
94
|
+
onSecrets?: (values: string[]) => void;
|
|
95
|
+
/**
|
|
96
|
+
* 写入提交之后调用(`enabled` 为写入后的启用状态)。内核传:停用时给该组织该插件的渠道连接广播
|
|
97
|
+
* `channel.changed`,持有长连接的副本立即断开。
|
|
98
|
+
*/
|
|
99
|
+
afterPut?: (orgId: string, plugin: string, enabled: boolean) => Promise<void>;
|
|
100
|
+
/** 部署上的安装记录(任何期望状态):没加载的列为不可用(T14)。 */
|
|
101
|
+
installed?: () => Promise<{
|
|
102
|
+
name: string;
|
|
103
|
+
version: string;
|
|
104
|
+
}[]>;
|
|
105
|
+
/** 仅供测试:在读完配置行之后、读密钥之前插入确定性的交错点。 */
|
|
106
|
+
afterConfigRowRead?: () => Promise<void>;
|
|
107
|
+
});
|
|
108
|
+
/** 把一份组织配置里的密钥值交给 onSecrets(无回调或无密钥时无操作);调用方须在事务提交后调用。 */
|
|
109
|
+
private reportSecrets;
|
|
110
|
+
/** `REPEATABLE READ` 只读事务:配置行与密钥来自同一个快照,不会读到跨两次提交的混合状态。 */
|
|
111
|
+
private snapshot;
|
|
112
|
+
/**
|
|
113
|
+
* 列出所有已加载插件在该组织下的状态(按加载顺序);无记录时 enabled=false、config=null。
|
|
114
|
+
* 之后是已安装但此刻没加载的插件(部署上停用等),`available: false`,按名字排序。
|
|
115
|
+
*/
|
|
116
|
+
list(orgId: string): Promise<OrgExtensionView[]>;
|
|
117
|
+
/**
|
|
118
|
+
* Writes enablement and / or config. The actor's role is re-read under the org row lock (needs
|
|
119
|
+
* `org.extensions.manage`).
|
|
120
|
+
* - Extension not loaded -> `extension.not_found`; `config` given but the extension has no
|
|
121
|
+
* `config.org` -> `extension.no_org_config`; `enabled: false` for a required bootstrap plugin
|
|
122
|
+
* -> `extension.required` (it stays enabled in every org; its config can still be written).
|
|
123
|
+
* - Non-secret fields are replaced as a whole by the given value; secret fields keep the old value
|
|
124
|
+
* when omitted, `null` clears, any other value is the new value.
|
|
125
|
+
* - The merged full config (or, without `config`, the existing config when the result is enabled)
|
|
126
|
+
* does not satisfy the schema -> `extension.config_invalid`.
|
|
127
|
+
*/
|
|
128
|
+
put(orgId: string, plugin: string, input: OrgExtensionInput, actorAccountId: string, actorTokenId?: string, opts?: OrgExtensionPutOptions): Promise<OrgExtensionView>;
|
|
129
|
+
/**
|
|
130
|
+
* 读取并解密某插件在该组织下的完整配置(供运行时按组织构造插件实例)。
|
|
131
|
+
* A required bootstrap plugin is enabled without a row (its stored config, or `{}`, is validated).
|
|
132
|
+
* 无记录 → undefined;插件无 `config.org` 或已停用(`enabled=false`,不校验、不读密钥)时 `config` 为 null。
|
|
133
|
+
* 配置行与密钥在同一个 `REPEATABLE READ` 只读事务里读取。
|
|
134
|
+
* 已存配置不再满足 schema(如插件升级后)→ 抛 Error,信息含插件名、组织 ID 与出错路径(不含值)。
|
|
135
|
+
*/
|
|
136
|
+
get(orgId: string, plugin: string): Promise<{
|
|
137
|
+
enabled: boolean;
|
|
138
|
+
config: unknown;
|
|
139
|
+
} | undefined>;
|
|
140
|
+
private decode;
|
|
141
|
+
/**
|
|
142
|
+
* 该组织里已启用、且所 requires 的按组织启用的能力只剩这个插件提供的插件(停用它会让它们失去依赖)。
|
|
143
|
+
* 在调用方事务里读(应用卸载 / 回滚前判断是否保留)。
|
|
144
|
+
*/
|
|
145
|
+
enabledDependents(t: Trx, orgId: string, plugin: string): Promise<string[]>;
|
|
146
|
+
/**
|
|
147
|
+
* 在调用方事务里停用(应用安装的回滚与卸载用;调用方已锁组织行并复核角色):不检查依赖方,配置保留,
|
|
148
|
+
* 审计 `org.plugin_config.updated`(带 reason)。提交后调用方须再调 {@link afterDisable}。
|
|
149
|
+
*/
|
|
150
|
+
disableIn(t: Trx, orgId: string, plugin: string, actorAccountId: string, reason: string): Promise<boolean>;
|
|
151
|
+
/** {@link disableIn} 的事务提交之后:通知停用(断开该插件的渠道连接等)。 */
|
|
152
|
+
afterDisable(orgId: string, plugin: string): Promise<void>;
|
|
153
|
+
/** 该组织已启用的插件名(只含当前已加载的插件;待批准的不算;必需的引导插件始终算启用)。 */
|
|
154
|
+
private enabledSet;
|
|
155
|
+
/** 引用是否为按组织启用的能力。 */
|
|
156
|
+
private isOrgScoped;
|
|
157
|
+
/** 该组织内(已启用、已加载、非 `except`)提供完整引用(含主版本)的插件。 */
|
|
158
|
+
private enabledProviders;
|
|
159
|
+
/** 启用前:A `requires` 的每个 orgScoped 能力(按主版本),该组织须至少有一个已启用的提供方。 */
|
|
160
|
+
private assertDependenciesEnabled;
|
|
161
|
+
/** 停用前:若停用后某个已启用的插件所 requires 的 orgScoped 能力(按主版本)再无已启用的提供方,拒绝。 */
|
|
162
|
+
private assertNoEnabledDependents;
|
|
163
|
+
private manifest;
|
|
164
|
+
private permissionsOf;
|
|
165
|
+
private view;
|
|
166
|
+
/** 该组织在 `kernel` 命名空间下已设置的插件配置密钥键(不解密)。 */
|
|
167
|
+
private setSecretKeys;
|
|
168
|
+
}
|
|
169
|
+
export {};
|