@capybara-hq/kernel 0.0.0-stage → 0.1.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +2 -0
- package/README.md +20 -2
- package/bootstrap.json +22 -0
- package/dist/admin/admin.controller.d.ts +139 -0
- package/dist/admin/admin.controller.js +238 -0
- package/dist/admin/extensions.controller.d.ts +100 -0
- package/dist/admin/extensions.controller.js +226 -0
- package/dist/admin/setup.controller.d.ts +36 -0
- package/dist/admin/setup.controller.js +106 -0
- package/dist/admin/setup.service.d.ts +47 -0
- package/dist/admin/setup.service.js +90 -0
- package/dist/agents/agents.controller.d.ts +205 -0
- package/dist/agents/agents.controller.js +144 -0
- package/dist/agents/agents.service.d.ts +177 -0
- package/dist/agents/agents.service.js +677 -0
- package/dist/agents/definition.d.ts +198 -0
- package/dist/agents/definition.js +152 -0
- package/dist/agents/models.controller.d.ts +13 -0
- package/dist/agents/models.controller.js +31 -0
- package/dist/agents/templates.controller.d.ts +15 -0
- package/dist/agents/templates.controller.js +37 -0
- package/dist/agents/templates.d.ts +83 -0
- package/dist/agents/templates.js +173 -0
- package/dist/catalog/admin-catalog.controller.d.ts +143 -0
- package/dist/catalog/admin-catalog.controller.js +245 -0
- package/dist/catalog/catalog.service.d.ts +430 -0
- package/dist/catalog/catalog.service.js +882 -0
- package/dist/catalog/claude/agents.d.ts +27 -0
- package/dist/catalog/claude/agents.js +270 -0
- package/dist/catalog/claude/commands.d.ts +50 -0
- package/dist/catalog/claude/commands.js +179 -0
- package/dist/catalog/claude/manifest.d.ts +69 -0
- package/dist/catalog/claude/manifest.js +134 -0
- package/dist/catalog/claude/marketplace.d.ts +35 -0
- package/dist/catalog/claude/marketplace.js +194 -0
- package/dist/catalog/claude/mcp.d.ts +33 -0
- package/dist/catalog/claude/mcp.js +226 -0
- package/dist/catalog/claude/report.d.ts +86 -0
- package/dist/catalog/claude/report.js +121 -0
- package/dist/catalog/claude/translate.d.ts +56 -0
- package/dist/catalog/claude/translate.js +857 -0
- package/dist/catalog/cli.d.ts +46 -0
- package/dist/catalog/cli.js +211 -0
- package/dist/catalog/git-source.d.ts +127 -0
- package/dist/catalog/git-source.js +520 -0
- package/dist/catalog/marketplace-fetch.d.ts +99 -0
- package/dist/catalog/marketplace-fetch.js +203 -0
- package/dist/catalog/marketplaces.controller.d.ts +97 -0
- package/dist/catalog/marketplaces.controller.js +197 -0
- package/dist/catalog/marketplaces.service.d.ts +340 -0
- package/dist/catalog/marketplaces.service.js +1217 -0
- package/dist/catalog/org-catalog.controller.d.ts +128 -0
- package/dist/catalog/org-catalog.controller.js +277 -0
- package/dist/catalog/org-catalog.service.d.ts +246 -0
- package/dist/catalog/org-catalog.service.js +625 -0
- package/dist/catalog/plugin-import.d.ts +436 -0
- package/dist/catalog/plugin-import.js +1069 -0
- package/dist/catalog/plugin-install.d.ts +447 -0
- package/dist/catalog/plugin-install.js +1333 -0
- package/dist/catalog/plugin-package.d.ts +143 -0
- package/dist/catalog/plugin-package.js +382 -0
- package/dist/catalog/plugin-upgrade.d.ts +222 -0
- package/dist/catalog/plugin-upgrade.js +1219 -0
- package/dist/catalog/requests.service.d.ts +162 -0
- package/dist/catalog/requests.service.js +504 -0
- package/dist/catalog/schema-path.d.ts +7 -0
- package/dist/catalog/schema-path.js +63 -0
- package/dist/catalog/upgrade-targets.d.ts +59 -0
- package/dist/catalog/upgrade-targets.js +90 -0
- package/dist/catalog/versions.d.ts +31 -0
- package/dist/catalog/versions.js +44 -0
- package/dist/channels/actions.d.ts +37 -0
- package/dist/channels/actions.js +121 -0
- package/dist/channels/cards.d.ts +44 -0
- package/dist/channels/cards.js +156 -0
- package/dist/channels/connections.controller.d.ts +59 -0
- package/dist/channels/connections.controller.js +115 -0
- package/dist/channels/connections.service.d.ts +187 -0
- package/dist/channels/connections.service.js +534 -0
- package/dist/channels/features.d.ts +12 -0
- package/dist/channels/features.js +22 -0
- package/dist/channels/inbound.d.ts +120 -0
- package/dist/channels/inbound.js +332 -0
- package/dist/channels/outbound.d.ts +140 -0
- package/dist/channels/outbound.js +1125 -0
- package/dist/channels/phrases.d.ts +100 -0
- package/dist/channels/phrases.js +81 -0
- package/dist/channels/supervisor.d.ts +182 -0
- package/dist/channels/supervisor.js +625 -0
- package/dist/channels/threads.d.ts +29 -0
- package/dist/channels/threads.js +104 -0
- package/dist/channels/webhook-url.d.ts +16 -0
- package/dist/channels/webhook-url.js +34 -0
- package/dist/channels/webhook.controller.d.ts +19 -0
- package/dist/channels/webhook.controller.js +72 -0
- package/dist/channels/webhook.d.ts +73 -0
- package/dist/channels/webhook.js +274 -0
- package/dist/config/docs.d.ts +9 -0
- package/dist/config/docs.js +85 -0
- package/dist/config/env.d.ts +6 -0
- package/dist/config/env.js +73 -0
- package/dist/config/fields.d.ts +42 -0
- package/dist/config/fields.js +214 -0
- package/dist/config/file-source.d.ts +3 -0
- package/dist/config/file-source.js +31 -0
- package/dist/config/load.d.ts +20 -0
- package/dist/config/load.js +98 -0
- package/dist/config/nacos-source.d.ts +31 -0
- package/dist/config/nacos-source.js +229 -0
- package/dist/config/schema.d.ts +223 -0
- package/dist/config/schema.js +1151 -0
- package/dist/config/sources.d.ts +18 -0
- package/dist/config/sources.js +59 -0
- package/dist/config/types.d.ts +9 -0
- package/dist/config/types.js +7 -0
- package/dist/conversations/artifacts.d.ts +52 -0
- package/dist/conversations/artifacts.js +137 -0
- package/dist/conversations/attachments.controller.d.ts +28 -0
- package/dist/conversations/attachments.controller.js +96 -0
- package/dist/conversations/attachments.service.d.ts +180 -0
- package/dist/conversations/attachments.service.js +578 -0
- package/dist/conversations/conversations.controller.d.ts +288 -0
- package/dist/conversations/conversations.controller.js +607 -0
- package/dist/conversations/conversations.service.d.ts +321 -0
- package/dist/conversations/conversations.service.js +754 -0
- package/dist/conversations/event-log.d.ts +122 -0
- package/dist/conversations/event-log.js +259 -0
- package/dist/conversations/events.d.ts +856 -0
- package/dist/conversations/events.js +639 -0
- package/dist/conversations/files.d.ts +92 -0
- package/dist/conversations/files.js +213 -0
- package/dist/conversations/outputs-read.d.ts +34 -0
- package/dist/conversations/outputs-read.js +37 -0
- package/dist/conversations/queue.d.ts +169 -0
- package/dist/conversations/queue.js +527 -0
- package/dist/conversations/sandbox-status.d.ts +21 -0
- package/dist/conversations/sandbox-status.js +24 -0
- package/dist/conversations/selection.d.ts +46 -0
- package/dist/conversations/selection.js +75 -0
- package/dist/conversations/titles.d.ts +93 -0
- package/dist/conversations/titles.js +422 -0
- package/dist/ctx/bus.d.ts +16 -0
- package/dist/ctx/bus.js +101 -0
- package/dist/ctx/create-ctx.d.ts +109 -0
- package/dist/ctx/create-ctx.js +592 -0
- package/dist/ctx/kv.d.ts +4 -0
- package/dist/ctx/kv.js +31 -0
- package/dist/ctx/lock.d.ts +4 -0
- package/dist/ctx/lock.js +39 -0
- package/dist/ctx/namespace.d.ts +6 -0
- package/dist/ctx/namespace.js +12 -0
- package/dist/ctx/queue.d.ts +25 -0
- package/dist/ctx/queue.js +150 -0
- package/dist/ctx/secrets.d.ts +45 -0
- package/dist/ctx/secrets.js +175 -0
- package/dist/db/kernel-schema.d.ts +1122 -0
- package/dist/db/kernel-schema.js +5 -0
- package/dist/db/migrator.d.ts +28 -0
- package/dist/db/migrator.js +140 -0
- package/dist/db/pool.d.ts +21 -0
- package/dist/db/pool.js +28 -0
- package/dist/db/sql-statements.d.ts +34 -0
- package/dist/db/sql-statements.js +168 -0
- package/dist/errors.d.ts +210 -0
- package/dist/errors.js +212 -0
- package/dist/evals/budget.d.ts +61 -0
- package/dist/evals/budget.js +181 -0
- package/dist/evals/diff.d.ts +55 -0
- package/dist/evals/diff.js +133 -0
- package/dist/evals/judge.d.ts +53 -0
- package/dist/evals/judge.js +149 -0
- package/dist/evals/plan.d.ts +47 -0
- package/dist/evals/plan.js +77 -0
- package/dist/evals/reconstruct.d.ts +137 -0
- package/dist/evals/reconstruct.js +322 -0
- package/dist/evals/recorded-tools.d.ts +54 -0
- package/dist/evals/recorded-tools.js +167 -0
- package/dist/evals/run-replay.d.ts +86 -0
- package/dist/evals/run-replay.js +502 -0
- package/dist/evals/runs.controller.d.ts +100 -0
- package/dist/evals/runs.controller.js +199 -0
- package/dist/evals/runs.service.d.ts +275 -0
- package/dist/evals/runs.service.js +836 -0
- package/dist/evals/sets.controller.d.ts +61 -0
- package/dist/evals/sets.controller.js +183 -0
- package/dist/evals/sets.service.d.ts +128 -0
- package/dist/evals/sets.service.js +558 -0
- package/dist/evals/snapshot.d.ts +76 -0
- package/dist/evals/snapshot.js +207 -0
- package/dist/evals/step-replay.d.ts +113 -0
- package/dist/evals/step-replay.js +181 -0
- package/dist/evals/trajectory.controller.d.ts +41 -0
- package/dist/evals/trajectory.controller.js +88 -0
- package/dist/evals/trajectory.d.ts +144 -0
- package/dist/evals/trajectory.js +338 -0
- package/dist/evals/trajectory.service.d.ts +108 -0
- package/dist/evals/trajectory.service.js +323 -0
- package/dist/evals/worker.d.ts +101 -0
- package/dist/evals/worker.js +789 -0
- package/dist/extensions/admin-ops.d.ts +105 -0
- package/dist/extensions/admin-ops.js +353 -0
- package/dist/extensions/admin-view.d.ts +79 -0
- package/dist/extensions/admin-view.js +327 -0
- package/dist/extensions/approvals.d.ts +119 -0
- package/dist/extensions/approvals.js +205 -0
- package/dist/extensions/blobs.d.ts +45 -0
- package/dist/extensions/blobs.js +160 -0
- package/dist/extensions/bootstrap.d.ts +149 -0
- package/dist/extensions/bootstrap.js +441 -0
- package/dist/extensions/cli.d.ts +61 -0
- package/dist/extensions/cli.js +165 -0
- package/dist/extensions/config-json-schema.d.ts +9 -0
- package/dist/extensions/config-json-schema.js +73 -0
- package/dist/extensions/deployment-config.d.ts +138 -0
- package/dist/extensions/deployment-config.js +394 -0
- package/dist/extensions/enabled.d.ts +31 -0
- package/dist/extensions/enabled.js +55 -0
- package/dist/extensions/hooks.d.ts +161 -0
- package/dist/extensions/hooks.js +425 -0
- package/dist/extensions/host.d.ts +577 -0
- package/dist/extensions/host.js +2071 -0
- package/dist/extensions/inflight.d.ts +69 -0
- package/dist/extensions/inflight.js +277 -0
- package/dist/extensions/installs.d.ts +166 -0
- package/dist/extensions/installs.js +253 -0
- package/dist/extensions/instance.d.ts +167 -0
- package/dist/extensions/instance.js +329 -0
- package/dist/extensions/ledger.d.ts +30 -0
- package/dist/extensions/ledger.js +50 -0
- package/dist/extensions/lifecycle.d.ts +80 -0
- package/dist/extensions/lifecycle.js +152 -0
- package/dist/extensions/migrate-lock.d.ts +51 -0
- package/dist/extensions/migrate-lock.js +100 -0
- package/dist/extensions/org-config.controller.d.ts +24 -0
- package/dist/extensions/org-config.controller.js +59 -0
- package/dist/extensions/org-config.d.ts +169 -0
- package/dist/extensions/org-config.js +520 -0
- package/dist/extensions/package.d.ts +115 -0
- package/dist/extensions/package.js +246 -0
- package/dist/extensions/permission-set.d.ts +117 -0
- package/dist/extensions/permission-set.js +184 -0
- package/dist/extensions/permission-view.d.ts +194 -0
- package/dist/extensions/permission-view.js +284 -0
- package/dist/extensions/registry.d.ts +24 -0
- package/dist/extensions/registry.js +56 -0
- package/dist/extensions/resolve.d.ts +12 -0
- package/dist/extensions/resolve.js +71 -0
- package/dist/extensions/sources.d.ts +69 -0
- package/dist/extensions/sources.js +120 -0
- package/dist/extensions/sync.d.ts +40 -0
- package/dist/extensions/sync.js +242 -0
- package/dist/files/previewers.controller.d.ts +46 -0
- package/dist/files/previewers.controller.js +105 -0
- package/dist/files/previewers.d.ts +100 -0
- package/dist/files/previewers.js +250 -0
- package/dist/http/api.module.d.ts +114 -0
- package/dist/http/api.module.js +448 -0
- package/dist/http/app.d.ts +77 -0
- package/dist/http/app.js +170 -0
- package/dist/http/error.filter.d.ts +21 -0
- package/dist/http/error.filter.js +85 -0
- package/dist/http/gateway.module.d.ts +15 -0
- package/dist/http/gateway.module.js +13 -0
- package/dist/http/health.controller.d.ts +26 -0
- package/dist/http/health.controller.js +79 -0
- package/dist/http/nest-logger.d.ts +20 -0
- package/dist/http/nest-logger.js +28 -0
- package/dist/http/plugin-dispatch.d.ts +68 -0
- package/dist/http/plugin-dispatch.js +200 -0
- package/dist/http/tokens.d.ts +131 -0
- package/dist/http/tokens.js +131 -0
- package/dist/http/zod.pipe.d.ts +8 -0
- package/dist/http/zod.pipe.js +14 -0
- package/dist/identity/accounts.d.ts +93 -0
- package/dist/identity/accounts.js +367 -0
- package/dist/identity/api-tokens.d.ts +73 -0
- package/dist/identity/api-tokens.js +197 -0
- package/dist/identity/audit.d.ts +23 -0
- package/dist/identity/audit.js +41 -0
- package/dist/identity/auth.controller.d.ts +40 -0
- package/dist/identity/auth.controller.js +130 -0
- package/dist/identity/auth.guard.d.ts +41 -0
- package/dist/identity/auth.guard.js +162 -0
- package/dist/identity/binding.d.ts +47 -0
- package/dist/identity/binding.js +84 -0
- package/dist/identity/cookies.d.ts +16 -0
- package/dist/identity/cookies.js +32 -0
- package/dist/identity/credential-check.d.ts +17 -0
- package/dist/identity/credential-check.js +24 -0
- package/dist/identity/enterprise-admin.d.ts +14 -0
- package/dist/identity/enterprise-admin.js +27 -0
- package/dist/identity/external.d.ts +106 -0
- package/dist/identity/external.js +337 -0
- package/dist/identity/hash.d.ts +2 -0
- package/dist/identity/hash.js +3 -0
- package/dist/identity/login.d.ts +6 -0
- package/dist/identity/login.js +20 -0
- package/dist/identity/me.controller.d.ts +61 -0
- package/dist/identity/me.controller.js +159 -0
- package/dist/identity/passwords.d.ts +6 -0
- package/dist/identity/passwords.js +37 -0
- package/dist/identity/principal.d.ts +56 -0
- package/dist/identity/principal.js +38 -0
- package/dist/identity/rate-limit.d.ts +55 -0
- package/dist/identity/rate-limit.js +121 -0
- package/dist/identity/sessions.d.ts +84 -0
- package/dist/identity/sessions.js +306 -0
- package/dist/identity/settings.d.ts +121 -0
- package/dist/identity/settings.js +248 -0
- package/dist/identity/sso.controller.d.ts +59 -0
- package/dist/identity/sso.controller.js +192 -0
- package/dist/identity/sso.d.ts +83 -0
- package/dist/identity/sso.js +202 -0
- package/dist/inbox/inbox.service.d.ts +43 -0
- package/dist/inbox/inbox.service.js +57 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.js +65 -0
- package/dist/kernel.d.ts +256 -0
- package/dist/kernel.js +1326 -0
- package/dist/log.d.ts +48 -0
- package/dist/log.js +229 -0
- package/dist/models/prices.d.ts +53 -0
- package/dist/models/prices.js +121 -0
- package/dist/models/purposes.controller.d.ts +19 -0
- package/dist/models/purposes.controller.js +56 -0
- package/dist/models/purposes.d.ts +140 -0
- package/dist/models/purposes.js +267 -0
- package/dist/net/proxy.d.ts +44 -0
- package/dist/net/proxy.js +162 -0
- package/dist/net/public-address.d.ts +60 -0
- package/dist/net/public-address.js +271 -0
- package/dist/net/safe-fetch.d.ts +38 -0
- package/dist/net/safe-fetch.js +140 -0
- package/dist/orgs/directory-sync.controller.d.ts +14 -0
- package/dist/orgs/directory-sync.controller.js +40 -0
- package/dist/orgs/directory-sync.d.ts +166 -0
- package/dist/orgs/directory-sync.js +558 -0
- package/dist/orgs/invitations.controller.d.ts +58 -0
- package/dist/orgs/invitations.controller.js +137 -0
- package/dist/orgs/invitations.service.d.ts +80 -0
- package/dist/orgs/invitations.service.js +217 -0
- package/dist/orgs/members.service.d.ts +63 -0
- package/dist/orgs/members.service.js +234 -0
- package/dist/orgs/offboarding.d.ts +141 -0
- package/dist/orgs/offboarding.js +398 -0
- package/dist/orgs/org-lock.d.ts +32 -0
- package/dist/orgs/org-lock.js +46 -0
- package/dist/orgs/org.guard.d.ts +35 -0
- package/dist/orgs/org.guard.js +95 -0
- package/dist/orgs/orgs.controller.d.ts +78 -0
- package/dist/orgs/orgs.controller.js +192 -0
- package/dist/orgs/orgs.service.d.ts +61 -0
- package/dist/orgs/orgs.service.js +209 -0
- package/dist/orgs/roles.d.ts +13 -0
- package/dist/orgs/roles.js +58 -0
- package/dist/orgs/settings.controller.d.ts +20 -0
- package/dist/orgs/settings.controller.js +53 -0
- package/dist/orgs/settings.service.d.ts +120 -0
- package/dist/orgs/settings.service.js +178 -0
- package/dist/packages/npm.d.ts +50 -0
- package/dist/packages/npm.js +218 -0
- package/dist/packages/provenance.d.ts +47 -0
- package/dist/packages/provenance.js +147 -0
- package/dist/packages/tgz.d.ts +76 -0
- package/dist/packages/tgz.js +225 -0
- package/dist/runtime/abort.d.ts +32 -0
- package/dist/runtime/abort.js +71 -0
- package/dist/runtime/checkpointer.d.ts +32 -0
- package/dist/runtime/checkpointer.js +243 -0
- package/dist/runtime/context/build.d.ts +254 -0
- package/dist/runtime/context/build.js +693 -0
- package/dist/runtime/context/claude-tools.d.ts +11 -0
- package/dist/runtime/context/claude-tools.js +24 -0
- package/dist/runtime/context/compaction.d.ts +26 -0
- package/dist/runtime/context/compaction.js +195 -0
- package/dist/runtime/context/pairing.d.ts +11 -0
- package/dist/runtime/context/pairing.js +82 -0
- package/dist/runtime/context/reminders.d.ts +5 -0
- package/dist/runtime/context/reminders.js +11 -0
- package/dist/runtime/context/skills.d.ts +105 -0
- package/dist/runtime/context/skills.js +283 -0
- package/dist/runtime/context/tokens.d.ts +19 -0
- package/dist/runtime/context/tokens.js +104 -0
- package/dist/runtime/conversation-lock.d.ts +40 -0
- package/dist/runtime/conversation-lock.js +97 -0
- package/dist/runtime/hook-calls.d.ts +84 -0
- package/dist/runtime/hook-calls.js +136 -0
- package/dist/runtime/langgraph-loop.d.ts +52 -0
- package/dist/runtime/langgraph-loop.js +247 -0
- package/dist/runtime/loop.d.ts +93 -0
- package/dist/runtime/loop.js +7 -0
- package/dist/runtime/maintenance.d.ts +80 -0
- package/dist/runtime/maintenance.js +147 -0
- package/dist/runtime/media-cache.d.ts +21 -0
- package/dist/runtime/media-cache.js +51 -0
- package/dist/runtime/model-call.d.ts +176 -0
- package/dist/runtime/model-call.js +1049 -0
- package/dist/runtime/providers.d.ts +86 -0
- package/dist/runtime/providers.js +224 -0
- package/dist/runtime/quota.d.ts +29 -0
- package/dist/runtime/quota.js +70 -0
- package/dist/runtime/run-finish.d.ts +45 -0
- package/dist/runtime/run-finish.js +69 -0
- package/dist/runtime/run-queue.d.ts +121 -0
- package/dist/runtime/run-queue.js +493 -0
- package/dist/runtime/run-worker.d.ts +138 -0
- package/dist/runtime/run-worker.js +805 -0
- package/dist/runtime/stream.controller.d.ts +34 -0
- package/dist/runtime/stream.controller.js +122 -0
- package/dist/runtime/stream.d.ts +63 -0
- package/dist/runtime/stream.js +262 -0
- package/dist/runtime/subagents/child.d.ts +80 -0
- package/dist/runtime/subagents/child.js +225 -0
- package/dist/runtime/subagents/definition.d.ts +103 -0
- package/dist/runtime/subagents/definition.js +392 -0
- package/dist/runtime/subagents/dispatch.d.ts +69 -0
- package/dist/runtime/subagents/dispatch.js +502 -0
- package/dist/runtime/subagents/limits.d.ts +23 -0
- package/dist/runtime/subagents/limits.js +34 -0
- package/dist/runtime/subagents/org-agents.d.ts +50 -0
- package/dist/runtime/subagents/org-agents.js +70 -0
- package/dist/runtime/subagents/preamble.d.ts +7 -0
- package/dist/runtime/subagents/preamble.js +11 -0
- package/dist/runtime/subagents/progress.d.ts +26 -0
- package/dist/runtime/subagents/progress.js +36 -0
- package/dist/runtime/subagents/roster.d.ts +55 -0
- package/dist/runtime/subagents/roster.js +111 -0
- package/dist/runtime/subagents/skill-fork.d.ts +123 -0
- package/dist/runtime/subagents/skill-fork.js +259 -0
- package/dist/runtime/usage-report.d.ts +163 -0
- package/dist/runtime/usage-report.js +550 -0
- package/dist/runtime/waits.d.ts +233 -0
- package/dist/runtime/waits.js +883 -0
- package/dist/sandbox/leases.d.ts +169 -0
- package/dist/sandbox/leases.js +515 -0
- package/dist/sandbox/lifecycle.d.ts +21 -0
- package/dist/sandbox/lifecycle.js +68 -0
- package/dist/sandbox/sandbox.service.d.ts +249 -0
- package/dist/sandbox/sandbox.service.js +908 -0
- package/dist/skills/catalog.d.ts +149 -0
- package/dist/skills/catalog.js +405 -0
- package/dist/skills/changes.controller.d.ts +56 -0
- package/dist/skills/changes.controller.js +136 -0
- package/dist/skills/changes.service.d.ts +175 -0
- package/dist/skills/changes.service.js +805 -0
- package/dist/skills/invocable.controller.d.ts +23 -0
- package/dist/skills/invocable.controller.js +50 -0
- package/dist/skills/invocation-keys.d.ts +23 -0
- package/dist/skills/invocation-keys.js +44 -0
- package/dist/skills/invoke.d.ts +135 -0
- package/dist/skills/invoke.js +286 -0
- package/dist/skills/package.d.ts +87 -0
- package/dist/skills/package.js +227 -0
- package/dist/skills/skills.controller.d.ts +40 -0
- package/dist/skills/skills.controller.js +110 -0
- package/dist/skills/skills.service.d.ts +192 -0
- package/dist/skills/skills.service.js +567 -0
- package/dist/storage/prefix.d.ts +36 -0
- package/dist/storage/prefix.js +104 -0
- package/dist/storage/purge.d.ts +27 -0
- package/dist/storage/purge.js +75 -0
- package/dist/storage/storage.service.d.ts +44 -0
- package/dist/storage/storage.service.js +145 -0
- package/dist/text.d.ts +13 -0
- package/dist/text.js +13 -0
- package/dist/tools/approvals.controller.d.ts +53 -0
- package/dist/tools/approvals.controller.js +128 -0
- package/dist/tools/approvals.service.d.ts +172 -0
- package/dist/tools/approvals.service.js +568 -0
- package/dist/tools/breaker.d.ts +28 -0
- package/dist/tools/breaker.js +72 -0
- package/dist/tools/builtins/agent.d.ts +81 -0
- package/dist/tools/builtins/agent.js +223 -0
- package/dist/tools/builtins/ask-user.d.ts +28 -0
- package/dist/tools/builtins/ask-user.js +139 -0
- package/dist/tools/builtins/read-tool-output.d.ts +18 -0
- package/dist/tools/builtins/read-tool-output.js +108 -0
- package/dist/tools/builtins/sandbox/bash.d.ts +16 -0
- package/dist/tools/builtins/sandbox/bash.js +137 -0
- package/dist/tools/builtins/sandbox/common.d.ts +114 -0
- package/dist/tools/builtins/sandbox/common.js +304 -0
- package/dist/tools/builtins/sandbox/deliver.d.ts +5 -0
- package/dist/tools/builtins/sandbox/deliver.js +180 -0
- package/dist/tools/builtins/sandbox/edit.d.ts +4 -0
- package/dist/tools/builtins/sandbox/edit.js +98 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +25 -0
- package/dist/tools/builtins/sandbox/glob-match.js +240 -0
- package/dist/tools/builtins/sandbox/glob.d.ts +4 -0
- package/dist/tools/builtins/sandbox/glob.js +104 -0
- package/dist/tools/builtins/sandbox/grep.d.ts +9 -0
- package/dist/tools/builtins/sandbox/grep.js +133 -0
- package/dist/tools/builtins/sandbox/index.d.ts +12 -0
- package/dist/tools/builtins/sandbox/index.js +27 -0
- package/dist/tools/builtins/sandbox/names.d.ts +7 -0
- package/dist/tools/builtins/sandbox/names.js +20 -0
- package/dist/tools/builtins/sandbox/read.d.ts +8 -0
- package/dist/tools/builtins/sandbox/read.js +121 -0
- package/dist/tools/builtins/sandbox/write.d.ts +4 -0
- package/dist/tools/builtins/sandbox/write.js +88 -0
- package/dist/tools/builtins/skill-load.d.ts +53 -0
- package/dist/tools/builtins/skill-load.js +446 -0
- package/dist/tools/builtins/skill-write.d.ts +59 -0
- package/dist/tools/builtins/skill-write.js +244 -0
- package/dist/tools/builtins/tool-search.d.ts +31 -0
- package/dist/tools/builtins/tool-search.js +171 -0
- package/dist/tools/connector-content.controller.d.ts +34 -0
- package/dist/tools/connector-content.controller.js +78 -0
- package/dist/tools/connector-content.d.ts +104 -0
- package/dist/tools/connector-content.js +267 -0
- package/dist/tools/connectors.controller.d.ts +210 -0
- package/dist/tools/connectors.controller.js +234 -0
- package/dist/tools/connectors.service.d.ts +303 -0
- package/dist/tools/connectors.service.js +1102 -0
- package/dist/tools/credentials.d.ts +139 -0
- package/dist/tools/credentials.js +351 -0
- package/dist/tools/drift.d.ts +141 -0
- package/dist/tools/drift.js +539 -0
- package/dist/tools/elicitation.d.ts +81 -0
- package/dist/tools/elicitation.js +266 -0
- package/dist/tools/endpoint.d.ts +18 -0
- package/dist/tools/endpoint.js +115 -0
- package/dist/tools/info.d.ts +67 -0
- package/dist/tools/info.js +113 -0
- package/dist/tools/naming.d.ts +27 -0
- package/dist/tools/naming.js +47 -0
- package/dist/tools/oauth/discovery.d.ts +65 -0
- package/dist/tools/oauth/discovery.js +307 -0
- package/dist/tools/oauth/flow.d.ts +63 -0
- package/dist/tools/oauth/flow.js +237 -0
- package/dist/tools/oauth/oauth.controller.d.ts +31 -0
- package/dist/tools/oauth/oauth.controller.js +95 -0
- package/dist/tools/oauth/tokens.d.ts +111 -0
- package/dist/tools/oauth/tokens.js +258 -0
- package/dist/tools/outputs.d.ts +61 -0
- package/dist/tools/outputs.js +156 -0
- package/dist/tools/pipeline.d.ts +322 -0
- package/dist/tools/pipeline.js +1236 -0
- package/dist/tools/policy.d.ts +60 -0
- package/dist/tools/policy.js +236 -0
- package/dist/tools/questions.controller.d.ts +24 -0
- package/dist/tools/questions.controller.js +58 -0
- package/dist/tools/questions.service.d.ts +103 -0
- package/dist/tools/questions.service.js +295 -0
- package/dist/tools/redact.d.ts +20 -0
- package/dist/tools/redact.js +60 -0
- package/dist/tools/registry.d.ts +246 -0
- package/dist/tools/registry.js +481 -0
- package/dist/tools/resources.d.ts +16 -0
- package/dist/tools/resources.js +76 -0
- package/dist/tools/specs.d.ts +14 -0
- package/dist/tools/specs.js +31 -0
- package/dist/tools/validate.d.ts +20 -0
- package/dist/tools/validate.js +183 -0
- package/dist/tools/view.d.ts +43 -0
- package/dist/tools/view.js +225 -0
- package/dist/ui/embed-token.d.ts +31 -0
- package/dist/ui/embed-token.js +132 -0
- package/dist/ui/registry.d.ts +58 -0
- package/dist/ui/registry.js +90 -0
- package/dist/ui/ui-stream.d.ts +37 -0
- package/dist/ui/ui-stream.js +162 -0
- package/dist/ui/views.controller.d.ts +81 -0
- package/dist/ui/views.controller.js +261 -0
- package/dist/ui/views.d.ts +155 -0
- package/dist/ui/views.js +306 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.js +6 -0
- package/package.json +67 -3
- package/src/migrations/0001_init.sql +8 -0
- package/src/migrations/0002_secrets.sql +8 -0
- package/src/migrations/0003_identity.sql +117 -0
- package/src/migrations/0004_plugin_org_config_nullable.sql +3 -0
- package/src/migrations/0005_agents.sql +27 -0
- package/src/migrations/0006_conversations.sql +37 -0
- package/src/migrations/0007_checkpoints.sql +26 -0
- package/src/migrations/0008_runs_trigger_seq.sql +3 -0
- package/src/migrations/0009_runs_active_unique.sql +4 -0
- package/src/migrations/0010_tools.sql +125 -0
- package/src/migrations/0011_approvals_spec.sql +10 -0
- package/src/migrations/0012_run_waits.sql +24 -0
- package/src/migrations/0013_app_tools_source.sql +4 -0
- package/src/migrations/0014_tool_specs.sql +8 -0
- package/src/migrations/0015_tool_drift.sql +20 -0
- package/src/migrations/0016_plugin_permissions.sql +11 -0
- package/src/migrations/0017_identity_sources.sql +6 -0
- package/src/migrations/0018_channels.sql +74 -0
- package/src/migrations/0019_identity_trust.sql +17 -0
- package/src/migrations/0020_channel_card_lookup.sql +10 -0
- package/src/migrations/0021_org_storage_purge.sql +9 -0
- package/src/migrations/0022_attachments.sql +29 -0
- package/src/migrations/0023_sandboxes.sql +37 -0
- package/src/migrations/0024_skills.sql +46 -0
- package/src/migrations/0025_skills_catalog_idx.sql +6 -0
- package/src/migrations/0026_skill_changes.sql +34 -0
- package/src/migrations/0027_model_prices.sql +18 -0
- package/src/migrations/0028_evals.sql +105 -0
- package/src/migrations/0029_model_purposes.sql +18 -0
- package/src/migrations/0030_plugin_installs.sql +73 -0
- package/src/migrations/0031_plugin_snapshot_source.sql +6 -0
- package/src/migrations/0032_plugin_deployment_configs.sql +10 -0
- package/src/migrations/0033_rename_apps_to_connectors.sql +25 -0
- package/src/migrations/0034_directory.sql +49 -0
- package/src/migrations/0035_catalogs.sql +40 -0
- package/src/migrations/0036_app_import_staging.sql +17 -0
- package/src/migrations/0037_directory_installs.sql +92 -0
- package/src/migrations/0038_channel_inbound_mode.sql +6 -0
- package/src/migrations/0039_channel_card_pending.sql +8 -0
- package/src/migrations/0040_usage_report_sweep.sql +10 -0
- package/src/migrations/0041_rename_plugins_to_extensions.sql +38 -0
- package/src/migrations/0042_rename_directory_to_catalog.sql +80 -0
- package/src/migrations/0043_rename_app_installs_to_plugin_installs.sql +20 -0
- package/src/migrations/0044_catalog_one_kind.sql +90 -0
- package/src/migrations/0045_plugin_dependencies.sql +9 -0
- package/src/migrations/0046_git_sources.sql +25 -0
- package/src/migrations/0047_marketplace_entry_heads.sql +7 -0
- package/src/migrations/0048_marketplace_entry_trees.sql +8 -0
- package/src/migrations/0049_plugin_upgrades.sql +37 -0
- package/src/migrations/0050_bootstrap.sql +53 -0
- package/src/migrations/0051_claude_compat.sql +26 -0
- package/src/migrations/0052_conversations_account_agent_idx.sql +5 -0
- package/src/migrations/0053_subagents.sql +73 -0
- package/src/migrations/0054_subagent_wait_expiry.sql +7 -0
- package/src/migrations/0055_subagent_parent_indexes.sql +10 -0
- package/src/migrations/0056_approval_reason.sql +3 -0
- package/src/migrations/0057_conversation_titles.sql +11 -0
- package/src/migrations/0058_conversation_selection.sql +4 -0
- package/src/migrations/0059_conversation_queue.sql +22 -0
- package/src/migrations/0060_file_previewers.sql +10 -0
- package/src/migrations/0061_queue_selection.sql +5 -0
- package/src/migrations/0062_queued_skill.sql +8 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { KernelDb } from "../db/kernel-schema.js";
|
|
2
|
+
import type { StorageService } from "../storage/storage.service.js";
|
|
3
|
+
import type { ExtensionPackage } from "./package.js";
|
|
4
|
+
/**
|
|
5
|
+
* Content-addressed extension package store (C13): one copy per sha256 of the whole tgz.
|
|
6
|
+
* - With object storage: `deployment/plugins/blobs/<sha256>.tgz` (`blob_store = object`);
|
|
7
|
+
* - without object storage, or when the caller asks (the CLI process loads no object-store
|
|
8
|
+
* extension, F-Q): PG `extension_blobs` (`blob_store = pg`, also limited by `packages.maxBytes`).
|
|
9
|
+
* Each package's location is recorded in `extension_packages.blob_store`; reads follow the record and
|
|
10
|
+
* check the sha256.
|
|
11
|
+
*/
|
|
12
|
+
/** 取到的包与 sha256 不符(存储里的字节被篡改或损坏)。 */
|
|
13
|
+
export declare class ExtensionBlobIntegrityError extends Error {
|
|
14
|
+
constructor(sha256: string);
|
|
15
|
+
}
|
|
16
|
+
/** 对象存储里的键(相对 `deployment/`)。 */
|
|
17
|
+
export declare const blobKey: (sha256: string) => string;
|
|
18
|
+
export interface ExtensionBlobSource {
|
|
19
|
+
source: "npm" | "file" | "catalog" | "bootstrap";
|
|
20
|
+
ref: string;
|
|
21
|
+
/** 上传者账号;CLI 为 null。 */
|
|
22
|
+
actor: string | null;
|
|
23
|
+
/** 强制存放位置;缺省有对象存储就用它。 */
|
|
24
|
+
store?: "object" | "pg";
|
|
25
|
+
}
|
|
26
|
+
export declare class ExtensionBlobs {
|
|
27
|
+
private readonly d;
|
|
28
|
+
constructor(d: {
|
|
29
|
+
db: KernelDb;
|
|
30
|
+
/** 没有时一律存 PG(如 CLI)。 */
|
|
31
|
+
storage?: StorageService;
|
|
32
|
+
/** `packages.maxBytes`(每次调用时读)。 */
|
|
33
|
+
maxBytes: () => number;
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* Stores a validated package (the result of {@link readExtensionPackage}) and its bytes, and writes
|
|
37
|
+
* the `extension_packages` row. Does nothing when a package with the same sha256 exists
|
|
38
|
+
* (content-addressed, idempotent; replicas writing the same package concurrently is harmless).
|
|
39
|
+
*/
|
|
40
|
+
put(p: ExtensionPackage, bytes: Uint8Array, src: ExtensionBlobSource): Promise<void>;
|
|
41
|
+
/** 已有记录的包:按记录的存放位置检查字节在不在,不在就写回(调用方已校验 sha256)。 */
|
|
42
|
+
private repair;
|
|
43
|
+
/** Reads the package from its recorded location and checks its sha256; a mismatch throws {@link ExtensionBlobIntegrityError}. */
|
|
44
|
+
get(sha256: string): Promise<Uint8Array>;
|
|
45
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* Content-addressed extension package store (C13): one copy per sha256 of the whole tgz.
|
|
4
|
+
* - With object storage: `deployment/plugins/blobs/<sha256>.tgz` (`blob_store = object`);
|
|
5
|
+
* - without object storage, or when the caller asks (the CLI process loads no object-store
|
|
6
|
+
* extension, F-Q): PG `extension_blobs` (`blob_store = pg`, also limited by `packages.maxBytes`).
|
|
7
|
+
* Each package's location is recorded in `extension_packages.blob_store`; reads follow the record and
|
|
8
|
+
* check the sha256.
|
|
9
|
+
*/
|
|
10
|
+
/** 取到的包与 sha256 不符(存储里的字节被篡改或损坏)。 */
|
|
11
|
+
export class ExtensionBlobIntegrityError extends Error {
|
|
12
|
+
constructor(sha256) {
|
|
13
|
+
super(`plugin package ${sha256}: stored bytes do not match the sha256`);
|
|
14
|
+
this.name = "ExtensionBlobIntegrityError";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** 对象存储里的键(相对 `deployment/`)。 */
|
|
18
|
+
export const blobKey = (sha256) => `plugins/blobs/${sha256}.tgz`;
|
|
19
|
+
const SHA256_RE = /^[0-9a-f]{64}$/;
|
|
20
|
+
export class ExtensionBlobs {
|
|
21
|
+
d;
|
|
22
|
+
constructor(d) {
|
|
23
|
+
this.d = d;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Stores a validated package (the result of {@link readExtensionPackage}) and its bytes, and writes
|
|
27
|
+
* the `extension_packages` row. Does nothing when a package with the same sha256 exists
|
|
28
|
+
* (content-addressed, idempotent; replicas writing the same package concurrently is harmless).
|
|
29
|
+
*/
|
|
30
|
+
async put(p, bytes, src) {
|
|
31
|
+
if (bytes.byteLength > this.d.maxBytes()) {
|
|
32
|
+
throw new Error(`the package is larger than ${this.d.maxBytes()} bytes`);
|
|
33
|
+
}
|
|
34
|
+
if (createHash("sha256").update(bytes).digest("hex") !== p.sha256) {
|
|
35
|
+
throw new ExtensionBlobIntegrityError(p.sha256);
|
|
36
|
+
}
|
|
37
|
+
const existing = await this.d.db
|
|
38
|
+
.selectFrom("extension_packages")
|
|
39
|
+
.select("blob_store")
|
|
40
|
+
.where("sha256", "=", p.sha256)
|
|
41
|
+
.executeTakeFirst();
|
|
42
|
+
if (existing) {
|
|
43
|
+
// 记录已在:字节若丢了(对象被删、库被清)就按原存放位置补上
|
|
44
|
+
await this.repair(p.sha256, existing.blob_store, bytes);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const store = src.store ?? (this.d.storage?.available ? "object" : "pg");
|
|
48
|
+
if (store === "object") {
|
|
49
|
+
if (!this.d.storage)
|
|
50
|
+
throw new Error("object storage is not available");
|
|
51
|
+
await this.d.storage.deployment().put(blobKey(p.sha256), bytes, {
|
|
52
|
+
contentType: "application/gzip",
|
|
53
|
+
size: bytes.byteLength,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
const m = p.section.manifest;
|
|
57
|
+
// the row stores the plugin's extension section as reviewed (without the name / version copy)
|
|
58
|
+
const { name: _name, version: _version, ...section } = p.section;
|
|
59
|
+
await this.d.db.transaction().execute(async (trx) => {
|
|
60
|
+
const inserted = await trx
|
|
61
|
+
.insertInto("extension_packages")
|
|
62
|
+
.values({
|
|
63
|
+
sha256: p.sha256,
|
|
64
|
+
name: m.name,
|
|
65
|
+
package_name: String(p.packageJson.name),
|
|
66
|
+
version: m.version,
|
|
67
|
+
size: p.size,
|
|
68
|
+
section: JSON.stringify(section),
|
|
69
|
+
blob_store: store,
|
|
70
|
+
source: src.source,
|
|
71
|
+
source_ref: src.ref,
|
|
72
|
+
uploaded_by: src.actor,
|
|
73
|
+
})
|
|
74
|
+
.onConflict((oc) => oc.column("sha256").doNothing())
|
|
75
|
+
.returning("sha256")
|
|
76
|
+
.executeTakeFirst();
|
|
77
|
+
if (inserted && store === "pg") {
|
|
78
|
+
await trx
|
|
79
|
+
.insertInto("extension_blobs")
|
|
80
|
+
.values({ sha256: p.sha256, bytes: Buffer.from(bytes) })
|
|
81
|
+
.onConflict((oc) => oc.column("sha256").doNothing())
|
|
82
|
+
.execute();
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/** 已有记录的包:按记录的存放位置检查字节在不在,不在就写回(调用方已校验 sha256)。 */
|
|
87
|
+
async repair(sha256, store, bytes) {
|
|
88
|
+
if (store === "pg") {
|
|
89
|
+
await this.d.db
|
|
90
|
+
.insertInto("extension_blobs")
|
|
91
|
+
.values({ sha256, bytes: Buffer.from(bytes) })
|
|
92
|
+
.onConflict((oc) => oc.column("sha256").doNothing())
|
|
93
|
+
.execute();
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (!this.d.storage?.available)
|
|
97
|
+
return;
|
|
98
|
+
const d = this.d.storage.deployment();
|
|
99
|
+
if ((await d.head(blobKey(sha256))) === null) {
|
|
100
|
+
await d.put(blobKey(sha256), bytes, {
|
|
101
|
+
contentType: "application/gzip",
|
|
102
|
+
size: bytes.byteLength,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** Reads the package from its recorded location and checks its sha256; a mismatch throws {@link ExtensionBlobIntegrityError}. */
|
|
107
|
+
async get(sha256) {
|
|
108
|
+
if (!SHA256_RE.test(sha256))
|
|
109
|
+
throw new Error(`invalid package sha256 "${sha256}"`);
|
|
110
|
+
const row = await this.d.db
|
|
111
|
+
.selectFrom("extension_packages")
|
|
112
|
+
.select("blob_store")
|
|
113
|
+
.where("sha256", "=", sha256)
|
|
114
|
+
.executeTakeFirst();
|
|
115
|
+
if (!row)
|
|
116
|
+
throw new Error(`plugin package ${sha256} is not in the package store`);
|
|
117
|
+
let bytes;
|
|
118
|
+
if (row.blob_store === "pg") {
|
|
119
|
+
const b = await this.d.db
|
|
120
|
+
.selectFrom("extension_blobs")
|
|
121
|
+
.select("bytes")
|
|
122
|
+
.where("sha256", "=", sha256)
|
|
123
|
+
.executeTakeFirst();
|
|
124
|
+
if (!b)
|
|
125
|
+
throw new Error(`plugin package ${sha256}: bytes are missing from extension_blobs`);
|
|
126
|
+
bytes = b.bytes;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
if (!this.d.storage)
|
|
130
|
+
throw new Error("object storage is not available");
|
|
131
|
+
const got = await this.d.storage.deployment().get(blobKey(sha256));
|
|
132
|
+
if (!got) {
|
|
133
|
+
// 常见原因:对象存储换了桶 / 地址,旧桶里的包没有带过来
|
|
134
|
+
throw new Error(`plugin package ${sha256} is recorded in object storage, but deployment/${blobKey(sha256)} is missing there; if the object store's bucket or endpoint was changed, copy the deployment/ prefix from the old bucket, or upload the same package again to restore it`);
|
|
135
|
+
}
|
|
136
|
+
bytes = await readCapped(got.body, this.d.maxBytes());
|
|
137
|
+
}
|
|
138
|
+
if (createHash("sha256").update(bytes).digest("hex") !== sha256) {
|
|
139
|
+
throw new ExtensionBlobIntegrityError(sha256);
|
|
140
|
+
}
|
|
141
|
+
return bytes;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
async function readCapped(body, max) {
|
|
145
|
+
const reader = body.getReader();
|
|
146
|
+
const chunks = [];
|
|
147
|
+
let total = 0;
|
|
148
|
+
for (;;) {
|
|
149
|
+
const { done, value } = await reader.read();
|
|
150
|
+
if (done)
|
|
151
|
+
break;
|
|
152
|
+
total += value.byteLength;
|
|
153
|
+
if (total > max) {
|
|
154
|
+
await reader.cancel().catch(() => { });
|
|
155
|
+
throw new Error(`stored plugin package is larger than ${max} bytes`);
|
|
156
|
+
}
|
|
157
|
+
chunks.push(value);
|
|
158
|
+
}
|
|
159
|
+
return chunks.length === 1 ? chunks[0] : Buffer.concat(chunks);
|
|
160
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { type BootstrapManifest, type Logger } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { type PluginImport } from "../catalog/plugin-import.js";
|
|
3
|
+
import type { KernelConfig } from "../config/schema.js";
|
|
4
|
+
import type { KernelDb } from "../db/kernel-schema.js";
|
|
5
|
+
import type { ExtensionAdminOps } from "./admin-ops.js";
|
|
6
|
+
import type { ExtensionInstalls } from "./installs.js";
|
|
7
|
+
import type { ExtensionSource } from "./sources.js";
|
|
8
|
+
/**
|
|
9
|
+
* The bootstrap step (package ecosystem spec §7): installs the plugins pinned by the bootstrap
|
|
10
|
+
* manifest (`packages/kernel/bootstrap.json`) from the tgz files baked into the image. It replaced
|
|
11
|
+
* the builtin extensions.
|
|
12
|
+
*
|
|
13
|
+
* - Every file (`<dir>/<name>-<version>.tgz`) is checked against the entry's sha512 before anything
|
|
14
|
+
* is read or written; a missing file is `bootstrap.missing_file`, a mismatch
|
|
15
|
+
* `bootstrap.integrity_mismatch` (both name the plugin), and then nothing is written. It never
|
|
16
|
+
* touches the network.
|
|
17
|
+
* - The whole run holds the session advisory lock `capybara.bootstrap` on a connection of its own
|
|
18
|
+
* (taken with `pg_try_advisory_lock` in a backoff loop that observes the signal, and closed
|
|
19
|
+
* afterwards, so the lock never outlives the run): when several replicas start together only one
|
|
20
|
+
* runs it; the others wait, then find it done. "Done" is a `bootstrap_runs` row for the
|
|
21
|
+
* manifest's sha256 (written with the audit `bootstrap.completed` only when every entry
|
|
22
|
+
* succeeded; otherwise the next start runs it again, which is idempotent). A lock connection
|
|
23
|
+
* that drops mid-run is not detected (its errors are swallowed) and the run goes on without the
|
|
24
|
+
* lock, so a second replica could run concurrently: accepted, since a concurrent import or
|
|
25
|
+
* install degrades to `catalog.version_exists` and a deploy from the package store.
|
|
26
|
+
* - Only entries new to the manifest are installed (Ruling 5): an optional entry that the last
|
|
27
|
+
* completed run already handled and that is not installed now (an enterprise admin uninstalled
|
|
28
|
+
* it) stays uninstalled -> `kept`. A required entry is always installed.
|
|
29
|
+
* - Per entry, by the installed state of its extension:
|
|
30
|
+
* - not installed (and new, or required): imported into the catalog (source `bootstrap`, ref
|
|
31
|
+
* `bootstrap:<name>@<version>`, like a marketplace import), installed, approved (snapshot
|
|
32
|
+
* source `bootstrap`, audited `extension.permissions_approved` with `source: "bootstrap"`)
|
|
33
|
+
* and enabled -> `installed`;
|
|
34
|
+
* - installed from `bootstrap` at a lower version: upgraded the same way (core's release vouched
|
|
35
|
+
* for the version, so new permissions are pre-approved and audited), keeping the desired state
|
|
36
|
+
* an enterprise admin chose (a disabled optional plugin stays disabled) -> `upgraded`;
|
|
37
|
+
* - installed at a higher version, or from another source (an enterprise admin upgraded it), or
|
|
38
|
+
* the name is config-declared (`declared`: config wins, no install record is created):
|
|
39
|
+
* untouched, never downgraded -> `kept`;
|
|
40
|
+
* - a declarative plugin (no extension): imported into the catalog only -> `imported` (`kept`
|
|
41
|
+
* when that version is already there, or when the entry is not new).
|
|
42
|
+
* Every extension entry gets `extension_installs.required` from the manifest, and a required one
|
|
43
|
+
* is enabled on the deployment.
|
|
44
|
+
* - Package bytes are content-addressed: when the very same tgz was ingested before with another
|
|
45
|
+
* source (e.g. imported from a marketplace), its `extension_packages` row keeps that source and
|
|
46
|
+
* so does the install record, which is then not a bootstrap install and never upgraded by a
|
|
47
|
+
* later manifest (`kept`, like a plugin the admin installed).
|
|
48
|
+
* - An install record still `required` whose entry left the manifest is not uninstalled; it only
|
|
49
|
+
* loses `required` -> `required_cleared`.
|
|
50
|
+
* A failed entry does not stop the others; the run then throws {@link BootstrapFailedError} naming
|
|
51
|
+
* them. The packages are kept in PG (`blob_store = 'pg'`), so installing an extension never needs
|
|
52
|
+
* the object store (object-store-s3 is itself a bootstrap plugin); a declarative plugin's catalog
|
|
53
|
+
* files do.
|
|
54
|
+
*/
|
|
55
|
+
/** The bootstrap manifest that ships with the kernel package. */
|
|
56
|
+
export declare const BOOTSTRAP_MANIFEST_FILE: string;
|
|
57
|
+
/** What the bootstrap step did with one entry (or one install record that left the manifest). */
|
|
58
|
+
export interface BootstrapEntryResult {
|
|
59
|
+
name: string;
|
|
60
|
+
action: "installed" | "upgraded" | "kept" | "imported" | "required_cleared";
|
|
61
|
+
/** The version installed / imported now, or the version kept. */
|
|
62
|
+
version: string;
|
|
63
|
+
}
|
|
64
|
+
export interface BootstrapResult {
|
|
65
|
+
/** sha256 (hex) of the manifest ({@link bootstrapManifestSha256}). */
|
|
66
|
+
manifestSha256: string;
|
|
67
|
+
results: BootstrapEntryResult[];
|
|
68
|
+
}
|
|
69
|
+
/** One entry the bootstrap step could not complete. */
|
|
70
|
+
export interface BootstrapFailure {
|
|
71
|
+
name: string;
|
|
72
|
+
required: boolean;
|
|
73
|
+
code: string;
|
|
74
|
+
message: string;
|
|
75
|
+
}
|
|
76
|
+
/** Some entries failed (the others were done); the run is not recorded as done. */
|
|
77
|
+
export declare class BootstrapFailedError extends Error {
|
|
78
|
+
readonly failures: BootstrapFailure[];
|
|
79
|
+
readonly results: BootstrapEntryResult[];
|
|
80
|
+
/**
|
|
81
|
+
* @param results what the entries that did not fail did (pass them as `carry` to a later run in
|
|
82
|
+
* the same start, so its record keeps `installed` instead of `kept`).
|
|
83
|
+
*/
|
|
84
|
+
constructor(failures: BootstrapFailure[], results?: BootstrapEntryResult[]);
|
|
85
|
+
/** A required entry failed: the kernel must not serve without it. */
|
|
86
|
+
get requiredFailed(): boolean;
|
|
87
|
+
}
|
|
88
|
+
/** sha256 (hex) of a manifest: of its JSON text as parsed (key order kept). */
|
|
89
|
+
export declare function bootstrapManifestSha256(manifest: BootstrapManifest): string;
|
|
90
|
+
/** Reads and parses a bootstrap manifest file; an invalid one throws with its problems. */
|
|
91
|
+
export declare function readBootstrapManifest(file?: string): Promise<BootstrapManifest>;
|
|
92
|
+
export interface BootstrapServiceDeps {
|
|
93
|
+
db: KernelDb;
|
|
94
|
+
/** The lock connection is opened separately (and closed after every run). */
|
|
95
|
+
dbUrl: string;
|
|
96
|
+
connectTimeoutMs?: number;
|
|
97
|
+
config: () => KernelConfig;
|
|
98
|
+
imports: Pick<PluginImport, "prepare" | "confirm">;
|
|
99
|
+
installs: Pick<ExtensionInstalls, "ingest">;
|
|
100
|
+
ops: Pick<ExtensionAdminOps, "install" | "enable">;
|
|
101
|
+
/**
|
|
102
|
+
* Config-declared extension names (an entry of the same name is kept, config wins, and no
|
|
103
|
+
* install record is created). The kernel resolves them from `extensions` before loading.
|
|
104
|
+
*/
|
|
105
|
+
declared?: () => ReadonlySet<string> | ReadonlyMap<string, ExtensionSource>;
|
|
106
|
+
log: Pick<Logger, "info" | "warn" | "error">;
|
|
107
|
+
}
|
|
108
|
+
export declare class BootstrapService {
|
|
109
|
+
private readonly d;
|
|
110
|
+
constructor(d: BootstrapServiceDeps);
|
|
111
|
+
/** Whether the bootstrap step completed for the manifest with this sha256. */
|
|
112
|
+
isDone(manifestSha256: string): Promise<boolean>;
|
|
113
|
+
/**
|
|
114
|
+
* Runs the bootstrap step (see the file header); when it is already done for this manifest
|
|
115
|
+
* (also when another replica finished it while this one waited for the lock) returns the
|
|
116
|
+
* recorded result without doing anything. `carry`: the results of an earlier, failed run in the
|
|
117
|
+
* same start ({@link BootstrapFailedError.results}); an entry it installed, upgraded or imported
|
|
118
|
+
* keeps that action instead of `kept` in this run's record.
|
|
119
|
+
*/
|
|
120
|
+
run(o: {
|
|
121
|
+
manifest: BootstrapManifest;
|
|
122
|
+
dir: string;
|
|
123
|
+
signal?: AbortSignal;
|
|
124
|
+
carry?: readonly BootstrapEntryResult[];
|
|
125
|
+
}): Promise<BootstrapResult>;
|
|
126
|
+
/**
|
|
127
|
+
* Runs `fn` holding the session advisory lock on a connection of its own: `pg_try_advisory_lock`
|
|
128
|
+
* retried with a backoff (100 ms doubling to 1 s) that stops when `signal` aborts. The connection
|
|
129
|
+
* is closed afterwards in every case, which releases the lock even when the unlock failed.
|
|
130
|
+
*/
|
|
131
|
+
private locked;
|
|
132
|
+
/** The entry names the last completed run handled (undefined before any run completed). */
|
|
133
|
+
private lastRunNames;
|
|
134
|
+
/** Reads every entry's file and checks its sha512 (before the lock: nothing is written yet). */
|
|
135
|
+
private verifyFiles;
|
|
136
|
+
private entry;
|
|
137
|
+
/** A declarative plugin: catalog only. Returns false when that version is already imported. */
|
|
138
|
+
private importOnly;
|
|
139
|
+
/**
|
|
140
|
+
* Imports, approves, installs and enables (one review, confirmed with `deployExtension`). When
|
|
141
|
+
* the catalog already has this version (an earlier run stopped after importing, or the same
|
|
142
|
+
* package came from a marketplace), the extension is deployed from the package store instead.
|
|
143
|
+
*/
|
|
144
|
+
private deploy;
|
|
145
|
+
/** The extension of a catalog version already imported: ingest, approve, install (, enable). */
|
|
146
|
+
private deployFromStore;
|
|
147
|
+
/** Install records still `required` whose entry left the manifest lose `required`. */
|
|
148
|
+
private clearRemoved;
|
|
149
|
+
}
|