@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
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
-- Platform components (phase 2, plan 2026-11-06-plugin-scope-phase-2.md rulings A2-C2, E2): skills,
|
|
2
|
+
-- agent templates and connector templates owned by the deployment instead of an org, with their own
|
|
3
|
+
-- scope (follow the plugin's, or their own), an org list (named) and per-org switches. Org copies
|
|
4
|
+
-- link to them. Expand-only: nothing existing is changed except `agent_templates.plugin_name`
|
|
5
|
+
-- losing NOT NULL (a template without a plugin is the bare `<name>`).
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS platform_skills (
|
|
8
|
+
id text PRIMARY KEY,
|
|
9
|
+
catalog_item_id uuid REFERENCES catalog_items(id) ON DELETE SET NULL,
|
|
10
|
+
plugin_name text,
|
|
11
|
+
name text NOT NULL,
|
|
12
|
+
description text NOT NULL,
|
|
13
|
+
description_zh text,
|
|
14
|
+
current_version integer NOT NULL CHECK (current_version >= 1),
|
|
15
|
+
scope_mode text NOT NULL DEFAULT 'follow' CHECK (scope_mode IN ('follow', 'own')),
|
|
16
|
+
scope text NOT NULL DEFAULT 'optional' CHECK (scope IN ('all', 'optional', 'named')),
|
|
17
|
+
disabled boolean NOT NULL DEFAULT false,
|
|
18
|
+
shown_to_others boolean NOT NULL DEFAULT true,
|
|
19
|
+
scope_version integer NOT NULL DEFAULT 0,
|
|
20
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
21
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
22
|
+
deleted_at timestamptz
|
|
23
|
+
);
|
|
24
|
+
CREATE UNIQUE INDEX IF NOT EXISTS platform_skills_live_name_uq
|
|
25
|
+
ON platform_skills ((coalesce(plugin_name, '')), name)
|
|
26
|
+
WHERE deleted_at IS NULL;
|
|
27
|
+
|
|
28
|
+
CREATE TABLE IF NOT EXISTS platform_skill_versions (
|
|
29
|
+
skill_id text NOT NULL REFERENCES platform_skills(id) ON DELETE CASCADE,
|
|
30
|
+
version integer NOT NULL CHECK (version >= 1),
|
|
31
|
+
manifest jsonb NOT NULL,
|
|
32
|
+
object_prefix text NOT NULL,
|
|
33
|
+
catalog_version text,
|
|
34
|
+
source_format text NOT NULL DEFAULT 'capybara' CHECK (source_format IN ('capybara', 'claude-code')),
|
|
35
|
+
suggest_pinned boolean NOT NULL DEFAULT false,
|
|
36
|
+
updated_on_own boolean NOT NULL DEFAULT false,
|
|
37
|
+
created_by text,
|
|
38
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
39
|
+
PRIMARY KEY (skill_id, version)
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
CREATE TABLE IF NOT EXISTS platform_agent_templates (
|
|
43
|
+
id text PRIMARY KEY,
|
|
44
|
+
catalog_item_id uuid REFERENCES catalog_items(id) ON DELETE SET NULL,
|
|
45
|
+
plugin_name text,
|
|
46
|
+
name text NOT NULL,
|
|
47
|
+
description text,
|
|
48
|
+
description_zh text,
|
|
49
|
+
current_version integer NOT NULL CHECK (current_version >= 1),
|
|
50
|
+
scope_mode text NOT NULL DEFAULT 'follow' CHECK (scope_mode IN ('follow', 'own')),
|
|
51
|
+
scope text NOT NULL DEFAULT 'optional' CHECK (scope IN ('all', 'optional', 'named')),
|
|
52
|
+
disabled boolean NOT NULL DEFAULT false,
|
|
53
|
+
shown_to_others boolean NOT NULL DEFAULT true,
|
|
54
|
+
scope_version integer NOT NULL DEFAULT 0,
|
|
55
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
56
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
57
|
+
deleted_at timestamptz
|
|
58
|
+
);
|
|
59
|
+
CREATE UNIQUE INDEX IF NOT EXISTS platform_agent_templates_live_name_uq
|
|
60
|
+
ON platform_agent_templates ((coalesce(plugin_name, '')), name)
|
|
61
|
+
WHERE deleted_at IS NULL;
|
|
62
|
+
|
|
63
|
+
CREATE TABLE IF NOT EXISTS platform_agent_template_versions (
|
|
64
|
+
template_id text NOT NULL REFERENCES platform_agent_templates(id) ON DELETE CASCADE,
|
|
65
|
+
version integer NOT NULL CHECK (version >= 1),
|
|
66
|
+
definition jsonb NOT NULL,
|
|
67
|
+
object_prefix text,
|
|
68
|
+
catalog_version text,
|
|
69
|
+
source_format text NOT NULL DEFAULT 'capybara' CHECK (source_format IN ('capybara', 'claude-code')),
|
|
70
|
+
suggest_pinned boolean NOT NULL DEFAULT false,
|
|
71
|
+
updated_on_own boolean NOT NULL DEFAULT false,
|
|
72
|
+
created_by text,
|
|
73
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
74
|
+
PRIMARY KEY (template_id, version)
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
CREATE TABLE IF NOT EXISTS platform_connector_templates (
|
|
78
|
+
id text PRIMARY KEY,
|
|
79
|
+
catalog_item_id uuid NOT NULL REFERENCES catalog_items(id) ON DELETE CASCADE,
|
|
80
|
+
template_id text NOT NULL,
|
|
81
|
+
current_version text NOT NULL,
|
|
82
|
+
file jsonb NOT NULL,
|
|
83
|
+
scope_mode text NOT NULL DEFAULT 'follow' CHECK (scope_mode IN ('follow', 'own')),
|
|
84
|
+
scope text NOT NULL DEFAULT 'optional' CHECK (scope IN ('all', 'optional', 'named')),
|
|
85
|
+
disabled boolean NOT NULL DEFAULT false,
|
|
86
|
+
shown_to_others boolean NOT NULL DEFAULT true,
|
|
87
|
+
scope_version integer NOT NULL DEFAULT 0,
|
|
88
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
89
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
90
|
+
deleted_at timestamptz
|
|
91
|
+
);
|
|
92
|
+
CREATE UNIQUE INDEX IF NOT EXISTS platform_connector_templates_live_uq
|
|
93
|
+
ON platform_connector_templates (catalog_item_id, template_id)
|
|
94
|
+
WHERE deleted_at IS NULL;
|
|
95
|
+
|
|
96
|
+
-- Scope of an own-scope component: the orgs it is offered to (named) and each org's switch.
|
|
97
|
+
CREATE TABLE IF NOT EXISTS component_scope_orgs (
|
|
98
|
+
kind text NOT NULL CHECK (kind IN ('skill', 'agent_template', 'connector_template')),
|
|
99
|
+
component_id text NOT NULL,
|
|
100
|
+
org_id text NOT NULL REFERENCES orgs(id) ON DELETE CASCADE,
|
|
101
|
+
PRIMARY KEY (kind, component_id, org_id)
|
|
102
|
+
);
|
|
103
|
+
CREATE TABLE IF NOT EXISTS component_org_switches (
|
|
104
|
+
kind text NOT NULL CHECK (kind IN ('skill', 'agent_template', 'connector_template')),
|
|
105
|
+
component_id text NOT NULL,
|
|
106
|
+
org_id text NOT NULL REFERENCES orgs(id) ON DELETE CASCADE,
|
|
107
|
+
enabled boolean NOT NULL,
|
|
108
|
+
updated_by text REFERENCES accounts(id) ON DELETE SET NULL,
|
|
109
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
110
|
+
PRIMARY KEY (kind, component_id, org_id)
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
-- Links from the org copies (ruling B2): a pin keeps the copy on its own stored version.
|
|
114
|
+
ALTER TABLE skills ADD COLUMN IF NOT EXISTS platform_skill_id text
|
|
115
|
+
REFERENCES platform_skills(id) ON DELETE SET NULL;
|
|
116
|
+
ALTER TABLE skills ADD COLUMN IF NOT EXISTS pinned_version integer;
|
|
117
|
+
ALTER TABLE agent_templates ADD COLUMN IF NOT EXISTS platform_template_id text
|
|
118
|
+
REFERENCES platform_agent_templates(id) ON DELETE SET NULL;
|
|
119
|
+
ALTER TABLE agent_templates ADD COLUMN IF NOT EXISTS pinned_version integer;
|
|
120
|
+
ALTER TABLE connectors ADD COLUMN IF NOT EXISTS platform_template_id text
|
|
121
|
+
REFERENCES platform_connector_templates(id) ON DELETE SET NULL;
|
|
122
|
+
|
|
123
|
+
-- A template without a plugin is the bare `<name>`; the live-name index must still hold for NULLs.
|
|
124
|
+
ALTER TABLE agent_templates ALTER COLUMN plugin_name DROP NOT NULL;
|
|
125
|
+
-- capybara:allow-destructive the index is recreated in the same transaction over coalesce(plugin_name, '') so NULL plugin names stay unique; no data change
|
|
126
|
+
DROP INDEX IF EXISTS agent_templates_live_name_uq;
|
|
127
|
+
CREATE UNIQUE INDEX IF NOT EXISTS agent_templates_live_name_uq
|
|
128
|
+
ON agent_templates (org_id, (coalesce(plugin_name, '')), name)
|
|
129
|
+
WHERE deleted_at IS NULL;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
-- Plugin scope phase 2, Task 5: the migration of org copies to platform components
|
|
2
|
+
-- (`catalog/platform-migration.ts`, the worker job `platform-components-migrate`), and the org
|
|
3
|
+
-- notices it writes for the org admins' inbox.
|
|
4
|
+
|
|
5
|
+
-- The catalog version the item's platform components were last written from
|
|
6
|
+
-- (`PlatformComponents.syncFromVersion`); null = never: the migration job writes them once. Removed
|
|
7
|
+
-- components are not brought back, since an item with a version here is never synced by the job.
|
|
8
|
+
ALTER TABLE catalog_items ADD COLUMN IF NOT EXISTS platform_synced_version text;
|
|
9
|
+
|
|
10
|
+
-- One row per run of the job (at every worker start and once a day): when it ran and what it
|
|
11
|
+
-- changed; rows older than 30 days are pruned, except the first finished run, whose start is the
|
|
12
|
+
-- cutoff of the one-shot rename step (only org skills whose current version predates it).
|
|
13
|
+
CREATE TABLE IF NOT EXISTS platform_migration_runs (
|
|
14
|
+
id uuid PRIMARY KEY,
|
|
15
|
+
started_at timestamptz NOT NULL DEFAULT now(),
|
|
16
|
+
finished_at timestamptz,
|
|
17
|
+
stats jsonb NOT NULL DEFAULT '{}'::jsonb
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
-- A notice for an org's admins (inbox item kind = `kind`), until one of them dismisses it.
|
|
21
|
+
-- `skill_renamed`: detail `{ skillId, from, to, platformSkillId, plugin }`.
|
|
22
|
+
CREATE TABLE IF NOT EXISTS org_notices (
|
|
23
|
+
id uuid PRIMARY KEY,
|
|
24
|
+
org_id text NOT NULL REFERENCES orgs(id) ON DELETE CASCADE,
|
|
25
|
+
kind text NOT NULL CHECK (kind IN ('skill_renamed')),
|
|
26
|
+
detail jsonb NOT NULL,
|
|
27
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
28
|
+
dismissed_at timestamptz,
|
|
29
|
+
dismissed_by text REFERENCES accounts(id) ON DELETE SET NULL
|
|
30
|
+
);
|
|
31
|
+
CREATE INDEX IF NOT EXISTS org_notices_open_idx
|
|
32
|
+
ON org_notices (org_id, created_at DESC)
|
|
33
|
+
WHERE dismissed_at IS NULL;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
-- Plugin scope phase 2, Task 11: the plugin scope sync's open failures, for the super admin's
|
|
2
|
+
-- inbox (`catalog/scope-sync.ts` writes them, `inbox/platform-inbox.service.ts` reads them). One
|
|
3
|
+
-- row per (item, org) whose last sync attempt failed; the next sync of that pair that does not
|
|
4
|
+
-- fail deletes it. The audit event `plugin.scope_sync_failed` stays the history. `op`: `install`
|
|
5
|
+
-- (turning it on), `uninstall` (turning it off), `dependencies` (installing the dependencies a
|
|
6
|
+
-- platform update added to a live install).
|
|
7
|
+
CREATE TABLE IF NOT EXISTS plugin_scope_sync_failures (
|
|
8
|
+
item_id uuid NOT NULL REFERENCES catalog_items(id) ON DELETE CASCADE,
|
|
9
|
+
org_id text NOT NULL REFERENCES orgs(id) ON DELETE CASCADE,
|
|
10
|
+
op text NOT NULL CHECK (op IN ('install', 'uninstall', 'dependencies')),
|
|
11
|
+
code text NOT NULL,
|
|
12
|
+
message text NOT NULL,
|
|
13
|
+
failed_at timestamptz NOT NULL DEFAULT now(),
|
|
14
|
+
PRIMARY KEY (item_id, org_id)
|
|
15
|
+
);
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
-- Org-owned items, sharing, pending uploads and notices (phase 3, plan
|
|
2
|
+
-- 2026-11-06-plugin-scope-phase-3.md Task 1; rulings P3-3, P3-5, P3-6, P3-8, F27). Expand-only:
|
|
3
|
+
-- every column is nullable or defaulted, and existing rows stay platform-owned (owner_org_id NULL)
|
|
4
|
+
-- and not shareable. The only dropped objects are the old live-name indexes and the old notice
|
|
5
|
+
-- kind check, replaced in the same file.
|
|
6
|
+
|
|
7
|
+
-- Owners and pending uploads of catalog items. `owner_org_id` NULL = the platform; an org's
|
|
8
|
+
-- upload that carries an extension waits for the super admin (`awaiting_confirmation`), with the
|
|
9
|
+
-- uploaded version in `pending_*` until confirmed (P3-9 to P3-13).
|
|
10
|
+
ALTER TABLE catalog_items ADD COLUMN IF NOT EXISTS owner_org_id text
|
|
11
|
+
REFERENCES orgs(id) ON DELETE SET NULL;
|
|
12
|
+
ALTER TABLE catalog_items ADD COLUMN IF NOT EXISTS shareable boolean NOT NULL DEFAULT false;
|
|
13
|
+
ALTER TABLE catalog_items ADD COLUMN IF NOT EXISTS awaiting_confirmation boolean NOT NULL DEFAULT false;
|
|
14
|
+
ALTER TABLE catalog_items ADD COLUMN IF NOT EXISTS pending_version text;
|
|
15
|
+
ALTER TABLE catalog_items ADD COLUMN IF NOT EXISTS pending_by text
|
|
16
|
+
REFERENCES accounts(id) ON DELETE SET NULL;
|
|
17
|
+
ALTER TABLE catalog_items ADD COLUMN IF NOT EXISTS pending_at timestamptz;
|
|
18
|
+
CREATE INDEX IF NOT EXISTS catalog_items_owner_idx
|
|
19
|
+
ON catalog_items (owner_org_id)
|
|
20
|
+
WHERE owner_org_id IS NOT NULL AND deleted_at IS NULL;
|
|
21
|
+
|
|
22
|
+
-- Whether a version may be used (ruling P3-52): `applied_at` is set when it was applied or
|
|
23
|
+
-- confirmed (a platform import is applied as it is written: the default; an org's upload writes
|
|
24
|
+
-- NULL until its owner applies it or the super admin confirms it), `rejected_at` when the super
|
|
25
|
+
-- admin rejected it. Readers serving other orgs or the generic update use only applied, not
|
|
26
|
+
-- rejected versions, whoever owns the item (a transfer keeps the version rows). Existing rows
|
|
27
|
+
-- are platform imports: applied.
|
|
28
|
+
ALTER TABLE catalog_item_versions ADD COLUMN IF NOT EXISTS applied_at timestamptz DEFAULT now();
|
|
29
|
+
ALTER TABLE catalog_item_versions ADD COLUMN IF NOT EXISTS rejected_at timestamptz;
|
|
30
|
+
|
|
31
|
+
-- Platform components: the owning org (NULL = platform), the org they were created in
|
|
32
|
+
-- (`origin_org_id`, no FK, immutable; F27) and the share switch (P3-3, P3-5).
|
|
33
|
+
ALTER TABLE platform_skills ADD COLUMN IF NOT EXISTS owner_org_id text
|
|
34
|
+
REFERENCES orgs(id) ON DELETE SET NULL;
|
|
35
|
+
ALTER TABLE platform_skills ADD COLUMN IF NOT EXISTS origin_org_id text;
|
|
36
|
+
ALTER TABLE platform_skills ADD COLUMN IF NOT EXISTS shareable boolean NOT NULL DEFAULT false;
|
|
37
|
+
ALTER TABLE platform_agent_templates ADD COLUMN IF NOT EXISTS owner_org_id text
|
|
38
|
+
REFERENCES orgs(id) ON DELETE SET NULL;
|
|
39
|
+
ALTER TABLE platform_agent_templates ADD COLUMN IF NOT EXISTS origin_org_id text;
|
|
40
|
+
ALTER TABLE platform_agent_templates ADD COLUMN IF NOT EXISTS shareable boolean NOT NULL DEFAULT false;
|
|
41
|
+
ALTER TABLE platform_connector_templates ADD COLUMN IF NOT EXISTS owner_org_id text
|
|
42
|
+
REFERENCES orgs(id) ON DELETE SET NULL;
|
|
43
|
+
ALTER TABLE platform_connector_templates ADD COLUMN IF NOT EXISTS shareable boolean NOT NULL DEFAULT false;
|
|
44
|
+
|
|
45
|
+
-- Live names are unique per origin org (P3-5); the new indexes come first, then the old ones go
|
|
46
|
+
-- (F27: new names, so a re-run is a true no-op).
|
|
47
|
+
CREATE UNIQUE INDEX IF NOT EXISTS platform_skills_live_name_origin_uq
|
|
48
|
+
ON platform_skills ((coalesce(plugin_name, '')), name, (coalesce(origin_org_id, '')))
|
|
49
|
+
WHERE deleted_at IS NULL;
|
|
50
|
+
CREATE UNIQUE INDEX IF NOT EXISTS platform_agent_templates_live_name_origin_uq
|
|
51
|
+
ON platform_agent_templates ((coalesce(plugin_name, '')), name, (coalesce(origin_org_id, '')))
|
|
52
|
+
WHERE deleted_at IS NULL;
|
|
53
|
+
-- capybara:allow-destructive replaced by platform_skills_live_name_origin_uq created above in this file; no data change
|
|
54
|
+
DROP INDEX IF EXISTS platform_skills_live_name_uq;
|
|
55
|
+
-- capybara:allow-destructive replaced by platform_agent_templates_live_name_origin_uq created above in this file; no data change
|
|
56
|
+
DROP INDEX IF EXISTS platform_agent_templates_live_name_uq;
|
|
57
|
+
|
|
58
|
+
-- Org copies: whether the owner shares the copy with other orgs (P3-3, P3-6).
|
|
59
|
+
ALTER TABLE skills ADD COLUMN IF NOT EXISTS shareable boolean NOT NULL DEFAULT false;
|
|
60
|
+
ALTER TABLE agent_templates ADD COLUMN IF NOT EXISTS shareable boolean NOT NULL DEFAULT false;
|
|
61
|
+
|
|
62
|
+
-- An org's upload waits in staging under its org (P3-8); deleting the org drops the staging.
|
|
63
|
+
ALTER TABLE plugin_import_staging ADD COLUMN IF NOT EXISTS org_id text
|
|
64
|
+
REFERENCES orgs(id) ON DELETE CASCADE;
|
|
65
|
+
|
|
66
|
+
-- New org notice kinds. 0082 declared the CHECK inline, so it is named org_notices_kind_check.
|
|
67
|
+
-- capybara:allow-destructive the check is added back with the wider kind list in the next statement; existing rows (skill_renamed) satisfy it
|
|
68
|
+
ALTER TABLE org_notices DROP CONSTRAINT IF EXISTS org_notices_kind_check;
|
|
69
|
+
ALTER TABLE org_notices ADD CONSTRAINT org_notices_kind_check
|
|
70
|
+
CHECK (kind IN ('skill_renamed', 'item_shared', 'shared_item_updated',
|
|
71
|
+
'upload_confirmed', 'upload_rejected'));
|
|
72
|
+
|
|
73
|
+
-- A notice for the super admins (platform inbox), until one of them dismisses it.
|
|
74
|
+
-- `ownership_transferred`: a deleted org's shared item now belongs to the platform.
|
|
75
|
+
CREATE TABLE IF NOT EXISTS platform_notices (
|
|
76
|
+
id uuid PRIMARY KEY,
|
|
77
|
+
kind text NOT NULL CHECK (kind IN ('ownership_transferred')),
|
|
78
|
+
detail jsonb NOT NULL,
|
|
79
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
80
|
+
dismissed_at timestamptz,
|
|
81
|
+
dismissed_by text REFERENCES accounts(id) ON DELETE SET NULL
|
|
82
|
+
);
|
|
83
|
+
CREATE INDEX IF NOT EXISTS platform_notices_open_idx
|
|
84
|
+
ON platform_notices (created_at DESC)
|
|
85
|
+
WHERE dismissed_at IS NULL;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
-- Agent templates, phase 4 (spec 2026-11-05-plugin-component-management-design.md §15.2: P4-7
|
|
2
|
+
-- connector_setup requests, P4-8 provenance). Expand-only: every new column is nullable, existing
|
|
3
|
+
-- rows keep their shape, and the only dropped objects are two checks replaced in this file.
|
|
4
|
+
|
|
5
|
+
-- P4-8: where an agent came from. Display data only (no FK: the template may be deleted or
|
|
6
|
+
-- renamed later), written when an agent is created from a template.
|
|
7
|
+
ALTER TABLE agents ADD COLUMN IF NOT EXISTS created_from_template_id text;
|
|
8
|
+
ALTER TABLE agents ADD COLUMN IF NOT EXISTS created_from_template_version int;
|
|
9
|
+
ALTER TABLE agents ADD COLUMN IF NOT EXISTS created_from_template_name text;
|
|
10
|
+
|
|
11
|
+
-- P4-7: a `connector_setup` request asks an org admin to set up the connectors an agent made from a
|
|
12
|
+
-- template needs (`pending_keys`: the template's connector keys still without an instance). It
|
|
13
|
+
-- names its agent and no item or marketplace entry.
|
|
14
|
+
ALTER TABLE catalog_requests ADD COLUMN IF NOT EXISTS agent_id text
|
|
15
|
+
REFERENCES agents(id) ON DELETE CASCADE;
|
|
16
|
+
ALTER TABLE catalog_requests ADD COLUMN IF NOT EXISTS pending_keys jsonb;
|
|
17
|
+
|
|
18
|
+
-- capybara:allow-destructive the check is added back with `connector_setup` in the next statement; existing rows (access, import, enable) satisfy it
|
|
19
|
+
ALTER TABLE catalog_requests DROP CONSTRAINT IF EXISTS catalog_requests_kind_check;
|
|
20
|
+
ALTER TABLE catalog_requests ADD CONSTRAINT catalog_requests_kind_check
|
|
21
|
+
CHECK (kind IN ('access', 'import', 'enable', 'connector_setup'));
|
|
22
|
+
|
|
23
|
+
-- item_id is already nullable (0077). The target check of 0077 required an item for every kind but
|
|
24
|
+
-- `import`; a connector_setup row needs an agent instead.
|
|
25
|
+
-- capybara:allow-destructive the check is added back with the connector_setup branch in the next statement; existing rows satisfy its first and third branches
|
|
26
|
+
ALTER TABLE catalog_requests DROP CONSTRAINT IF EXISTS catalog_requests_target_check;
|
|
27
|
+
ALTER TABLE catalog_requests ADD CONSTRAINT catalog_requests_target_check
|
|
28
|
+
CHECK (
|
|
29
|
+
kind = 'import' AND entry_name IS NOT NULL
|
|
30
|
+
OR kind = 'connector_setup' AND agent_id IS NOT NULL
|
|
31
|
+
AND item_id IS NULL AND entry_name IS NULL
|
|
32
|
+
OR kind NOT IN ('import', 'connector_setup') AND item_id IS NOT NULL
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
-- `pending_keys` is a JSON array of keys when set.
|
|
36
|
+
ALTER TABLE catalog_requests DROP CONSTRAINT IF EXISTS catalog_requests_pending_keys_check;
|
|
37
|
+
ALTER TABLE catalog_requests ADD CONSTRAINT catalog_requests_pending_keys_check
|
|
38
|
+
CHECK (pending_keys IS NULL OR jsonb_typeof(pending_keys) = 'array');
|
|
39
|
+
|
|
40
|
+
-- At most one pending setup request per agent (P4-7).
|
|
41
|
+
CREATE UNIQUE INDEX IF NOT EXISTS catalog_requests_pending_setup_uq
|
|
42
|
+
ON catalog_requests (agent_id) WHERE kind = 'connector_setup' AND status = 'pending';
|
|
43
|
+
|
|
44
|
+
CREATE INDEX IF NOT EXISTS catalog_requests_agent_idx
|
|
45
|
+
ON catalog_requests (agent_id) WHERE agent_id IS NOT NULL;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
-- Platform / org layering (spec 2026-11-07-platform-org-layering-design.md). Expand-only: two new
|
|
2
|
+
-- tables, nothing existing changes.
|
|
3
|
+
|
|
4
|
+
-- 0086, spec §5.4 / §5.8: an org's copy of an extension's overridable deployment config fields. A
|
|
5
|
+
-- row is a copy; no row means the org follows the platform ("no copy" and "a copy equal to the
|
|
6
|
+
-- platform" stay distinct). `config` holds the copy's non-secret values; its secrets live in
|
|
7
|
+
-- `secrets` under the org (namespace `kernel`, key `plugin-override:<plugin>:<path>`). Rows are kept
|
|
8
|
+
-- when the extension is disabled or uninstalled, like `extension_org_configs`.
|
|
9
|
+
CREATE TABLE IF NOT EXISTS extension_org_overrides (
|
|
10
|
+
plugin text NOT NULL,
|
|
11
|
+
org_id text NOT NULL REFERENCES orgs(id) ON DELETE CASCADE,
|
|
12
|
+
config jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
13
|
+
created_by text REFERENCES accounts(id) ON DELETE SET NULL,
|
|
14
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
15
|
+
updated_by text REFERENCES accounts(id) ON DELETE SET NULL,
|
|
16
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
17
|
+
PRIMARY KEY (plugin, org_id)
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
-- 0086, spec §7: an org admin's switch of one tool of an extension that is on in the org. No row
|
|
21
|
+
-- means the tool follows the extension (on).
|
|
22
|
+
CREATE TABLE IF NOT EXISTS org_tool_switches (
|
|
23
|
+
org_id text NOT NULL REFERENCES orgs(id) ON DELETE CASCADE,
|
|
24
|
+
plugin text NOT NULL,
|
|
25
|
+
tool text NOT NULL,
|
|
26
|
+
enabled boolean NOT NULL,
|
|
27
|
+
updated_by text REFERENCES accounts(id) ON DELETE SET NULL,
|
|
28
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
29
|
+
PRIMARY KEY (org_id, plugin, tool)
|
|
30
|
+
);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
-- Platform tool (spec 2026-11-07-platform-tool-design.md §6.2, §6.3): an approval carries the
|
|
2
|
+
-- kernel-rendered summary of the call ({zh, en}) and the scopes the person may choose. Expand-only:
|
|
3
|
+
-- both columns are nullable; null keeps today's behavior (no summary; scopes derived from the row:
|
|
4
|
+
-- "once" for a role escalation, else once / session / always).
|
|
5
|
+
ALTER TABLE approvals ADD COLUMN IF NOT EXISTS summary jsonb;
|
|
6
|
+
ALTER TABLE approvals ADD COLUMN IF NOT EXISTS scopes text[];
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
-- Environments phase 1 (spec 2026-11-07-environments-design §4.2, §10): a long-lived environment
|
|
2
|
+
-- is one sandbox instance plus a file system kept until the environment is deleted. This replaces
|
|
3
|
+
-- the per-conversation `sandboxes` table with `environment_instances`; the old table stays only
|
|
4
|
+
-- for the cleanup job that destroys its remaining instances. The CHECK lists of owner_kind and
|
|
5
|
+
-- source grow in phases 2 and 3 through new migrations.
|
|
6
|
+
CREATE TABLE IF NOT EXISTS capybara.environments (
|
|
7
|
+
id text PRIMARY KEY,
|
|
8
|
+
org_id text NOT NULL REFERENCES capybara.orgs(id) ON DELETE CASCADE,
|
|
9
|
+
owner_kind text NOT NULL CHECK (owner_kind IN ('personal')),
|
|
10
|
+
owner_account_id text NOT NULL REFERENCES capybara.accounts(id),
|
|
11
|
+
name text,
|
|
12
|
+
is_default boolean NOT NULL DEFAULT false,
|
|
13
|
+
source text NOT NULL CHECK (source IN ('cloud')),
|
|
14
|
+
provider text,
|
|
15
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
16
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
17
|
+
deleted_at timestamptz
|
|
18
|
+
);
|
|
19
|
+
CREATE UNIQUE INDEX IF NOT EXISTS environments_default_uq
|
|
20
|
+
ON capybara.environments (org_id, owner_account_id)
|
|
21
|
+
WHERE is_default AND deleted_at IS NULL;
|
|
22
|
+
CREATE UNIQUE INDEX IF NOT EXISTS environments_name_uq
|
|
23
|
+
ON capybara.environments (org_id, owner_account_id, lower(name))
|
|
24
|
+
WHERE name IS NOT NULL AND deleted_at IS NULL;
|
|
25
|
+
|
|
26
|
+
-- Same columns and meaning as the old sandboxes table (0023), keyed by environment. fs_handle and
|
|
27
|
+
-- fs_status describe the kept file system; status 'none' means no instance exists yet.
|
|
28
|
+
CREATE TABLE IF NOT EXISTS capybara.environment_instances (
|
|
29
|
+
environment_id text PRIMARY KEY REFERENCES capybara.environments(id) ON DELETE CASCADE,
|
|
30
|
+
org_id text NOT NULL,
|
|
31
|
+
provider text,
|
|
32
|
+
fs_handle jsonb,
|
|
33
|
+
fs_status text NOT NULL DEFAULT 'none' CHECK (fs_status IN ('none', 'ready', 'lost')),
|
|
34
|
+
handle jsonb,
|
|
35
|
+
status text NOT NULL DEFAULT 'none'
|
|
36
|
+
CHECK (status IN ('none', 'creating', 'running', 'suspended', 'destroyed')),
|
|
37
|
+
last_used_at timestamptz NOT NULL DEFAULT now(),
|
|
38
|
+
running_since timestamptz,
|
|
39
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
40
|
+
suspended_at timestamptz,
|
|
41
|
+
destroyed_at timestamptz,
|
|
42
|
+
generation integer NOT NULL DEFAULT 0,
|
|
43
|
+
had_instance boolean NOT NULL DEFAULT false,
|
|
44
|
+
prev_provider text,
|
|
45
|
+
prev_handle jsonb,
|
|
46
|
+
sweep_failed_at timestamptz
|
|
47
|
+
);
|
|
48
|
+
CREATE INDEX IF NOT EXISTS environment_instances_running_idx
|
|
49
|
+
ON capybara.environment_instances (last_used_at)
|
|
50
|
+
WHERE status = 'running';
|
|
51
|
+
CREATE INDEX IF NOT EXISTS environment_instances_live_idx
|
|
52
|
+
ON capybara.environment_instances (last_used_at)
|
|
53
|
+
WHERE status <> 'destroyed';
|
|
54
|
+
CREATE INDEX IF NOT EXISTS environment_instances_org_idx
|
|
55
|
+
ON capybara.environment_instances (org_id);
|
|
56
|
+
|
|
57
|
+
-- The environment a member's new conversations use when they pick none.
|
|
58
|
+
CREATE TABLE IF NOT EXISTS capybara.environment_defaults (
|
|
59
|
+
org_id text NOT NULL,
|
|
60
|
+
account_id text NOT NULL,
|
|
61
|
+
environment_id text NOT NULL REFERENCES capybara.environments(id) ON DELETE CASCADE,
|
|
62
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
63
|
+
PRIMARY KEY (org_id, account_id)
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
-- No cascade: a deleted environment is soft-deleted and the conversation keeps pointing at it.
|
|
67
|
+
ALTER TABLE capybara.conversations
|
|
68
|
+
ADD COLUMN IF NOT EXISTS environment_id text REFERENCES capybara.environments(id);
|
|
69
|
+
|
|
70
|
+
ALTER TABLE capybara.background_tasks ADD COLUMN IF NOT EXISTS environment_id text;
|
|
71
|
+
CREATE INDEX IF NOT EXISTS background_tasks_environment_running_idx
|
|
72
|
+
ON capybara.background_tasks (environment_id) WHERE status = 'running';
|
|
73
|
+
|
|
74
|
+
-- Tasks that ran in a per-conversation sandbox lose it with the move to environments (the
|
|
75
|
+
-- instances are destroyed by the cleanup job).
|
|
76
|
+
UPDATE capybara.background_tasks
|
|
77
|
+
SET status = 'lost',
|
|
78
|
+
lost_reason = COALESCE(lost_reason, 'sandbox_replaced_by_environment'),
|
|
79
|
+
finished_at = COALESCE(finished_at, now())
|
|
80
|
+
WHERE status = 'running';
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
2
|
-
import type { ExtensionRegistry } from "../extensions/registry.js";
|
|
3
|
-
/**
|
|
4
|
-
* Which versions an org may upgrade an installed plugin to (package ecosystem spec §10, Decision
|
|
5
|
-
* 10, Ruling 8):
|
|
6
|
-
* - a plugin with an extension follows the deployment: the only target is the catalog version
|
|
7
|
-
* whose extension package (sha256) is the one installed on the deployment, the newest import on
|
|
8
|
-
* ties (`1.0.0` and `1.0.0+sha256.x` can share an extension version with different bytes); an
|
|
9
|
-
* extension loaded from the startup config (config, no package) is matched by its
|
|
10
|
-
* version;
|
|
11
|
-
* - a purely declarative plugin may move to any other imported version (an older one is a
|
|
12
|
-
* rollback).
|
|
13
|
-
*/
|
|
14
|
-
/** The extension the deployment runs for a plugin name. */
|
|
15
|
-
export interface DeployedExtension {
|
|
16
|
-
/** The installed package's sha256 (null for a config extension). */
|
|
17
|
-
sha256: string | null;
|
|
18
|
-
version: string;
|
|
19
|
-
}
|
|
20
|
-
/** A catalog version row as the target rules read it. */
|
|
21
|
-
export interface TargetVersion {
|
|
22
|
-
version: string;
|
|
23
|
-
manifest: unknown;
|
|
24
|
-
extension_sha256: string | null;
|
|
25
|
-
imported_at: Date;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* The deployment's extension for plugin `name`: its install record (`extension_installs`, the
|
|
29
|
-
* deployment's desired package; disabled on the deployment counts as none), else the extension
|
|
30
|
-
* this replica loaded from the startup config; undefined when the deployment runs none (then no
|
|
31
|
-
* upgrade target and no "upgrade pending").
|
|
32
|
-
*/
|
|
33
|
-
export declare function deployedExtension(db: KernelSchemaDb, host: Pick<ExtensionRegistry, "manifests">, name: string): Promise<DeployedExtension | undefined>;
|
|
34
|
-
/** Whether catalog version `v` carries the deployment's extension `d`. */
|
|
35
|
-
export declare const runsDeployed: (v: TargetVersion, d: DeployedExtension) => boolean;
|
|
36
|
-
/**
|
|
37
|
-
* The catalog version an org install of an extension-bearing plugin may move to: the one carrying
|
|
38
|
-
* the deployment's extension, the newest import on ties; undefined when none does.
|
|
39
|
-
*/
|
|
40
|
-
export declare function deploymentTarget(versions: readonly TargetVersion[], d: DeployedExtension | undefined): TargetVersion | undefined;
|
|
41
|
-
/** What an install view says about upgrades (Decision 10). */
|
|
42
|
-
export interface UpgradeInfo {
|
|
43
|
-
/** The version an upgrade can move to now (the highest allowed target), null when none. */
|
|
44
|
-
upgradeAvailable: string | null;
|
|
45
|
-
/** An extension-bearing plugin whose org version is not the one the deployment runs. */
|
|
46
|
-
deploymentPending: boolean;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* The upgrade info of org installs (`itemId`, `name`, `version`), keyed by `itemId@version`; reads
|
|
50
|
-
* the items' catalog versions and the deployment's extensions in a few queries.
|
|
51
|
-
*/
|
|
52
|
-
export declare function upgradeInfo(db: KernelSchemaDb, host: Pick<ExtensionRegistry, "manifests">, installs: readonly {
|
|
53
|
-
itemId: string;
|
|
54
|
-
name: string;
|
|
55
|
-
version: string;
|
|
56
|
-
}[]): Promise<Map<string, UpgradeInfo>>;
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { compareVersions } from "./versions.js";
|
|
2
|
-
/**
|
|
3
|
-
* The deployment's extension for plugin `name`: its install record (`extension_installs`, the
|
|
4
|
-
* deployment's desired package; disabled on the deployment counts as none), else the extension
|
|
5
|
-
* this replica loaded from the startup config; undefined when the deployment runs none (then no
|
|
6
|
-
* upgrade target and no "upgrade pending").
|
|
7
|
-
*/
|
|
8
|
-
export async function deployedExtension(db, host, name) {
|
|
9
|
-
const row = await db
|
|
10
|
-
.selectFrom("extension_installs")
|
|
11
|
-
.select(["sha256", "version", "desired_state"])
|
|
12
|
-
.where("name", "=", name)
|
|
13
|
-
.executeTakeFirst();
|
|
14
|
-
if (row) {
|
|
15
|
-
return row.desired_state === "enabled"
|
|
16
|
-
? { sha256: row.sha256, version: row.version }
|
|
17
|
-
: undefined;
|
|
18
|
-
}
|
|
19
|
-
const loaded = host.manifests().find((m) => m.name === name);
|
|
20
|
-
return loaded ? { sha256: null, version: loaded.version } : undefined;
|
|
21
|
-
}
|
|
22
|
-
const extensionVersionOf = (v) => v.manifest.extension?.manifest.version;
|
|
23
|
-
/** Whether catalog version `v` carries the deployment's extension `d`. */
|
|
24
|
-
export const runsDeployed = (v, d) => d.sha256 !== null
|
|
25
|
-
? v.extension_sha256 === d.sha256
|
|
26
|
-
: v.manifest.extension !== undefined && extensionVersionOf(v) === d.version;
|
|
27
|
-
/**
|
|
28
|
-
* The catalog version an org install of an extension-bearing plugin may move to: the one carrying
|
|
29
|
-
* the deployment's extension, the newest import on ties; undefined when none does.
|
|
30
|
-
*/
|
|
31
|
-
export function deploymentTarget(versions, d) {
|
|
32
|
-
if (d === undefined)
|
|
33
|
-
return undefined;
|
|
34
|
-
let best;
|
|
35
|
-
for (const v of versions) {
|
|
36
|
-
if (!runsDeployed(v, d))
|
|
37
|
-
continue;
|
|
38
|
-
if (best === undefined ||
|
|
39
|
-
v.imported_at.getTime() > best.imported_at.getTime() ||
|
|
40
|
-
(v.imported_at.getTime() === best.imported_at.getTime() && compareVersions(v, best) > 0)) {
|
|
41
|
-
best = v;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return best;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* The upgrade info of org installs (`itemId`, `name`, `version`), keyed by `itemId@version`; reads
|
|
48
|
-
* the items' catalog versions and the deployment's extensions in a few queries.
|
|
49
|
-
*/
|
|
50
|
-
export async function upgradeInfo(db, host, installs) {
|
|
51
|
-
const out = new Map();
|
|
52
|
-
if (installs.length === 0)
|
|
53
|
-
return out;
|
|
54
|
-
const rows = await db
|
|
55
|
-
.selectFrom("catalog_item_versions")
|
|
56
|
-
.select(["item_id", "version", "manifest", "extension_sha256", "imported_at"])
|
|
57
|
-
.where("item_id", "in", [...new Set(installs.map((i) => i.itemId))])
|
|
58
|
-
.execute();
|
|
59
|
-
const deployed = new Map();
|
|
60
|
-
for (const i of installs) {
|
|
61
|
-
const versions = rows.filter((r) => r.item_id === i.itemId);
|
|
62
|
-
const current = versions.find((v) => v.version === i.version);
|
|
63
|
-
if (current && current.manifest.extension !== undefined) {
|
|
64
|
-
if (!deployed.has(i.name))
|
|
65
|
-
deployed.set(i.name, await deployedExtension(db, host, i.name));
|
|
66
|
-
const d = deployed.get(i.name);
|
|
67
|
-
const target = deploymentTarget(versions, d);
|
|
68
|
-
out.set(`${i.itemId}@${i.version}`, {
|
|
69
|
-
upgradeAvailable: target && target.version !== i.version ? target.version : null,
|
|
70
|
-
deploymentPending: d !== undefined && !runsDeployed(current, d),
|
|
71
|
-
});
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
let newest;
|
|
75
|
-
for (const v of versions) {
|
|
76
|
-
if (newest === undefined || compareVersions(v, newest) > 0)
|
|
77
|
-
newest = v;
|
|
78
|
-
}
|
|
79
|
-
const newer = newest !== undefined &&
|
|
80
|
-
newest.version !== i.version &&
|
|
81
|
-
(current === undefined
|
|
82
|
-
? compareVersions(newest.version, i.version) > 0
|
|
83
|
-
: compareVersions(newest, current) > 0);
|
|
84
|
-
out.set(`${i.itemId}@${i.version}`, {
|
|
85
|
-
upgradeAvailable: newer ? newest.version : null,
|
|
86
|
-
deploymentPending: false,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
return out;
|
|
90
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { SandboxService } from "../sandbox/sandbox.service.js";
|
|
2
|
-
import { ConversationAccess } from "./access.js";
|
|
3
|
-
import { ConversationsService } from "./conversations.service.js";
|
|
4
|
-
export interface SandboxStatusView {
|
|
5
|
-
status: "running" | "suspended";
|
|
6
|
-
lastUsedAt: string;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* 对话沙箱的状态(网页上下文标签,M5 T11):会话不可见 → `conversation.not_found`;
|
|
10
|
-
* 没有可用的沙箱(未创建、已销毁、正在创建)→ `sandbox.not_found`(界面显示「未创建」)。
|
|
11
|
-
*/
|
|
12
|
-
export declare class ConversationSandboxStatus {
|
|
13
|
-
/** 会话可见性(与会话 SSE 流同一判定)。 */
|
|
14
|
-
private readonly access;
|
|
15
|
-
/** The conversation whose sandbox it works in: a sub-agent's parent, else itself. */
|
|
16
|
-
private readonly conversations;
|
|
17
|
-
private readonly sandbox;
|
|
18
|
-
constructor(
|
|
19
|
-
/** 会话可见性(与会话 SSE 流同一判定)。 */
|
|
20
|
-
access: Pick<ConversationAccess, "isAccessible">,
|
|
21
|
-
/** The conversation whose sandbox it works in: a sub-agent's parent, else itself. */
|
|
22
|
-
conversations: Pick<ConversationsService, "sandboxConversationOf">, sandbox: Pick<SandboxService, "status">);
|
|
23
|
-
get(orgId: string, conversationId: string, viewerAccountId: string): Promise<SandboxStatusView>;
|
|
24
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
-
};
|
|
10
|
-
import { Inject, Injectable } from "@nestjs/common";
|
|
11
|
-
import { ApiError } from "../errors.js";
|
|
12
|
-
import { SandboxService } from "../sandbox/sandbox.service.js";
|
|
13
|
-
import { UUID_RE } from "../ui/registry.js";
|
|
14
|
-
import { ConversationAccess } from "./access.js";
|
|
15
|
-
import { ConversationsService } from "./conversations.service.js";
|
|
16
|
-
/**
|
|
17
|
-
* 对话沙箱的状态(网页上下文标签,M5 T11):会话不可见 → `conversation.not_found`;
|
|
18
|
-
* 没有可用的沙箱(未创建、已销毁、正在创建)→ `sandbox.not_found`(界面显示「未创建」)。
|
|
19
|
-
*/
|
|
20
|
-
let ConversationSandboxStatus = class ConversationSandboxStatus {
|
|
21
|
-
access;
|
|
22
|
-
conversations;
|
|
23
|
-
sandbox;
|
|
24
|
-
constructor(
|
|
25
|
-
/** 会话可见性(与会话 SSE 流同一判定)。 */
|
|
26
|
-
access,
|
|
27
|
-
/** The conversation whose sandbox it works in: a sub-agent's parent, else itself. */
|
|
28
|
-
conversations, sandbox) {
|
|
29
|
-
this.access = access;
|
|
30
|
-
this.conversations = conversations;
|
|
31
|
-
this.sandbox = sandbox;
|
|
32
|
-
}
|
|
33
|
-
async get(orgId, conversationId, viewerAccountId) {
|
|
34
|
-
if (!UUID_RE.test(conversationId) ||
|
|
35
|
-
!(await this.access.isAccessible(orgId, conversationId, viewerAccountId))) {
|
|
36
|
-
throw new ApiError("conversation.not_found", "Conversation not found");
|
|
37
|
-
}
|
|
38
|
-
// a sub-agent works in its parent conversation's sandbox (sub-agents spec §10.1)
|
|
39
|
-
const sandboxConv = await this.conversations.sandboxConversationOf(orgId, conversationId);
|
|
40
|
-
const s = await this.sandbox.status(orgId, sandboxConv);
|
|
41
|
-
if (!s)
|
|
42
|
-
throw new ApiError("sandbox.not_found", "This conversation has no sandbox");
|
|
43
|
-
return { status: s.status, lastUsedAt: s.lastUsedAt.toISOString() };
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
ConversationSandboxStatus = __decorate([
|
|
47
|
-
Injectable(),
|
|
48
|
-
__param(0, Inject(ConversationAccess)),
|
|
49
|
-
__param(1, Inject(ConversationsService)),
|
|
50
|
-
__param(2, Inject(SandboxService))
|
|
51
|
-
], ConversationSandboxStatus);
|
|
52
|
-
export { ConversationSandboxStatus };
|