@mycadet/assistant 0.12.7 → 0.12.9
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/README.md +1 -1
- package/docs/activation-funnel-telemetry.md +6 -6
- package/docs/cadet-doctor.md +7 -7
- package/docs/desktop-browser-cli.md +7 -7
- package/docs/skills.md +2 -2
- package/docs/voice-input-diagnostics.md +1 -1
- package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +2 -2
- package/node_modules/@mycadet/avatar-manifest/src/__tests__/notification-avatar.test.ts +1 -1
- package/node_modules/@mycadet/avatar-manifest/src/notification-avatar.ts +2 -2
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/package.json +2 -2
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
- package/node_modules/@mycadet/ces-client/package.json +1 -1
- package/node_modules/@mycadet/ces-client/src/__tests__/ces-client.test.ts +14 -14
- package/node_modules/@mycadet/ces-client/src/rpc-client.ts +1 -1
- package/node_modules/@mycadet/credential-storage/src/oauth-runtime.ts +1 -1
- package/node_modules/@mycadet/credential-storage/src/static-credentials.ts +1 -1
- package/node_modules/@mycadet/environments/src/seeds.ts +6 -6
- package/node_modules/@mycadet/environments/src/shell.test.ts +1 -1
- package/node_modules/@mycadet/environments/src/types.ts +6 -6
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/package.json +2 -2
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
- package/node_modules/@mycadet/gateway-client/src/binding-strength-contract.ts +5 -5
- package/node_modules/@mycadet/gateway-client/src/gateway-ipc-contracts.ts +1 -1
- package/node_modules/@mycadet/gateway-client/src/inbound-contract.ts +2 -2
- package/node_modules/@mycadet/gateway-client/src/outbound-contract.ts +1 -1
- package/node_modules/@mycadet/service-contracts/package.json +2 -2
- package/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
- package/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
- package/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
- package/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
- package/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
- package/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
- package/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
- package/openapi.yaml +6804 -799
- package/package.json +2 -2
- package/scripts/build-test-fixtures.ts +1 -1
- package/scripts/probe-skill-retrieval.ts +1 -1
- package/scripts/sync-llm-catalog.ts +2 -2
- package/scripts/voice-ttft-spike.ts +2 -2
- package/src/__tests__/adaptive-thinking-repair.test.ts +4 -4
- package/src/__tests__/agent-loop-override-profile.test.ts +4 -4
- package/src/__tests__/agent-loop-subagent-billing-headers.test.ts +1 -1
- package/src/__tests__/anthropic-provider.test.ts +2 -2
- package/src/__tests__/available-skills.test.ts +11 -12
- package/src/__tests__/avatar-identity-sync.test.ts +1 -1
- package/src/__tests__/byok-default-profile-ensure.test.ts +7 -7
- package/src/__tests__/call-domain.test.ts +1 -1
- package/src/__tests__/call-site-routing-connection-auto-resolve.test.ts +2 -2
- package/src/__tests__/catalog-files.test.ts +10 -10
- package/src/__tests__/catalog-install-normalize.test.ts +3 -3
- package/src/__tests__/channel-availability-routes.test.ts +8 -8
- package/src/__tests__/channel-readiness-routes.test.ts +4 -4
- package/src/__tests__/channel-readiness-service.test.ts +14 -14
- package/src/__tests__/channel-readiness-telegram-remote.test.ts +1 -1
- package/src/__tests__/chat-reveal-guard-priming.test.ts +5 -6
- package/src/__tests__/checker.test.ts +6 -6
- package/src/__tests__/clawhub.test.ts +1 -1
- package/src/__tests__/{platform-callback-registration.test.ts → cloud-callback-registration.test.ts} +66 -90
- package/src/__tests__/{platform-client-verify-credential.test.ts → cloud-client-verify-credential.test.ts} +14 -14
- package/src/__tests__/{managed-credential-catalog-cli.test.ts → cloud-credential-catalog-cli.test.ts} +41 -41
- package/src/__tests__/{managed-fallback-dispatch.test.ts → cloud-fallback-dispatch.test.ts} +21 -16
- package/src/__tests__/{managed-profile-guard.test.ts → cloud-profile-guard.test.ts} +77 -75
- package/src/__tests__/{platform-proxy-context.test.ts → cloud-proxy-context.test.ts} +44 -44
- package/src/__tests__/{managed-speech-defaults.test.ts → cloud-speech-defaults.test.ts} +41 -41
- package/src/__tests__/{managed-store.test.ts → cloud-store.test.ts} +99 -99
- package/src/__tests__/compaction-events.test.ts +7 -5
- package/src/__tests__/config-loader-backfill.test.ts +65 -65
- package/src/__tests__/config-loader-cloud-defaults.test.ts +373 -0
- package/src/__tests__/config-loader-corrupt.test.ts +1 -1
- package/src/__tests__/config-loader-validation-reset-notice.test.ts +1 -1
- package/src/__tests__/config-schema.test.ts +3 -3
- package/src/__tests__/{config-set-platform-guard.test.ts → config-set-cloud-guard.test.ts} +6 -6
- package/src/__tests__/config-set-route.test.ts +12 -8
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +0 -8
- package/src/__tests__/config-watcher.test.ts +1 -1
- package/src/__tests__/contacts-write.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop.test.ts +2 -2
- package/src/__tests__/conversation-app-control-instantiation.test.ts +18 -18
- package/src/__tests__/conversation-error.test.ts +45 -45
- package/src/__tests__/conversation-inference-profile-route.test.ts +4 -4
- package/src/__tests__/conversation-rendered-delegation-state.test.ts +4 -4
- package/src/__tests__/conversation-skill-tools.test.ts +7 -8
- package/src/__tests__/conversation-slash.test.ts +2 -2
- package/src/__tests__/conversation-speed-override.test.ts +8 -10
- package/src/__tests__/conversation-summarize-up-to.test.ts +4 -4
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +1 -1
- package/src/__tests__/conversation-wait-for-idle.test.ts +7 -5
- package/src/__tests__/credential-execution-api-key-propagation.test.ts +5 -5
- package/src/__tests__/{credential-execution-managed-contract.test.ts → credential-execution-cloud-contract.test.ts} +24 -24
- package/src/__tests__/credential-health-service.test.ts +28 -40
- package/src/__tests__/credential-routes.test.ts +85 -165
- package/src/__tests__/credential-security-invariants.test.ts +6 -7
- package/src/__tests__/custom-profile-ensure.test.ts +1 -1
- package/src/__tests__/date-context.test.ts +1 -1
- package/src/__tests__/default-profile-catalog-fallback.test.ts +15 -15
- package/src/__tests__/delete-managed-skill-tool.test.ts +8 -8
- package/src/__tests__/discord-callback-round-trip.test.ts +1 -1
- package/src/__tests__/disk-usage.test.ts +3 -3
- package/src/__tests__/email-invite-adapter.test.ts +5 -5
- package/src/__tests__/{embedding-managed-proxy-selection.test.ts → embedding-cloud-proxy-selection.test.ts} +44 -43
- package/src/__tests__/emit-signal-routing-intent.test.ts +13 -15
- package/src/__tests__/events-dev-bypass-actor.test.ts +2 -2
- package/src/__tests__/fallback-breaker.test.ts +7 -7
- package/src/__tests__/feature-flag-test-helpers.ts +106 -0
- package/src/__tests__/gateway-flag-listener.test.ts +1 -1
- package/src/__tests__/gemini-image-service.test.ts +2 -2
- package/src/__tests__/gemini-provider.test.ts +5 -5
- package/src/__tests__/get-skill-detail-audit.test.ts +134 -288
- package/src/__tests__/guardian-verification-voice-binding.test.ts +1 -1
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +5 -5
- package/src/__tests__/host-cu-routes-targeted.test.ts +8 -8
- package/src/__tests__/image-credentials.test.ts +13 -13
- package/src/__tests__/inbound-admitted-introduction-nudge.test.ts +14 -6
- package/src/__tests__/inbound-trust-verdict.test.ts +14 -6
- package/src/__tests__/inference-no-mode-boot-e2e.test.ts +11 -11
- package/src/__tests__/inference-profile-session-handler.test.ts +7 -7
- package/src/__tests__/inference-profile-session-ipc.test.ts +5 -5
- package/src/__tests__/inference-profile-validation-jev.test.ts +1 -1
- package/src/__tests__/init-feature-flag-overrides.test.ts +40 -24
- package/src/__tests__/input-repairs.test.ts +1 -1
- package/src/__tests__/install-skill-routing.test.ts +10 -8
- package/src/__tests__/integration-status.test.ts +5 -5
- package/src/__tests__/internal-telemetry-routes.test.ts +3 -3
- package/src/__tests__/invite-routes-http.test.ts +1 -1
- package/src/__tests__/llm-catalog-parity.test.ts +5 -7
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +2 -2
- package/src/__tests__/llm-resolver-override-or-default.test.ts +3 -3
- package/src/__tests__/llm-resolver.test.ts +1 -1
- package/src/__tests__/llm-schema-fallback-profile.test.ts +25 -19
- package/src/__tests__/llm-usage-store.test.ts +1 -1
- package/src/__tests__/managed-skill-lifecycle.test.ts +12 -12
- package/src/__tests__/mcp-abort-signal.test.ts +1 -2
- package/src/__tests__/mcp-client-auth.test.ts +1 -2
- package/src/__tests__/mcp-config-secret-boundary.test.ts +44 -40
- package/src/__tests__/mcp-tool-annotations-risk.test.ts +1 -2
- package/src/__tests__/media-generate-image.test.ts +30 -30
- package/src/__tests__/memory-config-file-parity.test.ts +6 -6
- package/src/__tests__/migration-export-to-gcs.test.ts +4 -4
- package/src/__tests__/migration-import-commit-http.test.ts +1 -1
- package/src/__tests__/mtime-cache.test.ts +2 -2
- package/src/__tests__/{notification-platform-adapter.test.ts → notification-cloud-adapter.test.ts} +39 -39
- package/src/__tests__/notification-deep-link.test.ts +40 -40
- package/src/__tests__/oauth-apps-routes.test.ts +3 -3
- package/src/__tests__/oauth-cli.test.ts +9 -9
- package/src/__tests__/oauth-commands-routes.test.ts +16 -16
- package/src/__tests__/oauth-connect-orchestrator.test.ts +2 -2
- package/src/__tests__/oauth-provider-serializer.test.ts +11 -11
- package/src/__tests__/oauth-providers-routes.test.ts +12 -12
- package/src/__tests__/oauth-store.test.ts +1 -1
- package/src/__tests__/oauth2-gateway-transport.test.ts +3 -3
- package/src/__tests__/onboarding-persona-write.test.ts +2 -2
- package/src/__tests__/openai-image-service.test.ts +2 -2
- package/src/__tests__/openai-responses-cutover-guard.test.ts +2 -2
- package/src/__tests__/openai-responses-provider.test.ts +1 -1
- package/src/__tests__/path-policy.test.ts +4 -4
- package/src/__tests__/personal-memory-auth-bypass.test.ts +1 -1
- package/src/__tests__/platform-bash-auto-approve.test.ts +18 -18
- package/src/__tests__/plugin-api-model-profiles.test.ts +1 -1
- package/src/__tests__/plugin-api-provider.test.ts +1 -1
- package/src/__tests__/plugin-api-store-credential.test.ts +4 -1
- package/src/__tests__/plugin-api-webhook-url.test.ts +4 -5
- package/src/__tests__/plugin-import-boundary-guard.test.ts +8 -39
- package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +2 -2
- package/src/__tests__/{provider-platform-proxy-integration.test.ts → provider-cloud-proxy-integration.test.ts} +70 -72
- package/src/__tests__/provider-commit-message-generator.test.ts +1 -1
- package/src/__tests__/provider-connections-backfill.test.ts +9 -9
- package/src/__tests__/provider-error-scenarios.test.ts +8 -8
- package/src/__tests__/provider-registry-ollama.test.ts +1 -1
- package/src/__tests__/provider-send-message-override-profile.test.ts +5 -5
- package/src/__tests__/registry.test.ts +3 -3
- package/src/__tests__/requests-mock.ts +972 -0
- package/src/__tests__/resolve-trust-class.test.ts +1 -1
- package/src/__tests__/resource-pressure-guard.test.ts +6 -6
- package/src/__tests__/resource-pressure-routes.test.ts +5 -5
- package/src/__tests__/retry-fallback-escalation.test.ts +5 -5
- package/src/__tests__/sanitize-config-for-transfer.test.ts +1 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +97 -97
- package/src/__tests__/schedule-store.test.ts +1 -1
- package/src/__tests__/search-skills-unified.test.ts +9 -7
- package/src/__tests__/{secret-routes-platform-proxy.test.ts → secret-routes-cloud-proxy.test.ts} +48 -95
- package/src/__tests__/secret-routes-scrub.test.ts +2 -59
- package/src/__tests__/secure-keys.test.ts +1 -1
- package/src/__tests__/skill-load-plugin-scope.test.ts +2 -2
- package/src/__tests__/skill-load-tool.test.ts +1 -1
- package/src/__tests__/skill-projection-feature-flag.test.ts +0 -19
- package/src/__tests__/skill-projection.benchmark.test.ts +5 -7
- package/src/__tests__/skill-tool-factory.test.ts +1 -1
- package/src/__tests__/skills-file-content-endpoint.test.ts +222 -536
- package/src/__tests__/skills-files-catalog-fallback.test.ts +259 -577
- package/src/__tests__/skills.test.ts +1 -1
- package/src/__tests__/slim-skill-category.test.ts +11 -9
- package/src/__tests__/stt-stream-session.test.ts +3 -3
- package/src/__tests__/subagent-call-site-routing.test.ts +1 -1
- package/src/__tests__/subagent-disposal.test.ts +5 -5
- package/src/__tests__/subagent-fork-notifications.test.ts +4 -4
- package/src/__tests__/subagent-fork-spawn.test.ts +5 -5
- package/src/__tests__/subagent-manager-notify.test.ts +5 -5
- package/src/__tests__/subagent-tool-gate-mode.test.ts +2 -2
- package/src/__tests__/system-prompt.test.ts +1 -1
- package/src/__tests__/telegram-bot-username-resolution.test.ts +34 -52
- package/src/__tests__/telegram-config.test.ts +16 -16
- package/src/__tests__/telephony-tts-guard.test.ts +13 -13
- package/src/__tests__/test-preload.ts +17 -7
- package/src/__tests__/tool-audit.test.ts +1 -1
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +7 -5
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +1 -1
- package/src/__tests__/turn-events-store.test.ts +1 -1
- package/src/__tests__/twilio-routes.test.ts +2 -1
- package/src/__tests__/ui-choice-copy-surfaces.test.ts +1 -1
- package/src/__tests__/unified-turn-context-client-os.test.ts +1 -1
- package/src/__tests__/validate-input.test.ts +5 -5
- package/src/__tests__/verification-outbound-delivery.test.ts +1 -1
- package/src/__tests__/voice-config-update.test.ts +15 -15
- package/src/__tests__/voice-ingress-preflight.test.ts +4 -4
- package/src/__tests__/web-search.test.ts +340 -859
- package/src/__tests__/workspace-git-service.test.ts +1 -1
- package/src/__tests__/workspace-migration-082-backfill-managed-profile-labels.test.ts +12 -12
- package/src/__tests__/workspace-migration-087-memory-router-balanced-profile.test.ts +1 -1
- package/src/__tests__/workspace-migration-090-memory-router-cost-optimized-profile.test.ts +1 -1
- package/src/__tests__/workspace-migration-100-upgrade-quality-profile-to-fable-5.test.ts +1 -1
- package/src/__tests__/workspace-migration-103-upgrade-quality-profile-to-opus-4-8.test.ts +1 -1
- package/src/__tests__/workspace-migration-110-flip-balanced-profile-to-together.test.ts +1 -1
- package/src/__tests__/workspace-migration-113-swap-balanced-profile-to-glm-5p2.test.ts +1 -1
- package/src/__tests__/workspace-migration-114-swap-quality-profile-to-opus.test.ts +1 -1
- package/src/__tests__/workspace-migration-123-swap-quality-profile-to-fable.test.ts +1 -1
- package/src/__tests__/workspace-migration-125-repoint-managed-connections-to-cadet.test.ts +3 -3
- package/src/__tests__/workspace-migration-126-strip-managed-profile-bodies.test.ts +9 -9
- package/src/__tests__/workspace-migration-127-backfill-default-provider.test.ts +11 -11
- package/src/__tests__/workspace-migration-130-speech-mode-to-provider.test.ts +3 -3
- package/src/__tests__/workspace-migration-132-web-search-mode-to-provider.test.ts +6 -6
- package/src/__tests__/workspace-migration-133-collapse-provider-connections.test.ts +3 -3
- package/src/__tests__/workspace-migration-134-image-generation-mode-to-provider.test.ts +6 -6
- package/src/__tests__/workspace-migration-136-repair-stale-fireworks-kimi-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-137-repair-retired-fireworks-minimax-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-146-repair-retired-fireworks-deepseek-flash-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-147-rename-colliding-backup-profile-names.test.ts +1 -1
- package/src/__tests__/workspace-migration-151-repair-renamed-fireworks-deepseek-pro-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-152-repair-retired-fireworks-minimax-m2p7-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-159-rename-colliding-jev-profile-name.test.ts +1 -1
- package/src/__tests__/workspace-migration-160-repair-retired-fireworks-model-ids.test.ts +1 -1
- package/src/__tests__/workspace-migration-161-repair-retired-fireworks-glm-5p2-model-id.test.ts +1 -1
- package/src/api/events/cloud-disconnected.ts +21 -0
- package/src/api/events/host-bash.ts +1 -1
- package/src/api/events/host-cu.ts +1 -1
- package/src/api/events/host-file.ts +1 -1
- package/src/api/events/notification-intent.ts +1 -1
- package/src/api/events/show-cloud-login.ts +18 -0
- package/src/api/index.ts +11 -11
- package/src/api/responses/home.ts +1 -1
- package/src/api/surfaces.ts +4 -4
- package/src/approvals/guardian-request-resolvers.ts +2 -2
- package/src/avatar/accent-backfill.ts +1 -1
- package/src/avatar/identity-avatar.ts +1 -1
- package/src/avatar/notification-avatar.test.ts +2 -2
- package/src/avatar/notification-avatar.ts +2 -2
- package/src/avatar/resvg-lazy.test.ts +1 -1
- package/src/avatar/resvg-lazy.ts +3 -3
- package/src/avatar/sync-avatar.test.ts +76 -76
- package/src/avatar/sync-avatar.ts +15 -15
- package/src/avatar/traits-png-sync.ts +1 -1
- package/src/background-wake/background-wake-routes.test.ts +39 -39
- package/src/background-wake/{platform-client.test.ts → cloud-client.test.ts} +11 -11
- package/src/background-wake/{platform-client.ts → cloud-client.ts} +14 -14
- package/src/background-wake/publisher.ts +4 -4
- package/src/background-wake/wake-intent-hooks.test.ts +3 -3
- package/src/calls/__tests__/call-controller.test.ts +2 -2
- package/src/calls/__tests__/voice-session-bridge.test.ts +1 -1
- package/src/calls/call-domain.ts +1 -1
- package/src/calls/resolve-call-tts-provider.ts +6 -6
- package/src/calls/telephony-credential-preflight.ts +3 -3
- package/src/calls/telephony-tts-capability.ts +5 -6
- package/src/calls/tts-call-strategy.ts +1 -1
- package/src/calls/voice-escalation-judge.ts +1 -1
- package/src/calls/voice-ingress-preflight.ts +4 -4
- package/src/cli/bundled-modules.ts +1 -1
- package/src/cli/commands/__tests__/apps.test.ts +18 -53
- package/src/cli/commands/__tests__/plugins.test.ts +13 -13
- package/src/cli/commands/__tests__/tts.test.ts +1 -1
- package/src/cli/commands/auth.help.ts +3 -3
- package/src/cli/commands/auth.ts +2 -4
- package/src/cli/commands/browser.help.ts +2 -2
- package/src/cli/commands/channels/index.help.ts +2 -2
- package/src/cli/commands/channels/index.ts +1 -1
- package/src/cli/commands/channels/send.ts +1 -1
- package/src/cli/commands/cloud/__tests__/callback-routes-list.test.ts +2 -2
- package/src/cli/commands/cloud/__tests__/connect.test.ts +1 -1
- package/src/cli/commands/cloud/__tests__/disconnect.test.ts +3 -4
- package/src/cli/commands/cloud/connect.ts +2 -2
- package/src/cli/commands/cloud/credits-format.ts +1 -1
- package/src/cli/commands/cloud/index.help.ts +35 -35
- package/src/cli/commands/cloud/index.ts +1 -1
- package/src/cli/commands/config.ts +2 -2
- package/src/cli/commands/credentials.ts +10 -12
- package/src/cli/commands/domain.ts +1 -1
- package/src/cli/commands/email.help.ts +1 -1
- package/src/cli/commands/email.ts +2 -2
- package/src/cli/commands/gateway.help.ts +1 -1
- package/src/cli/commands/gateway.ts +1 -1
- package/src/cli/commands/image-generation.help.ts +1 -1
- package/src/cli/commands/inference-providers.ts +1 -1
- package/src/cli/commands/inference.help.ts +2 -2
- package/src/cli/commands/memory/index.help.ts +1 -1
- package/src/cli/commands/oauth/connect.test.ts +2 -2
- package/src/cli/commands/oauth/connect.ts +1 -1
- package/src/cli/commands/oauth/index.help.ts +5 -5
- package/src/cli/commands/oauth/providers.ts +2 -2
- package/src/cli/commands/oauth/shared.ts +3 -3
- package/src/cli/commands/plugins.help.ts +2 -3
- package/src/cli/commands/plugins.ts +5 -5
- package/src/cli/commands/roadmap.help.ts +1 -1
- package/src/cli/commands/telemetry.help.ts +2 -2
- package/src/cli/commands/telemetry.ts +2 -2
- package/src/cli/commands/tts.help.ts +3 -3
- package/src/cli/commands/webhooks.help.ts +9 -9
- package/src/cli/commands/webhooks.ts +1 -1
- package/src/cli/lib/__tests__/inspect-plugin.test.ts +8 -8
- package/src/cli/lib/__tests__/{install-from-platform.test.ts → install-from-cloud.test.ts} +54 -54
- package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +18 -18
- package/src/cli/lib/__tests__/{plugin-catalog-platform.test.ts → plugin-catalog-cloud.test.ts} +2 -2
- package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +1 -1
- package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +9 -9
- package/src/cli/lib/__tests__/plugin-details.test.ts +10 -10
- package/src/cli/lib/__tests__/plugins-install-offline.test.ts +24 -24
- package/src/cli/lib/bundled-marketplace.json +1 -1
- package/src/cli/lib/inspect-plugin.ts +2 -2
- package/src/cli/lib/{install-from-platform.ts → install-from-cloud.ts} +29 -29
- package/src/cli/lib/install-from-github.ts +4 -4
- package/src/cli/lib/plugin-catalog-cache.ts +7 -7
- package/src/cli/lib/{plugin-catalog-platform.ts → plugin-catalog-cloud.ts} +6 -6
- package/src/cli/lib/plugin-catalog-local.ts +2 -2
- package/src/cli/lib/publish-plugin.ts +9 -10
- package/src/cli/lib/search-plugins.ts +2 -2
- package/src/{platform → cloud}/client.test.ts +85 -86
- package/src/{platform → cloud}/client.ts +38 -46
- package/src/{platform/platform-patch-queue.test.ts → cloud/cloud-patch-queue.test.ts} +6 -9
- package/src/{platform/platform-patch-queue.ts → cloud/cloud-patch-queue.ts} +11 -11
- package/src/{platform/managed-speech.test.ts → cloud/cloud-speech.test.ts} +19 -19
- package/src/{platform/managed-speech.ts → cloud/cloud-speech.ts} +41 -41
- package/src/{platform → cloud}/consent-cache.test.ts +5 -5
- package/src/{platform → cloud}/consent-cache.ts +8 -8
- package/src/cloud/feature-gate.ts +8 -0
- package/src/{platform → cloud}/sync-identity.test.ts +4 -4
- package/src/{platform → cloud}/sync-identity.ts +6 -6
- package/src/config/__tests__/{platform-identity.test.ts → cloud-identity.test.ts} +54 -56
- package/src/config/__tests__/{platform-rehydration.test.ts → cloud-rehydration.test.ts} +47 -80
- package/src/config/__tests__/default-profile-catalog.test.ts +12 -12
- package/src/config/__tests__/default-provider.test.ts +4 -4
- package/src/config/__tests__/deployment-context-defaults.test.ts +23 -23
- package/src/config/__tests__/{jev-managed-profile.test.ts → jev-cloud-profile.test.ts} +3 -5
- package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +2 -2
- package/src/config/__tests__/loader-last-known-good.test.ts +6 -6
- package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +2 -2
- package/src/config/__tests__/profile-materialization.test.ts +7 -7
- package/src/config/__tests__/seed-default-provider.test.ts +17 -17
- package/src/config/__tests__/substrate-twin-shadowing.test.ts +36 -26
- package/src/config/__tests__/sync-gated-profiles.test.ts +20 -20
- package/src/config/__tests__/webhook-routing.test.ts +51 -51
- package/src/config/bundled-skills/computer-use/TOOLS.json +12 -12
- package/src/config/bundled-skills/messaging/SKILL.md +8 -8
- package/src/config/bundled-skills/messaging/TOOLS.json +2 -2
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +1 -1
- package/src/config/bundled-skills/messaging/tools/shared.ts +1 -1
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +2 -2
- package/src/config/bundled-skills/settings/TOOLS.json +3 -3
- package/src/config/bundled-skills/settings/tools/shared.ts +1 -1
- package/src/config/bundled-skills/settings/tools/voice-config-update.ts +12 -12
- package/src/config/bundled-skills/skill-management/SKILL.md +3 -3
- package/src/config/bundled-skills/skill-management/TOOLS.json +8 -8
- package/src/config/bundled-skills/skill-management/tools/{delete-managed.ts → delete-cloud.ts} +2 -2
- package/src/config/bundled-skills/skill-management/tools/{scaffold-managed.ts → scaffold-cloud.ts} +2 -2
- package/src/config/call-site-defaults.ts +6 -6
- package/src/config/{platform-identity.ts → cloud-identity.ts} +39 -42
- package/src/config/cloud-rehydration.ts +35 -0
- package/src/config/{managed-speech-defaults.ts → cloud-speech-defaults.ts} +13 -13
- package/src/config/default-profile-catalog.ts +36 -38
- package/src/config/default-profile-names.ts +11 -11
- package/src/config/default-provider-resolution.ts +2 -2
- package/src/config/default-provider.ts +1 -1
- package/src/config/env-registry.ts +21 -26
- package/src/config/env.ts +33 -46
- package/src/config/feature-flag-registry.json +5 -5
- package/src/config/inference-profile-validation.ts +1 -1
- package/src/config/llm-resolver.ts +9 -10
- package/src/config/loader.ts +33 -17
- package/src/config/profile-materialization.ts +8 -8
- package/src/config/profile-text-generation.test.ts +1 -1
- package/src/config/sanitize-for-transfer.ts +1 -1
- package/src/config/schema.ts +6 -6
- package/src/config/schemas/__tests__/stt.test.ts +2 -2
- package/src/config/schemas/call-site-catalog.ts +1 -1
- package/src/config/schemas/channels.ts +8 -0
- package/src/config/schemas/{platform.ts → cloud.ts} +7 -6
- package/src/config/schemas/host-browser.ts +1 -0
- package/src/config/schemas/ingress.ts +29 -10
- package/src/config/schemas/llm.ts +36 -36
- package/src/config/schemas/memory-lifecycle.ts +11 -1
- package/src/config/schemas/services.ts +4 -4
- package/src/config/schemas/stt.ts +3 -3
- package/src/config/schemas/tts.ts +10 -5
- package/src/config/schemas/voice.ts +1 -1
- package/src/config/seed-inference-profiles.ts +19 -19
- package/src/config/skill-state.ts +2 -2
- package/src/config/skills.ts +4 -4
- package/src/config/substrate-twin-shadowing.ts +12 -17
- package/src/config/sync-gated-profiles.ts +8 -9
- package/src/config/webhook-routing.ts +19 -19
- package/src/contacts/contacts-write.ts +1 -1
- package/src/credential-execution/ces-runtime.ts +6 -6
- package/src/credential-execution/{managed-catalog.ts → cloud-catalog.ts} +24 -24
- package/src/credential-execution/prompted-credential.ts +2 -23
- package/src/credential-health/credential-health-service.ts +59 -70
- package/src/daemon/__tests__/can-spawn-subagents.test.ts +1 -1
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +4 -4
- package/src/daemon/config-watcher.ts +2 -2
- package/src/daemon/conversation-agent-loop.ts +9 -9
- package/src/daemon/conversation-error.ts +36 -36
- package/src/daemon/conversation-skill-tools.ts +7 -7
- package/src/daemon/conversation-surfaces.ts +1 -1
- package/src/daemon/conversation-tool-setup.ts +2 -2
- package/src/daemon/conversation-turn-finalize.ts +1 -1
- package/src/daemon/conversation-workspace.ts +1 -1
- package/src/daemon/conversation.ts +1 -1
- package/src/daemon/credential-transcript-scrub.ts +32 -35
- package/src/daemon/daemon-readiness.ts +1 -1
- package/src/daemon/event-loop-watchdog.ts +2 -2
- package/src/daemon/handlers/config-ingress.ts +9 -9
- package/src/daemon/handlers/config-telegram.ts +6 -6
- package/src/daemon/handlers/skills.ts +20 -20
- package/src/daemon/host-cu-proxy.ts +1 -1
- package/src/daemon/lifecycle.ts +19 -19
- package/src/daemon/parse-actual-tokens-from-error.ts +3 -3
- package/src/daemon/providers-setup.ts +6 -6
- package/src/daemon/resource-pressure-guard-lifecycle.ts +1 -1
- package/src/daemon/resource-pressure-guard.ts +6 -6
- package/src/daemon/shutdown-handlers.ts +1 -1
- package/src/daemon/sqlite-corruption-watchdog.ts +3 -3
- package/src/daemon/trust-context.ts +1 -1
- package/src/desktop/desktop-automation-lease.ts +1 -1
- package/src/desktop/desktop-browser-endpoint.ts +2 -4
- package/src/desktop/desktop-computer-use-routing.test.ts +6 -6
- package/src/desktop/desktop-stream-bridge.test.ts +4 -4
- package/src/desktop/desktop-stream-bridge.ts +1 -1
- package/src/desktop/{virtual-desktop-platform.test.ts → virtual-desktop-cloud.test.ts} +6 -6
- package/src/desktop/virtual-desktop-feature.ts +7 -7
- package/src/email/byo-email-credential.ts +1 -1
- package/src/email/registered-inbox.test.ts +16 -16
- package/src/email/registered-inbox.ts +20 -20
- package/src/heartbeat/heartbeat-service.ts +1 -1
- package/src/hooks/hook-loader.ts +2 -2
- package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
- package/src/inbound/__tests__/tunnel-probe.test.ts +8 -8
- package/src/inbound/{platform-callback-registration.ts → cloud-callback-registration.ts} +49 -60
- package/src/inbound/oauth-callback-url.ts +6 -6
- package/src/inbound/pod-webhook-claim.ts +2 -2
- package/src/inbound/public-ingress-urls.ts +3 -3
- package/src/inbound/tunnel-probe.ts +21 -15
- package/src/inbound/tunnel-webhooks-gate.ts +3 -3
- package/src/ipc/__tests__/db-readiness-ipc-gate.test.ts +1 -1
- package/src/ipc/__tests__/email-ipc.test.ts +8 -8
- package/src/ipc/gateway-client.test.ts +55 -59
- package/src/ipc/gateway-flag-listener.ts +3 -3
- package/src/ipc/routes/db-proxy.ts +1 -1
- package/src/live-voice/__tests__/live-activity-reporter.test.ts +2 -2
- package/src/live-voice/__tests__/{live-voice-managed-speech-fallback.test.ts → live-voice-cloud-speech-fallback.test.ts} +15 -15
- package/src/live-voice/__tests__/live-voice-credential-preflight.test.ts +7 -7
- package/src/live-voice/__tests__/live-voice-stt.test.ts +1 -1
- package/src/live-voice/live-activity-reporter.ts +7 -7
- package/src/live-voice/live-voice-credential-preflight.ts +6 -6
- package/src/live-voice/live-voice-session.ts +3 -3
- package/src/live-voice/live-voice-tts.ts +1 -1
- package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +4 -4
- package/src/mcp/__tests__/mcp-oauth-provider.test.ts +1 -1
- package/src/mcp/mcp-oauth-provider.ts +2 -2
- package/src/media/gemini-image-service.ts +11 -13
- package/src/media/image-credentials.ts +9 -9
- package/src/media/openai-image-service.ts +1 -1
- package/src/media/types.ts +3 -3
- package/src/messaging/providers/channel-transport.ts +1 -1
- package/src/messaging/providers/discord/transport.ts +1 -1
- package/src/messaging/providers/gmail/adapter.ts +1 -1
- package/src/messaging/providers/gmail/client.ts +4 -4
- package/src/messaging/providers/outlook/adapter.ts +1 -1
- package/src/messaging/providers/slack/adapter.ts +1 -1
- package/src/messaging/providers/slack/transport.ts +1 -1
- package/src/messaging/providers/telegram-bot/transport.ts +1 -1
- package/src/monitoring/db-integrity-check.ts +1 -1
- package/src/monitoring/db-integrity-sample.ts +2 -2
- package/src/monitoring/mount-watch.ts +1 -1
- package/src/monitoring/oom-kill-reporter.ts +1 -1
- package/src/monitoring/worker.ts +5 -5
- package/src/notifications/README.md +2 -2
- package/src/notifications/__tests__/broadcaster.test.ts +9 -9
- package/src/notifications/__tests__/completion-policy.test.ts +1 -1
- package/src/notifications/__tests__/emit-signal-pipeline-failure.test.ts +4 -4
- package/src/notifications/activity-failed-dedupe.ts +1 -1
- package/src/notifications/adapters/{platform.ts → cloud.ts} +8 -8
- package/src/notifications/broadcaster.ts +10 -10
- package/src/notifications/decision-engine.ts +1 -1
- package/src/notifications/destination-resolver.ts +1 -1
- package/src/notifications/emit-signal.ts +6 -6
- package/src/notifications/types.ts +2 -2
- package/src/oauth/__tests__/identity-verifier.test.ts +1 -1
- package/src/oauth/__tests__/{seed-providers-managed.test.ts → seed-providers-cloud.test.ts} +13 -13
- package/src/oauth/byo-connection.test.ts +2 -2
- package/src/oauth/{platform-connection.test.ts → cloud-connection.test.ts} +41 -43
- package/src/oauth/{platform-connection.ts → cloud-connection.ts} +19 -19
- package/src/oauth/connection-resolver.test.ts +59 -61
- package/src/oauth/connection-resolver.ts +22 -22
- package/src/oauth/connection.ts +1 -1
- package/src/oauth/oauth-store.ts +8 -8
- package/src/oauth/provider-serializer.ts +4 -4
- package/src/oauth/revoke.ts +1 -1
- package/src/oauth/seed-providers.ts +32 -32
- package/src/permissions/approval-provenance.ts +1 -1
- package/src/permissions/checker.test.ts +18 -16
- package/src/permissions/checker.ts +3 -3
- package/src/persistence/compaction-log-store-clickhouse.ts +3 -3
- package/src/persistence/embeddings/embedding-backend.test.ts +16 -16
- package/src/persistence/embeddings/embedding-backend.ts +13 -13
- package/src/persistence/embeddings/embedding-gemini.test.ts +9 -12
- package/src/persistence/embeddings/embedding-gemini.ts +11 -11
- package/src/persistence/embeddings/embedding-runtime-manager.ts +2 -2
- package/src/persistence/jobs-store.ts +1 -1
- package/src/persistence/lifecycle-events-store.ts +1 -1
- package/src/persistence/llm-request-log-sink-clickhouse.ts +3 -3
- package/src/persistence/llm-request-log-source-clickhouse.ts +3 -3
- package/src/persistence/migrations/224-oauth-providers-managed-service-is-paid.ts +1 -1
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.ts +2 -2
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.ts +1 -1
- package/src/persistence/migrations/351-schedule-skill-script-handoff.ts +1 -1
- package/src/persistence/migrations/361-normalize-managed-connection-rows.test.ts +3 -3
- package/src/persistence/migrations/361-normalize-managed-connection-rows.ts +7 -7
- package/src/persistence/migrations/__tests__/319-remove-legacy-managed-connections.test.ts +2 -2
- package/src/persistence/schema/oauth.ts +1 -1
- package/src/plugin-api/index.ts +4 -4
- package/src/plugin-api/model-profiles.test.ts +1 -1
- package/src/plugin-api/model-profiles.ts +1 -1
- package/src/plugin-api/transcription-session.ts +1 -1
- package/src/plugin-api/vision-support.test.ts +1 -1
- package/src/plugin-api/webhook-url.ts +12 -12
- package/src/plugins/__tests__/source-fingerprint.test.ts +1 -1
- package/src/plugins/defaults/{platform-hosted → cloud-hosted}/__tests__/reengage.test.ts +5 -6
- package/src/plugins/defaults/cloud-hosted/package.json +14 -0
- package/src/plugins/defaults/{platform-hosted → cloud-hosted}/routes/reengage.ts +3 -3
- package/src/plugins/defaults/index.ts +6 -6
- package/src/plugins/defaults/main.ts +5 -5
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +5 -5
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-prompt.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-provider-path.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +5 -0
- package/src/plugins/defaults/memory/config.ts +4 -4
- package/src/plugins/defaults/memory/memory-retrospective-constants.ts +2 -2
- package/src/plugins/defaults/memory/memory-retrospective-job.ts +7 -7
- package/src/plugins/defaults/memory/memory-retrospective-prompt.ts +5 -5
- package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +2 -2
- package/src/plugins/defaults/memory/src/__tests__/memory-v2-routes.test.ts +1 -1
- package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
- package/src/plugins/defaults/memory/substrate/__tests__/boot-maintenance.test.ts +20 -20
- package/src/plugins/defaults/memory/substrate/__tests__/cli-command-store.test.ts +1 -1
- package/src/plugins/defaults/memory/substrate/__tests__/skill-store.test.ts +3 -3
- package/src/plugins/defaults/memory/substrate/boot-maintenance.ts +17 -17
- package/src/plugins/defaults/memory/substrate/cli-command-store.ts +2 -2
- package/src/plugins/defaults/memory/substrate/prompts/consolidation.ts +1 -1
- package/src/plugins/defaults/memory/substrate/skill-store.ts +4 -4
- package/src/plugins/defaults/memory/v3/__tests__/maintain-job.test.ts +3 -3
- package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +2 -2
- package/src/plugins/defaults/memory/v3/maintain-job.ts +10 -10
- package/src/plugins/defaults/memory/v3/orchestrate.ts +3 -3
- package/src/plugins/defaults/memory/worker.ts +5 -5
- package/src/plugins/defaults/workspace/injectors.ts +2 -2
- package/src/plugins/mtime-cache.ts +1 -1
- package/src/plugins/source-versions.ts +1 -1
- package/src/plugins/types.ts +1 -1
- package/src/prompts/__tests__/system-prompt.test.ts +1 -1
- package/src/prompts/normalize-onboarding.ts +1 -1
- package/src/prompts/persona-resolver.ts +1 -1
- package/src/prompts/templates/system-sections.ts +3 -3
- package/src/providers/__tests__/cadet-connection-routing.test.ts +7 -7
- package/src/providers/__tests__/cadet-mismatch-routing.test.ts +12 -12
- package/src/providers/__tests__/connection-model-compat.test.ts +2 -2
- package/src/providers/__tests__/dispatch-connection-routing.test.ts +10 -10
- package/src/providers/__tests__/inference.test.ts +2 -2
- package/src/providers/__tests__/preflight-resolved-config.test.ts +16 -16
- package/src/providers/__tests__/retry-callsite.test.ts +1 -1
- package/src/providers/__tests__/satellite-connection-routing.test.ts +4 -4
- package/src/providers/__tests__/search-provider-catalog.test.ts +2 -2
- package/src/providers/__tests__/voice-error-copy.test.ts +3 -3
- package/src/providers/anthropic/client.ts +1 -1
- package/src/providers/cadet/client.ts +1 -1
- package/src/providers/cadet-model-routing.test.ts +19 -19
- package/src/providers/cadet-model-routing.ts +23 -23
- package/src/providers/call-site-routing.ts +10 -10
- package/src/providers/{platform-proxy → cloud-proxy}/constants.ts +11 -11
- package/src/providers/{platform-proxy → cloud-proxy}/context.ts +26 -26
- package/src/providers/connection-resolution.ts +43 -43
- package/src/providers/fallback-breaker.ts +2 -2
- package/src/providers/fetch-provider-catalog.ts +3 -3
- package/src/providers/gemini/client.ts +5 -5
- package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +3 -3
- package/src/providers/inference/__tests__/base-url-route-validation.test.ts +8 -8
- package/src/providers/inference/__tests__/base-url-security.test.ts +4 -4
- package/src/providers/inference/adapter-factory.ts +35 -35
- package/src/providers/inference/auth.ts +10 -10
- package/src/providers/inference/backfill.ts +11 -11
- package/src/providers/inference/connection-availability.ts +24 -24
- package/src/providers/inference/connections.ts +18 -20
- package/src/providers/inference/profile-probe.ts +4 -4
- package/src/providers/inference/resolve-auth.ts +8 -8
- package/src/providers/jev/ask.test.ts +1 -1
- package/src/providers/jev/ask.ts +2 -2
- package/src/providers/model-catalog.ts +8 -9
- package/src/providers/openai/__tests__/api-error-normalization.test.ts +3 -3
- package/src/providers/openai/api-error-normalization.ts +2 -2
- package/src/providers/provider-availability.ts +4 -4
- package/src/providers/provider-env-vars.ts +1 -1
- package/src/providers/provider-secret-catalog.ts +1 -1
- package/src/providers/registry.ts +20 -20
- package/src/providers/retry.ts +26 -26
- package/src/providers/routing-identity.ts +10 -10
- package/src/providers/search-provider-catalog.ts +2 -2
- package/src/providers/speech-to-text/__tests__/{cadet-managed-realtime.test.ts → cadet-cloud-realtime.test.ts} +3 -3
- package/src/providers/speech-to-text/__tests__/{cadet-managed.test.ts → cadet-cloud.test.ts} +35 -35
- package/src/providers/speech-to-text/__tests__/deepgram-flux-realtime.test.ts +1 -1
- package/src/providers/speech-to-text/__tests__/resolve.test.ts +27 -27
- package/src/providers/speech-to-text/{cadet-managed-flux-realtime.ts → cadet-cloud-flux-realtime.ts} +6 -8
- package/src/providers/speech-to-text/{cadet-managed-realtime.ts → cadet-cloud-realtime.ts} +3 -3
- package/src/providers/speech-to-text/{cadet-managed.ts → cadet-cloud.ts} +18 -20
- package/src/providers/speech-to-text/cadet-speech-relay-connection.ts +7 -7
- package/src/providers/speech-to-text/deepgram-flux-frames.ts +3 -3
- package/src/providers/speech-to-text/deepgram-flux-realtime.ts +4 -4
- package/src/providers/speech-to-text/provider-catalog.ts +3 -3
- package/src/providers/speech-to-text/resolve.ts +26 -28
- package/src/providers/together/client.ts +1 -1
- package/src/providers/types.ts +4 -4
- package/src/providers/voice-error-copy.ts +1 -1
- package/src/runtime/__tests__/desktop-stream-upgrade.test.ts +10 -10
- package/src/runtime/agent-wake.ts +1 -1
- package/src/runtime/auth/__tests__/middleware.test.ts +1 -1
- package/src/runtime/auth/middleware.ts +1 -1
- package/src/runtime/auth/scopes.ts +1 -1
- package/src/runtime/capabilities.ts +1 -1
- package/src/runtime/channel-invite-transports/discord.ts +1 -1
- package/src/runtime/channel-invite-transports/email.ts +2 -2
- package/src/runtime/channel-readiness-service.ts +15 -13
- package/src/runtime/channel-reply-session.test.ts +1 -1
- package/src/runtime/channel-reply-session.ts +1 -1
- package/src/runtime/http-server.ts +4 -4
- package/src/runtime/introduction-policy.ts +4 -4
- package/src/runtime/migrations/__tests__/origin-mode.test.ts +14 -14
- package/src/runtime/migrations/__tests__/v1-test-helpers.ts +1 -1
- package/src/runtime/migrations/__tests__/vbundle-import-version-compat.test.ts +2 -2
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +3 -4
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge.test.ts +6 -7
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +1 -1
- package/src/runtime/migrations/migration-transport.ts +3 -3
- package/src/runtime/migrations/origin-mode.ts +6 -9
- package/src/runtime/migrations/vbundle-import-policy.ts +2 -2
- package/src/runtime/migrations/vbundle-importer.ts +4 -4
- package/src/runtime/migrations/vbundle-streaming-importer.ts +6 -6
- package/src/runtime/migrations/vbundle-validator.ts +1 -1
- package/src/runtime/routes/__tests__/{platform-credits-routes.test.ts → cloud-credits-routes.test.ts} +9 -9
- package/src/runtime/routes/__tests__/{platform-invoice-routes.test.ts → cloud-invoice-routes.test.ts} +13 -13
- package/src/runtime/routes/__tests__/connection-routes-vs-cli-parity.test.ts +1 -1
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +126 -82
- package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +5 -5
- package/src/runtime/routes/__tests__/default-provider-routes.test.ts +10 -10
- package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +18 -18
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +18 -16
- package/src/runtime/routes/__tests__/inference-send-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/migration-cadet-metadata-reconcile.test.ts +5 -20
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +19 -22
- package/src/runtime/routes/__tests__/oauth-proxy-routes.test.ts +27 -27
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +5 -5
- package/src/runtime/routes/__tests__/ps-routes.test.ts +5 -3
- package/src/runtime/routes/__tests__/roadmap-routes.test.ts +15 -15
- package/src/runtime/routes/__tests__/webhook-routes.test.ts +31 -31
- package/src/runtime/routes/app-management-routes.ts +1 -1
- package/src/runtime/routes/attachment-routes.ts +1 -1
- package/src/runtime/routes/auth-routes.ts +14 -14
- package/src/runtime/routes/avatar-routes.ts +0 -14
- package/src/runtime/routes/background-wake-routes.ts +4 -4
- package/src/runtime/routes/channel-availability-routes.ts +4 -4
- package/src/runtime/routes/client-routes.ts +5 -5
- package/src/runtime/routes/cloud-credentials.ts +45 -0
- package/src/runtime/routes/{platform-routes.ts → cloud-routes.ts} +86 -119
- package/src/runtime/routes/conversation-compaction-routes.ts +1 -1
- package/src/runtime/routes/conversation-query-routes.ts +345 -667
- package/src/runtime/routes/credential-routes.ts +28 -30
- package/src/runtime/routes/default-provider-routes.ts +1 -1
- package/src/runtime/routes/desktop-setup-routes.test.ts +5 -5
- package/src/runtime/routes/desktop-setup-routes.ts +1 -1
- package/src/runtime/routes/domain-routes.ts +15 -21
- package/src/runtime/routes/email-routes.ts +13 -13
- package/src/runtime/routes/errors.ts +1 -1
- package/src/runtime/routes/gateway-status-routes.ts +1 -1
- package/src/runtime/routes/identity-routes.ts +3 -3
- package/src/runtime/routes/inbound-message-handler.ts +1 -1
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +1 -1
- package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +1 -1
- package/src/runtime/routes/index.ts +1 -1
- package/src/runtime/routes/inference-profile-availability-guard.ts +5 -5
- package/src/runtime/routes/inference-profiles-routes.ts +11 -11
- package/src/runtime/routes/inference-provider-connection-routes.ts +24 -24
- package/src/runtime/routes/ingress-status-routes.ts +1 -1
- package/src/runtime/routes/integrations/a2a.ts +2 -2
- package/src/runtime/routes/integrations/twilio.ts +21 -35
- package/src/runtime/routes/internal-telemetry-routes.ts +2 -2
- package/src/runtime/routes/live-voice-routes.test.ts +4 -4
- package/src/runtime/routes/live-voice-routes.ts +6 -6
- package/src/runtime/routes/migration-routes.ts +34 -40
- package/src/runtime/routes/oauth-commands-routes.ts +31 -31
- package/src/runtime/routes/oauth-providers.ts +5 -5
- package/src/runtime/routes/oauth-proxy-passthrough.test.ts +1 -1
- package/src/runtime/routes/oauth-proxy-passthrough.ts +8 -8
- package/src/runtime/routes/oauth-proxy-routes.ts +15 -17
- package/src/runtime/routes/oauth-request-hints.test.ts +1 -1
- package/src/runtime/routes/oauth-request-hints.ts +1 -1
- package/src/runtime/routes/plugins-routes.ts +9 -9
- package/src/runtime/routes/profiler-routes.ts +1 -1
- package/src/runtime/routes/ps-routes.ts +4 -0
- package/src/runtime/routes/roadmap-routes.ts +18 -20
- package/src/runtime/routes/secret-routes.ts +20 -61
- package/src/runtime/routes/settings-routes.ts +18 -23
- package/src/runtime/routes/telemetry-routes.ts +4 -4
- package/src/runtime/routes/tts-routes.ts +4 -4
- package/src/runtime/routes/user-route-resolution.ts +1 -1
- package/src/runtime/routes/webhook-routes.ts +18 -18
- package/src/runtime/routes/workflow-routes.ts +5 -5
- package/src/runtime/sync/resource-sync-events.ts +2 -2
- package/src/runtime/verification-outbound-actions.ts +4 -4
- package/src/schedule/integration-status.ts +6 -6
- package/src/schedule/run-script.ts +1 -1
- package/src/schedule/schedule-timezone.ts +1 -1
- package/src/schedule/worker.ts +5 -5
- package/src/security/auth-fallback-events-store.ts +1 -1
- package/src/security/oauth2.ts +4 -4
- package/src/skills/available-skills.ts +4 -4
- package/src/skills/catalog-files.ts +8 -8
- package/src/skills/catalog-install.ts +12 -12
- package/src/skills/categories-cache.ts +3 -3
- package/src/skills/clawhub.ts +1 -1
- package/src/skills/{platform-compatibility.test.ts → cloud-compatibility.test.ts} +7 -7
- package/src/skills/{platform-compatibility.ts → cloud-compatibility.ts} +2 -4
- package/src/skills/{managed-store.ts → cloud-store.ts} +21 -23
- package/src/skills/inline-command-runner.ts +1 -1
- package/src/skills/install-meta.ts +1 -1
- package/src/skills/path-classifier.ts +4 -4
- package/src/skills/skill-history.ts +4 -4
- package/src/skills/skillssh-registry.ts +1 -1
- package/src/stt/__tests__/daemon-batch-transcriber.test.ts +1 -1
- package/src/stt/daemon-batch-transcriber.ts +7 -7
- package/src/stt/types.ts +3 -3
- package/src/subagent/manager.ts +15 -15
- package/src/subagent/types.ts +1 -1
- package/src/telegram/__tests__/webhook-health.test.ts +16 -16
- package/src/telegram/webhook-health.ts +10 -10
- package/src/telemetry/__tests__/config-setting-events-store.test.ts +1 -1
- package/src/telemetry/__tests__/outbox-test-harness.ts +2 -2
- package/src/telemetry/config-setting-events-store.ts +1 -1
- package/src/telemetry/config-setting-snapshot.ts +1 -1
- package/src/telemetry/memory-corpus-size.ts +1 -1
- package/src/telemetry/memory-tier-reporter.test.ts +2 -2
- package/src/telemetry/memory-tier-reporter.ts +3 -3
- package/src/telemetry/telemetry-event-sources.test.ts +2 -2
- package/src/telemetry/telemetry-event-sources.ts +9 -9
- package/src/telemetry/telemetry-events-outbox.ts +2 -2
- package/src/telemetry/telemetry-wire-validation.test.ts +1 -1
- package/src/telemetry/telemetry-wire-validation.ts +3 -3
- package/src/telemetry/telemetry-wire.generated.ts +1 -1
- package/src/telemetry/tool-audit.ts +1 -1
- package/src/telemetry/tool-executed-events-store.test.ts +1 -1
- package/src/telemetry/trace-collection-policy.ts +4 -4
- package/src/telemetry/turn-events-store.ts +1 -1
- package/src/telemetry/turn-outcome.ts +1 -1
- package/src/telemetry/turn-trace-store.ts +2 -2
- package/src/telemetry/types.test.ts +1 -1
- package/src/telemetry/types.ts +19 -19
- package/src/telemetry/usage-telemetry-reporter.test.ts +42 -42
- package/src/telemetry/usage-telemetry-reporter.ts +17 -17
- package/src/telemetry/watchdog-direct-emit.test.ts +9 -9
- package/src/telemetry/watchdog-direct-emit.ts +10 -10
- package/src/tools/__tests__/side-effect-abort-guard.test.ts +2 -2
- package/src/tools/browser/cdp-client/factory.ts +1 -1
- package/src/tools/computer-use/target.ts +2 -2
- package/src/tools/credentials/store.ts +2 -20
- package/src/tools/network/__tests__/{managed-search-proxy.test.ts → cloud-search-proxy.test.ts} +20 -20
- package/src/tools/network/__tests__/web-search.test.ts +14 -14
- package/src/tools/network/{managed-search-proxy.ts → cloud-search-proxy.ts} +13 -13
- package/src/tools/network/web-search.ts +9 -9
- package/src/tools/permission-checker.ts +2 -2
- package/src/tools/shared/input-misuse.ts +1 -1
- package/src/tools/shared/input-repairs.ts +4 -4
- package/src/tools/skills/{delete-managed.ts → delete-cloud.ts} +4 -4
- package/src/tools/skills/find-similar-skills.test.ts +7 -7
- package/src/tools/skills/find-similar-skills.ts +15 -15
- package/src/tools/skills/load.ts +6 -6
- package/src/tools/skills/{scaffold-managed.ts → scaffold-cloud.ts} +16 -16
- package/src/tools/skills/skill-script-runner.ts +2 -2
- package/src/tools/terminal/safe-env.ts +3 -3
- package/src/tools/tool-types.ts +2 -2
- package/src/tools/types.ts +2 -2
- package/src/tools/ui-surface/surface-shape-docs.ts +2 -2
- package/src/tools/workflows/manage-workflows.ts +1 -1
- package/src/tools/workspace-tools/loader.ts +1 -1
- package/src/tts/__tests__/cadet-provider.test.ts +5 -5
- package/src/tts/provider-catalog.ts +1 -1
- package/src/tts/providers/cadet-provider.ts +23 -23
- package/src/tts/providers/cadet-tts-socket.ts +2 -2
- package/src/tts/tts-config-resolver.ts +1 -1
- package/src/tts/tts-voice-field.ts +3 -3
- package/src/usage/subagent-attribution.ts +1 -1
- package/src/util/__tests__/process-table.test.ts +47 -0
- package/src/util/canonicalize-identity.ts +1 -1
- package/src/util/cgroup-cpu.ts +5 -5
- package/src/util/cgroup-memory.ts +2 -2
- package/src/util/container-cpu-sampler.ts +4 -4
- package/src/util/disk-usage.ts +4 -4
- package/src/util/errors.ts +3 -3
- package/src/util/layout.ts +479 -0
- package/src/util/oom-priority.ts +1 -1
- package/src/util/platform.ts +12 -468
- package/src/util/process-table.ts +39 -5
- package/src/util/provider-error-patterns.ts +2 -2
- package/src/watch/__tests__/watch-retro.test.ts +2 -2
- package/src/watch/watch-retro.ts +1 -1
- package/src/watcher/__tests__/telemetry.test.ts +2 -2
- package/src/watcher/telemetry.ts +1 -1
- package/src/windows-compiled-cli.ts +1 -1
- package/src/workspace/adaptive-thinking-repair.ts +4 -4
- package/src/workspace/byok-default-profile-ensure.ts +7 -7
- package/src/workspace/git-service.ts +2 -2
- package/src/workspace/migrations/006-services-config.ts +1 -1
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
- package/src/workspace/migrations/052-seed-default-inference-profiles.ts +1 -1
- package/src/workspace/migrations/063-release-notes-dynamic-model-context.ts +1 -1
- package/src/workspace/migrations/066-seed-heartbeat-callsite-cost-default.ts +1 -1
- package/src/workspace/migrations/082-backfill-managed-profile-labels.ts +4 -4
- package/src/workspace/migrations/087-memory-router-balanced-profile.ts +3 -3
- package/src/workspace/migrations/090-memory-router-cost-optimized-profile.ts +4 -4
- package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +5 -5
- package/src/workspace/migrations/100-upgrade-quality-profile-to-fable-5.ts +4 -4
- package/src/workspace/migrations/101-upgrade-balanced-economy-to-minimax-m3.ts +4 -4
- package/src/workspace/migrations/103-upgrade-quality-profile-to-opus-4-8.ts +5 -5
- package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +1 -1
- package/src/workspace/migrations/106-drop-collect-usage-data.ts +1 -1
- package/src/workspace/migrations/108-drop-balanced-economy-profile.ts +4 -4
- package/src/workspace/migrations/109-swap-quality-profile-to-glm-5p2.ts +11 -11
- package/src/workspace/migrations/110-flip-balanced-profile-to-together.ts +6 -6
- package/src/workspace/migrations/113-swap-balanced-profile-to-glm-5p2.ts +5 -5
- package/src/workspace/migrations/114-swap-quality-profile-to-opus.ts +4 -4
- package/src/workspace/migrations/115-drop-frontier-profile.ts +5 -5
- package/src/workspace/migrations/123-swap-quality-profile-to-fable.ts +5 -5
- package/src/workspace/migrations/125-repoint-managed-connections-to-cadet.ts +3 -3
- package/src/workspace/migrations/126-strip-managed-profile-bodies.ts +2 -2
- package/src/workspace/migrations/127-backfill-default-provider.ts +6 -6
- package/src/workspace/migrations/130-speech-mode-to-provider.ts +4 -4
- package/src/workspace/migrations/131-drop-web-fetch-mode.ts +1 -1
- package/src/workspace/migrations/132-web-search-mode-to-provider.ts +6 -6
- package/src/workspace/migrations/133-collapse-provider-connections.ts +3 -3
- package/src/workspace/migrations/134-image-generation-mode-to-provider.ts +4 -4
- package/src/workspace/migrations/136-repair-stale-fireworks-kimi-model-id.ts +2 -2
- package/src/workspace/migrations/137-repair-retired-fireworks-minimax-model-id.ts +2 -2
- package/src/workspace/migrations/139-clear-renamed-cost-profile-label.ts +2 -2
- package/src/workspace/migrations/141-stt-english-default-to-multilingual.ts +4 -4
- package/src/workspace/migrations/144-convert-stranded-subscription-openai-profiles.ts +1 -1
- package/src/workspace/migrations/145-collapse-profile-bindings-to-entries.ts +2 -2
- package/src/workspace/migrations/146-repair-retired-fireworks-deepseek-flash-model-id.ts +2 -2
- package/src/workspace/migrations/148-strip-unsupported-fallback-profiles.ts +2 -2
- package/src/workspace/migrations/150-stt-flux-provider-to-model-family.ts +1 -1
- package/src/workspace/migrations/151-repair-renamed-fireworks-deepseek-pro-model-id.ts +2 -2
- package/src/workspace/migrations/152-repair-retired-fireworks-minimax-m2p7-model-id.ts +2 -2
- package/src/workspace/migrations/159-rename-colliding-jev-profile-name.ts +2 -2
- package/src/workspace/migrations/160-repair-retired-fireworks-model-ids.ts +2 -2
- package/src/workspace/migrations/161-repair-retired-fireworks-glm-5p2-model-id.ts +2 -2
- package/src/workspace/migrations/__tests__/141-stt-english-default-to-multilingual.test.ts +1 -1
- package/src/workspace/migrations/__tests__/150-stt-flux-provider-to-model-family.test.ts +1 -1
- package/src/workspace/migrations/registry.ts +6 -6
- package/src/workspace/top-level-renderer.ts +1 -1
- package/src/workspace/turn-commit.ts +2 -2
- package/src/__tests__/config-loader-platform-defaults.test.ts +0 -606
- package/src/__tests__/mock-gateway-ipc.ts +0 -260
- package/src/api/events/platform-disconnected.ts +0 -21
- package/src/api/events/show-platform-login.ts +0 -20
- package/src/config/platform-rehydration.ts +0 -60
- package/src/platform/feature-gate.ts +0 -8
- package/src/plugins/defaults/platform-hosted/package.json +0 -14
- package/src/runtime/routes/platform-managed-credentials.ts +0 -50
- /package/src/__tests__/{gateway-client-managed-outbound.test.ts → gateway-client-cloud-outbound.test.ts} +0 -0
- /package/src/__tests__/{secure-keys-managed-failover.test.ts → secure-keys-cloud-failover.test.ts} +0 -0
|
@@ -52,7 +52,7 @@ mock.module(
|
|
|
52
52
|
);
|
|
53
53
|
|
|
54
54
|
// Skill-card enqueue recorder. Snapshot + override (rather than a full module
|
|
55
|
-
// replacement) because other modules in this import graph (e.g. the
|
|
55
|
+
// replacement) because other modules in this import graph (e.g. the cloud
|
|
56
56
|
// store's capability seeding) import sibling jobs-store exports that must
|
|
57
57
|
// keep working.
|
|
58
58
|
import * as realJobsStore from "../persistence/jobs-store.js";
|
|
@@ -95,11 +95,11 @@ function catalogSeam(...entries: { id: string; source: SkillSource }[]) {
|
|
|
95
95
|
import { loadSkillCatalog } from "../config/skills.js";
|
|
96
96
|
import { readInstallMeta, writeInstallMeta } from "../skills/install-meta.js";
|
|
97
97
|
import { validateInputAgainstSchema } from "../skills/validate-input.js";
|
|
98
|
-
import {
|
|
98
|
+
import { executeScaffoldCloudSkill } from "../tools/skills/scaffold-cloud.js";
|
|
99
99
|
import type { ToolContext } from "../tools/types.js";
|
|
100
100
|
|
|
101
101
|
/**
|
|
102
|
-
*
|
|
102
|
+
* scaffold_cloud_skill requires activation hints. Tests that are not about
|
|
103
103
|
* hints pass this fixed set so the input they exercise stays the subject.
|
|
104
104
|
*/
|
|
105
105
|
const HINTS = ["user asks to run the procedure under test"];
|
|
@@ -124,7 +124,7 @@ function installMetaFor(skillId: string) {
|
|
|
124
124
|
return readInstallMeta(join(TEST_DIR, "skills", skillId));
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
/** The
|
|
127
|
+
/** The scaffold_cloud_skill entry as declared in the skill-management manifest. */
|
|
128
128
|
function readScaffoldToolEntry(): {
|
|
129
129
|
input_schema: {
|
|
130
130
|
properties: Record<string, unknown>;
|
|
@@ -141,7 +141,7 @@ function readScaffoldToolEntry(): {
|
|
|
141
141
|
),
|
|
142
142
|
);
|
|
143
143
|
return tools.tools.find(
|
|
144
|
-
(tool: { name: string }) => tool.name === "
|
|
144
|
+
(tool: { name: string }) => tool.name === "scaffold_cloud_skill",
|
|
145
145
|
);
|
|
146
146
|
}
|
|
147
147
|
|
|
@@ -158,7 +158,7 @@ afterEach(() => {
|
|
|
158
158
|
rmSync(join(TEST_DIR, "skills"), { recursive: true, force: true });
|
|
159
159
|
});
|
|
160
160
|
|
|
161
|
-
describe("
|
|
161
|
+
describe("scaffold_cloud_skill tool", () => {
|
|
162
162
|
test("keeps legacy index control as a deprecated no-op schema field", () => {
|
|
163
163
|
const scaffoldTool = readScaffoldToolEntry();
|
|
164
164
|
|
|
@@ -171,7 +171,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
171
171
|
});
|
|
172
172
|
|
|
173
173
|
test("an overwrite through the tool keeps frontmatter it does not restate", async () => {
|
|
174
|
-
await
|
|
174
|
+
await executeScaffoldCloudSkill(
|
|
175
175
|
{
|
|
176
176
|
skill_id: "edited",
|
|
177
177
|
name: "Edited",
|
|
@@ -187,7 +187,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
187
187
|
);
|
|
188
188
|
|
|
189
189
|
// The usual "change step 3" edit: body and hints, nothing else restated.
|
|
190
|
-
const result = await
|
|
190
|
+
const result = await executeScaffoldCloudSkill(
|
|
191
191
|
{
|
|
192
192
|
skill_id: "edited",
|
|
193
193
|
name: "Edited",
|
|
@@ -209,7 +209,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
209
209
|
});
|
|
210
210
|
|
|
211
211
|
test("an overwrite through the tool clears a field passed empty, and hints stay required", async () => {
|
|
212
|
-
await
|
|
212
|
+
await executeScaffoldCloudSkill(
|
|
213
213
|
{
|
|
214
214
|
skill_id: "cleared",
|
|
215
215
|
name: "Cleared",
|
|
@@ -222,7 +222,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
222
222
|
makeContext(),
|
|
223
223
|
);
|
|
224
224
|
|
|
225
|
-
const noHints = await
|
|
225
|
+
const noHints = await executeScaffoldCloudSkill(
|
|
226
226
|
{
|
|
227
227
|
skill_id: "cleared",
|
|
228
228
|
name: "Cleared",
|
|
@@ -238,7 +238,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
238
238
|
expect(noHints.isError).toBe(true);
|
|
239
239
|
expect(noHints.content).toContain("activation_hints is required");
|
|
240
240
|
|
|
241
|
-
const result = await
|
|
241
|
+
const result = await executeScaffoldCloudSkill(
|
|
242
242
|
{
|
|
243
243
|
skill_id: "cleared",
|
|
244
244
|
name: "Cleared",
|
|
@@ -266,7 +266,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
266
266
|
expect(scaffoldTool.input_schema.required).toContain("activation_hints");
|
|
267
267
|
|
|
268
268
|
const result = validateInputAgainstSchema(
|
|
269
|
-
"
|
|
269
|
+
"scaffold_cloud_skill",
|
|
270
270
|
{
|
|
271
271
|
skill_id: "s",
|
|
272
272
|
name: "N",
|
|
@@ -282,7 +282,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
282
282
|
});
|
|
283
283
|
|
|
284
284
|
test("creates a valid skill discovered from its SKILL.md directory", async () => {
|
|
285
|
-
const result = await
|
|
285
|
+
const result = await executeScaffoldCloudSkill(
|
|
286
286
|
{
|
|
287
287
|
skill_id: "test-skill",
|
|
288
288
|
name: "Test Skill",
|
|
@@ -324,7 +324,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
324
324
|
});
|
|
325
325
|
|
|
326
326
|
test("accepts legacy add_to_index input without returning index metadata", async () => {
|
|
327
|
-
const result = await
|
|
327
|
+
const result = await executeScaffoldCloudSkill(
|
|
328
328
|
{
|
|
329
329
|
skill_id: "legacy-input",
|
|
330
330
|
name: "Legacy Input",
|
|
@@ -345,7 +345,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
345
345
|
});
|
|
346
346
|
|
|
347
347
|
test("rejects duplicate unless overwrite=true", async () => {
|
|
348
|
-
await
|
|
348
|
+
await executeScaffoldCloudSkill(
|
|
349
349
|
{
|
|
350
350
|
skill_id: "dupe",
|
|
351
351
|
name: "Original",
|
|
@@ -356,7 +356,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
356
356
|
makeContext(),
|
|
357
357
|
);
|
|
358
358
|
|
|
359
|
-
const result2 = await
|
|
359
|
+
const result2 = await executeScaffoldCloudSkill(
|
|
360
360
|
{
|
|
361
361
|
skill_id: "dupe",
|
|
362
362
|
name: "Duplicate",
|
|
@@ -369,7 +369,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
369
369
|
expect(result2.isError).toBe(true);
|
|
370
370
|
expect(result2.content).toContain("already exists");
|
|
371
371
|
|
|
372
|
-
const result3 = await
|
|
372
|
+
const result3 = await executeScaffoldCloudSkill(
|
|
373
373
|
{
|
|
374
374
|
skill_id: "dupe",
|
|
375
375
|
name: "Overwritten",
|
|
@@ -398,13 +398,13 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
398
398
|
];
|
|
399
399
|
|
|
400
400
|
for (const input of cases) {
|
|
401
|
-
const result = await
|
|
401
|
+
const result = await executeScaffoldCloudSkill(input, makeContext());
|
|
402
402
|
expect(result.isError).toBe(true);
|
|
403
403
|
}
|
|
404
404
|
});
|
|
405
405
|
|
|
406
406
|
test("sanitizes embedded newlines in name/description/emoji to prevent frontmatter injection", async () => {
|
|
407
|
-
const result = await
|
|
407
|
+
const result = await executeScaffoldCloudSkill(
|
|
408
408
|
{
|
|
409
409
|
skill_id: "inject-test",
|
|
410
410
|
name: 'Test\ninjected_field: "evil"',
|
|
@@ -433,7 +433,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
433
433
|
});
|
|
434
434
|
|
|
435
435
|
test("creates a skill with includes metadata", async () => {
|
|
436
|
-
const result = await
|
|
436
|
+
const result = await executeScaffoldCloudSkill(
|
|
437
437
|
{
|
|
438
438
|
skill_id: "parent-skill",
|
|
439
439
|
name: "Parent",
|
|
@@ -454,7 +454,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
454
454
|
});
|
|
455
455
|
|
|
456
456
|
test("normalizes includes — trims and deduplicates", async () => {
|
|
457
|
-
const result = await
|
|
457
|
+
const result = await executeScaffoldCloudSkill(
|
|
458
458
|
{
|
|
459
459
|
skill_id: "norm-skill",
|
|
460
460
|
name: "Normalized",
|
|
@@ -475,7 +475,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
475
475
|
});
|
|
476
476
|
|
|
477
477
|
test("rejects includes with non-string elements", async () => {
|
|
478
|
-
const result = await
|
|
478
|
+
const result = await executeScaffoldCloudSkill(
|
|
479
479
|
{
|
|
480
480
|
skill_id: "bad-includes",
|
|
481
481
|
name: "Bad",
|
|
@@ -492,7 +492,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
492
492
|
});
|
|
493
493
|
|
|
494
494
|
test("rejects includes with empty string elements", async () => {
|
|
495
|
-
const result = await
|
|
495
|
+
const result = await executeScaffoldCloudSkill(
|
|
496
496
|
{
|
|
497
497
|
skill_id: "empty-includes",
|
|
498
498
|
name: "Empty",
|
|
@@ -509,7 +509,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
509
509
|
});
|
|
510
510
|
|
|
511
511
|
test("rejects includes with whitespace-only elements", async () => {
|
|
512
|
-
const result = await
|
|
512
|
+
const result = await executeScaffoldCloudSkill(
|
|
513
513
|
{
|
|
514
514
|
skill_id: "ws-includes",
|
|
515
515
|
name: "Whitespace",
|
|
@@ -526,7 +526,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
526
526
|
});
|
|
527
527
|
|
|
528
528
|
test("omits includes when not provided", async () => {
|
|
529
|
-
const result = await
|
|
529
|
+
const result = await executeScaffoldCloudSkill(
|
|
530
530
|
{
|
|
531
531
|
skill_id: "no-includes",
|
|
532
532
|
name: "Solo",
|
|
@@ -544,7 +544,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
544
544
|
});
|
|
545
545
|
|
|
546
546
|
test("writes activation_hints and avoid_when metadata that round-trips into the catalog", async () => {
|
|
547
|
-
const result = await
|
|
547
|
+
const result = await executeScaffoldCloudSkill(
|
|
548
548
|
{
|
|
549
549
|
skill_id: "hinted-skill",
|
|
550
550
|
name: "Hinted",
|
|
@@ -577,7 +577,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
577
577
|
});
|
|
578
578
|
|
|
579
579
|
test("normalizes activation_hints — trims and deduplicates", async () => {
|
|
580
|
-
const result = await
|
|
580
|
+
const result = await executeScaffoldCloudSkill(
|
|
581
581
|
{
|
|
582
582
|
skill_id: "norm-hints",
|
|
583
583
|
name: "Normalized Hints",
|
|
@@ -601,7 +601,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
601
601
|
// activation_hints are concatenated verbatim into capability memory text, so
|
|
602
602
|
// an embedded newline would otherwise inject a standalone line into a future
|
|
603
603
|
// turn. It must be collapsed like name/description are.
|
|
604
|
-
const result = await
|
|
604
|
+
const result = await executeScaffoldCloudSkill(
|
|
605
605
|
{
|
|
606
606
|
skill_id: "inject-hints",
|
|
607
607
|
name: "Inject Hints",
|
|
@@ -630,7 +630,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
630
630
|
["ok", ""],
|
|
631
631
|
["ok", " "],
|
|
632
632
|
]) {
|
|
633
|
-
const result = await
|
|
633
|
+
const result = await executeScaffoldCloudSkill(
|
|
634
634
|
{
|
|
635
635
|
skill_id: "bad-hints",
|
|
636
636
|
name: "Bad Hints",
|
|
@@ -646,7 +646,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
646
646
|
});
|
|
647
647
|
|
|
648
648
|
test("rejects non-array activation_hints", async () => {
|
|
649
|
-
const result = await
|
|
649
|
+
const result = await executeScaffoldCloudSkill(
|
|
650
650
|
{
|
|
651
651
|
skill_id: "bad-hints-type",
|
|
652
652
|
name: "Bad Hints Type",
|
|
@@ -661,7 +661,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
661
661
|
});
|
|
662
662
|
|
|
663
663
|
test("omits avoid-when when not provided", async () => {
|
|
664
|
-
const result = await
|
|
664
|
+
const result = await executeScaffoldCloudSkill(
|
|
665
665
|
{
|
|
666
666
|
skill_id: "no-avoid",
|
|
667
667
|
name: "No Avoid",
|
|
@@ -690,7 +690,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
690
690
|
];
|
|
691
691
|
for (const context of [makeContext(), makeRetrospectiveContext()]) {
|
|
692
692
|
for (const extra of inputs) {
|
|
693
|
-
const result = await
|
|
693
|
+
const result = await executeScaffoldCloudSkill(
|
|
694
694
|
{
|
|
695
695
|
name: "No Hints",
|
|
696
696
|
description: "No triggers",
|
|
@@ -711,7 +711,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
711
711
|
|
|
712
712
|
test("an overwrite that omits activation_hints is rejected and leaves the skill untouched", async () => {
|
|
713
713
|
const hints = ["user asks to deploy staging", "user asks to cut a release"];
|
|
714
|
-
await
|
|
714
|
+
await executeScaffoldCloudSkill(
|
|
715
715
|
{
|
|
716
716
|
skill_id: "keep-hints",
|
|
717
717
|
name: "Keep Hints",
|
|
@@ -722,7 +722,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
722
722
|
makeContext(),
|
|
723
723
|
);
|
|
724
724
|
|
|
725
|
-
const result = await
|
|
725
|
+
const result = await executeScaffoldCloudSkill(
|
|
726
726
|
{
|
|
727
727
|
skill_id: "keep-hints",
|
|
728
728
|
name: "Keep Hints",
|
|
@@ -748,7 +748,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
748
748
|
});
|
|
749
749
|
|
|
750
750
|
test("passes category through to the written skill, lowercased and trimmed", async () => {
|
|
751
|
-
const result = await
|
|
751
|
+
const result = await executeScaffoldCloudSkill(
|
|
752
752
|
{
|
|
753
753
|
skill_id: "categorized",
|
|
754
754
|
name: "Categorized",
|
|
@@ -772,7 +772,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
772
772
|
});
|
|
773
773
|
|
|
774
774
|
test("rejects non-string category", async () => {
|
|
775
|
-
const result = await
|
|
775
|
+
const result = await executeScaffoldCloudSkill(
|
|
776
776
|
{
|
|
777
777
|
skill_id: "bad-category",
|
|
778
778
|
name: "Bad Category",
|
|
@@ -789,7 +789,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
789
789
|
});
|
|
790
790
|
|
|
791
791
|
test("omits category when not provided", async () => {
|
|
792
|
-
const result = await
|
|
792
|
+
const result = await executeScaffoldCloudSkill(
|
|
793
793
|
{
|
|
794
794
|
skill_id: "no-category",
|
|
795
795
|
name: "No Category",
|
|
@@ -809,7 +809,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
809
809
|
});
|
|
810
810
|
|
|
811
811
|
test("rejects invalid skill_id", async () => {
|
|
812
|
-
const result = await
|
|
812
|
+
const result = await executeScaffoldCloudSkill(
|
|
813
813
|
{
|
|
814
814
|
skill_id: "../escape",
|
|
815
815
|
name: "Bad",
|
|
@@ -825,7 +825,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
825
825
|
});
|
|
826
826
|
|
|
827
827
|
test("writes companion files under the skill dir", async () => {
|
|
828
|
-
const result = await
|
|
828
|
+
const result = await executeScaffoldCloudSkill(
|
|
829
829
|
{
|
|
830
830
|
skill_id: "files-skill",
|
|
831
831
|
name: "Files Skill",
|
|
@@ -859,7 +859,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
859
859
|
const sourcePath = join(TEST_DIR, "proven-script.py");
|
|
860
860
|
writeFileSync(sourcePath, "print('ok')\n", "utf-8");
|
|
861
861
|
|
|
862
|
-
const result = await
|
|
862
|
+
const result = await executeScaffoldCloudSkill(
|
|
863
863
|
{
|
|
864
864
|
skill_id: "copy-from-skill",
|
|
865
865
|
name: "Copy From Skill",
|
|
@@ -890,7 +890,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
890
890
|
const sourcePath = join(TEST_DIR, "dupe.py");
|
|
891
891
|
writeFileSync(sourcePath, "x", "utf-8");
|
|
892
892
|
|
|
893
|
-
const result = await
|
|
893
|
+
const result = await executeScaffoldCloudSkill(
|
|
894
894
|
{
|
|
895
895
|
skill_id: "copy-from-both",
|
|
896
896
|
name: "Both",
|
|
@@ -910,7 +910,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
910
910
|
});
|
|
911
911
|
|
|
912
912
|
test("rejects a non-string copy_from", async () => {
|
|
913
|
-
const result = await
|
|
913
|
+
const result = await executeScaffoldCloudSkill(
|
|
914
914
|
{
|
|
915
915
|
skill_id: "copy-from-type",
|
|
916
916
|
name: "Bad Type",
|
|
@@ -927,7 +927,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
927
927
|
});
|
|
928
928
|
|
|
929
929
|
test("rejects companion file path traversal with no partial writes", async () => {
|
|
930
|
-
const result = await
|
|
930
|
+
const result = await executeScaffoldCloudSkill(
|
|
931
931
|
{
|
|
932
932
|
skill_id: "files-traversal",
|
|
933
933
|
name: "Traversal",
|
|
@@ -959,7 +959,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
959
959
|
];
|
|
960
960
|
|
|
961
961
|
for (const files of cases) {
|
|
962
|
-
const result = await
|
|
962
|
+
const result = await executeScaffoldCloudSkill(
|
|
963
963
|
{
|
|
964
964
|
skill_id: "bad-files",
|
|
965
965
|
name: "Bad",
|
|
@@ -975,7 +975,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
975
975
|
});
|
|
976
976
|
|
|
977
977
|
test("e2e: scaffold child then parent with includes, verify file discovery", async () => {
|
|
978
|
-
const childResult = await
|
|
978
|
+
const childResult = await executeScaffoldCloudSkill(
|
|
979
979
|
{
|
|
980
980
|
skill_id: "e2e-child",
|
|
981
981
|
name: "E2E Child",
|
|
@@ -987,7 +987,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
987
987
|
);
|
|
988
988
|
expect(childResult.isError).toBe(false);
|
|
989
989
|
|
|
990
|
-
const parentResult = await
|
|
990
|
+
const parentResult = await executeScaffoldCloudSkill(
|
|
991
991
|
{
|
|
992
992
|
skill_id: "e2e-parent",
|
|
993
993
|
name: "E2E Parent",
|
|
@@ -1018,7 +1018,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1018
1018
|
// ── Authorship tagging + user-skill protection ────────────────────────────
|
|
1019
1019
|
|
|
1020
1020
|
test('tags author "assistant" under the retrospective origin', async () => {
|
|
1021
|
-
const result = await
|
|
1021
|
+
const result = await executeScaffoldCloudSkill(
|
|
1022
1022
|
{
|
|
1023
1023
|
skill_id: "retro-skill",
|
|
1024
1024
|
name: "Retro Skill",
|
|
@@ -1043,7 +1043,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1043
1043
|
});
|
|
1044
1044
|
|
|
1045
1045
|
test('tags author "user" for a normal (non-retrospective) scaffold', async () => {
|
|
1046
|
-
const result = await
|
|
1046
|
+
const result = await executeScaffoldCloudSkill(
|
|
1047
1047
|
{
|
|
1048
1048
|
skill_id: "user-skill",
|
|
1049
1049
|
name: "User Skill",
|
|
@@ -1060,7 +1060,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1060
1060
|
|
|
1061
1061
|
test("retrospective refuses to overwrite an author:user skill", async () => {
|
|
1062
1062
|
// A user authors the skill first.
|
|
1063
|
-
await
|
|
1063
|
+
await executeScaffoldCloudSkill(
|
|
1064
1064
|
{
|
|
1065
1065
|
skill_id: "protected",
|
|
1066
1066
|
name: "Protected",
|
|
@@ -1073,7 +1073,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1073
1073
|
expect(installMetaFor("protected")?.author).toBe("user");
|
|
1074
1074
|
|
|
1075
1075
|
// The retrospective tries to overwrite it — refused.
|
|
1076
|
-
const result = await
|
|
1076
|
+
const result = await executeScaffoldCloudSkill(
|
|
1077
1077
|
{
|
|
1078
1078
|
skill_id: "protected",
|
|
1079
1079
|
name: "Protected",
|
|
@@ -1094,7 +1094,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1094
1094
|
});
|
|
1095
1095
|
|
|
1096
1096
|
test("retrospective refuses to write companion files into an author:user skill", async () => {
|
|
1097
|
-
await
|
|
1097
|
+
await executeScaffoldCloudSkill(
|
|
1098
1098
|
{
|
|
1099
1099
|
skill_id: "protected-files",
|
|
1100
1100
|
name: "Protected Files",
|
|
@@ -1105,7 +1105,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1105
1105
|
makeContext(),
|
|
1106
1106
|
);
|
|
1107
1107
|
|
|
1108
|
-
const result = await
|
|
1108
|
+
const result = await executeScaffoldCloudSkill(
|
|
1109
1109
|
{
|
|
1110
1110
|
skill_id: "protected-files",
|
|
1111
1111
|
name: "Protected Files",
|
|
@@ -1130,7 +1130,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1130
1130
|
test("retrospective refuses to overwrite an untagged (no-author) skill", async () => {
|
|
1131
1131
|
// Simulate a skill created via a path that does not tag author (e.g. the
|
|
1132
1132
|
// createSkill API route): install-meta with no author field.
|
|
1133
|
-
await
|
|
1133
|
+
await executeScaffoldCloudSkill(
|
|
1134
1134
|
{
|
|
1135
1135
|
skill_id: "untagged",
|
|
1136
1136
|
name: "Untagged",
|
|
@@ -1148,7 +1148,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1148
1148
|
expect(installMetaFor("untagged")?.author).toBeUndefined();
|
|
1149
1149
|
|
|
1150
1150
|
// The retrospective must not overwrite a skill it does not own.
|
|
1151
|
-
const result = await
|
|
1151
|
+
const result = await executeScaffoldCloudSkill(
|
|
1152
1152
|
{
|
|
1153
1153
|
skill_id: "untagged",
|
|
1154
1154
|
name: "Untagged",
|
|
@@ -1169,7 +1169,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1169
1169
|
|
|
1170
1170
|
test("retrospective MAY overwrite its own author:assistant skill", async () => {
|
|
1171
1171
|
// The retrospective authors a skill, then refines it later.
|
|
1172
|
-
await
|
|
1172
|
+
await executeScaffoldCloudSkill(
|
|
1173
1173
|
{
|
|
1174
1174
|
skill_id: "assistant-owned",
|
|
1175
1175
|
name: "Assistant Owned",
|
|
@@ -1181,7 +1181,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1181
1181
|
);
|
|
1182
1182
|
expect(installMetaFor("assistant-owned")?.author).toBe("assistant");
|
|
1183
1183
|
|
|
1184
|
-
const result = await
|
|
1184
|
+
const result = await executeScaffoldCloudSkill(
|
|
1185
1185
|
{
|
|
1186
1186
|
skill_id: "assistant-owned",
|
|
1187
1187
|
name: "Assistant Owned",
|
|
@@ -1221,7 +1221,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1221
1221
|
// ── Conversation lineage (retrospective-authored skills) ───────────────────
|
|
1222
1222
|
|
|
1223
1223
|
test("retrospective scaffold records source + retrospective conversation lineage", async () => {
|
|
1224
|
-
const result = await
|
|
1224
|
+
const result = await executeScaffoldCloudSkill(
|
|
1225
1225
|
{
|
|
1226
1226
|
skill_id: "lineage-skill",
|
|
1227
1227
|
name: "Lineage Skill",
|
|
@@ -1247,7 +1247,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1247
1247
|
|
|
1248
1248
|
test("user scaffold records no conversation lineage and never looks up the conversation", async () => {
|
|
1249
1249
|
const lookup = mock(() => ({ forkParentConversationId: "source-conv" }));
|
|
1250
|
-
const result = await
|
|
1250
|
+
const result = await executeScaffoldCloudSkill(
|
|
1251
1251
|
{
|
|
1252
1252
|
skill_id: "user-no-lineage",
|
|
1253
1253
|
name: "User No Lineage",
|
|
@@ -1279,7 +1279,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1279
1279
|
];
|
|
1280
1280
|
|
|
1281
1281
|
for (const { skillId, lookup } of cases) {
|
|
1282
|
-
const result = await
|
|
1282
|
+
const result = await executeScaffoldCloudSkill(
|
|
1283
1283
|
{
|
|
1284
1284
|
skill_id: skillId,
|
|
1285
1285
|
name: "Orphan Lineage",
|
|
@@ -1301,7 +1301,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1301
1301
|
});
|
|
1302
1302
|
|
|
1303
1303
|
test("a throwing conversation lookup never fails the retrospective scaffold", async () => {
|
|
1304
|
-
const result = await
|
|
1304
|
+
const result = await executeScaffoldCloudSkill(
|
|
1305
1305
|
{
|
|
1306
1306
|
skill_id: "lookup-throws",
|
|
1307
1307
|
name: "Lookup Throws",
|
|
@@ -1330,7 +1330,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1330
1330
|
// Some runtime callers construct a partial context without a conversation.
|
|
1331
1331
|
delete (context as { conversationId?: string }).conversationId;
|
|
1332
1332
|
|
|
1333
|
-
const result = await
|
|
1333
|
+
const result = await executeScaffoldCloudSkill(
|
|
1334
1334
|
{
|
|
1335
1335
|
skill_id: "no-conversation",
|
|
1336
1336
|
name: "No Conversation",
|
|
@@ -1353,7 +1353,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1353
1353
|
// ── Ownership backstop: never shadow/overwrite a non-managed skill ─────────
|
|
1354
1354
|
|
|
1355
1355
|
test("retrospective refuses to CREATE a skill whose id is owned by a bundled skill", async () => {
|
|
1356
|
-
const result = await
|
|
1356
|
+
const result = await executeScaffoldCloudSkill(
|
|
1357
1357
|
{
|
|
1358
1358
|
skill_id: "deep-research",
|
|
1359
1359
|
name: "Deep Research",
|
|
@@ -1375,7 +1375,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1375
1375
|
});
|
|
1376
1376
|
|
|
1377
1377
|
test("retrospective refuses to OVERWRITE a skill whose id is owned by a bundled skill", async () => {
|
|
1378
|
-
const result = await
|
|
1378
|
+
const result = await executeScaffoldCloudSkill(
|
|
1379
1379
|
{
|
|
1380
1380
|
skill_id: "blitz",
|
|
1381
1381
|
name: "Blitz",
|
|
@@ -1395,7 +1395,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1395
1395
|
|
|
1396
1396
|
test("retrospective refuses an id owned by a plugin or workspace skill", async () => {
|
|
1397
1397
|
for (const source of ["plugin", "workspace"] as const) {
|
|
1398
|
-
const result = await
|
|
1398
|
+
const result = await executeScaffoldCloudSkill(
|
|
1399
1399
|
{
|
|
1400
1400
|
skill_id: "covered-proc",
|
|
1401
1401
|
name: "Covered",
|
|
@@ -1412,10 +1412,10 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1412
1412
|
});
|
|
1413
1413
|
|
|
1414
1414
|
test("retrospective fails closed on an existing managed skill with missing install-meta", async () => {
|
|
1415
|
-
// Seed a
|
|
1415
|
+
// Seed a cloud skill on disk, then strip its install metadata so author
|
|
1416
1416
|
// is unverifiable. The seam keeps it managed (no non-managed collision), so
|
|
1417
1417
|
// the disk fail-closed branch is what must refuse.
|
|
1418
|
-
await
|
|
1418
|
+
await executeScaffoldCloudSkill(
|
|
1419
1419
|
{
|
|
1420
1420
|
skill_id: "no-meta",
|
|
1421
1421
|
name: "No Meta",
|
|
@@ -1429,7 +1429,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1429
1429
|
rmSync(join(dir, "install-meta.json"));
|
|
1430
1430
|
expect(installMetaFor("no-meta")).toBeNull();
|
|
1431
1431
|
|
|
1432
|
-
const result = await
|
|
1432
|
+
const result = await executeScaffoldCloudSkill(
|
|
1433
1433
|
{
|
|
1434
1434
|
skill_id: "no-meta",
|
|
1435
1435
|
name: "No Meta",
|
|
@@ -1450,7 +1450,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1450
1450
|
});
|
|
1451
1451
|
|
|
1452
1452
|
test("retrospective fails closed on an existing managed skill with corrupt install-meta", async () => {
|
|
1453
|
-
await
|
|
1453
|
+
await executeScaffoldCloudSkill(
|
|
1454
1454
|
{
|
|
1455
1455
|
skill_id: "corrupt-meta",
|
|
1456
1456
|
name: "Corrupt Meta",
|
|
@@ -1463,7 +1463,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1463
1463
|
const dir = join(TEST_DIR, "skills", "corrupt-meta");
|
|
1464
1464
|
writeFileSync(join(dir, "install-meta.json"), "{not valid json");
|
|
1465
1465
|
|
|
1466
|
-
const result = await
|
|
1466
|
+
const result = await executeScaffoldCloudSkill(
|
|
1467
1467
|
{
|
|
1468
1468
|
skill_id: "corrupt-meta",
|
|
1469
1469
|
name: "Corrupt Meta",
|
|
@@ -1485,7 +1485,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1485
1485
|
|
|
1486
1486
|
test("retrospective MAY create a fresh skill whose id is free of any catalog collision", async () => {
|
|
1487
1487
|
// Catalog holds only an unrelated bundled skill — no collision on the id.
|
|
1488
|
-
const result = await
|
|
1488
|
+
const result = await executeScaffoldCloudSkill(
|
|
1489
1489
|
{
|
|
1490
1490
|
skill_id: "fresh-proc",
|
|
1491
1491
|
name: "Fresh Proc",
|
|
@@ -1517,7 +1517,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1517
1517
|
}
|
|
1518
1518
|
|
|
1519
1519
|
test("retrospective CREATE enqueues one skill_card_insert job with the normalized payload and resolved source id", async () => {
|
|
1520
|
-
const result = await
|
|
1520
|
+
const result = await executeScaffoldCloudSkill(
|
|
1521
1521
|
{
|
|
1522
1522
|
skill_id: " card-skill ",
|
|
1523
1523
|
name: " Card\nSkill ",
|
|
@@ -1550,7 +1550,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1550
1550
|
});
|
|
1551
1551
|
|
|
1552
1552
|
test("a whitespace-only emoji is omitted from the card payload", async () => {
|
|
1553
|
-
const result = await
|
|
1553
|
+
const result = await executeScaffoldCloudSkill(
|
|
1554
1554
|
{
|
|
1555
1555
|
skill_id: "no-emoji-card",
|
|
1556
1556
|
name: "No Emoji",
|
|
@@ -1593,7 +1593,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1593
1593
|
];
|
|
1594
1594
|
|
|
1595
1595
|
for (const { skillId, lookup } of cases) {
|
|
1596
|
-
const result = await
|
|
1596
|
+
const result = await executeScaffoldCloudSkill(
|
|
1597
1597
|
{
|
|
1598
1598
|
skill_id: skillId,
|
|
1599
1599
|
name: "No Card",
|
|
@@ -1615,7 +1615,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1615
1615
|
|
|
1616
1616
|
test("retrospective overwrite of an EXISTING skill (a refinement) does not enqueue a card", async () => {
|
|
1617
1617
|
// First pass: genuine create — enqueues.
|
|
1618
|
-
await
|
|
1618
|
+
await executeScaffoldCloudSkill(
|
|
1619
1619
|
{
|
|
1620
1620
|
skill_id: "refined-skill",
|
|
1621
1621
|
name: "Refined Skill",
|
|
@@ -1630,7 +1630,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1630
1630
|
skillCardJobUpserts = [];
|
|
1631
1631
|
|
|
1632
1632
|
// Second pass: overwrite of the pre-existing skill — a refinement, no card.
|
|
1633
|
-
const result = await
|
|
1633
|
+
const result = await executeScaffoldCloudSkill(
|
|
1634
1634
|
{
|
|
1635
1635
|
skill_id: "refined-skill",
|
|
1636
1636
|
name: "Refined Skill",
|
|
@@ -1649,7 +1649,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1649
1649
|
});
|
|
1650
1650
|
|
|
1651
1651
|
test("retrospective overwrite:true on a skill that did NOT previously exist is still a create and enqueues", async () => {
|
|
1652
|
-
const result = await
|
|
1652
|
+
const result = await executeScaffoldCloudSkill(
|
|
1653
1653
|
{
|
|
1654
1654
|
skill_id: "overwrite-fresh",
|
|
1655
1655
|
name: "Overwrite Fresh",
|
|
@@ -1674,7 +1674,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1674
1674
|
});
|
|
1675
1675
|
|
|
1676
1676
|
test("user-origin create never enqueues a card, even with resolvable lineage", async () => {
|
|
1677
|
-
const result = await
|
|
1677
|
+
const result = await executeScaffoldCloudSkill(
|
|
1678
1678
|
{
|
|
1679
1679
|
skill_id: "user-no-card",
|
|
1680
1680
|
name: "User No Card",
|
|
@@ -1693,7 +1693,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1693
1693
|
test("a throwing enqueue never fails the scaffold — the skill is already created", async () => {
|
|
1694
1694
|
skillCardUpsertThrows = true;
|
|
1695
1695
|
|
|
1696
|
-
const result = await
|
|
1696
|
+
const result = await executeScaffoldCloudSkill(
|
|
1697
1697
|
{
|
|
1698
1698
|
skill_id: "enqueue-throws",
|
|
1699
1699
|
name: "Enqueue Throws",
|
|
@@ -1714,7 +1714,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1714
1714
|
|
|
1715
1715
|
test("two creates in the same run enqueue one upsert per skill under the same run id (merge happens in the jobs store)", async () => {
|
|
1716
1716
|
for (const skillId of ["run-skill-a", "run-skill-b"]) {
|
|
1717
|
-
const result = await
|
|
1717
|
+
const result = await executeScaffoldCloudSkill(
|
|
1718
1718
|
{
|
|
1719
1719
|
skill_id: skillId,
|
|
1720
1720
|
name: `Skill ${skillId}`,
|
|
@@ -1753,7 +1753,7 @@ describe("scaffold_managed_skill tool", () => {
|
|
|
1753
1753
|
describe("background skill update notification", () => {
|
|
1754
1754
|
/** Seed an assistant-authored skill the background pass may overwrite. */
|
|
1755
1755
|
async function seedAssistantSkill(id: string, body: string): Promise<void> {
|
|
1756
|
-
await
|
|
1756
|
+
await executeScaffoldCloudSkill(
|
|
1757
1757
|
{
|
|
1758
1758
|
skill_id: id,
|
|
1759
1759
|
name: "Weekly Report Export",
|
|
@@ -1784,7 +1784,7 @@ describe("background skill update notification", () => {
|
|
|
1784
1784
|
test("a background overwrite of an existing skill records a receipt entry keyed to the tool call", async () => {
|
|
1785
1785
|
await seedAssistantSkill("weekly-export", "Old body.");
|
|
1786
1786
|
|
|
1787
|
-
const result = await
|
|
1787
|
+
const result = await executeScaffoldCloudSkill(
|
|
1788
1788
|
{
|
|
1789
1789
|
skill_id: "weekly-export",
|
|
1790
1790
|
name: "Weekly Report Export",
|
|
@@ -1823,7 +1823,7 @@ describe("background skill update notification", () => {
|
|
|
1823
1823
|
await seedAssistantSkill("weekly-export", "Old body.");
|
|
1824
1824
|
|
|
1825
1825
|
for (const body of ["1. Refined steps.", "1. Refined again."]) {
|
|
1826
|
-
await
|
|
1826
|
+
await executeScaffoldCloudSkill(
|
|
1827
1827
|
{
|
|
1828
1828
|
skill_id: "weekly-export",
|
|
1829
1829
|
name: "Weekly Report Export",
|
|
@@ -1848,7 +1848,7 @@ describe("background skill update notification", () => {
|
|
|
1848
1848
|
await seedAssistantSkill("weekly-export", "Old body.");
|
|
1849
1849
|
recordUpdateFails = true;
|
|
1850
1850
|
|
|
1851
|
-
const result = await
|
|
1851
|
+
const result = await executeScaffoldCloudSkill(
|
|
1852
1852
|
{
|
|
1853
1853
|
skill_id: "weekly-export",
|
|
1854
1854
|
name: "Weekly Report Export",
|
|
@@ -1879,7 +1879,7 @@ describe("background skill update notification", () => {
|
|
|
1879
1879
|
test("the entry body is the pass's change_summary, so the receipt says what changed", async () => {
|
|
1880
1880
|
await seedAssistantSkill("weekly-export", "Old body.");
|
|
1881
1881
|
|
|
1882
|
-
const result = await
|
|
1882
|
+
const result = await executeScaffoldCloudSkill(
|
|
1883
1883
|
{
|
|
1884
1884
|
skill_id: "weekly-export",
|
|
1885
1885
|
name: "Weekly Report Export",
|
|
@@ -1910,7 +1910,7 @@ describe("background skill update notification", () => {
|
|
|
1910
1910
|
// Whitespace-only reads as missing, not as an empty notice.
|
|
1911
1911
|
{ change_summary: " \n " },
|
|
1912
1912
|
]) {
|
|
1913
|
-
const result = await
|
|
1913
|
+
const result = await executeScaffoldCloudSkill(
|
|
1914
1914
|
{
|
|
1915
1915
|
skill_id: "weekly-export",
|
|
1916
1916
|
name: "Weekly Report Export",
|
|
@@ -1938,7 +1938,7 @@ describe("background skill update notification", () => {
|
|
|
1938
1938
|
test("a background call on an existing skill without overwrite hears the overwrite error, not the summary requirement", async () => {
|
|
1939
1939
|
await seedAssistantSkill("weekly-export", "Old body.");
|
|
1940
1940
|
|
|
1941
|
-
const result = await
|
|
1941
|
+
const result = await executeScaffoldCloudSkill(
|
|
1942
1942
|
{
|
|
1943
1943
|
skill_id: "weekly-export",
|
|
1944
1944
|
name: "Weekly Report Export",
|
|
@@ -1959,7 +1959,7 @@ describe("background skill update notification", () => {
|
|
|
1959
1959
|
});
|
|
1960
1960
|
|
|
1961
1961
|
test("the ownership backstop speaks before the change_summary requirement", async () => {
|
|
1962
|
-
await
|
|
1962
|
+
await executeScaffoldCloudSkill(
|
|
1963
1963
|
{
|
|
1964
1964
|
skill_id: "user-owned",
|
|
1965
1965
|
name: "User Owned",
|
|
@@ -1970,7 +1970,7 @@ describe("background skill update notification", () => {
|
|
|
1970
1970
|
makeContext(),
|
|
1971
1971
|
);
|
|
1972
1972
|
|
|
1973
|
-
const result = await
|
|
1973
|
+
const result = await executeScaffoldCloudSkill(
|
|
1974
1974
|
{
|
|
1975
1975
|
skill_id: "user-owned",
|
|
1976
1976
|
name: "User Owned",
|
|
@@ -1988,7 +1988,7 @@ describe("background skill update notification", () => {
|
|
|
1988
1988
|
});
|
|
1989
1989
|
|
|
1990
1990
|
test("a user-directed overwrite needs no change_summary: it records no entry", async () => {
|
|
1991
|
-
await
|
|
1991
|
+
await executeScaffoldCloudSkill(
|
|
1992
1992
|
{
|
|
1993
1993
|
skill_id: "user-skill",
|
|
1994
1994
|
name: "User Skill",
|
|
@@ -1999,7 +1999,7 @@ describe("background skill update notification", () => {
|
|
|
1999
1999
|
makeContext(),
|
|
2000
2000
|
);
|
|
2001
2001
|
|
|
2002
|
-
const result = await
|
|
2002
|
+
const result = await executeScaffoldCloudSkill(
|
|
2003
2003
|
{
|
|
2004
2004
|
skill_id: "user-skill",
|
|
2005
2005
|
name: "User Skill",
|
|
@@ -2017,7 +2017,7 @@ describe("background skill update notification", () => {
|
|
|
2017
2017
|
test("change_summary is sanitized like any notification body", async () => {
|
|
2018
2018
|
await seedAssistantSkill("weekly-export", "Old body.");
|
|
2019
2019
|
|
|
2020
|
-
await
|
|
2020
|
+
await executeScaffoldCloudSkill(
|
|
2021
2021
|
{
|
|
2022
2022
|
skill_id: "weekly-export",
|
|
2023
2023
|
name: "Weekly Report Export",
|
|
@@ -2046,7 +2046,7 @@ describe("background skill update notification", () => {
|
|
|
2046
2046
|
test("a non-string change_summary is a self-correcting error", async () => {
|
|
2047
2047
|
await seedAssistantSkill("weekly-export", "Old body.");
|
|
2048
2048
|
|
|
2049
|
-
const result = await
|
|
2049
|
+
const result = await executeScaffoldCloudSkill(
|
|
2050
2050
|
{
|
|
2051
2051
|
skill_id: "weekly-export",
|
|
2052
2052
|
name: "Weekly Report Export",
|
|
@@ -2079,7 +2079,7 @@ describe("background skill update notification", () => {
|
|
|
2079
2079
|
expect(scaffoldTool.input_schema.required).not.toContain("change_summary");
|
|
2080
2080
|
|
|
2081
2081
|
const result = validateInputAgainstSchema(
|
|
2082
|
-
"
|
|
2082
|
+
"scaffold_cloud_skill",
|
|
2083
2083
|
{
|
|
2084
2084
|
skill_id: "s",
|
|
2085
2085
|
name: "N",
|
|
@@ -2097,7 +2097,7 @@ describe("background skill update notification", () => {
|
|
|
2097
2097
|
test("an entry whose fork lineage does not resolve carries no source, never the run", async () => {
|
|
2098
2098
|
await seedAssistantSkill("weekly-export", "Old body.");
|
|
2099
2099
|
|
|
2100
|
-
await
|
|
2100
|
+
await executeScaffoldCloudSkill(
|
|
2101
2101
|
{
|
|
2102
2102
|
skill_id: "weekly-export",
|
|
2103
2103
|
name: "Weekly Report Export",
|
|
@@ -2118,7 +2118,7 @@ describe("background skill update notification", () => {
|
|
|
2118
2118
|
});
|
|
2119
2119
|
|
|
2120
2120
|
test("a background CREATE gets the skill card instead, with no duplicate signal", async () => {
|
|
2121
|
-
const result = await
|
|
2121
|
+
const result = await executeScaffoldCloudSkill(
|
|
2122
2122
|
{
|
|
2123
2123
|
skill_id: "brand-new-skill",
|
|
2124
2124
|
name: "Brand New Skill",
|
|
@@ -2136,7 +2136,7 @@ describe("background skill update notification", () => {
|
|
|
2136
2136
|
});
|
|
2137
2137
|
|
|
2138
2138
|
test("a user-directed overwrite records no receipt entry: it is not unattended work", async () => {
|
|
2139
|
-
await
|
|
2139
|
+
await executeScaffoldCloudSkill(
|
|
2140
2140
|
{
|
|
2141
2141
|
skill_id: "user-skill",
|
|
2142
2142
|
name: "User Skill",
|
|
@@ -2148,7 +2148,7 @@ describe("background skill update notification", () => {
|
|
|
2148
2148
|
);
|
|
2149
2149
|
recordedUpdates = [];
|
|
2150
2150
|
|
|
2151
|
-
await
|
|
2151
|
+
await executeScaffoldCloudSkill(
|
|
2152
2152
|
{
|
|
2153
2153
|
skill_id: "user-skill",
|
|
2154
2154
|
name: "User Skill",
|