@capybara-hq/kernel 0.1.0-rc.4 → 0.1.0-rc.6
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/bootstrap.json +61 -5
- package/dist/admin/admin.controller.d.ts +51 -14
- package/dist/admin/admin.controller.js +60 -19
- package/dist/admin/extensions.controller.d.ts +16 -2
- package/dist/admin/extensions.controller.js +26 -6
- package/dist/admin/setup-lock.d.ts +1 -1
- package/dist/admin/setup-lock.js +1 -1
- package/dist/admin/setup.controller.d.ts +1 -1
- package/dist/admin/setup.controller.js +1 -1
- package/dist/admin/setup.service.d.ts +4 -4
- package/dist/admin/setup.service.js +8 -8
- package/dist/agents/agent-lookup.d.ts +16 -0
- package/dist/agents/agent-lookup.js +11 -0
- package/dist/agents/agents.controller.d.ts +76 -1
- package/dist/agents/agents.controller.js +90 -11
- package/dist/agents/agents.module.d.ts +4 -1
- package/dist/agents/agents.module.js +32 -6
- package/dist/agents/agents.service.d.ts +54 -23
- package/dist/agents/agents.service.js +180 -76
- package/dist/agents/definition.d.ts +49 -0
- package/dist/agents/definition.js +45 -0
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +649 -0
- package/dist/agents/from-template.service.d.ts +60 -0
- package/dist/agents/from-template.service.js +161 -0
- package/dist/agents/models.controller.d.ts +34 -5
- package/dist/agents/models.controller.js +50 -6
- package/dist/agents/org-templates.d.ts +176 -0
- package/dist/agents/org-templates.js +827 -0
- package/dist/agents/pending-connector-requests.d.ts +77 -0
- package/dist/agents/pending-connector-requests.js +215 -0
- package/dist/agents/pending-connectors.controller.d.ts +39 -0
- package/dist/agents/pending-connectors.controller.js +91 -0
- package/dist/agents/pending-connectors.service.d.ts +62 -0
- package/dist/agents/pending-connectors.service.js +282 -0
- package/dist/agents/readiness.controller.d.ts +5 -5
- package/dist/agents/readiness.controller.js +6 -6
- package/dist/agents/templates.controller.d.ts +86 -5
- package/dist/agents/templates.controller.js +171 -7
- package/dist/agents/templates.d.ts +127 -23
- package/dist/agents/templates.js +475 -52
- package/dist/background/background.module.js +8 -1
- package/dist/background/finish.d.ts +3 -2
- package/dist/background/launch-lock.d.ts +4 -3
- package/dist/background/launch-lock.js +4 -3
- package/dist/background/poll.job.d.ts +9 -6
- package/dist/background/poll.job.js +30 -22
- package/dist/background/session.d.ts +13 -2
- package/dist/background/session.js +13 -0
- package/dist/background/stop.d.ts +12 -6
- package/dist/background/stop.js +57 -39
- package/dist/background/store.d.ts +18 -6
- package/dist/background/store.js +12 -6
- package/dist/background/tasks.service.d.ts +15 -5
- package/dist/background/tasks.service.js +42 -17
- package/dist/background/wake-rules.d.ts +27 -18
- package/dist/background/wake-rules.js +52 -22
- package/dist/background/wake.d.ts +13 -11
- package/dist/background/wake.js +20 -14
- package/dist/catalog/admin-catalog.controller.d.ts +129 -30
- package/dist/catalog/admin-catalog.controller.js +213 -42
- package/dist/catalog/catalog-content.d.ts +58 -32
- package/dist/catalog/catalog-content.js +34 -8
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +60 -0
- package/dist/catalog/catalog-items.d.ts +111 -7
- package/dist/catalog/catalog-items.js +279 -13
- package/dist/catalog/catalog-scope.service.d.ts +260 -0
- package/dist/catalog/catalog-scope.service.js +1116 -0
- package/dist/catalog/catalog.module.d.ts +7 -9
- package/dist/catalog/catalog.module.js +41 -31
- package/dist/catalog/catalog.service.d.ts +101 -29
- package/dist/catalog/catalog.service.js +104 -106
- package/dist/catalog/cli.d.ts +11 -1
- package/dist/catalog/cli.js +26 -1
- package/dist/catalog/component-promotion.d.ts +96 -0
- package/dist/catalog/component-promotion.js +395 -0
- package/dist/catalog/component-scope.controller.d.ts +152 -0
- package/dist/catalog/component-scope.controller.js +287 -0
- package/dist/catalog/component-scope.service.d.ts +303 -0
- package/dist/catalog/component-scope.service.js +936 -0
- package/dist/catalog/component-state.d.ts +174 -0
- package/dist/catalog/component-state.js +437 -0
- package/dist/catalog/job-ids.d.ts +30 -0
- package/dist/catalog/job-ids.js +25 -0
- package/dist/catalog/marketplace-fetch.d.ts +1 -1
- package/dist/catalog/marketplaces.controller.d.ts +22 -5
- package/dist/catalog/marketplaces.controller.js +56 -7
- package/dist/catalog/marketplaces.service.d.ts +54 -14
- package/dist/catalog/marketplaces.service.js +71 -22
- package/dist/catalog/org-catalog.controller.d.ts +125 -34
- package/dist/catalog/org-catalog.controller.js +181 -65
- package/dist/catalog/org-catalog.service.d.ts +65 -33
- package/dist/catalog/org-catalog.service.js +324 -157
- package/dist/catalog/org-extension-switch.d.ts +41 -0
- package/dist/catalog/org-extension-switch.js +115 -0
- package/dist/catalog/org-extension.controller.d.ts +119 -0
- package/dist/catalog/org-extension.controller.js +266 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
- package/dist/catalog/org-plugin-uploads.controller.js +213 -0
- package/dist/catalog/org-plugin-uploads.d.ts +63 -0
- package/dist/catalog/org-plugin-uploads.js +116 -0
- package/dist/catalog/owned-items.d.ts +184 -0
- package/dist/catalog/owned-items.js +789 -0
- package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
- package/dist/catalog/owned-plugin-cleanup.js +194 -0
- package/dist/catalog/ownership.d.ts +172 -0
- package/dist/catalog/ownership.js +326 -0
- package/dist/catalog/platform-components.d.ts +221 -0
- package/dist/catalog/platform-components.js +761 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +582 -0
- package/dist/catalog/plugin-import.d.ts +178 -34
- package/dist/catalog/plugin-import.js +622 -82
- package/dist/catalog/plugin-install.d.ts +185 -41
- package/dist/catalog/plugin-install.js +758 -126
- package/dist/catalog/plugin-upgrade.d.ts +260 -225
- package/dist/catalog/plugin-upgrade.js +1147 -1136
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +193 -118
- package/dist/catalog/requests.service.js +526 -343
- package/dist/catalog/reserved-names.d.ts +8 -0
- package/dist/catalog/reserved-names.js +42 -0
- package/dist/catalog/scope-orgs.d.ts +21 -0
- package/dist/catalog/scope-orgs.js +67 -0
- package/dist/catalog/scope-state.d.ts +35 -0
- package/dist/catalog/scope-state.js +87 -0
- package/dist/catalog/scope-sync-workers.d.ts +7 -0
- package/dist/catalog/scope-sync-workers.js +29 -0
- package/dist/catalog/scope-sync.d.ts +176 -0
- package/dist/catalog/scope-sync.js +576 -0
- package/dist/catalog/scope.d.ts +42 -0
- package/dist/catalog/scope.js +42 -0
- package/dist/catalog/unshare.d.ts +22 -0
- package/dist/catalog/unshare.js +118 -0
- package/dist/channels/actions.js +1 -0
- package/dist/channels/cards.js +20 -2
- package/dist/channels/channels.module.js +2 -0
- package/dist/channels/inbound.d.ts +9 -1
- package/dist/channels/inbound.js +67 -5
- package/dist/channels/phrases.d.ts +35 -0
- package/dist/channels/phrases.js +29 -0
- package/dist/config/docs.js +3 -1
- package/dist/config/schema.d.ts +10 -2
- package/dist/config/schema.js +70 -22
- package/dist/conversations/access.d.ts +6 -4
- package/dist/conversations/access.js +27 -5
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/conversations.controller.d.ts +43 -18
- package/dist/conversations/conversations.controller.js +79 -38
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +7 -7
- package/dist/conversations/conversations.service.d.ts +73 -15
- package/dist/conversations/conversations.service.js +115 -35
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +20 -5
- package/dist/conversations/event-log.js +60 -0
- package/dist/conversations/events.d.ts +84 -2
- package/dist/conversations/events.js +91 -17
- package/dist/conversations/queue.service.d.ts +1 -1
- package/dist/conversations/queue.service.js +5 -0
- package/dist/conversations/titles.d.ts +5 -3
- package/dist/conversations/titles.js +21 -8
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/create-ctx.d.ts +20 -1
- package/dist/ctx/create-ctx.js +38 -7
- package/dist/db/kernel-schema.d.ts +386 -18
- package/dist/environments/access.d.ts +41 -0
- package/dist/environments/access.js +77 -0
- package/dist/environments/conversation-environments.d.ts +61 -0
- package/dist/environments/conversation-environments.js +170 -0
- package/dist/environments/dto.d.ts +25 -0
- package/dist/environments/dto.js +12 -0
- package/dist/environments/environments.controller.d.ts +33 -0
- package/dist/environments/environments.controller.js +110 -0
- package/dist/environments/environments.module.d.ts +8 -0
- package/dist/environments/environments.module.js +27 -0
- package/dist/environments/environments.service.d.ts +153 -0
- package/dist/environments/environments.service.js +541 -0
- package/dist/environments/legacy-cleanup.job.d.ts +34 -0
- package/dist/environments/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +85 -2
- package/dist/errors.js +85 -2
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +26 -7
- package/dist/evals/run-replay.d.ts +4 -2
- package/dist/evals/run-replay.js +20 -6
- package/dist/evals/runs.service.d.ts +2 -1
- package/dist/evals/runs.service.js +13 -12
- package/dist/evals/step-replay.d.ts +4 -6
- package/dist/evals/step-replay.js +4 -3
- package/dist/evals/trajectory.service.d.ts +8 -3
- package/dist/evals/trajectory.service.js +26 -14
- package/dist/evals/worker.d.ts +5 -5
- package/dist/evals/worker.js +9 -3
- package/dist/extensions/admin-ops.d.ts +36 -10
- package/dist/extensions/admin-ops.js +65 -42
- package/dist/extensions/admin-view.d.ts +37 -10
- package/dist/extensions/admin-view.js +103 -20
- package/dist/extensions/bootstrap.d.ts +17 -4
- package/dist/extensions/bootstrap.js +70 -9
- package/dist/extensions/cli.d.ts +12 -0
- package/dist/extensions/cli.js +11 -2
- package/dist/extensions/config-hash.d.ts +10 -0
- package/dist/extensions/config-hash.js +38 -0
- package/dist/extensions/deployment-config.d.ts +28 -5
- package/dist/extensions/deployment-config.js +48 -7
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/extensions.module.js +11 -11
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +24 -10
- package/dist/extensions/host.js +49 -54
- package/dist/extensions/installs.d.ts +20 -8
- package/dist/extensions/installs.js +37 -15
- package/dist/extensions/org-config.d.ts +75 -6
- package/dist/extensions/org-config.js +184 -32
- package/dist/extensions/org-levels.d.ts +37 -0
- package/dist/extensions/org-levels.js +71 -0
- package/dist/extensions/org-overrides.d.ts +151 -0
- package/dist/extensions/org-overrides.js +524 -0
- package/dist/extensions/permission-view.d.ts +16 -4
- package/dist/extensions/permission-view.js +4 -4
- package/dist/extensions/plugin-items.d.ts +21 -0
- package/dist/extensions/plugin-items.js +42 -0
- package/dist/extensions/point-defaults.d.ts +12 -5
- package/dist/extensions/point-defaults.js +37 -9
- package/dist/extensions/resolve.d.ts +5 -1
- package/dist/extensions/resolve.js +15 -2
- package/dist/extensions/state.module.d.ts +9 -0
- package/dist/extensions/state.module.js +38 -0
- package/dist/files/previewers.d.ts +8 -1
- package/dist/files/previewers.js +35 -6
- package/dist/http/api.module.js +25 -3
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/http/plugin-dispatch.d.ts +4 -1
- package/dist/http/plugin-dispatch.js +14 -2
- package/dist/identity/accounts.d.ts +29 -29
- package/dist/identity/accounts.js +47 -47
- package/dist/identity/audit.d.ts +2 -1
- package/dist/identity/auth.guard.d.ts +13 -5
- package/dist/identity/auth.guard.js +26 -9
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +4 -4
- package/dist/identity/me.controller.js +1 -1
- package/dist/identity/principal.d.ts +3 -3
- package/dist/identity/principal.js +3 -3
- package/dist/identity/settings.d.ts +22 -11
- package/dist/identity/settings.js +53 -18
- package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
- package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
- package/dist/inbox/inbox.module.d.ts +4 -1
- package/dist/inbox/inbox.module.js +7 -3
- package/dist/inbox/inbox.service.d.ts +62 -3
- package/dist/inbox/inbox.service.js +74 -4
- package/dist/inbox/org-notices.d.ts +63 -0
- package/dist/inbox/org-notices.js +91 -0
- package/dist/inbox/platform-inbox.controller.d.ts +23 -0
- package/dist/inbox/platform-inbox.controller.js +58 -0
- package/dist/inbox/platform-inbox.service.d.ts +151 -0
- package/dist/inbox/platform-inbox.service.js +263 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +24 -1
- package/dist/infra/database/xact-lock.d.ts +1 -1
- package/dist/infra/database/xact-lock.js +1 -1
- package/dist/infra/events/kernel-events.d.ts +19 -2
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/kernel.module.js +6 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
- package/dist/lifecycle/kernel-lifecycle.js +4 -4
- package/dist/models/embeddings.d.ts +82 -0
- package/dist/models/embeddings.js +326 -0
- package/dist/models/enablement.controller.d.ts +40 -0
- package/dist/models/enablement.controller.js +74 -0
- package/dist/models/enablement.d.ts +99 -0
- package/dist/models/enablement.js +263 -0
- package/dist/models/models.module.d.ts +5 -1
- package/dist/models/models.module.js +16 -4
- package/dist/models/prices.d.ts +5 -5
- package/dist/models/prices.js +4 -4
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +13 -7
- package/dist/models/purposes.d.ts +37 -12
- package/dist/models/purposes.js +63 -17
- package/dist/orgs/directory-sync.d.ts +14 -5
- package/dist/orgs/directory-sync.js +41 -17
- package/dist/orgs/offboarding.d.ts +9 -7
- package/dist/orgs/offboarding.js +28 -17
- package/dist/orgs/org-lock.d.ts +5 -0
- package/dist/orgs/org-lock.js +13 -0
- package/dist/orgs/org.guard.d.ts +10 -0
- package/dist/orgs/org.guard.js +43 -32
- package/dist/orgs/orgs.module.js +3 -0
- package/dist/orgs/orgs.service.d.ts +20 -7
- package/dist/orgs/orgs.service.js +32 -12
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.service.d.ts +15 -3
- package/dist/orgs/settings.service.js +6 -2
- package/dist/overrides.d.ts +3 -0
- package/dist/overrides.js +2 -0
- package/dist/platform/actor.d.ts +48 -0
- package/dist/platform/actor.js +100 -0
- package/dist/platform/agent-docs.d.ts +18 -0
- package/dist/platform/agent-docs.js +59 -0
- package/dist/platform/availability.d.ts +14 -0
- package/dist/platform/availability.js +43 -0
- package/dist/platform/errors.d.ts +11 -0
- package/dist/platform/errors.js +26 -0
- package/dist/platform/exclusions.d.ts +12 -0
- package/dist/platform/exclusions.js +1405 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +92 -0
- package/dist/platform/operation.js +35 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
- package/dist/platform/ops/agent-templates.ops.js +92 -0
- package/dist/platform/ops/agents.ops.d.ts +19 -0
- package/dist/platform/ops/agents.ops.js +294 -0
- package/dist/platform/ops/connectors.ops.d.ts +15 -0
- package/dist/platform/ops/connectors.ops.js +126 -0
- package/dist/platform/ops/errors.d.ts +11 -0
- package/dist/platform/ops/errors.js +22 -0
- package/dist/platform/ops/extensions.ops.d.ts +19 -0
- package/dist/platform/ops/extensions.ops.js +116 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
- package/dist/platform/ops/marketplaces.ops.js +157 -0
- package/dist/platform/ops/paging.d.ts +14 -0
- package/dist/platform/ops/paging.js +20 -0
- package/dist/platform/ops/platform.ops.d.ts +23 -0
- package/dist/platform/ops/platform.ops.js +158 -0
- package/dist/platform/ops/plugins.ops.d.ts +33 -0
- package/dist/platform/ops/plugins.ops.js +377 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +153 -0
- package/dist/platform/ops/role.d.ts +4 -0
- package/dist/platform/ops/role.js +10 -0
- package/dist/platform/ops/skills.ops.d.ts +13 -0
- package/dist/platform/ops/skills.ops.js +98 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/platform-ops.module.d.ts +7 -0
- package/dist/platform/platform-ops.module.js +55 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/redact-orgs.d.ts +7 -0
- package/dist/platform/redact-orgs.js +52 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/roles/worker-role.d.ts +6 -4
- package/dist/roles/worker-role.js +14 -7
- package/dist/roles/worker.module.d.ts +1 -1
- package/dist/roles/worker.module.js +9 -1
- package/dist/runtime/context/build.d.ts +6 -4
- package/dist/runtime/context/build.js +26 -7
- package/dist/runtime/context/claude-tools.d.ts +2 -1
- package/dist/runtime/context/claude-tools.js +5 -4
- package/dist/runtime/context/compaction.js +9 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/skills.js +9 -2
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/hook-calls.d.ts +8 -1
- package/dist/runtime/hook-calls.js +40 -7
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +35 -17
- package/dist/runtime/loop.d.ts +32 -4
- package/dist/runtime/maintenance.d.ts +7 -4
- package/dist/runtime/maintenance.js +23 -8
- package/dist/runtime/model-call.d.ts +38 -11
- package/dist/runtime/model-call.js +97 -24
- package/dist/runtime/providers.d.ts +146 -32
- package/dist/runtime/providers.js +321 -67
- package/dist/runtime/run-control.d.ts +11 -1
- package/dist/runtime/run-control.js +12 -0
- package/dist/runtime/run-drafts.d.ts +85 -0
- package/dist/runtime/run-drafts.js +230 -0
- package/dist/runtime/run-jobs.d.ts +3 -5
- package/dist/runtime/run-jobs.js +3 -7
- package/dist/runtime/run-queue.d.ts +37 -3
- package/dist/runtime/run-queue.js +188 -11
- package/dist/runtime/run-worker.d.ts +12 -6
- package/dist/runtime/run-worker.js +58 -35
- package/dist/runtime/runtime.module.js +3 -0
- package/dist/runtime/step-log.d.ts +9 -4
- package/dist/runtime/step-log.js +8 -5
- package/dist/runtime/stream.controller.d.ts +23 -1
- package/dist/runtime/stream.controller.js +60 -3
- package/dist/runtime/stream.d.ts +4 -1
- package/dist/runtime/stream.js +27 -3
- package/dist/runtime/subagents/child.d.ts +55 -7
- package/dist/runtime/subagents/child.js +105 -7
- package/dist/runtime/subagents/definition.d.ts +12 -3
- package/dist/runtime/subagents/definition.js +46 -32
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +115 -26
- package/dist/runtime/subagents/dispatch.js +212 -141
- package/dist/runtime/subagents/limits.d.ts +24 -5
- package/dist/runtime/subagents/limits.js +40 -6
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +8 -6
- package/dist/runtime/subagents/progress.js +11 -6
- package/dist/runtime/subagents/render.d.ts +30 -0
- package/dist/runtime/subagents/render.js +53 -0
- package/dist/runtime/subagents/roster.d.ts +24 -7
- package/dist/runtime/subagents/roster.js +47 -11
- package/dist/runtime/subagents/skill-fork.d.ts +3 -2
- package/dist/runtime/subagents/skill-fork.js +8 -4
- package/dist/runtime/subagents/status.d.ts +14 -0
- package/dist/runtime/subagents/status.js +23 -0
- package/dist/runtime/subagents/subagents.service.d.ts +7 -4
- package/dist/runtime/subagents/subagents.service.js +11 -6
- package/dist/runtime/usage-report-jobs.d.ts +88 -0
- package/dist/runtime/usage-report-jobs.js +158 -0
- package/dist/runtime/usage-report.d.ts +33 -38
- package/dist/runtime/usage-report.js +169 -96
- package/dist/runtime/waits.d.ts +140 -37
- package/dist/runtime/waits.js +394 -106
- package/dist/sandbox/jobs.d.ts +40 -13
- package/dist/sandbox/jobs.js +57 -20
- package/dist/sandbox/leases.d.ts +37 -54
- package/dist/sandbox/leases.js +71 -115
- package/dist/sandbox/providers.d.ts +2 -2
- package/dist/sandbox/providers.js +1 -1
- package/dist/sandbox/sandbox.module.d.ts +3 -2
- package/dist/sandbox/sandbox.module.js +4 -3
- package/dist/sandbox/sandbox.service.d.ts +229 -134
- package/dist/sandbox/sandbox.service.js +630 -409
- package/dist/skills/catalog.d.ts +3 -2
- package/dist/skills/catalog.js +21 -43
- package/dist/skills/changes.controller.d.ts +7 -0
- package/dist/skills/changes.controller.js +19 -1
- package/dist/skills/invoke.js +8 -3
- package/dist/skills/package.d.ts +20 -1
- package/dist/skills/package.js +28 -1
- package/dist/skills/skills.controller.d.ts +39 -4
- package/dist/skills/skills.controller.js +88 -10
- package/dist/skills/skills.module.js +10 -1
- package/dist/skills/skills.service.d.ts +106 -26
- package/dist/skills/skills.service.js +421 -75
- package/dist/skills/usable.d.ts +81 -0
- package/dist/skills/usable.js +379 -0
- package/dist/tools/approvals.service.d.ts +20 -2
- package/dist/tools/approvals.service.js +23 -4
- package/dist/tools/builtin-names.d.ts +21 -5
- package/dist/tools/builtin-names.js +30 -5
- package/dist/tools/builtins/agent.d.ts +23 -21
- package/dist/tools/builtins/agent.js +62 -55
- package/dist/tools/builtins/builtin-tools.d.ts +6 -2
- package/dist/tools/builtins/builtin-tools.js +37 -12
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +34 -0
- package/dist/tools/builtins/platform.js +362 -0
- package/dist/tools/builtins/sandbox/bash.js +13 -3
- package/dist/tools/builtins/sandbox/common.d.ts +43 -24
- package/dist/tools/builtins/sandbox/common.js +80 -45
- package/dist/tools/builtins/sandbox/edit.js +2 -2
- package/dist/tools/builtins/sandbox/glob.js +2 -2
- package/dist/tools/builtins/sandbox/grep.js +2 -4
- package/dist/tools/builtins/sandbox/index.d.ts +1 -1
- package/dist/tools/builtins/sandbox/index.js +1 -1
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/task-output.d.ts +14 -3
- package/dist/tools/builtins/sandbox/task-output.js +30 -5
- package/dist/tools/builtins/sandbox/task-stop.js +2 -1
- package/dist/tools/builtins/sandbox/write.js +2 -2
- package/dist/tools/builtins/send-message.d.ts +56 -0
- package/dist/tools/builtins/send-message.js +100 -0
- package/dist/tools/builtins/skill-load.d.ts +22 -14
- package/dist/tools/builtins/skill-load.js +86 -57
- package/dist/tools/builtins/skill-write.js +1 -1
- package/dist/tools/builtins/web/extract.js +5 -1
- package/dist/tools/builtins/web/fetch.js +1 -0
- package/dist/tools/builtins/web/search.js +1 -0
- package/dist/tools/connectors.controller.d.ts +10 -0
- package/dist/tools/connectors.controller.js +12 -0
- package/dist/tools/connectors.service.d.ts +46 -5
- package/dist/tools/connectors.service.js +94 -15
- package/dist/tools/extension-tools.controller.d.ts +14 -0
- package/dist/tools/extension-tools.controller.js +37 -0
- package/dist/tools/info.d.ts +42 -1
- package/dist/tools/info.js +64 -1
- package/dist/tools/org-tool-switches.d.ts +74 -0
- package/dist/tools/org-tool-switches.js +184 -0
- package/dist/tools/pipeline.d.ts +46 -40
- package/dist/tools/pipeline.js +193 -364
- package/dist/tools/policy.d.ts +1 -1
- package/dist/tools/policy.js +36 -16
- package/dist/tools/registry.d.ts +98 -5
- package/dist/tools/registry.js +87 -9
- package/dist/tools/tools.module.js +12 -2
- package/dist/ui/views.d.ts +2 -1
- package/dist/ui/views.js +17 -3
- package/package.json +3 -3
- package/src/migrations/0074_subagent_tree.sql +50 -0
- package/src/migrations/0075_plugin_scope.sql +61 -0
- package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
- package/src/migrations/0077_scope_requests.sql +52 -0
- package/src/migrations/0078_scope_grant_switches.sql +18 -0
- package/src/migrations/0079_scope_live_install_switches.sql +19 -0
- package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
- package/src/migrations/0081_platform_components.sql +129 -0
- package/src/migrations/0082_platform_migration.sql +33 -0
- package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
- package/src/migrations/0084_org_owned_items.sql +85 -0
- package/src/migrations/0085_agent_templates_phase4.sql +45 -0
- package/src/migrations/0086_org_layering.sql +30 -0
- package/src/migrations/0087_approval_summary.sql +6 -0
- package/src/migrations/0088_environments.sql +80 -0
- package/src/migrations/0089_model_kinds_usage.sql +38 -0
- package/dist/catalog/upgrade-targets.d.ts +0 -56
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -24
- package/dist/conversations/sandbox-status.js +0 -52
- package/dist/extensions/org-config.controller.d.ts +0 -32
- package/dist/extensions/org-config.controller.js +0 -70
|
@@ -10,13 +10,15 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
10
10
|
import { Controller, Delete, Get, HttpCode, Inject, Param, Post, Put, Req, Res, } from "@nestjs/common";
|
|
11
11
|
import { z } from "zod";
|
|
12
12
|
import { ApiError } from "../errors.js";
|
|
13
|
-
import { CurrentPrincipal,
|
|
13
|
+
import { CurrentPrincipal, patTokenId, requireUser, SuperAdmin, } from "../identity/principal.js";
|
|
14
14
|
import { createZodDto } from "../infra/validation/create-zod-dto.js";
|
|
15
15
|
import { ZBody, ZQuery } from "../infra/validation/zod-params.js";
|
|
16
16
|
import { CATALOG_LIST_MAX_LIMIT, CatalogService, } from "./catalog.service.js";
|
|
17
|
+
import { CatalogScopeService } from "./catalog-scope.service.js";
|
|
17
18
|
import { sendCatalogIcon } from "./org-catalog.controller.js";
|
|
18
19
|
import { OrgCatalogService } from "./org-catalog.service.js";
|
|
19
20
|
import { PluginImport } from "./plugin-import.js";
|
|
21
|
+
import { PlatformPluginUpdater, } from "./plugin-upgrade.js";
|
|
20
22
|
const NpmBody = z.object({
|
|
21
23
|
package: z.string().min(1).max(214),
|
|
22
24
|
version: z.string().min(1).max(256).optional(),
|
|
@@ -28,19 +30,46 @@ const GitBody = z
|
|
|
28
30
|
path: z.string().min(1).max(512).optional(),
|
|
29
31
|
})
|
|
30
32
|
.strict();
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
const Scope = z.enum(["all", "optional", "named"]);
|
|
34
|
+
const Orgs = z.array(z.string().min(1).max(128)).max(1000);
|
|
35
|
+
const Hash = z.string().min(1).max(128);
|
|
36
|
+
const ConfirmBody = z
|
|
37
|
+
.object({
|
|
38
|
+
reviewHash: Hash,
|
|
39
|
+
/** The new item's scope (default `optional`); `orgs` only with `named`. */
|
|
40
|
+
scope: Scope.optional(),
|
|
41
|
+
orgs: Orgs.optional(),
|
|
36
42
|
/** Skill names suggested as pinned (spec §9.1); omitted keeps the plugin's flags. */
|
|
37
43
|
pinnedSuggestions: z.array(z.string().min(1).max(64)).max(50).optional(),
|
|
44
|
+
})
|
|
45
|
+
.strict();
|
|
46
|
+
/** `{ scope, orgs? }` (a scope change) or `{ disabled: true }` (a disable), not both. */
|
|
47
|
+
const ScopePreviewBody = z
|
|
48
|
+
.object({ scope: Scope.optional(), orgs: Orgs.optional(), disabled: z.literal(true).optional() })
|
|
49
|
+
.strict()
|
|
50
|
+
.refine((b) => (b.disabled === true) !== (b.scope !== undefined), {
|
|
51
|
+
message: "send either scope (with orgs for named) or disabled: true",
|
|
52
|
+
})
|
|
53
|
+
.refine((b) => b.disabled === undefined || b.orgs === undefined, {
|
|
54
|
+
message: "orgs: only allowed with scope named",
|
|
55
|
+
path: ["orgs"],
|
|
38
56
|
});
|
|
57
|
+
const ScopeBody = z.object({ scope: Scope, orgs: Orgs.optional(), scopeHash: Hash }).strict();
|
|
58
|
+
const DisabledBody = z.object({ disabled: z.boolean(), scopeHash: Hash.optional() }).strict();
|
|
59
|
+
const ShownBody = z.object({ shownToOthers: z.boolean() }).strict();
|
|
39
60
|
const ListQuery = z.object({
|
|
40
61
|
includeDeleted: z.enum(["true", "false"]).optional(),
|
|
41
62
|
limit: z.coerce.number().int().min(1).max(CATALOG_LIST_MAX_LIMIT).optional(),
|
|
42
63
|
offset: z.coerce.number().int().min(0).max(1_000_000).optional(),
|
|
64
|
+
/** `true`: only the items waiting for a permission confirmation (not paged). */
|
|
65
|
+
pending: z.enum(["true", "false"]).optional(),
|
|
43
66
|
});
|
|
67
|
+
const ConfirmPermissionsBody = z.object({ permissionsHash: Hash }).strict();
|
|
68
|
+
/** The reason shown to the owner org in its `upload_rejected` notice (optional). */
|
|
69
|
+
const RejectBody = z.object({ reason: z.string().trim().min(1).max(1000).optional() }).strict();
|
|
70
|
+
const Version = z.string().min(1).max(256);
|
|
71
|
+
const UpdatePreviewBody = z.object({ version: Version }).strict();
|
|
72
|
+
const UpdateBody = z.object({ version: Version, diffHash: Hash }).strict();
|
|
44
73
|
const actorOpts = (actor) => {
|
|
45
74
|
const tokenId = patTokenId(actor);
|
|
46
75
|
return tokenId !== undefined ? { actorTokenId: tokenId } : {};
|
|
@@ -49,28 +78,44 @@ class CatalogImportConfirmBody extends createZodDto(ConfirmBody, "CatalogImportC
|
|
|
49
78
|
}
|
|
50
79
|
class CatalogGitImportBody extends createZodDto(GitBody, "CatalogGitImportBody") {
|
|
51
80
|
}
|
|
52
|
-
class CatalogDeploymentInstallBody extends createZodDto(InstallBody, "CatalogDeploymentInstallBody") {
|
|
53
|
-
}
|
|
54
81
|
class CatalogItemsQuery extends createZodDto(ListQuery, "CatalogItemsQuery") {
|
|
55
82
|
}
|
|
56
83
|
class CatalogNpmImportBody extends createZodDto(NpmBody, "CatalogNpmImportBody") {
|
|
57
84
|
}
|
|
58
|
-
class
|
|
85
|
+
class CatalogScopePreviewBody extends createZodDto(ScopePreviewBody, "CatalogScopePreviewBody") {
|
|
86
|
+
}
|
|
87
|
+
class CatalogScopeBody extends createZodDto(ScopeBody, "CatalogScopeBody") {
|
|
88
|
+
}
|
|
89
|
+
class CatalogConfirmPermissionsBody extends createZodDto(ConfirmPermissionsBody, "CatalogConfirmPermissionsBody") {
|
|
90
|
+
}
|
|
91
|
+
class CatalogShownBody extends createZodDto(ShownBody, "CatalogShownBody") {
|
|
92
|
+
}
|
|
93
|
+
class CatalogRejectBody extends createZodDto(RejectBody, "CatalogRejectBody") {
|
|
94
|
+
}
|
|
95
|
+
class CatalogDisabledBody extends createZodDto(DisabledBody, "CatalogDisabledBody") {
|
|
96
|
+
}
|
|
97
|
+
class CatalogUpdatePreviewBody extends createZodDto(UpdatePreviewBody, "CatalogUpdatePreviewBody") {
|
|
98
|
+
}
|
|
99
|
+
class CatalogUpdateBody extends createZodDto(UpdateBody, "CatalogUpdateBody") {
|
|
59
100
|
}
|
|
60
101
|
/**
|
|
61
|
-
* The
|
|
62
|
-
* prepare, then confirm), the item list and detail,
|
|
63
|
-
*
|
|
102
|
+
* The platform catalog (`/api/v1/admin/catalog/*`, super admins): plugin import (upload / npm
|
|
103
|
+
* prepare, then confirm, which installs the plugin's extension), the item list and detail, scope and
|
|
104
|
+
* disable (previewed, then confirmed with `scopeHash`), delete. Writes re-check the super admin inside the service's lock and are
|
|
64
105
|
* audited.
|
|
65
106
|
*/
|
|
66
107
|
let AdminCatalogController = class AdminCatalogController {
|
|
67
108
|
catalog;
|
|
68
109
|
pluginImport;
|
|
69
110
|
orgCatalog;
|
|
70
|
-
|
|
111
|
+
scope;
|
|
112
|
+
updater;
|
|
113
|
+
constructor(catalog, pluginImport, orgCatalog, scope, updater) {
|
|
71
114
|
this.catalog = catalog;
|
|
72
115
|
this.pluginImport = pluginImport;
|
|
73
116
|
this.orgCatalog = orgCatalog;
|
|
117
|
+
this.scope = scope;
|
|
118
|
+
this.updater = updater;
|
|
74
119
|
}
|
|
75
120
|
/**
|
|
76
121
|
* Prepares the import of an uploaded plugin (an npm-pack tgz as the raw body,
|
|
@@ -126,11 +171,13 @@ let AdminCatalogController = class AdminCatalogController {
|
|
|
126
171
|
return this.pluginImport.staged(stagingId);
|
|
127
172
|
}
|
|
128
173
|
/**
|
|
129
|
-
* Confirms a staged import: approves the plugin's extension when this import installs
|
|
130
|
-
* its snapshot)
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
174
|
+
* Confirms a staged import: approves the plugin's extension when this import installs or upgrades
|
|
175
|
+
* it (writes its snapshot), creates the item (with `scope`, default `optional`; `orgs` only with
|
|
176
|
+
* `named`, each an existing org, else 400 `validation_failed`) or adds the version, installs and
|
|
177
|
+
* enables the plugin's own extension after the commit and enqueues the item's scope sync; returns
|
|
178
|
+
* `{ item, deploy }`, where `deploy` says enabled / failed (+ code), null without an extension to
|
|
179
|
+
* deploy; a failed deploy does not make the committed import fail (retry from the extension admin
|
|
180
|
+
* by sha256). An unknown field (the removed `deployExtension`) -> 400 `validation_failed`. A foreseeable failure (a downgrade to a version with
|
|
134
181
|
* unrun migrations) is a 409 `extension.downgrade_unsupported` before anything is written.
|
|
135
182
|
* Staging missing or expired -> 404 `plugin.staging_not_found`; `reviewHash` differs or the
|
|
136
183
|
* extension on the deployment changed -> 409 `plugin.review_stale`. `pinnedSuggestions` (skill
|
|
@@ -139,8 +186,12 @@ let AdminCatalogController = class AdminCatalogController {
|
|
|
139
186
|
*/
|
|
140
187
|
confirm(principal, stagingId, body) {
|
|
141
188
|
const actor = requireUser(principal);
|
|
142
|
-
|
|
143
|
-
|
|
189
|
+
return this.scope.confirmImport(actor.account.id, stagingId, {
|
|
190
|
+
reviewHash: body.reviewHash,
|
|
191
|
+
...(body.scope !== undefined && { scope: body.scope }),
|
|
192
|
+
...(body.orgs !== undefined && { orgs: body.orgs }),
|
|
193
|
+
...(body.pinnedSuggestions !== undefined && { pinnedSuggestions: body.pinnedSuggestions }),
|
|
194
|
+
}, actorOpts(actor));
|
|
144
195
|
}
|
|
145
196
|
/**
|
|
146
197
|
* The item list (`includeDeleted=true` includes deleted items). Paging: `limit` (default 200, at
|
|
@@ -149,6 +200,7 @@ let AdminCatalogController = class AdminCatalogController {
|
|
|
149
200
|
list(q) {
|
|
150
201
|
return this.catalog.page({
|
|
151
202
|
includeDeleted: q.includeDeleted === "true",
|
|
203
|
+
...(q.pending === "true" && { pending: true }),
|
|
152
204
|
...(q.limit !== undefined && { limit: q.limit }),
|
|
153
205
|
...(q.offset !== undefined && { offset: q.offset }),
|
|
154
206
|
});
|
|
@@ -168,24 +220,104 @@ let AdminCatalogController = class AdminCatalogController {
|
|
|
168
220
|
async icon(id, reply) {
|
|
169
221
|
await sendCatalogIcon(reply, await this.orgCatalog.icon(id, true));
|
|
170
222
|
}
|
|
171
|
-
/**
|
|
172
|
-
|
|
223
|
+
/**
|
|
224
|
+
* What a scope change (`{ scope, orgs? }`, `orgs` only with `named`) or a disable
|
|
225
|
+
* (`{ disabled: true }`) would take away: `{ affected: [{ orgId, orgName, agents,
|
|
226
|
+
* connectorsKept }], needsConfig, scopeHash }` (spec §5 rule 8; nothing written; the connectors
|
|
227
|
+
* stay as the orgs' own). A builtin item -> 409 `plugin.builtin`; unknown
|
|
228
|
+
* orgs -> 400 `validation_failed`.
|
|
229
|
+
*/
|
|
230
|
+
previewScope(id, body) {
|
|
231
|
+
return this.scope.preview(id, body.scope === undefined
|
|
232
|
+
? { disabled: true }
|
|
233
|
+
: { scope: body.scope, ...(body.orgs !== undefined && { orgs: body.orgs }) });
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Changes the scope, confirmed with the preview's `scopeHash` (recomputed under the item row lock;
|
|
237
|
+
* a difference -> 409 `plugin.scope_stale`); bumps the scope version, audits
|
|
238
|
+
* `catalog.scope_changed` and enqueues the scope sync. Builtin -> 409 `plugin.builtin`.
|
|
239
|
+
*/
|
|
240
|
+
setScope(principal, id, body) {
|
|
173
241
|
const actor = requireUser(principal);
|
|
174
|
-
return this.
|
|
242
|
+
return this.scope.setScope(actor.account.id, id, {
|
|
243
|
+
scope: body.scope,
|
|
244
|
+
scopeHash: body.scopeHash,
|
|
245
|
+
...(body.orgs !== undefined && { orgs: body.orgs }),
|
|
246
|
+
}, actorOpts(actor));
|
|
175
247
|
}
|
|
176
|
-
/**
|
|
177
|
-
|
|
248
|
+
/**
|
|
249
|
+
* Disables the plugin on the whole deployment (`scopeHash` of the `{ disabled: true }` preview
|
|
250
|
+
* required; the scope sync then uninstalls it everywhere, its scope and the org switches are kept)
|
|
251
|
+
* or enables it again (no hash; the sync reinstalls where it is wanted). Builtin -> 409
|
|
252
|
+
* `plugin.builtin`; a stale hash -> 409 `plugin.scope_stale`.
|
|
253
|
+
*/
|
|
254
|
+
setDisabled(principal, id, body) {
|
|
178
255
|
const actor = requireUser(principal);
|
|
179
|
-
|
|
256
|
+
return this.scope.setDisabled(actor.account.id, id, {
|
|
257
|
+
disabled: body.disabled,
|
|
258
|
+
...(body.scopeHash !== undefined && { scopeHash: body.scopeHash }),
|
|
259
|
+
}, actorOpts(actor));
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Confirms the item's extension permissions (the admin's 待确认; body `{ permissionsHash }` from
|
|
263
|
+
* the item view): approves the current permission set (snapshot source `web`) and installs and
|
|
264
|
+
* enables an extension that was never deployed. A changed set -> 409 `extension.approval_stale`;
|
|
265
|
+
* nothing to confirm -> 409 `extension.not_pending`. Returns the item. An org's upload
|
|
266
|
+
* (`owner.kind` org, ruling P3-10): the digest of its pending version's package; a first version
|
|
267
|
+
* is installed, approved, enabled and synced, a new version applied by the platform update
|
|
268
|
+
* (the item removed meanwhile -> 409 `catalog.item_removed`, P3-21).
|
|
269
|
+
*/
|
|
270
|
+
confirmPermissions(principal, id, body) {
|
|
271
|
+
const actor = requireUser(principal);
|
|
272
|
+
return this.scope.confirmPermissions(actor.account.id, id, body.permissionsHash, actorOpts(actor));
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Rejects an org upload's pending version (ruling P3-10; body `{ reason? }`, told to the owner
|
|
276
|
+
* org in `upload_rejected`): a first version is removed (its name free again), a new version's
|
|
277
|
+
* pending state cleared. Nothing pending, or a platform item (pre-flight F11) -> 409
|
|
278
|
+
* `extension.not_pending`. 204.
|
|
279
|
+
*/
|
|
280
|
+
async reject(principal, id, body) {
|
|
281
|
+
const actor = requireUser(principal);
|
|
282
|
+
await this.scope.reject(actor.account.id, id, body.reason ?? null, actorOpts(actor));
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Whether orgs outside a `named` item's list see it as requestable (spec §5.1 rule 1). Hiding it
|
|
286
|
+
* keeps pending requests as they are; new requests from unlisted orgs are then 404. Never makes
|
|
287
|
+
* anything usable, so no preview and no scope sync. Audits `catalog.shown_changed`.
|
|
288
|
+
*/
|
|
289
|
+
setShown(principal, id, body) {
|
|
290
|
+
const actor = requireUser(principal);
|
|
291
|
+
return this.scope.setShown(actor.account.id, id, body.shownToOthers, actorOpts(actor));
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* What updating the platform plugin to `version` would do (spec §7.1, `PlatformPluginUpdater`):
|
|
295
|
+
* `{ itemId, name, from, to, components: [{ kind, id, name, change: added | removed | upgrade |
|
|
296
|
+
* downgrade | same, from, to, updatedOnOwn, ownScope, pinnedOrgs, kept? }], extension,
|
|
297
|
+
* connectorOrgs: [{ orgId, connectors, needsConfig }], diffHash }`. Nothing written. The same
|
|
298
|
+
* version, a target the deployment's extension or a dependent plugin cannot take -> 409
|
|
299
|
+
* `plugin.upgrade_target_invalid`; an added skill named like one in use where the plugin is on
|
|
300
|
+
* -> 409 `plugin.skill_conflict`; disabled -> 403 `catalog.item_disabled`.
|
|
301
|
+
*/
|
|
302
|
+
previewUpdate(id, body) {
|
|
303
|
+
return this.updater.preview(id, body.version);
|
|
180
304
|
}
|
|
181
305
|
/**
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
* `
|
|
306
|
+
* Updates the platform plugin, confirmed with the preview's `diffHash` (recomputed under the item
|
|
307
|
+
* lock; a difference -> 409 `plugin.upgrade_stale`; another update running -> 409
|
|
308
|
+
* `plugin.install_in_progress`). A failure undoes everything -> 502 `plugin.upgrade_failed`.
|
|
309
|
+
* Audits `plugin.platform_updated`. A version an org upload waits with (or an item whose first
|
|
310
|
+
* version waits) -> 409 `catalog.item_pending`: confirm it in 待确认 (pre-flight F8); the
|
|
311
|
+
* preview answers the same.
|
|
185
312
|
*/
|
|
186
|
-
|
|
313
|
+
update(principal, id, body) {
|
|
314
|
+
const actor = requireUser(principal);
|
|
315
|
+
return this.updater.update(actor.account.id, id, body, actorOpts(actor));
|
|
316
|
+
}
|
|
317
|
+
/** 删除条目(软删除,已安装的组件不受影响)。 */
|
|
318
|
+
async remove(principal, id) {
|
|
187
319
|
const actor = requireUser(principal);
|
|
188
|
-
|
|
320
|
+
await this.catalog.remove(actor.account.id, id, actorOpts(actor));
|
|
189
321
|
}
|
|
190
322
|
};
|
|
191
323
|
__decorate([
|
|
@@ -231,29 +363,68 @@ __decorate([
|
|
|
231
363
|
__param(1, Res())
|
|
232
364
|
], AdminCatalogController.prototype, "icon", null);
|
|
233
365
|
__decorate([
|
|
234
|
-
|
|
366
|
+
Post("items/:id/scope/preview"),
|
|
367
|
+
HttpCode(200),
|
|
368
|
+
__param(0, Param("id")),
|
|
369
|
+
__param(1, ZBody(CatalogScopePreviewBody))
|
|
370
|
+
], AdminCatalogController.prototype, "previewScope", null);
|
|
371
|
+
__decorate([
|
|
372
|
+
Put("items/:id/scope"),
|
|
235
373
|
__param(0, CurrentPrincipal()),
|
|
236
374
|
__param(1, Param("id")),
|
|
237
|
-
__param(2, ZBody(
|
|
238
|
-
], AdminCatalogController.prototype, "
|
|
375
|
+
__param(2, ZBody(CatalogScopeBody))
|
|
376
|
+
], AdminCatalogController.prototype, "setScope", null);
|
|
239
377
|
__decorate([
|
|
240
|
-
|
|
378
|
+
Put("items/:id/disabled"),
|
|
379
|
+
__param(0, CurrentPrincipal()),
|
|
380
|
+
__param(1, Param("id")),
|
|
381
|
+
__param(2, ZBody(CatalogDisabledBody))
|
|
382
|
+
], AdminCatalogController.prototype, "setDisabled", null);
|
|
383
|
+
__decorate([
|
|
384
|
+
Post("items/:id/confirm"),
|
|
385
|
+
HttpCode(200),
|
|
386
|
+
__param(0, CurrentPrincipal()),
|
|
387
|
+
__param(1, Param("id")),
|
|
388
|
+
__param(2, ZBody(CatalogConfirmPermissionsBody))
|
|
389
|
+
], AdminCatalogController.prototype, "confirmPermissions", null);
|
|
390
|
+
__decorate([
|
|
391
|
+
Post("items/:id/reject"),
|
|
241
392
|
HttpCode(204),
|
|
242
393
|
__param(0, CurrentPrincipal()),
|
|
243
|
-
__param(1, Param("id"))
|
|
244
|
-
|
|
394
|
+
__param(1, Param("id")),
|
|
395
|
+
__param(2, ZBody(CatalogRejectBody))
|
|
396
|
+
], AdminCatalogController.prototype, "reject", null);
|
|
397
|
+
__decorate([
|
|
398
|
+
Put("items/:id/shown"),
|
|
399
|
+
__param(0, CurrentPrincipal()),
|
|
400
|
+
__param(1, Param("id")),
|
|
401
|
+
__param(2, ZBody(CatalogShownBody))
|
|
402
|
+
], AdminCatalogController.prototype, "setShown", null);
|
|
245
403
|
__decorate([
|
|
246
|
-
Post("items/:id/
|
|
404
|
+
Post("items/:id/update/preview"),
|
|
247
405
|
HttpCode(200),
|
|
406
|
+
__param(0, Param("id")),
|
|
407
|
+
__param(1, ZBody(CatalogUpdatePreviewBody))
|
|
408
|
+
], AdminCatalogController.prototype, "previewUpdate", null);
|
|
409
|
+
__decorate([
|
|
410
|
+
Put("items/:id/update"),
|
|
248
411
|
__param(0, CurrentPrincipal()),
|
|
249
412
|
__param(1, Param("id")),
|
|
250
|
-
__param(2, ZBody(
|
|
251
|
-
], AdminCatalogController.prototype, "
|
|
413
|
+
__param(2, ZBody(CatalogUpdateBody))
|
|
414
|
+
], AdminCatalogController.prototype, "update", null);
|
|
415
|
+
__decorate([
|
|
416
|
+
Delete("items/:id"),
|
|
417
|
+
HttpCode(204),
|
|
418
|
+
__param(0, CurrentPrincipal()),
|
|
419
|
+
__param(1, Param("id"))
|
|
420
|
+
], AdminCatalogController.prototype, "remove", null);
|
|
252
421
|
AdminCatalogController = __decorate([
|
|
253
422
|
Controller("api/v1/admin/catalog"),
|
|
254
|
-
|
|
423
|
+
SuperAdmin(),
|
|
255
424
|
__param(0, Inject(CatalogService)),
|
|
256
425
|
__param(1, Inject(PluginImport)),
|
|
257
|
-
__param(2, Inject(OrgCatalogService))
|
|
426
|
+
__param(2, Inject(OrgCatalogService)),
|
|
427
|
+
__param(3, Inject(CatalogScopeService)),
|
|
428
|
+
__param(4, Inject(PlatformPluginUpdater))
|
|
258
429
|
], AdminCatalogController);
|
|
259
430
|
export { AdminCatalogController };
|
|
@@ -8,29 +8,42 @@ import type { StorageService } from "../storage/storage.service.js";
|
|
|
8
8
|
import type { ConnectorTemplateRef, CreateConnectorInput } from "../tools/connectors.service.js";
|
|
9
9
|
import type { CatalogItemView } from "./catalog.service.js";
|
|
10
10
|
import type { ConnectorInstallInput, PluginInstallInput, PluginInstallView } from "./plugin-install.js";
|
|
11
|
-
import type {
|
|
11
|
+
import type { OrgPluginState, PluginScope } from "./scope.js";
|
|
12
12
|
/** A catalog item from an organization's view (`GET /orgs/:orgId/catalog`). */
|
|
13
|
-
export interface OrgCatalogItem extends Omit<CatalogItemView, "installs" | "marketplaceId" | "latestMarketplaceVersion" | "newerInMarketplace"> {
|
|
13
|
+
export interface OrgCatalogItem extends Omit<CatalogItemView, "installs" | "marketplaceId" | "latestMarketplaceVersion" | "newerInMarketplace" | "scopeOrgs" | "enabledOrgs" | "offCount" | "pending" | "shownToOthers" | "awaitingConfirmation" | "pendingVersion"> {
|
|
14
|
+
/** The owner org only (absent for other orgs): its upload waits for the super admin (P3-9). */
|
|
15
|
+
awaitingConfirmation?: boolean;
|
|
16
|
+
/** The owner org only (absent for other orgs): the version waiting for that confirmation. */
|
|
17
|
+
pendingVersion?: string | null;
|
|
18
|
+
scope: PluginScope;
|
|
19
|
+
/** Shipped with the deployment (a required bootstrap plugin): on in every org, never switchable. */
|
|
20
|
+
builtin: boolean;
|
|
14
21
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
22
|
+
* The effective state in this org: `on`, `off`, `needs_config` (installed with an on connector
|
|
23
|
+
* template that has no connector here, ruling P2-10; or wanted but not installed, and the
|
|
24
|
+
* install needs inputs), `unavailable` (disabled by the super admin; members don't see it)
|
|
25
|
+
* or `not_offered` (a `named` item shown to orgs outside its list: requestable, not usable).
|
|
18
26
|
*/
|
|
19
|
-
|
|
27
|
+
state: OrgPluginState;
|
|
28
|
+
/** The org admin may switch it (never for `all` and builtin items). */
|
|
29
|
+
switchable: boolean;
|
|
30
|
+
/** The plugin's extension (or a template's connector extension) is not on the deployment. */
|
|
31
|
+
notDeployed: boolean;
|
|
20
32
|
/**
|
|
21
33
|
* This org's live plugin install of the item (installing, installed or upgrading);
|
|
22
|
-
* `upgradeAvailable` is
|
|
34
|
+
* `upgradeAvailable` is always null since plugin scope phase 2 (no per-org upgrade, ruling F2;
|
|
35
|
+
* kept for the web until its upgrade dialog goes).
|
|
23
36
|
*/
|
|
24
37
|
installed: {
|
|
25
38
|
pluginInstallId: string;
|
|
26
39
|
version: string;
|
|
27
40
|
upgradeAvailable: string | null;
|
|
28
41
|
} | null;
|
|
29
|
-
/** This org's
|
|
42
|
+
/** This org's pending request for the item (spec §5.1), null when none. */
|
|
30
43
|
request: {
|
|
31
44
|
id: string;
|
|
32
|
-
|
|
33
|
-
|
|
45
|
+
kind: "access" | "enable";
|
|
46
|
+
createdAt: string;
|
|
34
47
|
} | null;
|
|
35
48
|
}
|
|
36
49
|
/**
|
|
@@ -57,15 +70,25 @@ export interface OrgCatalogDetail {
|
|
|
57
70
|
/** The plugin's extension (its name), null without one. */
|
|
58
71
|
extension: string | null;
|
|
59
72
|
templates: OrgCatalogTemplate[];
|
|
60
|
-
/**
|
|
73
|
+
/**
|
|
74
|
+
* The plugin's dependencies (name and range); `implied` ones are the connector extensions its
|
|
75
|
+
* templates use that the org has off: the install switches them on first.
|
|
76
|
+
*/
|
|
61
77
|
dependencies: {
|
|
62
78
|
name: string;
|
|
63
79
|
range: string;
|
|
80
|
+
implied?: true;
|
|
64
81
|
}[];
|
|
65
82
|
/** The skill directories. */
|
|
66
83
|
skills: string[];
|
|
67
84
|
/** The agent template files (`agents/<name>.md`, sub-agents spec §16). */
|
|
68
85
|
agents: string[];
|
|
86
|
+
/**
|
|
87
|
+
* An installed plugin whose connector templates on in the org miss a connector there
|
|
88
|
+
* (`needs_config`, ruling P2-10): those templates, for `POST …/catalog/:itemId/connectors`;
|
|
89
|
+
* empty otherwise (Task 10).
|
|
90
|
+
*/
|
|
91
|
+
missingTemplates: OrgCatalogTemplate[];
|
|
69
92
|
}
|
|
70
93
|
/**
|
|
71
94
|
* A connector template as an org sees it (the install wizard and the upgrade preview's inputs):
|
|
@@ -76,7 +99,6 @@ export declare function orgTemplateView(id: string, file: ConnectorTemplateFile)
|
|
|
76
99
|
export interface CatalogIcon {
|
|
77
100
|
data: Uint8Array;
|
|
78
101
|
contentType: "image/svg+xml" | "image/png";
|
|
79
|
-
policy: "allow" | "needs_approval" | "disabled";
|
|
80
102
|
}
|
|
81
103
|
/** The parts of a catalog version row an org install reads. */
|
|
82
104
|
export interface CatalogVersionFiles {
|
|
@@ -88,6 +110,16 @@ export interface CatalogVersionFiles {
|
|
|
88
110
|
sha256: string;
|
|
89
111
|
}[];
|
|
90
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* The digest of a skill's files (paths relative to the skill directory): equal digests = the same
|
|
115
|
+
* content. Shared by the org upgrade diff and the platform components.
|
|
116
|
+
*/
|
|
117
|
+
export declare function skillFilesDigest(files: {
|
|
118
|
+
path: string;
|
|
119
|
+
sha256: string;
|
|
120
|
+
}[]): string;
|
|
121
|
+
/** The digest of the files under `dir/` of a catalog version (paths relative to it). */
|
|
122
|
+
export declare function dirDigest(row: CatalogVersionFiles, dir: string): string;
|
|
91
123
|
/** Whether the item's latest version has an icon; unreadable counts as none. */
|
|
92
124
|
export declare function catalogHasIcon(db: KernelSchemaDb, itemId: string): Promise<boolean>;
|
|
93
125
|
/**
|
|
@@ -99,12 +131,13 @@ export declare function catalogHasIcon(db: KernelSchemaDb, itemId: string): Prom
|
|
|
99
131
|
*/
|
|
100
132
|
export declare function readCatalogIcon(db: KernelSchemaDb, storage: StorageService, itemId: string, includeDisabled: boolean): Promise<CatalogIcon>;
|
|
101
133
|
export type { ConnectorInstallInput };
|
|
102
|
-
/**
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
134
|
+
/**
|
|
135
|
+
* The input of `POST /orgs/:orgId/catalog/:itemId/install`: the platform version is installed
|
|
136
|
+
* (ruling P2-17), so there is no version.
|
|
137
|
+
*/
|
|
138
|
+
export type OrgInstallInput = PluginInstallInput;
|
|
139
|
+
/** Install result: 201 installed. */
|
|
140
|
+
export interface OrgInstallResult {
|
|
108
141
|
status: 201;
|
|
109
142
|
installed: {
|
|
110
143
|
itemId: string;
|
|
@@ -113,26 +146,19 @@ export type OrgInstallResult = {
|
|
|
113
146
|
};
|
|
114
147
|
/** The install view (its components, dependency installs included). */
|
|
115
148
|
install: PluginInstallView;
|
|
116
|
-
}
|
|
117
|
-
status: 202;
|
|
118
|
-
request: CatalogRequestView;
|
|
119
|
-
};
|
|
120
|
-
/** Upgrade result: 200 upgraded (the install view); 202 needs enterprise admin approval, a request was created. */
|
|
121
|
-
export type OrgUpgradeResult = {
|
|
122
|
-
status: 200;
|
|
123
|
-
install: PluginInstallView;
|
|
124
|
-
} | {
|
|
125
|
-
status: 202;
|
|
126
|
-
request: CatalogRequestView;
|
|
127
|
-
};
|
|
149
|
+
}
|
|
128
150
|
/**
|
|
129
151
|
* The org actions installing / uninstalling a plugin needs: the union over its components (an
|
|
130
152
|
* extension -> `org.extensions.manage`, skills -> `skills.manage`, connector templates ->
|
|
131
153
|
* `connectors.manage`, agent templates -> `agents.manage`), re-checked inside the org row lock.
|
|
132
154
|
*/
|
|
133
155
|
export declare function requiredActions(m: PluginManifest): OrgAction[];
|
|
134
|
-
/**
|
|
135
|
-
|
|
156
|
+
/**
|
|
157
|
+
* Locks the org row in the caller's transaction (`orgLock` joins it) and re-checks the actor can do
|
|
158
|
+
* every action (else `forbidden`). `actor` null is the kernel itself (the plugin scope sync): the
|
|
159
|
+
* lock only.
|
|
160
|
+
*/
|
|
161
|
+
export declare function lockOrgForActions(orgLock: Pick<OrgLock, "lock" | "lockAndAuthorize">, orgId: string, actor: string | null, actions: OrgAction[]): Promise<void>;
|
|
136
162
|
/** The value at a dot path of `v` (own keys only), undefined when absent. */
|
|
137
163
|
export declare function getPath(v: unknown, path: string): unknown;
|
|
138
164
|
/** Sets the value at a dot path of `obj`, creating the objects on the way. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Reading a catalog version's stored content (templates, skills, agent templates, icons) and the
|
|
2
|
-
// org install helpers (no providers), shared by PluginInstaller,
|
|
2
|
+
// org install helpers (no providers), shared by PluginInstaller, PlatformPluginUpdater and
|
|
3
3
|
// OrgCatalogService: kept out of org-catalog.service.ts so the installer's module never imports a
|
|
4
4
|
// module whose provider injects PluginInstaller (an ESM import cycle would run decorators early).
|
|
5
5
|
import { createHash } from "node:crypto";
|
|
@@ -31,6 +31,25 @@ export function orgTemplateView(id, file) {
|
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
33
|
const iconNotFound = () => new ApiError("catalog.icon_not_found", "This catalog item has no icon");
|
|
34
|
+
/**
|
|
35
|
+
* The digest of a skill's files (paths relative to the skill directory): equal digests = the same
|
|
36
|
+
* content. Shared by the org upgrade diff and the platform components.
|
|
37
|
+
*/
|
|
38
|
+
export function skillFilesDigest(files) {
|
|
39
|
+
return createHash("sha256")
|
|
40
|
+
.update(files
|
|
41
|
+
.map((f) => `${f.path}\0${f.sha256}\n`)
|
|
42
|
+
.sort()
|
|
43
|
+
.join(""))
|
|
44
|
+
.digest("hex");
|
|
45
|
+
}
|
|
46
|
+
/** The digest of the files under `dir/` of a catalog version (paths relative to it). */
|
|
47
|
+
export function dirDigest(row, dir) {
|
|
48
|
+
const prefix = `${dir}/`;
|
|
49
|
+
return skillFilesDigest(row.files
|
|
50
|
+
.filter((f) => f.path.startsWith(prefix))
|
|
51
|
+
.map((f) => ({ path: f.path.slice(prefix.length), sha256: f.sha256 })));
|
|
52
|
+
}
|
|
34
53
|
/**
|
|
35
54
|
* The item's latest version row; item missing, deleted or (when `includeDisabled` is false)
|
|
36
55
|
* disabled -> `catalog.item_not_found`.
|
|
@@ -40,13 +59,13 @@ async function latestVersionRow(db, itemId, includeDisabled) {
|
|
|
40
59
|
throw itemNotFound();
|
|
41
60
|
const item = await db
|
|
42
61
|
.selectFrom("catalog_items")
|
|
43
|
-
.select(["latest_version", "
|
|
62
|
+
.select(["latest_version", "disabled"])
|
|
44
63
|
.where("id", "=", itemId)
|
|
45
64
|
.where("deleted_at", "is", null)
|
|
46
65
|
.executeTakeFirst();
|
|
47
66
|
// An item the caller cannot see is "not found" before any version / storage is read, so "no icon"
|
|
48
67
|
// never reveals that it exists
|
|
49
|
-
if (!item || (!includeDisabled && item.
|
|
68
|
+
if (!item || (!includeDisabled && item.disabled))
|
|
50
69
|
throw itemNotFound();
|
|
51
70
|
const v = await db
|
|
52
71
|
.selectFrom("catalog_item_versions")
|
|
@@ -82,7 +101,7 @@ export async function catalogHasIcon(db, itemId) {
|
|
|
82
101
|
* (checked at import, this guards against tampered storage) -> `internal`.
|
|
83
102
|
*/
|
|
84
103
|
export async function readCatalogIcon(db, storage, itemId, includeDisabled) {
|
|
85
|
-
const {
|
|
104
|
+
const { v } = await latestVersionRow(db, itemId, includeDisabled);
|
|
86
105
|
const path = iconPath(v);
|
|
87
106
|
const f = path === undefined ? undefined : v.files.find((x) => x.path === path);
|
|
88
107
|
if (path === undefined || !f)
|
|
@@ -96,7 +115,6 @@ export async function readCatalogIcon(db, storage, itemId, includeDisabled) {
|
|
|
96
115
|
return {
|
|
97
116
|
data: file.data,
|
|
98
117
|
contentType: /\.svg$/i.test(path) ? "image/svg+xml" : "image/png",
|
|
99
|
-
policy: item.policy,
|
|
100
118
|
};
|
|
101
119
|
}
|
|
102
120
|
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
@@ -119,8 +137,16 @@ export function requiredActions(m) {
|
|
|
119
137
|
out.push("agents.manage");
|
|
120
138
|
return out.length > 0 ? out : ["org.extensions.manage"];
|
|
121
139
|
}
|
|
122
|
-
/**
|
|
140
|
+
/**
|
|
141
|
+
* Locks the org row in the caller's transaction (`orgLock` joins it) and re-checks the actor can do
|
|
142
|
+
* every action (else `forbidden`). `actor` null is the kernel itself (the plugin scope sync): the
|
|
143
|
+
* lock only.
|
|
144
|
+
*/
|
|
123
145
|
export async function lockOrgForActions(orgLock, orgId, actor, actions) {
|
|
146
|
+
if (actor === null) {
|
|
147
|
+
await orgLock.lock(orgId);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
124
150
|
const [first, ...rest] = actions;
|
|
125
151
|
const { role } = await orgLock.lockAndAuthorize(orgId, actor, first);
|
|
126
152
|
for (const a of rest) {
|
|
@@ -175,12 +201,12 @@ export function findConnectorIn(registry, plugin, kind) {
|
|
|
175
201
|
*/
|
|
176
202
|
export function templatePluginProblem(d, template) {
|
|
177
203
|
if (!d.findConnector(template.plugin, template.connector)) {
|
|
178
|
-
return `Connector extension ${template.plugin} providing "${template.connector}" is not deployed; ask the
|
|
204
|
+
return `Connector extension ${template.plugin} providing "${template.connector}" is not deployed; ask the super admin to install and enable it`;
|
|
179
205
|
}
|
|
180
206
|
const range = template.pluginVersion;
|
|
181
207
|
const version = d.pluginVersion(template.plugin);
|
|
182
208
|
if (range !== undefined && version !== undefined && !satisfiesRange(version, range)) {
|
|
183
|
-
return `Connector extension ${template.plugin} is deployed at version ${version}, but the template needs ${range}; ask the
|
|
209
|
+
return `Connector extension ${template.plugin} is deployed at version ${version}, but the template needs ${range}; ask the super admin to upgrade it`;
|
|
184
210
|
}
|
|
185
211
|
return undefined;
|
|
186
212
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The platform side of the catalog: marketplaces, the one import review (prepare -> confirm), the
|
|
3
|
+
* items and their platform components. The CLI's `capybara plugins *` and `capybara bootstrap` run on this
|
|
4
|
+
* part alone.
|
|
5
|
+
*/
|
|
6
|
+
export declare class CatalogImportModule {
|
|
7
|
+
}
|