@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,46 @@
|
|
|
1
|
+
import { type ObjectStore } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import type { KernelConfig } from "../config/schema.js";
|
|
3
|
+
import { type ExtensionCli } from "../extensions/cli.js";
|
|
4
|
+
import type { KernelLogger } from "../log.js";
|
|
5
|
+
import { CatalogService } from "./catalog.service.js";
|
|
6
|
+
import { PluginImport } from "./plugin-import.js";
|
|
7
|
+
/** {@link openCatalogCli}'s result: the extension CLI context plus the catalog services. */
|
|
8
|
+
export interface CatalogCli extends ExtensionCli {
|
|
9
|
+
catalog: CatalogService;
|
|
10
|
+
/** Plugin import (prepare / confirm). The CLI acts without an account (actor `null`). */
|
|
11
|
+
imports: PluginImport;
|
|
12
|
+
}
|
|
13
|
+
/** What the CLI can do with the deployment's object store, and why not when it cannot. */
|
|
14
|
+
export type CliObjectStore = {
|
|
15
|
+
store: ObjectStore;
|
|
16
|
+
} | {
|
|
17
|
+
store: undefined;
|
|
18
|
+
reason: string;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Sets up the deployment's object-store extension inside the CLI process. The CLI hosts no
|
|
22
|
+
* extensions, so this runs only the provider's `setup` with a context that offers `config` and
|
|
23
|
+
* `provide` (any other ctx access fails). It uses a provider only when replicas would load it:
|
|
24
|
+
* - a config-declared one: its permissions are approved and its deployment config is valid;
|
|
25
|
+
* - else an install record desired enabled (e.g. the bootstrap plugin object-store-s3) whose
|
|
26
|
+
* reviewed manifest provides `object-store@1` and whose name no config-declared extension takes:
|
|
27
|
+
* a package with migrations has had them run for its sha256 (`migrated_sha`; the CLI never
|
|
28
|
+
* migrates), its package's permissions are covered by the approved snapshot (or `autoApprove`),
|
|
29
|
+
* the package syncs into `syncDir` (checked against its sha256), its module matches the reviewed
|
|
30
|
+
* manifest, and its deployment config is valid.
|
|
31
|
+
* Config-declared providers are tried first, then install records by name.
|
|
32
|
+
*/
|
|
33
|
+
export declare function loadCliObjectStore(cli: Pick<ExtensionCli, "inspected" | "deploymentConfigs" | "deploymentConfigOf" | "approvals" | "config" | "configIssues" | "installs" | "packageSet" | "readPackage">, log: Pick<KernelLogger, "warn">, syncDir: string): Promise<CliObjectStore>;
|
|
34
|
+
/**
|
|
35
|
+
* The CLI's plugin catalog context (`capybara plugins *`): {@link openExtensionCli} plus
|
|
36
|
+
* {@link PluginImport} and {@link CatalogService}. Imports run with actor `null` (the operator of the
|
|
37
|
+
* deployment, like `capybara extensions install`: no enterprise-admin re-check, audits without an
|
|
38
|
+
* actor, permission snapshots written with source `cli`). Files of the plugin (skills, connector
|
|
39
|
+
* templates, icons) go to the deployment's object store, set up in-process from the declared or
|
|
40
|
+
* installed object-store extension (see {@link loadCliObjectStore}; an installed package is synced
|
|
41
|
+
* into a temporary directory removed on `close`); connector templates of connectors the
|
|
42
|
+
* plugin does not bring are checked statically only (the CLI loads no connector).
|
|
43
|
+
*/
|
|
44
|
+
export declare function openCatalogCli(config: KernelConfig, log: KernelLogger, opts?: {
|
|
45
|
+
resolveFrom?: string;
|
|
46
|
+
}): Promise<CatalogCli>;
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { OBJECT_STORE_EXTENSION_POINT, } from "@capybara-hq/plugin-sdk";
|
|
5
|
+
import { ApiError } from "../errors.js";
|
|
6
|
+
import { planApprovals, snapshotCovers } from "../extensions/approvals.js";
|
|
7
|
+
import { openExtensionCli } from "../extensions/cli.js";
|
|
8
|
+
import { assertSecretsReachable } from "../extensions/host.js";
|
|
9
|
+
import { importExtensionModule, matchesSection } from "../extensions/instance.js";
|
|
10
|
+
import { packageRootOf, syncPackage } from "../extensions/sync.js";
|
|
11
|
+
import { packagePath } from "../packages/tgz.js";
|
|
12
|
+
import { StorageService } from "../storage/storage.service.js";
|
|
13
|
+
import { CatalogService } from "./catalog.service.js";
|
|
14
|
+
import { PluginImport } from "./plugin-import.js";
|
|
15
|
+
/**
|
|
16
|
+
* Sets up the deployment's object-store extension inside the CLI process. The CLI hosts no
|
|
17
|
+
* extensions, so this runs only the provider's `setup` with a context that offers `config` and
|
|
18
|
+
* `provide` (any other ctx access fails). It uses a provider only when replicas would load it:
|
|
19
|
+
* - a config-declared one: its permissions are approved and its deployment config is valid;
|
|
20
|
+
* - else an install record desired enabled (e.g. the bootstrap plugin object-store-s3) whose
|
|
21
|
+
* reviewed manifest provides `object-store@1` and whose name no config-declared extension takes:
|
|
22
|
+
* a package with migrations has had them run for its sha256 (`migrated_sha`; the CLI never
|
|
23
|
+
* migrates), its package's permissions are covered by the approved snapshot (or `autoApprove`),
|
|
24
|
+
* the package syncs into `syncDir` (checked against its sha256), its module matches the reviewed
|
|
25
|
+
* manifest, and its deployment config is valid.
|
|
26
|
+
* Config-declared providers are tried first, then install records by name.
|
|
27
|
+
*/
|
|
28
|
+
export async function loadCliObjectStore(cli, log, syncDir) {
|
|
29
|
+
const providers = cli.inspected.filter((p) => p.manifest.provides.includes(OBJECT_STORE_EXTENSION_POINT));
|
|
30
|
+
const declared = new Set(cli.inspected.map((p) => p.manifest.name));
|
|
31
|
+
const installed = (await cli.installs.desired()).filter((d) => !declared.has(d.name) &&
|
|
32
|
+
(d.section.manifest?.provides ?? []).includes(OBJECT_STORE_EXTENSION_POINT));
|
|
33
|
+
if (providers.length === 0 && installed.length === 0) {
|
|
34
|
+
return { store: undefined, reason: "no object-store extension is declared or installed" };
|
|
35
|
+
}
|
|
36
|
+
const autoApprove = cli.config.extensionPermissions.autoApprove;
|
|
37
|
+
const sets = new Map(cli.inspected.map((p) => [p.manifest.name, p.permissions]));
|
|
38
|
+
const snapshots = await cli.approvals.all();
|
|
39
|
+
const decisions = planApprovals(cli.inspected.map((p) => p.manifest), sets, snapshots, { autoApprove });
|
|
40
|
+
const reasons = [];
|
|
41
|
+
/** Runs `setup` with the restricted context; the store it provided, or undefined (reason noted). */
|
|
42
|
+
const setUp = async (manifest, config) => {
|
|
43
|
+
const name = manifest.name;
|
|
44
|
+
let store;
|
|
45
|
+
const ctx = new Proxy({
|
|
46
|
+
config,
|
|
47
|
+
provide(point, impl) {
|
|
48
|
+
if (point === OBJECT_STORE_EXTENSION_POINT)
|
|
49
|
+
store = impl;
|
|
50
|
+
},
|
|
51
|
+
}, {
|
|
52
|
+
get(target, prop, receiver) {
|
|
53
|
+
if (prop in target)
|
|
54
|
+
return Reflect.get(target, prop, receiver);
|
|
55
|
+
throw new Error(`the CLI does not support ctx.${String(prop)}`);
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
try {
|
|
59
|
+
// biome-ignore lint/suspicious/noExplicitAny: a restricted context stands in for the full one
|
|
60
|
+
await manifest.setup(ctx);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
log.warn("the CLI cannot set up the object store extension", { plugin: name, err });
|
|
64
|
+
reasons.push(`${name} needs more than ctx.config and ctx.provide`);
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
if (!store)
|
|
68
|
+
reasons.push(`${name} provided no object store`);
|
|
69
|
+
return store;
|
|
70
|
+
};
|
|
71
|
+
for (const provider of providers) {
|
|
72
|
+
const name = provider.manifest.name;
|
|
73
|
+
const decision = decisions.find((d) => d.plugin === name);
|
|
74
|
+
if (decision?.action === "pending") {
|
|
75
|
+
reasons.push(`${name} awaits permission approval`);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const hasConfig = provider.manifest.config?.deployment !== undefined;
|
|
79
|
+
if (cli.configIssues.has(name) || (hasConfig && !cli.deploymentConfigs.has(name))) {
|
|
80
|
+
reasons.push(`${name} is not configured (pending deployment config)`);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const store = await setUp(provider.manifest, cli.deploymentConfigs.get(name) ?? {});
|
|
84
|
+
if (store)
|
|
85
|
+
return { store };
|
|
86
|
+
}
|
|
87
|
+
for (const d of installed) {
|
|
88
|
+
// Replicas set it up only after its migrations ran (ensureMigrated records migrated_sha); the
|
|
89
|
+
// CLI never migrates, so a package whose migrations have not run for this sha is skipped
|
|
90
|
+
if (d.section.migrations !== undefined && d.migratedSha !== d.sha256) {
|
|
91
|
+
reasons.push(`${d.name} awaits its migrations (a replica runs them when it loads it)`);
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
let set;
|
|
95
|
+
try {
|
|
96
|
+
set = await cli.packageSet(d.sha256);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
log.warn("the CLI cannot read an installed object store package", { plugin: d.name, err });
|
|
100
|
+
reasons.push(`${d.name}: its package cannot be read`);
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
if (!autoApprove && !snapshotCovers(snapshots.get(d.name), set)) {
|
|
104
|
+
reasons.push(`${d.name} awaits permission approval`);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
let manifest;
|
|
108
|
+
try {
|
|
109
|
+
const url = await syncPackage(syncDir, d.name, d.sha256, { get: (sha) => cli.readPackage(sha) }, { maxBytes: cli.config.packages.maxBytes });
|
|
110
|
+
manifest = await importExtensionModule(url, d.name, packageRootOf(url, packagePath(d.section.entry)));
|
|
111
|
+
assertSecretsReachable(manifest);
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
log.warn("the CLI cannot load an installed object store extension", { plugin: d.name, err });
|
|
115
|
+
reasons.push(`${d.name} cannot be loaded`);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if (!matchesSection(manifest, d.name, d.section.manifest)) {
|
|
119
|
+
reasons.push(`${d.name}: its module does not match the reviewed manifest`);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const config = await cli.deploymentConfigOf(d.name, manifest.config?.deployment);
|
|
123
|
+
if (!config.ok) {
|
|
124
|
+
reasons.push(`${d.name} is not configured (pending deployment config)`);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
const store = await setUp(manifest, config.value);
|
|
128
|
+
if (store)
|
|
129
|
+
return { store };
|
|
130
|
+
}
|
|
131
|
+
return { store: undefined, reason: reasons.join("; ") };
|
|
132
|
+
}
|
|
133
|
+
/** `storage.unavailable` with the CLI's constraint spelled out (the generic text points to a plugin install). */
|
|
134
|
+
class CliStorage extends StorageService {
|
|
135
|
+
reason;
|
|
136
|
+
constructor(deps, reason) {
|
|
137
|
+
super(deps);
|
|
138
|
+
this.reason = reason;
|
|
139
|
+
}
|
|
140
|
+
assertAvailable() {
|
|
141
|
+
if (this.available)
|
|
142
|
+
return;
|
|
143
|
+
throw new ApiError("storage.unavailable", `Object storage is not available to the CLI (${this.reason ?? "unknown"}). The CLI can use only a config-declared or installed and enabled object-store extension that is approved, configured and whose setup needs only ctx.config and ctx.provide; import this plugin in the admin console instead`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* The CLI's plugin catalog context (`capybara plugins *`): {@link openExtensionCli} plus
|
|
148
|
+
* {@link PluginImport} and {@link CatalogService}. Imports run with actor `null` (the operator of the
|
|
149
|
+
* deployment, like `capybara extensions install`: no enterprise-admin re-check, audits without an
|
|
150
|
+
* actor, permission snapshots written with source `cli`). Files of the plugin (skills, connector
|
|
151
|
+
* templates, icons) go to the deployment's object store, set up in-process from the declared or
|
|
152
|
+
* installed object-store extension (see {@link loadCliObjectStore}; an installed package is synced
|
|
153
|
+
* into a temporary directory removed on `close`); connector templates of connectors the
|
|
154
|
+
* plugin does not bring are checked statically only (the CLI loads no connector).
|
|
155
|
+
*/
|
|
156
|
+
export async function openCatalogCli(config, log, opts = {}) {
|
|
157
|
+
const cli = await openExtensionCli(config, log, opts);
|
|
158
|
+
let syncDir;
|
|
159
|
+
const removeSyncDir = async () => {
|
|
160
|
+
if (syncDir !== undefined)
|
|
161
|
+
await rm(syncDir, { recursive: true, force: true }).catch(() => { });
|
|
162
|
+
};
|
|
163
|
+
try {
|
|
164
|
+
syncDir = await mkdtemp(join(tmpdir(), "capybara-cli-"));
|
|
165
|
+
const { store, ...rest } = await loadCliObjectStore(cli, log, syncDir);
|
|
166
|
+
const storage = new CliStorage({
|
|
167
|
+
provider: () => store,
|
|
168
|
+
plugins: async () => cli.inspected.map((p) => p.manifest.name),
|
|
169
|
+
}, "reason" in rest ? rest.reason : undefined);
|
|
170
|
+
const declared = new Map(cli.inspected.map((p) => [p.manifest.name, p.source]));
|
|
171
|
+
const imports = new PluginImport({
|
|
172
|
+
db: cli.db,
|
|
173
|
+
config: () => config,
|
|
174
|
+
storage,
|
|
175
|
+
installs: cli.installs,
|
|
176
|
+
ops: cli.ops,
|
|
177
|
+
blobs: { get: (sha256) => cli.readPackage(sha256) },
|
|
178
|
+
declared: () => declared,
|
|
179
|
+
// The CLI loads no connectors: templates get static checks only (the org install re-checks)
|
|
180
|
+
findConnector: () => undefined,
|
|
181
|
+
connectorsLoaded: false,
|
|
182
|
+
log,
|
|
183
|
+
});
|
|
184
|
+
const catalog = new CatalogService({
|
|
185
|
+
db: cli.db,
|
|
186
|
+
config: () => config,
|
|
187
|
+
installs: cli.installs,
|
|
188
|
+
ops: cli.ops,
|
|
189
|
+
pluginImport: imports,
|
|
190
|
+
// Unreachable from the CLI: only marketplace imports (CatalogService.importFromMarketplace)
|
|
191
|
+
// download archives, and the CLI offers file, npm and direct git imports only.
|
|
192
|
+
fetchArchive: () => Promise.reject(new ApiError("internal", "marketplace imports are not available in the CLI")),
|
|
193
|
+
// Only marketplace imports send a marketplace token; a direct git import has none
|
|
194
|
+
marketplaceToken: async () => undefined,
|
|
195
|
+
});
|
|
196
|
+
return {
|
|
197
|
+
...cli,
|
|
198
|
+
catalog,
|
|
199
|
+
imports,
|
|
200
|
+
async close() {
|
|
201
|
+
await cli.close();
|
|
202
|
+
await removeSyncDir();
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
catch (e) {
|
|
207
|
+
await cli.close();
|
|
208
|
+
await removeSyncDir();
|
|
209
|
+
throw e;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { type NetPolicy } from "../net/public-address.js";
|
|
2
|
+
import { type MarketplaceNetCode } from "./marketplace-fetch.js";
|
|
3
|
+
/**
|
|
4
|
+
* Reading plugins from git (spec §5.1, §5.2; Decision 2): isomorphic-git (pure JS, any smart-HTTP
|
|
5
|
+
* host) over the kernel's public-address network layer. The repo is hostile input:
|
|
6
|
+
* - https smart HTTP only (`GET info/refs` + `POST git-upload-pack`), each request through
|
|
7
|
+
* `net/safeFetch` (public addresses, pinned connection, no redirects); the token goes only to
|
|
8
|
+
* `tokenOrigin`;
|
|
9
|
+
* - one commit, depth 1, no tags, no submodules (never fetched); the pack is at most `maxBytes`;
|
|
10
|
+
* - before isomorphic-git indexes the pack (which inflates every object), the pack is scanned with
|
|
11
|
+
* bounded inflation: at most {@link GIT_LIMITS}`.maxObjects` objects and 4 × `maxBytes` of declared
|
|
12
|
+
* content in all, so a deflate bomb is refused before it is expanded;
|
|
13
|
+
* - files are read from the object store (`readTree` / `readBlob`), never checked out; symlinks and
|
|
14
|
+
* submodule entries under `path` are refused; at most 5000 files and 4 × `maxBytes`; LFS pointer
|
|
15
|
+
* files are ordinary files;
|
|
16
|
+
* - the object store is a temp dir removed after each operation; 120 s per operation.
|
|
17
|
+
*/
|
|
18
|
+
export declare const GIT_LIMITS: {
|
|
19
|
+
readonly maxFiles: 5000;
|
|
20
|
+
/** Objects in one pack (a depth-1 commit: the commit, its trees and blobs). */
|
|
21
|
+
readonly maxObjects: 20000;
|
|
22
|
+
/** Unpacked bytes (pack content and files read) at most this × `maxBytes`. */
|
|
23
|
+
readonly unpackedFactor: 4;
|
|
24
|
+
readonly timeoutMs: 120000;
|
|
25
|
+
};
|
|
26
|
+
/** `./a/b/` -> `a/b`; the root is `.`. */
|
|
27
|
+
export declare const normalGitPath: (path: string | undefined) => string;
|
|
28
|
+
/**
|
|
29
|
+
* The identity of a git location, `<host>/<repo>:<path>` (host lower case, the repo without a
|
|
30
|
+
* leading `/` or a trailing `.git`, `path` as {@link normalGitPath}).
|
|
31
|
+
*/
|
|
32
|
+
export declare function gitLocationIdentity(l: {
|
|
33
|
+
host: string;
|
|
34
|
+
repo: string;
|
|
35
|
+
path: string;
|
|
36
|
+
}): string;
|
|
37
|
+
/** {@link gitLocationIdentity} of a repo URL and a path in it. */
|
|
38
|
+
export declare function gitUrlIdentity(url: string, path: string | undefined): string;
|
|
39
|
+
export type GitLocation = {
|
|
40
|
+
url: string;
|
|
41
|
+
ref?: string;
|
|
42
|
+
commit?: string;
|
|
43
|
+
path?: string;
|
|
44
|
+
};
|
|
45
|
+
export type GitOptions = {
|
|
46
|
+
net: NetPolicy;
|
|
47
|
+
token?: string;
|
|
48
|
+
/** The token is sent only to this origin (the marketplace URL's). */
|
|
49
|
+
tokenOrigin?: string;
|
|
50
|
+
signal: AbortSignal;
|
|
51
|
+
/** `packages.maxBytes`: the largest pack. */
|
|
52
|
+
maxBytes: number;
|
|
53
|
+
/** Where the temp object store is created (default the OS temp dir); tests only. */
|
|
54
|
+
tempRoot?: string;
|
|
55
|
+
};
|
|
56
|
+
export type GitSourceErrorCode = "marketplace.git_failed" | "marketplace.git_too_large" | "marketplace.git_unsupported_entry";
|
|
57
|
+
/**
|
|
58
|
+
* What a git failure names, for API error details (localized by the web): `host` the host the
|
|
59
|
+
* network rules refused, `path` the refused tree entry (symlink, submodule, invalid name), `hint`
|
|
60
|
+
* `git_suffix` when a redirect came from a repo URL not ending in `.git` (GitLab, Gitea redirect it).
|
|
61
|
+
*/
|
|
62
|
+
export interface GitErrorDetail {
|
|
63
|
+
host?: string;
|
|
64
|
+
path?: string;
|
|
65
|
+
hint?: "git_suffix";
|
|
66
|
+
}
|
|
67
|
+
/** A git read failed. English message without the token; `netCode` when the network rules refused. */
|
|
68
|
+
export declare class GitSourceError extends Error {
|
|
69
|
+
readonly code: GitSourceErrorCode;
|
|
70
|
+
readonly netCode: MarketplaceNetCode | undefined;
|
|
71
|
+
readonly detail: GitErrorDetail;
|
|
72
|
+
constructor(code: GitSourceErrorCode, message: string, options?: {
|
|
73
|
+
cause?: unknown;
|
|
74
|
+
netCode?: MarketplaceNetCode;
|
|
75
|
+
detail?: GitErrorDetail;
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The details of a git failure's API error: the host (the one the network rules refused, else the
|
|
80
|
+
* repo's), the repo path, the ref or commit asked for, and the refused entry. Lets the web name them
|
|
81
|
+
* in localized copy; the English message stays for logs and API users.
|
|
82
|
+
*/
|
|
83
|
+
export declare function gitErrorDetails(e: GitSourceError, loc: Pick<GitLocation, "url" | "ref" | "commit">): Record<string, string>;
|
|
84
|
+
/** `owner/repo` -> `https://github.com/owner/repo.git`; anything else is returned unchanged. */
|
|
85
|
+
export declare function expandGitUrl(input: string): string;
|
|
86
|
+
/**
|
|
87
|
+
* The commit to read (40 lower-case hex): `commit` when given (it wins over `ref`), otherwise the
|
|
88
|
+
* head of `ref` (a branch, a tag or a full `refs/…` name) or of the remote HEAD.
|
|
89
|
+
*/
|
|
90
|
+
export declare function resolveGitCommit(loc: GitLocation, o: GitOptions): Promise<string>;
|
|
91
|
+
/**
|
|
92
|
+
* Walks a pack (v2/v3) with bounded inflation before anything else expands it: object count and the
|
|
93
|
+
* declared content sizes (objects, and delta results) must fit; an object that inflates beyond its
|
|
94
|
+
* declared size is refused.
|
|
95
|
+
*/
|
|
96
|
+
export declare function scanPack(pack: Uint8Array, maxUnpacked: number): void;
|
|
97
|
+
/**
|
|
98
|
+
* The files under `path` at `commit` (paths relative to `path`, `/`-separated, sorted). Throws
|
|
99
|
+
* {@link GitSourceError}: `marketplace.git_failed` (network, server, missing commit or path),
|
|
100
|
+
* `marketplace.git_too_large` (limits), `marketplace.git_unsupported_entry` (symlink, submodule).
|
|
101
|
+
*/
|
|
102
|
+
export declare function readGitTree(loc: GitLocation & {
|
|
103
|
+
commit: string;
|
|
104
|
+
}, o: ReadGitTreeOptions): Promise<Map<string, Uint8Array>>;
|
|
105
|
+
/** Options of {@link readGitTree}. */
|
|
106
|
+
export type ReadGitTreeOptions = GitOptions & {
|
|
107
|
+
/**
|
|
108
|
+
* Which entries under `path` to read (`path` relative to it): a tree for which it returns false
|
|
109
|
+
* is not descended, a blob is not read. Entries left out are not checked either (a symlink
|
|
110
|
+
* elsewhere in a marketplace repo does not matter to its manifest). Default: everything.
|
|
111
|
+
*/
|
|
112
|
+
include?: (path: string, type: "tree" | "blob") => boolean;
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* {@link readGitTree}, plus the git tree oids of directories at the same commit: `trees` gets the
|
|
116
|
+
* files read and returns directory paths relative to the repository root (`.` is the root); each
|
|
117
|
+
* one that exists and is a directory gets its tree oid (equal oids mean equal contents, so a
|
|
118
|
+
* plugin directory that did not change keeps its oid across commits).
|
|
119
|
+
*/
|
|
120
|
+
export declare function readGitTreeAndOids(loc: GitLocation & {
|
|
121
|
+
commit: string;
|
|
122
|
+
}, o: ReadGitTreeOptions & {
|
|
123
|
+
trees?: (files: Map<string, Uint8Array>) => string[];
|
|
124
|
+
}): Promise<{
|
|
125
|
+
files: Map<string, Uint8Array>;
|
|
126
|
+
trees: Map<string, string>;
|
|
127
|
+
}>;
|