@capybara-hq/kernel 0.1.0-rc.3 → 0.1.0-rc.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bootstrap.json +61 -5
- package/dist/admin/admin.controller.d.ts +47 -16
- package/dist/admin/admin.controller.js +44 -19
- package/dist/admin/extensions.controller.d.ts +24 -3
- package/dist/admin/extensions.controller.js +48 -8
- package/dist/admin/setup-lock.d.ts +1 -1
- package/dist/admin/setup-lock.js +1 -1
- package/dist/admin/setup.controller.d.ts +1 -1
- package/dist/admin/setup.controller.js +1 -1
- package/dist/admin/setup.service.d.ts +4 -4
- package/dist/admin/setup.service.js +8 -8
- package/dist/agents/agent-lookup.d.ts +19 -0
- package/dist/agents/agent-lookup.js +21 -0
- package/dist/agents/agent-profile.service.d.ts +29 -0
- package/dist/agents/agent-profile.service.js +117 -0
- package/dist/agents/agents.controller.d.ts +168 -3
- package/dist/agents/agents.controller.js +201 -12
- package/dist/agents/agents.module.d.ts +4 -1
- package/dist/agents/agents.module.js +36 -6
- package/dist/agents/agents.service.d.ts +64 -27
- package/dist/agents/agents.service.js +199 -74
- package/dist/agents/definition.d.ts +53 -0
- package/dist/agents/definition.js +55 -0
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +649 -0
- package/dist/agents/from-template.service.d.ts +60 -0
- package/dist/agents/from-template.service.js +161 -0
- package/dist/agents/instruction-files.d.ts +60 -0
- package/dist/agents/instruction-files.js +111 -0
- package/dist/agents/models.controller.d.ts +9 -3
- package/dist/agents/models.controller.js +19 -4
- package/dist/agents/org-templates.d.ts +176 -0
- package/dist/agents/org-templates.js +827 -0
- package/dist/agents/pending-connector-requests.d.ts +77 -0
- package/dist/agents/pending-connector-requests.js +215 -0
- package/dist/agents/pending-connectors.controller.d.ts +39 -0
- package/dist/agents/pending-connectors.controller.js +91 -0
- package/dist/agents/pending-connectors.service.d.ts +62 -0
- package/dist/agents/pending-connectors.service.js +282 -0
- package/dist/agents/profile.d.ts +96 -0
- package/dist/agents/profile.js +51 -0
- package/dist/agents/readiness.controller.d.ts +26 -0
- package/dist/agents/readiness.controller.js +56 -0
- package/dist/agents/templates.controller.d.ts +86 -5
- package/dist/agents/templates.controller.js +171 -7
- package/dist/agents/templates.d.ts +127 -23
- package/dist/agents/templates.js +476 -53
- package/dist/background/background.controller.d.ts +38 -0
- package/dist/background/background.controller.js +87 -0
- package/dist/background/background.module.d.ts +10 -0
- package/dist/background/background.module.js +39 -0
- package/dist/background/finish.d.ts +44 -0
- package/dist/background/finish.js +94 -0
- package/dist/background/launch-lock.d.ts +15 -0
- package/dist/background/launch-lock.js +40 -0
- package/dist/background/launch.d.ts +36 -0
- package/dist/background/launch.js +70 -0
- package/dist/background/poll.job.d.ts +56 -0
- package/dist/background/poll.job.js +190 -0
- package/dist/background/render.d.ts +23 -0
- package/dist/background/render.js +48 -0
- package/dist/background/session.d.ts +48 -0
- package/dist/background/session.js +79 -0
- package/dist/background/status.d.ts +35 -0
- package/dist/background/status.js +57 -0
- package/dist/background/stop.d.ts +68 -0
- package/dist/background/stop.js +243 -0
- package/dist/background/store.d.ts +162 -0
- package/dist/background/store.js +357 -0
- package/dist/background/store.module.d.ts +6 -0
- package/dist/background/store.module.js +22 -0
- package/dist/background/tasks.service.d.ts +77 -0
- package/dist/background/tasks.service.js +211 -0
- package/dist/background/wake-rules.d.ts +66 -0
- package/dist/background/wake-rules.js +113 -0
- package/dist/background/wake.d.ts +30 -0
- package/dist/background/wake.js +63 -0
- package/dist/catalog/admin-catalog.controller.d.ts +129 -30
- package/dist/catalog/admin-catalog.controller.js +213 -42
- package/dist/catalog/catalog-content.d.ts +58 -32
- package/dist/catalog/catalog-content.js +34 -8
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +60 -0
- package/dist/catalog/catalog-items.d.ts +111 -7
- package/dist/catalog/catalog-items.js +279 -13
- package/dist/catalog/catalog-scope.service.d.ts +260 -0
- package/dist/catalog/catalog-scope.service.js +1116 -0
- package/dist/catalog/catalog.module.d.ts +7 -9
- package/dist/catalog/catalog.module.js +41 -31
- package/dist/catalog/catalog.service.d.ts +101 -29
- package/dist/catalog/catalog.service.js +104 -106
- package/dist/catalog/claude/agents.js +2 -0
- package/dist/catalog/cli.d.ts +11 -1
- package/dist/catalog/cli.js +26 -1
- package/dist/catalog/component-promotion.d.ts +96 -0
- package/dist/catalog/component-promotion.js +395 -0
- package/dist/catalog/component-scope.controller.d.ts +152 -0
- package/dist/catalog/component-scope.controller.js +287 -0
- package/dist/catalog/component-scope.service.d.ts +303 -0
- package/dist/catalog/component-scope.service.js +936 -0
- package/dist/catalog/component-state.d.ts +174 -0
- package/dist/catalog/component-state.js +437 -0
- package/dist/catalog/job-ids.d.ts +30 -0
- package/dist/catalog/job-ids.js +25 -0
- package/dist/catalog/marketplace-fetch.d.ts +1 -1
- package/dist/catalog/marketplaces.controller.d.ts +22 -5
- package/dist/catalog/marketplaces.controller.js +56 -7
- package/dist/catalog/marketplaces.service.d.ts +54 -14
- package/dist/catalog/marketplaces.service.js +71 -22
- package/dist/catalog/org-catalog.controller.d.ts +125 -34
- package/dist/catalog/org-catalog.controller.js +181 -65
- package/dist/catalog/org-catalog.service.d.ts +65 -33
- package/dist/catalog/org-catalog.service.js +324 -157
- package/dist/catalog/org-extension-switch.d.ts +41 -0
- package/dist/catalog/org-extension-switch.js +115 -0
- package/dist/catalog/org-extension.controller.d.ts +119 -0
- package/dist/catalog/org-extension.controller.js +266 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
- package/dist/catalog/org-plugin-uploads.controller.js +213 -0
- package/dist/catalog/org-plugin-uploads.d.ts +63 -0
- package/dist/catalog/org-plugin-uploads.js +116 -0
- package/dist/catalog/owned-items.d.ts +184 -0
- package/dist/catalog/owned-items.js +789 -0
- package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
- package/dist/catalog/owned-plugin-cleanup.js +194 -0
- package/dist/catalog/ownership.d.ts +172 -0
- package/dist/catalog/ownership.js +326 -0
- package/dist/catalog/platform-components.d.ts +221 -0
- package/dist/catalog/platform-components.js +761 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +582 -0
- package/dist/catalog/plugin-import.d.ts +178 -34
- package/dist/catalog/plugin-import.js +623 -83
- package/dist/catalog/plugin-install.d.ts +185 -41
- package/dist/catalog/plugin-install.js +758 -126
- package/dist/catalog/plugin-upgrade.d.ts +260 -225
- package/dist/catalog/plugin-upgrade.js +1148 -1137
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +193 -118
- package/dist/catalog/requests.service.js +526 -343
- package/dist/catalog/reserved-names.d.ts +8 -0
- package/dist/catalog/reserved-names.js +42 -0
- package/dist/catalog/scope-orgs.d.ts +21 -0
- package/dist/catalog/scope-orgs.js +67 -0
- package/dist/catalog/scope-state.d.ts +35 -0
- package/dist/catalog/scope-state.js +87 -0
- package/dist/catalog/scope-sync-workers.d.ts +7 -0
- package/dist/catalog/scope-sync-workers.js +29 -0
- package/dist/catalog/scope-sync.d.ts +176 -0
- package/dist/catalog/scope-sync.js +576 -0
- package/dist/catalog/scope.d.ts +42 -0
- package/dist/catalog/scope.js +42 -0
- package/dist/catalog/unshare.d.ts +22 -0
- package/dist/catalog/unshare.js +118 -0
- package/dist/channels/actions.js +1 -0
- package/dist/channels/cards.js +21 -3
- package/dist/channels/channels.module.js +2 -0
- package/dist/channels/connections.service.d.ts +16 -1
- package/dist/channels/connections.service.js +38 -4
- package/dist/channels/inbound.d.ts +9 -1
- package/dist/channels/inbound.js +67 -5
- package/dist/channels/phrases.d.ts +35 -0
- package/dist/channels/phrases.js +29 -0
- package/dist/channels/threads.d.ts +5 -0
- package/dist/channels/threads.js +8 -0
- package/dist/config/docs.js +3 -1
- package/dist/config/schema.d.ts +24 -2
- package/dist/config/schema.js +145 -19
- package/dist/conversations/access.d.ts +6 -4
- package/dist/conversations/access.js +29 -5
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/attachments.service.d.ts +30 -0
- package/dist/conversations/attachments.service.js +130 -5
- package/dist/conversations/conversations.controller.d.ts +79 -23
- package/dist/conversations/conversations.controller.js +141 -50
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +10 -7
- package/dist/conversations/conversations.service.d.ts +108 -9
- package/dist/conversations/conversations.service.js +237 -30
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +21 -6
- package/dist/conversations/event-log.js +70 -1
- package/dist/conversations/events.d.ts +140 -0
- package/dist/conversations/events.js +142 -13
- package/dist/conversations/queue.d.ts +3 -1
- package/dist/conversations/queue.js +13 -2
- package/dist/conversations/queue.service.d.ts +1 -1
- package/dist/conversations/queue.service.js +8 -1
- package/dist/conversations/titles.d.ts +12 -3
- package/dist/conversations/titles.js +36 -8
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/create-ctx.d.ts +5 -0
- package/dist/ctx/create-ctx.js +15 -5
- package/dist/db/kernel-schema.d.ts +420 -20
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +3 -0
- package/dist/environments/access.d.ts +41 -0
- package/dist/environments/access.js +77 -0
- package/dist/environments/conversation-environments.d.ts +61 -0
- package/dist/environments/conversation-environments.js +170 -0
- package/dist/environments/dto.d.ts +25 -0
- package/dist/environments/dto.js +12 -0
- package/dist/environments/environments.controller.d.ts +33 -0
- package/dist/environments/environments.controller.js +110 -0
- package/dist/environments/environments.module.d.ts +8 -0
- package/dist/environments/environments.module.js +27 -0
- package/dist/environments/environments.service.d.ts +153 -0
- package/dist/environments/environments.service.js +541 -0
- package/dist/environments/legacy-cleanup.job.d.ts +34 -0
- package/dist/environments/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +90 -2
- package/dist/errors.js +90 -2
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +26 -7
- package/dist/evals/run-replay.d.ts +7 -2
- package/dist/evals/run-replay.js +42 -7
- package/dist/evals/step-replay.d.ts +2 -5
- package/dist/evals/step-replay.js +13 -7
- package/dist/evals/trajectory.js +1 -1
- package/dist/evals/trajectory.service.d.ts +8 -3
- package/dist/evals/trajectory.service.js +26 -14
- package/dist/evals/worker.d.ts +5 -5
- package/dist/evals/worker.js +9 -3
- package/dist/extensions/admin-ops.d.ts +36 -10
- package/dist/extensions/admin-ops.js +67 -42
- package/dist/extensions/admin-view.d.ts +39 -10
- package/dist/extensions/admin-view.js +111 -20
- package/dist/extensions/blobs.js +1 -0
- package/dist/extensions/bootstrap.d.ts +17 -4
- package/dist/extensions/bootstrap.js +70 -9
- package/dist/extensions/cli.d.ts +12 -0
- package/dist/extensions/cli.js +11 -2
- package/dist/extensions/config-issues.d.ts +13 -1
- package/dist/extensions/config-issues.js +22 -5
- package/dist/extensions/config-json-schema.d.ts +43 -7
- package/dist/extensions/config-json-schema.js +124 -58
- package/dist/extensions/deployment-config-store.d.ts +6 -0
- package/dist/extensions/deployment-config.d.ts +78 -8
- package/dist/extensions/deployment-config.js +172 -34
- package/dist/extensions/display-name.d.ts +22 -0
- package/dist/extensions/display-name.js +77 -0
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/extensions.module.js +14 -2
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +45 -2
- package/dist/extensions/host.js +112 -16
- package/dist/extensions/installs.d.ts +20 -8
- package/dist/extensions/installs.js +37 -15
- package/dist/extensions/org-config.d.ts +81 -6
- package/dist/extensions/org-config.js +195 -44
- package/dist/extensions/org-levels.d.ts +37 -0
- package/dist/extensions/org-levels.js +71 -0
- package/dist/extensions/org-overrides.d.ts +151 -0
- package/dist/extensions/org-overrides.js +524 -0
- package/dist/extensions/package.d.ts +14 -1
- package/dist/extensions/package.js +51 -2
- package/dist/extensions/permission-view.d.ts +19 -4
- package/dist/extensions/permission-view.js +4 -4
- package/dist/extensions/plugin-items.d.ts +21 -0
- package/dist/extensions/plugin-items.js +42 -0
- package/dist/extensions/point-defaults.controller.d.ts +34 -0
- package/dist/extensions/point-defaults.controller.js +71 -0
- package/dist/extensions/point-defaults.d.ts +71 -0
- package/dist/extensions/point-defaults.js +234 -0
- package/dist/extensions/registry.d.ts +1 -1
- package/dist/extensions/registry.js +2 -0
- package/dist/extensions/resolve.d.ts +5 -1
- package/dist/extensions/resolve.js +15 -2
- package/dist/files/previewers.d.ts +8 -1
- package/dist/files/previewers.js +35 -6
- package/dist/http/api.module.js +31 -3
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/http/nest-logger.d.ts +6 -5
- package/dist/http/nest-logger.js +24 -10
- package/dist/identity/accounts.d.ts +29 -29
- package/dist/identity/accounts.js +47 -47
- package/dist/identity/audit.d.ts +2 -1
- package/dist/identity/auth.controller.js +9 -5
- package/dist/identity/auth.guard.d.ts +13 -5
- package/dist/identity/auth.guard.js +26 -9
- package/dist/identity/cookies.d.ts +20 -5
- package/dist/identity/cookies.js +44 -6
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +4 -4
- package/dist/identity/me.controller.d.ts +5 -1
- package/dist/identity/me.controller.js +12 -3
- package/dist/identity/principal.d.ts +3 -3
- package/dist/identity/principal.js +3 -3
- package/dist/identity/sessions.d.ts +12 -0
- package/dist/identity/sessions.js +45 -0
- package/dist/identity/settings.d.ts +22 -11
- package/dist/identity/settings.js +53 -18
- package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
- package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
- package/dist/inbox/inbox.module.d.ts +4 -1
- package/dist/inbox/inbox.module.js +7 -3
- package/dist/inbox/inbox.service.d.ts +62 -3
- package/dist/inbox/inbox.service.js +74 -4
- package/dist/inbox/org-notices.d.ts +63 -0
- package/dist/inbox/org-notices.js +91 -0
- package/dist/inbox/platform-inbox.controller.d.ts +23 -0
- package/dist/inbox/platform-inbox.controller.js +58 -0
- package/dist/inbox/platform-inbox.service.d.ts +151 -0
- package/dist/inbox/platform-inbox.service.js +263 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +27 -1
- package/dist/infra/database/database.module.js +1 -0
- package/dist/infra/database/xact-lock.d.ts +1 -1
- package/dist/infra/database/xact-lock.js +1 -1
- package/dist/infra/events/kernel-events.d.ts +19 -2
- package/dist/infra/lifecycle/process-guards.js +4 -0
- package/dist/infra/logging/logging.module.d.ts +4 -2
- package/dist/infra/logging/logging.module.js +24 -6
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/infra/queue/redis-connection.d.ts +6 -0
- package/dist/infra/queue/redis-connection.js +7 -0
- package/dist/infra/redis/redis.module.js +6 -2
- package/dist/infra/tokens.d.ts +6 -1
- package/dist/infra/tokens.js +6 -1
- package/dist/kernel.module.js +6 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
- package/dist/lifecycle/kernel-lifecycle.js +4 -4
- package/dist/log.d.ts +13 -1
- package/dist/log.js +93 -17
- package/dist/models/prices.d.ts +5 -5
- package/dist/models/prices.js +4 -4
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +13 -7
- package/dist/models/purposes.d.ts +43 -9
- package/dist/models/purposes.js +48 -18
- package/dist/orgs/directory-sync.d.ts +14 -5
- package/dist/orgs/directory-sync.js +41 -17
- package/dist/orgs/offboarding.d.ts +12 -8
- package/dist/orgs/offboarding.js +54 -33
- package/dist/orgs/org-lock.d.ts +5 -0
- package/dist/orgs/org-lock.js +13 -0
- package/dist/orgs/org.guard.d.ts +10 -0
- package/dist/orgs/org.guard.js +43 -32
- package/dist/orgs/orgs.module.js +3 -0
- package/dist/orgs/orgs.service.d.ts +20 -7
- package/dist/orgs/orgs.service.js +32 -12
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.service.d.ts +20 -3
- package/dist/orgs/settings.service.js +19 -4
- package/dist/overrides.d.ts +3 -0
- package/dist/overrides.js +2 -0
- package/dist/platform/actor.d.ts +48 -0
- package/dist/platform/actor.js +100 -0
- package/dist/platform/agent-docs.d.ts +18 -0
- package/dist/platform/agent-docs.js +59 -0
- package/dist/platform/availability.d.ts +14 -0
- package/dist/platform/availability.js +43 -0
- package/dist/platform/errors.d.ts +11 -0
- package/dist/platform/errors.js +26 -0
- package/dist/platform/exclusions.d.ts +12 -0
- package/dist/platform/exclusions.js +1387 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +92 -0
- package/dist/platform/operation.js +35 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
- package/dist/platform/ops/agent-templates.ops.js +92 -0
- package/dist/platform/ops/agents.ops.d.ts +19 -0
- package/dist/platform/ops/agents.ops.js +294 -0
- package/dist/platform/ops/connectors.ops.d.ts +15 -0
- package/dist/platform/ops/connectors.ops.js +126 -0
- package/dist/platform/ops/errors.d.ts +11 -0
- package/dist/platform/ops/errors.js +22 -0
- package/dist/platform/ops/extensions.ops.d.ts +19 -0
- package/dist/platform/ops/extensions.ops.js +116 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
- package/dist/platform/ops/marketplaces.ops.js +157 -0
- package/dist/platform/ops/paging.d.ts +14 -0
- package/dist/platform/ops/paging.js +20 -0
- package/dist/platform/ops/platform.ops.d.ts +23 -0
- package/dist/platform/ops/platform.ops.js +158 -0
- package/dist/platform/ops/plugins.ops.d.ts +33 -0
- package/dist/platform/ops/plugins.ops.js +377 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +153 -0
- package/dist/platform/ops/role.d.ts +4 -0
- package/dist/platform/ops/role.js +10 -0
- package/dist/platform/ops/skills.ops.d.ts +13 -0
- package/dist/platform/ops/skills.ops.js +98 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/platform-ops.module.d.ts +7 -0
- package/dist/platform/platform-ops.module.js +55 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/redact-orgs.d.ts +7 -0
- package/dist/platform/redact-orgs.js +52 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/roles/worker-role.d.ts +6 -4
- package/dist/roles/worker-role.js +14 -7
- package/dist/roles/worker.module.d.ts +1 -1
- package/dist/roles/worker.module.js +15 -1
- package/dist/runtime/context/build.d.ts +11 -7
- package/dist/runtime/context/build.js +46 -19
- package/dist/runtime/context/claude-tools.d.ts +3 -1
- package/dist/runtime/context/claude-tools.js +8 -6
- package/dist/runtime/context/compaction.js +13 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/skills.js +9 -2
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/hook-calls.js +2 -0
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +36 -17
- package/dist/runtime/loop.d.ts +34 -5
- package/dist/runtime/maintenance.d.ts +9 -4
- package/dist/runtime/maintenance.js +35 -8
- package/dist/runtime/model-call.d.ts +46 -8
- package/dist/runtime/model-call.js +72 -21
- package/dist/runtime/providers.d.ts +6 -0
- package/dist/runtime/providers.js +8 -0
- package/dist/runtime/run-control.d.ts +11 -1
- package/dist/runtime/run-control.js +12 -0
- package/dist/runtime/run-drafts.d.ts +85 -0
- package/dist/runtime/run-drafts.js +230 -0
- package/dist/runtime/run-jobs.d.ts +3 -5
- package/dist/runtime/run-jobs.js +3 -7
- package/dist/runtime/run-queue.d.ts +59 -2
- package/dist/runtime/run-queue.js +311 -38
- package/dist/runtime/run-worker.d.ts +11 -5
- package/dist/runtime/run-worker.js +69 -33
- package/dist/runtime/runtime.module.js +11 -3
- package/dist/runtime/step-log.d.ts +15 -4
- package/dist/runtime/step-log.js +24 -7
- package/dist/runtime/stream.controller.d.ts +23 -1
- package/dist/runtime/stream.controller.js +60 -3
- package/dist/runtime/stream.d.ts +4 -1
- package/dist/runtime/stream.js +27 -3
- package/dist/runtime/subagents/child.d.ts +55 -7
- package/dist/runtime/subagents/child.js +105 -7
- package/dist/runtime/subagents/definition.d.ts +12 -3
- package/dist/runtime/subagents/definition.js +44 -28
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +115 -26
- package/dist/runtime/subagents/dispatch.js +212 -141
- package/dist/runtime/subagents/limits.d.ts +24 -5
- package/dist/runtime/subagents/limits.js +40 -6
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +8 -6
- package/dist/runtime/subagents/progress.js +11 -6
- package/dist/runtime/subagents/render.d.ts +30 -0
- package/dist/runtime/subagents/render.js +53 -0
- package/dist/runtime/subagents/roster.d.ts +24 -7
- package/dist/runtime/subagents/roster.js +47 -11
- package/dist/runtime/subagents/skill-fork.d.ts +3 -2
- package/dist/runtime/subagents/skill-fork.js +8 -4
- package/dist/runtime/subagents/status.d.ts +14 -0
- package/dist/runtime/subagents/status.js +23 -0
- package/dist/runtime/subagents/subagents.service.d.ts +7 -4
- package/dist/runtime/subagents/subagents.service.js +11 -6
- package/dist/runtime/usage-report.d.ts +2 -1
- package/dist/runtime/usage-report.js +19 -13
- package/dist/runtime/waits.d.ts +145 -36
- package/dist/runtime/waits.js +423 -109
- package/dist/sandbox/jobs.d.ts +40 -13
- package/dist/sandbox/jobs.js +57 -20
- package/dist/sandbox/leases.d.ts +37 -54
- package/dist/sandbox/leases.js +71 -115
- package/dist/sandbox/providers.d.ts +2 -2
- package/dist/sandbox/providers.js +1 -1
- package/dist/sandbox/sandbox.module.d.ts +3 -2
- package/dist/sandbox/sandbox.module.js +10 -4
- package/dist/sandbox/sandbox.service.d.ts +282 -129
- package/dist/sandbox/sandbox.service.js +736 -381
- package/dist/skills/catalog.d.ts +3 -2
- package/dist/skills/catalog.js +21 -43
- package/dist/skills/changes.controller.d.ts +7 -0
- package/dist/skills/changes.controller.js +19 -1
- package/dist/skills/invoke.js +8 -3
- package/dist/skills/package.d.ts +20 -1
- package/dist/skills/package.js +28 -1
- package/dist/skills/skills.controller.d.ts +39 -4
- package/dist/skills/skills.controller.js +88 -10
- package/dist/skills/skills.module.js +10 -1
- package/dist/skills/skills.service.d.ts +106 -26
- package/dist/skills/skills.service.js +421 -75
- package/dist/skills/usable.d.ts +81 -0
- package/dist/skills/usable.js +379 -0
- package/dist/tools/approvals.service.d.ts +20 -2
- package/dist/tools/approvals.service.js +25 -4
- package/dist/tools/builtin-names.d.ts +41 -7
- package/dist/tools/builtin-names.js +59 -7
- package/dist/tools/builtins/agent.d.ts +23 -21
- package/dist/tools/builtins/agent.js +62 -55
- package/dist/tools/builtins/builtin-tools.d.ts +19 -1
- package/dist/tools/builtins/builtin-tools.js +59 -2
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +34 -0
- package/dist/tools/builtins/platform.js +362 -0
- package/dist/tools/builtins/sandbox/bash.d.ts +1 -1
- package/dist/tools/builtins/sandbox/bash.js +241 -4
- package/dist/tools/builtins/sandbox/common.d.ts +69 -27
- package/dist/tools/builtins/sandbox/common.js +87 -48
- package/dist/tools/builtins/sandbox/deliver.js +1 -1
- package/dist/tools/builtins/sandbox/edit.js +2 -2
- package/dist/tools/builtins/sandbox/glob.js +2 -2
- package/dist/tools/builtins/sandbox/grep.js +2 -4
- package/dist/tools/builtins/sandbox/index.d.ts +3 -1
- package/dist/tools/builtins/sandbox/index.js +7 -1
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/task-output.d.ts +74 -0
- package/dist/tools/builtins/sandbox/task-output.js +329 -0
- package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
- package/dist/tools/builtins/sandbox/task-stop.js +113 -0
- package/dist/tools/builtins/sandbox/write.js +2 -2
- package/dist/tools/builtins/send-message.d.ts +56 -0
- package/dist/tools/builtins/send-message.js +100 -0
- package/dist/tools/builtins/skill-load.d.ts +22 -14
- package/dist/tools/builtins/skill-load.js +86 -57
- package/dist/tools/builtins/skill-write.js +1 -1
- package/dist/tools/builtins/web/errors.d.ts +8 -0
- package/dist/tools/builtins/web/errors.js +53 -0
- package/dist/tools/builtins/web/extract.d.ts +62 -0
- package/dist/tools/builtins/web/extract.js +271 -0
- package/dist/tools/builtins/web/fetch.d.ts +55 -0
- package/dist/tools/builtins/web/fetch.js +175 -0
- package/dist/tools/builtins/web/index.d.ts +13 -0
- package/dist/tools/builtins/web/index.js +12 -0
- package/dist/tools/builtins/web/page-cache.d.ts +25 -0
- package/dist/tools/builtins/web/page-cache.js +77 -0
- package/dist/tools/builtins/web/search.d.ts +25 -0
- package/dist/tools/builtins/web/search.js +210 -0
- package/dist/tools/builtins/web/url.d.ts +17 -0
- package/dist/tools/builtins/web/url.js +43 -0
- package/dist/tools/connectors.controller.d.ts +10 -0
- package/dist/tools/connectors.controller.js +12 -0
- package/dist/tools/connectors.service.d.ts +46 -5
- package/dist/tools/connectors.service.js +94 -15
- package/dist/tools/extension-tools.controller.d.ts +14 -0
- package/dist/tools/extension-tools.controller.js +37 -0
- package/dist/tools/info.d.ts +42 -1
- package/dist/tools/info.js +64 -1
- package/dist/tools/oauth/flow-paths.d.ts +1 -1
- package/dist/tools/oauth/flow-paths.js +1 -1
- package/dist/tools/org-tool-switches.d.ts +74 -0
- package/dist/tools/org-tool-switches.js +184 -0
- package/dist/tools/pipeline.d.ts +46 -40
- package/dist/tools/pipeline.js +202 -364
- package/dist/tools/policy.d.ts +1 -1
- package/dist/tools/policy.js +36 -16
- package/dist/tools/registry.d.ts +120 -8
- package/dist/tools/registry.js +112 -19
- package/dist/tools/tools.module.js +24 -2
- package/dist/tools/validate.js +1 -1
- package/dist/ui/views.d.ts +2 -1
- package/dist/ui/views.js +17 -3
- package/package.json +3 -3
- package/src/migrations/0064_account_last_org.sql +7 -0
- package/src/migrations/0065_conversation_archive.sql +8 -0
- package/src/migrations/0066_extension_display_name.sql +4 -0
- package/src/migrations/0067_agent_profiles.sql +20 -0
- package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
- package/src/migrations/0069_attachments_agent_idx.sql +3 -0
- package/src/migrations/0070_background_tasks.sql +37 -0
- package/src/migrations/0071_background_tasks_reserve.sql +6 -0
- package/src/migrations/0072_background_tasks_stopping.sql +5 -0
- package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
- package/src/migrations/0074_subagent_tree.sql +50 -0
- package/src/migrations/0075_plugin_scope.sql +61 -0
- package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
- package/src/migrations/0077_scope_requests.sql +52 -0
- package/src/migrations/0078_scope_grant_switches.sql +18 -0
- package/src/migrations/0079_scope_live_install_switches.sql +19 -0
- package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
- package/src/migrations/0081_platform_components.sql +129 -0
- package/src/migrations/0082_platform_migration.sql +33 -0
- package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
- package/src/migrations/0084_org_owned_items.sql +85 -0
- package/src/migrations/0085_agent_templates_phase4.sql +45 -0
- package/src/migrations/0086_org_layering.sql +30 -0
- package/src/migrations/0087_approval_summary.sql +6 -0
- package/src/migrations/0088_environments.sql +80 -0
- package/dist/catalog/upgrade-targets.d.ts +0 -56
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -24
- package/dist/conversations/sandbox-status.js +0 -52
- package/dist/extensions/org-config.controller.d.ts +0 -24
- package/dist/extensions/org-config.controller.js +0 -62
|
@@ -5,26 +5,29 @@ import { type CatalogSkill } from "../../runtime/context/skills.js";
|
|
|
5
5
|
import type { BuiltinCallContext, BuiltinTool } from "../registry.js";
|
|
6
6
|
import { type SandboxToolDeps } from "./sandbox/common.js";
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
* SKILL.md
|
|
10
|
-
*
|
|
8
|
+
* Builtin tool `Skill` (M5 T14, ruling M17): resolves the name against the latest skills catalog
|
|
9
|
+
* snapshot in the log to an id and version, and returns that version's SKILL.md body and file list
|
|
10
|
+
* (the result names the version). A skill with other files is copied whole into the conversation's
|
|
11
|
+
* environment at `/skills/<name>@<digest>/` (the provider writes as root, commands read only; the
|
|
12
|
+
* digest is {@link skillDigest} of the version's file manifest, so versions of one skill coexist in
|
|
13
|
+
* the shared file system). Without a sandbox provider only the body is given, with a note that
|
|
14
|
+
* scripts are unavailable.
|
|
11
15
|
*
|
|
12
|
-
* -
|
|
13
|
-
* -
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* - agent
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* 旧版本独有的文件留在原处、记进标记的 `stale`,每次加载都在结果里列出「不属于当前版本、忽略它们」。
|
|
16
|
+
* - Every file read from storage is checked against the manifest's sha256; a mismatch is refused.
|
|
17
|
+
* - The copy is recorded in a kernel-controlled marker, one per skill version
|
|
18
|
+
* ({@link skillMarkerPath}: `/skills/.capybara/<name>@<digest>.json`, commands cannot change it):
|
|
19
|
+
* `{ digest, files }`. A present marker with the same digest skips the copy.
|
|
20
|
+
* - An agent without any sandbox tool creates no sandbox and copies nothing (the model could not
|
|
21
|
+
* run the scripts), and is told so.
|
|
22
|
+
* - Executable bit: files the provider writes are never executable (0644). The result tells the model
|
|
23
|
+
* to run scripts with an interpreter (`sh` / `python3` / `node`).
|
|
21
24
|
*/
|
|
22
25
|
/**
|
|
23
26
|
* 已复制进沙箱的技能的标记目录(内核控制:`/skills` 只有提供方以 root 能写;技能名不以 `.` 开头,不会撞名)。
|
|
24
27
|
*/
|
|
25
28
|
export declare const SKILLS_MARKER_DIR = "/skills/.capybara";
|
|
26
|
-
/**
|
|
27
|
-
export declare const skillMarkerPath: (name: string) => string;
|
|
29
|
+
/** The marker file of one skill version. */
|
|
30
|
+
export declare const skillMarkerPath: (name: string, digest: string) => string;
|
|
28
31
|
/** 依赖:沙箱工具的依赖,加上读技能行用的库与读快照用的日志。 */
|
|
29
32
|
export interface SkillLoadDeps extends SandboxToolDeps {
|
|
30
33
|
db: KernelSchemaDb;
|
|
@@ -44,6 +47,11 @@ export declare function readSkillFile(store: ObjectStore, key: string, file: Ski
|
|
|
44
47
|
* 批准时草稿前缀原样成为版本前缀,版本号变了也能找到),再找本对话发起、仍待批准、前缀相同的技能改动(试用草稿:
|
|
45
48
|
* 没有 `skill_versions` 行,新技能连 `skills` 行都没有)。绝不按版本号解析——被拒绝的草稿与之后别人批准的同号版本
|
|
46
49
|
* 内容不同。都没有 → undefined(已移除)。
|
|
50
|
+
*
|
|
51
|
+
* Phase 2 (ruling D2): a `platform:<prefix>` source is a platform skill version: found by its
|
|
52
|
+
* prefix for the platform skill with the entry's id, or the platform skill an org copy with that id
|
|
53
|
+
* links to (ruling B2), while neither is deleted. The returned `object_prefix` keeps the
|
|
54
|
+
* `platform:` form; `skillFileStore` picks the store for it.
|
|
47
55
|
*/
|
|
48
56
|
export declare function findSkillVersion(db: KernelSchemaDb, ctx: Pick<BuiltinCallContext, "orgId" | "conversationId">, entry: Pick<CatalogSkill, "id" | "source">): Promise<{
|
|
49
57
|
manifest: SkillManifest;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import { parseSkillMd, renderSkillBody, SKILL_ENTRY_FILE, SKILL_INVOCATION_LIMITS, SKILLS_SANDBOX_ROOT, skillSandboxPath, ToolError, } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { parseSkillMd, renderSkillBody, SKILL_ENTRY_FILE, SKILL_INVOCATION_LIMITS, SKILLS_SANDBOX_ROOT, skillDigest, skillSandboxDir, skillSandboxPath, ToolError, } from "@capybara-hq/plugin-sdk";
|
|
3
3
|
import { sql } from "kysely";
|
|
4
4
|
import { normalizeStoredDefinition } from "../../agents/definition.js";
|
|
5
5
|
import { ApiError } from "../../errors.js";
|
|
@@ -7,29 +7,33 @@ import { latestInvocation } from "../../runtime/context/skills.js";
|
|
|
7
7
|
import { dispatchOfChildRun } from "../../runtime/subagents/child.js";
|
|
8
8
|
import { resolveSkillForkType } from "../../runtime/subagents/roster.js";
|
|
9
9
|
import { invocationOf, resolveSkills } from "../../skills/catalog.js";
|
|
10
|
+
import { PLATFORM_SOURCE, skillFileStore } from "../../skills/usable.js";
|
|
10
11
|
import { AGENT_TOOL, SANDBOX_TOOL_NAMES } from "../builtin-names.js";
|
|
11
12
|
import { clip, display, inSandbox, sandboxBaseTimeoutMs, withNotices, withPathLease, } from "./sandbox/common.js";
|
|
12
13
|
/**
|
|
13
|
-
*
|
|
14
|
-
* SKILL.md
|
|
15
|
-
*
|
|
14
|
+
* Builtin tool `Skill` (M5 T14, ruling M17): resolves the name against the latest skills catalog
|
|
15
|
+
* snapshot in the log to an id and version, and returns that version's SKILL.md body and file list
|
|
16
|
+
* (the result names the version). A skill with other files is copied whole into the conversation's
|
|
17
|
+
* environment at `/skills/<name>@<digest>/` (the provider writes as root, commands read only; the
|
|
18
|
+
* digest is {@link skillDigest} of the version's file manifest, so versions of one skill coexist in
|
|
19
|
+
* the shared file system). Without a sandbox provider only the body is given, with a note that
|
|
20
|
+
* scripts are unavailable.
|
|
16
21
|
*
|
|
17
|
-
* -
|
|
18
|
-
* -
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* - agent
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* 旧版本独有的文件留在原处、记进标记的 `stale`,每次加载都在结果里列出「不属于当前版本、忽略它们」。
|
|
22
|
+
* - Every file read from storage is checked against the manifest's sha256; a mismatch is refused.
|
|
23
|
+
* - The copy is recorded in a kernel-controlled marker, one per skill version
|
|
24
|
+
* ({@link skillMarkerPath}: `/skills/.capybara/<name>@<digest>.json`, commands cannot change it):
|
|
25
|
+
* `{ digest, files }`. A present marker with the same digest skips the copy.
|
|
26
|
+
* - An agent without any sandbox tool creates no sandbox and copies nothing (the model could not
|
|
27
|
+
* run the scripts), and is told so.
|
|
28
|
+
* - Executable bit: files the provider writes are never executable (0644). The result tells the model
|
|
29
|
+
* to run scripts with an interpreter (`sh` / `python3` / `node`).
|
|
26
30
|
*/
|
|
27
31
|
/**
|
|
28
32
|
* 已复制进沙箱的技能的标记目录(内核控制:`/skills` 只有提供方以 root 能写;技能名不以 `.` 开头,不会撞名)。
|
|
29
33
|
*/
|
|
30
34
|
export const SKILLS_MARKER_DIR = `${SKILLS_SANDBOX_ROOT}/.capybara`;
|
|
31
|
-
/**
|
|
32
|
-
export const skillMarkerPath = (name) => `${SKILLS_MARKER_DIR}/${name}.json`;
|
|
35
|
+
/** The marker file of one skill version. */
|
|
36
|
+
export const skillMarkerPath = (name, digest) => `${SKILLS_MARKER_DIR}/${name}@${digest}.json`;
|
|
33
37
|
const MARKER_MAX_BYTES = 256 * 1024;
|
|
34
38
|
/** 结果里最多列出的文件数(其余只给数量)。 */
|
|
35
39
|
const MAX_LISTED_FILES = 200;
|
|
@@ -42,9 +46,8 @@ const SPEC = {
|
|
|
42
46
|
description: "Load a skill from the skills list: returns the skill's instructions " +
|
|
43
47
|
"(its SKILL.md) and the list of its files. Call it before starting a task that matches a " +
|
|
44
48
|
"skill's description, then follow the returned instructions. If the skill has scripts or other " +
|
|
45
|
-
"files, they are copied read-only to /skills/<name>/ in this
|
|
46
|
-
"there with an interpreter (sh, python3, node). Call it again when the skills list changes
|
|
47
|
-
"the sandbox was recreated. Pass args when the task gives the skill arguments (they replace " +
|
|
49
|
+
"files, they are copied read-only to /skills/<name>@<version-id>/ in this environment; run scripts " +
|
|
50
|
+
"there with an interpreter (sh, python3, node). Call it again when the skills list changes. Pass args when the task gives the skill arguments (they replace " +
|
|
48
51
|
"$ARGUMENTS and $1, $2… in the instructions). Do not use it for skills that are not in the list.",
|
|
49
52
|
inputSchema: {
|
|
50
53
|
type: "object",
|
|
@@ -79,22 +82,20 @@ const removedText = (name) => `Skill "${name}" was removed after the skills list
|
|
|
79
82
|
const forkAvailableText = (type) => `This skill is written to run in a sub-agent: call Agent with subagent_type "${type}" and a prompt containing these instructions and the details of the task, then use its report; do not follow the instructions yourself.`;
|
|
80
83
|
const FORK_UNAVAILABLE_TEXT = "This skill is written to run in a sub-agent, which is not available here; follow the instructions yourself.";
|
|
81
84
|
const integrityText = (name) => `Skill "${name}" failed an integrity check (its stored files do not match the uploaded package); ask an administrator to upload the skill again.`;
|
|
82
|
-
|
|
83
|
-
/** 解析一个技能的标记文件;坏的按没有处理(重新复制)。 */
|
|
85
|
+
/** Parses a version's marker; a broken one counts as missing (the version is copied again). */
|
|
84
86
|
function parseMarker(data) {
|
|
85
87
|
try {
|
|
86
88
|
const r = JSON.parse(new TextDecoder().decode(data));
|
|
87
89
|
if (r === null || typeof r !== "object" || Array.isArray(r))
|
|
88
90
|
return undefined;
|
|
89
91
|
const e = r;
|
|
90
|
-
if (typeof e.
|
|
92
|
+
if (typeof e.digest !== "string")
|
|
91
93
|
return undefined;
|
|
92
94
|
return {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
stale: strings(e.stale),
|
|
95
|
+
digest: e.digest,
|
|
96
|
+
files: Array.isArray(e.files)
|
|
97
|
+
? e.files.filter((x) => typeof x === "string")
|
|
98
|
+
: [],
|
|
98
99
|
};
|
|
99
100
|
}
|
|
100
101
|
catch {
|
|
@@ -156,34 +157,25 @@ async function readVerified(store, key, file, skill, signal) {
|
|
|
156
157
|
}
|
|
157
158
|
}
|
|
158
159
|
/**
|
|
159
|
-
*
|
|
160
|
-
*
|
|
160
|
+
* Copies the skill version whole to `/skills/<name>@<digest>/` (skipped when its marker matches).
|
|
161
|
+
* Every file is checked against the manifest before it is written; the marker is written last, so
|
|
162
|
+
* a failure midway means the next call starts over.
|
|
161
163
|
*/
|
|
162
164
|
async function copySkill(s, v) {
|
|
163
|
-
const { name
|
|
164
|
-
const markerPath = skillMarkerPath(name);
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
cur = parseMarker(m.data);
|
|
170
|
-
}
|
|
171
|
-
if (cur && cur.id === id && cur.version === version && cur.prefix === v.prefix) {
|
|
172
|
-
return { stale: cur.stale };
|
|
173
|
-
}
|
|
165
|
+
const { name } = v.entry;
|
|
166
|
+
const markerPath = skillMarkerPath(name, v.digest);
|
|
167
|
+
const m = await s.p.readFile(s.h, markerPath, { maxBytes: MARKER_MAX_BYTES, signal: s.signal });
|
|
168
|
+
const cur = m && !m.truncated ? parseMarker(m.data) : undefined;
|
|
169
|
+
if (cur?.digest === v.digest)
|
|
170
|
+
return;
|
|
174
171
|
for (const f of v.manifest.files) {
|
|
175
172
|
const data = f.path === SKILL_ENTRY_FILE
|
|
176
173
|
? v.entryBytes
|
|
177
|
-
: await readVerified(v.store, `${v.
|
|
178
|
-
await s.p.writeFile(s.h, skillSandboxPath(name, f.path), data, s.signal);
|
|
174
|
+
: await readVerified(v.store, `${v.keyPrefix}${f.path}`, f, name, s.signal);
|
|
175
|
+
await s.p.writeFile(s.h, skillSandboxPath(name, v.digest, f.path), data, s.signal);
|
|
179
176
|
}
|
|
180
|
-
const
|
|
181
|
-
const now = new Set(files);
|
|
182
|
-
const stale = cur ? [...new Set([...cur.stale, ...cur.files])].filter((p) => !now.has(p)) : [];
|
|
183
|
-
stale.sort();
|
|
184
|
-
const entry = { id, version, prefix: v.prefix, files, stale };
|
|
177
|
+
const entry = { digest: v.digest, files: v.manifest.files.map((f) => f.path) };
|
|
185
178
|
await s.p.writeFile(s.h, markerPath, new TextEncoder().encode(JSON.stringify(entry)), s.signal);
|
|
186
|
-
return { stale };
|
|
187
179
|
}
|
|
188
180
|
/** 本步可用的工具里是否有沙箱工具(没有时模型用不了复制进去的文件)。 */
|
|
189
181
|
const hasSandboxTools = (ctx) => (ctx.tools ?? []).some((t) => t.source.kind === "builtin" &&
|
|
@@ -200,8 +192,15 @@ function fileList(files) {
|
|
|
200
192
|
* 批准时草稿前缀原样成为版本前缀,版本号变了也能找到),再找本对话发起、仍待批准、前缀相同的技能改动(试用草稿:
|
|
201
193
|
* 没有 `skill_versions` 行,新技能连 `skills` 行都没有)。绝不按版本号解析——被拒绝的草稿与之后别人批准的同号版本
|
|
202
194
|
* 内容不同。都没有 → undefined(已移除)。
|
|
195
|
+
*
|
|
196
|
+
* Phase 2 (ruling D2): a `platform:<prefix>` source is a platform skill version: found by its
|
|
197
|
+
* prefix for the platform skill with the entry's id, or the platform skill an org copy with that id
|
|
198
|
+
* links to (ruling B2), while neither is deleted. The returned `object_prefix` keeps the
|
|
199
|
+
* `platform:` form; `skillFileStore` picks the store for it.
|
|
203
200
|
*/
|
|
204
201
|
export async function findSkillVersion(db, ctx, entry) {
|
|
202
|
+
if (entry.source.startsWith(PLATFORM_SOURCE))
|
|
203
|
+
return findPlatformVersion(db, ctx.orgId, entry);
|
|
205
204
|
const row = await db
|
|
206
205
|
.selectFrom("skills")
|
|
207
206
|
.innerJoin("skill_versions", "skill_versions.skill_id", "skills.id")
|
|
@@ -225,6 +224,29 @@ export async function findSkillVersion(db, ctx, entry) {
|
|
|
225
224
|
return undefined;
|
|
226
225
|
return { manifest: draft.proposed_version.manifest, object_prefix: draft.object_prefix };
|
|
227
226
|
}
|
|
227
|
+
/** {@link findSkillVersion} for a `platform:<prefix>` source. */
|
|
228
|
+
async function findPlatformVersion(db, orgId, entry) {
|
|
229
|
+
const row = await db
|
|
230
|
+
.selectFrom("platform_skill_versions as v")
|
|
231
|
+
.innerJoin("platform_skills as p", "p.id", "v.skill_id")
|
|
232
|
+
.select(["v.manifest"])
|
|
233
|
+
.where("v.object_prefix", "=", entry.source.slice(PLATFORM_SOURCE.length))
|
|
234
|
+
.where("p.deleted_at", "is", null)
|
|
235
|
+
// a platform skill disabled on the deployment is not loaded, even from an older snapshot
|
|
236
|
+
.where("p.disabled", "=", false)
|
|
237
|
+
.where((eb) => eb.or([
|
|
238
|
+
eb("p.id", "=", entry.id),
|
|
239
|
+
eb("p.id", "in", eb
|
|
240
|
+
.selectFrom("skills")
|
|
241
|
+
.select("platform_skill_id")
|
|
242
|
+
.where("id", "=", entry.id)
|
|
243
|
+
.where("org_id", "=", orgId)
|
|
244
|
+
.where("deleted_at", "is", null)
|
|
245
|
+
.where("platform_skill_id", "is not", null)),
|
|
246
|
+
]))
|
|
247
|
+
.executeTakeFirst();
|
|
248
|
+
return row && { manifest: row.manifest, object_prefix: entry.source };
|
|
249
|
+
}
|
|
228
250
|
/** A Claude Code style qualified name `<plugin>:<skill>` (phase B, spec §9.3). */
|
|
229
251
|
const QUALIFIED_NAME_RE = /^([a-z0-9][a-z0-9-]{0,63}):(.+)$/;
|
|
230
252
|
/**
|
|
@@ -385,13 +407,23 @@ export function skillLoadTool(deps) {
|
|
|
385
407
|
if (!row)
|
|
386
408
|
throw new ToolError(removedText(name));
|
|
387
409
|
const manifest = row.manifest;
|
|
388
|
-
|
|
410
|
+
// the marker records the source (`platform:` included); keys use the store's own prefix
|
|
389
411
|
const prefix = row.object_prefix;
|
|
412
|
+
const { store, prefix: keyPrefix } = skillFileStore(deps.storage, ctx.orgId, prefix);
|
|
390
413
|
const md = manifest.files.find((f) => f.path === SKILL_ENTRY_FILE);
|
|
391
414
|
if (!md)
|
|
392
415
|
throw new ToolError(integrityText(name));
|
|
393
|
-
const mdBytes = await readVerified(store, `${
|
|
394
|
-
const
|
|
416
|
+
const mdBytes = await readVerified(store, `${keyPrefix}${md.path}`, md, name, ctx.signal);
|
|
417
|
+
const digest = skillDigest(manifest.files);
|
|
418
|
+
const v = {
|
|
419
|
+
entry,
|
|
420
|
+
manifest,
|
|
421
|
+
digest,
|
|
422
|
+
prefix,
|
|
423
|
+
keyPrefix,
|
|
424
|
+
store,
|
|
425
|
+
entryBytes: mdBytes,
|
|
426
|
+
};
|
|
395
427
|
let parsed;
|
|
396
428
|
try {
|
|
397
429
|
parsed = parseSkillMd(new TextDecoder("utf-8", { fatal: true }).decode(mdBytes), {
|
|
@@ -403,7 +435,7 @@ export function skillLoadTool(deps) {
|
|
|
403
435
|
}
|
|
404
436
|
if ("errors" in parsed)
|
|
405
437
|
throw new ToolError(integrityText(name));
|
|
406
|
-
const dir = `${
|
|
438
|
+
const dir = `${skillSandboxDir(name, digest)}/`;
|
|
407
439
|
const others = manifest.files.filter((f) => f.path !== SKILL_ENTRY_FILE);
|
|
408
440
|
let notices = [];
|
|
409
441
|
let filesText;
|
|
@@ -425,22 +457,19 @@ export function skillLoadTool(deps) {
|
|
|
425
457
|
}
|
|
426
458
|
else {
|
|
427
459
|
// the skill's marker is read, compared and written: one holder at a time per skill
|
|
428
|
-
const r = await inSandbox(deps, ctx, (s) => withPathLease(deps,
|
|
460
|
+
const r = await inSandbox(deps, ctx, (s) => withPathLease(deps, s, skillMarkerPath(name, digest), s.signal, (signal) => copySkill({ ...s, signal }, v)));
|
|
429
461
|
notices = r.notices;
|
|
430
|
-
const stale = r.value.stale.length > 0
|
|
431
|
-
? `\nFiles left over from an earlier version (not part of this version; ignore them): ${r.value.stale.join(", ")}`
|
|
432
|
-
: "";
|
|
433
462
|
filesText =
|
|
434
463
|
`Skill files (copied to ${dir} in the sandbox, read-only):\n${fileList(manifest.files)}\n` +
|
|
435
464
|
`Run scripts with an interpreter, e.g. \`sh ${dir}<script>.sh\`, \`python3 ${dir}<script>.py\` ` +
|
|
436
465
|
"or `node`; the files are not executable, so `./script` does not work. Write outputs under " +
|
|
437
|
-
`/workspace, not ${SKILLS_SANDBOX_ROOT}
|
|
466
|
+
`/workspace, not ${SKILLS_SANDBOX_ROOT}.`;
|
|
438
467
|
}
|
|
439
468
|
const invocation = invocationOf(manifest);
|
|
440
469
|
const fork = invocation.fork;
|
|
441
470
|
let instructions;
|
|
442
471
|
try {
|
|
443
|
-
instructions = renderSkillBody(parsed.body.trim(), invocation, args ?? "", name);
|
|
472
|
+
instructions = renderSkillBody(parsed.body.trim(), invocation, args ?? "", name, digest);
|
|
444
473
|
}
|
|
445
474
|
catch (e) {
|
|
446
475
|
if (!(e instanceof RangeError))
|
|
@@ -29,7 +29,7 @@ const SPEC = {
|
|
|
29
29
|
"user-invocable, context, agent, argument-hint and arguments, which are kept; with " +
|
|
30
30
|
"disable-model-invocation: true only a person can invoke the skill and you cannot load it). " +
|
|
31
31
|
"Every other entry in `files` is stored at " +
|
|
32
|
-
"/skills/<name>/<path
|
|
32
|
+
"/skills/<name>@<version-id>/<path> once loaded. Files of the previous version that you leave out are not part of the new " +
|
|
33
33
|
"version. Text files only, at most 1 MB per skill in total. Use an existing skill's name to update " +
|
|
34
34
|
"it; an organization skill with the same name is shadowed by this agent's own skill. On a private " +
|
|
35
35
|
"agent the new version takes effect immediately. On a shared agent the change is sent to the " +
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Which web tool is calling its provider (it names the provider in some texts). */
|
|
2
|
+
export type WebToolKind = "search" | "fetch";
|
|
3
|
+
/**
|
|
4
|
+
* Rethrows a web provider's failure for the tool pipeline: a `WebProviderError` becomes a
|
|
5
|
+
* `ToolError` with its kind's fixed text; anything else is rethrown unchanged (the pipeline's
|
|
6
|
+
* generic failure, which names only the error class, never the provider's message).
|
|
7
|
+
*/
|
|
8
|
+
export declare function webToolError(e: unknown, tool: WebToolKind): never;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ToolError, WebProviderError } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
const KINDS = new Set([
|
|
3
|
+
"not_found",
|
|
4
|
+
"blocked",
|
|
5
|
+
"auth",
|
|
6
|
+
"rate_limited",
|
|
7
|
+
"unavailable",
|
|
8
|
+
"invalid",
|
|
9
|
+
]);
|
|
10
|
+
/**
|
|
11
|
+
* The kind of a provider's `WebProviderError`, or undefined for any other error. Matched by name
|
|
12
|
+
* as well as by class, so an extension bundled with its own copy of the class still maps.
|
|
13
|
+
*/
|
|
14
|
+
function providerErrorKind(e) {
|
|
15
|
+
if (!(e instanceof Error))
|
|
16
|
+
return undefined;
|
|
17
|
+
if (!(e instanceof WebProviderError) && e.name !== "WebProviderError")
|
|
18
|
+
return undefined;
|
|
19
|
+
const kind = e.kind;
|
|
20
|
+
return typeof kind === "string" && KINDS.has(kind) ? kind : undefined;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The fixed model-visible text of a provider error kind (web tools spec §4.2): providers never
|
|
24
|
+
* write model-visible text.
|
|
25
|
+
*/
|
|
26
|
+
function providerErrorText(kind, tool) {
|
|
27
|
+
const provider = tool === "search" ? "web search" : "web fetch";
|
|
28
|
+
switch (kind) {
|
|
29
|
+
case "auth":
|
|
30
|
+
return `The ${provider} provider rejected its credentials; ask an org admin to check the provider's configuration.`;
|
|
31
|
+
case "rate_limited":
|
|
32
|
+
return `The ${provider} provider is rate limiting this org; retry in a minute or continue without it.`;
|
|
33
|
+
case "not_found":
|
|
34
|
+
return "No results or page found; check the query or URL and retry.";
|
|
35
|
+
case "blocked":
|
|
36
|
+
return "The site refused the provider; use another source.";
|
|
37
|
+
case "unavailable":
|
|
38
|
+
return "The web provider is unavailable right now; retry later or continue without it.";
|
|
39
|
+
case "invalid":
|
|
40
|
+
return "The provider rejected the request; check the query or URL and retry.";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Rethrows a web provider's failure for the tool pipeline: a `WebProviderError` becomes a
|
|
45
|
+
* `ToolError` with its kind's fixed text; anything else is rethrown unchanged (the pipeline's
|
|
46
|
+
* generic failure, which names only the error class, never the provider's message).
|
|
47
|
+
*/
|
|
48
|
+
export function webToolError(e, tool) {
|
|
49
|
+
const kind = providerErrorKind(e);
|
|
50
|
+
if (kind === undefined)
|
|
51
|
+
throw e;
|
|
52
|
+
throw new ToolError(providerErrorText(kind, tool));
|
|
53
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { type Logger, type WebFetchPage } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import type { EventLog } from "../../../conversations/event-log.js";
|
|
3
|
+
import type { KernelConfigService } from "../../../infra/config/kernel-config.service.js";
|
|
4
|
+
import { type ModelPurposesService } from "../../../models/purposes.js";
|
|
5
|
+
import { type HookRunner } from "../../../runtime/hook-calls.js";
|
|
6
|
+
import type { StepLog } from "../../../runtime/step-log.js";
|
|
7
|
+
import type { UsageReporter } from "../../../runtime/usage-report.js";
|
|
8
|
+
import type { BuiltinCallContext } from "../../registry.js";
|
|
9
|
+
/**
|
|
10
|
+
* The `WebFetch` extraction call (web tools spec §5): the fetched page and the model's prompt go to
|
|
11
|
+
* the `web_fetch` model purpose (unmapped → the calling conversation's current chat model, a
|
|
12
|
+
* sub-agent's call: the sub-agent's), and only its answer comes back. One call, no tools, output
|
|
13
|
+
* capped at `web.fetch.maxAnswerTokens`. The page sits between a random per-call tag the system
|
|
14
|
+
* prompt names, so page text cannot close it or fake the prompt; it is cut to fit the purpose
|
|
15
|
+
* model's context window ({@link fitPage}). It fires `model.request` (a policy denial is the tool error
|
|
16
|
+
* {@link WEB_FETCH_DENIED_TEXT}, logged as any hook denial) and `model.response` like the title
|
|
17
|
+
* call; its tokens are a `usage` event with `purpose: "web_fetch"` and the call id, reported, and
|
|
18
|
+
* counted on the parent run of a sub-agent. The page itself is never stored and never returned:
|
|
19
|
+
* a failure is the tool error {@link WEB_FETCH_EXTRACT_FAILED_TEXT}. The call is not model-visible
|
|
20
|
+
* to the agent (its result is the recorded `tool_result`), so replays never make it.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* The fixed start of the extraction call's system prompt (model-facing, English; a core constant).
|
|
24
|
+
* The prompt sent is {@link webFetchSystemPrompt}, which adds the call's page tag.
|
|
25
|
+
*/
|
|
26
|
+
export declare const WEB_FETCH_SYSTEM_PROMPT: string;
|
|
27
|
+
/** The system prompt of one extraction call: {@link WEB_FETCH_SYSTEM_PROMPT} naming its page tag. */
|
|
28
|
+
export declare function webFetchSystemPrompt(tag: string): string;
|
|
29
|
+
/** The tool error when the extraction call fails (the page is never returned instead). */
|
|
30
|
+
export declare const WEB_FETCH_EXTRACT_FAILED_TEXT = "Could not extract an answer from the page; retry, or try another URL.";
|
|
31
|
+
/** The tool error when a `model.request` policy hook denies the extraction call. */
|
|
32
|
+
export declare const WEB_FETCH_DENIED_TEXT = "An org policy blocked reading this page; continue without it or ask the user.";
|
|
33
|
+
/** What {@link extractAnswer} needs. */
|
|
34
|
+
export interface WebFetchExtractDeps {
|
|
35
|
+
purposes: Pick<ModelPurposesService, "chat" | "chatLimits">;
|
|
36
|
+
eventLog: Pick<EventLog, "append" | "notify" | "latestOfType">;
|
|
37
|
+
stepLog: Pick<StepLog, "appendCounted" | "appendAudited">;
|
|
38
|
+
config: Pick<KernelConfigService, "get">;
|
|
39
|
+
log: Pick<Logger, "warn">;
|
|
40
|
+
/** Extension hooks (absent: none fire). */
|
|
41
|
+
hooks?: HookRunner | undefined;
|
|
42
|
+
usageReport?: Pick<UsageReporter, "enqueue"> | undefined;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The user message of the extraction call: the URL, then the page (title, markdown) between
|
|
46
|
+
* `<tag>` and `</tag>`, then the prompt.
|
|
47
|
+
*/
|
|
48
|
+
export declare function extractionMessage(page: WebFetchPage, prompt: string, tag: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* The page cut so the extraction request fits the purpose model's context (web tools spec §4.2):
|
|
51
|
+
* system prompt + message + answer cap + headroom within `contextWindow`, by the kernel's
|
|
52
|
+
* `estimateTokens`. A cut page ends with {@link TRUNCATED_MARKER}; one that fits is unchanged.
|
|
53
|
+
*/
|
|
54
|
+
export declare function fitPage(page: WebFetchPage, prompt: string, tag: string, system: string, limits: {
|
|
55
|
+
contextWindow: number;
|
|
56
|
+
answerTokens: number;
|
|
57
|
+
}): WebFetchPage;
|
|
58
|
+
/**
|
|
59
|
+
* Answers `prompt` from `page` with one call on the `web_fetch` purpose (see the module comment).
|
|
60
|
+
* Returns the answer text; throws a {@link ToolError} on a denial or a failure.
|
|
61
|
+
*/
|
|
62
|
+
export declare function extractAnswer(deps: WebFetchExtractDeps, ctx: BuiltinCallContext, page: WebFetchPage, prompt: string): Promise<string>;
|