@capybara-hq/kernel 0.1.0-rc.2 → 0.1.0-rc.20
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 +85 -5
- package/dist/admin/admin-agents.controller.d.ts +28 -0
- package/dist/admin/admin-agents.controller.js +79 -0
- package/dist/admin/admin-connectors.controller.d.ts +29 -0
- package/dist/admin/admin-connectors.controller.js +79 -0
- package/dist/admin/admin-items.schemas.d.ts +42 -0
- package/dist/admin/admin-items.schemas.js +48 -0
- package/dist/admin/admin.controller.d.ts +52 -80
- package/dist/admin/admin.controller.js +112 -81
- package/dist/admin/admin.module.d.ts +4 -1
- package/dist/admin/admin.module.js +50 -4
- package/dist/admin/admin.schemas.d.ts +69 -0
- package/dist/admin/admin.schemas.js +53 -0
- package/dist/admin/audit.controller.d.ts +14 -0
- package/dist/admin/audit.controller.js +42 -0
- package/dist/admin/audit.schemas.d.ts +8 -0
- package/dist/admin/audit.schemas.js +17 -0
- package/dist/admin/extensions.controller.d.ts +34 -3
- package/dist/admin/extensions.controller.js +66 -8
- package/dist/admin/extensions.schemas.d.ts +7 -0
- package/dist/admin/extensions.schemas.js +10 -0
- package/dist/admin/health.service.d.ts +104 -0
- package/dist/admin/health.service.js +246 -0
- package/dist/admin/limit-defaults.d.ts +20 -0
- package/dist/admin/limit-defaults.js +10 -0
- package/dist/admin/overview.controller.d.ts +31 -0
- package/dist/admin/overview.controller.js +78 -0
- package/dist/admin/overview.schemas.d.ts +8 -0
- package/dist/admin/overview.schemas.js +13 -0
- package/dist/admin/overview.service.d.ts +112 -0
- package/dist/admin/overview.service.js +223 -0
- package/dist/admin/platform-audit.service.d.ts +41 -0
- package/dist/admin/platform-audit.service.js +70 -0
- 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/admin/usage.service.d.ts +149 -0
- package/dist/admin/usage.service.js +321 -0
- package/dist/agents/admin-agents.d.ts +92 -0
- package/dist/agents/admin-agents.js +170 -0
- package/dist/agents/agent-lookup.d.ts +24 -0
- package/dist/agents/agent-lookup.js +46 -2
- package/dist/agents/agent-profile.service.d.ts +31 -0
- package/dist/agents/agent-profile.service.js +122 -0
- package/dist/agents/agents.controller.d.ts +53 -168
- package/dist/agents/agents.controller.js +163 -34
- package/dist/agents/agents.module.d.ts +6 -2
- package/dist/agents/agents.module.js +41 -7
- package/dist/agents/agents.schemas.d.ts +392 -0
- package/dist/agents/agents.schemas.js +126 -0
- package/dist/agents/agents.service.d.ts +121 -36
- package/dist/agents/agents.service.js +411 -121
- package/dist/agents/definition.d.ts +142 -21
- package/dist/agents/definition.js +389 -43
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +680 -0
- package/dist/agents/from-template.service.d.ts +72 -0
- package/dist/agents/from-template.service.js +178 -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 +44 -6
- package/dist/agents/models.controller.js +84 -8
- package/dist/agents/org-templates.d.ts +186 -0
- package/dist/agents/org-templates.js +876 -0
- package/dist/agents/pending-connector-requests.d.ts +79 -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 +114 -0
- package/dist/agents/profile.js +55 -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 +77 -5
- package/dist/agents/templates.controller.js +153 -7
- package/dist/agents/templates.d.ts +127 -23
- package/dist/agents/templates.js +482 -44
- package/dist/agents/templates.schemas.d.ts +20 -0
- package/dist/agents/templates.schemas.js +45 -0
- package/dist/background/background.controller.d.ts +38 -0
- package/dist/background/background.controller.js +88 -0
- package/dist/background/background.module.d.ts +10 -0
- package/dist/background/background.module.js +39 -0
- package/dist/background/background.schemas.d.ts +10 -0
- package/dist/background/background.schemas.js +16 -0
- package/dist/background/finish.d.ts +44 -0
- package/dist/background/finish.js +95 -0
- package/dist/background/launch-lock.d.ts +15 -0
- package/dist/background/launch-lock.js +40 -0
- package/dist/background/launch.d.ts +42 -0
- package/dist/background/launch.js +77 -0
- package/dist/background/poll.job.d.ts +56 -0
- package/dist/background/poll.job.js +195 -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 +80 -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 +244 -0
- package/dist/background/store.d.ts +167 -0
- package/dist/background/store.js +361 -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 +109 -0
- package/dist/background/tasks.service.js +271 -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 +136 -52
- package/dist/catalog/admin-catalog.controller.js +275 -65
- package/dist/catalog/admin-catalog.schemas.d.ts +82 -0
- package/dist/catalog/admin-catalog.schemas.js +99 -0
- package/dist/catalog/appearance.schemas.d.ts +10 -0
- package/dist/catalog/appearance.schemas.js +20 -0
- package/dist/catalog/appearance.service.d.ts +105 -0
- package/dist/catalog/appearance.service.js +306 -0
- package/dist/catalog/catalog-content.d.ts +122 -35
- package/dist/catalog/catalog-content.js +122 -14
- package/dist/catalog/catalog-files.d.ts +42 -0
- package/dist/catalog/catalog-files.js +89 -0
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +63 -0
- package/dist/catalog/catalog-items.d.ts +122 -7
- package/dist/catalog/catalog-items.js +301 -13
- package/dist/catalog/catalog-scope.service.d.ts +293 -0
- package/dist/catalog/catalog-scope.service.js +1236 -0
- package/dist/catalog/catalog.module.d.ts +7 -9
- package/dist/catalog/catalog.module.js +47 -31
- package/dist/catalog/catalog.service.d.ts +122 -31
- package/dist/catalog/catalog.service.js +177 -105
- package/dist/catalog/claude/agents.js +15 -10
- package/dist/catalog/claude/translate.js +3 -0
- package/dist/catalog/cli.d.ts +11 -1
- package/dist/catalog/cli.js +29 -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 +102 -0
- package/dist/catalog/component-scope.controller.js +257 -0
- package/dist/catalog/component-scope.schemas.d.ts +118 -0
- package/dist/catalog/component-scope.schemas.js +97 -0
- package/dist/catalog/component-scope.service.d.ts +394 -0
- package/dist/catalog/component-scope.service.js +1133 -0
- package/dist/catalog/component-state.d.ts +207 -0
- package/dist/catalog/component-state.js +484 -0
- package/dist/catalog/git-source.d.ts +9 -1
- package/dist/catalog/git-source.js +29 -2
- 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/marketplace-icons.d.ts +64 -0
- package/dist/catalog/marketplace-icons.js +131 -0
- package/dist/catalog/marketplaces.controller.d.ts +50 -41
- package/dist/catalog/marketplaces.controller.js +130 -46
- package/dist/catalog/marketplaces.schemas.d.ts +48 -0
- package/dist/catalog/marketplaces.schemas.js +53 -0
- package/dist/catalog/marketplaces.service.d.ts +110 -17
- package/dist/catalog/marketplaces.service.js +337 -29
- package/dist/catalog/org-catalog.controller.d.ts +114 -62
- package/dist/catalog/org-catalog.controller.js +191 -98
- package/dist/catalog/org-catalog.schemas.d.ts +104 -0
- package/dist/catalog/org-catalog.schemas.js +107 -0
- package/dist/catalog/org-catalog.service.d.ts +72 -33
- package/dist/catalog/org-catalog.service.js +367 -158
- 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 +133 -0
- package/dist/catalog/org-extension.controller.js +313 -0
- package/dist/catalog/org-extension.schemas.d.ts +15 -0
- package/dist/catalog/org-extension.schemas.js +22 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +77 -0
- package/dist/catalog/org-plugin-uploads.controller.js +200 -0
- package/dist/catalog/org-plugin-uploads.d.ts +71 -0
- package/dist/catalog/org-plugin-uploads.js +122 -0
- package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
- package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
- package/dist/catalog/owned-items.d.ts +188 -0
- package/dist/catalog/owned-items.js +808 -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 +243 -0
- package/dist/catalog/platform-components.js +872 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +583 -0
- package/dist/catalog/plugin-import.d.ts +254 -47
- package/dist/catalog/plugin-import.js +810 -112
- package/dist/catalog/plugin-install.d.ts +205 -42
- package/dist/catalog/plugin-install.js +828 -126
- package/dist/catalog/plugin-package.d.ts +43 -4
- package/dist/catalog/plugin-package.js +194 -7
- package/dist/catalog/plugin-upgrade.d.ts +308 -225
- package/dist/catalog/plugin-upgrade.js +1325 -1131
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +194 -118
- package/dist/catalog/requests.service.js +530 -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 +119 -0
- package/dist/channels/actions.js +10 -3
- package/dist/channels/cards.d.ts +36 -10
- package/dist/channels/cards.js +100 -25
- package/dist/channels/channels.module.js +13 -2
- package/dist/channels/channels.schemas.d.ts +41 -0
- package/dist/channels/channels.schemas.js +40 -0
- package/dist/channels/connections.controller.d.ts +46 -37
- package/dist/channels/connections.controller.js +76 -34
- package/dist/channels/connections.service.d.ts +102 -10
- package/dist/channels/connections.service.js +271 -24
- package/dist/channels/inbound.d.ts +11 -1
- package/dist/channels/inbound.js +87 -7
- package/dist/channels/outbound.d.ts +14 -1
- package/dist/channels/outbound.js +64 -15
- package/dist/channels/phrases.d.ts +33 -2
- package/dist/channels/phrases.js +29 -1
- package/dist/channels/supervisor.d.ts +2 -0
- package/dist/channels/supervisor.js +4 -0
- package/dist/channels/threads.d.ts +5 -0
- package/dist/channels/threads.js +8 -0
- package/dist/channels/webhook.d.ts +21 -1
- package/dist/channels/webhook.js +39 -4
- package/dist/client/client-access.service.d.ts +102 -0
- package/dist/client/client-access.service.js +303 -0
- package/dist/client/client-builds.service.d.ts +109 -0
- package/dist/client/client-builds.service.js +229 -0
- package/dist/client/client-delivery.controller.d.ts +25 -0
- package/dist/client/client-delivery.controller.js +66 -0
- package/dist/client/client-files.d.ts +48 -0
- package/dist/client/client-files.js +136 -0
- package/dist/client/client-reports.cron.d.ts +13 -0
- package/dist/client/client-reports.cron.js +42 -0
- package/dist/client/client-reports.service.d.ts +30 -0
- package/dist/client/client-reports.service.js +102 -0
- package/dist/client/client-sign-in.service.d.ts +21 -0
- package/dist/client/client-sign-in.service.js +49 -0
- package/dist/client/client.controller.d.ts +49 -0
- package/dist/client/client.controller.js +129 -0
- package/dist/client/client.module.d.ts +8 -0
- package/dist/client/client.module.js +28 -0
- package/dist/client/client.schemas.d.ts +61 -0
- package/dist/client/client.schemas.js +27 -0
- package/dist/config/docs.js +5 -1
- package/dist/config/schema.d.ts +35 -2
- package/dist/config/schema.js +216 -21
- 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/artifacts.d.ts +1 -1
- package/dist/conversations/artifacts.js +1 -1
- 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 -44
- package/dist/conversations/conversations.controller.js +133 -82
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +10 -7
- package/dist/conversations/conversations.schemas.d.ts +52 -0
- package/dist/conversations/conversations.schemas.js +79 -0
- package/dist/conversations/conversations.service.d.ts +161 -13
- package/dist/conversations/conversations.service.js +329 -57
- package/dist/conversations/device-status.d.ts +24 -0
- package/dist/conversations/device-status.js +71 -0
- package/dist/conversations/event-log.d.ts +45 -9
- package/dist/conversations/event-log.js +113 -6
- package/dist/conversations/events.d.ts +255 -9
- package/dist/conversations/events.js +250 -34
- package/dist/conversations/message-context.d.ts +79 -0
- package/dist/conversations/message-context.js +145 -0
- package/dist/conversations/queue.d.ts +5 -2
- package/dist/conversations/queue.js +24 -4
- package/dist/conversations/queue.service.d.ts +2 -2
- package/dist/conversations/queue.service.js +21 -3
- package/dist/conversations/titles.d.ts +12 -3
- package/dist/conversations/titles.js +40 -16
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/create-ctx.d.ts +48 -5
- package/dist/ctx/create-ctx.js +174 -34
- package/dist/db/kernel-schema.d.ts +668 -27
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +3 -0
- package/dist/devices/access.d.ts +66 -0
- package/dist/devices/access.js +113 -0
- package/dist/devices/conversation-devices.d.ts +75 -0
- package/dist/devices/conversation-devices.js +230 -0
- package/dist/devices/devices.controller.d.ts +36 -0
- package/dist/devices/devices.controller.js +124 -0
- package/dist/devices/devices.module.d.ts +8 -0
- package/dist/devices/devices.module.js +34 -0
- package/dist/devices/devices.schemas.d.ts +3 -0
- package/dist/devices/devices.schemas.js +14 -0
- package/dist/devices/devices.service.d.ts +251 -0
- package/dist/devices/devices.service.js +791 -0
- package/dist/devices/dto.d.ts +25 -0
- package/dist/devices/dto.js +12 -0
- package/dist/devices/label.d.ts +11 -0
- package/dist/devices/label.js +25 -0
- package/dist/devices/legacy-cleanup.job.d.ts +34 -0
- package/dist/devices/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +215 -3
- package/dist/errors.js +215 -3
- package/dist/evals/evals.module.js +11 -2
- package/dist/evals/evals.schemas.d.ts +110 -0
- package/dist/evals/evals.schemas.js +107 -0
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +36 -10
- package/dist/evals/recorded-tools.d.ts +37 -1
- package/dist/evals/recorded-tools.js +120 -10
- package/dist/evals/run-replay.d.ts +20 -3
- package/dist/evals/run-replay.js +78 -14
- package/dist/evals/runs.controller.d.ts +2 -57
- package/dist/evals/runs.controller.js +1 -42
- package/dist/evals/runs.service.d.ts +8 -7
- package/dist/evals/runs.service.js +45 -30
- package/dist/evals/sets.controller.d.ts +2 -28
- package/dist/evals/sets.controller.js +1 -31
- package/dist/evals/sets.service.d.ts +7 -7
- package/dist/evals/sets.service.js +23 -17
- package/dist/evals/snapshot.d.ts +3 -2
- package/dist/evals/snapshot.js +17 -4
- package/dist/evals/step-replay.d.ts +4 -6
- package/dist/evals/step-replay.js +16 -9
- package/dist/evals/trajectory.d.ts +5 -3
- package/dist/evals/trajectory.js +4 -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 +81 -14
- package/dist/extensions/admin-ops.js +181 -47
- package/dist/extensions/admin-view.d.ts +57 -10
- package/dist/extensions/admin-view.js +249 -27
- package/dist/extensions/approvals.d.ts +12 -2
- package/dist/extensions/blobs.d.ts +14 -1
- package/dist/extensions/blobs.js +49 -5
- package/dist/extensions/bootstrap.d.ts +41 -5
- package/dist/extensions/bootstrap.js +121 -19
- package/dist/extensions/cli.d.ts +12 -0
- package/dist/extensions/cli.js +11 -2
- package/dist/extensions/config-hash.d.ts +10 -0
- package/dist/extensions/config-hash.js +38 -0
- package/dist/extensions/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 +94 -9
- package/dist/extensions/deployment-config.js +255 -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 +133 -0
- package/dist/extensions/effective-config.js +379 -0
- package/dist/extensions/extensions.module.js +31 -12
- package/dist/extensions/guide-places.d.ts +68 -0
- package/dist/extensions/guide-places.js +152 -0
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +105 -12
- package/dist/extensions/host.js +372 -87
- package/dist/extensions/installs.d.ts +30 -9
- package/dist/extensions/installs.js +57 -16
- package/dist/extensions/instance.d.ts +17 -2
- package/dist/extensions/instance.js +21 -0
- package/dist/extensions/ledger.d.ts +1 -1
- package/dist/extensions/locks.d.ts +12 -0
- package/dist/extensions/locks.js +26 -0
- package/dist/extensions/org-config.d.ts +97 -7
- package/dist/extensions/org-config.js +215 -45
- 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 +18 -4
- package/dist/extensions/package.js +56 -3
- package/dist/extensions/permission-set.d.ts +35 -5
- package/dist/extensions/permission-set.js +36 -5
- package/dist/extensions/permission-view.d.ts +106 -13
- package/dist/extensions/permission-view.js +33 -15
- package/dist/extensions/plugin-guides.d.ts +282 -0
- package/dist/extensions/plugin-guides.js +554 -0
- package/dist/extensions/plugin-icons.d.ts +54 -0
- package/dist/extensions/plugin-icons.js +125 -0
- 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 +28 -0
- package/dist/extensions/point-defaults.controller.js +69 -0
- package/dist/extensions/point-defaults.d.ts +73 -0
- package/dist/extensions/point-defaults.js +236 -0
- package/dist/extensions/point-defaults.schemas.d.ts +9 -0
- package/dist/extensions/point-defaults.schemas.js +14 -0
- package/dist/extensions/registry.d.ts +1 -1
- package/dist/extensions/registry.js +2 -0
- package/dist/extensions/resolve.d.ts +51 -1
- package/dist/extensions/resolve.js +85 -3
- package/dist/extensions/single-provider.d.ts +92 -0
- package/dist/extensions/single-provider.js +180 -0
- package/dist/extensions/sources.d.ts +13 -2
- package/dist/extensions/sources.js +2 -0
- package/dist/extensions/state.module.d.ts +9 -0
- package/dist/extensions/state.module.js +46 -0
- package/dist/extensions/unavailable.d.ts +50 -0
- package/dist/extensions/unavailable.js +115 -0
- package/dist/files/previewers.controller.js +2 -3
- package/dist/files/previewers.d.ts +10 -3
- package/dist/files/previewers.js +40 -11
- package/dist/files/previewers.schemas.d.ts +10 -0
- package/dist/files/previewers.schemas.js +9 -0
- package/dist/http/api.module.js +76 -4
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/http/gateway-routes.d.ts +7 -3
- package/dist/http/gateway-routes.js +6 -3
- package/dist/http/nest-logger.d.ts +6 -5
- package/dist/http/nest-logger.js +24 -10
- package/dist/http/plugin-dispatch.d.ts +4 -1
- package/dist/http/plugin-dispatch.js +14 -2
- package/dist/identity/accounts.d.ts +77 -31
- package/dist/identity/accounts.js +133 -52
- 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 +35 -9
- package/dist/identity/cookies.d.ts +26 -5
- package/dist/identity/cookies.js +58 -6
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +7 -4
- package/dist/identity/initial-passwords.controller.d.ts +22 -0
- package/dist/identity/initial-passwords.controller.js +49 -0
- package/dist/identity/initial-passwords.d.ts +61 -0
- package/dist/identity/initial-passwords.job.d.ts +16 -0
- package/dist/identity/initial-passwords.job.js +46 -0
- package/dist/identity/initial-passwords.js +159 -0
- package/dist/identity/me.controller.d.ts +17 -1
- package/dist/identity/me.controller.js +45 -4
- package/dist/identity/me.schemas.d.ts +24 -0
- package/dist/identity/me.schemas.js +25 -0
- package/dist/identity/principal.d.ts +11 -3
- package/dist/identity/principal.js +11 -3
- package/dist/identity/sessions.d.ts +12 -0
- package/dist/identity/sessions.js +45 -0
- package/dist/identity/settings.d.ts +99 -12
- package/dist/identity/settings.js +234 -25
- 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/identity/write-actor.d.ts +11 -0
- package/dist/identity/write-actor.js +7 -0
- package/dist/inbox/inbox.module.d.ts +4 -1
- package/dist/inbox/inbox.module.js +7 -3
- package/dist/inbox/inbox.schemas.d.ts +8 -0
- package/dist/inbox/inbox.schemas.js +11 -0
- package/dist/inbox/inbox.service.d.ts +64 -4
- 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 +157 -0
- package/dist/inbox/platform-inbox.service.js +281 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.js +7 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +32 -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 +31 -3
- package/dist/infra/lifecycle/process-guards.js +4 -0
- package/dist/infra/lock/lock.service.d.ts +8 -0
- package/dist/infra/lock/lock.service.js +27 -0
- package/dist/infra/logging/logging.module.d.ts +4 -2
- package/dist/infra/logging/logging.module.js +24 -6
- package/dist/infra/presence/presence.module.d.ts +6 -0
- package/dist/infra/presence/presence.module.js +22 -0
- package/dist/infra/presence/replica-presence.d.ts +87 -0
- package/dist/infra/presence/replica-presence.js +189 -0
- 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/throttler/named-throttlers.d.ts +12 -0
- package/dist/infra/throttler/named-throttlers.js +67 -0
- package/dist/infra/throttler/throttler.guard.js +1 -1
- package/dist/infra/tokens.d.ts +6 -1
- package/dist/infra/tokens.js +6 -1
- package/dist/kernel.module.js +15 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +4 -2
- package/dist/lifecycle/kernel-lifecycle.js +35 -7
- package/dist/local-devices/device-auth.controller.d.ts +42 -0
- package/dist/local-devices/device-auth.controller.js +116 -0
- package/dist/local-devices/device-auth.d.ts +119 -0
- package/dist/local-devices/device-auth.js +401 -0
- package/dist/local-devices/device-auth.module.d.ts +7 -0
- package/dist/local-devices/device-auth.module.js +25 -0
- package/dist/local-devices/device-routes.d.ts +36 -0
- package/dist/local-devices/device-routes.js +90 -0
- package/dist/local-devices/dto.d.ts +66 -0
- package/dist/local-devices/dto.js +44 -0
- package/dist/local-devices/keys.d.ts +25 -0
- package/dist/local-devices/keys.js +25 -0
- package/dist/local-devices/local-device-gateway.d.ts +134 -0
- package/dist/local-devices/local-device-gateway.js +542 -0
- package/dist/local-devices/local-device-provider.d.ts +89 -0
- package/dist/local-devices/local-device-provider.js +151 -0
- package/dist/local-devices/local-devices.module.d.ts +16 -0
- package/dist/local-devices/local-devices.module.js +44 -0
- package/dist/local-devices/machines.d.ts +118 -0
- package/dist/local-devices/machines.js +366 -0
- package/dist/local-devices/relay.d.ts +100 -0
- package/dist/local-devices/relay.js +373 -0
- package/dist/local-devices/targets.d.ts +28 -0
- package/dist/local-devices/targets.js +73 -0
- package/dist/log.d.ts +13 -1
- package/dist/log.js +93 -17
- package/dist/models/embeddings.d.ts +82 -0
- package/dist/models/embeddings.js +326 -0
- package/dist/models/enablement.controller.d.ts +40 -0
- package/dist/models/enablement.controller.js +74 -0
- package/dist/models/enablement.d.ts +101 -0
- package/dist/models/enablement.js +264 -0
- package/dist/models/models.module.d.ts +5 -1
- package/dist/models/models.module.js +16 -4
- package/dist/models/org-models.schemas.d.ts +8 -0
- package/dist/models/org-models.schemas.js +22 -0
- package/dist/models/prices.d.ts +8 -6
- package/dist/models/prices.js +11 -9
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +13 -7
- package/dist/models/purposes.d.ts +72 -14
- package/dist/models/purposes.js +115 -34
- 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.controller.d.ts +2 -5
- package/dist/orgs/orgs.controller.js +3 -6
- package/dist/orgs/orgs.module.js +3 -0
- package/dist/orgs/orgs.schemas.d.ts +8 -0
- package/dist/orgs/orgs.schemas.js +16 -0
- package/dist/orgs/orgs.service.d.ts +23 -8
- package/dist/orgs/orgs.service.js +38 -16
- 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 +66 -6
- package/dist/orgs/settings.service.js +89 -10
- package/dist/overrides.d.ts +16 -1
- package/dist/overrides.js +10 -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 +28 -0
- package/dist/platform/errors.js +65 -0
- package/dist/platform/exclusions.d.ts +11 -0
- package/dist/platform/exclusions.js +774 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +169 -0
- package/dist/platform/operation.js +102 -0
- package/dist/platform/ops/accounts.ops.d.ts +32 -0
- package/dist/platform/ops/accounts.ops.js +291 -0
- package/dist/platform/ops/admin-items.ops.d.ts +37 -0
- package/dist/platform/ops/admin-items.ops.js +278 -0
- package/dist/platform/ops/admin.ops.d.ts +38 -0
- package/dist/platform/ops/admin.ops.js +497 -0
- package/dist/platform/ops/agent-skills.ops.d.ts +50 -0
- package/dist/platform/ops/agent-skills.ops.js +509 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +17 -0
- package/dist/platform/ops/agent-templates.ops.js +272 -0
- package/dist/platform/ops/agents.ops.d.ts +37 -0
- package/dist/platform/ops/agents.ops.js +730 -0
- package/dist/platform/ops/approvals.ops.d.ts +30 -0
- package/dist/platform/ops/approvals.ops.js +116 -0
- package/dist/platform/ops/background.ops.d.ts +14 -0
- package/dist/platform/ops/background.ops.js +134 -0
- package/dist/platform/ops/catalog-admin.ops.d.ts +92 -0
- package/dist/platform/ops/catalog-admin.ops.js +682 -0
- package/dist/platform/ops/channels.ops.d.ts +16 -0
- package/dist/platform/ops/channels.ops.js +195 -0
- package/dist/platform/ops/components.ops.d.ts +46 -0
- package/dist/platform/ops/components.ops.js +854 -0
- package/dist/platform/ops/connectors.ops.d.ts +17 -0
- package/dist/platform/ops/connectors.ops.js +190 -0
- package/dist/platform/ops/conversations.ops.d.ts +30 -0
- package/dist/platform/ops/conversations.ops.js +470 -0
- package/dist/platform/ops/devices.ops.d.ts +26 -0
- package/dist/platform/ops/devices.ops.js +311 -0
- package/dist/platform/ops/errors.d.ts +16 -0
- package/dist/platform/ops/errors.js +30 -0
- package/dist/platform/ops/evals.ops.d.ts +28 -0
- package/dist/platform/ops/evals.ops.js +783 -0
- package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
- package/dist/platform/ops/extensions-admin.ops.js +372 -0
- package/dist/platform/ops/extensions.ops.d.ts +25 -0
- package/dist/platform/ops/extensions.ops.js +347 -0
- package/dist/platform/ops/inbox.ops.d.ts +25 -0
- package/dist/platform/ops/inbox.ops.js +381 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +22 -0
- package/dist/platform/ops/marketplaces.ops.js +466 -0
- package/dist/platform/ops/models.ops.d.ts +25 -0
- package/dist/platform/ops/models.ops.js +232 -0
- package/dist/platform/ops/org-plugins.ops.d.ts +35 -0
- package/dist/platform/ops/org-plugins.ops.js +388 -0
- package/dist/platform/ops/org-settings.ops.d.ts +18 -0
- package/dist/platform/ops/org-settings.ops.js +127 -0
- package/dist/platform/ops/orgs.ops.d.ts +28 -0
- package/dist/platform/ops/orgs.ops.js +298 -0
- package/dist/platform/ops/other-orgs.d.ts +20 -0
- package/dist/platform/ops/other-orgs.js +72 -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 +30 -0
- package/dist/platform/ops/platform.ops.js +231 -0
- package/dist/platform/ops/plugins.ops.d.ts +35 -0
- package/dist/platform/ops/plugins.ops.js +476 -0
- package/dist/platform/ops/previewers.ops.d.ts +14 -0
- package/dist/platform/ops/previewers.ops.js +109 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +191 -0
- package/dist/platform/ops/role.d.ts +4 -0
- package/dist/platform/ops/role.js +10 -0
- package/dist/platform/ops/setup.ops.d.ts +24 -0
- package/dist/platform/ops/setup.ops.js +212 -0
- package/dist/platform/ops/skills.ops.d.ts +17 -0
- package/dist/platform/ops/skills.ops.js +160 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/ops/themes.ops.d.ts +14 -0
- package/dist/platform/ops/themes.ops.js +47 -0
- package/dist/platform/ops/ui.ops.d.ts +8 -0
- package/dist/platform/ops/ui.ops.js +41 -0
- package/dist/platform/ops/unavailable.d.ts +23 -0
- package/dist/platform/ops/unavailable.js +118 -0
- package/dist/platform/parity.d.ts +33 -0
- package/dist/platform/parity.js +272 -0
- package/dist/platform/platform-ops.module.d.ts +43 -0
- package/dist/platform/platform-ops.module.js +142 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/platform/route-schemas.d.ts +18 -0
- package/dist/platform/route-schemas.js +85 -0
- package/dist/roles/gateway-role.d.ts +18 -3
- package/dist/roles/gateway-role.js +33 -5
- package/dist/roles/gateway.module.d.ts +2 -1
- package/dist/roles/gateway.module.js +6 -3
- 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 +21 -1
- package/dist/runtime/context/build.d.ts +21 -13
- package/dist/runtime/context/build.js +106 -29
- package/dist/runtime/context/claude-tools.d.ts +4 -1
- package/dist/runtime/context/claude-tools.js +13 -12
- package/dist/runtime/context/compaction.js +24 -1
- package/dist/runtime/context/device-paths.d.ts +40 -0
- package/dist/runtime/context/device-paths.js +48 -0
- package/dist/runtime/context/legacy-text.d.ts +22 -0
- package/dist/runtime/context/legacy-text.js +37 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/run-context.d.ts +65 -0
- package/dist/runtime/context/run-context.js +215 -0
- package/dist/runtime/context/skills.d.ts +29 -11
- package/dist/runtime/context/skills.js +46 -32
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/hook-calls.d.ts +8 -1
- package/dist/runtime/hook-calls.js +40 -7
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +36 -17
- package/dist/runtime/loop.d.ts +35 -6
- package/dist/runtime/maintenance.d.ts +9 -4
- package/dist/runtime/maintenance.js +35 -8
- package/dist/runtime/model-call.d.ts +54 -11
- package/dist/runtime/model-call.js +105 -28
- package/dist/runtime/providers.d.ts +149 -29
- package/dist/runtime/providers.js +332 -63
- package/dist/runtime/run-context.service.d.ts +65 -0
- package/dist/runtime/run-context.service.js +236 -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-finish.d.ts +1 -1
- package/dist/runtime/run-jobs.d.ts +3 -5
- package/dist/runtime/run-jobs.js +7 -9
- package/dist/runtime/run-queue.d.ts +62 -5
- package/dist/runtime/run-queue.js +313 -40
- package/dist/runtime/run-worker.d.ts +19 -8
- package/dist/runtime/run-worker.js +105 -44
- package/dist/runtime/runtime.module.js +13 -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 +31 -26
- package/dist/runtime/subagents/definition.js +89 -142
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +116 -27
- package/dist/runtime/subagents/dispatch.js +213 -142
- 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/org-agents.js +2 -1
- 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 +25 -8
- package/dist/runtime/subagents/roster.js +48 -12
- package/dist/runtime/subagents/skill-fork.d.ts +4 -3
- package/dist/runtime/subagents/skill-fork.js +9 -5
- 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 +9 -6
- package/dist/runtime/subagents/subagents.service.js +13 -8
- package/dist/runtime/usage-report-jobs.d.ts +88 -0
- package/dist/runtime/usage-report-jobs.js +158 -0
- package/dist/runtime/usage-report.d.ts +35 -39
- package/dist/runtime/usage-report.js +171 -97
- package/dist/runtime/waits.d.ts +148 -39
- package/dist/runtime/waits.js +426 -112
- 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 +34 -7
- package/dist/sandbox/providers.js +54 -9
- package/dist/sandbox/sandbox-file-reader.d.ts +35 -0
- package/dist/sandbox/sandbox-file-reader.js +98 -0
- package/dist/sandbox/sandbox.module.d.ts +3 -2
- package/dist/sandbox/sandbox.module.js +10 -4
- package/dist/sandbox/sandbox.service.d.ts +345 -132
- package/dist/sandbox/sandbox.service.js +883 -399
- package/dist/sandbox/unreachable.d.ts +30 -0
- package/dist/sandbox/unreachable.js +108 -0
- package/dist/setup/kernel-checks.d.ts +91 -0
- package/dist/setup/kernel-checks.js +295 -0
- package/dist/setup/oauth-token-probe.d.ts +47 -0
- package/dist/setup/oauth-token-probe.js +108 -0
- package/dist/setup/redact-check.d.ts +18 -0
- package/dist/setup/redact-check.js +46 -0
- package/dist/setup/setup-check-registry.d.ts +86 -0
- package/dist/setup/setup-check-registry.js +75 -0
- package/dist/setup/setup-checks.controller.d.ts +28 -0
- package/dist/setup/setup-checks.controller.js +78 -0
- package/dist/setup/setup-checks.schemas.d.ts +38 -0
- package/dist/setup/setup-checks.schemas.js +43 -0
- package/dist/setup/setup-checks.service.d.ts +144 -0
- package/dist/setup/setup-checks.service.js +683 -0
- package/dist/setup/setup-guides.controller.d.ts +18 -0
- package/dist/setup/setup-guides.controller.js +48 -0
- package/dist/setup/setup-guides.schemas.d.ts +10 -0
- package/dist/setup/setup-guides.schemas.js +6 -0
- package/dist/setup/setup-guides.service.d.ts +126 -0
- package/dist/setup/setup-guides.service.js +315 -0
- package/dist/setup/setup.module.d.ts +8 -0
- package/dist/setup/setup.module.js +31 -0
- package/dist/skills/agent-skills.controller.d.ts +48 -0
- package/dist/skills/agent-skills.controller.js +131 -0
- package/dist/skills/agent-skills.service.d.ts +262 -0
- package/dist/skills/agent-skills.service.js +996 -0
- package/dist/skills/catalog.d.ts +14 -11
- package/dist/skills/catalog.js +32 -50
- package/dist/skills/changes.controller.d.ts +12 -22
- package/dist/skills/changes.controller.js +27 -56
- package/dist/skills/changes.service.d.ts +69 -115
- package/dist/skills/changes.service.js +249 -598
- package/dist/skills/conversation-catalog.d.ts +53 -0
- package/dist/skills/conversation-catalog.js +149 -0
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +2 -2
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +3 -3
- package/dist/skills/invoke.js +21 -8
- package/dist/skills/package.d.ts +15 -1
- package/dist/skills/package.js +14 -1
- package/dist/skills/skills.controller.d.ts +32 -6
- package/dist/skills/skills.controller.js +64 -11
- package/dist/skills/skills.module.js +25 -3
- package/dist/skills/skills.schemas.d.ts +44 -0
- package/dist/skills/skills.schemas.js +68 -0
- package/dist/skills/skills.service.d.ts +123 -26
- package/dist/skills/skills.service.js +493 -76
- package/dist/skills/usable.d.ts +82 -0
- package/dist/skills/usable.js +388 -0
- package/dist/themes/render-css.d.ts +13 -0
- package/dist/themes/render-css.js +135 -0
- package/dist/themes/theme-delivery.service.d.ts +36 -0
- package/dist/themes/theme-delivery.service.js +116 -0
- package/dist/themes/theme-state.d.ts +116 -0
- package/dist/themes/theme-state.js +221 -0
- package/dist/themes/theme-usage.d.ts +61 -0
- package/dist/themes/theme-usage.js +98 -0
- package/dist/themes/themes-public.controller.d.ts +33 -0
- package/dist/themes/themes-public.controller.js +98 -0
- package/dist/themes/themes.controller.d.ts +13 -0
- package/dist/themes/themes.controller.js +38 -0
- package/dist/themes/themes.module.d.ts +3 -0
- package/dist/themes/themes.module.js +21 -0
- package/dist/themes/themes.schemas.d.ts +3 -0
- package/dist/themes/themes.schemas.js +2 -0
- package/dist/themes/themes.service.d.ts +50 -0
- package/dist/themes/themes.service.js +99 -0
- package/dist/time-zone.d.ts +5 -0
- package/dist/time-zone.js +19 -0
- package/dist/tools/admin-connectors.d.ts +69 -0
- package/dist/tools/admin-connectors.js +135 -0
- package/dist/tools/approvals.controller.js +2 -3
- package/dist/tools/approvals.schemas.d.ts +21 -0
- package/dist/tools/approvals.schemas.js +15 -0
- package/dist/tools/approvals.service.d.ts +26 -2
- package/dist/tools/approvals.service.js +44 -5
- package/dist/tools/builtin-names.d.ts +104 -0
- package/dist/tools/builtin-names.js +164 -0
- package/dist/tools/builtins/agent.d.ts +27 -25
- package/dist/tools/builtins/agent.js +66 -63
- package/dist/tools/builtins/ask-user.d.ts +1 -1
- package/dist/tools/builtins/ask-user.js +5 -4
- package/dist/tools/builtins/builtin-tools.d.ts +23 -4
- package/dist/tools/builtins/builtin-tools.js +78 -12
- package/dist/tools/builtins/current-time.d.ts +26 -0
- package/dist/tools/builtins/current-time.js +99 -0
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +51 -0
- package/dist/tools/builtins/platform.js +451 -0
- package/dist/tools/builtins/read-tool-output.d.ts +1 -1
- package/dist/tools/builtins/read-tool-output.js +2 -2
- package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
- package/dist/tools/builtins/sandbox/bash.js +291 -39
- package/dist/tools/builtins/sandbox/common.d.ts +135 -36
- package/dist/tools/builtins/sandbox/common.js +222 -62
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +19 -16
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +64 -50
- package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
- package/dist/tools/builtins/sandbox/file-state.js +34 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob-match.js +1 -1
- package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob.js +17 -12
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +153 -34
- package/dist/tools/builtins/sandbox/index.d.ts +9 -5
- package/dist/tools/builtins/sandbox/index.js +13 -5
- package/dist/tools/builtins/sandbox/read.d.ts +2 -2
- package/dist/tools/builtins/sandbox/read.js +29 -19
- package/dist/tools/builtins/sandbox/task-output.d.ts +79 -0
- package/dist/tools/builtins/sandbox/task-output.js +334 -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.d.ts +1 -1
- package/dist/tools/builtins/sandbox/write.js +51 -44
- 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 +29 -18
- package/dist/tools/builtins/skill-load.js +125 -73
- package/dist/tools/builtins/tool-search.d.ts +13 -9
- package/dist/tools/builtins/tool-search.js +25 -14
- 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/connector-account-policies.d.ts +51 -0
- package/dist/tools/connector-account-policies.js +165 -0
- package/dist/tools/connectors.controller.d.ts +74 -9
- package/dist/tools/connectors.controller.js +133 -16
- package/dist/tools/connectors.schemas.d.ts +27 -0
- package/dist/tools/connectors.schemas.js +34 -0
- package/dist/tools/connectors.service.d.ts +101 -8
- package/dist/tools/connectors.service.js +266 -28
- package/dist/tools/credentials.d.ts +23 -0
- package/dist/tools/credentials.js +90 -1
- package/dist/tools/display-names.d.ts +9 -0
- package/dist/tools/display-names.js +24 -0
- package/dist/tools/drift.js +5 -5
- package/dist/tools/elicitation.js +1 -1
- 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 +61 -4
- package/dist/tools/info.js +119 -33
- package/dist/tools/legacy-data.d.ts +34 -0
- package/dist/tools/legacy-data.js +76 -0
- package/dist/tools/legacy-keys.d.ts +51 -0
- package/dist/tools/legacy-keys.js +114 -0
- package/dist/tools/naming.d.ts +1 -5
- package/dist/tools/naming.js +1 -7
- package/dist/tools/oauth/flow-paths.d.ts +1 -1
- package/dist/tools/oauth/flow-paths.js +1 -1
- package/dist/tools/oauth/flow.js +1 -1
- package/dist/tools/oauth/tokens.d.ts +54 -7
- package/dist/tools/oauth/tokens.js +87 -17
- package/dist/tools/org-tool-switches.d.ts +89 -0
- package/dist/tools/org-tool-switches.js +201 -0
- package/dist/tools/outputs.js +1 -1
- package/dist/tools/pipeline.d.ts +67 -47
- package/dist/tools/pipeline.js +319 -380
- package/dist/tools/policy.d.ts +30 -23
- package/dist/tools/policy.js +142 -64
- package/dist/tools/questions.controller.d.ts +1 -1
- package/dist/tools/questions.controller.js +1 -1
- package/dist/tools/questions.service.d.ts +23 -2
- package/dist/tools/questions.service.js +104 -2
- package/dist/tools/registry.d.ts +189 -68
- package/dist/tools/registry.js +318 -236
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +1 -1
- package/dist/tools/tools.module.js +31 -3
- package/dist/tools/validate.js +1 -1
- package/dist/ui/admin-ui.controller.d.ts +56 -0
- package/dist/ui/admin-ui.controller.js +192 -0
- package/dist/ui/arrangement.d.ts +65 -0
- package/dist/ui/arrangement.js +171 -0
- package/dist/ui/embed-token.d.ts +2 -2
- package/dist/ui/embed-token.js +30 -5
- package/dist/ui/registry.d.ts +42 -17
- package/dist/ui/registry.js +46 -14
- package/dist/ui/slots.controller.d.ts +11 -0
- package/dist/ui/slots.controller.js +25 -0
- package/dist/ui/ui-stream.d.ts +20 -3
- package/dist/ui/ui-stream.js +25 -7
- package/dist/ui/ui.schemas.d.ts +70 -0
- package/dist/ui/ui.schemas.js +65 -0
- package/dist/ui/views.controller.d.ts +35 -49
- package/dist/ui/views.controller.js +48 -70
- package/dist/ui/views.d.ts +112 -18
- package/dist/ui/views.js +254 -47
- package/package.json +6 -3
- package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
- 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/src/migrations/0089_model_kinds_usage.sql +38 -0
- package/src/migrations/0090_initial_passwords.sql +27 -0
- package/src/migrations/0091_account_time_zone.sql +4 -0
- package/src/migrations/0092_tools_default_on.sql +27 -0
- package/src/migrations/0093_connected_environments.sql +37 -0
- package/src/migrations/0094_environment_paths_idx.sql +7 -0
- package/src/migrations/0095_environment_files_resets.sql +5 -0
- package/src/migrations/0096_environment_demoted_default.sql +18 -0
- package/src/migrations/0097_extension_installs_enabled_at.sql +16 -0
- package/src/migrations/0098_single_provider_running_first.sql +41 -0
- package/src/migrations/0099_channel_connection_guide_ack.sql +6 -0
- package/src/migrations/0100_catalog_files.sql +13 -0
- package/src/migrations/0101_marketplace_icons.sql +32 -0
- package/src/migrations/0102_themes.sql +64 -0
- package/src/migrations/0103_ui_theme_setting.sql +7 -0
- package/src/migrations/0104_connector_tool_account_policies.sql +16 -0
- package/src/migrations/0105_devices_rename.sql +136 -0
- package/src/migrations/0106_setup_guides_v2.sql +10 -0
- package/src/migrations/0107_extension_client_builds.sql +50 -0
- package/src/migrations/0108_question_skipped.sql +6 -0
- package/src/migrations/0109_audit_platform_idx.sql +5 -0
- package/src/migrations/0110_usage_time_idx.sql +8 -0
- package/src/migrations/0111_agent_skill_sharing.sql +22 -0
- package/src/migrations/0112_skill_share_requests.sql +4 -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/tools/builtins/sandbox/names.d.ts +0 -7
- package/dist/tools/builtins/sandbox/names.js +0 -20
- package/dist/tools/builtins/skill-write.d.ts +0 -59
- package/dist/tools/builtins/skill-write.js +0 -244
|
@@ -11,24 +11,36 @@ import { randomUUID } from "node:crypto";
|
|
|
11
11
|
import { parseSkillMd, SKILL_ENTRY_FILE } from "@capybara-hq/plugin-sdk";
|
|
12
12
|
import { Inject, Injectable } from "@nestjs/common";
|
|
13
13
|
import { sql } from "kysely";
|
|
14
|
-
import {
|
|
14
|
+
import { offeredNamed } from "../catalog/component-state.js";
|
|
15
|
+
import { PLATFORM_OWNER } from "../catalog/ownership.js";
|
|
16
|
+
import { PlatformComponents } from "../catalog/platform-components.js";
|
|
17
|
+
import { assertItemInstallable } from "../catalog/request-rules.js";
|
|
15
18
|
import { AttachmentsService, SKILL_PACKAGE_CONTENT_TYPE, skillFilesPrefix, } from "../conversations/attachments.service.js";
|
|
19
|
+
import { EventLog } from "../conversations/event-log.js";
|
|
16
20
|
import { ApiError } from "../errors.js";
|
|
17
21
|
import { audit } from "../identity/audit.js";
|
|
18
22
|
import { assertCustomAllowed } from "../identity/settings.js";
|
|
23
|
+
import { notifySharedUpdate } from "../inbox/org-notices.js";
|
|
24
|
+
import { afterCommit } from "../infra/database/after-commit.js";
|
|
19
25
|
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
20
26
|
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
21
27
|
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
28
|
+
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
22
29
|
import { OrgLock } from "../orgs/org-lock.js";
|
|
23
30
|
import { textBytesTokens } from "../runtime/context/tokens.js";
|
|
24
31
|
import { StorageService } from "../storage/storage.service.js";
|
|
25
32
|
import { invocationOf, PINNED_SKILLS_LIMITS } from "./catalog.js";
|
|
26
|
-
import {
|
|
33
|
+
import { cancelRequestIn, } from "./conversation-catalog.js";
|
|
34
|
+
import { readSkillPackage, skillManifest, } from "./package.js";
|
|
35
|
+
import { PLATFORM_SOURCE, platformSkillsOn, platformSource, skillFileStore, skillVersionsById, usableSkills, } from "./usable.js";
|
|
27
36
|
/**
|
|
28
|
-
* The
|
|
29
|
-
* §9.2, Decision 8): the org's own skills
|
|
30
|
-
*
|
|
31
|
-
*
|
|
37
|
+
* The skills named in `skillNames` an org would see twice if catalog item `itemId` brought its
|
|
38
|
+
* skills (spec §9.2, Decision 8; rule 10 of the plugin scope spec): the org's own usable skills
|
|
39
|
+
* (`catalog_item_id` null: uploaded or written by an agent; unlinked, or pinned copies of another
|
|
40
|
+
* plugin's platform skill), org skills of other catalog items, and other plugins' platform skills
|
|
41
|
+
* on in the org. A skill of the same item (an org copy of it, linked or not) is not a conflict;
|
|
42
|
+
* an unpinned copy of another plugin's platform skill counts through that platform skill. In the
|
|
43
|
+
* order of `skillNames`.
|
|
32
44
|
*/
|
|
33
45
|
export async function skillConflicts(db, orgId, itemId, skillNames) {
|
|
34
46
|
if (skillNames.length === 0)
|
|
@@ -36,32 +48,71 @@ export async function skillConflicts(db, orgId, itemId, skillNames) {
|
|
|
36
48
|
const rows = await db
|
|
37
49
|
.selectFrom("skills as s")
|
|
38
50
|
.leftJoin("catalog_items as i", "i.id", "s.catalog_item_id")
|
|
39
|
-
.
|
|
51
|
+
.leftJoin("platform_skills as p", "p.id", "s.platform_skill_id")
|
|
52
|
+
.select([
|
|
53
|
+
"s.name",
|
|
54
|
+
"s.catalog_item_id",
|
|
55
|
+
"s.catalog_version",
|
|
56
|
+
"i.name as item_name",
|
|
57
|
+
"p.catalog_item_id as platform_item_id",
|
|
58
|
+
"p.plugin_name as platform_plugin",
|
|
59
|
+
])
|
|
40
60
|
.where("s.org_id", "=", orgId)
|
|
41
61
|
.where("s.scope", "=", "org")
|
|
42
62
|
.where("s.deleted_at", "is", null)
|
|
43
63
|
.where("s.name", "in", [...skillNames])
|
|
64
|
+
.where((eb) => eb.or([eb("s.platform_skill_id", "is", null), eb("s.pinned_version", "is not", null)]))
|
|
44
65
|
.where((eb) => eb.or([eb("s.catalog_item_id", "is", null), eb("s.catalog_item_id", "<>", itemId)]))
|
|
66
|
+
.where((eb) => eb.or([eb("p.catalog_item_id", "is", null), eb("p.catalog_item_id", "<>", itemId)]))
|
|
45
67
|
.execute();
|
|
46
|
-
const byName = new Map(
|
|
68
|
+
const byName = new Map();
|
|
69
|
+
for (const r of rows) {
|
|
70
|
+
byName.set(r.name, r.catalog_item_id !== null
|
|
71
|
+
? {
|
|
72
|
+
kind: "plugin",
|
|
73
|
+
name: r.item_name ?? r.catalog_item_id,
|
|
74
|
+
version: r.catalog_version ?? "",
|
|
75
|
+
}
|
|
76
|
+
: r.platform_plugin !== null
|
|
77
|
+
? { kind: "plugin", name: r.platform_plugin, version: "" }
|
|
78
|
+
: { kind: "org" });
|
|
79
|
+
}
|
|
80
|
+
const platform = await db
|
|
81
|
+
.selectFrom("platform_skills as p")
|
|
82
|
+
.innerJoin("platform_skill_versions as v", (j) => j.onRef("v.skill_id", "=", "p.id").onRef("v.version", "=", "p.current_version"))
|
|
83
|
+
.select(["p.id", "p.name", "p.plugin_name", "v.catalog_version"])
|
|
84
|
+
.where("p.deleted_at", "is", null)
|
|
85
|
+
.where("p.name", "in", [...skillNames])
|
|
86
|
+
.where((eb) => eb.or([eb("p.catalog_item_id", "is", null), eb("p.catalog_item_id", "<>", itemId)]))
|
|
87
|
+
.execute();
|
|
88
|
+
const on = await platformSkillsOn(db, orgId, platform.map((p) => p.id));
|
|
89
|
+
for (const p of platform) {
|
|
90
|
+
if (!on.has(p.id) || byName.has(p.name))
|
|
91
|
+
continue;
|
|
92
|
+
byName.set(p.name, p.plugin_name !== null
|
|
93
|
+
? { kind: "plugin", name: p.plugin_name, version: p.catalog_version ?? "" }
|
|
94
|
+
: { kind: "plugin", name: "platform", version: "" });
|
|
95
|
+
}
|
|
47
96
|
const out = [];
|
|
48
97
|
for (const name of new Set(skillNames)) {
|
|
49
|
-
const
|
|
50
|
-
if (
|
|
51
|
-
|
|
52
|
-
out.push({
|
|
53
|
-
skill: name,
|
|
54
|
-
source: r.catalog_item_id === null
|
|
55
|
-
? { kind: "org" }
|
|
56
|
-
: {
|
|
57
|
-
kind: "plugin",
|
|
58
|
-
name: r.item_name ?? r.catalog_item_id,
|
|
59
|
-
version: r.catalog_version ?? "",
|
|
60
|
-
},
|
|
61
|
-
});
|
|
98
|
+
const source = byName.get(name);
|
|
99
|
+
if (source)
|
|
100
|
+
out.push({ skill: name, source });
|
|
62
101
|
}
|
|
63
102
|
return out;
|
|
64
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* 409 `plugin.skill_conflict` for a new org skill named like platform skills offered to the org
|
|
106
|
+
* (rule 10): one detail per platform skill, its plugin as the source.
|
|
107
|
+
*/
|
|
108
|
+
function platformNameTaken(name, offered) {
|
|
109
|
+
const sources = offered.map((p) => ({
|
|
110
|
+
skill: name,
|
|
111
|
+
source: { kind: "plugin", name: p.plugin ?? "platform", version: "" },
|
|
112
|
+
}));
|
|
113
|
+
const by = sources.map((s) => `plugin "${s.source.name}"`).join(", ");
|
|
114
|
+
return new ApiError("plugin.skill_conflict", `Skill "${name}" is offered to this organization by ${by}; skill names are unique in an organization. Rename your skill and upload it again.`, sources);
|
|
115
|
+
}
|
|
65
116
|
/** One line of the conflict message (spec §9.2). */
|
|
66
117
|
export function skillConflictLine(c) {
|
|
67
118
|
const source = c.source.kind === "org"
|
|
@@ -79,7 +130,8 @@ const PUT_CONCURRENCY = 4;
|
|
|
79
130
|
export const SKILL_BODY_MAX_BYTES = 1024 * 1024;
|
|
80
131
|
const notFound = () => new ApiError("skill.not_found", "Skill not found");
|
|
81
132
|
/**
|
|
82
|
-
* 在调用方事务里核对 agent 定义引用的组织技能:每个 id 都必须是该组织未删除的 `scope=org`
|
|
133
|
+
* 在调用方事务里核对 agent 定义引用的组织技能:每个 id 都必须是该组织未删除的 `scope=org` 技能
|
|
134
|
+
* (or, phase 2, a platform skill on in the org: skills/usable.ts),
|
|
83
135
|
* 否则 `validation_failed`(path `skills.orgSkills.<i>`);不可重复。调用方须已锁组织行(技能删除同样锁组织行,二者串行)。
|
|
84
136
|
* `kept`:当前版本里已有的引用(保存时合法),修改时不再核对——技能之后被删也不挡住其他改动(运行时由 T14 忽略已删除的技能)。
|
|
85
137
|
*/
|
|
@@ -93,15 +145,12 @@ export async function assertOrgSkills(db, orgId, ids, kept = new Set()) {
|
|
|
93
145
|
});
|
|
94
146
|
const toCheck = [...seen].filter((id) => !kept.has(id));
|
|
95
147
|
if (toCheck.length > 0) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
.
|
|
100
|
-
.
|
|
101
|
-
|
|
102
|
-
.where("id", "in", toCheck)
|
|
103
|
-
.execute();
|
|
104
|
-
const live = new Set([...kept, ...found.map((r) => r.id)]);
|
|
148
|
+
// The org's skills, its copies linked to a platform skill while that one is on in the org
|
|
149
|
+
// (as `assertPinnedSkills` sees them), and platform skills on in the org (phase 2)
|
|
150
|
+
const found = [...(await skillVersionsById(db, orgId, toCheck)).values()]
|
|
151
|
+
.filter((r) => r.scope === "org")
|
|
152
|
+
.map((r) => r.id);
|
|
153
|
+
const live = new Set([...kept, ...found]);
|
|
105
154
|
ids.forEach((id, i) => {
|
|
106
155
|
if (!live.has(id)) {
|
|
107
156
|
details.push({
|
|
@@ -150,17 +199,12 @@ export async function assertPinnedSkills(db, orgId, agentId, skills, kept = [])
|
|
|
150
199
|
}
|
|
151
200
|
unique.push(id);
|
|
152
201
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
.where("s.org_id", "=", orgId)
|
|
160
|
-
.where("s.deleted_at", "is", null)
|
|
161
|
-
.where("s.id", "in", unique)
|
|
162
|
-
.execute();
|
|
163
|
-
const byId = new Map(rows.map((r) => [r.id, r]));
|
|
202
|
+
// org and agent skills, org copies linked to a platform skill (its current version) and platform
|
|
203
|
+
// skills on in the org (phase 2)
|
|
204
|
+
const byId = new Map([...(await skillVersionsById(db, orgId, unique)).values()].map((r) => [
|
|
205
|
+
r.id,
|
|
206
|
+
{ id: r.id, scope: r.scope, agent_id: r.agentId, manifest: r.manifest },
|
|
207
|
+
]));
|
|
164
208
|
const keptSet = new Set(kept);
|
|
165
209
|
const selected = new Set(skills?.orgSkills ?? []);
|
|
166
210
|
for (const id of unique) {
|
|
@@ -212,8 +256,52 @@ const summary = (r) => {
|
|
|
212
256
|
tokenEstimate: textBytesTokens(entryBytes),
|
|
213
257
|
manual: inv.model === false,
|
|
214
258
|
fork: inv.fork !== undefined,
|
|
259
|
+
origin: "org",
|
|
260
|
+
shareable: r.scope === "org" && r.shareable,
|
|
215
261
|
};
|
|
216
262
|
};
|
|
263
|
+
/** Platform skills with the columns of {@link summary} (phase 2). */
|
|
264
|
+
const platformSummaryQuery = (db) => db
|
|
265
|
+
.selectFrom("platform_skills as p")
|
|
266
|
+
.leftJoin("platform_skill_versions as v", (j) => j.onRef("v.skill_id", "=", "p.id").onRef("v.version", "=", "p.current_version"))
|
|
267
|
+
.leftJoin("orgs as owner", "owner.id", "p.owner_org_id")
|
|
268
|
+
.select([
|
|
269
|
+
"p.id",
|
|
270
|
+
"p.name",
|
|
271
|
+
"p.description",
|
|
272
|
+
"p.current_version",
|
|
273
|
+
"p.created_at",
|
|
274
|
+
"p.updated_at",
|
|
275
|
+
"p.plugin_name",
|
|
276
|
+
"p.owner_org_id",
|
|
277
|
+
"owner.name as owner_name",
|
|
278
|
+
"v.source_format",
|
|
279
|
+
"v.suggest_pinned",
|
|
280
|
+
"v.manifest",
|
|
281
|
+
])
|
|
282
|
+
.where("p.deleted_at", "is", null);
|
|
283
|
+
const platformSummary = (r) => ({
|
|
284
|
+
...summary({
|
|
285
|
+
id: r.id,
|
|
286
|
+
scope: "org",
|
|
287
|
+
agent_id: null,
|
|
288
|
+
name: r.name,
|
|
289
|
+
description: r.description,
|
|
290
|
+
current_version: r.current_version,
|
|
291
|
+
created_by: null,
|
|
292
|
+
created_at: r.created_at,
|
|
293
|
+
updated_at: r.updated_at,
|
|
294
|
+
item_name: r.plugin_name,
|
|
295
|
+
source_format: r.source_format,
|
|
296
|
+
suggest_pinned: r.suggest_pinned,
|
|
297
|
+
manifest: r.manifest,
|
|
298
|
+
shareable: false,
|
|
299
|
+
}),
|
|
300
|
+
origin: "platform",
|
|
301
|
+
owner: r.owner_org_id === null
|
|
302
|
+
? PLATFORM_OWNER
|
|
303
|
+
: { kind: "org", orgId: r.owner_org_id, name: r.owner_name ?? r.owner_org_id },
|
|
304
|
+
});
|
|
217
305
|
/**
|
|
218
306
|
* Skills with their summary columns: the catalog item name (provenance) and the current version's
|
|
219
307
|
* source format, pinned suggestion and manifest.
|
|
@@ -236,33 +324,75 @@ const summaryQuery = (db) => db
|
|
|
236
324
|
"v.source_format",
|
|
237
325
|
"v.suggest_pinned",
|
|
238
326
|
"v.manifest",
|
|
327
|
+
"s.shareable",
|
|
239
328
|
]);
|
|
240
|
-
/**
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
description: pkg.description,
|
|
246
|
-
files: pkg.files.map(({ path, size, sha256 }) => ({ path, size, sha256 })),
|
|
247
|
-
...(invocation !== undefined && { invocation }),
|
|
248
|
-
};
|
|
249
|
-
}
|
|
329
|
+
/**
|
|
330
|
+
* 技能库(M5 T13):组织技能的上传(新技能或新版本)、列表、详情与软删除。
|
|
331
|
+
* 字节在对象存储 `kernel/<orgId>/skills/<uploadId>/<path>`,元数据在 PG;无进程内状态,可多副本共用。
|
|
332
|
+
*/
|
|
333
|
+
export { skillManifest } from "./package.js";
|
|
250
334
|
let SkillsService = class SkillsService {
|
|
251
335
|
db;
|
|
252
336
|
storage;
|
|
253
337
|
attachments;
|
|
254
338
|
txHost;
|
|
255
339
|
orgLock;
|
|
256
|
-
|
|
340
|
+
platform;
|
|
341
|
+
eventLog;
|
|
342
|
+
log;
|
|
343
|
+
constructor(db, storage, attachments, txHost, orgLock,
|
|
344
|
+
/** The owner's new versions of a skill it promoted go to the platform row (ruling P3-4). */
|
|
345
|
+
platform, eventLog, log) {
|
|
257
346
|
this.db = db;
|
|
258
347
|
this.storage = storage;
|
|
259
348
|
this.attachments = attachments;
|
|
260
349
|
this.txHost = txHost;
|
|
261
350
|
this.orgLock = orgLock;
|
|
351
|
+
this.platform = platform;
|
|
352
|
+
this.eventLog = eventLog;
|
|
353
|
+
this.log = log;
|
|
354
|
+
this.catalogDeps = { db, log, eventLog };
|
|
355
|
+
}
|
|
356
|
+
catalogDeps;
|
|
357
|
+
/**
|
|
358
|
+
* Writes a package's files where its version will live: for a new version of a skill the org
|
|
359
|
+
* promoted (ruling P3-3: a live org skill of the name linked without a pin to a platform skill
|
|
360
|
+
* the org owns), the platform row's next version prefix in `deployment/` (ruling P3-4); else
|
|
361
|
+
* `kernel/<orgId>/<prefix>`. Returns the platform version prepared, if any. Never inside a
|
|
362
|
+
* transaction; the transaction checks that the skill is still promoted (and still at that
|
|
363
|
+
* version).
|
|
364
|
+
*/
|
|
365
|
+
async putVersionFiles(orgId, pkg, prefix, catalog) {
|
|
366
|
+
const promoted = catalog ? undefined : await promotedSkillNamed(this.db.db, orgId, pkg.name);
|
|
367
|
+
if (promoted !== undefined)
|
|
368
|
+
return this.platform.prepareOwnerVersion(promoted, pkg.files);
|
|
369
|
+
await this.putFiles(orgId, prefix, pkg.files);
|
|
370
|
+
return undefined;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* The summary of the org's skill `copyId` it promoted to `platformId`, as it serves now: the
|
|
374
|
+
* platform row's current version (ruling P3-4) under the org row's id, still the org's own.
|
|
375
|
+
*/
|
|
376
|
+
async promotedSummary(copyId, platformId) {
|
|
377
|
+
const own = await summaryQuery(this.db.db).where("s.id", "=", copyId).executeTakeFirstOrThrow();
|
|
378
|
+
const p = await platformSummaryQuery(this.db.db)
|
|
379
|
+
.where("p.id", "=", platformId)
|
|
380
|
+
.executeTakeFirst();
|
|
381
|
+
if (!p)
|
|
382
|
+
return summary(own);
|
|
383
|
+
return {
|
|
384
|
+
...platformSummary(p),
|
|
385
|
+
id: copyId,
|
|
386
|
+
origin: "org",
|
|
387
|
+
plugin: own.item_name,
|
|
388
|
+
createdBy: own.created_by,
|
|
389
|
+
createdAt: own.created_at,
|
|
390
|
+
shareable: own.shareable,
|
|
391
|
+
};
|
|
262
392
|
}
|
|
263
393
|
/** 登记一个技能包上传(预签名 POST,`application/zip`,≤ 50MB);角色由路由的 `skills.manage` 把关。 */
|
|
264
394
|
async createUpload(orgId, accountId, input) {
|
|
265
|
-
// 部署设置 customSkills 为 deny
|
|
395
|
+
// 部署设置 customSkills 为 deny:组织只能从平台目录安装技能(C22)
|
|
266
396
|
await assertCustomAllowed(this.db.db, "customSkills");
|
|
267
397
|
return this.attachments.create(orgId, accountId, { name: input.name, contentType: SKILL_PACKAGE_CONTENT_TYPE, size: input.size }, "skill-package");
|
|
268
398
|
}
|
|
@@ -275,7 +405,7 @@ let SkillsService = class SkillsService {
|
|
|
275
405
|
* 第 3 步之前中断不会留下可见的版本;已写的文件由清理任务在上传过期后删除(未被任何版本引用时)。
|
|
276
406
|
* 同一上传已经产生过版本(上次提交了、响应丢了而重试)→ 直接返回那个版本(同组织、同一发起人)。
|
|
277
407
|
*/
|
|
278
|
-
async upload(orgId, actorAccountId, uploadId, actorTokenId) {
|
|
408
|
+
async upload(orgId, actorAccountId, uploadId, actorTokenId, shareable) {
|
|
279
409
|
this.storage.assertAvailable();
|
|
280
410
|
const prefix = skillFilesPrefix(uploadId);
|
|
281
411
|
// 重试(上次已提交、响应丢了):同一上传已产生的版本直接返回,不再要求上传仍可用
|
|
@@ -298,8 +428,18 @@ let SkillsService = class SkillsService {
|
|
|
298
428
|
await assertCustomAllowed(this.db.db, "customSkills");
|
|
299
429
|
const zip = await this.attachments.readSkillPackage(orgId, actorAccountId, uploadId);
|
|
300
430
|
const pkg = await readSkillPackage(zip);
|
|
301
|
-
|
|
302
|
-
|
|
431
|
+
// A skill the org promoted gets its version on the platform row (ruling P3-4). Its retry after
|
|
432
|
+
// a lost response is not recognized above (the lookup is by the org prefix): the consumed
|
|
433
|
+
// upload is refused and the owner sees the version in the library (accepted, review M6)
|
|
434
|
+
const owner = await this.putVersionFiles(orgId, pkg, prefix, false);
|
|
435
|
+
try {
|
|
436
|
+
return await this.createUploadedVersionIn(orgId, actorAccountId, uploadId, pkg, prefix, actorTokenId, shareable, owner);
|
|
437
|
+
}
|
|
438
|
+
catch (e) {
|
|
439
|
+
if (owner !== undefined)
|
|
440
|
+
await this.platform.discardPrefix(owner.prefix);
|
|
441
|
+
throw e;
|
|
442
|
+
}
|
|
303
443
|
}
|
|
304
444
|
/**
|
|
305
445
|
* The transaction of {@link upload}: under the org row lock (re-checking `skills.manage`), the
|
|
@@ -307,28 +447,66 @@ let SkillsService = class SkillsService {
|
|
|
307
447
|
* upload only one succeeds), then the version is written in the same transaction
|
|
308
448
|
* ({@link createVersionIn} joins it).
|
|
309
449
|
*/
|
|
310
|
-
async createUploadedVersionIn(orgId, actorAccountId, uploadId, pkg, prefix, actorTokenId) {
|
|
450
|
+
async createUploadedVersionIn(orgId, actorAccountId, uploadId, pkg, prefix, actorTokenId, shareable, owner) {
|
|
311
451
|
await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "skills.manage");
|
|
312
452
|
await assertCustomAllowed(this.db.db, "customSkills");
|
|
313
453
|
await this.attachments.consumeSkillPackage(orgId, actorAccountId, uploadId);
|
|
314
454
|
return this.createVersionIn(orgId, actorAccountId, pkg, skillManifest(pkg), prefix, {
|
|
315
455
|
prefix,
|
|
316
456
|
...(actorTokenId !== undefined && { actorTokenId }),
|
|
457
|
+
...(shareable !== undefined && { shareable }),
|
|
458
|
+
...(owner !== undefined && { owner }),
|
|
317
459
|
});
|
|
318
460
|
}
|
|
319
461
|
/**
|
|
320
|
-
*
|
|
462
|
+
* 用一组已校验的技能文件创建组织技能或给同名技能新增版本(上传与平台目录安装共用):
|
|
321
463
|
* 1. 把文件写到 `kernel/<orgId>/<prefix>`(缺省 `skills/<新 id>/`);
|
|
322
464
|
* 2. 一个事务里:锁组织行并复核 `skills.manage`(目录安装:按条目策略复核),
|
|
323
465
|
* 同名未删除的组织技能存在则 `current_version + 1`,否则新建;技能与版本都记下 `directory` 来源(没有则清空:
|
|
324
466
|
* 自定义上传盖在目录技能上就不再算目录安装),写版本与审计
|
|
325
467
|
* (`skill.created` / `skill.version_created`,目录安装时 detail 带 directory)。
|
|
326
468
|
*/
|
|
327
|
-
async createVersionFromFiles(orgId,
|
|
469
|
+
async createVersionFromFiles(orgId,
|
|
470
|
+
/** null: the kernel itself (the plugin scope sync installing a plugin), no role check. */
|
|
471
|
+
actorAccountId, pkg, opts = {}) {
|
|
328
472
|
this.storage.assertAvailable();
|
|
329
473
|
const prefix = opts.prefix ?? skillFilesPrefix(randomUUID());
|
|
330
|
-
|
|
331
|
-
|
|
474
|
+
if (opts.stored !== undefined) {
|
|
475
|
+
const { stored, ...rest } = opts;
|
|
476
|
+
return this.createVersionIn(orgId, actorAccountId, pkg, skillManifest(pkg), prefix, {
|
|
477
|
+
...rest,
|
|
478
|
+
...(stored.owner !== undefined && { owner: stored.owner }),
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
const owner = await this.putVersionFiles(orgId, pkg, prefix, opts.catalog !== undefined);
|
|
482
|
+
try {
|
|
483
|
+
return await this.createVersionIn(orgId, actorAccountId, pkg, skillManifest(pkg), prefix, {
|
|
484
|
+
...opts,
|
|
485
|
+
...(owner !== undefined && { owner }),
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
catch (e) {
|
|
489
|
+
// the loser of two owner versions racing for one number: its objects go (ruling P3-45)
|
|
490
|
+
if (owner !== undefined)
|
|
491
|
+
await this.platform.discardPrefix(owner.prefix);
|
|
492
|
+
throw e;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* For a new version whose files are already in `kernel/<orgId>/` (a proposed version's draft):
|
|
497
|
+
* when the org skill of that name is one the org promoted, writes the files as the platform
|
|
498
|
+
* row's next version (never inside a transaction) and returns it for
|
|
499
|
+
* `createVersionFromFiles({ stored: { owner } })`; else nothing is written.
|
|
500
|
+
*/
|
|
501
|
+
async prepareStoredVersion(orgId, pkg) {
|
|
502
|
+
const promoted = await promotedSkillNamed(this.db.db, orgId, pkg.name);
|
|
503
|
+
return promoted === undefined
|
|
504
|
+
? undefined
|
|
505
|
+
: this.platform.prepareOwnerVersion(promoted, pkg.files);
|
|
506
|
+
}
|
|
507
|
+
/** Deletes a platform version {@link prepareStoredVersion} wrote that was not used. */
|
|
508
|
+
async discardStoredVersion(owner) {
|
|
509
|
+
await this.platform.discardPrefix(owner.prefix);
|
|
332
510
|
}
|
|
333
511
|
/** Writes a skill package's files to `kernel/<orgId>/<prefix>` (a few at a time). */
|
|
334
512
|
async putFiles(orgId, prefix, files) {
|
|
@@ -345,20 +523,46 @@ let SkillsService = class SkillsService {
|
|
|
345
523
|
}
|
|
346
524
|
/** The transaction of {@link createVersionFromFiles}. */
|
|
347
525
|
async createVersionIn(orgId, actorAccountId, pkg, manifest, prefix, opts) {
|
|
348
|
-
await this.orgLock.
|
|
526
|
+
await this.orgLock.lockFor(orgId, actorAccountId, "skills.manage");
|
|
349
527
|
if (opts.catalog) {
|
|
350
528
|
const c = opts.catalog;
|
|
351
529
|
await assertItemInstallable(this.db.db, orgId, c.itemId, c.approvedBy ?? c.itemId);
|
|
352
530
|
}
|
|
353
531
|
const existing = await this.db
|
|
354
532
|
.selectFrom("skills")
|
|
355
|
-
.select(["id", "current_version", "catalog_item_id"])
|
|
533
|
+
.select(["id", "current_version", "catalog_item_id", "platform_skill_id"])
|
|
356
534
|
.where("org_id", "=", orgId)
|
|
357
535
|
.where("scope", "=", "org")
|
|
358
536
|
.where("name", "=", pkg.name)
|
|
359
537
|
.where("deleted_at", "is", null)
|
|
360
538
|
.forUpdate()
|
|
361
539
|
.executeTakeFirst();
|
|
540
|
+
// The org's own skill it promoted (ruling P3-3): its new version goes to the platform row and
|
|
541
|
+
// reaches every org using it (ruling P3-4); the files were written there before this
|
|
542
|
+
// transaction, for the platform version current then
|
|
543
|
+
const promoted = existing && !opts.catalog
|
|
544
|
+
? await promotedSkillNamed(this.db.db, orgId, pkg.name, existing.id)
|
|
545
|
+
: undefined;
|
|
546
|
+
if (promoted !== undefined || opts.owner !== undefined) {
|
|
547
|
+
if (existing === undefined || promoted === undefined || opts.owner?.platformId !== promoted) {
|
|
548
|
+
throw new ApiError("component.version_stale", "The skill changed while this version was uploaded; upload it again");
|
|
549
|
+
}
|
|
550
|
+
const version = await this.platform.addOwnerVersionIn(opts.owner, manifest, actorAccountId);
|
|
551
|
+
await audit(this.db.db, {
|
|
552
|
+
actorAccountId,
|
|
553
|
+
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
554
|
+
orgId,
|
|
555
|
+
action: "skill.version_created",
|
|
556
|
+
target: existing.id,
|
|
557
|
+
detail: { name: pkg.name, version, files: manifest.files.length, platformId: promoted },
|
|
558
|
+
});
|
|
559
|
+
await notifySharedUpdate(this.db.db, { kind: "skill", id: promoted }, { name: pkg.name, from: String(version - 1), to: String(version) });
|
|
560
|
+
return {
|
|
561
|
+
skill: await this.promotedSummary(existing.id, promoted),
|
|
562
|
+
version,
|
|
563
|
+
created: false,
|
|
564
|
+
};
|
|
565
|
+
}
|
|
362
566
|
// A catalog install never overwrites a skill of other provenance (spec §9.2; planning checks
|
|
363
567
|
// it first, this closes the race with a skill created since)
|
|
364
568
|
if (existing && opts.catalog && existing.catalog_item_id !== opts.catalog.itemId) {
|
|
@@ -366,8 +570,20 @@ let SkillsService = class SkillsService {
|
|
|
366
570
|
if (conflicts.length > 0)
|
|
367
571
|
throw skillConflictError(conflicts);
|
|
368
572
|
}
|
|
573
|
+
// Rule 10 (plugin scope phase 2, ruling P2-3): a new org skill may not take the name of a
|
|
574
|
+
// platform skill offered to the org (on, or one an org admin could switch on)
|
|
575
|
+
if (!existing && !opts.catalog) {
|
|
576
|
+
const offered = await offeredNamed(this.db.db, orgId, "skill", pkg.name);
|
|
577
|
+
if (offered.length > 0)
|
|
578
|
+
throw platformNameTaken(pkg.name, offered);
|
|
579
|
+
}
|
|
369
580
|
const id = existing?.id ?? randomUUID();
|
|
370
581
|
const version = (existing?.current_version ?? 0) + 1;
|
|
582
|
+
// An org's own version of a copy linked to a platform skill pins the copy to it (ruling P2-4):
|
|
583
|
+
// the org's change takes effect, and shows as individually updated later
|
|
584
|
+
const pin = existing && existing.platform_skill_id !== null && !opts.catalog
|
|
585
|
+
? { pinned_version: version }
|
|
586
|
+
: {};
|
|
371
587
|
// 来源跟着最新版本走:目录安装记条目与版本,自定义上传清掉(内容已不是目录里的那份)
|
|
372
588
|
const provenance = {
|
|
373
589
|
catalog_item_id: opts.catalog?.itemId ?? null,
|
|
@@ -380,6 +596,7 @@ let SkillsService = class SkillsService {
|
|
|
380
596
|
current_version: version,
|
|
381
597
|
description: pkg.description,
|
|
382
598
|
...provenance,
|
|
599
|
+
...pin,
|
|
383
600
|
updated_at: sql `now()`,
|
|
384
601
|
})
|
|
385
602
|
.where("id", "=", id)
|
|
@@ -397,6 +614,7 @@ let SkillsService = class SkillsService {
|
|
|
397
614
|
description: pkg.description,
|
|
398
615
|
current_version: 1,
|
|
399
616
|
created_by: actorAccountId,
|
|
617
|
+
...(opts.shareable !== undefined && { shareable: opts.shareable }),
|
|
400
618
|
...provenance,
|
|
401
619
|
})
|
|
402
620
|
.execute();
|
|
@@ -425,6 +643,7 @@ let SkillsService = class SkillsService {
|
|
|
425
643
|
version,
|
|
426
644
|
files: manifest.files.length,
|
|
427
645
|
...(opts.catalog && { catalog: opts.catalog }),
|
|
646
|
+
...opts.auditDetail,
|
|
428
647
|
},
|
|
429
648
|
});
|
|
430
649
|
const row = await summaryQuery(this.db.db).where("s.id", "=", id).executeTakeFirstOrThrow();
|
|
@@ -506,15 +725,78 @@ let SkillsService = class SkillsService {
|
|
|
506
725
|
});
|
|
507
726
|
return true;
|
|
508
727
|
}
|
|
509
|
-
/**
|
|
728
|
+
/**
|
|
729
|
+
* The org skill library, sorted by name: the org's live `scope=org` skills except copies linked
|
|
730
|
+
* to a platform skill without a pin, and the platform skills on in the org (phase 2,
|
|
731
|
+
* `usableSkills`; `origin` tells them apart), each with the ids of those copies (`linkedIds`).
|
|
732
|
+
*/
|
|
510
733
|
async list(orgId) {
|
|
511
|
-
const
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
734
|
+
const usable = await usableSkills(this.db.db, orgId);
|
|
735
|
+
const orgIds = usable.filter((u) => u.origin === "org").map((u) => u.id);
|
|
736
|
+
const platformIds = usable.filter((u) => u.origin === "platform").map((u) => u.id);
|
|
737
|
+
// the org's own skills it promoted serving a newer platform version (ruling P3-4)
|
|
738
|
+
const promotedTo = new Map(usable.flatMap((u) => u.origin === "org" &&
|
|
739
|
+
u.platformSkillId !== undefined &&
|
|
740
|
+
u.source.startsWith(PLATFORM_SOURCE)
|
|
741
|
+
? [[u.id, u.platformSkillId]]
|
|
742
|
+
: []));
|
|
743
|
+
const own = orgIds.length === 0
|
|
744
|
+
? []
|
|
745
|
+
: await Promise.all((await summaryQuery(this.db.db).where("s.id", "in", orgIds).orderBy("s.name").execute()).map((r) => {
|
|
746
|
+
const to = promotedTo.get(r.id);
|
|
747
|
+
return to === undefined ? summary(r) : this.promotedSummary(r.id, to);
|
|
748
|
+
}));
|
|
749
|
+
if (platformIds.length === 0)
|
|
750
|
+
return own;
|
|
751
|
+
const links = await this.db
|
|
752
|
+
.selectFrom("skills")
|
|
753
|
+
.select(["id", "platform_skill_id"])
|
|
754
|
+
.where("org_id", "=", orgId)
|
|
755
|
+
.where("scope", "=", "org")
|
|
756
|
+
.where("deleted_at", "is", null)
|
|
757
|
+
.where("pinned_version", "is", null)
|
|
758
|
+
.where("platform_skill_id", "in", platformIds)
|
|
759
|
+
.orderBy("id")
|
|
516
760
|
.execute();
|
|
517
|
-
|
|
761
|
+
const linked = new Map();
|
|
762
|
+
for (const l of links) {
|
|
763
|
+
const k = l.platform_skill_id;
|
|
764
|
+
linked.set(k, [...(linked.get(k) ?? []), l.id]);
|
|
765
|
+
}
|
|
766
|
+
const platform = (await platformSummaryQuery(this.db.db).where("p.id", "in", platformIds).execute()).map((r) => ({ ...platformSummary(r), linkedIds: linked.get(r.id) ?? [] }));
|
|
767
|
+
return [...own, ...platform].sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : a.id < b.id ? -1 : 1);
|
|
768
|
+
}
|
|
769
|
+
/**
|
|
770
|
+
* The agent's skills as the agent page lists them, by name: {@link listForAgent} (`shared:
|
|
771
|
+
* false`) plus `sharePending`, true while a share request of the skill waits for an org admin,
|
|
772
|
+
* and the org skills the agent shared (`origin_agent_id`; `scope: 'org'`, `shared: true`, same
|
|
773
|
+
* id as before sharing): the agent keeps them without selecting them.
|
|
774
|
+
*/
|
|
775
|
+
async listOwnForAgent(orgId, agentId) {
|
|
776
|
+
const [skills, shared] = await Promise.all([
|
|
777
|
+
this.listForAgent(orgId, agentId),
|
|
778
|
+
summaryQuery(this.db.db)
|
|
779
|
+
.where("s.org_id", "=", orgId)
|
|
780
|
+
.where("s.scope", "=", "org")
|
|
781
|
+
.where("s.origin_agent_id", "=", agentId)
|
|
782
|
+
.where("s.deleted_at", "is", null)
|
|
783
|
+
.execute(),
|
|
784
|
+
]);
|
|
785
|
+
const pending = skills.length === 0
|
|
786
|
+
? []
|
|
787
|
+
: await this.db
|
|
788
|
+
.selectFrom("skill_change_requests")
|
|
789
|
+
.select("skill_id")
|
|
790
|
+
.where("org_id", "=", orgId)
|
|
791
|
+
.where("kind", "=", "share")
|
|
792
|
+
.where("status", "=", "pending")
|
|
793
|
+
.where("skill_id", "in", skills.map((s) => s.id))
|
|
794
|
+
.execute();
|
|
795
|
+
const ids = new Set(pending.map((r) => r.skill_id));
|
|
796
|
+
return [
|
|
797
|
+
...skills.map((s) => ({ ...s, sharePending: ids.has(s.id), shared: false })),
|
|
798
|
+
...shared.map((r) => ({ ...summary(r), sharePending: false, shared: true })),
|
|
799
|
+
].sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : a.id < b.id ? -1 : 1));
|
|
518
800
|
}
|
|
519
801
|
/** 对该 agent 自动生效的技能(`scope=agent`、未删除),按名字排序。 */
|
|
520
802
|
async listForAgent(orgId, agentId) {
|
|
@@ -527,8 +809,34 @@ let SkillsService = class SkillsService {
|
|
|
527
809
|
.execute();
|
|
528
810
|
return rows.map(summary);
|
|
529
811
|
}
|
|
530
|
-
/**
|
|
812
|
+
/**
|
|
813
|
+
* 组织技能详情:各版本与文件清单。不存在 / 已删除 / 不是组织技能 → `skill.not_found`。
|
|
814
|
+
* An org copy linked to a platform skill without a pin (ruling B2) serves the platform skill's
|
|
815
|
+
* content under its own id, so its detail is the platform skill's (its id, versions and body;
|
|
816
|
+
* 404 while that skill is off in the org); a pinned copy keeps its own (Task 10).
|
|
817
|
+
*/
|
|
531
818
|
async get(orgId, skillId) {
|
|
819
|
+
const link = await this.db
|
|
820
|
+
.selectFrom("skills")
|
|
821
|
+
.select("platform_skill_id")
|
|
822
|
+
.where("id", "=", skillId)
|
|
823
|
+
.where("org_id", "=", orgId)
|
|
824
|
+
.where("scope", "=", "org")
|
|
825
|
+
.where("deleted_at", "is", null)
|
|
826
|
+
.where("platform_skill_id", "is not", null)
|
|
827
|
+
.where("pinned_version", "is", null)
|
|
828
|
+
.executeTakeFirst();
|
|
829
|
+
if (link?.platform_skill_id) {
|
|
830
|
+
// the org's own skill it promoted is its own (ruling P3-3): its stored version while that is
|
|
831
|
+
// the platform's current one, else the platform's newer version under its id (ruling P3-4)
|
|
832
|
+
const served = (await skillVersionsById(this.db.db, orgId, [skillId])).get(skillId);
|
|
833
|
+
if (served?.origin !== "org")
|
|
834
|
+
return this.getPlatform(orgId, link.platform_skill_id);
|
|
835
|
+
if (served.source.startsWith(PLATFORM_SOURCE)) {
|
|
836
|
+
const detail = await this.getPlatform(orgId, link.platform_skill_id);
|
|
837
|
+
return { ...detail, ...(await this.promotedSummary(skillId, link.platform_skill_id)) };
|
|
838
|
+
}
|
|
839
|
+
}
|
|
532
840
|
const row = await summaryQuery(this.db.db)
|
|
533
841
|
.where("s.id", "=", skillId)
|
|
534
842
|
.where("s.org_id", "=", orgId)
|
|
@@ -536,7 +844,7 @@ let SkillsService = class SkillsService {
|
|
|
536
844
|
.where("s.deleted_at", "is", null)
|
|
537
845
|
.executeTakeFirst();
|
|
538
846
|
if (!row)
|
|
539
|
-
|
|
847
|
+
return this.getPlatform(orgId, skillId);
|
|
540
848
|
const versions = await this.db
|
|
541
849
|
.selectFrom("skill_versions")
|
|
542
850
|
.select(["version", "manifest", "created_by", "created_at", "object_prefix"])
|
|
@@ -556,13 +864,51 @@ let SkillsService = class SkillsService {
|
|
|
556
864
|
})),
|
|
557
865
|
};
|
|
558
866
|
}
|
|
867
|
+
/**
|
|
868
|
+
* A platform skill's detail (phase 2): only while it is on in the org, else `skill.not_found`.
|
|
869
|
+
* Its versions are the platform skill's.
|
|
870
|
+
*/
|
|
871
|
+
async getPlatform(orgId, skillId) {
|
|
872
|
+
const usable = (await skillVersionsById(this.db.db, orgId, [skillId])).get(skillId);
|
|
873
|
+
if (usable?.origin !== "platform" || usable.platformSkillId !== skillId)
|
|
874
|
+
throw notFound();
|
|
875
|
+
const row = await platformSummaryQuery(this.db.db)
|
|
876
|
+
.where("p.id", "=", skillId)
|
|
877
|
+
.executeTakeFirst();
|
|
878
|
+
if (!row)
|
|
879
|
+
throw notFound();
|
|
880
|
+
const versions = await this.db
|
|
881
|
+
.selectFrom("platform_skill_versions")
|
|
882
|
+
.select(["version", "manifest", "created_by", "created_at", "object_prefix"])
|
|
883
|
+
.where("skill_id", "=", skillId)
|
|
884
|
+
.orderBy("version", "desc")
|
|
885
|
+
.execute();
|
|
886
|
+
const current = versions.find((v) => v.version === row.current_version);
|
|
887
|
+
return {
|
|
888
|
+
...platformSummary(row),
|
|
889
|
+
body: current
|
|
890
|
+
? await this.readBody(orgId, {
|
|
891
|
+
manifest: current.manifest,
|
|
892
|
+
object_prefix: platformSource(current.object_prefix),
|
|
893
|
+
})
|
|
894
|
+
: null,
|
|
895
|
+
versions: versions.map((v) => ({
|
|
896
|
+
version: v.version,
|
|
897
|
+
description: v.manifest.description,
|
|
898
|
+
files: v.manifest.files,
|
|
899
|
+
createdBy: v.created_by,
|
|
900
|
+
createdAt: v.created_at,
|
|
901
|
+
})),
|
|
902
|
+
};
|
|
903
|
+
}
|
|
559
904
|
/** 读某版本 SKILL.md 的正文(见 {@link SkillDetail.body});任何读取问题都返回 null,不让详情失败。 */
|
|
560
905
|
async readBody(orgId, v) {
|
|
561
906
|
const entry = v.manifest.files.find((f) => f.path === SKILL_ENTRY_FILE);
|
|
562
907
|
if (!entry || entry.size > SKILL_BODY_MAX_BYTES)
|
|
563
908
|
return null;
|
|
564
909
|
try {
|
|
565
|
-
const
|
|
910
|
+
const { store, prefix } = skillFileStore(this.storage, orgId, v.object_prefix);
|
|
911
|
+
const got = await store.get(`${prefix}${SKILL_ENTRY_FILE}`);
|
|
566
912
|
if (!got)
|
|
567
913
|
return null;
|
|
568
914
|
const text = new TextDecoder("utf-8", { fatal: true }).decode(await new Response(got.body).arrayBuffer());
|
|
@@ -583,6 +929,17 @@ let SkillsService = class SkillsService {
|
|
|
583
929
|
/** The transaction of {@link softDelete}. */
|
|
584
930
|
async softDeleteTx(orgId, skillId, actorAccountId, actorTokenId) {
|
|
585
931
|
await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "skills.manage");
|
|
932
|
+
await this.deleteOrgSkillIn(orgId, skillId, actorAccountId, actorTokenId);
|
|
933
|
+
}
|
|
934
|
+
/**
|
|
935
|
+
* In the caller's transaction (`mandatory`: the caller holds the org row lock and checked
|
|
936
|
+
* `skills.manage`), soft-deletes an org-scope skill of the org: what {@link softDelete} writes
|
|
937
|
+
* (audit `skill.deleted`); missing or deleted -> `skill.not_found`. Its pending version
|
|
938
|
+
* proposals are cancelled in the same transaction (trials reverted; drafts deleted and events
|
|
939
|
+
* published after the commit). The owner delete of a
|
|
940
|
+
* promoted skill (`OwnedItems.deleteSkill`) calls it after its platform row was dealt with.
|
|
941
|
+
*/
|
|
942
|
+
async deleteOrgSkillIn(orgId, skillId, actorAccountId, actorTokenId, auditDetail) {
|
|
586
943
|
const r = await this.db
|
|
587
944
|
.updateTable("skills")
|
|
588
945
|
.set({ deleted_at: sql `now()`, updated_at: sql `now()` })
|
|
@@ -594,14 +951,48 @@ let SkillsService = class SkillsService {
|
|
|
594
951
|
.executeTakeFirst();
|
|
595
952
|
if (!r)
|
|
596
953
|
throw notFound();
|
|
954
|
+
// its pending version proposals go with it: cancelled, their trials reverted; after the
|
|
955
|
+
// commit the events are published and the drafts deleted (a share request has no draft)
|
|
956
|
+
const pending = await this.db
|
|
957
|
+
.selectFrom("skill_change_requests")
|
|
958
|
+
.selectAll()
|
|
959
|
+
.where("org_id", "=", orgId)
|
|
960
|
+
.where("skill_id", "=", skillId)
|
|
961
|
+
.where("kind", "=", "version")
|
|
962
|
+
.where("status", "=", "pending")
|
|
963
|
+
.orderBy("created_at")
|
|
964
|
+
.forUpdate()
|
|
965
|
+
.execute();
|
|
966
|
+
const cancelled = { prefixes: [], seqs: [] };
|
|
967
|
+
for (const p of pending) {
|
|
968
|
+
await cancelRequestIn(this.catalogDeps, p, cancelled, {
|
|
969
|
+
actorAccountId,
|
|
970
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
971
|
+
reason: "skill_deleted",
|
|
972
|
+
});
|
|
973
|
+
}
|
|
597
974
|
await audit(this.db.db, {
|
|
598
975
|
actorAccountId,
|
|
599
976
|
...(actorTokenId !== undefined && { actorTokenId }),
|
|
600
977
|
orgId,
|
|
601
978
|
action: "skill.deleted",
|
|
602
979
|
target: skillId,
|
|
603
|
-
detail: { name: r.name },
|
|
980
|
+
detail: { name: r.name, ...auditDetail },
|
|
604
981
|
});
|
|
982
|
+
if (pending.length > 0) {
|
|
983
|
+
afterCommit(async () => {
|
|
984
|
+
for (const [conv, seq] of cancelled.seqs)
|
|
985
|
+
await this.eventLog.notify(conv, seq);
|
|
986
|
+
for (const prefix of cancelled.prefixes) {
|
|
987
|
+
try {
|
|
988
|
+
await this.storage.kernel(orgId).deletePrefix(prefix);
|
|
989
|
+
}
|
|
990
|
+
catch (err) {
|
|
991
|
+
this.log.warn("skill draft cleanup failed", { orgId, prefix, err });
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
});
|
|
995
|
+
}
|
|
605
996
|
}
|
|
606
997
|
};
|
|
607
998
|
__decorate([
|
|
@@ -619,12 +1010,38 @@ __decorate([
|
|
|
619
1010
|
__decorate([
|
|
620
1011
|
Transactional()
|
|
621
1012
|
], SkillsService.prototype, "softDeleteTx", null);
|
|
1013
|
+
__decorate([
|
|
1014
|
+
Transactional({ propagation: "mandatory" })
|
|
1015
|
+
], SkillsService.prototype, "deleteOrgSkillIn", null);
|
|
622
1016
|
SkillsService = __decorate([
|
|
623
1017
|
Injectable(),
|
|
624
1018
|
__param(0, Inject(KernelDb)),
|
|
625
1019
|
__param(1, Inject(StorageService)),
|
|
626
1020
|
__param(2, Inject(AttachmentsService)),
|
|
627
1021
|
__param(3, Inject(TransactionHost)),
|
|
628
|
-
__param(4, Inject(OrgLock))
|
|
1022
|
+
__param(4, Inject(OrgLock)),
|
|
1023
|
+
__param(5, Inject(PlatformComponents)),
|
|
1024
|
+
__param(6, Inject(EventLog)),
|
|
1025
|
+
__param(7, Inject(KERNEL_LOGGER))
|
|
629
1026
|
], SkillsService);
|
|
630
1027
|
export { SkillsService };
|
|
1028
|
+
/**
|
|
1029
|
+
* The platform skill the org's live org skill `name` was promoted to (ruling P3-3: linked without
|
|
1030
|
+
* a pin to a live platform skill the org owns), else undefined. `id`: only that skill.
|
|
1031
|
+
*/
|
|
1032
|
+
async function promotedSkillNamed(db, orgId, name, id) {
|
|
1033
|
+
let q = db
|
|
1034
|
+
.selectFrom("skills as s")
|
|
1035
|
+
.innerJoin("platform_skills as p", "p.id", "s.platform_skill_id")
|
|
1036
|
+
.select("p.id")
|
|
1037
|
+
.where("s.org_id", "=", orgId)
|
|
1038
|
+
.where("s.scope", "=", "org")
|
|
1039
|
+
.where("s.name", "=", name)
|
|
1040
|
+
.where("s.deleted_at", "is", null)
|
|
1041
|
+
.where("s.pinned_version", "is", null)
|
|
1042
|
+
.where("p.owner_org_id", "=", orgId)
|
|
1043
|
+
.where("p.deleted_at", "is", null);
|
|
1044
|
+
if (id !== undefined)
|
|
1045
|
+
q = q.where("s.id", "=", id);
|
|
1046
|
+
return (await q.executeTakeFirst())?.id;
|
|
1047
|
+
}
|