@capybara-hq/kernel 0.0.0-stage → 0.1.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +2 -0
- package/README.md +20 -2
- package/bootstrap.json +26 -0
- package/dist/admin/admin.controller.d.ts +139 -0
- package/dist/admin/admin.controller.js +238 -0
- package/dist/admin/extensions.controller.d.ts +100 -0
- package/dist/admin/extensions.controller.js +226 -0
- package/dist/admin/setup.controller.d.ts +36 -0
- package/dist/admin/setup.controller.js +106 -0
- package/dist/admin/setup.service.d.ts +47 -0
- package/dist/admin/setup.service.js +90 -0
- package/dist/agents/agents.controller.d.ts +205 -0
- package/dist/agents/agents.controller.js +144 -0
- package/dist/agents/agents.service.d.ts +177 -0
- package/dist/agents/agents.service.js +677 -0
- package/dist/agents/definition.d.ts +198 -0
- package/dist/agents/definition.js +152 -0
- package/dist/agents/models.controller.d.ts +13 -0
- package/dist/agents/models.controller.js +31 -0
- package/dist/agents/templates.controller.d.ts +15 -0
- package/dist/agents/templates.controller.js +37 -0
- package/dist/agents/templates.d.ts +83 -0
- package/dist/agents/templates.js +173 -0
- package/dist/catalog/admin-catalog.controller.d.ts +143 -0
- package/dist/catalog/admin-catalog.controller.js +245 -0
- package/dist/catalog/catalog.service.d.ts +430 -0
- package/dist/catalog/catalog.service.js +882 -0
- package/dist/catalog/claude/agents.d.ts +27 -0
- package/dist/catalog/claude/agents.js +270 -0
- package/dist/catalog/claude/commands.d.ts +50 -0
- package/dist/catalog/claude/commands.js +179 -0
- package/dist/catalog/claude/manifest.d.ts +69 -0
- package/dist/catalog/claude/manifest.js +134 -0
- package/dist/catalog/claude/marketplace.d.ts +35 -0
- package/dist/catalog/claude/marketplace.js +194 -0
- package/dist/catalog/claude/mcp.d.ts +33 -0
- package/dist/catalog/claude/mcp.js +226 -0
- package/dist/catalog/claude/report.d.ts +86 -0
- package/dist/catalog/claude/report.js +121 -0
- package/dist/catalog/claude/translate.d.ts +56 -0
- package/dist/catalog/claude/translate.js +857 -0
- package/dist/catalog/cli.d.ts +46 -0
- package/dist/catalog/cli.js +211 -0
- package/dist/catalog/git-source.d.ts +127 -0
- package/dist/catalog/git-source.js +520 -0
- package/dist/catalog/marketplace-fetch.d.ts +99 -0
- package/dist/catalog/marketplace-fetch.js +203 -0
- package/dist/catalog/marketplaces.controller.d.ts +97 -0
- package/dist/catalog/marketplaces.controller.js +197 -0
- package/dist/catalog/marketplaces.service.d.ts +340 -0
- package/dist/catalog/marketplaces.service.js +1217 -0
- package/dist/catalog/org-catalog.controller.d.ts +128 -0
- package/dist/catalog/org-catalog.controller.js +277 -0
- package/dist/catalog/org-catalog.service.d.ts +246 -0
- package/dist/catalog/org-catalog.service.js +625 -0
- package/dist/catalog/plugin-import.d.ts +436 -0
- package/dist/catalog/plugin-import.js +1069 -0
- package/dist/catalog/plugin-install.d.ts +447 -0
- package/dist/catalog/plugin-install.js +1333 -0
- package/dist/catalog/plugin-package.d.ts +143 -0
- package/dist/catalog/plugin-package.js +382 -0
- package/dist/catalog/plugin-upgrade.d.ts +222 -0
- package/dist/catalog/plugin-upgrade.js +1219 -0
- package/dist/catalog/requests.service.d.ts +162 -0
- package/dist/catalog/requests.service.js +504 -0
- package/dist/catalog/schema-path.d.ts +7 -0
- package/dist/catalog/schema-path.js +63 -0
- package/dist/catalog/upgrade-targets.d.ts +59 -0
- package/dist/catalog/upgrade-targets.js +90 -0
- package/dist/catalog/versions.d.ts +31 -0
- package/dist/catalog/versions.js +44 -0
- package/dist/channels/actions.d.ts +37 -0
- package/dist/channels/actions.js +121 -0
- package/dist/channels/cards.d.ts +44 -0
- package/dist/channels/cards.js +156 -0
- package/dist/channels/connections.controller.d.ts +59 -0
- package/dist/channels/connections.controller.js +115 -0
- package/dist/channels/connections.service.d.ts +187 -0
- package/dist/channels/connections.service.js +534 -0
- package/dist/channels/features.d.ts +12 -0
- package/dist/channels/features.js +22 -0
- package/dist/channels/inbound.d.ts +120 -0
- package/dist/channels/inbound.js +332 -0
- package/dist/channels/outbound.d.ts +140 -0
- package/dist/channels/outbound.js +1126 -0
- package/dist/channels/phrases.d.ts +100 -0
- package/dist/channels/phrases.js +81 -0
- package/dist/channels/supervisor.d.ts +182 -0
- package/dist/channels/supervisor.js +625 -0
- package/dist/channels/threads.d.ts +29 -0
- package/dist/channels/threads.js +104 -0
- package/dist/channels/webhook-url.d.ts +16 -0
- package/dist/channels/webhook-url.js +34 -0
- package/dist/channels/webhook.controller.d.ts +19 -0
- package/dist/channels/webhook.controller.js +72 -0
- package/dist/channels/webhook.d.ts +73 -0
- package/dist/channels/webhook.js +274 -0
- package/dist/config/docs.d.ts +9 -0
- package/dist/config/docs.js +85 -0
- package/dist/config/env.d.ts +6 -0
- package/dist/config/env.js +73 -0
- package/dist/config/fields.d.ts +42 -0
- package/dist/config/fields.js +214 -0
- package/dist/config/file-source.d.ts +3 -0
- package/dist/config/file-source.js +31 -0
- package/dist/config/load.d.ts +20 -0
- package/dist/config/load.js +98 -0
- package/dist/config/nacos-source.d.ts +31 -0
- package/dist/config/nacos-source.js +229 -0
- package/dist/config/schema.d.ts +237 -0
- package/dist/config/schema.js +1192 -0
- package/dist/config/sources.d.ts +18 -0
- package/dist/config/sources.js +59 -0
- package/dist/config/types.d.ts +9 -0
- package/dist/config/types.js +7 -0
- package/dist/conversations/artifacts.d.ts +52 -0
- package/dist/conversations/artifacts.js +137 -0
- package/dist/conversations/attachments.controller.d.ts +28 -0
- package/dist/conversations/attachments.controller.js +96 -0
- package/dist/conversations/attachments.service.d.ts +180 -0
- package/dist/conversations/attachments.service.js +578 -0
- package/dist/conversations/conversations.controller.d.ts +288 -0
- package/dist/conversations/conversations.controller.js +607 -0
- package/dist/conversations/conversations.service.d.ts +321 -0
- package/dist/conversations/conversations.service.js +754 -0
- package/dist/conversations/event-log.d.ts +122 -0
- package/dist/conversations/event-log.js +259 -0
- package/dist/conversations/events.d.ts +856 -0
- package/dist/conversations/events.js +639 -0
- package/dist/conversations/files.d.ts +92 -0
- package/dist/conversations/files.js +213 -0
- package/dist/conversations/outputs-read.d.ts +34 -0
- package/dist/conversations/outputs-read.js +37 -0
- package/dist/conversations/queue.d.ts +169 -0
- package/dist/conversations/queue.js +527 -0
- package/dist/conversations/sandbox-status.d.ts +21 -0
- package/dist/conversations/sandbox-status.js +24 -0
- package/dist/conversations/selection.d.ts +46 -0
- package/dist/conversations/selection.js +75 -0
- package/dist/conversations/titles.d.ts +93 -0
- package/dist/conversations/titles.js +423 -0
- package/dist/ctx/bus.d.ts +16 -0
- package/dist/ctx/bus.js +101 -0
- package/dist/ctx/create-ctx.d.ts +109 -0
- package/dist/ctx/create-ctx.js +592 -0
- package/dist/ctx/kv.d.ts +4 -0
- package/dist/ctx/kv.js +31 -0
- package/dist/ctx/lock.d.ts +4 -0
- package/dist/ctx/lock.js +39 -0
- package/dist/ctx/namespace.d.ts +6 -0
- package/dist/ctx/namespace.js +12 -0
- package/dist/ctx/queue.d.ts +25 -0
- package/dist/ctx/queue.js +151 -0
- package/dist/ctx/secrets.d.ts +45 -0
- package/dist/ctx/secrets.js +175 -0
- package/dist/db/kernel-schema.d.ts +1122 -0
- package/dist/db/kernel-schema.js +5 -0
- package/dist/db/migrator.d.ts +28 -0
- package/dist/db/migrator.js +140 -0
- package/dist/db/pool.d.ts +21 -0
- package/dist/db/pool.js +28 -0
- package/dist/db/sql-statements.d.ts +34 -0
- package/dist/db/sql-statements.js +168 -0
- package/dist/errors.d.ts +211 -0
- package/dist/errors.js +213 -0
- package/dist/evals/budget.d.ts +61 -0
- package/dist/evals/budget.js +181 -0
- package/dist/evals/diff.d.ts +55 -0
- package/dist/evals/diff.js +133 -0
- package/dist/evals/judge.d.ts +53 -0
- package/dist/evals/judge.js +149 -0
- package/dist/evals/plan.d.ts +47 -0
- package/dist/evals/plan.js +77 -0
- package/dist/evals/reconstruct.d.ts +137 -0
- package/dist/evals/reconstruct.js +322 -0
- package/dist/evals/recorded-tools.d.ts +54 -0
- package/dist/evals/recorded-tools.js +167 -0
- package/dist/evals/run-replay.d.ts +86 -0
- package/dist/evals/run-replay.js +502 -0
- package/dist/evals/runs.controller.d.ts +100 -0
- package/dist/evals/runs.controller.js +199 -0
- package/dist/evals/runs.service.d.ts +275 -0
- package/dist/evals/runs.service.js +836 -0
- package/dist/evals/sets.controller.d.ts +61 -0
- package/dist/evals/sets.controller.js +183 -0
- package/dist/evals/sets.service.d.ts +128 -0
- package/dist/evals/sets.service.js +558 -0
- package/dist/evals/snapshot.d.ts +76 -0
- package/dist/evals/snapshot.js +207 -0
- package/dist/evals/step-replay.d.ts +113 -0
- package/dist/evals/step-replay.js +181 -0
- package/dist/evals/trajectory.controller.d.ts +41 -0
- package/dist/evals/trajectory.controller.js +88 -0
- package/dist/evals/trajectory.d.ts +144 -0
- package/dist/evals/trajectory.js +338 -0
- package/dist/evals/trajectory.service.d.ts +108 -0
- package/dist/evals/trajectory.service.js +323 -0
- package/dist/evals/worker.d.ts +101 -0
- package/dist/evals/worker.js +790 -0
- package/dist/extensions/admin-ops.d.ts +105 -0
- package/dist/extensions/admin-ops.js +353 -0
- package/dist/extensions/admin-view.d.ts +79 -0
- package/dist/extensions/admin-view.js +327 -0
- package/dist/extensions/approvals.d.ts +119 -0
- package/dist/extensions/approvals.js +205 -0
- package/dist/extensions/blobs.d.ts +45 -0
- package/dist/extensions/blobs.js +160 -0
- package/dist/extensions/bootstrap.d.ts +176 -0
- package/dist/extensions/bootstrap.js +535 -0
- package/dist/extensions/cli.d.ts +61 -0
- package/dist/extensions/cli.js +165 -0
- package/dist/extensions/config-json-schema.d.ts +9 -0
- package/dist/extensions/config-json-schema.js +73 -0
- package/dist/extensions/deployment-config.d.ts +138 -0
- package/dist/extensions/deployment-config.js +394 -0
- package/dist/extensions/enabled.d.ts +31 -0
- package/dist/extensions/enabled.js +55 -0
- package/dist/extensions/hooks.d.ts +161 -0
- package/dist/extensions/hooks.js +425 -0
- package/dist/extensions/host.d.ts +577 -0
- package/dist/extensions/host.js +2071 -0
- package/dist/extensions/inflight.d.ts +69 -0
- package/dist/extensions/inflight.js +277 -0
- package/dist/extensions/installs.d.ts +166 -0
- package/dist/extensions/installs.js +253 -0
- package/dist/extensions/instance.d.ts +167 -0
- package/dist/extensions/instance.js +329 -0
- package/dist/extensions/ledger.d.ts +30 -0
- package/dist/extensions/ledger.js +50 -0
- package/dist/extensions/lifecycle.d.ts +80 -0
- package/dist/extensions/lifecycle.js +152 -0
- package/dist/extensions/migrate-lock.d.ts +51 -0
- package/dist/extensions/migrate-lock.js +100 -0
- package/dist/extensions/org-config.controller.d.ts +24 -0
- package/dist/extensions/org-config.controller.js +59 -0
- package/dist/extensions/org-config.d.ts +169 -0
- package/dist/extensions/org-config.js +520 -0
- package/dist/extensions/package.d.ts +115 -0
- package/dist/extensions/package.js +246 -0
- package/dist/extensions/permission-set.d.ts +117 -0
- package/dist/extensions/permission-set.js +184 -0
- package/dist/extensions/permission-view.d.ts +194 -0
- package/dist/extensions/permission-view.js +284 -0
- package/dist/extensions/registry.d.ts +24 -0
- package/dist/extensions/registry.js +56 -0
- package/dist/extensions/resolve.d.ts +12 -0
- package/dist/extensions/resolve.js +71 -0
- package/dist/extensions/sources.d.ts +69 -0
- package/dist/extensions/sources.js +120 -0
- package/dist/extensions/sync.d.ts +40 -0
- package/dist/extensions/sync.js +242 -0
- package/dist/files/previewers.controller.d.ts +46 -0
- package/dist/files/previewers.controller.js +105 -0
- package/dist/files/previewers.d.ts +100 -0
- package/dist/files/previewers.js +250 -0
- package/dist/http/api.module.d.ts +114 -0
- package/dist/http/api.module.js +448 -0
- package/dist/http/app.d.ts +77 -0
- package/dist/http/app.js +220 -0
- package/dist/http/error.filter.d.ts +21 -0
- package/dist/http/error.filter.js +85 -0
- package/dist/http/gateway.module.d.ts +15 -0
- package/dist/http/gateway.module.js +13 -0
- package/dist/http/health.controller.d.ts +26 -0
- package/dist/http/health.controller.js +79 -0
- package/dist/http/nest-logger.d.ts +20 -0
- package/dist/http/nest-logger.js +28 -0
- package/dist/http/plugin-dispatch.d.ts +68 -0
- package/dist/http/plugin-dispatch.js +200 -0
- package/dist/http/tokens.d.ts +131 -0
- package/dist/http/tokens.js +131 -0
- package/dist/http/zod.pipe.d.ts +8 -0
- package/dist/http/zod.pipe.js +14 -0
- package/dist/identity/accounts.d.ts +93 -0
- package/dist/identity/accounts.js +367 -0
- package/dist/identity/api-tokens.d.ts +73 -0
- package/dist/identity/api-tokens.js +197 -0
- package/dist/identity/audit.d.ts +23 -0
- package/dist/identity/audit.js +41 -0
- package/dist/identity/auth.controller.d.ts +40 -0
- package/dist/identity/auth.controller.js +130 -0
- package/dist/identity/auth.guard.d.ts +41 -0
- package/dist/identity/auth.guard.js +162 -0
- package/dist/identity/binding.d.ts +47 -0
- package/dist/identity/binding.js +84 -0
- package/dist/identity/cookies.d.ts +16 -0
- package/dist/identity/cookies.js +32 -0
- package/dist/identity/credential-check.d.ts +17 -0
- package/dist/identity/credential-check.js +24 -0
- package/dist/identity/enterprise-admin.d.ts +14 -0
- package/dist/identity/enterprise-admin.js +27 -0
- package/dist/identity/external.d.ts +106 -0
- package/dist/identity/external.js +337 -0
- package/dist/identity/hash.d.ts +2 -0
- package/dist/identity/hash.js +3 -0
- package/dist/identity/login.d.ts +6 -0
- package/dist/identity/login.js +20 -0
- package/dist/identity/me.controller.d.ts +61 -0
- package/dist/identity/me.controller.js +159 -0
- package/dist/identity/passwords.d.ts +6 -0
- package/dist/identity/passwords.js +37 -0
- package/dist/identity/principal.d.ts +56 -0
- package/dist/identity/principal.js +38 -0
- package/dist/identity/rate-limit.d.ts +55 -0
- package/dist/identity/rate-limit.js +121 -0
- package/dist/identity/sessions.d.ts +84 -0
- package/dist/identity/sessions.js +306 -0
- package/dist/identity/settings.d.ts +121 -0
- package/dist/identity/settings.js +248 -0
- package/dist/identity/sso.controller.d.ts +59 -0
- package/dist/identity/sso.controller.js +192 -0
- package/dist/identity/sso.d.ts +83 -0
- package/dist/identity/sso.js +202 -0
- package/dist/inbox/inbox.service.d.ts +43 -0
- package/dist/inbox/inbox.service.js +57 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.js +67 -0
- package/dist/kernel.d.ts +259 -0
- package/dist/kernel.js +1326 -0
- package/dist/log-config.d.ts +9 -0
- package/dist/log-config.js +27 -0
- package/dist/log-context.d.ts +32 -0
- package/dist/log-context.js +40 -0
- package/dist/log-loki.d.ts +34 -0
- package/dist/log-loki.js +145 -0
- package/dist/log.d.ts +79 -0
- package/dist/log.js +303 -0
- package/dist/models/prices.d.ts +53 -0
- package/dist/models/prices.js +121 -0
- package/dist/models/purposes.controller.d.ts +19 -0
- package/dist/models/purposes.controller.js +56 -0
- package/dist/models/purposes.d.ts +140 -0
- package/dist/models/purposes.js +267 -0
- package/dist/net/proxy.d.ts +44 -0
- package/dist/net/proxy.js +162 -0
- package/dist/net/public-address.d.ts +60 -0
- package/dist/net/public-address.js +272 -0
- package/dist/net/safe-fetch.d.ts +38 -0
- package/dist/net/safe-fetch.js +140 -0
- package/dist/orgs/directory-sync.controller.d.ts +14 -0
- package/dist/orgs/directory-sync.controller.js +40 -0
- package/dist/orgs/directory-sync.d.ts +166 -0
- package/dist/orgs/directory-sync.js +558 -0
- package/dist/orgs/invitations.controller.d.ts +58 -0
- package/dist/orgs/invitations.controller.js +137 -0
- package/dist/orgs/invitations.service.d.ts +80 -0
- package/dist/orgs/invitations.service.js +217 -0
- package/dist/orgs/members.service.d.ts +63 -0
- package/dist/orgs/members.service.js +234 -0
- package/dist/orgs/offboarding.d.ts +141 -0
- package/dist/orgs/offboarding.js +398 -0
- package/dist/orgs/org-lock.d.ts +32 -0
- package/dist/orgs/org-lock.js +46 -0
- package/dist/orgs/org.guard.d.ts +35 -0
- package/dist/orgs/org.guard.js +95 -0
- package/dist/orgs/orgs.controller.d.ts +78 -0
- package/dist/orgs/orgs.controller.js +192 -0
- package/dist/orgs/orgs.service.d.ts +61 -0
- package/dist/orgs/orgs.service.js +209 -0
- package/dist/orgs/roles.d.ts +13 -0
- package/dist/orgs/roles.js +58 -0
- package/dist/orgs/settings.controller.d.ts +20 -0
- package/dist/orgs/settings.controller.js +53 -0
- package/dist/orgs/settings.service.d.ts +120 -0
- package/dist/orgs/settings.service.js +178 -0
- package/dist/packages/npm.d.ts +50 -0
- package/dist/packages/npm.js +218 -0
- package/dist/packages/provenance.d.ts +47 -0
- package/dist/packages/provenance.js +147 -0
- package/dist/packages/tgz.d.ts +76 -0
- package/dist/packages/tgz.js +225 -0
- package/dist/runtime/abort.d.ts +32 -0
- package/dist/runtime/abort.js +71 -0
- package/dist/runtime/checkpointer.d.ts +32 -0
- package/dist/runtime/checkpointer.js +243 -0
- package/dist/runtime/context/build.d.ts +254 -0
- package/dist/runtime/context/build.js +693 -0
- package/dist/runtime/context/claude-tools.d.ts +11 -0
- package/dist/runtime/context/claude-tools.js +24 -0
- package/dist/runtime/context/compaction.d.ts +26 -0
- package/dist/runtime/context/compaction.js +195 -0
- package/dist/runtime/context/pairing.d.ts +11 -0
- package/dist/runtime/context/pairing.js +82 -0
- package/dist/runtime/context/reminders.d.ts +5 -0
- package/dist/runtime/context/reminders.js +11 -0
- package/dist/runtime/context/skills.d.ts +105 -0
- package/dist/runtime/context/skills.js +283 -0
- package/dist/runtime/context/tokens.d.ts +19 -0
- package/dist/runtime/context/tokens.js +104 -0
- package/dist/runtime/conversation-lock.d.ts +40 -0
- package/dist/runtime/conversation-lock.js +97 -0
- package/dist/runtime/hook-calls.d.ts +84 -0
- package/dist/runtime/hook-calls.js +136 -0
- package/dist/runtime/langgraph-loop.d.ts +52 -0
- package/dist/runtime/langgraph-loop.js +247 -0
- package/dist/runtime/loop.d.ts +93 -0
- package/dist/runtime/loop.js +7 -0
- package/dist/runtime/maintenance.d.ts +80 -0
- package/dist/runtime/maintenance.js +148 -0
- package/dist/runtime/media-cache.d.ts +21 -0
- package/dist/runtime/media-cache.js +51 -0
- package/dist/runtime/model-call.d.ts +176 -0
- package/dist/runtime/model-call.js +1049 -0
- package/dist/runtime/providers.d.ts +86 -0
- package/dist/runtime/providers.js +224 -0
- package/dist/runtime/quota.d.ts +29 -0
- package/dist/runtime/quota.js +70 -0
- package/dist/runtime/run-finish.d.ts +45 -0
- package/dist/runtime/run-finish.js +69 -0
- package/dist/runtime/run-queue.d.ts +121 -0
- package/dist/runtime/run-queue.js +493 -0
- package/dist/runtime/run-worker.d.ts +138 -0
- package/dist/runtime/run-worker.js +806 -0
- package/dist/runtime/stream.controller.d.ts +34 -0
- package/dist/runtime/stream.controller.js +122 -0
- package/dist/runtime/stream.d.ts +63 -0
- package/dist/runtime/stream.js +262 -0
- package/dist/runtime/subagents/child.d.ts +80 -0
- package/dist/runtime/subagents/child.js +225 -0
- package/dist/runtime/subagents/definition.d.ts +103 -0
- package/dist/runtime/subagents/definition.js +392 -0
- package/dist/runtime/subagents/dispatch.d.ts +69 -0
- package/dist/runtime/subagents/dispatch.js +502 -0
- package/dist/runtime/subagents/limits.d.ts +23 -0
- package/dist/runtime/subagents/limits.js +34 -0
- package/dist/runtime/subagents/org-agents.d.ts +50 -0
- package/dist/runtime/subagents/org-agents.js +70 -0
- package/dist/runtime/subagents/preamble.d.ts +7 -0
- package/dist/runtime/subagents/preamble.js +11 -0
- package/dist/runtime/subagents/progress.d.ts +26 -0
- package/dist/runtime/subagents/progress.js +36 -0
- package/dist/runtime/subagents/roster.d.ts +55 -0
- package/dist/runtime/subagents/roster.js +111 -0
- package/dist/runtime/subagents/skill-fork.d.ts +123 -0
- package/dist/runtime/subagents/skill-fork.js +259 -0
- package/dist/runtime/usage-report.d.ts +163 -0
- package/dist/runtime/usage-report.js +551 -0
- package/dist/runtime/waits.d.ts +233 -0
- package/dist/runtime/waits.js +883 -0
- package/dist/sandbox/leases.d.ts +169 -0
- package/dist/sandbox/leases.js +515 -0
- package/dist/sandbox/lifecycle.d.ts +21 -0
- package/dist/sandbox/lifecycle.js +68 -0
- package/dist/sandbox/sandbox.service.d.ts +249 -0
- package/dist/sandbox/sandbox.service.js +908 -0
- package/dist/skills/catalog.d.ts +149 -0
- package/dist/skills/catalog.js +405 -0
- package/dist/skills/changes.controller.d.ts +56 -0
- package/dist/skills/changes.controller.js +136 -0
- package/dist/skills/changes.service.d.ts +175 -0
- package/dist/skills/changes.service.js +805 -0
- package/dist/skills/invocable.controller.d.ts +23 -0
- package/dist/skills/invocable.controller.js +50 -0
- package/dist/skills/invocation-keys.d.ts +23 -0
- package/dist/skills/invocation-keys.js +44 -0
- package/dist/skills/invoke.d.ts +135 -0
- package/dist/skills/invoke.js +286 -0
- package/dist/skills/package.d.ts +87 -0
- package/dist/skills/package.js +227 -0
- package/dist/skills/skills.controller.d.ts +40 -0
- package/dist/skills/skills.controller.js +110 -0
- package/dist/skills/skills.service.d.ts +192 -0
- package/dist/skills/skills.service.js +567 -0
- package/dist/storage/prefix.d.ts +36 -0
- package/dist/storage/prefix.js +104 -0
- package/dist/storage/purge.d.ts +27 -0
- package/dist/storage/purge.js +75 -0
- package/dist/storage/storage.service.d.ts +44 -0
- package/dist/storage/storage.service.js +145 -0
- package/dist/text.d.ts +13 -0
- package/dist/text.js +13 -0
- package/dist/tools/approvals.controller.d.ts +53 -0
- package/dist/tools/approvals.controller.js +128 -0
- package/dist/tools/approvals.service.d.ts +172 -0
- package/dist/tools/approvals.service.js +568 -0
- package/dist/tools/breaker.d.ts +28 -0
- package/dist/tools/breaker.js +72 -0
- package/dist/tools/builtins/agent.d.ts +81 -0
- package/dist/tools/builtins/agent.js +223 -0
- package/dist/tools/builtins/ask-user.d.ts +28 -0
- package/dist/tools/builtins/ask-user.js +139 -0
- package/dist/tools/builtins/read-tool-output.d.ts +18 -0
- package/dist/tools/builtins/read-tool-output.js +108 -0
- package/dist/tools/builtins/sandbox/bash.d.ts +16 -0
- package/dist/tools/builtins/sandbox/bash.js +137 -0
- package/dist/tools/builtins/sandbox/common.d.ts +116 -0
- package/dist/tools/builtins/sandbox/common.js +306 -0
- package/dist/tools/builtins/sandbox/deliver.d.ts +5 -0
- package/dist/tools/builtins/sandbox/deliver.js +180 -0
- package/dist/tools/builtins/sandbox/edit.d.ts +4 -0
- package/dist/tools/builtins/sandbox/edit.js +98 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +25 -0
- package/dist/tools/builtins/sandbox/glob-match.js +240 -0
- package/dist/tools/builtins/sandbox/glob.d.ts +4 -0
- package/dist/tools/builtins/sandbox/glob.js +104 -0
- package/dist/tools/builtins/sandbox/grep.d.ts +9 -0
- package/dist/tools/builtins/sandbox/grep.js +133 -0
- package/dist/tools/builtins/sandbox/index.d.ts +12 -0
- package/dist/tools/builtins/sandbox/index.js +27 -0
- package/dist/tools/builtins/sandbox/names.d.ts +7 -0
- package/dist/tools/builtins/sandbox/names.js +20 -0
- package/dist/tools/builtins/sandbox/read.d.ts +8 -0
- package/dist/tools/builtins/sandbox/read.js +121 -0
- package/dist/tools/builtins/sandbox/write.d.ts +4 -0
- package/dist/tools/builtins/sandbox/write.js +88 -0
- package/dist/tools/builtins/skill-load.d.ts +53 -0
- package/dist/tools/builtins/skill-load.js +446 -0
- package/dist/tools/builtins/skill-write.d.ts +59 -0
- package/dist/tools/builtins/skill-write.js +244 -0
- package/dist/tools/builtins/tool-search.d.ts +31 -0
- package/dist/tools/builtins/tool-search.js +171 -0
- package/dist/tools/connector-content.controller.d.ts +34 -0
- package/dist/tools/connector-content.controller.js +78 -0
- package/dist/tools/connector-content.d.ts +104 -0
- package/dist/tools/connector-content.js +267 -0
- package/dist/tools/connectors.controller.d.ts +210 -0
- package/dist/tools/connectors.controller.js +234 -0
- package/dist/tools/connectors.service.d.ts +303 -0
- package/dist/tools/connectors.service.js +1102 -0
- package/dist/tools/credentials.d.ts +139 -0
- package/dist/tools/credentials.js +351 -0
- package/dist/tools/drift.d.ts +141 -0
- package/dist/tools/drift.js +539 -0
- package/dist/tools/elicitation.d.ts +81 -0
- package/dist/tools/elicitation.js +266 -0
- package/dist/tools/endpoint.d.ts +18 -0
- package/dist/tools/endpoint.js +115 -0
- package/dist/tools/info.d.ts +67 -0
- package/dist/tools/info.js +113 -0
- package/dist/tools/naming.d.ts +27 -0
- package/dist/tools/naming.js +47 -0
- package/dist/tools/oauth/discovery.d.ts +65 -0
- package/dist/tools/oauth/discovery.js +307 -0
- package/dist/tools/oauth/flow.d.ts +63 -0
- package/dist/tools/oauth/flow.js +237 -0
- package/dist/tools/oauth/oauth.controller.d.ts +31 -0
- package/dist/tools/oauth/oauth.controller.js +95 -0
- package/dist/tools/oauth/tokens.d.ts +111 -0
- package/dist/tools/oauth/tokens.js +258 -0
- package/dist/tools/outputs.d.ts +61 -0
- package/dist/tools/outputs.js +156 -0
- package/dist/tools/pipeline.d.ts +322 -0
- package/dist/tools/pipeline.js +1236 -0
- package/dist/tools/policy.d.ts +60 -0
- package/dist/tools/policy.js +236 -0
- package/dist/tools/questions.controller.d.ts +24 -0
- package/dist/tools/questions.controller.js +58 -0
- package/dist/tools/questions.service.d.ts +103 -0
- package/dist/tools/questions.service.js +295 -0
- package/dist/tools/redact.d.ts +20 -0
- package/dist/tools/redact.js +60 -0
- package/dist/tools/registry.d.ts +246 -0
- package/dist/tools/registry.js +481 -0
- package/dist/tools/resources.d.ts +16 -0
- package/dist/tools/resources.js +76 -0
- package/dist/tools/specs.d.ts +14 -0
- package/dist/tools/specs.js +31 -0
- package/dist/tools/validate.d.ts +20 -0
- package/dist/tools/validate.js +183 -0
- package/dist/tools/view.d.ts +43 -0
- package/dist/tools/view.js +225 -0
- package/dist/ui/embed-token.d.ts +31 -0
- package/dist/ui/embed-token.js +132 -0
- package/dist/ui/registry.d.ts +58 -0
- package/dist/ui/registry.js +90 -0
- package/dist/ui/ui-stream.d.ts +37 -0
- package/dist/ui/ui-stream.js +162 -0
- package/dist/ui/views.controller.d.ts +81 -0
- package/dist/ui/views.controller.js +261 -0
- package/dist/ui/views.d.ts +155 -0
- package/dist/ui/views.js +306 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.js +6 -0
- package/package.json +69 -3
- package/src/migrations/0001_init.sql +8 -0
- package/src/migrations/0002_secrets.sql +8 -0
- package/src/migrations/0003_identity.sql +117 -0
- package/src/migrations/0004_plugin_org_config_nullable.sql +3 -0
- package/src/migrations/0005_agents.sql +27 -0
- package/src/migrations/0006_conversations.sql +37 -0
- package/src/migrations/0007_checkpoints.sql +26 -0
- package/src/migrations/0008_runs_trigger_seq.sql +3 -0
- package/src/migrations/0009_runs_active_unique.sql +4 -0
- package/src/migrations/0010_tools.sql +125 -0
- package/src/migrations/0011_approvals_spec.sql +10 -0
- package/src/migrations/0012_run_waits.sql +24 -0
- package/src/migrations/0013_app_tools_source.sql +4 -0
- package/src/migrations/0014_tool_specs.sql +8 -0
- package/src/migrations/0015_tool_drift.sql +20 -0
- package/src/migrations/0016_plugin_permissions.sql +11 -0
- package/src/migrations/0017_identity_sources.sql +6 -0
- package/src/migrations/0018_channels.sql +74 -0
- package/src/migrations/0019_identity_trust.sql +17 -0
- package/src/migrations/0020_channel_card_lookup.sql +10 -0
- package/src/migrations/0021_org_storage_purge.sql +9 -0
- package/src/migrations/0022_attachments.sql +29 -0
- package/src/migrations/0023_sandboxes.sql +37 -0
- package/src/migrations/0024_skills.sql +46 -0
- package/src/migrations/0025_skills_catalog_idx.sql +6 -0
- package/src/migrations/0026_skill_changes.sql +34 -0
- package/src/migrations/0027_model_prices.sql +18 -0
- package/src/migrations/0028_evals.sql +105 -0
- package/src/migrations/0029_model_purposes.sql +18 -0
- package/src/migrations/0030_plugin_installs.sql +73 -0
- package/src/migrations/0031_plugin_snapshot_source.sql +6 -0
- package/src/migrations/0032_plugin_deployment_configs.sql +10 -0
- package/src/migrations/0033_rename_apps_to_connectors.sql +25 -0
- package/src/migrations/0034_directory.sql +49 -0
- package/src/migrations/0035_catalogs.sql +40 -0
- package/src/migrations/0036_app_import_staging.sql +17 -0
- package/src/migrations/0037_directory_installs.sql +92 -0
- package/src/migrations/0038_channel_inbound_mode.sql +6 -0
- package/src/migrations/0039_channel_card_pending.sql +8 -0
- package/src/migrations/0040_usage_report_sweep.sql +10 -0
- package/src/migrations/0041_rename_plugins_to_extensions.sql +38 -0
- package/src/migrations/0042_rename_directory_to_catalog.sql +80 -0
- package/src/migrations/0043_rename_app_installs_to_plugin_installs.sql +20 -0
- package/src/migrations/0044_catalog_one_kind.sql +90 -0
- package/src/migrations/0045_plugin_dependencies.sql +9 -0
- package/src/migrations/0046_git_sources.sql +25 -0
- package/src/migrations/0047_marketplace_entry_heads.sql +7 -0
- package/src/migrations/0048_marketplace_entry_trees.sql +8 -0
- package/src/migrations/0049_plugin_upgrades.sql +37 -0
- package/src/migrations/0050_bootstrap.sql +53 -0
- package/src/migrations/0051_claude_compat.sql +26 -0
- package/src/migrations/0052_conversations_account_agent_idx.sql +5 -0
- package/src/migrations/0053_subagents.sql +73 -0
- package/src/migrations/0054_subagent_wait_expiry.sql +7 -0
- package/src/migrations/0055_subagent_parent_indexes.sql +10 -0
- package/src/migrations/0056_approval_reason.sql +3 -0
- package/src/migrations/0057_conversation_titles.sql +11 -0
- package/src/migrations/0058_conversation_selection.sql +4 -0
- package/src/migrations/0059_conversation_queue.sql +22 -0
- package/src/migrations/0060_file_previewers.sql +10 -0
- package/src/migrations/0061_queue_selection.sql +5 -0
- package/src/migrations/0062_queued_skill.sql +8 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { createHash, timingSafeEqual } from "node:crypto";
|
|
2
|
+
import { parseMarketplaceManifest } from "@capybara-hq/plugin-sdk";
|
|
3
|
+
import { ApiError } from "../errors.js";
|
|
4
|
+
import { NetDeniedError } from "../net/public-address.js";
|
|
5
|
+
import { safeFetch } from "../net/safe-fetch.js";
|
|
6
|
+
import { isLoopback, readCapped } from "../packages/npm.js";
|
|
7
|
+
/**
|
|
8
|
+
* The API error for a refused download, or undefined when the refusal is not one of the two
|
|
9
|
+
* marketplace codes (an invalid URL or a DNS failure is an ordinary fetch failure).
|
|
10
|
+
*/
|
|
11
|
+
export function marketplaceNetCode(e) {
|
|
12
|
+
if (e.code === "net.private_address")
|
|
13
|
+
return "marketplace.private_address";
|
|
14
|
+
if (e.code === "net.redirect")
|
|
15
|
+
return "marketplace.redirect";
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
/** The network rules for marketplace downloads from the kernel config. */
|
|
19
|
+
export function marketplaceNetPolicy(config) {
|
|
20
|
+
return {
|
|
21
|
+
allowInsecureLoopback: config.marketplaces.allowInsecureLoopback,
|
|
22
|
+
allowPrivateHosts: config.marketplaces.allowPrivateHosts,
|
|
23
|
+
trustedOrigins: [new URL(config.packages.npmRegistry).origin],
|
|
24
|
+
...(config.net.httpsProxy !== undefined && {
|
|
25
|
+
proxy: { url: config.net.httpsProxy, noProxy: config.net.noProxy },
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The fetch failed (network, HTTP status, redirect, size, timeout). English message, no token.
|
|
31
|
+
* `code` is set when the network rules refused the request.
|
|
32
|
+
*/
|
|
33
|
+
export class MarketplaceFetchError extends Error {
|
|
34
|
+
code;
|
|
35
|
+
/** The host the network rules refused (with `code`). */
|
|
36
|
+
host;
|
|
37
|
+
constructor(message, options) {
|
|
38
|
+
super(message, options);
|
|
39
|
+
this.name = "MarketplaceFetchError";
|
|
40
|
+
this.code = options?.code;
|
|
41
|
+
this.host = options?.host;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** The response is not a valid manifest (JSON or schema). */
|
|
45
|
+
export class MarketplaceInvalidError extends Error {
|
|
46
|
+
issues;
|
|
47
|
+
constructor(message, issues) {
|
|
48
|
+
super(message);
|
|
49
|
+
this.issues = issues;
|
|
50
|
+
this.name = "MarketplaceInvalidError";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const errMsg = (e) => (e instanceof Error ? e.message : String(e));
|
|
54
|
+
/**
|
|
55
|
+
* Whether a marketplace URL is usable: https (or http on loopback in tests), at most 2000
|
|
56
|
+
* characters, parseable, without user info. Returns the reason (English) or null.
|
|
57
|
+
*/
|
|
58
|
+
export function marketplaceUrlProblem(url, allowInsecureLoopback) {
|
|
59
|
+
if (url.length > 2000)
|
|
60
|
+
return "the URL is longer than 2000 characters";
|
|
61
|
+
let u;
|
|
62
|
+
try {
|
|
63
|
+
u = new URL(url);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return "not a valid URL";
|
|
67
|
+
}
|
|
68
|
+
if (u.username !== "" || u.password !== "")
|
|
69
|
+
return "the URL must not contain credentials";
|
|
70
|
+
if (u.protocol === "https:")
|
|
71
|
+
return null;
|
|
72
|
+
if (allowInsecureLoopback && u.protocol === "http:" && isLoopback(u.hostname))
|
|
73
|
+
return null;
|
|
74
|
+
return "the URL must use https";
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Fetches and validates one `marketplace.json`. Throws {@link MarketplaceFetchError} or
|
|
78
|
+
* {@link MarketplaceInvalidError}.
|
|
79
|
+
*/
|
|
80
|
+
export async function fetchMarketplaceManifest(url, o) {
|
|
81
|
+
const problem = marketplaceUrlProblem(url, o.net.allowInsecureLoopback);
|
|
82
|
+
if (problem !== null)
|
|
83
|
+
throw new MarketplaceFetchError(`invalid marketplace URL: ${problem}`);
|
|
84
|
+
const target = new URL(url);
|
|
85
|
+
const headers = { accept: "application/json" };
|
|
86
|
+
if (o.etag)
|
|
87
|
+
headers["if-none-match"] = o.etag;
|
|
88
|
+
if (o.token !== undefined && o.tokenOrigin === target.origin) {
|
|
89
|
+
headers.authorization = `Bearer ${o.token}`;
|
|
90
|
+
}
|
|
91
|
+
const signal = AbortSignal.any([o.signal, AbortSignal.timeout(o.timeoutMs)]);
|
|
92
|
+
let res;
|
|
93
|
+
try {
|
|
94
|
+
res = await safeFetch(target.href, { headers, signal }, o.net, {
|
|
95
|
+
...(o.lookup !== undefined && { lookup: o.lookup }),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch (e) {
|
|
99
|
+
if (e instanceof NetDeniedError) {
|
|
100
|
+
const code = marketplaceNetCode(e);
|
|
101
|
+
throw new MarketplaceFetchError(`cannot fetch the marketplace: ${e.message}`, {
|
|
102
|
+
cause: e,
|
|
103
|
+
...(code !== undefined && { code, host: e.host }),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
throw new MarketplaceFetchError(`cannot fetch the marketplace: ${errMsg(e)}`, { cause: e });
|
|
107
|
+
}
|
|
108
|
+
if (res.status === 304) {
|
|
109
|
+
await res.body?.cancel().catch(() => { });
|
|
110
|
+
return { status: "not_modified" };
|
|
111
|
+
}
|
|
112
|
+
if (!res.ok) {
|
|
113
|
+
await res.body?.cancel().catch(() => { });
|
|
114
|
+
throw new MarketplaceFetchError(`the marketplace responded with HTTP ${res.status}`);
|
|
115
|
+
}
|
|
116
|
+
let raw;
|
|
117
|
+
try {
|
|
118
|
+
raw = await readCapped(res, o.maxBytes, () => new MarketplaceFetchError(`the marketplace is larger than ${o.maxBytes} bytes`));
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
if (e instanceof MarketplaceFetchError)
|
|
122
|
+
throw e;
|
|
123
|
+
throw new MarketplaceFetchError(`cannot read the marketplace: ${errMsg(e)}`, { cause: e });
|
|
124
|
+
}
|
|
125
|
+
let json;
|
|
126
|
+
try {
|
|
127
|
+
json = JSON.parse(raw.toString("utf8"));
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
throw new MarketplaceInvalidError("the marketplace manifest is not valid JSON", []);
|
|
131
|
+
}
|
|
132
|
+
const parsed = parseMarketplaceManifest(json, {
|
|
133
|
+
allowInsecureLoopback: o.net.allowInsecureLoopback,
|
|
134
|
+
});
|
|
135
|
+
if ("errors" in parsed) {
|
|
136
|
+
throw new MarketplaceInvalidError(`the response is not a valid marketplace.json: ${parsed.errors.slice(0, 5).join("; ")}`, parsed.errors);
|
|
137
|
+
}
|
|
138
|
+
return { status: "ok", manifest: parsed, etag: res.headers.get("etag") };
|
|
139
|
+
}
|
|
140
|
+
/** `sha512-<base64>` / `sha256-<base64>` SRI -> algorithm and digest (undefined otherwise). */
|
|
141
|
+
function parseSri(integrity) {
|
|
142
|
+
const m = /^(sha512|sha256)-([A-Za-z0-9+/]+={0,2})$/.exec(integrity.trim());
|
|
143
|
+
if (!m)
|
|
144
|
+
return undefined;
|
|
145
|
+
const alg = m[1];
|
|
146
|
+
const digest = Buffer.from(m[2], "base64");
|
|
147
|
+
return digest.length === (alg === "sha512" ? 64 : 32) ? { alg, digest } : undefined;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Downloads a marketplace `archive` source (a plugin tgz at `url`) under the rules in the file
|
|
151
|
+
* header (https, no redirects, at most `maxBytes`, a timeout) and verifies it against the
|
|
152
|
+
* marketplace's `integrity` (sha512 or sha256 SRI). Failures are API errors: a size over the limit
|
|
153
|
+
* -> `extension.package_too_large`; a digest mismatch -> `marketplace.integrity_mismatch`; a host
|
|
154
|
+
* resolving to a private address -> `marketplace.private_address`; a 3xx -> `marketplace.redirect`;
|
|
155
|
+
* anything else -> `marketplace.fetch_failed`.
|
|
156
|
+
*/
|
|
157
|
+
export async function fetchMarketplaceArchive(archive, o) {
|
|
158
|
+
const failed = (m) => new ApiError("marketplace.fetch_failed", m);
|
|
159
|
+
const problem = marketplaceUrlProblem(archive.url, o.net.allowInsecureLoopback);
|
|
160
|
+
if (problem !== null)
|
|
161
|
+
throw failed(`invalid archive URL: ${problem}`);
|
|
162
|
+
const sri = parseSri(archive.integrity);
|
|
163
|
+
if (!sri)
|
|
164
|
+
throw failed("the archive integrity is not a sha512 or sha256 SRI");
|
|
165
|
+
const timeout = AbortSignal.timeout(o.timeoutMs);
|
|
166
|
+
const signal = o.signal ? AbortSignal.any([o.signal, timeout]) : timeout;
|
|
167
|
+
let res;
|
|
168
|
+
try {
|
|
169
|
+
res = await safeFetch(new URL(archive.url).href, { signal }, o.net, {
|
|
170
|
+
...(o.lookup !== undefined && { lookup: o.lookup }),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
catch (e) {
|
|
174
|
+
if (e instanceof NetDeniedError) {
|
|
175
|
+
const code = marketplaceNetCode(e);
|
|
176
|
+
if (code !== undefined) {
|
|
177
|
+
throw new ApiError(code, `Archive download refused: ${e.message}`, [{ host: e.host }]);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
throw failed(`cannot fetch the archive: ${errMsg(e)}`);
|
|
181
|
+
}
|
|
182
|
+
if (!res.ok) {
|
|
183
|
+
await res.body?.cancel().catch(() => { });
|
|
184
|
+
throw failed(`the archive URL responded with HTTP ${res.status}`);
|
|
185
|
+
}
|
|
186
|
+
const tooLarge = new ApiError("extension.package_too_large", `the package is larger than ${o.maxBytes} bytes`);
|
|
187
|
+
let bytes;
|
|
188
|
+
try {
|
|
189
|
+
bytes = await readCapped(res, o.maxBytes, () => tooLarge);
|
|
190
|
+
}
|
|
191
|
+
catch (e) {
|
|
192
|
+
if (e === tooLarge)
|
|
193
|
+
throw e;
|
|
194
|
+
throw failed(`cannot read the archive: ${errMsg(e)}`);
|
|
195
|
+
}
|
|
196
|
+
const got = createHash(sri.alg).update(bytes).digest();
|
|
197
|
+
if (!timingSafeEqual(got, sri.digest)) {
|
|
198
|
+
const prefix = (s) => `${s.slice(0, 19)}…`;
|
|
199
|
+
const actual = `${sri.alg}-${got.toString("base64")}`;
|
|
200
|
+
throw new ApiError("marketplace.integrity_mismatch", `The package does not match the marketplace (expected ${prefix(archive.integrity)}, got ${prefix(actual)}); installation refused`, [{ expected: prefix(archive.integrity), actual: prefix(actual) }]);
|
|
201
|
+
}
|
|
202
|
+
return { bytes: new Uint8Array(bytes), integrity: archive.integrity };
|
|
203
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type KernelConfig } from "../config/schema.js";
|
|
3
|
+
import { type Principal } from "../identity/principal.js";
|
|
4
|
+
import type { CatalogService, MarketplaceImportResult } from "./catalog.service.js";
|
|
5
|
+
import type { MarketplaceEntryView, MarketplacesService, MarketplaceView } from "./marketplaces.service.js";
|
|
6
|
+
declare const AddBody: z.ZodObject<{
|
|
7
|
+
name: z.ZodString;
|
|
8
|
+
url: z.ZodString;
|
|
9
|
+
form: z.ZodOptional<z.ZodEnum<{
|
|
10
|
+
git: "git";
|
|
11
|
+
http: "http";
|
|
12
|
+
}>>;
|
|
13
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
14
|
+
mirrors: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
15
|
+
token: z.ZodOptional<z.ZodString>;
|
|
16
|
+
}, z.core.$strip>;
|
|
17
|
+
declare const PatchBody: z.ZodObject<{
|
|
18
|
+
name: z.ZodOptional<z.ZodString>;
|
|
19
|
+
url: z.ZodOptional<z.ZodString>;
|
|
20
|
+
form: z.ZodOptional<z.ZodEnum<{
|
|
21
|
+
git: "git";
|
|
22
|
+
http: "http";
|
|
23
|
+
}>>;
|
|
24
|
+
ref: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
25
|
+
mirrors: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
26
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
27
|
+
token: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
28
|
+
}, z.core.$strict>;
|
|
29
|
+
declare const EntriesQuery: z.ZodObject<{
|
|
30
|
+
sourceId: z.ZodOptional<z.ZodString>;
|
|
31
|
+
q: z.ZodOptional<z.ZodString>;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
declare const ImportBody: z.ZodObject<{
|
|
34
|
+
version: z.ZodOptional<z.ZodString>;
|
|
35
|
+
}, z.core.$strip>;
|
|
36
|
+
/**
|
|
37
|
+
* Marketplaces (`/api/v1/admin/marketplaces/*`, enterprise admins): create, update, delete and
|
|
38
|
+
* refresh the official and enterprise marketplaces, browse entries, import from a marketplace.
|
|
39
|
+
* Writes re-check the enterprise admin inside the service's lock and are audited.
|
|
40
|
+
*/
|
|
41
|
+
export declare class MarketplacesController {
|
|
42
|
+
private readonly marketplaces;
|
|
43
|
+
private readonly catalog;
|
|
44
|
+
private readonly config;
|
|
45
|
+
constructor(marketplaces: MarketplacesService, catalog: CatalogService, config: () => KernelConfig);
|
|
46
|
+
/** 全部来源;`offline` 为 true 表示 `marketplaces.official.enabled` 为 false(界面显示「离线模式」)。 */
|
|
47
|
+
list(): Promise<{
|
|
48
|
+
items: MarketplaceView[];
|
|
49
|
+
offline: boolean;
|
|
50
|
+
}>;
|
|
51
|
+
/**
|
|
52
|
+
* Adds an enterprise marketplace (https URL and mirrors; the token is kept in secrets and sent only
|
|
53
|
+
* to the URL's origin). A git URL (`…/*.git`, `owner/repo`, or any URL with `form: "git"`) is a
|
|
54
|
+
* git marketplace with an optional `ref`; anything else is a marketplace.json URL.
|
|
55
|
+
*/
|
|
56
|
+
add(principal: Principal, body: z.infer<typeof AddBody>): Promise<MarketplaceView>;
|
|
57
|
+
/**
|
|
58
|
+
* Browses entries (enabled marketplaces only, `sourceId` filters by marketplace; at most
|
|
59
|
+
* `MARKETPLACE_ENTRIES_MAX`, `truncated` true means there are more). An entry that cannot be
|
|
60
|
+
* imported has `importable: false` and a `reason`: `host_not_allowed` (its git / archive host is
|
|
61
|
+
* outside `marketplaces.allowedHosts`) or `path_needs_git_marketplace` (a path entry of an http
|
|
62
|
+
* marketplace).
|
|
63
|
+
*/
|
|
64
|
+
entries(q: z.infer<typeof EntriesQuery>): Promise<{
|
|
65
|
+
items: MarketplaceEntryView[];
|
|
66
|
+
truncated: boolean;
|
|
67
|
+
}>;
|
|
68
|
+
/**
|
|
69
|
+
* Updates a marketplace (official only takes `enabled`, anything else -> 409
|
|
70
|
+
* `marketplace.builtin`; `token: null` clears the token).
|
|
71
|
+
*/
|
|
72
|
+
update(principal: Principal, id: string, body: z.infer<typeof PatchBody>): Promise<MarketplaceView>;
|
|
73
|
+
/**
|
|
74
|
+
* Deletes an enterprise marketplace (imported catalog items are kept); official -> 409
|
|
75
|
+
* `marketplace.builtin`.
|
|
76
|
+
*/
|
|
77
|
+
remove(principal: Principal, id: string): Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* Manual refresh (a git marketplace with an unchanged commit is skipped). On failure the status
|
|
80
|
+
* becomes `error`, the old entries are kept, and it returns `marketplace.invalid` (502) when some
|
|
81
|
+
* URL returned an invalid manifest, the network rule's code (422) when every URL was refused by
|
|
82
|
+
* it, a git reader code (`marketplace.git_failed` 502, `git_too_large` / `git_unsupported_entry`
|
|
83
|
+
* 422) for a git marketplace, else `marketplace.fetch_failed` (502).
|
|
84
|
+
*/
|
|
85
|
+
refresh(principal: Principal, id: string): Promise<MarketplaceView>;
|
|
86
|
+
/**
|
|
87
|
+
* Prepares the import of one version of a marketplace entry (`version` defaults to the newest
|
|
88
|
+
* compatible one; verified against the marketplace's integrity): 200 `{ stagingId, review,
|
|
89
|
+
* permissionsMismatch }`, confirmed with `POST /api/v1/admin/catalog/imports/:stagingId/confirm`.
|
|
90
|
+
* A `path` / `git` source is read from git (a path at the marketplace's last refreshed commit, a
|
|
91
|
+
* git source at its pinned commit or its ref's head, recorded); its host outside
|
|
92
|
+
* `marketplaces.allowedHosts` -> 403 `marketplace.host_not_allowed`; a path entry of an http
|
|
93
|
+
* marketplace -> 422 `marketplace.path_unsupported`.
|
|
94
|
+
*/
|
|
95
|
+
importEntry(principal: Principal, id: string, name: string, body: z.infer<typeof ImportBody>): Promise<MarketplaceImportResult>;
|
|
96
|
+
}
|
|
97
|
+
export {};
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
10
|
+
import { Body, Controller, Delete, Get, HttpCode, Inject, Param, Patch, Post, Query, } from "@nestjs/common";
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { MARKETPLACE_MAX_MIRRORS } from "../config/schema.js";
|
|
13
|
+
import { CATALOG, KERNEL_CONFIG, MARKETPLACES } from "../http/tokens.js";
|
|
14
|
+
import { ZodPipe } from "../http/zod.pipe.js";
|
|
15
|
+
import { CurrentPrincipal, EnterpriseAdmin, patTokenId, requireUser, } from "../identity/principal.js";
|
|
16
|
+
const Url = z.string().min(1).max(2000);
|
|
17
|
+
const Form = z.enum(["http", "git"]);
|
|
18
|
+
const Ref = z.string().min(1).max(256);
|
|
19
|
+
const AddBody = z.object({
|
|
20
|
+
name: z.string().min(1).max(100),
|
|
21
|
+
url: Url,
|
|
22
|
+
form: Form.optional(),
|
|
23
|
+
ref: Ref.optional(),
|
|
24
|
+
mirrors: z.array(Url).max(MARKETPLACE_MAX_MIRRORS).optional(),
|
|
25
|
+
token: z.string().min(1).max(4096).optional(),
|
|
26
|
+
});
|
|
27
|
+
const PatchBody = z
|
|
28
|
+
.object({
|
|
29
|
+
name: z.string().min(1).max(100).optional(),
|
|
30
|
+
url: Url.optional(),
|
|
31
|
+
form: Form.optional(),
|
|
32
|
+
ref: Ref.nullable().optional(),
|
|
33
|
+
mirrors: z.array(Url).max(MARKETPLACE_MAX_MIRRORS).optional(),
|
|
34
|
+
enabled: z.boolean().optional(),
|
|
35
|
+
token: z.string().min(1).max(4096).nullable().optional(),
|
|
36
|
+
})
|
|
37
|
+
.strict();
|
|
38
|
+
const EntriesQuery = z.object({
|
|
39
|
+
sourceId: z.string().min(1).max(100).optional(),
|
|
40
|
+
q: z.string().max(200).optional(),
|
|
41
|
+
});
|
|
42
|
+
const ImportBody = z.object({ version: z.string().min(1).max(256).optional() });
|
|
43
|
+
/** 手动刷新的总时限(每个地址另有 30 秒超时)。 */
|
|
44
|
+
const REFRESH_DEADLINE_MS = 300_000;
|
|
45
|
+
const actorOpts = (actor) => {
|
|
46
|
+
const tokenId = patTokenId(actor);
|
|
47
|
+
return tokenId !== undefined ? { actorTokenId: tokenId } : {};
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Marketplaces (`/api/v1/admin/marketplaces/*`, enterprise admins): create, update, delete and
|
|
51
|
+
* refresh the official and enterprise marketplaces, browse entries, import from a marketplace.
|
|
52
|
+
* Writes re-check the enterprise admin inside the service's lock and are audited.
|
|
53
|
+
*/
|
|
54
|
+
let MarketplacesController = class MarketplacesController {
|
|
55
|
+
marketplaces;
|
|
56
|
+
catalog;
|
|
57
|
+
config;
|
|
58
|
+
constructor(marketplaces, catalog, config) {
|
|
59
|
+
this.marketplaces = marketplaces;
|
|
60
|
+
this.catalog = catalog;
|
|
61
|
+
this.config = config;
|
|
62
|
+
}
|
|
63
|
+
/** 全部来源;`offline` 为 true 表示 `marketplaces.official.enabled` 为 false(界面显示「离线模式」)。 */
|
|
64
|
+
async list() {
|
|
65
|
+
return {
|
|
66
|
+
items: await this.marketplaces.list(),
|
|
67
|
+
offline: !this.config().marketplaces.official.enabled,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Adds an enterprise marketplace (https URL and mirrors; the token is kept in secrets and sent only
|
|
72
|
+
* to the URL's origin). A git URL (`…/*.git`, `owner/repo`, or any URL with `form: "git"`) is a
|
|
73
|
+
* git marketplace with an optional `ref`; anything else is a marketplace.json URL.
|
|
74
|
+
*/
|
|
75
|
+
add(principal, body) {
|
|
76
|
+
const actor = requireUser(principal);
|
|
77
|
+
return this.marketplaces.add(actor.account.id, {
|
|
78
|
+
name: body.name,
|
|
79
|
+
url: body.url,
|
|
80
|
+
...(body.form !== undefined && { form: body.form }),
|
|
81
|
+
...(body.ref !== undefined && { ref: body.ref }),
|
|
82
|
+
...(body.mirrors !== undefined && { mirrors: body.mirrors }),
|
|
83
|
+
...(body.token !== undefined && { token: body.token }),
|
|
84
|
+
}, actorOpts(actor));
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Browses entries (enabled marketplaces only, `sourceId` filters by marketplace; at most
|
|
88
|
+
* `MARKETPLACE_ENTRIES_MAX`, `truncated` true means there are more). An entry that cannot be
|
|
89
|
+
* imported has `importable: false` and a `reason`: `host_not_allowed` (its git / archive host is
|
|
90
|
+
* outside `marketplaces.allowedHosts`) or `path_needs_git_marketplace` (a path entry of an http
|
|
91
|
+
* marketplace).
|
|
92
|
+
*/
|
|
93
|
+
entries(q) {
|
|
94
|
+
return this.marketplaces.entries({
|
|
95
|
+
...(q.sourceId !== undefined && { marketplaceId: q.sourceId }),
|
|
96
|
+
...(q.q !== undefined && { q: q.q }),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Updates a marketplace (official only takes `enabled`, anything else -> 409
|
|
101
|
+
* `marketplace.builtin`; `token: null` clears the token).
|
|
102
|
+
*/
|
|
103
|
+
update(principal, id, body) {
|
|
104
|
+
const actor = requireUser(principal);
|
|
105
|
+
return this.marketplaces.update(actor.account.id, id, {
|
|
106
|
+
...(body.name !== undefined && { name: body.name }),
|
|
107
|
+
...(body.url !== undefined && { url: body.url }),
|
|
108
|
+
...(body.form !== undefined && { form: body.form }),
|
|
109
|
+
...(body.ref !== undefined && { ref: body.ref }),
|
|
110
|
+
...(body.mirrors !== undefined && { mirrors: body.mirrors }),
|
|
111
|
+
...(body.enabled !== undefined && { enabled: body.enabled }),
|
|
112
|
+
...(body.token !== undefined && { token: body.token }),
|
|
113
|
+
}, actorOpts(actor));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Deletes an enterprise marketplace (imported catalog items are kept); official -> 409
|
|
117
|
+
* `marketplace.builtin`.
|
|
118
|
+
*/
|
|
119
|
+
async remove(principal, id) {
|
|
120
|
+
const actor = requireUser(principal);
|
|
121
|
+
await this.marketplaces.remove(actor.account.id, id, actorOpts(actor));
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Manual refresh (a git marketplace with an unchanged commit is skipped). On failure the status
|
|
125
|
+
* becomes `error`, the old entries are kept, and it returns `marketplace.invalid` (502) when some
|
|
126
|
+
* URL returned an invalid manifest, the network rule's code (422) when every URL was refused by
|
|
127
|
+
* it, a git reader code (`marketplace.git_failed` 502, `git_too_large` / `git_unsupported_entry`
|
|
128
|
+
* 422) for a git marketplace, else `marketplace.fetch_failed` (502).
|
|
129
|
+
*/
|
|
130
|
+
refresh(principal, id) {
|
|
131
|
+
const actor = requireUser(principal);
|
|
132
|
+
return this.marketplaces.refresh(id, AbortSignal.timeout(REFRESH_DEADLINE_MS), actor.account.id, {
|
|
133
|
+
...actorOpts(actor),
|
|
134
|
+
throwOnError: true,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Prepares the import of one version of a marketplace entry (`version` defaults to the newest
|
|
139
|
+
* compatible one; verified against the marketplace's integrity): 200 `{ stagingId, review,
|
|
140
|
+
* permissionsMismatch }`, confirmed with `POST /api/v1/admin/catalog/imports/:stagingId/confirm`.
|
|
141
|
+
* A `path` / `git` source is read from git (a path at the marketplace's last refreshed commit, a
|
|
142
|
+
* git source at its pinned commit or its ref's head, recorded); its host outside
|
|
143
|
+
* `marketplaces.allowedHosts` -> 403 `marketplace.host_not_allowed`; a path entry of an http
|
|
144
|
+
* marketplace -> 422 `marketplace.path_unsupported`.
|
|
145
|
+
*/
|
|
146
|
+
importEntry(principal, id, name, body) {
|
|
147
|
+
const actor = requireUser(principal);
|
|
148
|
+
return this.catalog.importFromMarketplace(actor.account.id, { marketplaceId: id, name, ...(body.version !== undefined && { version: body.version }) }, actorOpts(actor));
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
__decorate([
|
|
152
|
+
Get()
|
|
153
|
+
], MarketplacesController.prototype, "list", null);
|
|
154
|
+
__decorate([
|
|
155
|
+
Post(),
|
|
156
|
+
HttpCode(201),
|
|
157
|
+
__param(0, CurrentPrincipal()),
|
|
158
|
+
__param(1, Body(new ZodPipe(AddBody)))
|
|
159
|
+
], MarketplacesController.prototype, "add", null);
|
|
160
|
+
__decorate([
|
|
161
|
+
Get("entries"),
|
|
162
|
+
__param(0, Query(new ZodPipe(EntriesQuery)))
|
|
163
|
+
], MarketplacesController.prototype, "entries", null);
|
|
164
|
+
__decorate([
|
|
165
|
+
Patch(":id"),
|
|
166
|
+
__param(0, CurrentPrincipal()),
|
|
167
|
+
__param(1, Param("id")),
|
|
168
|
+
__param(2, Body(new ZodPipe(PatchBody)))
|
|
169
|
+
], MarketplacesController.prototype, "update", null);
|
|
170
|
+
__decorate([
|
|
171
|
+
Delete(":id"),
|
|
172
|
+
HttpCode(204),
|
|
173
|
+
__param(0, CurrentPrincipal()),
|
|
174
|
+
__param(1, Param("id"))
|
|
175
|
+
], MarketplacesController.prototype, "remove", null);
|
|
176
|
+
__decorate([
|
|
177
|
+
Post(":id/refresh"),
|
|
178
|
+
HttpCode(200),
|
|
179
|
+
__param(0, CurrentPrincipal()),
|
|
180
|
+
__param(1, Param("id"))
|
|
181
|
+
], MarketplacesController.prototype, "refresh", null);
|
|
182
|
+
__decorate([
|
|
183
|
+
Post(":id/entries/:name/import"),
|
|
184
|
+
HttpCode(200),
|
|
185
|
+
__param(0, CurrentPrincipal()),
|
|
186
|
+
__param(1, Param("id")),
|
|
187
|
+
__param(2, Param("name")),
|
|
188
|
+
__param(3, Body(new ZodPipe(ImportBody)))
|
|
189
|
+
], MarketplacesController.prototype, "importEntry", null);
|
|
190
|
+
MarketplacesController = __decorate([
|
|
191
|
+
Controller("api/v1/admin/marketplaces"),
|
|
192
|
+
EnterpriseAdmin(),
|
|
193
|
+
__param(0, Inject(MARKETPLACES)),
|
|
194
|
+
__param(1, Inject(CATALOG)),
|
|
195
|
+
__param(2, Inject(KERNEL_CONFIG))
|
|
196
|
+
], MarketplacesController);
|
|
197
|
+
export { MarketplacesController };
|