@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
|
@@ -7,64 +7,45 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
8
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
9
|
};
|
|
10
|
-
import { randomUUID } from "node:crypto";
|
|
11
|
-
import { parseSkillMd, SKILL_ENTRY_FILE, ToolError } from "@capybara-hq/plugin-sdk";
|
|
12
10
|
import { Inject, Injectable } from "@nestjs/common";
|
|
13
11
|
import { sql } from "kysely";
|
|
14
|
-
import { visibleTo } from "../agents/agent-lookup.js";
|
|
15
|
-
import { skillFilesPrefix } from "../conversations/attachments.service.js";
|
|
16
12
|
import { EventLog } from "../conversations/event-log.js";
|
|
17
13
|
import { ApiError } from "../errors.js";
|
|
18
14
|
import { audit } from "../identity/audit.js";
|
|
15
|
+
import { assertCustomAllowed } from "../identity/settings.js";
|
|
19
16
|
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
20
17
|
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
21
18
|
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
22
19
|
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
23
|
-
import {
|
|
20
|
+
import { OrgLock } from "../orgs/org-lock.js";
|
|
24
21
|
import { StorageService } from "../storage/storage.service.js";
|
|
25
|
-
import {
|
|
22
|
+
import { assertShareableName, isOrgAdmin, shareSkillIn } from "./agent-skills.service.js";
|
|
23
|
+
import { cancelRequestIn, revertTrialCatalog, } from "./conversation-catalog.js";
|
|
24
|
+
import { SkillsService } from "./skills.service.js";
|
|
26
25
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
26
|
+
* The cap on file contents read for one detail (a package may hold up to 50 MB; the inbox shows
|
|
27
|
+
* text for review, so files past the cap read as no content).
|
|
29
28
|
*/
|
|
30
|
-
export const AGENT_SKILLS_MAX = 50;
|
|
31
|
-
/** 写技能文件时的并发数。 */
|
|
32
|
-
const PUT_CONCURRENCY = 4;
|
|
33
|
-
/** 详情里读取文件内容的上限(草稿 ≤ 1MB,留余量)。 */
|
|
34
29
|
const DETAIL_MAX_BYTES = 2 * 1024 * 1024;
|
|
35
|
-
/**
|
|
30
|
+
/** The most skill changes one inbox read returns. */
|
|
36
31
|
export const SKILL_CHANGES_LIST_MAX = 100;
|
|
37
|
-
// ---- 模型可见文案(英文) ----
|
|
38
|
-
const STORAGE_UNAVAILABLE_TEXT = "File storage is temporarily unavailable, so the skill could not be saved; retry later.";
|
|
39
|
-
const pendingElsewhereText = (name) => `Skill "${name}" already has a change awaiting the owner's approval (requested in another conversation), so it cannot be changed now; ask the user to have the owner decide that change first, or use a different skill name.`;
|
|
40
|
-
const capText = () => `This agent already has ${AGENT_SKILLS_MAX} skills (including changes awaiting approval), the maximum; update an existing skill instead, or ask the agent's owner to delete one of this agent's skills.`;
|
|
41
|
-
const AGENT_GONE_TEXT = "This agent no longer exists, so the skill cannot be saved; ask the user to start a conversation with another agent.";
|
|
42
32
|
const iso = (v) => new Date(v).toISOString();
|
|
43
|
-
const byName = (a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
|
|
44
33
|
const notFound = () => new ApiError("skill_change.not_found", "Skill change not found");
|
|
45
|
-
|
|
46
|
-
function writtenBody(pkg) {
|
|
47
|
-
const md = pkg.files.find((f) => f.path === SKILL_ENTRY_FILE);
|
|
48
|
-
if (!md)
|
|
49
|
-
return null;
|
|
50
|
-
try {
|
|
51
|
-
const parsed = parseSkillMd(new TextDecoder("utf-8", { fatal: true }).decode(md.data));
|
|
52
|
-
return "errors" in parsed ? null : parsed.body;
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
34
|
+
const forbidden = () => new ApiError("forbidden", "Insufficient organization role");
|
|
58
35
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* - `decide
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
36
|
+
* Skill change requests decided by org admins (spec §5.4, §5.5): an agent's owner asks to share
|
|
37
|
+
* one of its skills with the org (`kind = 'share'`, created by `AgentSkillsService.share`), and
|
|
38
|
+
* the maintainer of a shared skill proposes a new version of it (`kind = 'version'`, created by
|
|
39
|
+
* `AgentSkillsService.register`).
|
|
40
|
+
* - `decide` (HTTP, human only; org admins, role read live under the org row lock): approving a
|
|
41
|
+
* share makes the skill an org skill with the requester as maintainer; approving a version
|
|
42
|
+
* writes it as the org skill's next version (`SkillsService.createVersionFromFiles`, the draft
|
|
43
|
+
* prefix becomes the version's) so every agent using it gets it at its next run start;
|
|
44
|
+
* rejecting a version deletes its draft and reverts the proposing conversation's trial; a share
|
|
45
|
+
* keeps its files whatever happens. A request that no longer applies (its agent deleted or
|
|
46
|
+
* transferred, its skill deleted or already moved) is cancelled instead.
|
|
47
|
+
* State is in PG (the org row lock serializes decisions), files in object storage
|
|
48
|
+
* `kernel/<orgId>/skills/<id>/`; no in-process state.
|
|
68
49
|
*/
|
|
69
50
|
let SkillChangesService = class SkillChangesService {
|
|
70
51
|
db;
|
|
@@ -72,300 +53,209 @@ let SkillChangesService = class SkillChangesService {
|
|
|
72
53
|
eventLog;
|
|
73
54
|
log;
|
|
74
55
|
txHost;
|
|
75
|
-
|
|
56
|
+
orgLock;
|
|
57
|
+
skills;
|
|
58
|
+
catalogDeps;
|
|
59
|
+
constructor(db, storage, eventLog, log, txHost, orgLock,
|
|
60
|
+
/** An approved version is an org skill version. */
|
|
61
|
+
skills) {
|
|
76
62
|
this.db = db;
|
|
77
63
|
this.storage = storage;
|
|
78
64
|
this.eventLog = eventLog;
|
|
79
65
|
this.log = log;
|
|
80
66
|
this.txHost = txHost;
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
let store;
|
|
85
|
-
try {
|
|
86
|
-
this.storage.assertAvailable();
|
|
87
|
-
store = this.storage.kernel(ctx.orgId);
|
|
88
|
-
}
|
|
89
|
-
catch (e) {
|
|
90
|
-
throw storageError(e);
|
|
91
|
-
}
|
|
92
|
-
const id = randomUUID();
|
|
93
|
-
const prefix = skillFilesPrefix(id);
|
|
94
|
-
try {
|
|
95
|
-
await putAll(store, prefix, pkg.files);
|
|
96
|
-
}
|
|
97
|
-
catch (e) {
|
|
98
|
-
await this.deletePrefix(ctx.orgId, prefix);
|
|
99
|
-
throw storageError(e);
|
|
100
|
-
}
|
|
101
|
-
let committed;
|
|
102
|
-
try {
|
|
103
|
-
committed = await this.writeIn(ctx, pkg, id, prefix);
|
|
104
|
-
}
|
|
105
|
-
catch (e) {
|
|
106
|
-
await this.deletePrefix(ctx.orgId, prefix);
|
|
107
|
-
throw e;
|
|
108
|
-
}
|
|
109
|
-
if (committed.toSeq !== null) {
|
|
110
|
-
await this.eventLog.notify(ctx.conversationId, committed.toSeq);
|
|
111
|
-
}
|
|
112
|
-
for (const p of committed.drop)
|
|
113
|
-
await this.deletePrefix(ctx.orgId, p);
|
|
114
|
-
return committed.outcome;
|
|
67
|
+
this.orgLock = orgLock;
|
|
68
|
+
this.skills = skills;
|
|
69
|
+
this.catalogDeps = { db, log, eventLog };
|
|
115
70
|
}
|
|
116
71
|
/**
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
72
|
+
* An org admin decides a request (see the class comment): not an org admin -> 403 `forbidden`;
|
|
73
|
+
* already decided -> 409 `skill_change.already_decided`; not in this org -> 404. Approving
|
|
74
|
+
* re-checks `customSkills` (403 `catalog.custom_disabled`) and, for a share, the name (409
|
|
75
|
+
* `skill.name_exists`; the request stays pending). A share whose skill has a newer version than
|
|
76
|
+
* the one reviewed is cancelled, never shared. Audit `skill.change_decided` (and
|
|
77
|
+
* `skill.shared`). Of concurrent decisions one wins, the others get `already_decided`.
|
|
121
78
|
*/
|
|
122
79
|
async decide(orgId, id, accountId, body, actorTokenId) {
|
|
123
80
|
const head = await this.db
|
|
124
81
|
.selectFrom("skill_change_requests")
|
|
125
|
-
.
|
|
82
|
+
.selectAll()
|
|
126
83
|
.where("id", "=", id)
|
|
127
84
|
.where("org_id", "=", orgId)
|
|
128
85
|
.executeTakeFirst();
|
|
129
86
|
if (!head)
|
|
130
87
|
throw notFound();
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
88
|
+
// Refused before any file is read; re-checked under the org row lock
|
|
89
|
+
if (!(await isOrgAdmin(this.db.db, orgId, accountId)))
|
|
90
|
+
throw forbidden();
|
|
91
|
+
// An approved version needs its files as a package (read before the transaction) and, for a
|
|
92
|
+
// skill the org promoted, written as the platform row's next version: no storage writes run
|
|
93
|
+
// inside the transaction
|
|
94
|
+
let pkg;
|
|
95
|
+
let owner;
|
|
96
|
+
if (body.decision === "approve" && head.kind === "version" && head.status === "pending") {
|
|
97
|
+
await assertCustomAllowed(this.db.db, "customSkills");
|
|
98
|
+
pkg = await this.readDraft(orgId, head);
|
|
99
|
+
owner = await this.skills.prepareStoredVersion(orgId, pkg);
|
|
135
100
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
101
|
+
let done;
|
|
102
|
+
try {
|
|
103
|
+
done = await this.decideIn(orgId, id, accountId, body, actorTokenId, head, pkg, owner);
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
if (owner !== undefined)
|
|
107
|
+
await this.skills.discardStoredVersion(owner);
|
|
108
|
+
throw e;
|
|
109
|
+
}
|
|
110
|
+
if (owner !== undefined && !done.usedOwner)
|
|
111
|
+
await this.skills.discardStoredVersion(owner);
|
|
112
|
+
for (const [conv, seq] of done.drafts.seqs)
|
|
113
|
+
await this.eventLog.notify(conv, seq);
|
|
114
|
+
for (const p of done.drafts.prefixes)
|
|
115
|
+
await this.deletePrefix(orgId, p);
|
|
116
|
+
const [view] = await this.views([done.updated]);
|
|
139
117
|
if (!view)
|
|
140
118
|
throw notFound();
|
|
141
119
|
return view;
|
|
142
120
|
}
|
|
143
|
-
/**
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
/** The transaction of {@link write}. */
|
|
153
|
-
async writeIn(ctx, pkg, id, prefix) {
|
|
154
|
-
await this.keyShareOrg(ctx.orgId);
|
|
155
|
-
// NO KEY UPDATE, not UPDATE (here, in decide and in deleteAgentSkill): it still serializes
|
|
156
|
-
// the writes and decisions of one agent, but not the foreign key check (FOR KEY SHARE) of a
|
|
157
|
-
// transaction that already holds the conversation row this one locks last, e.g. an event
|
|
158
|
-
// log append updating that row a second time (the title job): FOR UPDATE made that 40P01
|
|
159
|
-
const agent = await this.db
|
|
160
|
-
.selectFrom("agents")
|
|
161
|
-
.select(["visibility", "deleted_at"])
|
|
162
|
-
.where("id", "=", ctx.agentId)
|
|
163
|
-
.where("org_id", "=", ctx.orgId)
|
|
164
|
-
.forNoKeyUpdate()
|
|
165
|
-
.executeTakeFirst();
|
|
166
|
-
if (!agent || agent.deleted_at !== null)
|
|
167
|
-
throw new ToolError(AGENT_GONE_TEXT);
|
|
168
|
-
// Then the conversation row (appendCatalog's lock, still after the agent row like decide),
|
|
169
|
-
// before the change request insert: its foreign key check takes FOR KEY SHARE on that row,
|
|
170
|
-
// and upgrading to FOR UPDATE afterwards deadlocked with another writer doing the same
|
|
171
|
-
await this.db
|
|
172
|
-
.selectFrom("conversations")
|
|
173
|
-
.select("id")
|
|
174
|
-
.where("id", "=", ctx.conversationId)
|
|
175
|
-
.forUpdate()
|
|
176
|
-
.execute();
|
|
177
|
-
const existing = await this.db
|
|
178
|
-
.selectFrom("skills")
|
|
179
|
-
.select(["id", "current_version"])
|
|
180
|
-
.where("org_id", "=", ctx.orgId)
|
|
181
|
-
.where("scope", "=", "agent")
|
|
182
|
-
.where("agent_id", "=", ctx.agentId)
|
|
183
|
-
.where("name", "=", pkg.name)
|
|
184
|
-
.where("deleted_at", "is", null)
|
|
185
|
-
.forUpdate()
|
|
186
|
-
.executeTakeFirst();
|
|
187
|
-
const pend = await this.db
|
|
188
|
-
.selectFrom("skill_change_requests")
|
|
189
|
-
.selectAll()
|
|
190
|
-
.where("agent_id", "=", ctx.agentId)
|
|
191
|
-
.where("status", "=", "pending")
|
|
192
|
-
.where(sql `proposed_version -> 'manifest' ->> 'name'`, "=", pkg.name)
|
|
193
|
-
.forUpdate()
|
|
194
|
-
.executeTakeFirst();
|
|
195
|
-
const drop = [];
|
|
196
|
-
if (pend) {
|
|
197
|
-
if (pend.requested_in_conversation !== ctx.conversationId) {
|
|
198
|
-
throw new ToolError(pendingElsewhereText(pkg.name));
|
|
121
|
+
/** A version draft's files as a package (as registered), or 503 when one cannot be read. */
|
|
122
|
+
async readDraft(orgId, req) {
|
|
123
|
+
const store = this.storage.kernel(orgId);
|
|
124
|
+
const m = req.proposed_version.manifest;
|
|
125
|
+
const files = [];
|
|
126
|
+
for (const f of m.files) {
|
|
127
|
+
const got = await store.get(`${req.object_prefix}${f.path}`);
|
|
128
|
+
if (!got) {
|
|
129
|
+
throw new ApiError("storage.unavailable", "The proposed version's files cannot be read; try again later");
|
|
199
130
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
.updateTable("skill_change_requests")
|
|
203
|
-
.set({ status: "cancelled", decided_at: sql `now()` })
|
|
204
|
-
.where("id", "=", pend.id)
|
|
205
|
-
.execute();
|
|
206
|
-
drop.push(pend.object_prefix);
|
|
207
|
-
await audit(this.db.db, {
|
|
208
|
-
actorAccountId: ctx.accountId,
|
|
209
|
-
orgId: ctx.orgId,
|
|
210
|
-
action: "skill.change_decided",
|
|
211
|
-
target: pend.id,
|
|
212
|
-
detail: {
|
|
213
|
-
decision: "cancelled",
|
|
214
|
-
reason: "superseded",
|
|
215
|
-
supersededBy: id,
|
|
216
|
-
agentId: ctx.agentId,
|
|
217
|
-
name: pkg.name,
|
|
218
|
-
},
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
if (!existing)
|
|
222
|
-
await this.assertBelowCap(ctx.agentId, pend?.id);
|
|
223
|
-
const version = (existing?.current_version ?? 0) + 1;
|
|
224
|
-
const skillId = existing?.id ?? pend?.proposed_version.skillId ?? randomUUID();
|
|
225
|
-
let outcome;
|
|
226
|
-
if (agent.visibility === "private") {
|
|
227
|
-
await this.createVersion({
|
|
228
|
-
orgId: ctx.orgId,
|
|
229
|
-
agentId: ctx.agentId,
|
|
230
|
-
skillId,
|
|
231
|
-
exists: existing !== undefined,
|
|
232
|
-
version,
|
|
233
|
-
manifest: pkg.manifest,
|
|
234
|
-
prefix,
|
|
235
|
-
createdBy: ctx.accountId,
|
|
236
|
-
});
|
|
237
|
-
await audit(this.db.db, {
|
|
238
|
-
actorAccountId: ctx.accountId,
|
|
239
|
-
orgId: ctx.orgId,
|
|
240
|
-
action: existing ? "skill.version_created" : "skill.created",
|
|
241
|
-
target: skillId,
|
|
242
|
-
detail: {
|
|
243
|
-
name: pkg.name,
|
|
244
|
-
version,
|
|
245
|
-
files: pkg.manifest.files.length,
|
|
246
|
-
agentId: ctx.agentId,
|
|
247
|
-
conversationId: ctx.conversationId,
|
|
248
|
-
via: "skill_write",
|
|
249
|
-
},
|
|
250
|
-
});
|
|
251
|
-
outcome = { kind: "version", skillId, version, created: !existing };
|
|
131
|
+
const data = new Uint8Array(await new Response(got.body).arrayBuffer());
|
|
132
|
+
files.push({ path: f.path, size: f.size, sha256: f.sha256, data });
|
|
252
133
|
}
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
org_id: ctx.orgId,
|
|
260
|
-
agent_id: ctx.agentId,
|
|
261
|
-
skill_id: existing?.id ?? null,
|
|
262
|
-
proposed_version: JSON.stringify(proposed),
|
|
263
|
-
object_prefix: prefix,
|
|
264
|
-
requested_by_account: ctx.accountId,
|
|
265
|
-
requested_in_conversation: ctx.conversationId,
|
|
266
|
-
decided_by: null,
|
|
267
|
-
})
|
|
268
|
-
.execute();
|
|
269
|
-
await audit(this.db.db, {
|
|
270
|
-
actorAccountId: ctx.accountId,
|
|
271
|
-
orgId: ctx.orgId,
|
|
272
|
-
action: "skill.change_requested",
|
|
273
|
-
target: id,
|
|
274
|
-
detail: {
|
|
275
|
-
agentId: ctx.agentId,
|
|
276
|
-
skillId: existing?.id ?? null,
|
|
277
|
-
name: pkg.name,
|
|
278
|
-
version,
|
|
279
|
-
files: pkg.manifest.files.length,
|
|
280
|
-
conversationId: ctx.conversationId,
|
|
281
|
-
},
|
|
282
|
-
});
|
|
283
|
-
outcome = { kind: "requested", requestId: id, skillId, version };
|
|
284
|
-
}
|
|
285
|
-
// 本对话立即看到新版本:在上一份快照上替换 / 加入这个技能(确定、来自日志;来源 = 本次的对象前缀)
|
|
286
|
-
// A pinned entry of this skill gets the version, source and body just written (phase B)
|
|
287
|
-
// A manual-only version (phase D) is never in the model's catalog: it removes the skill from
|
|
288
|
-
// the snapshot instead, and appendCatalog drops its pinned entry with it (no longer live)
|
|
289
|
-
const forModel = invocationOf(pkg.manifest).model;
|
|
290
|
-
const pinnedBody = writtenBody(pkg);
|
|
291
|
-
const toSeq = await this.appendCatalog(ctx.conversationId, (base) => ({
|
|
292
|
-
...base,
|
|
293
|
-
skills: [
|
|
294
|
-
...base.skills.filter((s) => s.name !== pkg.name),
|
|
295
|
-
...(forModel
|
|
296
|
-
? [
|
|
297
|
-
{
|
|
298
|
-
id: skillId,
|
|
299
|
-
name: pkg.name,
|
|
300
|
-
description: pkg.description,
|
|
301
|
-
version,
|
|
302
|
-
source: prefix,
|
|
303
|
-
},
|
|
304
|
-
]
|
|
305
|
-
: []),
|
|
306
|
-
],
|
|
307
|
-
...(base.pinned && {
|
|
308
|
-
pinned: base.pinned.map((p) => p.id === skillId && pinnedBody !== null
|
|
309
|
-
? { id: skillId, version, name: pkg.name, source: prefix, body: pinnedBody }
|
|
310
|
-
: p),
|
|
311
|
-
}),
|
|
312
|
-
}), `skills_catalog:write:${id}`, ctx.runId);
|
|
313
|
-
return { outcome, drop, toSeq };
|
|
134
|
+
return {
|
|
135
|
+
name: m.name,
|
|
136
|
+
description: m.description,
|
|
137
|
+
files,
|
|
138
|
+
...(m.invocation !== undefined && { invocation: m.invocation }),
|
|
139
|
+
};
|
|
314
140
|
}
|
|
315
|
-
/**
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
141
|
+
/**
|
|
142
|
+
* The transaction of {@link decide}. Lock order: org row (FOR NO KEY UPDATE, role re-checked) -> agent
|
|
143
|
+
* row -> the proposing conversation (a version's revert appends there) -> skill row -> request
|
|
144
|
+
* row, the order registration and sharing use.
|
|
145
|
+
*/
|
|
146
|
+
async decideIn(orgId, id, accountId, body, actorTokenId, head, pkg, owner) {
|
|
147
|
+
await this.orgLock.lockAndAuthorize(orgId, accountId, "skills.manage");
|
|
319
148
|
const agent = await this.db
|
|
320
149
|
.selectFrom("agents")
|
|
321
150
|
.select(["owner_account_id", "deleted_at"])
|
|
322
|
-
.where("id", "=",
|
|
151
|
+
.where("id", "=", head.agent_id)
|
|
323
152
|
.forNoKeyUpdate()
|
|
324
153
|
.executeTakeFirst();
|
|
325
|
-
if (
|
|
326
|
-
|
|
154
|
+
if (head.kind === "version" && head.requested_in_conversation !== null) {
|
|
155
|
+
await this.db
|
|
156
|
+
.selectFrom("conversations")
|
|
157
|
+
.select("id")
|
|
158
|
+
.where("id", "=", head.requested_in_conversation)
|
|
159
|
+
.forUpdate()
|
|
160
|
+
.executeTakeFirst();
|
|
161
|
+
}
|
|
162
|
+
const skill = head.skill_id === null
|
|
163
|
+
? undefined
|
|
164
|
+
: await this.db
|
|
165
|
+
.selectFrom("skills")
|
|
166
|
+
.select(["id", "scope", "agent_id", "name", "deleted_at", "current_version"])
|
|
167
|
+
.where("id", "=", head.skill_id)
|
|
168
|
+
.forUpdate()
|
|
169
|
+
.executeTakeFirst();
|
|
327
170
|
const req = await this.db
|
|
328
171
|
.selectFrom("skill_change_requests")
|
|
329
172
|
.selectAll()
|
|
330
173
|
.where("id", "=", id)
|
|
331
174
|
.forUpdate()
|
|
332
175
|
.executeTakeFirst();
|
|
333
|
-
//
|
|
176
|
+
// the row went between the first read and the lock (agent / org hard-deleted) -> 404, not 500
|
|
334
177
|
if (!req)
|
|
335
178
|
throw notFound();
|
|
336
|
-
if (agent.owner_account_id !== accountId) {
|
|
337
|
-
throw new ApiError("skill_change.not_owner", "Only the agent's owner can decide on its skill changes");
|
|
338
|
-
}
|
|
339
179
|
if (req.status !== "pending") {
|
|
340
180
|
throw new ApiError("skill_change.already_decided", "This skill change has already been decided");
|
|
341
181
|
}
|
|
182
|
+
const drafts = { prefixes: [], seqs: [] };
|
|
183
|
+
// A share applies only to the version the admin reviewed; a version proposal only to the skill
|
|
184
|
+
// of its name
|
|
185
|
+
const applies = agent !== undefined &&
|
|
186
|
+
agent.deleted_at === null &&
|
|
187
|
+
skill !== undefined &&
|
|
188
|
+
skill.deleted_at === null &&
|
|
189
|
+
(req.kind === "share"
|
|
190
|
+
? skill.scope === "agent" &&
|
|
191
|
+
skill.agent_id === req.agent_id &&
|
|
192
|
+
skill.current_version === req.proposed_version.version &&
|
|
193
|
+
agent.owner_account_id === req.requested_by_account
|
|
194
|
+
: skill.scope === "org" && skill.name === req.proposed_version.manifest.name);
|
|
195
|
+
if (!applies) {
|
|
196
|
+
await cancelRequestIn(this.catalogDeps, req, drafts, {
|
|
197
|
+
actorAccountId: accountId,
|
|
198
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
199
|
+
reason: "stale",
|
|
200
|
+
});
|
|
201
|
+
return { updated: await this.reread(id), drafts, usedOwner: false };
|
|
202
|
+
}
|
|
342
203
|
const p = req.proposed_version;
|
|
343
204
|
const approved = body.decision === "approve";
|
|
344
|
-
let skillId = req.skill_id;
|
|
345
205
|
let version = p.version;
|
|
346
|
-
if (approved) {
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
.
|
|
351
|
-
.where("scope", "=", "agent")
|
|
352
|
-
.where("agent_id", "=", req.agent_id)
|
|
353
|
-
.where("name", "=", p.manifest.name)
|
|
354
|
-
.where("deleted_at", "is", null)
|
|
355
|
-
.forUpdate()
|
|
356
|
-
.executeTakeFirst();
|
|
357
|
-
skillId = existing?.id ?? p.skillId;
|
|
358
|
-
version = (existing?.current_version ?? 0) + 1;
|
|
359
|
-
await this.createVersion({
|
|
360
|
-
orgId,
|
|
206
|
+
if (approved && req.kind === "share") {
|
|
207
|
+
await assertCustomAllowed(this.db.db, "customSkills");
|
|
208
|
+
await assertShareableName(this.db, orgId, skill.name);
|
|
209
|
+
await shareSkillIn(this.db, {
|
|
210
|
+
skillId: skill.id,
|
|
361
211
|
agentId: req.agent_id,
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
212
|
+
maintainerAccountId: req.requested_by_account,
|
|
213
|
+
});
|
|
214
|
+
await audit(this.db.db, {
|
|
215
|
+
actorAccountId: accountId,
|
|
216
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
217
|
+
orgId,
|
|
218
|
+
action: "skill.shared",
|
|
219
|
+
target: skill.id,
|
|
220
|
+
detail: {
|
|
221
|
+
name: skill.name,
|
|
222
|
+
agentId: req.agent_id,
|
|
223
|
+
maintainer: req.requested_by_account,
|
|
224
|
+
requestId: id,
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
else if (approved) {
|
|
229
|
+
if (pkg === undefined)
|
|
230
|
+
throw new Error("an approved version needs its files");
|
|
231
|
+
await assertCustomAllowed(this.db.db, "customSkills");
|
|
232
|
+
// Joins this transaction without storage I/O: the version is the org skill's next one, the
|
|
233
|
+
// draft prefix its files; a skill the org promoted gets the platform version prepared before
|
|
234
|
+
const out = await this.skills.createVersionFromFiles(orgId, accountId, pkg, {
|
|
366
235
|
prefix: req.object_prefix,
|
|
367
|
-
|
|
236
|
+
stored: owner !== undefined ? { owner } : {},
|
|
237
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
238
|
+
auditDetail: {
|
|
239
|
+
requestId: id,
|
|
240
|
+
agentId: req.agent_id,
|
|
241
|
+
requestedBy: req.requested_by_account,
|
|
242
|
+
},
|
|
368
243
|
});
|
|
244
|
+
version = out.version;
|
|
245
|
+
const own = await this.db
|
|
246
|
+
.selectFrom("skill_versions")
|
|
247
|
+
.select("object_prefix")
|
|
248
|
+
.where("skill_id", "=", skill.id)
|
|
249
|
+
.where("version", "=", out.version)
|
|
250
|
+
.executeTakeFirst();
|
|
251
|
+
if (own?.object_prefix !== req.object_prefix) {
|
|
252
|
+
// Served from elsewhere (the platform row): the draft is not a version's files
|
|
253
|
+
const seq = await revertTrialCatalog(this.catalogDeps, req);
|
|
254
|
+
if (seq !== null && req.requested_in_conversation !== null) {
|
|
255
|
+
drafts.seqs.push([req.requested_in_conversation, seq]);
|
|
256
|
+
}
|
|
257
|
+
drafts.prefixes.push(req.object_prefix);
|
|
258
|
+
}
|
|
369
259
|
}
|
|
370
260
|
const updated = await this.db
|
|
371
261
|
.updateTable("skill_change_requests")
|
|
@@ -373,7 +263,6 @@ let SkillChangesService = class SkillChangesService {
|
|
|
373
263
|
status: approved ? "approved" : "rejected",
|
|
374
264
|
decided_by: accountId,
|
|
375
265
|
decided_at: sql `now()`,
|
|
376
|
-
...(approved && { skill_id: skillId }),
|
|
377
266
|
})
|
|
378
267
|
.where("id", "=", id)
|
|
379
268
|
.returningAll()
|
|
@@ -386,136 +275,83 @@ let SkillChangesService = class SkillChangesService {
|
|
|
386
275
|
target: id,
|
|
387
276
|
detail: {
|
|
388
277
|
decision: approved ? "approved" : "rejected",
|
|
278
|
+
kind: req.kind,
|
|
389
279
|
agentId: req.agent_id,
|
|
390
|
-
skillId,
|
|
280
|
+
skillId: skill.id,
|
|
391
281
|
name: p.manifest.name,
|
|
392
|
-
version
|
|
282
|
+
version,
|
|
393
283
|
requestedBy: req.requested_by_account,
|
|
394
|
-
|
|
284
|
+
...(req.requested_in_conversation !== null && {
|
|
285
|
+
conversationId: req.requested_in_conversation,
|
|
286
|
+
}),
|
|
395
287
|
...(body.note !== undefined && { note: body.note }),
|
|
396
288
|
},
|
|
397
289
|
});
|
|
398
|
-
//
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
.selectFrom("agents")
|
|
407
|
-
.select(["owner_account_id", "deleted_at"])
|
|
408
|
-
.where("id", "=", agentId)
|
|
409
|
-
.where("org_id", "=", orgId)
|
|
410
|
-
.forNoKeyUpdate()
|
|
411
|
-
.executeTakeFirst();
|
|
412
|
-
const agentNotFound = () => new ApiError("agent.not_found", "Agent not found");
|
|
413
|
-
if (!agent || agent.deleted_at !== null)
|
|
414
|
-
throw agentNotFound();
|
|
415
|
-
if (agent.owner_account_id !== accountId) {
|
|
416
|
-
// 与 AgentsService 一致:看不到的 agent → 404,看得到但不是负责人 → 403
|
|
417
|
-
const visible = await this.db
|
|
418
|
-
.selectFrom("agents")
|
|
419
|
-
.select("id")
|
|
420
|
-
.where("id", "=", agentId)
|
|
421
|
-
.where(visibleTo(accountId))
|
|
422
|
-
.executeTakeFirst();
|
|
423
|
-
if (!visible)
|
|
424
|
-
throw agentNotFound();
|
|
425
|
-
throw new ApiError("forbidden", "Only the agent's owner can delete its skills");
|
|
290
|
+
// A rejected version: the proposing conversation goes back to the current version at once
|
|
291
|
+
// and the draft is deleted; a rejected share changes nothing
|
|
292
|
+
if (!approved && req.kind === "version") {
|
|
293
|
+
const seq = await revertTrialCatalog(this.catalogDeps, req);
|
|
294
|
+
if (seq !== null && req.requested_in_conversation !== null) {
|
|
295
|
+
drafts.seqs.push([req.requested_in_conversation, seq]);
|
|
296
|
+
}
|
|
297
|
+
drafts.prefixes.push(req.object_prefix);
|
|
426
298
|
}
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
.
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
.returning(["name"])
|
|
436
|
-
.executeTakeFirst();
|
|
437
|
-
if (!r)
|
|
438
|
-
throw new ApiError("skill.not_found", "Skill not found");
|
|
439
|
-
const out = { prefixes: [], seqs: [] };
|
|
440
|
-
const pend = await this.db
|
|
299
|
+
return {
|
|
300
|
+
updated,
|
|
301
|
+
drafts,
|
|
302
|
+
usedOwner: approved && req.kind === "version" && owner !== undefined,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
reread(id) {
|
|
306
|
+
return this.db
|
|
441
307
|
.selectFrom("skill_change_requests")
|
|
442
308
|
.selectAll()
|
|
443
|
-
.where("
|
|
444
|
-
.
|
|
445
|
-
.where(sql `proposed_version -> 'manifest' ->> 'name'`, "=", r.name)
|
|
446
|
-
.forUpdate()
|
|
447
|
-
.executeTakeFirst();
|
|
448
|
-
if (pend) {
|
|
449
|
-
await this.db
|
|
450
|
-
.updateTable("skill_change_requests")
|
|
451
|
-
.set({ status: "cancelled", decided_at: sql `now()` })
|
|
452
|
-
.where("id", "=", pend.id)
|
|
453
|
-
.execute();
|
|
454
|
-
await audit(this.db.db, {
|
|
455
|
-
actorAccountId: accountId,
|
|
456
|
-
...(actorTokenId !== undefined && { actorTokenId }),
|
|
457
|
-
orgId,
|
|
458
|
-
action: "skill.change_decided",
|
|
459
|
-
target: pend.id,
|
|
460
|
-
detail: { decision: "cancelled", reason: "skill_deleted", agentId, name: r.name },
|
|
461
|
-
});
|
|
462
|
-
const seq = await this.revertTrial(pend);
|
|
463
|
-
if (seq !== null)
|
|
464
|
-
out.seqs.push([pend.requested_in_conversation, seq]);
|
|
465
|
-
out.prefixes.push(pend.object_prefix);
|
|
466
|
-
}
|
|
467
|
-
await audit(this.db.db, {
|
|
468
|
-
actorAccountId: accountId,
|
|
469
|
-
...(actorTokenId !== undefined && { actorTokenId }),
|
|
470
|
-
orgId,
|
|
471
|
-
action: "skill.deleted",
|
|
472
|
-
target: skillId,
|
|
473
|
-
detail: { name: r.name, agentId },
|
|
474
|
-
});
|
|
475
|
-
return out;
|
|
309
|
+
.where("id", "=", id)
|
|
310
|
+
.executeTakeFirstOrThrow();
|
|
476
311
|
}
|
|
477
|
-
/**
|
|
312
|
+
/**
|
|
313
|
+
* The org's pending requests when the account is an org admin (read live; anyone else gets
|
|
314
|
+
* none), newest first, at most {@link SKILL_CHANGES_LIST_MAX}.
|
|
315
|
+
*/
|
|
478
316
|
async listPending(orgId, accountId) {
|
|
317
|
+
if (!(await isOrgAdmin(this.db.db, orgId, accountId)))
|
|
318
|
+
return [];
|
|
479
319
|
const rows = await this.db
|
|
480
320
|
.selectFrom("skill_change_requests")
|
|
481
|
-
.
|
|
482
|
-
.
|
|
483
|
-
.where("
|
|
484
|
-
.
|
|
485
|
-
.where("agents.owner_account_id", "=", accountId)
|
|
486
|
-
.where("agents.deleted_at", "is", null)
|
|
487
|
-
.orderBy("skill_change_requests.created_at", "desc")
|
|
321
|
+
.selectAll()
|
|
322
|
+
.where("org_id", "=", orgId)
|
|
323
|
+
.where("status", "=", "pending")
|
|
324
|
+
.orderBy("created_at", "desc")
|
|
488
325
|
.limit(SKILL_CHANGES_LIST_MAX)
|
|
489
326
|
.execute();
|
|
490
327
|
return this.views(rows);
|
|
491
328
|
}
|
|
492
329
|
/**
|
|
493
|
-
*
|
|
494
|
-
*
|
|
330
|
+
* The detail (with file texts): only org admins and the requester see it, anyone else 404 (the
|
|
331
|
+
* request's existence is not disclosed). A version draft's contents are null once it is deleted
|
|
332
|
+
* (rejected / cancelled); a share's files are the skill version's own and stay readable.
|
|
495
333
|
*/
|
|
496
334
|
async get(orgId, id, accountId) {
|
|
497
335
|
const row = await this.db
|
|
498
336
|
.selectFrom("skill_change_requests")
|
|
499
|
-
.
|
|
500
|
-
.
|
|
501
|
-
.
|
|
502
|
-
.where("skill_change_requests.id", "=", id)
|
|
503
|
-
.where("skill_change_requests.org_id", "=", orgId)
|
|
504
|
-
.where("agents.deleted_at", "is", null)
|
|
337
|
+
.selectAll()
|
|
338
|
+
.where("id", "=", id)
|
|
339
|
+
.where("org_id", "=", orgId)
|
|
505
340
|
.executeTakeFirst();
|
|
506
341
|
if (!row)
|
|
507
342
|
throw notFound();
|
|
508
|
-
if (row.
|
|
343
|
+
if (row.requested_by_account !== accountId &&
|
|
344
|
+
!(await isOrgAdmin(this.db.db, orgId, accountId))) {
|
|
509
345
|
throw notFound();
|
|
510
346
|
}
|
|
511
347
|
const [view] = await this.views([row]);
|
|
512
348
|
if (!view)
|
|
513
349
|
throw notFound();
|
|
514
|
-
const live = row.status === "pending" || row.status === "approved";
|
|
350
|
+
const live = row.kind === "share" || row.status === "pending" || row.status === "approved";
|
|
515
351
|
const store = this.storage.kernel(orgId);
|
|
516
352
|
const budget = { left: DETAIL_MAX_BYTES };
|
|
517
353
|
const files = await readTexts(live ? store : undefined, row.object_prefix, row.proposed_version.manifest.files, budget);
|
|
518
|
-
//
|
|
354
|
+
// A change of an existing skill: the version in effect, for the difference
|
|
519
355
|
let current = null;
|
|
520
356
|
if (row.skill_id !== null) {
|
|
521
357
|
const cur = await this.db
|
|
@@ -531,7 +367,7 @@ let SkillChangesService = class SkillChangesService {
|
|
|
531
367
|
.where("skills.id", "=", row.skill_id)
|
|
532
368
|
.where("skills.deleted_at", "is", null)
|
|
533
369
|
.executeTakeFirst();
|
|
534
|
-
//
|
|
370
|
+
// the request is the current version itself (a share, an approved version): no "before"
|
|
535
371
|
if (cur && cur.object_prefix !== row.object_prefix) {
|
|
536
372
|
current = {
|
|
537
373
|
version: cur.version,
|
|
@@ -542,209 +378,42 @@ let SkillChangesService = class SkillChangesService {
|
|
|
542
378
|
return { ...view, files, current };
|
|
543
379
|
}
|
|
544
380
|
/**
|
|
545
|
-
*
|
|
546
|
-
*
|
|
547
|
-
*
|
|
548
|
-
*
|
|
549
|
-
*
|
|
550
|
-
*
|
|
551
|
-
*/
|
|
552
|
-
async appendCatalog(conversationId, derive, idemKey, runId) {
|
|
553
|
-
const base = (await lockLatestCatalog(this.db.db, conversationId)) ?? { skills: [] };
|
|
554
|
-
const derived = derive(base);
|
|
555
|
-
if (derived === null)
|
|
556
|
-
return null;
|
|
557
|
-
const skills = [...derived.skills].sort(byName);
|
|
558
|
-
const live = (p) => skills.some((s) => s.id === p.id && s.version === p.version && s.source === p.source);
|
|
559
|
-
const pinned = fitPinned((derived.pinned ?? []).filter(live), this.log, {
|
|
560
|
-
conversationId,
|
|
561
|
-
});
|
|
562
|
-
const next = {
|
|
563
|
-
skills,
|
|
564
|
-
...(pinned.length > 0 && { pinned }),
|
|
565
|
-
...(derived.toolMap !== undefined && { toolMap: derived.toolMap }),
|
|
566
|
-
};
|
|
567
|
-
if (sameSnapshot(base, next))
|
|
568
|
-
return null;
|
|
569
|
-
const written = await this.eventLog.appendIn(conversationId, [
|
|
570
|
-
{
|
|
571
|
-
type: "skills_catalog",
|
|
572
|
-
...(runId !== undefined && { runId }),
|
|
573
|
-
idemKey,
|
|
574
|
-
payload: next,
|
|
575
|
-
},
|
|
576
|
-
]);
|
|
577
|
-
return Math.max(...written.map((e) => e.seq));
|
|
578
|
-
}
|
|
579
|
-
/**
|
|
580
|
-
* 草稿不再生效(拒绝 / 取消)时,在事务 `t` 里给发起对话追加一份回退快照:由该对话最新一份快照推出——
|
|
581
|
-
* 来源是这份草稿的条目换成这个 agent 技能当前的正式版本(`t` 里已是决定之后的状态),没有正式版本就移除。
|
|
582
|
-
* 快照里已没有这份草稿 → 不写。对话正在运行时,提醒落在当前位置(构建时排在工具结果之后),下一步即生效。
|
|
583
|
-
* 移除时不推测同名的组织技能(快照里已被替换掉),下一次运行开始的解析会把它补回来。
|
|
381
|
+
* In the caller's transaction (`mandatory`: `AgentsService` holds the org and agent row locks),
|
|
382
|
+
* cancels the agent's pending requests of the given kinds (default both): marks them
|
|
383
|
+
* cancelled, audits, and for version drafts appends a reverting snapshot to each proposing
|
|
384
|
+
* conversation. The agent's delete cancels both kinds; an ownership transfer only shares (the
|
|
385
|
+
* new owner did not ask). After the commit the caller runs {@link finishCancel} to delete the
|
|
386
|
+
* drafts and publish the events.
|
|
584
387
|
*/
|
|
585
|
-
async
|
|
586
|
-
const name = req.proposed_version.manifest.name;
|
|
587
|
-
const real = await this.db
|
|
588
|
-
.selectFrom("skills")
|
|
589
|
-
.innerJoin("skill_versions", (j) => j
|
|
590
|
-
.onRef("skill_versions.skill_id", "=", "skills.id")
|
|
591
|
-
.onRef("skill_versions.version", "=", "skills.current_version"))
|
|
592
|
-
.select([
|
|
593
|
-
"skills.id",
|
|
594
|
-
"skills.current_version",
|
|
595
|
-
"skill_versions.manifest",
|
|
596
|
-
"skill_versions.object_prefix",
|
|
597
|
-
])
|
|
598
|
-
.where("skills.org_id", "=", req.org_id)
|
|
599
|
-
.where("skills.scope", "=", "agent")
|
|
600
|
-
.where("skills.agent_id", "=", req.agent_id)
|
|
601
|
-
.where("skills.name", "=", name)
|
|
602
|
-
.where("skills.deleted_at", "is", null)
|
|
603
|
-
.executeTakeFirst();
|
|
604
|
-
return this.appendCatalog(req.requested_in_conversation, (base) => {
|
|
605
|
-
if (!base.skills.some((s) => s.source === req.object_prefix))
|
|
606
|
-
return null;
|
|
607
|
-
const rest = base.skills.filter((s) => s.source !== req.object_prefix);
|
|
608
|
-
// The draft's pinned entry goes (Decision 8): the next run start pins the real version
|
|
609
|
-
return {
|
|
610
|
-
...base,
|
|
611
|
-
// A manual-only current version (phase D) stays out of the model's catalog
|
|
612
|
-
skills: real && invocationOf(real.manifest).model
|
|
613
|
-
? [
|
|
614
|
-
...rest,
|
|
615
|
-
{
|
|
616
|
-
id: real.id,
|
|
617
|
-
name,
|
|
618
|
-
description: real.manifest.description,
|
|
619
|
-
version: real.current_version,
|
|
620
|
-
source: real.object_prefix,
|
|
621
|
-
},
|
|
622
|
-
]
|
|
623
|
-
: rest,
|
|
624
|
-
...(base.pinned && {
|
|
625
|
-
pinned: base.pinned.filter((p) => p.source !== req.object_prefix),
|
|
626
|
-
}),
|
|
627
|
-
};
|
|
628
|
-
}, `skills_catalog:revert:${req.id}`);
|
|
629
|
-
}
|
|
630
|
-
/**
|
|
631
|
-
* In the caller's transaction (`mandatory`: `AgentsService.softDelete` holds the org and agent
|
|
632
|
-
* row locks), cancels every pending skill change of the agent: marks them cancelled, audits, and
|
|
633
|
-
* appends a reverting snapshot to each requesting conversation. After the commit the caller runs
|
|
634
|
-
* {@link finishCancel} to delete the drafts and publish the events.
|
|
635
|
-
*/
|
|
636
|
-
async cancelPendingForAgent(orgId, agentId, actorAccountId, reason, actorTokenId) {
|
|
388
|
+
async cancelPendingForAgent(orgId, agentId, actorAccountId, reason, actorTokenId, kinds = ["share", "version"]) {
|
|
637
389
|
const rows = await this.db
|
|
638
390
|
.selectFrom("skill_change_requests")
|
|
639
391
|
.selectAll()
|
|
640
392
|
.where("org_id", "=", orgId)
|
|
641
393
|
.where("agent_id", "=", agentId)
|
|
642
394
|
.where("status", "=", "pending")
|
|
395
|
+
.where("kind", "in", [...kinds])
|
|
643
396
|
.orderBy("created_at")
|
|
644
397
|
.forUpdate()
|
|
645
398
|
.execute();
|
|
646
399
|
const out = { prefixes: [], seqs: [] };
|
|
647
400
|
for (const r of rows) {
|
|
648
|
-
await this.
|
|
649
|
-
.updateTable("skill_change_requests")
|
|
650
|
-
.set({ status: "cancelled", decided_at: sql `now()` })
|
|
651
|
-
.where("id", "=", r.id)
|
|
652
|
-
.execute();
|
|
653
|
-
await audit(this.db.db, {
|
|
401
|
+
await cancelRequestIn(this.catalogDeps, r, out, {
|
|
654
402
|
actorAccountId,
|
|
655
403
|
...(actorTokenId !== undefined && { actorTokenId }),
|
|
656
|
-
|
|
657
|
-
action: "skill.change_decided",
|
|
658
|
-
target: r.id,
|
|
659
|
-
detail: { decision: "cancelled", reason, agentId, name: r.proposed_version.manifest.name },
|
|
404
|
+
reason,
|
|
660
405
|
});
|
|
661
|
-
const seq = await this.revertTrial(r);
|
|
662
|
-
if (seq !== null)
|
|
663
|
-
out.seqs.push([r.requested_in_conversation, seq]);
|
|
664
|
-
out.prefixes.push(r.object_prefix);
|
|
665
406
|
}
|
|
666
407
|
return out;
|
|
667
408
|
}
|
|
668
|
-
/** {@link cancelPendingForAgent}
|
|
409
|
+
/** After {@link cancelPendingForAgent} commits: publishes the events, deletes the drafts. */
|
|
669
410
|
async finishCancel(orgId, c) {
|
|
670
411
|
for (const [conv, seq] of c.seqs)
|
|
671
412
|
await this.eventLog.notify(conv, seq);
|
|
672
413
|
for (const p of c.prefixes)
|
|
673
414
|
await this.deletePrefix(orgId, p);
|
|
674
415
|
}
|
|
675
|
-
/**
|
|
676
|
-
async assertBelowCap(agentId, excluding) {
|
|
677
|
-
const skills = await this.db
|
|
678
|
-
.selectFrom("skills")
|
|
679
|
-
.select((eb) => eb.fn.countAll().as("n"))
|
|
680
|
-
.where("scope", "=", "agent")
|
|
681
|
-
.where("agent_id", "=", agentId)
|
|
682
|
-
.where("deleted_at", "is", null)
|
|
683
|
-
.executeTakeFirstOrThrow();
|
|
684
|
-
let q = this.db
|
|
685
|
-
.selectFrom("skill_change_requests")
|
|
686
|
-
.select((eb) => eb.fn.countAll().as("n"))
|
|
687
|
-
.where("agent_id", "=", agentId)
|
|
688
|
-
.where("status", "=", "pending")
|
|
689
|
-
.where("skill_id", "is", null);
|
|
690
|
-
if (excluding !== undefined)
|
|
691
|
-
q = q.where("id", "!=", excluding);
|
|
692
|
-
const drafts = await q.executeTakeFirstOrThrow();
|
|
693
|
-
if (Number(skills.n) + Number(drafts.n) >= AGENT_SKILLS_MAX)
|
|
694
|
-
throw new ToolError(capText());
|
|
695
|
-
}
|
|
696
|
-
/** 写一个版本并让 `current_version` 指向它(技能不存在则新建)。 */
|
|
697
|
-
async createVersion(v) {
|
|
698
|
-
if (v.exists) {
|
|
699
|
-
await this.db
|
|
700
|
-
.updateTable("skills")
|
|
701
|
-
.set({
|
|
702
|
-
current_version: v.version,
|
|
703
|
-
description: v.manifest.description,
|
|
704
|
-
updated_at: sql `now()`,
|
|
705
|
-
})
|
|
706
|
-
.where("id", "=", v.skillId)
|
|
707
|
-
.execute();
|
|
708
|
-
}
|
|
709
|
-
else {
|
|
710
|
-
await this.db
|
|
711
|
-
.insertInto("skills")
|
|
712
|
-
.values({
|
|
713
|
-
id: v.skillId,
|
|
714
|
-
org_id: v.orgId,
|
|
715
|
-
scope: "agent",
|
|
716
|
-
agent_id: v.agentId,
|
|
717
|
-
name: v.manifest.name,
|
|
718
|
-
description: v.manifest.description,
|
|
719
|
-
current_version: v.version,
|
|
720
|
-
created_by: v.createdBy,
|
|
721
|
-
})
|
|
722
|
-
.execute();
|
|
723
|
-
}
|
|
724
|
-
await this.db
|
|
725
|
-
.insertInto("skill_versions")
|
|
726
|
-
.values({
|
|
727
|
-
skill_id: v.skillId,
|
|
728
|
-
version: v.version,
|
|
729
|
-
manifest: JSON.stringify(v.manifest),
|
|
730
|
-
object_prefix: v.prefix,
|
|
731
|
-
created_by: v.createdBy,
|
|
732
|
-
})
|
|
733
|
-
.execute();
|
|
734
|
-
}
|
|
735
|
-
/**
|
|
736
|
-
* 先给组织行加 KEY SHARE 锁,再锁 agent 行:与 `AgentsService`(组织行 FOR UPDATE → agent 行)同一顺序。
|
|
737
|
-
* 不先锁的话,本事务持有 agent 行后插入引用组织的行(外键取 KEY SHARE)会与之互相等待(40P01)。
|
|
738
|
-
*/
|
|
739
|
-
async keyShareOrg(orgId) {
|
|
740
|
-
await this.db
|
|
741
|
-
.selectFrom("orgs")
|
|
742
|
-
.select("id")
|
|
743
|
-
.where("id", "=", orgId)
|
|
744
|
-
.forKeyShare()
|
|
745
|
-
.executeTakeFirst();
|
|
746
|
-
}
|
|
747
|
-
/** 尽力删除草稿对象(失败只记日志:孤儿对象随组织数据清理删除)。 */
|
|
416
|
+
/** Deletes draft objects best effort (a failure is only logged: org data cleanup removes them). */
|
|
748
417
|
async deletePrefix(orgId, prefix) {
|
|
749
418
|
try {
|
|
750
419
|
await this.storage.kernel(orgId).deletePrefix(prefix);
|
|
@@ -753,7 +422,7 @@ let SkillChangesService = class SkillChangesService {
|
|
|
753
422
|
this.log.warn("skill draft cleanup failed", { orgId, prefix, err });
|
|
754
423
|
}
|
|
755
424
|
}
|
|
756
|
-
/**
|
|
425
|
+
/** Adds the agent names and requester names. */
|
|
757
426
|
async views(rows) {
|
|
758
427
|
if (rows.length === 0)
|
|
759
428
|
return [];
|
|
@@ -779,6 +448,7 @@ let SkillChangesService = class SkillChangesService {
|
|
|
779
448
|
return rows.map((r) => ({
|
|
780
449
|
id: r.id,
|
|
781
450
|
orgId: r.org_id,
|
|
451
|
+
kind: r.kind,
|
|
782
452
|
agent: { id: r.agent_id, name: names.get(r.agent_id) ?? "" },
|
|
783
453
|
skillId: r.skill_id,
|
|
784
454
|
name: r.proposed_version.manifest.name,
|
|
@@ -789,22 +459,16 @@ let SkillChangesService = class SkillChangesService {
|
|
|
789
459
|
requestedBy: r.requested_by_account,
|
|
790
460
|
requestedByName: requesterNames.get(r.requested_by_account) ?? "",
|
|
791
461
|
requestedInConversation: r.requested_in_conversation,
|
|
792
|
-
conversationPath: `/chat/${r.requested_in_conversation}`,
|
|
462
|
+
conversationPath: r.requested_in_conversation === null ? null : `/chat/${r.requested_in_conversation}`,
|
|
793
463
|
decidedBy: r.decided_by,
|
|
794
464
|
decidedAt: r.decided_at === null ? null : iso(r.decided_at),
|
|
795
465
|
createdAt: iso(r.created_at),
|
|
796
466
|
}));
|
|
797
467
|
}
|
|
798
468
|
};
|
|
799
|
-
__decorate([
|
|
800
|
-
Transactional()
|
|
801
|
-
], SkillChangesService.prototype, "writeIn", null);
|
|
802
469
|
__decorate([
|
|
803
470
|
Transactional()
|
|
804
471
|
], SkillChangesService.prototype, "decideIn", null);
|
|
805
|
-
__decorate([
|
|
806
|
-
Transactional()
|
|
807
|
-
], SkillChangesService.prototype, "deleteAgentSkillIn", null);
|
|
808
472
|
__decorate([
|
|
809
473
|
Transactional({ propagation: "mandatory" })
|
|
810
474
|
], SkillChangesService.prototype, "cancelPendingForAgent", null);
|
|
@@ -814,12 +478,16 @@ SkillChangesService = __decorate([
|
|
|
814
478
|
__param(1, Inject(StorageService)),
|
|
815
479
|
__param(2, Inject(EventLog)),
|
|
816
480
|
__param(3, Inject(KERNEL_LOGGER)),
|
|
817
|
-
__param(4, Inject(TransactionHost))
|
|
481
|
+
__param(4, Inject(TransactionHost)),
|
|
482
|
+
__param(5, Inject(OrgLock)),
|
|
483
|
+
__param(6, Inject(SkillsService))
|
|
818
484
|
], SkillChangesService);
|
|
819
485
|
export { SkillChangesService };
|
|
820
486
|
/**
|
|
821
|
-
*
|
|
822
|
-
*
|
|
487
|
+
* Reads the files' text in manifest order, sharing the read budget `budget`. A file's content is
|
|
488
|
+
* null past the budget, when its object is missing, on a storage error, and for a binary file
|
|
489
|
+
* (not valid UTF-8, or holding a NUL byte), so the inbox never shows garbage. `store` undefined
|
|
490
|
+
* means nothing is read (e.g. the draft is deleted).
|
|
823
491
|
*/
|
|
824
492
|
async function readTexts(store, prefix, manifest, budget) {
|
|
825
493
|
const out = [];
|
|
@@ -829,8 +497,10 @@ async function readTexts(store, prefix, manifest, budget) {
|
|
|
829
497
|
try {
|
|
830
498
|
const got = await store.get(`${prefix}${f.path}`);
|
|
831
499
|
if (got) {
|
|
832
|
-
|
|
500
|
+
const bytes = await new Response(got.body).arrayBuffer();
|
|
833
501
|
budget.left -= f.size;
|
|
502
|
+
const text = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
503
|
+
content = text.includes("\u0000") ? null : text;
|
|
834
504
|
}
|
|
835
505
|
}
|
|
836
506
|
catch {
|
|
@@ -841,22 +511,3 @@ async function readTexts(store, prefix, manifest, budget) {
|
|
|
841
511
|
}
|
|
842
512
|
return out;
|
|
843
513
|
}
|
|
844
|
-
/** 并发写入全部文件。 */
|
|
845
|
-
async function putAll(store, prefix, files) {
|
|
846
|
-
const queue = [...files];
|
|
847
|
-
await Promise.all(Array.from({ length: Math.min(PUT_CONCURRENCY, queue.length) }, async () => {
|
|
848
|
-
for (let f = queue.shift(); f; f = queue.shift()) {
|
|
849
|
-
await store.put(`${prefix}${f.path}`, f.data, {
|
|
850
|
-
contentType: "application/octet-stream",
|
|
851
|
-
size: f.size,
|
|
852
|
-
});
|
|
853
|
-
}
|
|
854
|
-
}));
|
|
855
|
-
}
|
|
856
|
-
/** 存储错误 → 给模型的说明(存储不可用可重试);其余原样抛出。 */
|
|
857
|
-
function storageError(e) {
|
|
858
|
-
if (e instanceof ApiError && e.code === "storage.unavailable") {
|
|
859
|
-
return new ToolError(STORAGE_UNAVAILABLE_TEXT);
|
|
860
|
-
}
|
|
861
|
-
return e;
|
|
862
|
-
}
|