@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,173 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { canonicalJson } from "../tools/registry.js";
|
|
3
|
+
const baseQuery = (db, orgId) => db
|
|
4
|
+
.selectFrom("agent_templates as t")
|
|
5
|
+
.innerJoin("agent_template_versions as v", (j) => j.onRef("v.template_id", "=", "t.id").onRef("v.version", "=", "t.current_version"))
|
|
6
|
+
.select([
|
|
7
|
+
"t.id",
|
|
8
|
+
"t.name",
|
|
9
|
+
"t.plugin_name",
|
|
10
|
+
"t.current_version",
|
|
11
|
+
"t.catalog_item_id",
|
|
12
|
+
"v.definition",
|
|
13
|
+
"v.source_format",
|
|
14
|
+
"v.catalog_version",
|
|
15
|
+
])
|
|
16
|
+
.where("t.org_id", "=", orgId)
|
|
17
|
+
.where("t.deleted_at", "is", null);
|
|
18
|
+
const rowOf = (r) => ({
|
|
19
|
+
id: r.id,
|
|
20
|
+
name: r.name,
|
|
21
|
+
plugin: r.plugin_name,
|
|
22
|
+
version: r.current_version,
|
|
23
|
+
template: r.definition,
|
|
24
|
+
sourceFormat: r.source_format,
|
|
25
|
+
catalogItemId: r.catalog_item_id,
|
|
26
|
+
catalogVersion: r.catalog_version,
|
|
27
|
+
});
|
|
28
|
+
/** The live templates of `ids` in the org (deleted and foreign ids are left out), by id. */
|
|
29
|
+
export async function loadTemplates(db, orgId, ids) {
|
|
30
|
+
if (ids.length === 0)
|
|
31
|
+
return new Map();
|
|
32
|
+
const rows = await baseQuery(db, orgId)
|
|
33
|
+
.where("t.id", "in", [...ids])
|
|
34
|
+
.execute();
|
|
35
|
+
return new Map(rows.map((r) => [r.id, rowOf(r)]));
|
|
36
|
+
}
|
|
37
|
+
/** Reads the org's agent templates (consumed by the roster, the agent page and Task 19's API). */
|
|
38
|
+
export class AgentTemplatesService {
|
|
39
|
+
db;
|
|
40
|
+
constructor(db) {
|
|
41
|
+
this.db = db;
|
|
42
|
+
}
|
|
43
|
+
/** Every live template of the org, by plugin then name. */
|
|
44
|
+
async listForOrg(orgId) {
|
|
45
|
+
const rows = await baseQuery(this.db, orgId)
|
|
46
|
+
.orderBy("t.plugin_name")
|
|
47
|
+
.orderBy("t.name")
|
|
48
|
+
.execute();
|
|
49
|
+
return rows.map((r) => {
|
|
50
|
+
const t = rowOf(r);
|
|
51
|
+
return {
|
|
52
|
+
id: t.id,
|
|
53
|
+
name: t.name,
|
|
54
|
+
plugin: t.plugin,
|
|
55
|
+
type: `${t.plugin}:${t.name}`,
|
|
56
|
+
description: typeof t.template.description === "string" ? t.template.description : "",
|
|
57
|
+
model: t.template.model ?? "inherit",
|
|
58
|
+
version: t.version,
|
|
59
|
+
sourceFormat: t.sourceFormat,
|
|
60
|
+
catalogItemId: t.catalogItemId,
|
|
61
|
+
catalogVersion: t.catalogVersion,
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/** A live template by id or by `<plugin>:<name>`; null when there is none. */
|
|
66
|
+
async resolve(orgId, ref) {
|
|
67
|
+
const i = ref.indexOf(":");
|
|
68
|
+
let q = baseQuery(this.db, orgId);
|
|
69
|
+
q =
|
|
70
|
+
i < 0
|
|
71
|
+
? q.where("t.id", "=", ref)
|
|
72
|
+
: q.where("t.plugin_name", "=", ref.slice(0, i)).where("t.name", "=", ref.slice(i + 1));
|
|
73
|
+
const r = await q.executeTakeFirst();
|
|
74
|
+
if (!r)
|
|
75
|
+
return null;
|
|
76
|
+
const t = rowOf(r);
|
|
77
|
+
return { id: t.id, version: t.version, plugin: t.plugin, template: t.template };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Writes `template` as the org's live template `<plugin>:<name>` in the caller's transaction (the
|
|
82
|
+
* caller holds the org row lock): a new template (version 1, `created`), a new version of the live
|
|
83
|
+
* one when its definition differs (`changed`, the version added), or nothing when it is equal.
|
|
84
|
+
*/
|
|
85
|
+
export async function putTemplateVersionIn(t, s, template) {
|
|
86
|
+
const live = await t
|
|
87
|
+
.selectFrom("agent_templates as a")
|
|
88
|
+
.innerJoin("agent_template_versions as v", (j) => j.onRef("v.template_id", "=", "a.id").onRef("v.version", "=", "a.current_version"))
|
|
89
|
+
.select(["a.id", "a.current_version", "v.definition"])
|
|
90
|
+
.where("a.org_id", "=", s.orgId)
|
|
91
|
+
.where("a.plugin_name", "=", s.plugin)
|
|
92
|
+
.where("a.name", "=", template.name)
|
|
93
|
+
.where("a.deleted_at", "is", null)
|
|
94
|
+
.forUpdate("a")
|
|
95
|
+
.executeTakeFirst();
|
|
96
|
+
if (live && canonicalJson(live.definition) === canonicalJson(template)) {
|
|
97
|
+
return { id: live.id, version: live.current_version, created: false, changed: false };
|
|
98
|
+
}
|
|
99
|
+
const id = live?.id ?? randomUUID();
|
|
100
|
+
const version = live ? live.current_version + 1 : 1;
|
|
101
|
+
if (!live) {
|
|
102
|
+
await t
|
|
103
|
+
.insertInto("agent_templates")
|
|
104
|
+
.values({
|
|
105
|
+
id,
|
|
106
|
+
org_id: s.orgId,
|
|
107
|
+
name: template.name,
|
|
108
|
+
catalog_item_id: s.catalogItemId,
|
|
109
|
+
plugin_name: s.plugin,
|
|
110
|
+
current_version: 1,
|
|
111
|
+
})
|
|
112
|
+
.execute();
|
|
113
|
+
}
|
|
114
|
+
await t
|
|
115
|
+
.insertInto("agent_template_versions")
|
|
116
|
+
.values({
|
|
117
|
+
template_id: id,
|
|
118
|
+
version,
|
|
119
|
+
definition: JSON.stringify(template),
|
|
120
|
+
source_format: s.sourceFormat,
|
|
121
|
+
catalog_version: s.catalogVersion,
|
|
122
|
+
})
|
|
123
|
+
.execute();
|
|
124
|
+
if (live) {
|
|
125
|
+
await t
|
|
126
|
+
.updateTable("agent_templates")
|
|
127
|
+
.set({ current_version: version, catalog_item_id: s.catalogItemId, updated_at: new Date() })
|
|
128
|
+
.where("id", "=", id)
|
|
129
|
+
.execute();
|
|
130
|
+
}
|
|
131
|
+
return { id, version, created: !live, changed: true };
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Undoes `version` of a live template when it is still the current one (an install or upgrade
|
|
135
|
+
* rolled back): the version row goes and the template is back at the version before. Returns
|
|
136
|
+
* whether anything changed.
|
|
137
|
+
*/
|
|
138
|
+
export async function revertTemplateVersionIn(t, orgId, id, version) {
|
|
139
|
+
if (version <= 1)
|
|
140
|
+
return false;
|
|
141
|
+
// catalog_item_id is not restored (skills.revertVersionIn does restore its own): a template's
|
|
142
|
+
// versions all come from the one catalog item of its plugin name, so it never changes
|
|
143
|
+
const r = await t
|
|
144
|
+
.updateTable("agent_templates")
|
|
145
|
+
.set({ current_version: version - 1, updated_at: new Date() })
|
|
146
|
+
.where("id", "=", id)
|
|
147
|
+
.where("org_id", "=", orgId)
|
|
148
|
+
.where("current_version", "=", version)
|
|
149
|
+
.where("deleted_at", "is", null)
|
|
150
|
+
.executeTakeFirst();
|
|
151
|
+
if (r.numUpdatedRows === 0n)
|
|
152
|
+
return false;
|
|
153
|
+
await t
|
|
154
|
+
.deleteFrom("agent_template_versions")
|
|
155
|
+
.where("template_id", "=", id)
|
|
156
|
+
.where("version", "=", version)
|
|
157
|
+
.execute();
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Removes a template (soft delete: sub-agents already started keep their frozen definition, and
|
|
162
|
+
* the roster skips it). Returns whether it was live.
|
|
163
|
+
*/
|
|
164
|
+
export async function softDeleteTemplateIn(t, orgId, id) {
|
|
165
|
+
const r = await t
|
|
166
|
+
.updateTable("agent_templates")
|
|
167
|
+
.set({ deleted_at: new Date(), updated_at: new Date() })
|
|
168
|
+
.where("id", "=", id)
|
|
169
|
+
.where("org_id", "=", orgId)
|
|
170
|
+
.where("deleted_at", "is", null)
|
|
171
|
+
.executeTakeFirst();
|
|
172
|
+
return r.numUpdatedRows > 0n;
|
|
173
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import type { FastifyReply } from "fastify";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import type { AdminExtensionView } from "../extensions/permission-view.js";
|
|
4
|
+
import { type Principal } from "../identity/principal.js";
|
|
5
|
+
import { type CatalogItemDetail, type CatalogItemView, type CatalogService, type PermissionsMismatch } from "./catalog.service.js";
|
|
6
|
+
import type { OrgCatalogService } from "./org-catalog.service.js";
|
|
7
|
+
import type { PluginConfirmResult, PluginImport, PluginReview } from "./plugin-import.js";
|
|
8
|
+
declare const NpmBody: z.ZodObject<{
|
|
9
|
+
package: z.ZodString;
|
|
10
|
+
version: z.ZodOptional<z.ZodString>;
|
|
11
|
+
}, z.core.$strip>;
|
|
12
|
+
declare const GitBody: z.ZodObject<{
|
|
13
|
+
url: z.ZodString;
|
|
14
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
15
|
+
path: z.ZodOptional<z.ZodString>;
|
|
16
|
+
}, z.core.$strict>;
|
|
17
|
+
declare const PolicyBody: z.ZodObject<{
|
|
18
|
+
policy: z.ZodEnum<{
|
|
19
|
+
allow: "allow";
|
|
20
|
+
disabled: "disabled";
|
|
21
|
+
needs_approval: "needs_approval";
|
|
22
|
+
}>;
|
|
23
|
+
}, z.core.$strip>;
|
|
24
|
+
declare const InstallBody: z.ZodObject<{
|
|
25
|
+
version: z.ZodString;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
declare const ConfirmBody: z.ZodObject<{
|
|
28
|
+
reviewHash: z.ZodString;
|
|
29
|
+
deployExtension: z.ZodBoolean;
|
|
30
|
+
pinnedSuggestions: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
31
|
+
}, z.core.$strip>;
|
|
32
|
+
declare const ListQuery: z.ZodObject<{
|
|
33
|
+
includeDeleted: z.ZodOptional<z.ZodEnum<{
|
|
34
|
+
false: "false";
|
|
35
|
+
true: "true";
|
|
36
|
+
}>>;
|
|
37
|
+
limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
38
|
+
offset: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
39
|
+
}, z.core.$strip>;
|
|
40
|
+
/**
|
|
41
|
+
* The enterprise catalog (`/api/v1/admin/catalog/*`, enterprise admins): plugin import (upload / npm
|
|
42
|
+
* prepare, then confirm), the item list and detail, policy, delete, and installing an item's
|
|
43
|
+
* extension on the deployment. Writes re-check the enterprise admin inside the service's lock and are
|
|
44
|
+
* audited.
|
|
45
|
+
*/
|
|
46
|
+
export declare class AdminCatalogController {
|
|
47
|
+
private readonly catalog;
|
|
48
|
+
private readonly pluginImport;
|
|
49
|
+
private readonly orgCatalog;
|
|
50
|
+
constructor(catalog: CatalogService, pluginImport: PluginImport, orgCatalog: OrgCatalogService);
|
|
51
|
+
/**
|
|
52
|
+
* Prepares the import of an uploaded plugin (an npm-pack tgz as the raw body,
|
|
53
|
+
* `application/octet-stream`, at most `packages.maxBytes`): reads and checks the whole plugin
|
|
54
|
+
* (extension, skills, connector templates; dependencies resolved for the review), stages it for 24
|
|
55
|
+
* hours and returns one review `{ stagingId, review }`, confirmed with `imports/:stagingId/confirm`.
|
|
56
|
+
* A pre-0.1.0 package -> 422 `catalog.legacy_format`; an invalid plugin -> 422
|
|
57
|
+
* `catalog.invalid_manifest` (details list each problem); version already imported -> 409
|
|
58
|
+
* `catalog.version_exists`; an item with the same name from another npm package -> 409
|
|
59
|
+
* `catalog.name_conflict`; an extension named like a config-declared one -> 409.
|
|
60
|
+
*/
|
|
61
|
+
importFile(principal: Principal, req: {
|
|
62
|
+
body?: unknown;
|
|
63
|
+
}): Promise<{
|
|
64
|
+
stagingId: string;
|
|
65
|
+
review: PluginReview;
|
|
66
|
+
}>;
|
|
67
|
+
/**
|
|
68
|
+
* Prepares the import of a plugin from the configured npm registry (`version` may be a version, a
|
|
69
|
+
* dist-tag or a range, default latest; verified by `dist.integrity`), as `import/file`. Download
|
|
70
|
+
* failure -> 502.
|
|
71
|
+
*/
|
|
72
|
+
importNpm(principal: Principal, body: z.infer<typeof NpmBody>): Promise<{
|
|
73
|
+
stagingId: string;
|
|
74
|
+
review: PluginReview;
|
|
75
|
+
}>;
|
|
76
|
+
/**
|
|
77
|
+
* Prepares the import of a plugin straight from git (a one-off: no marketplace is created and no
|
|
78
|
+
* updates are tracked): `url` is an https git URL or `owner/repo`, `ref` a branch / tag / commit
|
|
79
|
+
* (default the remote HEAD), `path` the plugin's directory in the repo (default the root). The
|
|
80
|
+
* commit is resolved and recorded with host, repo and path; then as `import/file`. Git failures:
|
|
81
|
+
* 502 `marketplace.git_failed`, 422 `marketplace.git_too_large` / `git_unsupported_entry`, 422
|
|
82
|
+
* `marketplace.private_address` / `marketplace.redirect`.
|
|
83
|
+
*/
|
|
84
|
+
importGit(principal: Principal, body: z.infer<typeof GitBody>): Promise<{
|
|
85
|
+
stagingId: string;
|
|
86
|
+
review: PluginReview;
|
|
87
|
+
}>;
|
|
88
|
+
/**
|
|
89
|
+
* A staged import's review `{ stagingId, review, permissionsMismatch? }` (the mismatch only for
|
|
90
|
+
* a marketplace import whose permission summary differs from the package; the web's import page
|
|
91
|
+
* loads `?staging=<id>` with it). Unknown, expired or already confirmed -> 404
|
|
92
|
+
* `plugin.staging_not_found`.
|
|
93
|
+
*/
|
|
94
|
+
staged(stagingId: string): Promise<{
|
|
95
|
+
stagingId: string;
|
|
96
|
+
review: PluginReview;
|
|
97
|
+
permissionsMismatch?: PermissionsMismatch;
|
|
98
|
+
}>;
|
|
99
|
+
/**
|
|
100
|
+
* Confirms a staged import: approves the plugin's extension when this import installs it (writes
|
|
101
|
+
* its snapshot) and creates the item or adds the version; with `deployExtension` it installs and
|
|
102
|
+
* enables the plugin's own extension after the commit and returns `{ item, deploy }`, where
|
|
103
|
+
* `deploy` says enabled / failed (+ code); a failed deploy does not make the committed import fail
|
|
104
|
+
* (retry from the extension admin by sha256). A foreseeable failure (a downgrade to a version with
|
|
105
|
+
* unrun migrations) is a 409 `extension.downgrade_unsupported` before anything is written.
|
|
106
|
+
* Staging missing or expired -> 404 `plugin.staging_not_found`; `reviewHash` differs or the
|
|
107
|
+
* extension on the deployment changed -> 409 `plugin.review_stale`. `pinnedSuggestions` (skill
|
|
108
|
+
* names of the review) replaces the plugin's suggested pinning; an unknown name -> 400
|
|
109
|
+
* `validation_failed`.
|
|
110
|
+
*/
|
|
111
|
+
confirm(principal: Principal, stagingId: string, body: z.infer<typeof ConfirmBody>): Promise<PluginConfirmResult>;
|
|
112
|
+
/**
|
|
113
|
+
* The item list (`includeDeleted=true` includes deleted items). Paging: `limit` (default 200, at
|
|
114
|
+
* most 1000) and `offset`; `nextOffset` is the next page's offset, null when there is none.
|
|
115
|
+
*/
|
|
116
|
+
list(q: z.infer<typeof ListQuery>): Promise<{
|
|
117
|
+
items: CatalogItemView[];
|
|
118
|
+
nextOffset: number | null;
|
|
119
|
+
}>;
|
|
120
|
+
/**
|
|
121
|
+
* 条目详情与各版本,另给出 `hasIcon`(最新版本有图标,`GET items/:id/icon` 可取);不存在 → 404
|
|
122
|
+
* `catalog.item_not_found`。
|
|
123
|
+
*/
|
|
124
|
+
get(id: string): Promise<CatalogItemDetail & {
|
|
125
|
+
hasIcon: boolean;
|
|
126
|
+
}>;
|
|
127
|
+
/**
|
|
128
|
+
* The item's icon (disabled items included; same response headers as the org side, see
|
|
129
|
+
* `sendCatalogIcon`). No icon -> 404 `catalog.icon_not_found`.
|
|
130
|
+
*/
|
|
131
|
+
icon(id: string, reply: FastifyReply): Promise<void>;
|
|
132
|
+
/** 改策略(allow / needs_approval / disabled)。 */
|
|
133
|
+
setPolicy(principal: Principal, id: string, body: z.infer<typeof PolicyBody>): Promise<CatalogItemView>;
|
|
134
|
+
/** 删除条目(软删除,已安装的组件不受影响)。 */
|
|
135
|
+
remove(principal: Principal, id: string): Promise<void>;
|
|
136
|
+
/**
|
|
137
|
+
* Installs the extension of a version of an item on the deployment (a new install starts disabled;
|
|
138
|
+
* unapproved permissions still need approval). A version without an extension -> 409
|
|
139
|
+
* `catalog.no_extension`.
|
|
140
|
+
*/
|
|
141
|
+
installToDeployment(principal: Principal, id: string, body: z.infer<typeof InstallBody>): Promise<AdminExtensionView>;
|
|
142
|
+
}
|
|
143
|
+
export {};
|
|
@@ -0,0 +1,245 @@
|
|
|
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, Post, Put, Query, Req, Res, } from "@nestjs/common";
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { ApiError } from "../errors.js";
|
|
13
|
+
import { CATALOG, ORG_CATALOG, PLUGIN_IMPORT } from "../http/tokens.js";
|
|
14
|
+
import { ZodPipe } from "../http/zod.pipe.js";
|
|
15
|
+
import { CurrentPrincipal, EnterpriseAdmin, patTokenId, requireUser, } from "../identity/principal.js";
|
|
16
|
+
import { CATALOG_LIST_MAX_LIMIT, } from "./catalog.service.js";
|
|
17
|
+
import { sendCatalogIcon } from "./org-catalog.controller.js";
|
|
18
|
+
const NpmBody = z.object({
|
|
19
|
+
package: z.string().min(1).max(214),
|
|
20
|
+
version: z.string().min(1).max(256).optional(),
|
|
21
|
+
});
|
|
22
|
+
const GitBody = z
|
|
23
|
+
.object({
|
|
24
|
+
url: z.string().min(1).max(2000),
|
|
25
|
+
ref: z.string().min(1).max(256).optional(),
|
|
26
|
+
path: z.string().min(1).max(512).optional(),
|
|
27
|
+
})
|
|
28
|
+
.strict();
|
|
29
|
+
const PolicyBody = z.object({ policy: z.enum(["allow", "needs_approval", "disabled"]) });
|
|
30
|
+
const InstallBody = z.object({ version: z.string().min(1).max(256) });
|
|
31
|
+
const ConfirmBody = z.object({
|
|
32
|
+
reviewHash: z.string().min(1).max(128),
|
|
33
|
+
deployExtension: z.boolean(),
|
|
34
|
+
/** Skill names suggested as pinned (spec §9.1); omitted keeps the plugin's flags. */
|
|
35
|
+
pinnedSuggestions: z.array(z.string().min(1).max(64)).max(50).optional(),
|
|
36
|
+
});
|
|
37
|
+
const ListQuery = z.object({
|
|
38
|
+
includeDeleted: z.enum(["true", "false"]).optional(),
|
|
39
|
+
limit: z.coerce.number().int().min(1).max(CATALOG_LIST_MAX_LIMIT).optional(),
|
|
40
|
+
offset: z.coerce.number().int().min(0).max(1_000_000).optional(),
|
|
41
|
+
});
|
|
42
|
+
const actorOpts = (actor) => {
|
|
43
|
+
const tokenId = patTokenId(actor);
|
|
44
|
+
return tokenId !== undefined ? { actorTokenId: tokenId } : {};
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* The enterprise catalog (`/api/v1/admin/catalog/*`, enterprise admins): plugin import (upload / npm
|
|
48
|
+
* prepare, then confirm), the item list and detail, policy, delete, and installing an item's
|
|
49
|
+
* extension on the deployment. Writes re-check the enterprise admin inside the service's lock and are
|
|
50
|
+
* audited.
|
|
51
|
+
*/
|
|
52
|
+
let AdminCatalogController = class AdminCatalogController {
|
|
53
|
+
catalog;
|
|
54
|
+
pluginImport;
|
|
55
|
+
orgCatalog;
|
|
56
|
+
constructor(catalog, pluginImport, orgCatalog) {
|
|
57
|
+
this.catalog = catalog;
|
|
58
|
+
this.pluginImport = pluginImport;
|
|
59
|
+
this.orgCatalog = orgCatalog;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Prepares the import of an uploaded plugin (an npm-pack tgz as the raw body,
|
|
63
|
+
* `application/octet-stream`, at most `packages.maxBytes`): reads and checks the whole plugin
|
|
64
|
+
* (extension, skills, connector templates; dependencies resolved for the review), stages it for 24
|
|
65
|
+
* hours and returns one review `{ stagingId, review }`, confirmed with `imports/:stagingId/confirm`.
|
|
66
|
+
* A pre-0.1.0 package -> 422 `catalog.legacy_format`; an invalid plugin -> 422
|
|
67
|
+
* `catalog.invalid_manifest` (details list each problem); version already imported -> 409
|
|
68
|
+
* `catalog.version_exists`; an item with the same name from another npm package -> 409
|
|
69
|
+
* `catalog.name_conflict`; an extension named like a config-declared one -> 409.
|
|
70
|
+
*/
|
|
71
|
+
async importFile(principal, req) {
|
|
72
|
+
const actor = requireUser(principal);
|
|
73
|
+
const body = req.body;
|
|
74
|
+
if (!Buffer.isBuffer(body) || body.byteLength === 0) {
|
|
75
|
+
throw new ApiError("unsupported_media_type", "Send the plugin package (.tgz) as the request body with content-type application/octet-stream");
|
|
76
|
+
}
|
|
77
|
+
const r = await this.pluginImport.prepare(actor.account.id, new Uint8Array(body.buffer, body.byteOffset, body.byteLength), { kind: "file", ref: "upload" }, actorOpts(actor));
|
|
78
|
+
return { stagingId: r.stagingId, review: r.review };
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Prepares the import of a plugin from the configured npm registry (`version` may be a version, a
|
|
82
|
+
* dist-tag or a range, default latest; verified by `dist.integrity`), as `import/file`. Download
|
|
83
|
+
* failure -> 502.
|
|
84
|
+
*/
|
|
85
|
+
importNpm(principal, body) {
|
|
86
|
+
const actor = requireUser(principal);
|
|
87
|
+
return this.pluginImport.prepareNpm(actor.account.id, { package: body.package, ...(body.version !== undefined && { version: body.version }) }, actorOpts(actor));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Prepares the import of a plugin straight from git (a one-off: no marketplace is created and no
|
|
91
|
+
* updates are tracked): `url` is an https git URL or `owner/repo`, `ref` a branch / tag / commit
|
|
92
|
+
* (default the remote HEAD), `path` the plugin's directory in the repo (default the root). The
|
|
93
|
+
* commit is resolved and recorded with host, repo and path; then as `import/file`. Git failures:
|
|
94
|
+
* 502 `marketplace.git_failed`, 422 `marketplace.git_too_large` / `git_unsupported_entry`, 422
|
|
95
|
+
* `marketplace.private_address` / `marketplace.redirect`.
|
|
96
|
+
*/
|
|
97
|
+
importGit(principal, body) {
|
|
98
|
+
const actor = requireUser(principal);
|
|
99
|
+
return this.catalog.importFromGit(actor.account.id, {
|
|
100
|
+
url: body.url,
|
|
101
|
+
...(body.ref !== undefined && { ref: body.ref }),
|
|
102
|
+
...(body.path !== undefined && { path: body.path }),
|
|
103
|
+
}, actorOpts(actor));
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* A staged import's review `{ stagingId, review, permissionsMismatch? }` (the mismatch only for
|
|
107
|
+
* a marketplace import whose permission summary differs from the package; the web's import page
|
|
108
|
+
* loads `?staging=<id>` with it). Unknown, expired or already confirmed -> 404
|
|
109
|
+
* `plugin.staging_not_found`.
|
|
110
|
+
*/
|
|
111
|
+
staged(stagingId) {
|
|
112
|
+
return this.pluginImport.staged(stagingId);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Confirms a staged import: approves the plugin's extension when this import installs it (writes
|
|
116
|
+
* its snapshot) and creates the item or adds the version; with `deployExtension` it installs and
|
|
117
|
+
* enables the plugin's own extension after the commit and returns `{ item, deploy }`, where
|
|
118
|
+
* `deploy` says enabled / failed (+ code); a failed deploy does not make the committed import fail
|
|
119
|
+
* (retry from the extension admin by sha256). A foreseeable failure (a downgrade to a version with
|
|
120
|
+
* unrun migrations) is a 409 `extension.downgrade_unsupported` before anything is written.
|
|
121
|
+
* Staging missing or expired -> 404 `plugin.staging_not_found`; `reviewHash` differs or the
|
|
122
|
+
* extension on the deployment changed -> 409 `plugin.review_stale`. `pinnedSuggestions` (skill
|
|
123
|
+
* names of the review) replaces the plugin's suggested pinning; an unknown name -> 400
|
|
124
|
+
* `validation_failed`.
|
|
125
|
+
*/
|
|
126
|
+
confirm(principal, stagingId, body) {
|
|
127
|
+
const actor = requireUser(principal);
|
|
128
|
+
const { pinnedSuggestions, ...rest } = body;
|
|
129
|
+
return this.pluginImport.confirm(actor.account.id, stagingId, { ...rest, ...(pinnedSuggestions !== undefined && { pinnedSuggestions }) }, actorOpts(actor));
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* The item list (`includeDeleted=true` includes deleted items). Paging: `limit` (default 200, at
|
|
133
|
+
* most 1000) and `offset`; `nextOffset` is the next page's offset, null when there is none.
|
|
134
|
+
*/
|
|
135
|
+
list(q) {
|
|
136
|
+
return this.catalog.page({
|
|
137
|
+
includeDeleted: q.includeDeleted === "true",
|
|
138
|
+
...(q.limit !== undefined && { limit: q.limit }),
|
|
139
|
+
...(q.offset !== undefined && { offset: q.offset }),
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* 条目详情与各版本,另给出 `hasIcon`(最新版本有图标,`GET items/:id/icon` 可取);不存在 → 404
|
|
144
|
+
* `catalog.item_not_found`。
|
|
145
|
+
*/
|
|
146
|
+
async get(id) {
|
|
147
|
+
const detail = await this.catalog.get(id);
|
|
148
|
+
return { ...detail, hasIcon: await this.orgCatalog.hasIcon(id) };
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* The item's icon (disabled items included; same response headers as the org side, see
|
|
152
|
+
* `sendCatalogIcon`). No icon -> 404 `catalog.icon_not_found`.
|
|
153
|
+
*/
|
|
154
|
+
async icon(id, reply) {
|
|
155
|
+
await sendCatalogIcon(reply, await this.orgCatalog.icon(id, true));
|
|
156
|
+
}
|
|
157
|
+
/** 改策略(allow / needs_approval / disabled)。 */
|
|
158
|
+
setPolicy(principal, id, body) {
|
|
159
|
+
const actor = requireUser(principal);
|
|
160
|
+
return this.catalog.setPolicy(actor.account.id, id, body.policy, actorOpts(actor));
|
|
161
|
+
}
|
|
162
|
+
/** 删除条目(软删除,已安装的组件不受影响)。 */
|
|
163
|
+
async remove(principal, id) {
|
|
164
|
+
const actor = requireUser(principal);
|
|
165
|
+
await this.catalog.remove(actor.account.id, id, actorOpts(actor));
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Installs the extension of a version of an item on the deployment (a new install starts disabled;
|
|
169
|
+
* unapproved permissions still need approval). A version without an extension -> 409
|
|
170
|
+
* `catalog.no_extension`.
|
|
171
|
+
*/
|
|
172
|
+
installToDeployment(principal, id, body) {
|
|
173
|
+
const actor = requireUser(principal);
|
|
174
|
+
return this.catalog.installToDeployment(actor.account.id, id, body.version, actorOpts(actor));
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
__decorate([
|
|
178
|
+
Post("import/file"),
|
|
179
|
+
HttpCode(200),
|
|
180
|
+
__param(0, CurrentPrincipal()),
|
|
181
|
+
__param(1, Req())
|
|
182
|
+
], AdminCatalogController.prototype, "importFile", null);
|
|
183
|
+
__decorate([
|
|
184
|
+
Post("import/npm"),
|
|
185
|
+
HttpCode(200),
|
|
186
|
+
__param(0, CurrentPrincipal()),
|
|
187
|
+
__param(1, Body(new ZodPipe(NpmBody)))
|
|
188
|
+
], AdminCatalogController.prototype, "importNpm", null);
|
|
189
|
+
__decorate([
|
|
190
|
+
Post("import/git"),
|
|
191
|
+
HttpCode(200),
|
|
192
|
+
__param(0, CurrentPrincipal()),
|
|
193
|
+
__param(1, Body(new ZodPipe(GitBody)))
|
|
194
|
+
], AdminCatalogController.prototype, "importGit", null);
|
|
195
|
+
__decorate([
|
|
196
|
+
Get("imports/:stagingId"),
|
|
197
|
+
__param(0, Param("stagingId"))
|
|
198
|
+
], AdminCatalogController.prototype, "staged", null);
|
|
199
|
+
__decorate([
|
|
200
|
+
Post("imports/:stagingId/confirm"),
|
|
201
|
+
HttpCode(201),
|
|
202
|
+
__param(0, CurrentPrincipal()),
|
|
203
|
+
__param(1, Param("stagingId")),
|
|
204
|
+
__param(2, Body(new ZodPipe(ConfirmBody)))
|
|
205
|
+
], AdminCatalogController.prototype, "confirm", null);
|
|
206
|
+
__decorate([
|
|
207
|
+
Get("items"),
|
|
208
|
+
__param(0, Query(new ZodPipe(ListQuery)))
|
|
209
|
+
], AdminCatalogController.prototype, "list", null);
|
|
210
|
+
__decorate([
|
|
211
|
+
Get("items/:id"),
|
|
212
|
+
__param(0, Param("id"))
|
|
213
|
+
], AdminCatalogController.prototype, "get", null);
|
|
214
|
+
__decorate([
|
|
215
|
+
Get("items/:id/icon"),
|
|
216
|
+
__param(0, Param("id")),
|
|
217
|
+
__param(1, Res())
|
|
218
|
+
], AdminCatalogController.prototype, "icon", null);
|
|
219
|
+
__decorate([
|
|
220
|
+
Put("items/:id/policy"),
|
|
221
|
+
__param(0, CurrentPrincipal()),
|
|
222
|
+
__param(1, Param("id")),
|
|
223
|
+
__param(2, Body(new ZodPipe(PolicyBody)))
|
|
224
|
+
], AdminCatalogController.prototype, "setPolicy", null);
|
|
225
|
+
__decorate([
|
|
226
|
+
Delete("items/:id"),
|
|
227
|
+
HttpCode(204),
|
|
228
|
+
__param(0, CurrentPrincipal()),
|
|
229
|
+
__param(1, Param("id"))
|
|
230
|
+
], AdminCatalogController.prototype, "remove", null);
|
|
231
|
+
__decorate([
|
|
232
|
+
Post("items/:id/install-deployment"),
|
|
233
|
+
HttpCode(200),
|
|
234
|
+
__param(0, CurrentPrincipal()),
|
|
235
|
+
__param(1, Param("id")),
|
|
236
|
+
__param(2, Body(new ZodPipe(InstallBody)))
|
|
237
|
+
], AdminCatalogController.prototype, "installToDeployment", null);
|
|
238
|
+
AdminCatalogController = __decorate([
|
|
239
|
+
Controller("api/v1/admin/catalog"),
|
|
240
|
+
EnterpriseAdmin(),
|
|
241
|
+
__param(0, Inject(CATALOG)),
|
|
242
|
+
__param(1, Inject(PLUGIN_IMPORT)),
|
|
243
|
+
__param(2, Inject(ORG_CATALOG))
|
|
244
|
+
], AdminCatalogController);
|
|
245
|
+
export { AdminCatalogController };
|