@capybara-hq/kernel 0.1.0-rc.3 → 0.1.0-rc.5
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 +47 -16
- package/dist/admin/admin.controller.js +44 -19
- package/dist/admin/extensions.controller.d.ts +24 -3
- package/dist/admin/extensions.controller.js +48 -8
- 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 +19 -0
- package/dist/agents/agent-lookup.js +21 -0
- package/dist/agents/agent-profile.service.d.ts +29 -0
- package/dist/agents/agent-profile.service.js +117 -0
- package/dist/agents/agents.controller.d.ts +168 -3
- package/dist/agents/agents.controller.js +201 -12
- package/dist/agents/agents.module.d.ts +4 -1
- package/dist/agents/agents.module.js +36 -6
- package/dist/agents/agents.service.d.ts +64 -27
- package/dist/agents/agents.service.js +199 -74
- package/dist/agents/definition.d.ts +53 -0
- package/dist/agents/definition.js +55 -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/instruction-files.d.ts +60 -0
- package/dist/agents/instruction-files.js +111 -0
- package/dist/agents/models.controller.d.ts +9 -3
- package/dist/agents/models.controller.js +19 -4
- 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/profile.d.ts +96 -0
- package/dist/agents/profile.js +51 -0
- package/dist/agents/readiness.controller.d.ts +26 -0
- package/dist/agents/readiness.controller.js +56 -0
- 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 +476 -53
- package/dist/background/background.controller.d.ts +38 -0
- package/dist/background/background.controller.js +87 -0
- package/dist/background/background.module.d.ts +10 -0
- package/dist/background/background.module.js +39 -0
- package/dist/background/finish.d.ts +44 -0
- package/dist/background/finish.js +94 -0
- package/dist/background/launch-lock.d.ts +15 -0
- package/dist/background/launch-lock.js +40 -0
- package/dist/background/launch.d.ts +36 -0
- package/dist/background/launch.js +70 -0
- package/dist/background/poll.job.d.ts +56 -0
- package/dist/background/poll.job.js +190 -0
- package/dist/background/render.d.ts +23 -0
- package/dist/background/render.js +48 -0
- package/dist/background/session.d.ts +48 -0
- package/dist/background/session.js +79 -0
- package/dist/background/status.d.ts +35 -0
- package/dist/background/status.js +57 -0
- package/dist/background/stop.d.ts +68 -0
- package/dist/background/stop.js +243 -0
- package/dist/background/store.d.ts +162 -0
- package/dist/background/store.js +357 -0
- package/dist/background/store.module.d.ts +6 -0
- package/dist/background/store.module.js +22 -0
- package/dist/background/tasks.service.d.ts +77 -0
- package/dist/background/tasks.service.js +211 -0
- package/dist/background/wake-rules.d.ts +66 -0
- package/dist/background/wake-rules.js +113 -0
- package/dist/background/wake.d.ts +30 -0
- package/dist/background/wake.js +63 -0
- 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/claude/agents.js +2 -0
- 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 +623 -83
- 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 +1148 -1137
- 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 +21 -3
- package/dist/channels/channels.module.js +2 -0
- package/dist/channels/connections.service.d.ts +16 -1
- package/dist/channels/connections.service.js +38 -4
- 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/channels/threads.d.ts +5 -0
- package/dist/channels/threads.js +8 -0
- package/dist/config/docs.js +3 -1
- package/dist/config/schema.d.ts +24 -2
- package/dist/config/schema.js +145 -19
- package/dist/conversations/access.d.ts +6 -4
- package/dist/conversations/access.js +29 -5
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/attachments.service.d.ts +30 -0
- package/dist/conversations/attachments.service.js +130 -5
- package/dist/conversations/conversations.controller.d.ts +79 -23
- package/dist/conversations/conversations.controller.js +141 -50
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +10 -7
- package/dist/conversations/conversations.service.d.ts +108 -9
- package/dist/conversations/conversations.service.js +237 -30
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +21 -6
- package/dist/conversations/event-log.js +70 -1
- package/dist/conversations/events.d.ts +140 -0
- package/dist/conversations/events.js +142 -13
- package/dist/conversations/queue.d.ts +3 -1
- package/dist/conversations/queue.js +13 -2
- package/dist/conversations/queue.service.d.ts +1 -1
- package/dist/conversations/queue.service.js +8 -1
- package/dist/conversations/titles.d.ts +12 -3
- package/dist/conversations/titles.js +36 -8
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/create-ctx.d.ts +5 -0
- package/dist/ctx/create-ctx.js +15 -5
- package/dist/db/kernel-schema.d.ts +420 -20
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +3 -0
- 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 +90 -2
- package/dist/errors.js +90 -2
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +26 -7
- package/dist/evals/run-replay.d.ts +7 -2
- package/dist/evals/run-replay.js +42 -7
- package/dist/evals/step-replay.d.ts +2 -5
- package/dist/evals/step-replay.js +13 -7
- package/dist/evals/trajectory.js +1 -1
- 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 +67 -42
- package/dist/extensions/admin-view.d.ts +39 -10
- package/dist/extensions/admin-view.js +111 -20
- package/dist/extensions/blobs.js +1 -0
- 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-issues.d.ts +13 -1
- package/dist/extensions/config-issues.js +22 -5
- package/dist/extensions/config-json-schema.d.ts +43 -7
- package/dist/extensions/config-json-schema.js +124 -58
- package/dist/extensions/deployment-config-store.d.ts +6 -0
- package/dist/extensions/deployment-config.d.ts +78 -8
- package/dist/extensions/deployment-config.js +172 -34
- package/dist/extensions/display-name.d.ts +22 -0
- package/dist/extensions/display-name.js +77 -0
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/extensions.module.js +14 -2
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +45 -2
- package/dist/extensions/host.js +112 -16
- package/dist/extensions/installs.d.ts +20 -8
- package/dist/extensions/installs.js +37 -15
- package/dist/extensions/org-config.d.ts +81 -6
- package/dist/extensions/org-config.js +195 -44
- 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/package.d.ts +14 -1
- package/dist/extensions/package.js +51 -2
- package/dist/extensions/permission-view.d.ts +19 -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.controller.d.ts +34 -0
- package/dist/extensions/point-defaults.controller.js +71 -0
- package/dist/extensions/point-defaults.d.ts +71 -0
- package/dist/extensions/point-defaults.js +234 -0
- package/dist/extensions/registry.d.ts +1 -1
- package/dist/extensions/registry.js +2 -0
- package/dist/extensions/resolve.d.ts +5 -1
- package/dist/extensions/resolve.js +15 -2
- package/dist/files/previewers.d.ts +8 -1
- package/dist/files/previewers.js +35 -6
- package/dist/http/api.module.js +31 -3
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/http/nest-logger.d.ts +6 -5
- package/dist/http/nest-logger.js +24 -10
- 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.controller.js +9 -5
- package/dist/identity/auth.guard.d.ts +13 -5
- package/dist/identity/auth.guard.js +26 -9
- package/dist/identity/cookies.d.ts +20 -5
- package/dist/identity/cookies.js +44 -6
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +4 -4
- package/dist/identity/me.controller.d.ts +5 -1
- package/dist/identity/me.controller.js +12 -3
- package/dist/identity/principal.d.ts +3 -3
- package/dist/identity/principal.js +3 -3
- package/dist/identity/sessions.d.ts +12 -0
- package/dist/identity/sessions.js +45 -0
- 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 +2 -2
- package/dist/index.js +1 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +27 -1
- package/dist/infra/database/database.module.js +1 -0
- 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/lifecycle/process-guards.js +4 -0
- package/dist/infra/logging/logging.module.d.ts +4 -2
- package/dist/infra/logging/logging.module.js +24 -6
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/infra/queue/redis-connection.d.ts +6 -0
- package/dist/infra/queue/redis-connection.js +7 -0
- package/dist/infra/redis/redis.module.js +6 -2
- package/dist/infra/tokens.d.ts +6 -1
- package/dist/infra/tokens.js +6 -1
- 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/log.d.ts +13 -1
- package/dist/log.js +93 -17
- 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 +43 -9
- package/dist/models/purposes.js +48 -18
- package/dist/orgs/directory-sync.d.ts +14 -5
- package/dist/orgs/directory-sync.js +41 -17
- package/dist/orgs/offboarding.d.ts +12 -8
- package/dist/orgs/offboarding.js +54 -33
- 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 +20 -3
- package/dist/orgs/settings.service.js +19 -4
- 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 +1387 -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 +15 -1
- package/dist/runtime/context/build.d.ts +11 -7
- package/dist/runtime/context/build.js +46 -19
- package/dist/runtime/context/claude-tools.d.ts +3 -1
- package/dist/runtime/context/claude-tools.js +8 -6
- package/dist/runtime/context/compaction.js +13 -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.js +2 -0
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +36 -17
- package/dist/runtime/loop.d.ts +34 -5
- package/dist/runtime/maintenance.d.ts +9 -4
- package/dist/runtime/maintenance.js +35 -8
- package/dist/runtime/model-call.d.ts +46 -8
- package/dist/runtime/model-call.js +72 -21
- package/dist/runtime/providers.d.ts +6 -0
- package/dist/runtime/providers.js +8 -0
- 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 +59 -2
- package/dist/runtime/run-queue.js +311 -38
- package/dist/runtime/run-worker.d.ts +11 -5
- package/dist/runtime/run-worker.js +69 -33
- package/dist/runtime/runtime.module.js +11 -3
- package/dist/runtime/step-log.d.ts +15 -4
- package/dist/runtime/step-log.js +24 -7
- 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 +44 -28
- 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.d.ts +2 -1
- package/dist/runtime/usage-report.js +19 -13
- package/dist/runtime/waits.d.ts +145 -36
- package/dist/runtime/waits.js +423 -109
- 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 +10 -4
- package/dist/sandbox/sandbox.service.d.ts +282 -129
- package/dist/sandbox/sandbox.service.js +736 -381
- 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 +25 -4
- package/dist/tools/builtin-names.d.ts +41 -7
- package/dist/tools/builtin-names.js +59 -7
- 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 +19 -1
- package/dist/tools/builtins/builtin-tools.js +59 -2
- 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.d.ts +1 -1
- package/dist/tools/builtins/sandbox/bash.js +241 -4
- package/dist/tools/builtins/sandbox/common.d.ts +69 -27
- package/dist/tools/builtins/sandbox/common.js +87 -48
- package/dist/tools/builtins/sandbox/deliver.js +1 -1
- 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 +3 -1
- package/dist/tools/builtins/sandbox/index.js +7 -1
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/task-output.d.ts +74 -0
- package/dist/tools/builtins/sandbox/task-output.js +329 -0
- package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
- package/dist/tools/builtins/sandbox/task-stop.js +113 -0
- 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/errors.d.ts +8 -0
- package/dist/tools/builtins/web/errors.js +53 -0
- package/dist/tools/builtins/web/extract.d.ts +62 -0
- package/dist/tools/builtins/web/extract.js +271 -0
- package/dist/tools/builtins/web/fetch.d.ts +55 -0
- package/dist/tools/builtins/web/fetch.js +175 -0
- package/dist/tools/builtins/web/index.d.ts +13 -0
- package/dist/tools/builtins/web/index.js +12 -0
- package/dist/tools/builtins/web/page-cache.d.ts +25 -0
- package/dist/tools/builtins/web/page-cache.js +77 -0
- package/dist/tools/builtins/web/search.d.ts +25 -0
- package/dist/tools/builtins/web/search.js +210 -0
- package/dist/tools/builtins/web/url.d.ts +17 -0
- package/dist/tools/builtins/web/url.js +43 -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/oauth/flow-paths.d.ts +1 -1
- package/dist/tools/oauth/flow-paths.js +1 -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 +202 -364
- package/dist/tools/policy.d.ts +1 -1
- package/dist/tools/policy.js +36 -16
- package/dist/tools/registry.d.ts +120 -8
- package/dist/tools/registry.js +112 -19
- package/dist/tools/tools.module.js +24 -2
- package/dist/tools/validate.js +1 -1
- package/dist/ui/views.d.ts +2 -1
- package/dist/ui/views.js +17 -3
- package/package.json +3 -3
- package/src/migrations/0064_account_last_org.sql +7 -0
- package/src/migrations/0065_conversation_archive.sql +8 -0
- package/src/migrations/0066_extension_display_name.sql +4 -0
- package/src/migrations/0067_agent_profiles.sql +20 -0
- package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
- package/src/migrations/0069_attachments_agent_idx.sql +3 -0
- package/src/migrations/0070_background_tasks.sql +37 -0
- package/src/migrations/0071_background_tasks_reserve.sql +6 -0
- package/src/migrations/0072_background_tasks_stopping.sql +5 -0
- package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
- 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/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 -24
- package/dist/extensions/org-config.controller.js +0 -62
package/dist/extensions/blobs.js
CHANGED
|
@@ -123,6 +123,7 @@ let ExtensionBlobs = class ExtensionBlobs {
|
|
|
123
123
|
source: src.source,
|
|
124
124
|
source_ref: src.ref,
|
|
125
125
|
uploaded_by: src.actor,
|
|
126
|
+
display_name: p.displayName === undefined ? null : JSON.stringify(p.displayName),
|
|
126
127
|
})
|
|
127
128
|
.onConflict((oc) => oc.column("sha256").doNothing())
|
|
128
129
|
.returning("sha256")
|
|
@@ -35,7 +35,7 @@ import { ExtensionRegistry } from "./registry.js";
|
|
|
35
35
|
* manifest's sha256 (written with the audit `bootstrap.completed` only when every entry
|
|
36
36
|
* succeeded; otherwise the next start runs it again, which is idempotent).
|
|
37
37
|
* - Only entries new to the manifest are installed (Ruling 5): an optional entry that the last
|
|
38
|
-
* completed run already handled and that is not installed now (
|
|
38
|
+
* completed run already handled and that is not installed now (a super admin uninstalled
|
|
39
39
|
* it) stays uninstalled -> `kept`. A required entry is always installed.
|
|
40
40
|
* - Per entry, by the installed state of its extension:
|
|
41
41
|
* - not installed (and new, or required): imported into the catalog (source `bootstrap`, ref
|
|
@@ -44,8 +44,8 @@ import { ExtensionRegistry } from "./registry.js";
|
|
|
44
44
|
* and enabled -> `installed`;
|
|
45
45
|
* - installed from `bootstrap` at a lower version: upgraded the same way (core's release vouched
|
|
46
46
|
* for the version, so new permissions are pre-approved and audited), keeping the desired state
|
|
47
|
-
*
|
|
48
|
-
* - installed at a higher version, or from another source (
|
|
47
|
+
* a super admin chose (a disabled optional plugin stays disabled) -> `upgraded`;
|
|
48
|
+
* - installed at a higher version, or from another source (a super admin upgraded it), or
|
|
49
49
|
* the name is config-declared (`declared`: config wins, no install record is created):
|
|
50
50
|
* untouched, never downgraded -> `kept`;
|
|
51
51
|
* - a declarative plugin (no extension): imported into the catalog only -> `imported` (`kept`
|
|
@@ -175,6 +175,12 @@ export declare class BootstrapService {
|
|
|
175
175
|
/** The plugin import a declarative entry (or an entry's catalog version) goes through. */
|
|
176
176
|
imports: BootstrapImports;
|
|
177
177
|
}): Promise<BootstrapResult>;
|
|
178
|
+
/**
|
|
179
|
+
* A pin whose plugin name an org holds (a live org-owned catalog item): the bootstrap takes no
|
|
180
|
+
* name over (ruling P3-28), so the entry fails; this warning tells the super admin why and
|
|
181
|
+
* which org holds it (final review M4).
|
|
182
|
+
*/
|
|
183
|
+
private warnIfHeld;
|
|
178
184
|
/** The `bootstrap_runs` row and the `bootstrap.completed` audit, in one transaction. */
|
|
179
185
|
private recordDone;
|
|
180
186
|
/**
|
|
@@ -186,10 +192,17 @@ export declare class BootstrapService {
|
|
|
186
192
|
/** The entry names the last completed run handled (undefined before any run completed). */
|
|
187
193
|
private lastRunNames;
|
|
188
194
|
private entry;
|
|
195
|
+
/**
|
|
196
|
+
* The catalog item of a bootstrap entry follows `required`: a required entry is builtin, offered
|
|
197
|
+
* to every org (scope `all`) and not disabled (migration 0075 could leave a required plugin
|
|
198
|
+
* disabled); an entry that stops being required is no longer builtin and keeps scope `all` (the
|
|
199
|
+
* admin may change it from then on).
|
|
200
|
+
*/
|
|
201
|
+
private markBuiltin;
|
|
189
202
|
/** A declarative plugin: catalog only. Returns false when that version is already imported. */
|
|
190
203
|
private importOnly;
|
|
191
204
|
/**
|
|
192
|
-
* Imports, approves, installs and enables (one review
|
|
205
|
+
* Imports, approves, installs and enables (one review; its confirm deploys the extension). When
|
|
193
206
|
* the catalog already has this version (an earlier run stopped after importing, or the same
|
|
194
207
|
* package came from a marketplace), the extension is deployed from the package store instead.
|
|
195
208
|
*/
|
|
@@ -15,6 +15,7 @@ import { parseBootstrapManifest, SDK_VERSION, } from "@capybara-hq/plugin-sdk";
|
|
|
15
15
|
import { Inject, Injectable, Optional } from "@nestjs/common";
|
|
16
16
|
import { sql } from "kysely";
|
|
17
17
|
import semver from "semver";
|
|
18
|
+
import { otherNameOwner } from "../catalog/ownership.js";
|
|
18
19
|
import { catalogPackageError } from "../catalog/plugin-import.js";
|
|
19
20
|
import { PluginPackageError, readPluginPackage } from "../catalog/plugin-package.js";
|
|
20
21
|
import { ApiError } from "../errors.js";
|
|
@@ -57,7 +58,7 @@ import { ExtensionRegistry } from "./registry.js";
|
|
|
57
58
|
* manifest's sha256 (written with the audit `bootstrap.completed` only when every entry
|
|
58
59
|
* succeeded; otherwise the next start runs it again, which is idempotent).
|
|
59
60
|
* - Only entries new to the manifest are installed (Ruling 5): an optional entry that the last
|
|
60
|
-
* completed run already handled and that is not installed now (
|
|
61
|
+
* completed run already handled and that is not installed now (a super admin uninstalled
|
|
61
62
|
* it) stays uninstalled -> `kept`. A required entry is always installed.
|
|
62
63
|
* - Per entry, by the installed state of its extension:
|
|
63
64
|
* - not installed (and new, or required): imported into the catalog (source `bootstrap`, ref
|
|
@@ -66,8 +67,8 @@ import { ExtensionRegistry } from "./registry.js";
|
|
|
66
67
|
* and enabled -> `installed`;
|
|
67
68
|
* - installed from `bootstrap` at a lower version: upgraded the same way (core's release vouched
|
|
68
69
|
* for the version, so new permissions are pre-approved and audited), keeping the desired state
|
|
69
|
-
*
|
|
70
|
-
* - installed at a higher version, or from another source (
|
|
70
|
+
* a super admin chose (a disabled optional plugin stays disabled) -> `upgraded`;
|
|
71
|
+
* - installed at a higher version, or from another source (a super admin upgraded it), or
|
|
71
72
|
* the name is config-declared (`declared`: config wins, no install record is created):
|
|
72
73
|
* untouched, never downgraded -> `kept`;
|
|
73
74
|
* - a declarative plugin (no extension): imported into the catalog only -> `imported` (`kept`
|
|
@@ -306,6 +307,7 @@ let BootstrapService = class BootstrapService {
|
|
|
306
307
|
const failures = [];
|
|
307
308
|
for (const e of o.manifest.plugins) {
|
|
308
309
|
signal.throwIfAborted();
|
|
310
|
+
await this.warnIfHeld(e);
|
|
309
311
|
try {
|
|
310
312
|
const r = await this.entry(e, files.get(e.name), handled, o.imports);
|
|
311
313
|
results.push(carried(r, o.carry));
|
|
@@ -334,6 +336,23 @@ let BootstrapService = class BootstrapService {
|
|
|
334
336
|
return { manifestSha256, results };
|
|
335
337
|
});
|
|
336
338
|
}
|
|
339
|
+
/**
|
|
340
|
+
* A pin whose plugin name an org holds (a live org-owned catalog item): the bootstrap takes no
|
|
341
|
+
* name over (ruling P3-28), so the entry fails; this warning tells the super admin why and
|
|
342
|
+
* which org holds it (final review M4).
|
|
343
|
+
*/
|
|
344
|
+
async warnIfHeld(e) {
|
|
345
|
+
const holder = await otherNameOwner(this.db, e.name, null);
|
|
346
|
+
if (holder?.kind !== "org")
|
|
347
|
+
return;
|
|
348
|
+
this.log.warn("bootstrap: the plugin name is held by an organization; the entry cannot take it over until the organization renames or deletes its plugin", {
|
|
349
|
+
plugin: e.name,
|
|
350
|
+
version: e.version,
|
|
351
|
+
required: e.required,
|
|
352
|
+
ownerOrgId: holder.orgId,
|
|
353
|
+
ownerOrg: holder.name,
|
|
354
|
+
});
|
|
355
|
+
}
|
|
337
356
|
/** The `bootstrap_runs` row and the `bootstrap.completed` audit, in one transaction. */
|
|
338
357
|
async recordDone(manifestSha256, results) {
|
|
339
358
|
await this.db
|
|
@@ -400,9 +419,11 @@ let BootstrapService = class BootstrapService {
|
|
|
400
419
|
// Not new to the manifest: an optional entry left out on purpose stays out (Ruling 5)
|
|
401
420
|
const isNew = handled === undefined || !handled.has(e.name);
|
|
402
421
|
if (!pkg.manifest.extension) {
|
|
422
|
+
await this.markBuiltin(e.name, e.required);
|
|
403
423
|
if (!isNew)
|
|
404
424
|
return { name: e.name, action: "kept", version: e.version };
|
|
405
425
|
const imported = await this.importOnly(e, bytes, ref, imports);
|
|
426
|
+
await this.markBuiltin(e.name, e.required);
|
|
406
427
|
return { name: e.name, action: imported ? "imported" : "kept", version: e.version };
|
|
407
428
|
}
|
|
408
429
|
if (this.registry.declared().has(e.name)) {
|
|
@@ -451,8 +472,41 @@ let BootstrapService = class BootstrapService {
|
|
|
451
472
|
if (e.required && row?.desired_state === "disabled") {
|
|
452
473
|
await this.ops.enable(e.name, null);
|
|
453
474
|
}
|
|
475
|
+
await this.markBuiltin(e.name, e.required);
|
|
454
476
|
return result;
|
|
455
477
|
}
|
|
478
|
+
/**
|
|
479
|
+
* The catalog item of a bootstrap entry follows `required`: a required entry is builtin, offered
|
|
480
|
+
* to every org (scope `all`) and not disabled (migration 0075 could leave a required plugin
|
|
481
|
+
* disabled); an entry that stops being required is no longer builtin and keeps scope `all` (the
|
|
482
|
+
* admin may change it from then on).
|
|
483
|
+
*/
|
|
484
|
+
async markBuiltin(name, required) {
|
|
485
|
+
const touch = { updated_at: sql `now()` };
|
|
486
|
+
if (required) {
|
|
487
|
+
await this.db
|
|
488
|
+
.updateTable("catalog_items")
|
|
489
|
+
.set({
|
|
490
|
+
builtin: true,
|
|
491
|
+
scope: "all",
|
|
492
|
+
disabled: false,
|
|
493
|
+
scope_version: sql `scope_version + 1`,
|
|
494
|
+
...touch,
|
|
495
|
+
})
|
|
496
|
+
.where("name", "=", name)
|
|
497
|
+
.where("deleted_at", "is", null)
|
|
498
|
+
.where((eb) => eb.or([eb("builtin", "=", false), eb("scope", "<>", "all"), eb("disabled", "=", true)]))
|
|
499
|
+
.execute();
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
502
|
+
await this.db
|
|
503
|
+
.updateTable("catalog_items")
|
|
504
|
+
.set({ builtin: false, ...touch })
|
|
505
|
+
.where("name", "=", name)
|
|
506
|
+
.where("deleted_at", "is", null)
|
|
507
|
+
.where("builtin", "=", true)
|
|
508
|
+
.execute();
|
|
509
|
+
}
|
|
456
510
|
/** A declarative plugin: catalog only. Returns false when that version is already imported. */
|
|
457
511
|
async importOnly(e, bytes, ref, imports) {
|
|
458
512
|
try {
|
|
@@ -461,10 +515,7 @@ let BootstrapService = class BootstrapService {
|
|
|
461
515
|
ref,
|
|
462
516
|
integrity: e.integrity,
|
|
463
517
|
});
|
|
464
|
-
await imports.confirm(null, stagingId, {
|
|
465
|
-
reviewHash: review.reviewHash,
|
|
466
|
-
deployExtension: false,
|
|
467
|
-
});
|
|
518
|
+
await imports.confirm(null, stagingId, { reviewHash: review.reviewHash });
|
|
468
519
|
return true;
|
|
469
520
|
}
|
|
470
521
|
catch (err) {
|
|
@@ -474,7 +525,7 @@ let BootstrapService = class BootstrapService {
|
|
|
474
525
|
}
|
|
475
526
|
}
|
|
476
527
|
/**
|
|
477
|
-
* Imports, approves, installs and enables (one review
|
|
528
|
+
* Imports, approves, installs and enables (one review; its confirm deploys the extension). When
|
|
478
529
|
* the catalog already has this version (an earlier run stopped after importing, or the same
|
|
479
530
|
* package came from a marketplace), the extension is deployed from the package store instead.
|
|
480
531
|
*/
|
|
@@ -496,7 +547,6 @@ let BootstrapService = class BootstrapService {
|
|
|
496
547
|
}
|
|
497
548
|
const r = await imports.confirm(null, staged.stagingId, {
|
|
498
549
|
reviewHash: staged.review.reviewHash,
|
|
499
|
-
deployExtension: true,
|
|
500
550
|
enable,
|
|
501
551
|
});
|
|
502
552
|
if (r.deploy?.result === "failed") {
|
|
@@ -552,6 +602,17 @@ let BootstrapService = class BootstrapService {
|
|
|
552
602
|
if (names.length > 0)
|
|
553
603
|
q = q.where("name", "not in", names);
|
|
554
604
|
const rows = await q.returning(["name", "version"]).execute();
|
|
605
|
+
for (const r of rows)
|
|
606
|
+
await this.markBuiltin(r.name, false);
|
|
607
|
+
// A declarative plugin has no install record: clear builtin by catalog name
|
|
608
|
+
let items = this.db
|
|
609
|
+
.updateTable("catalog_items")
|
|
610
|
+
.set({ builtin: false, updated_at: sql `now()` })
|
|
611
|
+
.where("builtin", "=", true)
|
|
612
|
+
.where("deleted_at", "is", null);
|
|
613
|
+
if (names.length > 0)
|
|
614
|
+
items = items.where("name", "not in", names);
|
|
615
|
+
await items.execute();
|
|
555
616
|
return rows.map((r) => ({ name: r.name, action: "required_cleared", version: r.version }));
|
|
556
617
|
}
|
|
557
618
|
};
|
package/dist/extensions/cli.d.ts
CHANGED
|
@@ -54,6 +54,18 @@ export interface ExtensionCli {
|
|
|
54
54
|
publishChanged(plugin: string): Promise<boolean>;
|
|
55
55
|
close(): Promise<void>;
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* The effective deployment config (the startup config `fileValue` completed by the `stored` PG
|
|
59
|
+
* fields) parsed as the host's load gate does: overridable fields may stay empty (spec A §5.4a),
|
|
60
|
+
* hidden and read-only ones must be complete.
|
|
61
|
+
*/
|
|
62
|
+
export declare function parseDeploymentConfig(schema: z.ZodTypeAny, stored: Record<string, unknown>, fileValue: unknown): {
|
|
63
|
+
ok: true;
|
|
64
|
+
value: unknown;
|
|
65
|
+
} | {
|
|
66
|
+
ok: false;
|
|
67
|
+
issues: ConfigIssue[];
|
|
68
|
+
};
|
|
57
69
|
/**
|
|
58
70
|
* The CLI's extension management context (C18, F-Q): a Nest application context with
|
|
59
71
|
* the extensions module over the database and a lazy Redis connection used only for publishing
|
package/dist/extensions/cli.js
CHANGED
|
@@ -13,7 +13,17 @@ import { ExtensionsModule } from "./extensions.module.js";
|
|
|
13
13
|
import { ExtensionHost } from "./host.js";
|
|
14
14
|
import { ExtensionInstalls } from "./installs.js";
|
|
15
15
|
import { PLUGINS_CHANGED_TOPIC } from "./lifecycle-topics.js";
|
|
16
|
+
import { parseLoadGate } from "./org-levels.js";
|
|
16
17
|
import { ExtensionPackageError, extensionPackageApiError, permissionSetOfPackage, readExtensionPackage, } from "./package.js";
|
|
18
|
+
/**
|
|
19
|
+
* The effective deployment config (the startup config `fileValue` completed by the `stored` PG
|
|
20
|
+
* fields) parsed as the host's load gate does: overridable fields may stay empty (spec A §5.4a),
|
|
21
|
+
* hidden and read-only ones must be complete.
|
|
22
|
+
*/
|
|
23
|
+
export function parseDeploymentConfig(schema, stored, fileValue) {
|
|
24
|
+
const r = parseLoadGate(schema, mergeDeploymentConfig(stored, fileValue, schemaFields(schema).map((f) => f.path)));
|
|
25
|
+
return r.success ? { ok: true, value: r.data } : { ok: false, issues: toIssues(r.error) };
|
|
26
|
+
}
|
|
17
27
|
/**
|
|
18
28
|
* The CLI's extension management context (C18, F-Q): a Nest application context with
|
|
19
29
|
* the extensions module over the database and a lazy Redis connection used only for publishing
|
|
@@ -44,8 +54,7 @@ export async function openExtensionCli(config, log, opts = {}) {
|
|
|
44
54
|
const stored = await readStoredDeploymentConfig(db.db, keyring, name, {
|
|
45
55
|
secretPaths: secretPathsOf(schemaFields(schema)),
|
|
46
56
|
});
|
|
47
|
-
|
|
48
|
-
return r.success ? { ok: true, value: r.data } : { ok: false, issues: toIssues(r.error) };
|
|
57
|
+
return parseDeploymentConfig(schema, stored, config.extensionConfig[name]);
|
|
49
58
|
};
|
|
50
59
|
const configIssues = new Map();
|
|
51
60
|
const deploymentConfigs = new Map();
|
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
2
|
/** 校验失败的单条原因:只含路径与按 issue 类型生成的说明,不回显字段值。 */
|
|
3
3
|
export interface ConfigIssue {
|
|
4
|
+
/** The path joined with dots (`""` = the root); ambiguous when a key contains a dot. */
|
|
4
5
|
path: string;
|
|
6
|
+
/** The zod path unjoined (record keys such as endpoint names may contain dots). */
|
|
7
|
+
segments: (string | number)[];
|
|
5
8
|
message: string;
|
|
9
|
+
/**
|
|
10
|
+
* A custom issue whose `params.ui` names a key of the schema's root `x-ui.messages`: the form
|
|
11
|
+
* shows that localized message (spec §4.4). Never zod's own custom text.
|
|
12
|
+
*/
|
|
13
|
+
messageKey?: string;
|
|
6
14
|
}
|
|
7
|
-
|
|
15
|
+
/**
|
|
16
|
+
* The issues of a failed config parse. `messages` is the root `x-ui.messages` of the schema's
|
|
17
|
+
* form JSON Schema (`configMessages`): custom issues naming one of its keys get `messageKey`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function toIssues(error: z.ZodError, messages?: Record<string, unknown>): ConfigIssue[];
|
|
@@ -23,9 +23,26 @@ function issueMessage(i) {
|
|
|
23
23
|
return "invalid value";
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
/** The `params.ui` of a custom issue when it names one of `messages` (own keys only). */
|
|
27
|
+
function messageKeyOf(i, messages) {
|
|
28
|
+
if (i.code !== "custom" || messages === undefined)
|
|
29
|
+
return undefined;
|
|
30
|
+
const key = i.params?.ui;
|
|
31
|
+
return typeof key === "string" && Object.hasOwn(messages, key) ? key : undefined;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The issues of a failed config parse. `messages` is the root `x-ui.messages` of the schema's
|
|
35
|
+
* form JSON Schema (`configMessages`): custom issues naming one of its keys get `messageKey`.
|
|
36
|
+
*/
|
|
37
|
+
export function toIssues(error, messages) {
|
|
38
|
+
return error.issues.map((i) => {
|
|
39
|
+
const segments = i.path.map((s) => (typeof s === "number" ? s : String(s)));
|
|
40
|
+
const messageKey = messageKeyOf(i, messages);
|
|
41
|
+
return {
|
|
42
|
+
path: segments.join("."),
|
|
43
|
+
segments,
|
|
44
|
+
message: issueMessage(i),
|
|
45
|
+
...(messageKey !== undefined && { messageKey }),
|
|
46
|
+
};
|
|
47
|
+
});
|
|
31
48
|
}
|
|
@@ -1,9 +1,45 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export type JsonSchema = Record<string, unknown>;
|
|
3
1
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* - 以输入侧形态输出(含 default),不带 `$schema`。
|
|
2
|
+
* Config schema → JSON Schema for forms. The conversion (and the secret scrub) lives in the SDK
|
|
3
|
+
* (`configJsonSchema`, extension config forms spec §4.1) so the packer, the checks and the kernel
|
|
4
|
+
* share one implementation; the kernel keeps no copy.
|
|
8
5
|
*/
|
|
9
|
-
|
|
6
|
+
import { type ConfigUiProblem, type JsonSchema } from "@capybara-hq/plugin-sdk";
|
|
7
|
+
import type { z } from "zod";
|
|
8
|
+
export { configJsonSchema as configToJsonSchema, type JsonSchema } from "@capybara-hq/plugin-sdk";
|
|
9
|
+
/** The config level a schema belongs to (which hints `validateConfigUi` allows). */
|
|
10
|
+
export type ConfigLevel = "deployment" | "org" | "connection";
|
|
11
|
+
/** A config schema as served to forms, with the problems of its hints (empty = kept). */
|
|
12
|
+
export interface ConfigFormSchema {
|
|
13
|
+
/** Shared by every caller: clone it before handing it out or changing it. */
|
|
14
|
+
readonly schema: JsonSchema;
|
|
15
|
+
readonly problems: ConfigUiProblem[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Removes every `x-ui` from a JSON Schema in place (a property named `x-ui` is kept, and so are
|
|
19
|
+
* values: `default`, `const`, `enum` and `examples` are left as they are).
|
|
20
|
+
*/
|
|
21
|
+
export declare function stripConfigUi(node: unknown): void;
|
|
22
|
+
/**
|
|
23
|
+
* Validates the hints of a JSON Schema at a level and strips every `x-ui` when there is any
|
|
24
|
+
* problem (in place): invalid hints never reach a form, and never fail a load (spec §4.1).
|
|
25
|
+
*/
|
|
26
|
+
export declare function checkConfigUi(schema: JsonSchema, level: ConfigLevel): ConfigUiProblem[];
|
|
27
|
+
/** A config schema's form JSON Schema ({@link checkConfigUi} applied), cached per schema object. */
|
|
28
|
+
export declare function configFormSchema(schema: z.ZodTypeAny, level: ConfigLevel): ConfigFormSchema;
|
|
29
|
+
/**
|
|
30
|
+
* {@link configFormSchema} that never throws, for every caller that serves a form schema or reads
|
|
31
|
+
* its messages (deployment, org, connection, issues). A hint conversion that throws (a hand-made
|
|
32
|
+
* package, e.g. hints that won't serialize as JSON) drops the hints: the plain schema with every
|
|
33
|
+
* `x-ui` stripped, else `null` when even the plain conversion fails. `onFallback` runs once per
|
|
34
|
+
* schema object and level on this replica (the caller's one warning); later calls reuse the result.
|
|
35
|
+
*/
|
|
36
|
+
export declare function safeConfigFormSchema(schema: z.ZodTypeAny, level: ConfigLevel, onFallback: (err: unknown, fallback: "plain" | "none") => void): ConfigFormSchema | null;
|
|
37
|
+
/**
|
|
38
|
+
* The secret record paths some `x-ui.secrets[].path` of a form schema names (spec §4.3), anywhere in
|
|
39
|
+
* the schema. Read from a checked schema: one whose hints were invalid was stripped and names none.
|
|
40
|
+
*/
|
|
41
|
+
export declare function hintedSecretPaths(node: unknown, out?: Set<string>): Set<string>;
|
|
42
|
+
/** The root `x-ui.messages` of a form schema (the localized texts of custom issues), if any. */
|
|
43
|
+
export declare function configMessages(schema: JsonSchema | null | undefined): Record<string, unknown> | undefined;
|
|
44
|
+
/** A short text of hint problems for a status detail or a log (the first few). */
|
|
45
|
+
export declare function describeConfigUiProblems(level: ConfigLevel, problems: ConfigUiProblem[]): string;
|
|
@@ -1,73 +1,139 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
/** JSON Schema 无法表达的 zod 类型:降级为 `{}` 并标注 `x-unsupported`。 */
|
|
3
|
-
const UNSUPPORTED = new Set([
|
|
4
|
-
"bigint",
|
|
5
|
-
"date",
|
|
6
|
-
"symbol",
|
|
7
|
-
"undefined",
|
|
8
|
-
"void",
|
|
9
|
-
"nan",
|
|
10
|
-
"map",
|
|
11
|
-
"set",
|
|
12
|
-
"function",
|
|
13
|
-
"promise",
|
|
14
|
-
"custom",
|
|
15
|
-
"file",
|
|
16
|
-
]);
|
|
17
1
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* - 以输入侧形态输出(含 default),不带 `$schema`。
|
|
2
|
+
* Config schema → JSON Schema for forms. The conversion (and the secret scrub) lives in the SDK
|
|
3
|
+
* (`configJsonSchema`, extension config forms spec §4.1) so the packer, the checks and the kernel
|
|
4
|
+
* share one implementation; the kernel keeps no copy.
|
|
22
5
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
override: (ctx) => {
|
|
28
|
-
const js = ctx.jsonSchema;
|
|
29
|
-
const def = ctx.zodSchema._zod.def;
|
|
30
|
-
if (js.secret === true) {
|
|
31
|
-
delete js.secret;
|
|
32
|
-
js["x-secret"] = true;
|
|
33
|
-
}
|
|
34
|
-
if (UNSUPPORTED.has(def.type))
|
|
35
|
-
js["x-unsupported"] = true;
|
|
36
|
-
},
|
|
37
|
-
});
|
|
38
|
-
delete out.$schema;
|
|
39
|
-
scrubSecrets(out);
|
|
40
|
-
return out;
|
|
41
|
-
}
|
|
42
|
-
/** 会泄露取值的关键字:密钥字段一律不输出。 */
|
|
43
|
-
const VALUE_KEYWORDS = ["default", "examples", "const", "enum"];
|
|
44
|
-
/** 值为「名字 -> 子 schema」映射的关键字:其键是用户字段名,不是关键字。 */
|
|
6
|
+
import { configJsonSchema, validateConfigUi, } from "@capybara-hq/plugin-sdk";
|
|
7
|
+
export { configJsonSchema as configToJsonSchema } from "@capybara-hq/plugin-sdk";
|
|
8
|
+
const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
9
|
+
/** Keywords whose value maps names to sub-schemas: their keys are field names, not keywords. */
|
|
45
10
|
const SCHEMA_MAPS = new Set(["properties", "patternProperties", "$defs", "definitions"]);
|
|
11
|
+
/** Keywords whose value is data, not a schema: never recursed into. */
|
|
12
|
+
const VALUE_KEYWORDS = new Set(["default", "const", "enum", "examples"]);
|
|
46
13
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* `properties` 等映射里的键是字段名,名为 default / enum 的字段照常遍历。
|
|
14
|
+
* Removes every `x-ui` from a JSON Schema in place (a property named `x-ui` is kept, and so are
|
|
15
|
+
* values: `default`, `const`, `enum` and `examples` are left as they are).
|
|
50
16
|
*/
|
|
51
|
-
function
|
|
17
|
+
export function stripConfigUi(node) {
|
|
52
18
|
if (Array.isArray(node)) {
|
|
53
19
|
for (const n of node)
|
|
54
|
-
|
|
20
|
+
stripConfigUi(n);
|
|
55
21
|
return;
|
|
56
22
|
}
|
|
57
|
-
if (
|
|
23
|
+
if (!isObj(node))
|
|
58
24
|
return;
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
for (const [k, v] of Object.entries(o)) {
|
|
65
|
-
if (SCHEMA_MAPS.has(k) && typeof v === "object" && v !== null) {
|
|
25
|
+
delete node["x-ui"];
|
|
26
|
+
for (const [k, v] of Object.entries(node)) {
|
|
27
|
+
if (VALUE_KEYWORDS.has(k))
|
|
28
|
+
continue;
|
|
29
|
+
if (SCHEMA_MAPS.has(k) && isObj(v))
|
|
66
30
|
for (const child of Object.values(v))
|
|
67
|
-
|
|
31
|
+
stripConfigUi(child);
|
|
32
|
+
else
|
|
33
|
+
stripConfigUi(v);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Validates the hints of a JSON Schema at a level and strips every `x-ui` when there is any
|
|
38
|
+
* problem (in place): invalid hints never reach a form, and never fail a load (spec §4.1).
|
|
39
|
+
*/
|
|
40
|
+
export function checkConfigUi(schema, level) {
|
|
41
|
+
const problems = validateConfigUi(schema, level);
|
|
42
|
+
if (problems.length > 0)
|
|
43
|
+
stripConfigUi(schema);
|
|
44
|
+
return problems;
|
|
45
|
+
}
|
|
46
|
+
/** Manifests are immutable: one conversion per zod schema object and level (read-only, per replica). */
|
|
47
|
+
const caches = {
|
|
48
|
+
deployment: new WeakMap(),
|
|
49
|
+
org: new WeakMap(),
|
|
50
|
+
connection: new WeakMap(),
|
|
51
|
+
};
|
|
52
|
+
/** A config schema's form JSON Schema ({@link checkConfigUi} applied), cached per schema object. */
|
|
53
|
+
export function configFormSchema(schema, level) {
|
|
54
|
+
const cache = caches[level];
|
|
55
|
+
let r = cache.get(schema);
|
|
56
|
+
if (!r) {
|
|
57
|
+
const js = configJsonSchema(schema);
|
|
58
|
+
r = { schema: js, problems: checkConfigUi(js, level) };
|
|
59
|
+
cache.set(schema, r);
|
|
60
|
+
}
|
|
61
|
+
return r;
|
|
62
|
+
}
|
|
63
|
+
/** The schemas whose hinted conversion threw: their fallback (plain schema, or null). */
|
|
64
|
+
const fallbacks = {
|
|
65
|
+
deployment: new WeakMap(),
|
|
66
|
+
org: new WeakMap(),
|
|
67
|
+
connection: new WeakMap(),
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* {@link configFormSchema} that never throws, for every caller that serves a form schema or reads
|
|
71
|
+
* its messages (deployment, org, connection, issues). A hint conversion that throws (a hand-made
|
|
72
|
+
* package, e.g. hints that won't serialize as JSON) drops the hints: the plain schema with every
|
|
73
|
+
* `x-ui` stripped, else `null` when even the plain conversion fails. `onFallback` runs once per
|
|
74
|
+
* schema object and level on this replica (the caller's one warning); later calls reuse the result.
|
|
75
|
+
*/
|
|
76
|
+
export function safeConfigFormSchema(schema, level, onFallback) {
|
|
77
|
+
const failed = fallbacks[level].get(schema);
|
|
78
|
+
if (failed !== undefined)
|
|
79
|
+
return failed;
|
|
80
|
+
try {
|
|
81
|
+
return configFormSchema(schema, level);
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
let r = null;
|
|
85
|
+
try {
|
|
86
|
+
const plain = configJsonSchema(schema);
|
|
87
|
+
stripConfigUi(plain);
|
|
88
|
+
r = { schema: plain, problems: [] };
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
r = null;
|
|
68
92
|
}
|
|
69
|
-
|
|
70
|
-
|
|
93
|
+
fallbacks[level].set(schema, r);
|
|
94
|
+
onFallback(err, r ? "plain" : "none");
|
|
95
|
+
return r;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The secret record paths some `x-ui.secrets[].path` of a form schema names (spec §4.3), anywhere in
|
|
100
|
+
* the schema. Read from a checked schema: one whose hints were invalid was stripped and names none.
|
|
101
|
+
*/
|
|
102
|
+
export function hintedSecretPaths(node, out = new Set()) {
|
|
103
|
+
if (Array.isArray(node)) {
|
|
104
|
+
for (const n of node)
|
|
105
|
+
hintedSecretPaths(n, out);
|
|
106
|
+
return out;
|
|
107
|
+
}
|
|
108
|
+
if (!isObj(node))
|
|
109
|
+
return out;
|
|
110
|
+
const hints = node["x-ui"];
|
|
111
|
+
if (isObj(hints) && Array.isArray(hints.secrets)) {
|
|
112
|
+
for (const s of hints.secrets) {
|
|
113
|
+
if (isObj(s) && typeof s.path === "string")
|
|
114
|
+
out.add(s.path);
|
|
71
115
|
}
|
|
72
116
|
}
|
|
117
|
+
for (const [k, v] of Object.entries(node)) {
|
|
118
|
+
if (k === "x-ui" || VALUE_KEYWORDS.has(k))
|
|
119
|
+
continue;
|
|
120
|
+
if (SCHEMA_MAPS.has(k) && isObj(v)) {
|
|
121
|
+
for (const child of Object.values(v))
|
|
122
|
+
hintedSecretPaths(child, out);
|
|
123
|
+
}
|
|
124
|
+
else
|
|
125
|
+
hintedSecretPaths(v, out);
|
|
126
|
+
}
|
|
127
|
+
return out;
|
|
128
|
+
}
|
|
129
|
+
/** The root `x-ui.messages` of a form schema (the localized texts of custom issues), if any. */
|
|
130
|
+
export function configMessages(schema) {
|
|
131
|
+
const hints = schema?.["x-ui"];
|
|
132
|
+
return isObj(hints) && isObj(hints.messages) ? hints.messages : undefined;
|
|
133
|
+
}
|
|
134
|
+
/** A short text of hint problems for a status detail or a log (the first few). */
|
|
135
|
+
export function describeConfigUiProblems(level, problems) {
|
|
136
|
+
const shown = problems.slice(0, 5).map((p) => `${p.path || "<root>"}: ${p.message}`);
|
|
137
|
+
const more = problems.length > shown.length ? `; and ${problems.length - shown.length} more` : "";
|
|
138
|
+
return `${level} config UI hints ignored (${shown.join("; ")}${more})`;
|
|
73
139
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { core } from "zod";
|
|
2
2
|
import { type Keyring } from "../ctx/secrets.js";
|
|
3
3
|
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
4
|
+
import type { JsonSchema } from "./config-json-schema.js";
|
|
4
5
|
type Obj = Record<string, unknown>;
|
|
5
6
|
/**
|
|
6
7
|
* The stored half of the deployment-level extension config (C10): where PG keeps it, how it is read
|
|
@@ -16,6 +17,11 @@ export declare const secretKey: (plugin: string, path: string) => string;
|
|
|
16
17
|
export interface DeploymentSchemaInfo {
|
|
17
18
|
version: string;
|
|
18
19
|
schema?: core.$ZodType | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Without `schema` (no module on this replica): the package's static form schema
|
|
22
|
+
* (`extension.configSchemas.deployment`), shown but never used to validate.
|
|
23
|
+
*/
|
|
24
|
+
jsonSchema?: JsonSchema | undefined;
|
|
19
25
|
fields: {
|
|
20
26
|
path: string;
|
|
21
27
|
secret: boolean;
|