@mycadet/assistant 0.12.9 → 0.12.10
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/Dockerfile +0 -8
- package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +1 -1
- package/openapi.yaml +62 -910
- package/package.json +3 -7
- package/scripts/build-test-fixtures.ts +1 -1
- package/scripts/generate-openapi.ts +22 -6
- package/scripts/postinstall.ts +4 -10
- package/scripts/run-tests.ts +0 -21
- package/src/__tests__/adaptive-thinking-repair.test.ts +19 -57
- package/src/__tests__/agent-loop.test.ts +0 -76
- package/src/__tests__/anthropic-provider.test.ts +6 -6
- package/src/__tests__/assert-not-live-db.ts +1 -1
- package/src/__tests__/assistant-id-boundary-guard.test.ts +3 -3
- package/src/__tests__/attachments-store-heic-normalize.test.ts +1 -1
- package/src/__tests__/attachments-store.test.ts +1 -1
- package/src/__tests__/audit-log-rotation.test.ts +1 -1
- package/src/__tests__/btw-routes.test.ts +1 -1
- package/src/__tests__/byok-default-profile-ensure.test.ts +21 -27
- package/src/__tests__/call-conversation-messages.test.ts +0 -5
- package/src/__tests__/call-recovery.test.ts +2 -7
- package/src/__tests__/call-routes-http.test.ts +0 -12
- package/src/__tests__/call-store.test.ts +2 -7
- package/src/__tests__/catalog-files.test.ts +7 -5
- package/src/__tests__/checker.test.ts +1 -1
- package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +4 -4
- package/src/__tests__/cloud-client-verify-credential.test.ts +0 -4
- package/src/__tests__/cloud-credential-catalog-cli.test.ts +14 -14
- package/src/__tests__/cloud-profile-guard.test.ts +48 -401
- package/src/__tests__/compaction-events.test.ts +2 -2
- package/src/__tests__/config-loader-backfill.test.ts +74 -163
- package/src/__tests__/config-loader-cloud-defaults.test.ts +11 -11
- package/src/__tests__/config-loader-corrupt.test.ts +10 -10
- package/src/__tests__/config-loader-quarantine-notice.test.ts +7 -7
- package/src/__tests__/config-loader-validation-reset-notice.test.ts +11 -11
- package/src/__tests__/config-schema.test.ts +26 -27
- package/src/__tests__/config-set-route.test.ts +2 -6
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +28 -300
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +39 -246
- package/src/__tests__/conversation-agent-loop.test.ts +2 -58
- package/src/__tests__/conversation-clear-safety.test.ts +0 -30
- package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
- package/src/__tests__/conversation-queue.test.ts +1 -1
- package/src/__tests__/conversation-runtime-assembly.test.ts +1 -1
- package/src/__tests__/conversation-skill-tools.test.ts +4 -444
- package/src/__tests__/conversation-slash-commands.test.ts +1 -1
- package/src/__tests__/conversation-store.test.ts +1 -84
- package/src/__tests__/conversation-surface-state.test.ts +0 -16
- package/src/__tests__/credential-health-service.test.ts +14 -1
- package/src/__tests__/credential-record-retire.test.ts +1 -1
- package/src/__tests__/credential-record-write-through.test.ts +1 -1
- package/src/__tests__/credential-security-invariants.test.ts +0 -145
- package/src/__tests__/custom-profile-ensure.test.ts +1 -1
- package/src/__tests__/default-profile-catalog-fallback.test.ts +5 -15
- package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -2
- package/src/__tests__/dictation-profile-store.test.ts +6 -6
- package/src/__tests__/disk-usage.test.ts +28 -164
- package/src/__tests__/docker-signing-key-bootstrap.test.ts +1 -1
- package/src/__tests__/embedding-cloud-proxy-selection.test.ts +1 -1
- package/src/__tests__/emit-event-signal.test.ts +1 -1
- package/src/__tests__/gateway-client-cloud-outbound.test.ts +3 -3
- package/src/__tests__/gateway-only-enforcement.test.ts +1 -1
- package/src/__tests__/guardian-dispatch.test.ts +0 -13
- package/src/__tests__/helpers/seed-app.ts +1 -1
- package/src/__tests__/host-cu-routes-targeted.test.ts +1 -1
- package/src/__tests__/host-shell-tool.test.ts +1 -1
- package/src/__tests__/identity-routes.test.ts +1 -1
- package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
- package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
- package/src/__tests__/injector-chain.test.ts +1 -1
- package/src/__tests__/injector-config-quarantine-notice.test.ts +1 -1
- package/src/__tests__/injector-config-validation-reset-notice.test.ts +1 -1
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
- package/src/__tests__/{platform.test.ts → layout.test.ts} +1 -1
- package/src/__tests__/list-all-apps.test.ts +1 -1
- package/src/__tests__/live-workspace-guard.test.ts +2 -2
- package/src/__tests__/llm-resolver-override-or-default.test.ts +5 -6
- package/src/__tests__/llm-resolver.test.ts +7 -7
- package/src/__tests__/llm-schema-fallback-profile.test.ts +9 -10
- package/src/__tests__/llm-usage-store.test.ts +0 -495
- package/src/__tests__/log-export-routes.test.ts +1 -1
- package/src/__tests__/mcp-config-secret-boundary.test.ts +12 -53
- package/src/__tests__/mcp-list-plugin-servers.test.ts +1 -1
- package/src/__tests__/memory-config-file-parity.test.ts +1 -1
- package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
- package/src/__tests__/messages-read-boundary-guard.test.ts +0 -2
- package/src/__tests__/notification-guardian-path.test.ts +0 -7
- package/src/__tests__/onboarding-persona-write.test.ts +1 -1
- package/src/__tests__/openai-provider.test.ts +8 -8
- package/src/__tests__/path-policy.test.ts +1 -1
- package/src/__tests__/persona-resolver.test.ts +1 -1
- package/src/__tests__/plugin-app-serve-routes.test.ts +1 -1
- package/src/__tests__/plugin-effective-enabled-set.test.ts +1 -1
- package/src/__tests__/plugin-import-boundary-guard.test.ts +4 -6
- package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +0 -3
- package/src/__tests__/provider-cloud-proxy-integration.test.ts +1 -5
- package/src/__tests__/provider-connections-backfill.test.ts +10 -10
- package/src/__tests__/prune-old-conversations-job.test.ts +6 -31
- package/src/__tests__/resolve-app.test.ts +1 -1
- package/src/__tests__/run-due-schedules.test.ts +1 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -53
- package/src/__tests__/schedule-routes.test.ts +1 -1
- package/src/__tests__/schedule-store.test.ts +1 -1
- package/src/__tests__/secret-routes-cloud-proxy.test.ts +1 -1
- package/src/__tests__/skill-load-plugin-scope.test.ts +1 -1
- package/src/__tests__/surface-completion-compaction-boundary.test.ts +1 -1
- package/src/__tests__/tool-approval-handler.test.ts +1 -1
- package/src/__tests__/tool-audit.test.ts +5 -235
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +54 -114
- package/src/__tests__/tools-get-route.test.ts +1 -1
- package/src/__tests__/turn-outcome-read.test.ts +1 -1
- package/src/__tests__/twilio-routes.test.ts +0 -1
- package/src/__tests__/usage-attribution.test.ts +0 -31
- package/src/__tests__/verification-control-plane-policy.test.ts +3 -10
- package/src/__tests__/visible-app-context.test.ts +1 -1
- package/src/__tests__/voice-ingress-preflight.test.ts +1 -1
- package/src/__tests__/workspace-git-service.test.ts +1 -1
- package/src/__tests__/workspace-greetings.test.ts +1 -1
- package/src/acp/__tests__/helpers/acp-config-stub.ts +1 -1
- package/src/activation/progress-store.ts +1 -1
- package/src/activation/turn-hooks.ts +1 -1
- package/src/agent/loop.ts +0 -51
- package/src/apps/app-store.ts +1 -1
- package/src/avatar/__tests__/avatar-store.test.ts +2 -172
- package/src/avatar/accent-backfill.ts +1 -1
- package/src/avatar/avatar-manifest.ts +1 -1
- package/src/avatar/avatar-store.ts +10 -69
- package/src/avatar/ensure-raster.ts +1 -1
- package/src/avatar/identity-avatar.ts +1 -1
- package/src/avatar/sync-avatar.ts +1 -1
- package/src/avatar/traits-png-sync.ts +1 -1
- package/src/bundler/compiler-tools.ts +1 -1
- package/src/bundler/package-resolver.ts +1 -1
- package/src/calls/__tests__/call-controller.test.ts +25 -27
- package/src/calls/active-call-lease.ts +1 -1
- package/src/calls/call-controller.ts +3 -3
- package/src/calls/call-domain.ts +4 -8
- package/src/calls/call-store.ts +2 -76
- package/src/calls/resolve-call-tts-provider.ts +3 -3
- package/src/calls/twilio-config.ts +3 -3
- package/src/calls/twilio-rest.ts +2 -2
- package/src/calls/voice-ingress-preflight.ts +2 -2
- package/src/cli/bundled-modules.ts +0 -2
- package/src/cli/commands/__tests__/apps.test.ts +1 -1
- package/src/cli/commands/__tests__/plugins.test.ts +9 -66
- package/src/cli/commands/__tests__/ps.test.ts +67 -0
- package/src/cli/commands/auth.help.ts +2 -2
- package/src/cli/commands/avatar.ts +1 -1
- package/src/cli/commands/changelog.ts +1 -1
- package/src/cli/commands/cloud/__tests__/subscription.test.ts +2 -2
- package/src/cli/commands/cloud/index.help.ts +1 -1
- package/src/cli/commands/cloud/index.ts +2 -2
- package/src/cli/commands/db/refresh.ts +1 -1
- package/src/cli/commands/db/repair-step-conversation-backfill.ts +1 -1
- package/src/cli/commands/db/repair.ts +1 -1
- package/src/cli/commands/db/status.ts +1 -1
- package/src/cli/commands/inference-profiles.ts +1 -12
- package/src/cli/commands/memory/__tests__/memory-v3.test.ts +1 -116
- package/src/cli/commands/memory/index.help.ts +1 -43
- package/src/cli/commands/memory/memory-v3.ts +0 -64
- package/src/cli/commands/plugins.ts +54 -205
- package/src/cli/commands/ps.ts +5 -2
- package/src/cli/commands/status.ts +1 -1
- package/src/cli/index.help.ts +0 -2
- package/src/cli/lib/__tests__/inspect-plugin.test.ts +36 -66
- package/src/cli/lib/__tests__/install-from-cloud.test.ts +1 -1
- package/src/cli/lib/__tests__/install-from-github.test.ts +41 -117
- package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +2 -185
- package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +36 -66
- package/src/cli/lib/__tests__/plugin-catalog-visibility.test.ts +4 -6
- package/src/cli/lib/__tests__/plugin-details.test.ts +113 -96
- package/src/cli/lib/__tests__/search-plugins.test.ts +9 -16
- package/src/cli/lib/__tests__/uninstall-plugin.test.ts +1 -1
- package/src/cli/lib/__tests__/upgrade-plugin.test.ts +38 -15
- package/src/cli/lib/diff-plugin.ts +1 -1
- package/src/cli/lib/inspect-plugin.ts +13 -97
- package/src/cli/lib/install-from-cloud.ts +1 -1
- package/src/cli/lib/install-from-github.ts +75 -154
- package/src/cli/lib/install-plugin-dependencies.ts +1 -1
- package/src/cli/lib/list-installed-plugins.ts +1 -1
- package/src/cli/lib/open-browser.ts +1 -1
- package/src/cli/lib/plugin-catalog-cache.ts +8 -51
- package/src/cli/lib/plugin-catalog-resolve.ts +3 -22
- package/src/cli/lib/plugin-details.ts +5 -27
- package/src/cli/lib/plugin-marketplace.ts +18 -266
- package/src/cli/lib/search-plugins.ts +23 -43
- package/src/cli/lib/toggle-plugin.ts +1 -1
- package/src/cli/lib/uninstall-plugin.ts +1 -1
- package/src/cli/lib/upgrade-plugin.ts +3 -49
- package/src/cli/program.ts +1 -3
- package/src/cli.ts +1 -1
- package/src/cloud/client.ts +0 -6
- package/src/cloud/consent-cache.test.ts +22 -201
- package/src/cloud/consent-cache.ts +16 -111
- package/src/cloud/sync-identity.ts +1 -1
- package/src/config/__tests__/chat-settings.test.ts +1 -1
- package/src/config/__tests__/cloud-identity.test.ts +15 -2
- package/src/config/__tests__/default-plugin-skill-discovery.test.ts +1 -1
- package/src/config/__tests__/default-profile-catalog.test.ts +12 -51
- package/src/config/__tests__/deployment-context-defaults.test.ts +13 -13
- package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +4 -4
- package/src/config/__tests__/loader-last-known-good.test.ts +9 -9
- package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +7 -7
- package/src/config/__tests__/plugin-resident-skill-discovery.test.ts +1 -1
- package/src/config/__tests__/profile-materialization.test.ts +2 -4
- package/src/config/__tests__/sync-gated-profiles.test.ts +1 -106
- package/src/config/acp-agent-write.ts +1 -1
- package/src/config/bundled-skills/settings/tools/open-system-settings.test.ts +1 -1
- package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
- package/src/config/call-site-defaults.ts +0 -6
- package/src/config/cloud-identity.ts +12 -5
- package/src/config/composer-preferences.ts +1 -1
- package/src/config/default-profile-catalog.ts +8 -75
- package/src/config/default-profile-names.ts +2 -25
- package/src/config/env-registry.ts +1 -14
- package/src/config/env.ts +8 -6
- package/src/config/llm-resolver.ts +1 -2
- package/src/config/loader.ts +13 -17
- package/src/config/profile-materialization.ts +1 -1
- package/src/config/schema.ts +1 -7
- package/src/config/schemas/call-site-catalog.ts +0 -7
- package/src/config/schemas/llm.ts +22 -27
- package/src/config/seed-inference-profiles.ts +16 -17
- package/src/config/skills.ts +2 -2
- package/src/config/sync-gated-profiles.ts +6 -24
- package/src/credential-health/credential-health-service.ts +10 -3
- package/src/daemon/approval-generators.ts +3 -3
- package/src/daemon/config-watcher.ts +2 -2
- package/src/daemon/conversation-agent-loop-handlers.ts +0 -18
- package/src/daemon/conversation-agent-loop.ts +6 -97
- package/src/daemon/conversation-process.ts +1 -1
- package/src/daemon/conversation-skill-tools.ts +4 -72
- package/src/daemon/conversation-store.ts +1 -1
- package/src/daemon/conversation-surface-state.ts +0 -33
- package/src/daemon/conversation-surfaces.ts +1 -86
- package/src/daemon/conversation-tool-setup.test.ts +1 -1
- package/src/daemon/conversation-tool-setup.ts +0 -23
- package/src/daemon/conversation.ts +3 -5
- package/src/daemon/daemon-control.ts +3 -3
- package/src/daemon/dictation-profile-store.ts +3 -3
- package/src/daemon/event-loop-watchdog.test.ts +2 -198
- package/src/daemon/event-loop-watchdog.ts +0 -185
- package/src/daemon/external-plugins-bootstrap.ts +1 -1
- package/src/daemon/first-greeting.ts +1 -1
- package/src/daemon/handlers/skills.ts +1 -1
- package/src/daemon/host-app-control-proxy.ts +1 -1
- package/src/daemon/host-cu-proxy.ts +2 -2
- package/src/daemon/identity-helpers.ts +1 -1
- package/src/daemon/lifecycle.ts +11 -15
- package/src/daemon/main.ts +1 -1
- package/src/daemon/now-scratchpad.ts +1 -1
- package/src/daemon/process-message.ts +4 -4
- package/src/daemon/profiler-run-store.ts +2 -2
- package/src/daemon/providers-setup.ts +2 -2
- package/src/daemon/shutdown-handlers.ts +0 -10
- package/src/daemon/sqlite-corruption-watchdog.test.ts +2 -142
- package/src/daemon/sqlite-corruption-watchdog.ts +17 -81
- package/src/daemon/tool-side-effects.ts +1 -1
- package/src/desktop/desktop-session-manager.ts +1 -1
- package/src/desktop/desktop-wallpaper-renderer.ts +1 -1
- package/src/heartbeat/heartbeat-service.ts +1 -1
- package/src/home/feed-writer.ts +1 -1
- package/src/home/home-greeting-cache.ts +1 -1
- package/src/home/relationship-state-writer.ts +2 -2
- package/src/hooks/__tests__/hook-live-reload.test.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/oauth-callback-url.ts +3 -3
- package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
- package/src/ipc/socket-path.ts +1 -1
- package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
- package/src/live-voice/__tests__/live-voice-vad.test.ts +1 -1
- package/src/live-voice/live-voice-session.ts +3 -66
- package/src/mcp/__tests__/effective-config.test.ts +1 -1
- package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +2 -2
- package/src/mcp/__tests__/mcp-oauth-provider.test.ts +2 -3
- package/src/mcp/__tests__/reload-signal-emission.test.ts +1 -1
- package/src/mcp/__tests__/reload-signal.test.ts +1 -1
- package/src/mcp/__tests__/workspace-mcp-config.test.ts +19 -21
- package/src/mcp/reload-signal.ts +1 -1
- package/src/mcp/workspace-mcp-config.ts +1 -23
- package/src/messaging/draft-store.ts +1 -1
- package/src/monitoring/__tests__/active-conversations.test.ts +1 -1
- package/src/monitoring/__tests__/page-cache.test.ts +1 -1
- package/src/monitoring/__tests__/stall-capture.test.ts +1 -1
- package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +1 -1
- package/src/monitoring/active-conversations.ts +1 -1
- package/src/monitoring/control.ts +1 -1
- package/src/monitoring/daemon-boot-time.ts +1 -1
- package/src/monitoring/daemon-heartbeat.ts +1 -1
- package/src/monitoring/page-cache.ts +1 -1
- package/src/monitoring/plugin-auto-update.ts +1 -7
- package/src/monitoring/plugin-source-watch.ts +1 -1
- package/src/monitoring/recovery/db.ts +1 -1
- package/src/monitoring/recovery/inflight-content.ts +1 -1
- package/src/monitoring/resource-sampler.ts +3 -14
- package/src/monitoring/stall-capture.ts +1 -1
- package/src/monitoring/worker.ts +9 -76
- package/src/monitoring/workspace-git-heartbeat.ts +1 -1
- package/src/oauth/connect-orchestrator.ts +4 -4
- package/src/permissions/checker.ts +1 -1
- package/src/permissions/workspace-policy.ts +1 -1
- package/src/persistence/__tests__/main-db-readonly-probe.ts +27 -52
- package/src/persistence/__tests__/message-content-file.test.ts +1 -1
- package/src/persistence/__tests__/slow-sync-log.test.ts +0 -2
- package/src/persistence/attachments-store.ts +1 -1
- package/src/persistence/conversation-crud.ts +1 -38
- package/src/persistence/conversation-directories.ts +1 -1
- package/src/persistence/conversation-types.ts +0 -8
- package/src/persistence/db-async-query.ts +1 -1
- package/src/persistence/db-connection.ts +11 -1
- package/src/persistence/db-init.ts +1 -1
- package/src/persistence/db-maintenance.ts +1 -1
- package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +1 -1
- package/src/persistence/embeddings/embedding-local.ts +4 -4
- package/src/persistence/embeddings/embedding-runtime-manager.ts +1 -1
- package/src/persistence/embeddings/qdrant-client.ts +1 -1
- package/src/persistence/embeddings/qdrant-manager.ts +1 -1
- package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +1 -1
- package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +1 -1
- package/src/persistence/job-handlers/cleanup.ts +8 -17
- package/src/persistence/llm-usage-store.ts +2 -229
- package/src/persistence/message-content-file.ts +1 -1
- package/src/persistence/migrations/209-strip-thinking-from-consolidated.ts +1 -1
- package/src/persistence/migrations/222-strip-placeholder-sentinels-from-messages.ts +1 -1
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/329-move-onboarding-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/330-move-auth-fallback-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/331-move-lifecycle-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/332-move-skill-loaded-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/333-create-telemetry-events-table.test.ts +7 -4
- package/src/persistence/migrations/334-backfill-telemetry-events-outbox.test.ts +13 -0
- package/src/persistence/migrations/387-drop-telemetry-tables.ts +51 -0
- package/src/persistence/migrations/__tests__/327-create-flush-checkpoints.test.ts +9 -1
- package/src/persistence/migrations/__tests__/387-drop-telemetry-tables.test.ts +79 -0
- package/src/persistence/migrations/helpers/relocation.ts +1 -1
- package/src/persistence/migrations/run-migrations.ts +1 -1
- package/src/persistence/migrations/validate-migration-state.ts +1 -1
- package/src/persistence/raw-query.ts +1 -29
- package/src/persistence/slow-sync-log.ts +0 -23
- package/src/persistence/steps.ts +2 -0
- package/src/{telemetry → persistence}/tool-audit.ts +6 -121
- package/src/plugin-api/index.ts +1 -1
- package/src/plugin-api/plugin-name-env.ts +1 -1
- package/src/plugins/__tests__/installed-plugin-dirs.test.ts +1 -1
- package/src/plugins/collect-source-versions.ts +1 -1
- package/src/plugins/defaults/channel/package.json +1 -1
- package/src/plugins/defaults/cloud-hosted/package.json +1 -1
- package/src/plugins/defaults/compaction/package.json +1 -1
- package/src/plugins/defaults/documents/package.json +1 -1
- package/src/plugins/defaults/empty-response/package.json +1 -1
- package/src/plugins/defaults/exploration-drift/package.json +1 -1
- package/src/plugins/defaults/image-fallback/package.json +1 -1
- package/src/plugins/defaults/image-recovery/package.json +1 -1
- package/src/plugins/defaults/max-tokens-continue/package.json +1 -1
- package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/db-maintenance.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +0 -82
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-skill-card.test.ts +0 -41
- package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +0 -2
- package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -52
- package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +0 -18
- package/src/plugins/defaults/memory/package.json +1 -1
- package/src/plugins/defaults/memory/paths.ts +4 -4
- package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
- package/src/plugins/defaults/memory/src/memory-v2-routes.ts +5 -5
- package/src/plugins/defaults/memory/src/memory-v3-routes.ts +0 -207
- package/src/plugins/defaults/memory/src/memory-worker-routes.ts +1 -1
- package/src/plugins/defaults/memory/startup.ts +1 -22
- package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +2 -253
- package/src/plugins/defaults/memory/v3/orchestrate.ts +5 -129
- package/src/plugins/defaults/memory/worker-control.ts +1 -1
- package/src/plugins/defaults/memory/worker.ts +2 -2
- package/src/plugins/defaults/session/package.json +1 -1
- package/src/plugins/defaults/surface-completion-nudge/package.json +1 -1
- package/src/plugins/defaults/task-progress/package.json +1 -1
- package/src/plugins/defaults/task-progress-nudge/package.json +1 -1
- package/src/plugins/defaults/title-generate/package.json +1 -1
- package/src/plugins/defaults/tool-error/package.json +1 -1
- package/src/plugins/defaults/tool-result-truncate/package.json +1 -1
- package/src/plugins/defaults/turn-context/package.json +1 -1
- package/src/plugins/defaults/workspace/injectors.ts +1 -1
- package/src/plugins/defaults/workspace/package.json +1 -1
- package/src/plugins/disabled-state.ts +1 -1
- package/src/plugins/ensure-plugin-api-shim.ts +1 -1
- package/src/plugins/ensure-shared-dep-links.ts +1 -1
- package/src/plugins/installed-plugin-dirs.ts +1 -1
- package/src/plugins/mcp-servers.ts +7 -9
- package/src/plugins/mtime-cache.ts +2 -2
- package/src/plugins/source-versions.ts +1 -1
- package/src/prompts/bootstrap-cleanup.ts +1 -1
- package/src/prompts/persona-resolver.ts +1 -1
- package/src/prompts/sections.ts +2 -2
- package/src/prompts/system-prompt.ts +10 -42
- package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +0 -37
- package/src/providers/__tests__/cadet-connection-routing.test.ts +2 -2
- package/src/providers/cadet/client.ts +1 -1
- package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -1
- package/src/providers/inference/adapter-factory.ts +1 -1
- package/src/providers/inference/backfill.ts +3 -10
- package/src/providers/inference/profile-probe.ts +1 -1
- package/src/providers/retry.ts +0 -2
- package/src/providers/types.ts +0 -7
- package/src/providers/usage-tracking.ts +1 -1
- package/src/routes/__tests__/route-host.test.ts +1 -1
- package/src/routes/control.ts +1 -1
- package/src/routes/route-host-client.ts +1 -1
- package/src/routes/worker.ts +2 -2
- package/src/runtime/agent-wake.ts +1 -1
- package/src/runtime/assistant-stream-state.ts +1 -1
- package/src/runtime/auth/token-service.ts +1 -1
- package/src/runtime/background-job-runner.ts +1 -1
- package/src/runtime/middleware/twilio-validation.ts +2 -2
- package/src/runtime/routes/__tests__/app-pin-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +1 -1
- package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +3 -33
- package/src/runtime/routes/__tests__/cloud-credits-routes.test.ts +5 -4
- package/src/runtime/routes/__tests__/cloud-invoice-routes.test.ts +4 -3
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +59 -287
- package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/deprecated-route-context.test.ts +15 -62
- package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +105 -12
- package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/monitoring-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +47 -211
- package/src/runtime/routes/__tests__/route-host-worker-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/schedule-routes-disarm-reason.test.ts +1 -1
- package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-route-dispatcher-host.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-routes-cli.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-routes-notices.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-routes-request.test.ts +1 -1
- package/src/runtime/routes/app-management-routes.ts +1 -1
- package/src/runtime/routes/attachment-routes.ts +1 -1
- package/src/runtime/routes/audit-routes.ts +1 -1
- package/src/runtime/routes/avatar-routes.ts +3 -10
- package/src/runtime/routes/cloud-routes.ts +3 -3
- package/src/runtime/routes/content-source-routes.ts +1 -1
- package/src/runtime/routes/conversation-query-routes.ts +60 -621
- package/src/runtime/routes/conversation-routes.ts +1 -38
- package/src/runtime/routes/debug-routes.ts +1 -1
- package/src/runtime/routes/deprecated-route-context.ts +5 -61
- package/src/runtime/routes/heartbeat-routes.ts +1 -1
- package/src/runtime/routes/identity-routes.ts +1 -1
- package/src/runtime/routes/index.ts +0 -6
- package/src/runtime/routes/inference-profile-session-handler.ts +3 -3
- package/src/runtime/routes/inference-profiles-routes.ts +48 -21
- package/src/runtime/routes/inference-provider-connection-routes.ts +0 -1
- package/src/runtime/routes/llm-call-sites-routes.ts +3 -3
- package/src/runtime/routes/log-export/__tests__/installed-inventory.test.ts +1 -1
- package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +1 -1
- package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +1 -1
- package/src/runtime/routes/log-export/workspace-allowlist.ts +1 -1
- package/src/runtime/routes/log-export-routes.ts +17 -15
- package/src/runtime/routes/migration-rollback-routes.ts +1 -1
- package/src/runtime/routes/migration-routes.ts +2 -3
- package/src/runtime/routes/monitoring-routes.ts +2 -2
- package/src/runtime/routes/oauth-providers.ts +5 -5
- package/src/runtime/routes/plugins-routes.ts +38 -163
- package/src/runtime/routes/profiler-routes.ts +1 -1
- package/src/runtime/routes/route-host-worker-routes.ts +1 -1
- package/src/runtime/routes/sanity-routes.ts +1 -1
- package/src/runtime/routes/schedule-routes.ts +1 -1
- package/src/runtime/routes/schedule-worker-routes.ts +1 -1
- package/src/runtime/routes/settings-routes.ts +1 -1
- package/src/runtime/routes/sounds-config-routes.ts +1 -1
- package/src/runtime/routes/surface-conversation-resolver.ts +1 -7
- package/src/runtime/routes/user-route-dispatcher.ts +1 -3
- package/src/runtime/routes/user-route-import.ts +1 -1
- package/src/runtime/routes/user-route-resolution.ts +1 -1
- package/src/runtime/routes/user-routes-cli.ts +1 -1
- package/src/runtime/routes/workspace-commit-routes.ts +1 -1
- package/src/runtime/routes/workspace-greetings.ts +1 -1
- package/src/runtime/routes/workspace-routes.ts +1 -1
- package/src/runtime/routes/workspace-utils.ts +1 -1
- package/src/runtime/sync/resource-sync-events.ts +1 -1
- package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +1 -1
- package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1 -1
- package/src/schedule/plugin-schedule-availability.ts +1 -1
- package/src/schedule/plugin-schedule-declarations.ts +1 -1
- package/src/schedule/run-script.ts +1 -1
- package/src/schedule/scheduler.ts +1 -11
- package/src/schedule/worker-control.ts +1 -1
- package/src/schedule/worker.ts +3 -3
- package/src/security/oauth2.ts +2 -2
- package/src/security/secret-allowlist.ts +1 -1
- package/src/signals/cancel.ts +1 -1
- package/src/signals/conversation-undo.ts +1 -1
- package/src/signals/emit-event.ts +1 -1
- package/src/signals/event-stream.ts +1 -1
- package/src/signals/user-message.ts +1 -1
- package/src/skills/catalog-install.ts +2 -1
- package/src/skills/clawhub.ts +1 -1
- package/src/skills/cloud-store.ts +1 -1
- package/src/skills/path-classifier.ts +1 -1
- package/src/skills/skill-history.ts +1 -1
- package/src/skills/skillssh-registry.ts +1 -1
- package/src/skills/uninstall.ts +1 -1
- package/src/skills/workspace-skill-md-signature.ts +1 -1
- package/src/subagent/manager.ts +1 -1
- package/src/theme/workspace-theme.ts +1 -1
- package/src/tools/browser/auth-cache.ts +1 -1
- package/src/tools/browser/browser-manager.ts +1 -1
- package/src/tools/browser/runtime-check.ts +1 -1
- package/src/tools/executor.ts +4 -4
- package/src/tools/filesystem/write.ts +1 -1
- package/src/tools/permission-checker.ts +2 -51
- package/src/tools/run-standalone.ts +1 -1
- package/src/tools/skills/format-input-schema.ts +1 -1
- package/src/tools/skills/load.ts +1 -1
- package/src/tools/skills/scaffold-cloud.ts +0 -32
- package/src/tools/terminal/safe-env.ts +1 -2
- package/src/tools/terminal/sanitized-bash.ts +1 -1
- package/src/tools/terminal/shell.ts +1 -1
- package/src/tools/tool-approval-handler.ts +4 -1
- package/src/tools/workflows/manage-workflows.ts +2 -2
- package/src/tools/workflows/run-workflow.test.ts +1 -1
- package/src/tools/workspace-tools/loader.ts +1 -1
- package/src/tts/synthesis-stream.ts +2 -2
- package/src/usage/attribution.ts +1 -11
- package/src/util/browser.ts +1 -1
- package/src/util/bun-runtime.ts +2 -1
- package/src/util/device-id.ts +1 -1
- package/src/util/disk-usage.ts +4 -139
- package/src/util/layout.ts +3 -3
- package/src/util/logger.ts +1 -1
- package/src/util/logs-db-path.ts +1 -1
- package/src/util/memory-db-path.ts +1 -1
- package/src/util/{platform.ts → os.ts} +5 -30
- package/src/util/process-tree.ts +19 -0
- package/src/util/sqlite3-runtime.ts +1 -1
- package/src/util/telemetry-db-path.ts +1 -1
- package/src/watcher/__tests__/engine.test.ts +0 -23
- package/src/watcher/engine.ts +0 -7
- package/src/windows-compiled-cli.ts +0 -4
- package/src/windows-compiled-worker-entry.ts +0 -6
- package/src/workflows/leaf-runner.test.ts +1 -1
- package/src/workflows/leaf-runner.ts +1 -1
- package/src/workflows/library.ts +1 -1
- package/src/workspace/adaptive-thinking-repair.ts +5 -24
- package/src/workspace/byok-default-profile-ensure.ts +24 -26
- package/src/workspace/custom-profile-ensure.ts +2 -2
- package/src/workspace/git-service.ts +1 -1
- package/src/workspace/hatched-date.ts +1 -1
- package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +2 -2
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +1 -1
- package/src/workspace/migrations/077-seed-memory-router-callsite.ts +1 -1
- package/src/workspace/migrations/registry.ts +0 -4
- package/src/workspace/turn-commit.ts +1 -1
- package/docs/activation-funnel-telemetry.md +0 -324
- package/scripts/bundled-plugin-packages.ts +0 -154
- package/scripts/generate-bundled-plugin-packages.ts +0 -29
- package/src/__tests__/activation-early-marking.test.ts +0 -114
- package/src/__tests__/auth-fallback-events-store.test.ts +0 -99
- package/src/__tests__/config-get-vision-flag.test.ts +0 -139
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +0 -400
- package/src/__tests__/internal-telemetry-routes.test.ts +0 -213
- package/src/__tests__/telemetry-routes.test.ts +0 -182
- package/src/__tests__/turn-events-store.test.ts +0 -376
- package/src/__tests__/ui-channel-variants.test.ts +0 -53
- package/src/avatar/__tests__/avatar-changed-telemetry.test.ts +0 -217
- package/src/avatar/avatar-changed-telemetry.ts +0 -128
- package/src/calls/__tests__/call-funnel-telemetry.test.ts +0 -204
- package/src/cli/commands/telemetry.help.ts +0 -27
- package/src/cli/commands/telemetry.ts +0 -83
- package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +0 -251
- package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +0 -113
- package/src/cli/lib/__tests__/plugin-marketplace.test.ts +0 -384
- package/src/cli/lib/__tests__/plugin-pin-history.test.ts +0 -164
- package/src/cli/lib/__tests__/plugins-install-offline.test.ts +0 -228
- package/src/cli/lib/bundled-marketplace.json +0 -1575
- package/src/cli/lib/bundled-plugin-packages.json +0 -827
- package/src/cli/lib/bundled-plugin-packages.ts +0 -87
- package/src/cli/lib/plugin-catalog-local.ts +0 -94
- package/src/cli/lib/plugin-pin-history.ts +0 -276
- package/src/cloud/feature-gate.ts +0 -8
- package/src/config/__tests__/cloud-rehydration.test.ts +0 -180
- package/src/config/cloud-rehydration.ts +0 -35
- package/src/daemon/__tests__/auto-profile-router.test.ts +0 -380
- package/src/daemon/auto-profile-router.ts +0 -428
- package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +0 -391
- package/src/monitoring/__tests__/db-integrity-sample.test.ts +0 -113
- package/src/monitoring/__tests__/oom-kill-reporter.test.ts +0 -374
- package/src/monitoring/db-integrity-check.ts +0 -163
- package/src/monitoring/db-integrity-sample.ts +0 -176
- package/src/monitoring/oom-kill-reporter.ts +0 -469
- package/src/onboarding/__tests__/onboarding-events-store.test.ts +0 -158
- package/src/onboarding/onboarding-events-store.ts +0 -296
- package/src/persistence/__tests__/raw-query-telemetry.test.ts +0 -76
- package/src/persistence/lifecycle-events-store.test.ts +0 -134
- package/src/persistence/lifecycle-events-store.ts +0 -110
- package/src/plugins/defaults/memory/__tests__/activation-session-store.test.ts +0 -76
- package/src/plugins/defaults/memory/activation-session-store.ts +0 -50
- package/src/plugins/defaults/memory/src/__tests__/memory-v3-gate-stats.test.ts +0 -281
- package/src/runtime/routes/auto-profile-routes.ts +0 -83
- package/src/runtime/routes/internal-telemetry-routes.ts +0 -142
- package/src/runtime/routes/telemetry-routes.ts +0 -274
- package/src/security/auth-fallback-events-store.ts +0 -57
- package/src/telemetry/__tests__/activation-funnel.test.ts +0 -95
- package/src/telemetry/__tests__/config-setting-events-store.test.ts +0 -63
- package/src/telemetry/__tests__/config-setting-snapshot.test.ts +0 -143
- package/src/telemetry/__tests__/flush-checkpoints.test.ts +0 -56
- package/src/telemetry/__tests__/live-voice-funnel.test.ts +0 -174
- package/src/telemetry/__tests__/outbox-test-harness.ts +0 -85
- package/src/telemetry/__tests__/phone-call-funnel.test.ts +0 -72
- package/src/telemetry/__tests__/telemetry-event-fixtures.ts +0 -282
- package/src/telemetry/__tests__/watchdog-events-store.test.ts +0 -71
- package/src/telemetry/activation-funnel.ts +0 -172
- package/src/telemetry/config-setting-events-store.ts +0 -40
- package/src/telemetry/config-setting-snapshot.ts +0 -170
- package/src/telemetry/flush-checkpoints.ts +0 -70
- package/src/telemetry/live-voice-funnel.ts +0 -185
- package/src/telemetry/memory-corpus-size.test.ts +0 -120
- package/src/telemetry/memory-corpus-size.ts +0 -184
- package/src/telemetry/memory-tier-reporter.test.ts +0 -195
- package/src/telemetry/memory-tier-reporter.ts +0 -130
- package/src/telemetry/phone-call-funnel.ts +0 -144
- package/src/telemetry/skill-loaded-events-store.test.ts +0 -93
- package/src/telemetry/skill-loaded-events-store.ts +0 -39
- package/src/telemetry/telemetry-event-sources.test.ts +0 -223
- package/src/telemetry/telemetry-event-sources.ts +0 -597
- package/src/telemetry/telemetry-events-outbox.test.ts +0 -375
- package/src/telemetry/telemetry-events-outbox.ts +0 -237
- package/src/telemetry/telemetry-main-db.ts +0 -48
- package/src/telemetry/telemetry-wire-source.json +0 -4
- package/src/telemetry/telemetry-wire-validation.test.ts +0 -157
- package/src/telemetry/telemetry-wire-validation.ts +0 -162
- package/src/telemetry/telemetry-wire.generated.ts +0 -483
- package/src/telemetry/tool-executed-events-store.test.ts +0 -210
- package/src/telemetry/tool-executed-events-store.ts +0 -102
- package/src/telemetry/trace-collection-policy.test.ts +0 -28
- package/src/telemetry/trace-collection-policy.ts +0 -30
- package/src/telemetry/turn-events-store.ts +0 -216
- package/src/telemetry/turn-trace-store.test.ts +0 -884
- package/src/telemetry/turn-trace-store.ts +0 -399
- package/src/telemetry/types.test.ts +0 -38
- package/src/telemetry/types.ts +0 -780
- package/src/telemetry/usage-telemetry-reporter.test.ts +0 -3445
- package/src/telemetry/usage-telemetry-reporter.ts +0 -566
- package/src/telemetry/watchdog-direct-emit.test.ts +0 -112
- package/src/telemetry/watchdog-direct-emit.ts +0 -104
- package/src/telemetry/watchdog-events-store.ts +0 -31
- package/src/tools/ui-surface/channel-variants.ts +0 -52
- package/src/watcher/__tests__/telemetry.test.ts +0 -178
- package/src/watcher/telemetry.ts +0 -93
- package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +0 -165
- package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +0 -151
- /package/src/{telemetry → persistence}/tool-usage-store.ts +0 -0
- /package/src/{telemetry → persistence}/turn-outcome.ts +0 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
|
|
2
2
|
|
|
3
|
-
import { setConfig } from "../__tests__/helpers/set-config.js";
|
|
4
3
|
import type { OwnerConsent } from "./client.js";
|
|
5
4
|
|
|
6
5
|
// ---------------------------------------------------------------------------
|
|
@@ -31,20 +30,16 @@ mock.module("./client.js", () => ({
|
|
|
31
30
|
// ---------------------------------------------------------------------------
|
|
32
31
|
|
|
33
32
|
import {
|
|
34
|
-
__setCachedShareAnalyticsForTest,
|
|
35
33
|
__setCachedShareDiagnosticsForTest,
|
|
36
|
-
__setCachedShareDiagnosticsVersionForTest,
|
|
37
34
|
getCachedShareDiagnostics,
|
|
38
|
-
getCachedShareDiagnosticsVersion,
|
|
39
|
-
getRawShareAnalytics,
|
|
40
35
|
refreshConsentCache,
|
|
41
36
|
startConsentRefresh,
|
|
42
37
|
stopConsentRefresh,
|
|
43
38
|
} from "./consent-cache.js";
|
|
44
39
|
|
|
45
40
|
/**
|
|
46
|
-
* Build a mock owner consent. Fields default to `false` so
|
|
47
|
-
*
|
|
41
|
+
* Build a mock owner consent. Fields default to `false` so diagnostics-only
|
|
42
|
+
* cases don't have to spell them out.
|
|
48
43
|
*/
|
|
49
44
|
function makeConsent(overrides: Partial<OwnerConsent> = {}): OwnerConsent {
|
|
50
45
|
return {
|
|
@@ -66,131 +61,71 @@ describe("consent-cache", () => {
|
|
|
66
61
|
beforeEach(() => {
|
|
67
62
|
mockClient = null;
|
|
68
63
|
createCallCount = 0;
|
|
69
|
-
// Legacy fail-closed opt-out marker read via getConfigReadOnly(). Default
|
|
70
|
-
// off so existing behavior is unchanged.
|
|
71
|
-
setConfig("legacyTelemetryOptOut", false);
|
|
72
64
|
// Boot state: no confirmed consent yet.
|
|
73
|
-
__setCachedShareAnalyticsForTest("unknown");
|
|
74
65
|
__setCachedShareDiagnosticsForTest("unknown");
|
|
75
|
-
__setCachedShareDiagnosticsVersionForTest("");
|
|
76
66
|
});
|
|
77
67
|
|
|
78
68
|
afterEach(async () => {
|
|
79
69
|
await stopConsentRefresh();
|
|
80
70
|
});
|
|
81
71
|
|
|
82
|
-
test("
|
|
83
|
-
expect(getRawShareAnalytics()).toBe("unknown");
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
test("no platform client available → unknown", async () => {
|
|
72
|
+
test("no cloud client available → diagnostics stay fail-closed", async () => {
|
|
87
73
|
mockClient = null;
|
|
88
74
|
await refreshConsentCache();
|
|
89
|
-
expect(
|
|
75
|
+
expect(getCachedShareDiagnostics()).toBe(false);
|
|
90
76
|
});
|
|
91
77
|
|
|
92
|
-
test("
|
|
93
|
-
|
|
94
|
-
// flush will ever drain the outbox, so record-time gates must stay
|
|
95
|
-
// closed (confirmed false) instead of accumulating rows forever.
|
|
96
|
-
__setCachedShareAnalyticsForTest(true);
|
|
78
|
+
test("cloud features disabled → diagnostics confirmed false, not unknown", async () => {
|
|
79
|
+
__setCachedShareDiagnosticsForTest("unknown");
|
|
97
80
|
process.env.CADET_DISABLE_CLOUD = "1";
|
|
98
81
|
try {
|
|
99
82
|
await refreshConsentCache();
|
|
100
83
|
} finally {
|
|
101
84
|
delete process.env.CADET_DISABLE_CLOUD;
|
|
102
85
|
}
|
|
103
|
-
expect(getRawShareAnalytics()).toBe(false);
|
|
104
86
|
expect(getCachedShareDiagnostics()).toBe(false);
|
|
105
|
-
expect(getCachedShareDiagnosticsVersion()).toBe("");
|
|
106
87
|
});
|
|
107
88
|
|
|
108
|
-
test("becomes true after a successful fetch reporting
|
|
109
|
-
mockClient = makeClient(makeConsent({
|
|
89
|
+
test("becomes true after a successful fetch reporting shareDiagnostics: true", async () => {
|
|
90
|
+
mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
|
|
110
91
|
await refreshConsentCache();
|
|
111
|
-
expect(
|
|
92
|
+
expect(getCachedShareDiagnostics()).toBe(true);
|
|
112
93
|
});
|
|
113
94
|
|
|
114
95
|
test("a null fetch keeps the last known value", async () => {
|
|
115
|
-
mockClient = makeClient(makeConsent({
|
|
96
|
+
mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
|
|
116
97
|
await refreshConsentCache();
|
|
117
|
-
expect(
|
|
98
|
+
expect(getCachedShareDiagnostics()).toBe(true);
|
|
118
99
|
|
|
119
100
|
// Transient failure: consent endpoint returns null.
|
|
120
101
|
mockClient = makeClient(null);
|
|
121
102
|
await refreshConsentCache();
|
|
122
|
-
expect(
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
test("a null fetch keeps a confirmed opt-out", async () => {
|
|
126
|
-
mockClient = makeClient(makeConsent({ shareAnalytics: false }));
|
|
127
|
-
await refreshConsentCache();
|
|
128
|
-
expect(getRawShareAnalytics()).toBe(false);
|
|
129
|
-
|
|
130
|
-
mockClient = makeClient(null);
|
|
131
|
-
await refreshConsentCache();
|
|
132
|
-
expect(getRawShareAnalytics()).toBe(false);
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
test("a null fetch keeps the boot unknown state", async () => {
|
|
136
|
-
mockClient = makeClient(null);
|
|
137
|
-
await refreshConsentCache();
|
|
138
|
-
expect(getRawShareAnalytics()).toBe("unknown");
|
|
139
|
-
expect(getCachedShareDiagnostics()).toBe(false);
|
|
103
|
+
expect(getCachedShareDiagnostics()).toBe(true);
|
|
140
104
|
});
|
|
141
105
|
|
|
142
|
-
test("a missing client demotes a prior opt-in to
|
|
143
|
-
|
|
106
|
+
test("a missing client demotes a prior diagnostics opt-in to fail-closed", async () => {
|
|
107
|
+
__setCachedShareDiagnosticsForTest(true);
|
|
144
108
|
mockClient = null;
|
|
145
109
|
await refreshConsentCache();
|
|
146
|
-
expect(
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
test("a client without a resolvable assistant identity demotes to unknown", async () => {
|
|
150
|
-
__setCachedShareAnalyticsForTest(true);
|
|
151
|
-
// Identity cleared mid-session (e.g. assistantId emptied while base URL +
|
|
152
|
-
// API key persist). getOwnerConsent must not be relied upon to preserve the
|
|
153
|
-
// prior opt-in here — losing the owner mapping is not an opt-out, but the
|
|
154
|
-
// stale opt-in must not keep riding either.
|
|
155
|
-
mockClient = makeClient(makeConsent({ shareAnalytics: true }), "");
|
|
156
|
-
await refreshConsentCache();
|
|
157
|
-
expect(getRawShareAnalytics()).toBe("unknown");
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
test("legacy opt-out marker is honored at boot, before any refresh", () => {
|
|
161
|
-
// The marker is read live from config: a workspace carrying
|
|
162
|
-
// legacyTelemetryOptOut=true must gate recording in the window between
|
|
163
|
-
// daemon start and the first consent refresh (unknown-consent recording
|
|
164
|
-
// would otherwise leak events in that window).
|
|
165
|
-
setConfig("legacyTelemetryOptOut", true);
|
|
166
|
-
expect(getRawShareAnalytics()).toBe(false);
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
test("legacy opt-out marker keeps analytics off despite platform opt-in", async () => {
|
|
170
|
-
setConfig("legacyTelemetryOptOut", true);
|
|
171
|
-
mockClient = makeClient(makeConsent({ shareAnalytics: true }));
|
|
172
|
-
await refreshConsentCache();
|
|
173
|
-
// Platform reports opt-in, but the fail-closed marker forces off. The raw
|
|
174
|
-
// accessor folds the marker into a confirmed false, not an unknown.
|
|
175
|
-
expect(getRawShareAnalytics()).toBe(false);
|
|
110
|
+
expect(getCachedShareDiagnostics()).toBe(false);
|
|
176
111
|
});
|
|
177
112
|
|
|
178
|
-
test("a
|
|
179
|
-
|
|
180
|
-
mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
|
|
113
|
+
test("a client without a resolvable assistant identity demotes diagnostics", async () => {
|
|
114
|
+
__setCachedShareDiagnosticsForTest(true);
|
|
115
|
+
mockClient = makeClient(makeConsent({ shareDiagnostics: true }), "");
|
|
181
116
|
await refreshConsentCache();
|
|
182
|
-
expect(
|
|
117
|
+
expect(getCachedShareDiagnostics()).toBe(false);
|
|
183
118
|
});
|
|
184
119
|
|
|
185
120
|
test("startConsentRefresh is idempotent and runs an immediate refresh", async () => {
|
|
186
|
-
mockClient = makeClient(makeConsent({
|
|
121
|
+
mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
|
|
187
122
|
|
|
188
123
|
startConsentRefresh();
|
|
189
124
|
startConsentRefresh(); // no-op: timer already running
|
|
190
125
|
// Let the fire-and-forget immediate refresh settle.
|
|
191
126
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
192
127
|
|
|
193
|
-
expect(
|
|
128
|
+
expect(getCachedShareDiagnostics()).toBe(true);
|
|
194
129
|
// One immediate refresh from the first call; the second is a no-op.
|
|
195
130
|
expect(createCallCount).toBe(1);
|
|
196
131
|
});
|
|
@@ -199,123 +134,9 @@ describe("consent-cache", () => {
|
|
|
199
134
|
startConsentRefresh();
|
|
200
135
|
await stopConsentRefresh();
|
|
201
136
|
// A fresh start after stop performs another immediate refresh.
|
|
202
|
-
mockClient = makeClient(makeConsent({
|
|
137
|
+
mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
|
|
203
138
|
startConsentRefresh();
|
|
204
139
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
205
|
-
expect(getRawShareAnalytics()).toBe(true);
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
// share_diagnostics tracks the same refresh as share_analytics; the
|
|
209
|
-
// client's diagnostics consent check re-reads it per report so a revocation is
|
|
210
|
-
// honored within a cycle.
|
|
211
|
-
test("diagnostics reads false at boot (unknown collapses to false)", () => {
|
|
212
|
-
expect(getCachedShareDiagnostics()).toBe(false);
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
test("diagnostics becomes true after a fetch reporting shareDiagnostics: true", async () => {
|
|
216
|
-
mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
|
|
217
|
-
await refreshConsentCache();
|
|
218
140
|
expect(getCachedShareDiagnostics()).toBe(true);
|
|
219
141
|
});
|
|
220
|
-
|
|
221
|
-
test("a later fetch reporting shareDiagnostics: false honors the revocation", async () => {
|
|
222
|
-
mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
|
|
223
|
-
await refreshConsentCache();
|
|
224
|
-
expect(getCachedShareDiagnostics()).toBe(true);
|
|
225
|
-
|
|
226
|
-
mockClient = makeClient(makeConsent({ shareDiagnostics: false }));
|
|
227
|
-
await refreshConsentCache();
|
|
228
|
-
expect(getCachedShareDiagnostics()).toBe(false);
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
test("a null diagnostics fetch keeps the last known value", async () => {
|
|
232
|
-
mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
|
|
233
|
-
await refreshConsentCache();
|
|
234
|
-
expect(getCachedShareDiagnostics()).toBe(true);
|
|
235
|
-
|
|
236
|
-
mockClient = makeClient(null);
|
|
237
|
-
await refreshConsentCache();
|
|
238
|
-
expect(getCachedShareDiagnostics()).toBe(true);
|
|
239
|
-
});
|
|
240
|
-
|
|
241
|
-
test("a missing client demotes a prior diagnostics opt-in", async () => {
|
|
242
|
-
__setCachedShareDiagnosticsForTest(true);
|
|
243
|
-
mockClient = null;
|
|
244
|
-
await refreshConsentCache();
|
|
245
|
-
expect(getCachedShareDiagnostics()).toBe(false);
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
test("a client without a resolvable assistant identity demotes diagnostics", async () => {
|
|
249
|
-
__setCachedShareDiagnosticsForTest(true);
|
|
250
|
-
mockClient = makeClient(makeConsent({ shareDiagnostics: true }), "");
|
|
251
|
-
await refreshConsentCache();
|
|
252
|
-
expect(getCachedShareDiagnostics()).toBe(false);
|
|
253
|
-
});
|
|
254
|
-
|
|
255
|
-
test("caches the accepted diagnostics-consent version from a successful fetch", async () => {
|
|
256
|
-
mockClient = makeClient(
|
|
257
|
-
makeConsent({
|
|
258
|
-
shareDiagnostics: true,
|
|
259
|
-
shareDiagnosticsAcceptedVersion: "2026-06-18",
|
|
260
|
-
}),
|
|
261
|
-
);
|
|
262
|
-
await refreshConsentCache();
|
|
263
|
-
expect(getCachedShareDiagnosticsVersion()).toBe("2026-06-18");
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
test("a missing client clears a prior cached diagnostics version", async () => {
|
|
267
|
-
__setCachedShareDiagnosticsVersionForTest("2026-06-18");
|
|
268
|
-
mockClient = null;
|
|
269
|
-
await refreshConsentCache();
|
|
270
|
-
expect(getCachedShareDiagnosticsVersion()).toBe("");
|
|
271
|
-
});
|
|
272
|
-
|
|
273
|
-
test("a client without a resolvable assistant identity clears the diagnostics version", async () => {
|
|
274
|
-
__setCachedShareDiagnosticsVersionForTest("2026-06-18");
|
|
275
|
-
mockClient = makeClient(
|
|
276
|
-
makeConsent({
|
|
277
|
-
shareDiagnostics: true,
|
|
278
|
-
shareDiagnosticsAcceptedVersion: "2026-06-18",
|
|
279
|
-
}),
|
|
280
|
-
"",
|
|
281
|
-
);
|
|
282
|
-
await refreshConsentCache();
|
|
283
|
-
expect(getCachedShareDiagnosticsVersion()).toBe("");
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
test("a null fetch keeps the last known diagnostics version", async () => {
|
|
287
|
-
mockClient = makeClient(
|
|
288
|
-
makeConsent({
|
|
289
|
-
shareDiagnostics: true,
|
|
290
|
-
shareDiagnosticsAcceptedVersion: "2026-06-18",
|
|
291
|
-
}),
|
|
292
|
-
);
|
|
293
|
-
await refreshConsentCache();
|
|
294
|
-
expect(getCachedShareDiagnosticsVersion()).toBe("2026-06-18");
|
|
295
|
-
|
|
296
|
-
mockClient = makeClient(null);
|
|
297
|
-
await refreshConsentCache();
|
|
298
|
-
expect(getCachedShareDiagnosticsVersion()).toBe("2026-06-18");
|
|
299
|
-
});
|
|
300
|
-
|
|
301
|
-
test("diagnostics accessor collapses unknown to false; raw analytics exposes the tri-state", async () => {
|
|
302
|
-
// Refresh once so the module's legacy opt-out marker reflects the
|
|
303
|
-
// beforeEach config (the marker is only re-read during a refresh).
|
|
304
|
-
mockClient = null;
|
|
305
|
-
await refreshConsentCache();
|
|
306
|
-
|
|
307
|
-
for (const state of [true, false, "unknown"] as const) {
|
|
308
|
-
__setCachedShareAnalyticsForTest(state);
|
|
309
|
-
__setCachedShareDiagnosticsForTest(state);
|
|
310
|
-
expect(getRawShareAnalytics()).toBe(state);
|
|
311
|
-
expect(getCachedShareDiagnostics()).toBe(state === true);
|
|
312
|
-
}
|
|
313
|
-
});
|
|
314
|
-
|
|
315
|
-
test("legacy opt-out marker folds the raw analytics state to false", async () => {
|
|
316
|
-
setConfig("legacyTelemetryOptOut", true);
|
|
317
|
-
mockClient = null;
|
|
318
|
-
await refreshConsentCache();
|
|
319
|
-
expect(getRawShareAnalytics()).toBe(false);
|
|
320
|
-
});
|
|
321
142
|
});
|
|
@@ -1,38 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* In-memory cache of the cloud owner's
|
|
2
|
+
* In-memory cache of the cloud owner's diagnostics consent.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* - `
|
|
6
|
-
*
|
|
7
|
-
* client diagnostics reporting),
|
|
8
|
-
* and composes the per-turn trace-collection gate alongside the accepted
|
|
9
|
-
* consent version.
|
|
10
|
-
* - `share_diagnostics_accepted_version`: the consent version the owner
|
|
11
|
-
* accepted; the disclosing-version half of the trace-collection gate (see
|
|
12
|
-
* telemetry/trace-collection-policy.ts).
|
|
4
|
+
* One value is cached from the owner-consent fetch:
|
|
5
|
+
* - `share_diagnostics`: gates crash diagnostics (read by the client
|
|
6
|
+
* diagnostics reporting).
|
|
13
7
|
*
|
|
14
|
-
* Hot-path gates (
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* value to `true`).
|
|
8
|
+
* Hot-path gates (the client diagnostics consent check) need a synchronous,
|
|
9
|
+
* I/O-free read, so this module owns the value and refreshes it periodically
|
|
10
|
+
* in the background. Consent is opt-out — an owner who never made an explicit
|
|
11
|
+
* choice reports as consented (the client maps a never-chose wire value to
|
|
12
|
+
* `true`).
|
|
20
13
|
*
|
|
21
|
-
* The
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* — diagnostics gates are deliberately fail-closed, so no raw diagnostics
|
|
29
|
-
* accessor exists.
|
|
14
|
+
* The cached value is tri-state: `true`/`false` are confirmed states from a
|
|
15
|
+
* successful cloud fetch; `"unknown"` means no confirmed state exists — boot
|
|
16
|
+
* before the first refresh, no cloud session, or no resolvable owner
|
|
17
|
+
* identity. A transient fetch failure keeps the previous value so a known
|
|
18
|
+
* opt-in is not flipped mid-session. The diagnostics accessor collapses
|
|
19
|
+
* `"unknown"` to `false` — diagnostics gates are deliberately fail-closed, so
|
|
20
|
+
* no raw diagnostics accessor exists.
|
|
30
21
|
*/
|
|
31
22
|
|
|
32
|
-
import { getConfigReadOnly } from "../config/loader.js";
|
|
33
23
|
import { getLogger } from "../util/logger.js";
|
|
34
24
|
import { CadetCloudClient } from "./client.js";
|
|
35
|
-
import { areCloudFeaturesEnabled } from "./feature-gate.js";
|
|
36
25
|
|
|
37
26
|
const log = getLogger("consent-cache");
|
|
38
27
|
|
|
@@ -41,39 +30,9 @@ const REFRESH_INTERVAL_MS = 5 * 60_000; // refresh consent every 5 min
|
|
|
41
30
|
/** Cached consent value: a confirmed boolean, or `"unknown"` when no confirmed state exists. */
|
|
42
31
|
export type ConsentState = boolean | "unknown";
|
|
43
32
|
|
|
44
|
-
let cachedShareAnalytics: ConsentState = "unknown"; // no confirmed state until first success
|
|
45
33
|
let cachedShareDiagnostics: ConsentState = "unknown"; // no confirmed state until first success
|
|
46
|
-
let cachedShareDiagnosticsVersion = ""; // "" fails the trace disclosure gate
|
|
47
|
-
// Fail-closed marker for a workspace that locally opted out of usage data
|
|
48
|
-
// before telemetry moved to platform `share_analytics` consent (migration 106).
|
|
49
|
-
// While set, telemetry stays off regardless of platform consent. Cleared by a
|
|
50
|
-
// future cross-repo reconciliation once the cloud exposes an explicit
|
|
51
|
-
// re-consent signal; not auto-cleared here. Read live from config (an
|
|
52
|
-
// in-memory cached read, safe on the hot path): a boot-time default would
|
|
53
|
-
// leave the record-time gates open between daemon start and the first
|
|
54
|
-
// consent refresh, exactly the window unknown-consent recording now keeps
|
|
55
|
-
// events flowing in.
|
|
56
|
-
function isLegacyOptedOut(): boolean {
|
|
57
|
-
try {
|
|
58
|
-
return getConfigReadOnly().legacyTelemetryOptOut === true;
|
|
59
|
-
} catch {
|
|
60
|
-
// Config not yet loaded — no marker to honor yet.
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
34
|
let refreshTimer: ReturnType<typeof setInterval> | null = null;
|
|
65
35
|
|
|
66
|
-
/**
|
|
67
|
-
* Raw tri-state `share_analytics` consent — the ONLY analytics accessor:
|
|
68
|
-
* every gate distinguishes a confirmed opt-out (`false`, the only state that
|
|
69
|
-
* drops or purges) from a not-yet-known one. The legacy fail-closed opt-out
|
|
70
|
-
* marker folds into `false` — a workspace-level opt-out is a confirmed
|
|
71
|
-
* opt-out, not an unknown. Never does I/O; hot-path safe.
|
|
72
|
-
*/
|
|
73
|
-
export function getRawShareAnalytics(): ConsentState {
|
|
74
|
-
return isLegacyOptedOut() ? false : cachedShareAnalytics;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
36
|
/**
|
|
78
37
|
* Synchronous hot-path accessor for the `share_diagnostics` consent (read
|
|
79
38
|
* by the client's diagnostics consent check). Never does I/O; returns `false` unless a successful
|
|
@@ -85,15 +44,6 @@ export function getCachedShareDiagnostics(): boolean {
|
|
|
85
44
|
return cachedShareDiagnostics === true;
|
|
86
45
|
}
|
|
87
46
|
|
|
88
|
-
/**
|
|
89
|
-
* Synchronous hot-path accessor for the owner's accepted diagnostics-consent
|
|
90
|
-
* version ("YYYY-MM-DD", or "" until a successful refresh / if never accepted).
|
|
91
|
-
* The disclosing-version half of the per-turn trace-collection gate.
|
|
92
|
-
*/
|
|
93
|
-
export function getCachedShareDiagnosticsVersion(): string {
|
|
94
|
-
return cachedShareDiagnosticsVersion;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
47
|
/**
|
|
98
48
|
* Refresh the cached consent from the cloud.
|
|
99
49
|
*
|
|
@@ -106,17 +56,6 @@ export function getCachedShareDiagnosticsVersion(): string {
|
|
|
106
56
|
* flipped off mid-session.
|
|
107
57
|
*/
|
|
108
58
|
export async function refreshConsentCache(): Promise<void> {
|
|
109
|
-
// Platform features disabled is a PERMANENT condition (config-level), not a
|
|
110
|
-
// cold-cache transient: telemetry can never ship, so confirmed-off keeps the
|
|
111
|
-
// record-time gates closed and the outbox from accumulating rows that no
|
|
112
|
-
// flush will ever drain.
|
|
113
|
-
if (!areCloudFeaturesEnabled()) {
|
|
114
|
-
setCachedShareAnalytics(false);
|
|
115
|
-
setCachedShareDiagnostics(false);
|
|
116
|
-
setCachedShareDiagnosticsVersion("");
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
59
|
const client = await CadetCloudClient.create();
|
|
121
60
|
if (!client) {
|
|
122
61
|
resetConsentToUnknown();
|
|
@@ -131,26 +70,12 @@ export async function refreshConsentCache(): Promise<void> {
|
|
|
131
70
|
|
|
132
71
|
const consent = await client.getOwnerConsent();
|
|
133
72
|
if (consent) {
|
|
134
|
-
setCachedShareAnalytics(consent.shareAnalytics);
|
|
135
73
|
setCachedShareDiagnostics(consent.shareDiagnostics);
|
|
136
|
-
setCachedShareDiagnosticsVersion(consent.shareDiagnosticsAcceptedVersion);
|
|
137
74
|
}
|
|
138
75
|
}
|
|
139
76
|
|
|
140
77
|
function resetConsentToUnknown(): void {
|
|
141
|
-
setCachedShareAnalytics("unknown");
|
|
142
78
|
setCachedShareDiagnostics("unknown");
|
|
143
|
-
setCachedShareDiagnosticsVersion("");
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
function setCachedShareAnalytics(value: ConsentState): void {
|
|
147
|
-
if (value !== cachedShareAnalytics) {
|
|
148
|
-
log.debug(
|
|
149
|
-
{ from: cachedShareAnalytics, to: value },
|
|
150
|
-
"share_analytics consent changed",
|
|
151
|
-
);
|
|
152
|
-
cachedShareAnalytics = value;
|
|
153
|
-
}
|
|
154
79
|
}
|
|
155
80
|
|
|
156
81
|
function setCachedShareDiagnostics(value: ConsentState): void {
|
|
@@ -163,16 +88,6 @@ function setCachedShareDiagnostics(value: ConsentState): void {
|
|
|
163
88
|
}
|
|
164
89
|
}
|
|
165
90
|
|
|
166
|
-
function setCachedShareDiagnosticsVersion(value: string): void {
|
|
167
|
-
if (value !== cachedShareDiagnosticsVersion) {
|
|
168
|
-
log.debug(
|
|
169
|
-
{ from: cachedShareDiagnosticsVersion, to: value },
|
|
170
|
-
"share_diagnostics_accepted_version changed",
|
|
171
|
-
);
|
|
172
|
-
cachedShareDiagnosticsVersion = value;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
91
|
/**
|
|
177
92
|
* Begin periodic consent refresh. Idempotent — a second call is a no-op while a
|
|
178
93
|
* timer is already running. Runs one immediate refresh, then every 5 minutes.
|
|
@@ -200,17 +115,7 @@ export async function stopConsentRefresh(): Promise<void> {
|
|
|
200
115
|
}
|
|
201
116
|
}
|
|
202
117
|
|
|
203
|
-
/** Test-only: override the cached analytics value without going through a refresh. */
|
|
204
|
-
export function __setCachedShareAnalyticsForTest(value: ConsentState): void {
|
|
205
|
-
cachedShareAnalytics = value;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
118
|
/** Test-only: override the cached diagnostics value without going through a refresh. */
|
|
209
119
|
export function __setCachedShareDiagnosticsForTest(value: ConsentState): void {
|
|
210
120
|
cachedShareDiagnostics = value;
|
|
211
121
|
}
|
|
212
|
-
|
|
213
|
-
/** Test-only: override the cached diagnostics-consent version directly. */
|
|
214
|
-
export function __setCachedShareDiagnosticsVersionForTest(value: string): void {
|
|
215
|
-
cachedShareDiagnosticsVersion = value;
|
|
216
|
-
}
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
import { existsSync, readFileSync } from "node:fs";
|
|
13
13
|
|
|
14
14
|
import { parseIdentityFields } from "../daemon/handlers/identity.js";
|
|
15
|
+
import { getWorkspacePromptPath } from "../util/layout.js";
|
|
15
16
|
import { getLogger } from "../util/logger.js";
|
|
16
|
-
import { getWorkspacePromptPath } from "../util/platform.js";
|
|
17
17
|
import { createCloudPatchQueue } from "./cloud-patch-queue.js";
|
|
18
18
|
|
|
19
19
|
const log = getLogger("sync-identity");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { describe, expect, test } from "bun:test";
|
|
3
3
|
|
|
4
|
-
import { getWorkspaceConfigPath } from "../../util/
|
|
4
|
+
import { getWorkspaceConfigPath } from "../../util/layout.js";
|
|
5
5
|
import { loadRawConfig, saveRawConfig } from "../loader.js";
|
|
6
6
|
import { AssistantConfigSchema } from "../schema.js";
|
|
7
7
|
import { AutoArchiveConfigSchema } from "../schemas/conversations.js";
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { afterEach, beforeEach, describe, expect, test } from "bun:test";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { useFaultableSecureKeyMap } from "../../__tests__/helpers/secure-keys.js";
|
|
4
|
+
import { credentialKey } from "../../security/credential-key.js";
|
|
4
5
|
import {
|
|
6
|
+
getCloudAssistantId,
|
|
5
7
|
getCloudBaseUrl,
|
|
6
8
|
setCloudAssistantId,
|
|
7
9
|
setCloudOrganizationId,
|
|
8
10
|
setCloudUserId,
|
|
9
11
|
} from "../env.js";
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
const { setUnreachableKey } = useFaultableSecureKeyMap();
|
|
12
14
|
const {
|
|
13
15
|
_resetCloudIdentityEnsureForTests,
|
|
16
|
+
ensureCloudIdentityIds,
|
|
14
17
|
fetchCloudIdentityIds,
|
|
15
18
|
CLOUD_IDENTITY_VALIDATE_PATH,
|
|
16
19
|
resolveCloudAssistantId,
|
|
@@ -306,3 +309,13 @@ describe("resolveCloudAssistantId", () => {
|
|
|
306
309
|
expect(fetchCalls).toHaveLength(1);
|
|
307
310
|
});
|
|
308
311
|
});
|
|
312
|
+
|
|
313
|
+
describe("ensureCloudIdentityIds", () => {
|
|
314
|
+
test("an unreachable credential store is non-fatal — identity stays unbound", async () => {
|
|
315
|
+
process.env.CADET_PLATFORM_URL = BASE_URL;
|
|
316
|
+
setUnreachableKey(credentialKey("cadet", "assistant_api_key"));
|
|
317
|
+
|
|
318
|
+
await expect(ensureCloudIdentityIds()).resolves.toBeUndefined();
|
|
319
|
+
expect(getCloudAssistantId()).toBe("");
|
|
320
|
+
});
|
|
321
|
+
});
|
|
@@ -19,7 +19,7 @@ import { join } from "node:path";
|
|
|
19
19
|
import { afterEach, beforeEach, describe, expect, test } from "bun:test";
|
|
20
20
|
|
|
21
21
|
import { getDefaultPluginSkillRoots } from "../../plugins/defaults/main.js";
|
|
22
|
-
import { getWorkspacePluginsDir } from "../../util/
|
|
22
|
+
import { getWorkspacePluginsDir } from "../../util/layout.js";
|
|
23
23
|
import {
|
|
24
24
|
discoverDefaultPluginResidentSkills,
|
|
25
25
|
discoverPluginResidentSkills,
|