@mycadet/assistant 0.12.7 → 0.12.8
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 +1 -1
- 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/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 +1 -1
- 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 +1 -1
- 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 +6815 -794
- 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} +60 -60
- 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-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 +27 -41
- 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 +9 -8
- 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 +2 -2
- package/src/__tests__/mcp-client-auth.test.ts +2 -2
- package/src/__tests__/mcp-tool-annotations-risk.test.ts +2 -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-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 +12 -12
- package/src/__tests__/skills-files-catalog-fallback.test.ts +9 -9
- 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-platform-login.ts → show-cloud-login.ts} +3 -5
- 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__/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/config.ts +1 -1
- 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__/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 +23 -21
- 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 +1 -12
- package/src/config/schemas/llm.ts +45 -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/sync-gated-profiles.ts +8 -8
- 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 +6 -18
- package/src/credential-health/credential-health-service.ts +61 -76
- 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 +21 -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/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 +26 -25
- 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} +83 -116
- package/src/runtime/routes/conversation-compaction-routes.ts +1 -1
- package/src/runtime/routes/conversation-query-routes.ts +82 -282
- 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 +29 -55
- 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 +6 -15
- 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/oom-priority.ts +1 -1
- package/src/util/platform.ts +5 -5
- 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 +4 -4
- 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/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
|
@@ -17,11 +17,11 @@ const TEST_DIR = process.env.CADET_WORKSPACE_DIR!;
|
|
|
17
17
|
import { loadSkillCatalog } from "../config/skills.js";
|
|
18
18
|
import {
|
|
19
19
|
buildSkillMarkdown,
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
createCloudSkill,
|
|
21
|
+
deleteCloudSkill,
|
|
22
|
+
validateCloudSkillId,
|
|
22
23
|
validateCompanionPath,
|
|
23
|
-
|
|
24
|
-
} from "../skills/managed-store.js";
|
|
24
|
+
} from "../skills/cloud-store.js";
|
|
25
25
|
|
|
26
26
|
beforeEach(() => {
|
|
27
27
|
mkdirSync(join(TEST_DIR, "skills"), { recursive: true });
|
|
@@ -48,31 +48,31 @@ function readInstallMetaFile(skillId: string): TestInstallMeta {
|
|
|
48
48
|
);
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
describe("
|
|
51
|
+
describe("validateCloudSkillId", () => {
|
|
52
52
|
test("accepts valid slug IDs", () => {
|
|
53
|
-
expect(
|
|
54
|
-
expect(
|
|
55
|
-
expect(
|
|
56
|
-
expect(
|
|
53
|
+
expect(validateCloudSkillId("my-skill")).toBeNull();
|
|
54
|
+
expect(validateCloudSkillId("skill123")).toBeNull();
|
|
55
|
+
expect(validateCloudSkillId("my.skill")).toBeNull();
|
|
56
|
+
expect(validateCloudSkillId("my_skill")).toBeNull();
|
|
57
57
|
});
|
|
58
58
|
|
|
59
59
|
test("rejects empty string", () => {
|
|
60
|
-
expect(
|
|
60
|
+
expect(validateCloudSkillId("")).not.toBeNull();
|
|
61
61
|
});
|
|
62
62
|
|
|
63
63
|
test("rejects traversal patterns", () => {
|
|
64
|
-
expect(
|
|
65
|
-
expect(
|
|
66
|
-
expect(
|
|
64
|
+
expect(validateCloudSkillId("../escape")).not.toBeNull();
|
|
65
|
+
expect(validateCloudSkillId("foo/bar")).not.toBeNull();
|
|
66
|
+
expect(validateCloudSkillId("foo\\bar")).not.toBeNull();
|
|
67
67
|
});
|
|
68
68
|
|
|
69
69
|
test("rejects uppercase", () => {
|
|
70
|
-
expect(
|
|
70
|
+
expect(validateCloudSkillId("MySkill")).not.toBeNull();
|
|
71
71
|
});
|
|
72
72
|
|
|
73
73
|
test("rejects IDs starting with special chars", () => {
|
|
74
|
-
expect(
|
|
75
|
-
expect(
|
|
74
|
+
expect(validateCloudSkillId(".hidden")).not.toBeNull();
|
|
75
|
+
expect(validateCloudSkillId("-dash")).not.toBeNull();
|
|
76
76
|
});
|
|
77
77
|
});
|
|
78
78
|
|
|
@@ -134,7 +134,7 @@ describe("buildSkillMarkdown", () => {
|
|
|
134
134
|
|
|
135
135
|
test("round-trips special characters through write and load", () => {
|
|
136
136
|
// Write a skill with special chars in name/description
|
|
137
|
-
|
|
137
|
+
createCloudSkill({
|
|
138
138
|
id: "roundtrip-test",
|
|
139
139
|
name: 'Say "hello" & back\\slash',
|
|
140
140
|
description: "Line1\nLine2\r\nLine3",
|
|
@@ -152,7 +152,7 @@ describe("buildSkillMarkdown", () => {
|
|
|
152
152
|
test("round-trips backslash-n literal (not a newline) correctly", () => {
|
|
153
153
|
// A name containing a literal backslash followed by 'n' (not a newline)
|
|
154
154
|
const nameWithBackslashN = "path\\name";
|
|
155
|
-
|
|
155
|
+
createCloudSkill({
|
|
156
156
|
id: "backslash-n-test",
|
|
157
157
|
name: nameWithBackslashN,
|
|
158
158
|
description: "test",
|
|
@@ -249,7 +249,7 @@ describe("buildSkillMarkdown", () => {
|
|
|
249
249
|
});
|
|
250
250
|
|
|
251
251
|
test("includes round-trips through write and catalog load", () => {
|
|
252
|
-
|
|
252
|
+
createCloudSkill({
|
|
253
253
|
id: "roundtrip-includes",
|
|
254
254
|
name: "Roundtrip",
|
|
255
255
|
description: "Test roundtrip",
|
|
@@ -283,9 +283,9 @@ describe("buildSkillMarkdown", () => {
|
|
|
283
283
|
});
|
|
284
284
|
});
|
|
285
285
|
|
|
286
|
-
describe("
|
|
286
|
+
describe("createCloudSkill", () => {
|
|
287
287
|
test("creates skill and writes to expected path", () => {
|
|
288
|
-
const result =
|
|
288
|
+
const result = createCloudSkill({
|
|
289
289
|
id: "test-skill",
|
|
290
290
|
name: "Test Skill",
|
|
291
291
|
description: "A test skill",
|
|
@@ -302,14 +302,14 @@ describe("createManagedSkill", () => {
|
|
|
302
302
|
});
|
|
303
303
|
|
|
304
304
|
test("rejects duplicate unless overwrite=true", () => {
|
|
305
|
-
|
|
305
|
+
createCloudSkill({
|
|
306
306
|
id: "dupe",
|
|
307
307
|
name: "Original",
|
|
308
308
|
description: "First version",
|
|
309
309
|
bodyMarkdown: "V1.",
|
|
310
310
|
});
|
|
311
311
|
|
|
312
|
-
const result2 =
|
|
312
|
+
const result2 = createCloudSkill({
|
|
313
313
|
id: "dupe",
|
|
314
314
|
name: "Duplicate",
|
|
315
315
|
description: "Second version",
|
|
@@ -318,7 +318,7 @@ describe("createManagedSkill", () => {
|
|
|
318
318
|
expect(result2.created).toBe(false);
|
|
319
319
|
expect(result2.error).toContain("already exists");
|
|
320
320
|
|
|
321
|
-
const result3 =
|
|
321
|
+
const result3 = createCloudSkill({
|
|
322
322
|
id: "dupe",
|
|
323
323
|
name: "Overwritten",
|
|
324
324
|
description: "Third version",
|
|
@@ -331,7 +331,7 @@ describe("createManagedSkill", () => {
|
|
|
331
331
|
});
|
|
332
332
|
|
|
333
333
|
test("an overwrite keeps the frontmatter the call omits and replaces the body", () => {
|
|
334
|
-
|
|
334
|
+
createCloudSkill({
|
|
335
335
|
id: "kept",
|
|
336
336
|
name: "Kept",
|
|
337
337
|
description: "V1",
|
|
@@ -343,7 +343,7 @@ describe("createManagedSkill", () => {
|
|
|
343
343
|
category: "productivity",
|
|
344
344
|
});
|
|
345
345
|
|
|
346
|
-
const result =
|
|
346
|
+
const result = createCloudSkill({
|
|
347
347
|
id: "kept",
|
|
348
348
|
name: "Kept",
|
|
349
349
|
description: "V2",
|
|
@@ -388,7 +388,7 @@ describe("createManagedSkill", () => {
|
|
|
388
388
|
].join("\n"),
|
|
389
389
|
);
|
|
390
390
|
|
|
391
|
-
const result =
|
|
391
|
+
const result = createCloudSkill({
|
|
392
392
|
id: "hand-edited",
|
|
393
393
|
name: "Hand Edited",
|
|
394
394
|
description: "V2",
|
|
@@ -416,7 +416,7 @@ describe("createManagedSkill", () => {
|
|
|
416
416
|
});
|
|
417
417
|
|
|
418
418
|
test("an overwrite replaces a field it passes and clears one passed empty", () => {
|
|
419
|
-
|
|
419
|
+
createCloudSkill({
|
|
420
420
|
id: "patched",
|
|
421
421
|
name: "Patched",
|
|
422
422
|
description: "V1",
|
|
@@ -428,7 +428,7 @@ describe("createManagedSkill", () => {
|
|
|
428
428
|
category: "productivity",
|
|
429
429
|
});
|
|
430
430
|
|
|
431
|
-
|
|
431
|
+
createCloudSkill({
|
|
432
432
|
id: "patched",
|
|
433
433
|
name: "Patched",
|
|
434
434
|
description: "V2",
|
|
@@ -452,7 +452,7 @@ describe("createManagedSkill", () => {
|
|
|
452
452
|
});
|
|
453
453
|
|
|
454
454
|
test("writes category to frontmatter and round-trips through catalog load", () => {
|
|
455
|
-
|
|
455
|
+
createCloudSkill({
|
|
456
456
|
id: "categorized-skill",
|
|
457
457
|
name: "Categorized",
|
|
458
458
|
description: "Has a category",
|
|
@@ -473,7 +473,7 @@ describe("createManagedSkill", () => {
|
|
|
473
473
|
});
|
|
474
474
|
|
|
475
475
|
test("leaves category unset when omitted", () => {
|
|
476
|
-
|
|
476
|
+
createCloudSkill({
|
|
477
477
|
id: "no-category",
|
|
478
478
|
name: "No Category",
|
|
479
479
|
description: "Uncategorized",
|
|
@@ -487,7 +487,7 @@ describe("createManagedSkill", () => {
|
|
|
487
487
|
});
|
|
488
488
|
|
|
489
489
|
test("rejects invalid IDs", () => {
|
|
490
|
-
const result =
|
|
490
|
+
const result = createCloudSkill({
|
|
491
491
|
id: "../escape",
|
|
492
492
|
name: "Bad",
|
|
493
493
|
description: "Bad",
|
|
@@ -498,7 +498,7 @@ describe("createManagedSkill", () => {
|
|
|
498
498
|
});
|
|
499
499
|
|
|
500
500
|
test("rejects empty name", () => {
|
|
501
|
-
const result =
|
|
501
|
+
const result = createCloudSkill({
|
|
502
502
|
id: "no-name",
|
|
503
503
|
name: "",
|
|
504
504
|
description: "Has desc",
|
|
@@ -509,7 +509,7 @@ describe("createManagedSkill", () => {
|
|
|
509
509
|
});
|
|
510
510
|
|
|
511
511
|
test("rejects whitespace-only name", () => {
|
|
512
|
-
const result =
|
|
512
|
+
const result = createCloudSkill({
|
|
513
513
|
id: "blank-name",
|
|
514
514
|
name: " ",
|
|
515
515
|
description: "Has desc",
|
|
@@ -520,7 +520,7 @@ describe("createManagedSkill", () => {
|
|
|
520
520
|
});
|
|
521
521
|
|
|
522
522
|
test("rejects empty description", () => {
|
|
523
|
-
const result =
|
|
523
|
+
const result = createCloudSkill({
|
|
524
524
|
id: "no-desc",
|
|
525
525
|
name: "Has Name",
|
|
526
526
|
description: "",
|
|
@@ -531,7 +531,7 @@ describe("createManagedSkill", () => {
|
|
|
531
531
|
});
|
|
532
532
|
|
|
533
533
|
test("does not create SKILLS.md and is discovered through SKILL.md directory", () => {
|
|
534
|
-
|
|
534
|
+
createCloudSkill({
|
|
535
535
|
id: "discovered-skill",
|
|
536
536
|
name: "Discovered",
|
|
537
537
|
description: "Found by directory discovery",
|
|
@@ -637,9 +637,9 @@ describe("validateCompanionPath", () => {
|
|
|
637
637
|
});
|
|
638
638
|
});
|
|
639
639
|
|
|
640
|
-
describe("
|
|
640
|
+
describe("createCloudSkill companion files", () => {
|
|
641
641
|
test("writes companion files under the skill dir and round-trips on disk", () => {
|
|
642
|
-
const result =
|
|
642
|
+
const result = createCloudSkill({
|
|
643
643
|
id: "with-files",
|
|
644
644
|
name: "With Files",
|
|
645
645
|
description: "Has companion files",
|
|
@@ -667,7 +667,7 @@ describe("createManagedSkill companion files", () => {
|
|
|
667
667
|
});
|
|
668
668
|
|
|
669
669
|
test("rejects a companion path colliding with an existing directory on overwrite, leaving SKILL.md intact", () => {
|
|
670
|
-
const first =
|
|
670
|
+
const first = createCloudSkill({
|
|
671
671
|
id: "dir-collide",
|
|
672
672
|
name: "Dir Collide",
|
|
673
673
|
description: "v1",
|
|
@@ -679,7 +679,7 @@ describe("createManagedSkill companion files", () => {
|
|
|
679
679
|
const before = readFileSync(skillMd, "utf-8");
|
|
680
680
|
|
|
681
681
|
// Overwrite with a companion path that names the existing references/ dir.
|
|
682
|
-
const second =
|
|
682
|
+
const second = createCloudSkill({
|
|
683
683
|
id: "dir-collide",
|
|
684
684
|
name: "Dir Collide",
|
|
685
685
|
description: "v2",
|
|
@@ -695,7 +695,7 @@ describe("createManagedSkill companion files", () => {
|
|
|
695
695
|
});
|
|
696
696
|
|
|
697
697
|
test("rejects path traversal and writes nothing", () => {
|
|
698
|
-
const result =
|
|
698
|
+
const result = createCloudSkill({
|
|
699
699
|
id: "traversal",
|
|
700
700
|
name: "Traversal",
|
|
701
701
|
description: "Bad companion path",
|
|
@@ -713,7 +713,7 @@ describe("createManagedSkill companion files", () => {
|
|
|
713
713
|
});
|
|
714
714
|
|
|
715
715
|
test("rejects absolute companion paths and writes nothing", () => {
|
|
716
|
-
const result =
|
|
716
|
+
const result = createCloudSkill({
|
|
717
717
|
id: "abs-path",
|
|
718
718
|
name: "Absolute",
|
|
719
719
|
description: "Absolute companion path",
|
|
@@ -729,7 +729,7 @@ describe("createManagedSkill companion files", () => {
|
|
|
729
729
|
});
|
|
730
730
|
|
|
731
731
|
test("rejects a path resolving outside the skill dir and writes nothing", () => {
|
|
732
|
-
const result =
|
|
732
|
+
const result = createCloudSkill({
|
|
733
733
|
id: "outside",
|
|
734
734
|
name: "Outside",
|
|
735
735
|
description: "Resolves outside",
|
|
@@ -752,14 +752,14 @@ describe("createManagedSkill companion files", () => {
|
|
|
752
752
|
});
|
|
753
753
|
|
|
754
754
|
test("does not write companion files when create errors on an existing skill", () => {
|
|
755
|
-
|
|
755
|
+
createCloudSkill({
|
|
756
756
|
id: "exists-files",
|
|
757
757
|
name: "Exists",
|
|
758
758
|
description: "Already here",
|
|
759
759
|
bodyMarkdown: "Body.",
|
|
760
760
|
});
|
|
761
761
|
|
|
762
|
-
const result =
|
|
762
|
+
const result = createCloudSkill({
|
|
763
763
|
id: "exists-files",
|
|
764
764
|
name: "Exists Again",
|
|
765
765
|
description: "Should not write",
|
|
@@ -780,7 +780,7 @@ describe("createManagedSkill companion files", () => {
|
|
|
780
780
|
// Planting a TOOLS.json declaring execution_target/risk would let a
|
|
781
781
|
// scaffolded skill register attacker-controlled tools. The reserved-name
|
|
782
782
|
// check must reject it before any write, leaving no SKILL.md or manifest.
|
|
783
|
-
const result =
|
|
783
|
+
const result = createCloudSkill({
|
|
784
784
|
id: "tools-manifest",
|
|
785
785
|
name: "Tools Manifest",
|
|
786
786
|
description: "Tries to plant a tool manifest",
|
|
@@ -814,7 +814,7 @@ describe("createManagedSkill companion files", () => {
|
|
|
814
814
|
});
|
|
815
815
|
|
|
816
816
|
test("overwrite re-writes companion files", () => {
|
|
817
|
-
|
|
817
|
+
createCloudSkill({
|
|
818
818
|
id: "overwrite-files",
|
|
819
819
|
name: "V1",
|
|
820
820
|
description: "First",
|
|
@@ -831,7 +831,7 @@ describe("createManagedSkill companion files", () => {
|
|
|
831
831
|
);
|
|
832
832
|
expect(readFileSync(companionPath, "utf-8")).toBe("v1 notes");
|
|
833
833
|
|
|
834
|
-
const result =
|
|
834
|
+
const result = createCloudSkill({
|
|
835
835
|
id: "overwrite-files",
|
|
836
836
|
name: "V2",
|
|
837
837
|
description: "Second",
|
|
@@ -845,12 +845,12 @@ describe("createManagedSkill companion files", () => {
|
|
|
845
845
|
});
|
|
846
846
|
});
|
|
847
847
|
|
|
848
|
-
describe("
|
|
848
|
+
describe("createCloudSkill copy_from companion sources", () => {
|
|
849
849
|
test("copies a workspace source file into the skill dir", () => {
|
|
850
850
|
const sourcePath = join(TEST_DIR, "ran-script.py");
|
|
851
851
|
writeFileSync(sourcePath, "print('proven')\n", "utf-8");
|
|
852
852
|
|
|
853
|
-
const result =
|
|
853
|
+
const result = createCloudSkill({
|
|
854
854
|
id: "copy-source",
|
|
855
855
|
name: "Copy Source",
|
|
856
856
|
description: "Copies a proven script",
|
|
@@ -871,7 +871,7 @@ describe("createManagedSkill copy_from companion sources", () => {
|
|
|
871
871
|
const sourcePath = join(TEST_DIR, "both.py");
|
|
872
872
|
writeFileSync(sourcePath, "x", "utf-8");
|
|
873
873
|
|
|
874
|
-
const result =
|
|
874
|
+
const result = createCloudSkill({
|
|
875
875
|
id: "copy-both",
|
|
876
876
|
name: "Both",
|
|
877
877
|
description: "Both content and copyFrom",
|
|
@@ -885,7 +885,7 @@ describe("createManagedSkill copy_from companion sources", () => {
|
|
|
885
885
|
});
|
|
886
886
|
|
|
887
887
|
test("rejects an entry setting neither content nor copyFrom", () => {
|
|
888
|
-
const result =
|
|
888
|
+
const result = createCloudSkill({
|
|
889
889
|
id: "copy-neither",
|
|
890
890
|
name: "Neither",
|
|
891
891
|
description: "Neither content nor copyFrom",
|
|
@@ -898,7 +898,7 @@ describe("createManagedSkill copy_from companion sources", () => {
|
|
|
898
898
|
});
|
|
899
899
|
|
|
900
900
|
test("rejects a relative copyFrom source", () => {
|
|
901
|
-
const result =
|
|
901
|
+
const result = createCloudSkill({
|
|
902
902
|
id: "copy-relative",
|
|
903
903
|
name: "Relative",
|
|
904
904
|
description: "Relative source",
|
|
@@ -911,7 +911,7 @@ describe("createManagedSkill copy_from companion sources", () => {
|
|
|
911
911
|
});
|
|
912
912
|
|
|
913
913
|
test("rejects a missing copyFrom source, writing nothing", () => {
|
|
914
|
-
const result =
|
|
914
|
+
const result = createCloudSkill({
|
|
915
915
|
id: "copy-missing",
|
|
916
916
|
name: "Missing",
|
|
917
917
|
description: "Missing source",
|
|
@@ -925,7 +925,7 @@ describe("createManagedSkill copy_from companion sources", () => {
|
|
|
925
925
|
});
|
|
926
926
|
|
|
927
927
|
test("rejects a source outside the workspace and temp dir", () => {
|
|
928
|
-
const result =
|
|
928
|
+
const result = createCloudSkill({
|
|
929
929
|
id: "copy-outside",
|
|
930
930
|
name: "Outside",
|
|
931
931
|
description: "Out-of-bounds source",
|
|
@@ -943,7 +943,7 @@ describe("createManagedSkill copy_from companion sources", () => {
|
|
|
943
943
|
const linkPath = join(TEST_DIR, "sneaky-link");
|
|
944
944
|
fs.symlinkSync("/etc/hosts", linkPath);
|
|
945
945
|
|
|
946
|
-
const result =
|
|
946
|
+
const result = createCloudSkill({
|
|
947
947
|
id: "copy-symlink",
|
|
948
948
|
name: "Symlink",
|
|
949
949
|
description: "Symlink escape",
|
|
@@ -963,7 +963,7 @@ describe("createManagedSkill copy_from companion sources", () => {
|
|
|
963
963
|
writeFileSync(sourcePath, "console.log('ok');\n", "utf-8");
|
|
964
964
|
|
|
965
965
|
try {
|
|
966
|
-
const result =
|
|
966
|
+
const result = createCloudSkill({
|
|
967
967
|
id: "copy-tmp",
|
|
968
968
|
name: "Tmp Source",
|
|
969
969
|
description: "Copies from literal /tmp",
|
|
@@ -987,7 +987,7 @@ describe("createManagedSkill copy_from companion sources", () => {
|
|
|
987
987
|
const keyPath = join(TEST_DIR, "backup.key");
|
|
988
988
|
writeFileSync(keyPath, "secret", "utf-8");
|
|
989
989
|
|
|
990
|
-
const result =
|
|
990
|
+
const result = createCloudSkill({
|
|
991
991
|
id: "copy-denied",
|
|
992
992
|
name: "Denied",
|
|
993
993
|
description: "Denied basename",
|
|
@@ -1005,7 +1005,7 @@ describe("createManagedSkill copy_from companion sources", () => {
|
|
|
1005
1005
|
const linkPath = join(TEST_DIR, "looks-fine.txt");
|
|
1006
1006
|
fs.symlinkSync(keyPath, linkPath);
|
|
1007
1007
|
|
|
1008
|
-
const result =
|
|
1008
|
+
const result = createCloudSkill({
|
|
1009
1009
|
id: "copy-denied-link",
|
|
1010
1010
|
name: "Denied Link",
|
|
1011
1011
|
description: "Symlink to denied basename",
|
|
@@ -1021,7 +1021,7 @@ describe("createManagedSkill copy_from companion sources", () => {
|
|
|
1021
1021
|
const dirPath = join(TEST_DIR, "a-directory");
|
|
1022
1022
|
mkdirSync(dirPath, { recursive: true });
|
|
1023
1023
|
|
|
1024
|
-
const result =
|
|
1024
|
+
const result = createCloudSkill({
|
|
1025
1025
|
id: "copy-dir",
|
|
1026
1026
|
name: "Dir",
|
|
1027
1027
|
description: "Directory source",
|
|
@@ -1037,7 +1037,7 @@ describe("createManagedSkill copy_from companion sources", () => {
|
|
|
1037
1037
|
const sourcePath = join(TEST_DIR, "manifest.json");
|
|
1038
1038
|
writeFileSync(sourcePath, "{}", "utf-8");
|
|
1039
1039
|
|
|
1040
|
-
const result =
|
|
1040
|
+
const result = createCloudSkill({
|
|
1041
1041
|
id: "copy-reserved",
|
|
1042
1042
|
name: "Reserved",
|
|
1043
1043
|
description: "Reserved destination",
|
|
@@ -1054,7 +1054,7 @@ describe("atomic write safety", () => {
|
|
|
1054
1054
|
test("SKILL.md is not partially written on concurrent create", () => {
|
|
1055
1055
|
// Verify that atomicWriteFile prevents corruption: after creation,
|
|
1056
1056
|
// the file is always complete (starts with --- and ends with newline)
|
|
1057
|
-
const result =
|
|
1057
|
+
const result = createCloudSkill({
|
|
1058
1058
|
id: "atomic-test",
|
|
1059
1059
|
name: "Atomic",
|
|
1060
1060
|
description: "Tests atomic write",
|
|
@@ -1069,14 +1069,14 @@ describe("atomic write safety", () => {
|
|
|
1069
1069
|
});
|
|
1070
1070
|
|
|
1071
1071
|
test("overwrite replaces file atomically (no leftover temp files)", () => {
|
|
1072
|
-
|
|
1072
|
+
createCloudSkill({
|
|
1073
1073
|
id: "atomic-overwrite",
|
|
1074
1074
|
name: "V1",
|
|
1075
1075
|
description: "First",
|
|
1076
1076
|
bodyMarkdown: "Original.",
|
|
1077
1077
|
});
|
|
1078
1078
|
|
|
1079
|
-
|
|
1079
|
+
createCloudSkill({
|
|
1080
1080
|
id: "atomic-overwrite",
|
|
1081
1081
|
name: "V2",
|
|
1082
1082
|
description: "Second",
|
|
@@ -1122,7 +1122,7 @@ describe("atomic write failure", () => {
|
|
|
1122
1122
|
|
|
1123
1123
|
try {
|
|
1124
1124
|
expect(() => {
|
|
1125
|
-
|
|
1125
|
+
createCloudSkill({
|
|
1126
1126
|
id: "fail-write",
|
|
1127
1127
|
name: "Should Fail",
|
|
1128
1128
|
description: "This should not be written",
|
|
@@ -1141,16 +1141,16 @@ describe("atomic write failure", () => {
|
|
|
1141
1141
|
});
|
|
1142
1142
|
});
|
|
1143
1143
|
|
|
1144
|
-
describe("
|
|
1144
|
+
describe("deleteCloudSkill", () => {
|
|
1145
1145
|
test("deletes existing skill", () => {
|
|
1146
|
-
|
|
1146
|
+
createCloudSkill({
|
|
1147
1147
|
id: "to-delete",
|
|
1148
1148
|
name: "Delete Me",
|
|
1149
1149
|
description: "Will be deleted",
|
|
1150
1150
|
bodyMarkdown: "Gone soon.",
|
|
1151
1151
|
});
|
|
1152
1152
|
|
|
1153
|
-
const result =
|
|
1153
|
+
const result = deleteCloudSkill("to-delete");
|
|
1154
1154
|
expect(result.deleted).toBe(true);
|
|
1155
1155
|
expect(existsSync(join(TEST_DIR, "skills", "to-delete"))).toBe(false);
|
|
1156
1156
|
|
|
@@ -1159,19 +1159,19 @@ describe("deleteManagedSkill", () => {
|
|
|
1159
1159
|
});
|
|
1160
1160
|
|
|
1161
1161
|
test("returns error for non-existent skill", () => {
|
|
1162
|
-
const result =
|
|
1162
|
+
const result = deleteCloudSkill("ghost");
|
|
1163
1163
|
expect(result.deleted).toBe(false);
|
|
1164
1164
|
expect(result.error).toContain("not found");
|
|
1165
1165
|
});
|
|
1166
1166
|
|
|
1167
1167
|
test("rejects invalid IDs", () => {
|
|
1168
|
-
const result =
|
|
1168
|
+
const result = deleteCloudSkill("../bad");
|
|
1169
1169
|
expect(result.deleted).toBe(false);
|
|
1170
1170
|
expect(result.error).toContain("traversal");
|
|
1171
1171
|
});
|
|
1172
1172
|
|
|
1173
1173
|
test("delete leaves a stale SKILLS.md index unchanged", () => {
|
|
1174
|
-
|
|
1174
|
+
createCloudSkill({
|
|
1175
1175
|
id: "keep-index",
|
|
1176
1176
|
name: "Keep Index",
|
|
1177
1177
|
description: "Index stays",
|
|
@@ -1182,7 +1182,7 @@ describe("deleteManagedSkill", () => {
|
|
|
1182
1182
|
"- keep-index\n- survivor\n",
|
|
1183
1183
|
);
|
|
1184
1184
|
|
|
1185
|
-
const result =
|
|
1185
|
+
const result = deleteCloudSkill("keep-index");
|
|
1186
1186
|
expect(result.deleted).toBe(true);
|
|
1187
1187
|
|
|
1188
1188
|
const indexContent = readFileSync(
|
|
@@ -1197,7 +1197,7 @@ describe("deleteManagedSkill", () => {
|
|
|
1197
1197
|
});
|
|
1198
1198
|
|
|
1199
1199
|
test("delete does not create or edit SKILLS.md", () => {
|
|
1200
|
-
|
|
1200
|
+
createCloudSkill({
|
|
1201
1201
|
id: "delete-no-index",
|
|
1202
1202
|
name: "Delete No Index",
|
|
1203
1203
|
description: "No index write",
|
|
@@ -1205,7 +1205,7 @@ describe("deleteManagedSkill", () => {
|
|
|
1205
1205
|
});
|
|
1206
1206
|
|
|
1207
1207
|
const skillsDir = join(TEST_DIR, "skills");
|
|
1208
|
-
const result =
|
|
1208
|
+
const result = deleteCloudSkill("delete-no-index");
|
|
1209
1209
|
expect(result.deleted).toBe(true);
|
|
1210
1210
|
expect(existsSync(join(skillsDir, "delete-no-index"))).toBe(false);
|
|
1211
1211
|
expect(existsSync(join(skillsDir, "SKILLS.md"))).toBe(false);
|
|
@@ -1213,8 +1213,8 @@ describe("deleteManagedSkill", () => {
|
|
|
1213
1213
|
});
|
|
1214
1214
|
|
|
1215
1215
|
describe("version metadata", () => {
|
|
1216
|
-
test("
|
|
1217
|
-
|
|
1216
|
+
test("createCloudSkill writes install-meta.json without version when version is omitted", () => {
|
|
1217
|
+
createCloudSkill({
|
|
1218
1218
|
id: "no-version",
|
|
1219
1219
|
name: "No Version",
|
|
1220
1220
|
description: "Created without version",
|
|
@@ -1226,8 +1226,8 @@ describe("version metadata", () => {
|
|
|
1226
1226
|
expect(meta.version).toBeUndefined();
|
|
1227
1227
|
});
|
|
1228
1228
|
|
|
1229
|
-
test("
|
|
1230
|
-
|
|
1229
|
+
test("createCloudSkill writes install-meta.json when version is provided", () => {
|
|
1230
|
+
createCloudSkill({
|
|
1231
1231
|
id: "versioned",
|
|
1232
1232
|
name: "Versioned",
|
|
1233
1233
|
description: "Has a version",
|
|
@@ -1240,7 +1240,7 @@ describe("version metadata", () => {
|
|
|
1240
1240
|
});
|
|
1241
1241
|
|
|
1242
1242
|
test("install-meta.json contains valid JSON with origin, version, and installedAt", () => {
|
|
1243
|
-
|
|
1243
|
+
createCloudSkill({
|
|
1244
1244
|
id: "version-meta",
|
|
1245
1245
|
name: "Meta",
|
|
1246
1246
|
description: "Check metadata shape",
|
|
@@ -1267,7 +1267,7 @@ describe("version metadata", () => {
|
|
|
1267
1267
|
});
|
|
1268
1268
|
|
|
1269
1269
|
test("install-meta.json includes installedBy when contactId is provided", () => {
|
|
1270
|
-
|
|
1270
|
+
createCloudSkill({
|
|
1271
1271
|
id: "with-contact",
|
|
1272
1272
|
name: "With Contact",
|
|
1273
1273
|
description: "Has contactId",
|
|
@@ -1288,7 +1288,7 @@ describe("version metadata", () => {
|
|
|
1288
1288
|
});
|
|
1289
1289
|
|
|
1290
1290
|
test("install-meta.json forwards author when provided", () => {
|
|
1291
|
-
|
|
1291
|
+
createCloudSkill({
|
|
1292
1292
|
id: "with-author",
|
|
1293
1293
|
name: "With Author",
|
|
1294
1294
|
description: "Has author",
|
|
@@ -1300,7 +1300,7 @@ describe("version metadata", () => {
|
|
|
1300
1300
|
});
|
|
1301
1301
|
|
|
1302
1302
|
test("install-meta.json omits author when not provided", () => {
|
|
1303
|
-
|
|
1303
|
+
createCloudSkill({
|
|
1304
1304
|
id: "no-author",
|
|
1305
1305
|
name: "No Author",
|
|
1306
1306
|
description: "No author",
|
|
@@ -1311,7 +1311,7 @@ describe("version metadata", () => {
|
|
|
1311
1311
|
});
|
|
1312
1312
|
|
|
1313
1313
|
test("overwrite updates install-meta.json", () => {
|
|
1314
|
-
|
|
1314
|
+
createCloudSkill({
|
|
1315
1315
|
id: "update-version",
|
|
1316
1316
|
name: "V1",
|
|
1317
1317
|
description: "First",
|
|
@@ -1321,7 +1321,7 @@ describe("version metadata", () => {
|
|
|
1321
1321
|
|
|
1322
1322
|
expect(readInstallMetaFile("update-version").version).toBe("v1:first");
|
|
1323
1323
|
|
|
1324
|
-
|
|
1324
|
+
createCloudSkill({
|
|
1325
1325
|
id: "update-version",
|
|
1326
1326
|
name: "V2",
|
|
1327
1327
|
description: "Second",
|
|
@@ -1333,7 +1333,7 @@ describe("version metadata", () => {
|
|
|
1333
1333
|
});
|
|
1334
1334
|
|
|
1335
1335
|
test("overwrite removes legacy version.json", () => {
|
|
1336
|
-
|
|
1336
|
+
createCloudSkill({
|
|
1337
1337
|
id: "legacy-version",
|
|
1338
1338
|
name: "Legacy",
|
|
1339
1339
|
description: "Has legacy metadata",
|
|
@@ -1350,7 +1350,7 @@ describe("version metadata", () => {
|
|
|
1350
1350
|
writeFileSync(legacyMetaPath, '{"version":"legacy"}', "utf-8");
|
|
1351
1351
|
expect(existsSync(legacyMetaPath)).toBe(true);
|
|
1352
1352
|
|
|
1353
|
-
|
|
1353
|
+
createCloudSkill({
|
|
1354
1354
|
id: "legacy-version",
|
|
1355
1355
|
name: "Legacy Updated",
|
|
1356
1356
|
description: "Has current metadata",
|
|
@@ -1363,38 +1363,38 @@ describe("version metadata", () => {
|
|
|
1363
1363
|
});
|
|
1364
1364
|
});
|
|
1365
1365
|
|
|
1366
|
-
describe("
|
|
1366
|
+
describe("validateCloudSkillId edge cases", () => {
|
|
1367
1367
|
test("rejects non-string input", () => {
|
|
1368
1368
|
// @ts-expect-error testing runtime validation
|
|
1369
|
-
expect(
|
|
1369
|
+
expect(validateCloudSkillId(null)).not.toBeNull();
|
|
1370
1370
|
// @ts-expect-error testing runtime validation
|
|
1371
|
-
expect(
|
|
1371
|
+
expect(validateCloudSkillId(undefined)).not.toBeNull();
|
|
1372
1372
|
// @ts-expect-error testing runtime validation
|
|
1373
|
-
expect(
|
|
1373
|
+
expect(validateCloudSkillId(123)).not.toBeNull();
|
|
1374
1374
|
});
|
|
1375
1375
|
|
|
1376
1376
|
test("rejects IDs with only dots", () => {
|
|
1377
|
-
expect(
|
|
1377
|
+
expect(validateCloudSkillId("...")).not.toBeNull();
|
|
1378
1378
|
});
|
|
1379
1379
|
|
|
1380
1380
|
test("rejects single dot (hidden dir)", () => {
|
|
1381
|
-
expect(
|
|
1381
|
+
expect(validateCloudSkillId(".")).not.toBeNull();
|
|
1382
1382
|
});
|
|
1383
1383
|
|
|
1384
1384
|
test("accepts single character ID", () => {
|
|
1385
|
-
expect(
|
|
1386
|
-
expect(
|
|
1385
|
+
expect(validateCloudSkillId("a")).toBeNull();
|
|
1386
|
+
expect(validateCloudSkillId("0")).toBeNull();
|
|
1387
1387
|
});
|
|
1388
1388
|
|
|
1389
1389
|
test("accepts ID with all allowed character types", () => {
|
|
1390
|
-
expect(
|
|
1390
|
+
expect(validateCloudSkillId("a1.b2-c3_d4")).toBeNull();
|
|
1391
1391
|
});
|
|
1392
1392
|
});
|
|
1393
1393
|
|
|
1394
1394
|
describe("YAML metadata round-trip", () => {
|
|
1395
1395
|
test("all cadet fields round-trip through write and load", () => {
|
|
1396
|
-
// Create a
|
|
1397
|
-
|
|
1396
|
+
// Create a cloud skill with every cadet metadata field populated
|
|
1397
|
+
createCloudSkill({
|
|
1398
1398
|
id: "yaml-roundtrip-all",
|
|
1399
1399
|
name: "Full Metadata Skill",
|
|
1400
1400
|
description: "Tests all cadet fields round-trip correctly",
|
|
@@ -1418,10 +1418,10 @@ describe("YAML metadata round-trip", () => {
|
|
|
1418
1418
|
});
|
|
1419
1419
|
|
|
1420
1420
|
test("activation hints and avoid-when round-trip into SkillSummary", () => {
|
|
1421
|
-
// An assistant-authored (retrospective) skill written via
|
|
1421
|
+
// An assistant-authored (retrospective) skill written via createCloudSkill
|
|
1422
1422
|
// carries activation hints so the memory seeder emits a "Use when:" clause
|
|
1423
1423
|
// for it, just like bundled skills.
|
|
1424
|
-
|
|
1424
|
+
createCloudSkill({
|
|
1425
1425
|
id: "hints-roundtrip",
|
|
1426
1426
|
name: "Hints Roundtrip",
|
|
1427
1427
|
description: "Trigger phrases round-trip through write and load",
|