@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,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* When IS_CLOUD=true and no config.json exists yet,
|
|
2
|
+
* When IS_CLOUD=true and no config.json exists yet, getConfig() must
|
|
3
3
|
* write all managed-capable service modes as "managed" instead of the
|
|
4
4
|
* per-service schema default. When IS_CLOUD is absent/false, or when
|
|
5
5
|
* config.json already exists, the Zod schema defaults and existing values
|
|
@@ -38,7 +38,7 @@ afterAll(() => {
|
|
|
38
38
|
mock.restore();
|
|
39
39
|
});
|
|
40
40
|
|
|
41
|
-
import {
|
|
41
|
+
import { getConfig, invalidateConfigCache } from "../config/loader.js";
|
|
42
42
|
|
|
43
43
|
// ---------------------------------------------------------------------------
|
|
44
44
|
// Helpers
|
|
@@ -135,7 +135,7 @@ describe("cloud-managed config defaults", () => {
|
|
|
135
135
|
test("IS_CLOUD=true, no config file → all 6 cloud service modes written as 'managed', image-generation provider written as 'cadet'", () => {
|
|
136
136
|
process.env.IS_CLOUD = "true";
|
|
137
137
|
|
|
138
|
-
|
|
138
|
+
getConfig();
|
|
139
139
|
|
|
140
140
|
expect(existsSync(CONFIG_PATH)).toBe(true);
|
|
141
141
|
const written = readConfig() as { services?: Record<string, unknown> };
|
|
@@ -161,7 +161,7 @@ describe("cloud-managed config defaults", () => {
|
|
|
161
161
|
test("IS_CLOUD=false, no config file → service modes follow schema defaults (your-own except google/notion-oauth which are managed)", () => {
|
|
162
162
|
process.env.IS_CLOUD = "false";
|
|
163
163
|
|
|
164
|
-
|
|
164
|
+
getConfig();
|
|
165
165
|
|
|
166
166
|
expect(existsSync(CONFIG_PATH)).toBe(true);
|
|
167
167
|
const written = readConfig() as { services?: Record<string, unknown> };
|
|
@@ -178,7 +178,7 @@ describe("cloud-managed config defaults", () => {
|
|
|
178
178
|
test("IS_CLOUD unset, no config file → service modes follow schema defaults (your-own except google/notion-oauth which are managed)", () => {
|
|
179
179
|
delete process.env.IS_CLOUD;
|
|
180
180
|
|
|
181
|
-
|
|
181
|
+
getConfig();
|
|
182
182
|
|
|
183
183
|
expect(existsSync(CONFIG_PATH)).toBe(true);
|
|
184
184
|
const written = readConfig() as { services?: Record<string, unknown> };
|
|
@@ -209,7 +209,7 @@ describe("cloud-managed config defaults", () => {
|
|
|
209
209
|
) + "\n",
|
|
210
210
|
);
|
|
211
211
|
|
|
212
|
-
const config =
|
|
212
|
+
const config = getConfig();
|
|
213
213
|
|
|
214
214
|
const written = readConfig() as { services?: Record<string, unknown> };
|
|
215
215
|
expect(written.services).toBeDefined();
|
|
@@ -246,7 +246,7 @@ describe("cloud-managed config defaults", () => {
|
|
|
246
246
|
) + "\n",
|
|
247
247
|
);
|
|
248
248
|
|
|
249
|
-
const config =
|
|
249
|
+
const config = getConfig();
|
|
250
250
|
|
|
251
251
|
const written = readConfig() as { services?: Record<string, unknown> };
|
|
252
252
|
expect(written.services).toBeDefined();
|
|
@@ -258,7 +258,7 @@ describe("cloud-managed config defaults", () => {
|
|
|
258
258
|
|
|
259
259
|
test("IS_CLOUD=true, config file exists without a services key → in-memory config has all managed modes", () => {
|
|
260
260
|
// Regression guard for the cloud-managed boot order: by the time
|
|
261
|
-
// `
|
|
261
|
+
// `getConfig()` runs, lifecycle steps such as `seedInferenceProfiles`
|
|
262
262
|
// have already written `config.json` (with `llm.profiles` etc.), so
|
|
263
263
|
// `configFileExisted` is true even on a brand-new cloud-managed
|
|
264
264
|
// assistant. Deployment-context defaults must still be applied to the
|
|
@@ -281,7 +281,7 @@ describe("cloud-managed config defaults", () => {
|
|
|
281
281
|
) + "\n",
|
|
282
282
|
);
|
|
283
283
|
|
|
284
|
-
const config =
|
|
284
|
+
const config = getConfig();
|
|
285
285
|
|
|
286
286
|
// In-memory config has the deployment-context defaults applied for the
|
|
287
287
|
// missing service-mode fields.
|
|
@@ -320,7 +320,7 @@ describe("cloud-managed config defaults", () => {
|
|
|
320
320
|
) + "\n",
|
|
321
321
|
);
|
|
322
322
|
|
|
323
|
-
const config =
|
|
323
|
+
const config = getConfig();
|
|
324
324
|
|
|
325
325
|
const imageGen = (
|
|
326
326
|
config.services as unknown as Record<
|
|
@@ -355,7 +355,7 @@ describe("cloud-managed config defaults", () => {
|
|
|
355
355
|
) + "\n",
|
|
356
356
|
);
|
|
357
357
|
|
|
358
|
-
const config =
|
|
358
|
+
const config = getConfig();
|
|
359
359
|
|
|
360
360
|
for (const svc of SCHEMA_YOUR_OWN_DEFAULT_SERVICES) {
|
|
361
361
|
expect(
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* hand-edited to invalid JSON) is quarantined by the loader, which
|
|
4
4
|
* logs an error with a remediation hint and falls through to the
|
|
5
5
|
* default-config path so startup proceeds. These tests verify that
|
|
6
|
-
*
|
|
6
|
+
* getConfig() / loadRawConfig() never throw on corrupt input, and
|
|
7
7
|
* that the corrupt file is preserved for debugging.
|
|
8
8
|
*/
|
|
9
9
|
|
|
@@ -19,8 +19,8 @@ import { join } from "node:path";
|
|
|
19
19
|
import { afterEach, beforeEach, describe, expect, test } from "bun:test";
|
|
20
20
|
|
|
21
21
|
import {
|
|
22
|
+
getConfig,
|
|
22
23
|
invalidateConfigCache,
|
|
23
|
-
loadConfig,
|
|
24
24
|
loadRawConfig,
|
|
25
25
|
} from "../config/loader.js";
|
|
26
26
|
|
|
@@ -63,7 +63,7 @@ function listQuarantinedFiles(): string[] {
|
|
|
63
63
|
// Tests
|
|
64
64
|
// ---------------------------------------------------------------------------
|
|
65
65
|
|
|
66
|
-
describe("
|
|
66
|
+
describe("getConfig corrupt-file recovery", () => {
|
|
67
67
|
beforeEach(() => {
|
|
68
68
|
resetWorkspace();
|
|
69
69
|
invalidateConfigCache();
|
|
@@ -78,7 +78,7 @@ describe("loadConfig corrupt-file recovery", () => {
|
|
|
78
78
|
writeFileSync(CONFIG_PATH, '{"provider": "anthropic", "mo');
|
|
79
79
|
|
|
80
80
|
// Must not throw — the daemon must never block startup on corrupt config.
|
|
81
|
-
const config =
|
|
81
|
+
const config = getConfig();
|
|
82
82
|
|
|
83
83
|
// Defaults loaded — config is populated through the Zod schema.
|
|
84
84
|
expect(config).toBeDefined();
|
|
@@ -102,7 +102,7 @@ describe("loadConfig corrupt-file recovery", () => {
|
|
|
102
102
|
JSON.stringify({ provider: "anthropic", model: "claude-opus-4-7" }),
|
|
103
103
|
);
|
|
104
104
|
|
|
105
|
-
const config =
|
|
105
|
+
const config = getConfig();
|
|
106
106
|
expect(config).toBeDefined();
|
|
107
107
|
|
|
108
108
|
// No quarantine file for valid JSON.
|
|
@@ -114,7 +114,7 @@ describe("loadConfig corrupt-file recovery", () => {
|
|
|
114
114
|
test("does not re-quarantine existing quarantine files on subsequent startups", () => {
|
|
115
115
|
// First startup: corrupt config is quarantined.
|
|
116
116
|
writeFileSync(CONFIG_PATH, "}{not json");
|
|
117
|
-
|
|
117
|
+
getConfig();
|
|
118
118
|
|
|
119
119
|
const firstBatch = listQuarantinedFiles();
|
|
120
120
|
expect(firstBatch).toHaveLength(1);
|
|
@@ -123,7 +123,7 @@ describe("loadConfig corrupt-file recovery", () => {
|
|
|
123
123
|
// the quarantine on the previous load, so there IS now a valid config.json
|
|
124
124
|
// on disk — no second quarantine should occur).
|
|
125
125
|
invalidateConfigCache();
|
|
126
|
-
|
|
126
|
+
getConfig();
|
|
127
127
|
|
|
128
128
|
// Still exactly one quarantined file — the loader did not re-rename a
|
|
129
129
|
// pristine or already-quarantined file.
|
|
@@ -133,7 +133,7 @@ describe("loadConfig corrupt-file recovery", () => {
|
|
|
133
133
|
|
|
134
134
|
test("quarantine filenames are filesystem-safe (no colons)", () => {
|
|
135
135
|
writeFileSync(CONFIG_PATH, "not-valid-json");
|
|
136
|
-
|
|
136
|
+
getConfig();
|
|
137
137
|
|
|
138
138
|
const quarantined = listQuarantinedFiles();
|
|
139
139
|
expect(quarantined).toHaveLength(1);
|
|
@@ -149,7 +149,7 @@ describe("loadConfig corrupt-file recovery", () => {
|
|
|
149
149
|
// ---------------------------------------------------------------------------
|
|
150
150
|
// Shape-mismatch quarantine — same JSON.parse caveat as `loadRawConfig`.
|
|
151
151
|
// Without an `isPlainObject` check, downstream code (e.g. the cloud-Gemini
|
|
152
|
-
// `setNestedValue` block in `
|
|
152
|
+
// `setNestedValue` block in `getConfig`) would TypeError on `null` or
|
|
153
153
|
// primitive `fileConfig`, and only the broad try/catch around the migration
|
|
154
154
|
// saved startup. Treating the wrong-shape case as a parse error here moves
|
|
155
155
|
// the boundary check to the loader so callers don't have to defend.
|
|
@@ -167,7 +167,7 @@ describe("loadConfig corrupt-file recovery", () => {
|
|
|
167
167
|
writeFileSync(CONFIG_PATH, jsonText);
|
|
168
168
|
|
|
169
169
|
// Must not throw — daemon startup contract.
|
|
170
|
-
const config =
|
|
170
|
+
const config = getConfig();
|
|
171
171
|
|
|
172
172
|
// Defaults loaded — config is populated through the Zod schema.
|
|
173
173
|
expect(config).toBeDefined();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* When
|
|
2
|
+
* When getConfig()/loadRawConfig() quarantines a corrupt config.json, it
|
|
3
3
|
* writes a small JSON sentinel to <workspace>/data/config-quarantine-notice.json
|
|
4
4
|
* recording the event. The per-turn `config-quarantine-notice` injector reads
|
|
5
5
|
* that sentinel and surfaces the reset to the agent — it's agent-visible
|
|
@@ -23,10 +23,10 @@ import { afterEach, beforeEach, describe, expect, test } from "bun:test";
|
|
|
23
23
|
|
|
24
24
|
import {
|
|
25
25
|
_writeQuarantineNotice,
|
|
26
|
+
getConfig,
|
|
26
27
|
invalidateConfigCache,
|
|
27
|
-
loadConfig,
|
|
28
28
|
} from "../config/loader.js";
|
|
29
|
-
import { getConfigQuarantineNoticePath } from "../util/
|
|
29
|
+
import { getConfigQuarantineNoticePath } from "../util/layout.js";
|
|
30
30
|
|
|
31
31
|
// ---------------------------------------------------------------------------
|
|
32
32
|
// Helpers
|
|
@@ -89,7 +89,7 @@ describe("config-quarantine notice sentinel", () => {
|
|
|
89
89
|
test("writes a sentinel recording the quarantine when config.json is corrupt", () => {
|
|
90
90
|
writeFileSync(CONFIG_PATH, '{"provider": "anthropic", "mo');
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
getConfig();
|
|
93
93
|
|
|
94
94
|
const [quarantinedName] = listQuarantinedFiles();
|
|
95
95
|
expect(quarantinedName).toBeDefined();
|
|
@@ -106,7 +106,7 @@ describe("config-quarantine notice sentinel", () => {
|
|
|
106
106
|
test("a second quarantine overwrites the sentinel with the latest event", () => {
|
|
107
107
|
// First corruption round.
|
|
108
108
|
writeFileSync(CONFIG_PATH, '{"partial": ');
|
|
109
|
-
|
|
109
|
+
getConfig();
|
|
110
110
|
invalidateConfigCache();
|
|
111
111
|
|
|
112
112
|
const firstNotice = readNotice();
|
|
@@ -120,7 +120,7 @@ describe("config-quarantine notice sentinel", () => {
|
|
|
120
120
|
/* spin */
|
|
121
121
|
}
|
|
122
122
|
writeFileSync(CONFIG_PATH, "still not json");
|
|
123
|
-
|
|
123
|
+
getConfig();
|
|
124
124
|
|
|
125
125
|
const quarantined = listQuarantinedFiles().sort();
|
|
126
126
|
expect(quarantined).toHaveLength(2);
|
|
@@ -139,7 +139,7 @@ describe("config-quarantine notice sentinel", () => {
|
|
|
139
139
|
JSON.stringify({ provider: "anthropic", model: "claude-opus-4-7" }),
|
|
140
140
|
);
|
|
141
141
|
|
|
142
|
-
|
|
142
|
+
getConfig();
|
|
143
143
|
|
|
144
144
|
expect(listQuarantinedFiles()).toHaveLength(0);
|
|
145
145
|
expect(existsSync(NOTICE_PATH)).toBe(false);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* When
|
|
2
|
+
* When getConfig() parses config.json as valid JSON but schema validation
|
|
3
3
|
* fails so hard that the loader falls back to *full* defaults (via
|
|
4
4
|
* cloneDefaultConfig), it writes a JSON sentinel to
|
|
5
5
|
* <workspace>/data/config-validation-reset-notice.json recording the reset.
|
|
@@ -25,11 +25,11 @@ import { join } from "node:path";
|
|
|
25
25
|
import { afterEach, beforeEach, describe, expect, test } from "bun:test";
|
|
26
26
|
|
|
27
27
|
import {
|
|
28
|
+
getConfig,
|
|
28
29
|
invalidateConfigCache,
|
|
29
|
-
loadConfig,
|
|
30
30
|
withSuppressedConfigDiskWritesSync,
|
|
31
31
|
} from "../config/loader.js";
|
|
32
|
-
import { getConfigValidationResetNoticePath } from "../util/
|
|
32
|
+
import { getConfigValidationResetNoticePath } from "../util/layout.js";
|
|
33
33
|
|
|
34
34
|
const WORKSPACE_DIR = process.env.CADET_WORKSPACE_DIR!;
|
|
35
35
|
const CONFIG_PATH = join(WORKSPACE_DIR, "config.json");
|
|
@@ -101,7 +101,7 @@ describe("config-validation-reset notice sentinel", () => {
|
|
|
101
101
|
test("writes a sentinel when validation falls back to full defaults", () => {
|
|
102
102
|
writeFullResetConfig();
|
|
103
103
|
|
|
104
|
-
|
|
104
|
+
getConfig();
|
|
105
105
|
|
|
106
106
|
expect(existsSync(NOTICE_PATH)).toBe(true);
|
|
107
107
|
const notice = readNotice();
|
|
@@ -119,7 +119,7 @@ describe("config-validation-reset notice sentinel", () => {
|
|
|
119
119
|
JSON.stringify({ provider: "anthropic", model: "claude-opus-4-7" }),
|
|
120
120
|
);
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
getConfig();
|
|
123
123
|
|
|
124
124
|
expect(existsSync(NOTICE_PATH)).toBe(false);
|
|
125
125
|
});
|
|
@@ -133,7 +133,7 @@ describe("config-validation-reset notice sentinel", () => {
|
|
|
133
133
|
writeFullResetConfig();
|
|
134
134
|
invalidateConfigCache();
|
|
135
135
|
|
|
136
|
-
withSuppressedConfigDiskWritesSync(() =>
|
|
136
|
+
withSuppressedConfigDiskWritesSync(() => getConfig());
|
|
137
137
|
|
|
138
138
|
expect(existsSync(NOTICE_PATH)).toBe(true);
|
|
139
139
|
expect(readNotice().invalidPaths).toContain("llm.activeProfile");
|
|
@@ -142,7 +142,7 @@ describe("config-validation-reset notice sentinel", () => {
|
|
|
142
142
|
test("clears the sentinel under suppressed disk writes when the fix lands (config-set path)", () => {
|
|
143
143
|
// First cause a reset so the sentinel exists.
|
|
144
144
|
writeFullResetConfig();
|
|
145
|
-
|
|
145
|
+
getConfig();
|
|
146
146
|
expect(existsSync(NOTICE_PATH)).toBe(true);
|
|
147
147
|
invalidateConfigCache();
|
|
148
148
|
|
|
@@ -154,7 +154,7 @@ describe("config-validation-reset notice sentinel", () => {
|
|
|
154
154
|
CONFIG_PATH,
|
|
155
155
|
JSON.stringify({ provider: "anthropic", model: "claude-opus-4-7" }),
|
|
156
156
|
);
|
|
157
|
-
withSuppressedConfigDiskWritesSync(() =>
|
|
157
|
+
withSuppressedConfigDiskWritesSync(() => getConfig());
|
|
158
158
|
|
|
159
159
|
expect(existsSync(NOTICE_PATH)).toBe(false);
|
|
160
160
|
});
|
|
@@ -184,7 +184,7 @@ describe("config-validation-reset notice sentinel", () => {
|
|
|
184
184
|
),
|
|
185
185
|
);
|
|
186
186
|
|
|
187
|
-
const config =
|
|
187
|
+
const config = getConfig();
|
|
188
188
|
|
|
189
189
|
expect(existsSync(NOTICE_PATH)).toBe(false);
|
|
190
190
|
expect(config.llm.activeProfile).toBe("glm-default");
|
|
@@ -197,7 +197,7 @@ describe("config-validation-reset notice sentinel", () => {
|
|
|
197
197
|
test("a later clean load clears a stale reset sentinel", () => {
|
|
198
198
|
// First: force a reset so the sentinel exists.
|
|
199
199
|
writeFullResetConfig();
|
|
200
|
-
|
|
200
|
+
getConfig();
|
|
201
201
|
expect(existsSync(NOTICE_PATH)).toBe(true);
|
|
202
202
|
invalidateConfigCache();
|
|
203
203
|
|
|
@@ -207,7 +207,7 @@ describe("config-validation-reset notice sentinel", () => {
|
|
|
207
207
|
CONFIG_PATH,
|
|
208
208
|
JSON.stringify({ provider: "anthropic", model: "claude-opus-4-7" }),
|
|
209
209
|
);
|
|
210
|
-
|
|
210
|
+
getConfig();
|
|
211
211
|
|
|
212
212
|
expect(existsSync(NOTICE_PATH)).toBe(false);
|
|
213
213
|
});
|
|
@@ -30,7 +30,7 @@ function ensureTestDir(): void {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
import {
|
|
33
|
+
import { getConfig, invalidateConfigCache } from "../config/loader.js";
|
|
34
34
|
import {
|
|
35
35
|
AssistantConfigSchema,
|
|
36
36
|
DEFAULT_ELEVENLABS_VOICE_ID,
|
|
@@ -2360,10 +2360,10 @@ describe("032-tts-provider-unification migration", () => {
|
|
|
2360
2360
|
});
|
|
2361
2361
|
|
|
2362
2362
|
// ---------------------------------------------------------------------------
|
|
2363
|
-
// Tests: loader integration (config file ->
|
|
2363
|
+
// Tests: loader integration (config file -> getConfig with fallback)
|
|
2364
2364
|
// ---------------------------------------------------------------------------
|
|
2365
2365
|
|
|
2366
|
-
describe("
|
|
2366
|
+
describe("getConfig with schema validation", () => {
|
|
2367
2367
|
beforeEach(() => {
|
|
2368
2368
|
// Keep WORKSPACE_DIR and logs in place to avoid racing async logger stream init.
|
|
2369
2369
|
ensureTestDir();
|
|
@@ -2397,7 +2397,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2397
2397
|
},
|
|
2398
2398
|
},
|
|
2399
2399
|
});
|
|
2400
|
-
const config =
|
|
2400
|
+
const config = getConfig();
|
|
2401
2401
|
expect(config.llm.callSites?.mainAgent?.provider).toBe("openai");
|
|
2402
2402
|
expect(config.llm.callSites?.mainAgent?.model).toBe("gpt-4");
|
|
2403
2403
|
expect(config.llm.callSites?.mainAgent?.maxTokens).toBe(4096);
|
|
@@ -2405,7 +2405,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2405
2405
|
|
|
2406
2406
|
test("applies defaults for missing fields", () => {
|
|
2407
2407
|
writeConfig({});
|
|
2408
|
-
const config =
|
|
2408
|
+
const config = getConfig();
|
|
2409
2409
|
expect(config.llm.profiles).toEqual({});
|
|
2410
2410
|
expect(config.llm.profileOrder).toEqual([]);
|
|
2411
2411
|
expect(config.llm.callSites).toEqual({});
|
|
@@ -2425,7 +2425,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2425
2425
|
callSites: { mainAgent: { maxTokens: 4096 } },
|
|
2426
2426
|
},
|
|
2427
2427
|
});
|
|
2428
|
-
const config =
|
|
2428
|
+
const config = getConfig();
|
|
2429
2429
|
expect(config.llm.default).toEqual({
|
|
2430
2430
|
provider: "openai",
|
|
2431
2431
|
model: "gpt-4",
|
|
@@ -2442,7 +2442,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2442
2442
|
profiles: { custom: { provider: "unknown-provider", model: "gpt-4" } },
|
|
2443
2443
|
},
|
|
2444
2444
|
});
|
|
2445
|
-
const config =
|
|
2445
|
+
const config = getConfig();
|
|
2446
2446
|
expect(config.llm.profiles.custom?.provider).toBe("unknown-provider");
|
|
2447
2447
|
expect(config.llm.profiles.custom?.model).toBe("gpt-4");
|
|
2448
2448
|
});
|
|
@@ -2451,7 +2451,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2451
2451
|
writeConfig({
|
|
2452
2452
|
llm: { callSites: { mainAgent: { maxTokens: -100, model: "gpt-4" } } },
|
|
2453
2453
|
});
|
|
2454
|
-
const config =
|
|
2454
|
+
const config = getConfig();
|
|
2455
2455
|
expect(config.llm.callSites?.mainAgent?.maxTokens).toBeUndefined();
|
|
2456
2456
|
expect(config.llm.callSites?.mainAgent?.model).toBe("gpt-4");
|
|
2457
2457
|
});
|
|
@@ -2460,7 +2460,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2460
2460
|
writeConfig({
|
|
2461
2461
|
timeouts: { shellDefaultTimeoutSec: -5, shellMaxTimeoutSec: "bad" },
|
|
2462
2462
|
});
|
|
2463
|
-
const config =
|
|
2463
|
+
const config = getConfig();
|
|
2464
2464
|
expect(config.timeouts.shellDefaultTimeoutSec).toBe(120);
|
|
2465
2465
|
expect(config.timeouts.shellMaxTimeoutSec).toBe(600);
|
|
2466
2466
|
expect(config.timeouts.permissionTimeoutSec).toBe(300);
|
|
@@ -2479,7 +2479,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2479
2479
|
},
|
|
2480
2480
|
},
|
|
2481
2481
|
});
|
|
2482
|
-
const config =
|
|
2482
|
+
const config = getConfig();
|
|
2483
2483
|
expect(config.llm.callSites?.mainAgent?.provider).toBe("openai");
|
|
2484
2484
|
expect(config.llm.callSites?.mainAgent?.model).toBe("gpt-4");
|
|
2485
2485
|
expect(config.llm.callSites?.mainAgent?.thinking?.enabled).toBe(true);
|
|
@@ -2487,7 +2487,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2487
2487
|
});
|
|
2488
2488
|
|
|
2489
2489
|
test("handles no config file", () => {
|
|
2490
|
-
const config =
|
|
2490
|
+
const config = getConfig();
|
|
2491
2491
|
expect(config.llm.profiles).toEqual({});
|
|
2492
2492
|
expect(config.llm.profileSession.defaultTtlSeconds).toBe(1800);
|
|
2493
2493
|
});
|
|
@@ -2496,7 +2496,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2496
2496
|
writeConfig({
|
|
2497
2497
|
timeouts: { shellDefaultTimeoutSec: 30 },
|
|
2498
2498
|
});
|
|
2499
|
-
const config =
|
|
2499
|
+
const config = getConfig();
|
|
2500
2500
|
expect(config.timeouts.shellDefaultTimeoutSec).toBe(30);
|
|
2501
2501
|
expect(config.timeouts.shellMaxTimeoutSec).toBe(600);
|
|
2502
2502
|
expect(config.timeouts.permissionTimeoutSec).toBe(300);
|
|
@@ -2514,7 +2514,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2514
2514
|
},
|
|
2515
2515
|
},
|
|
2516
2516
|
});
|
|
2517
|
-
const config =
|
|
2517
|
+
const config = getConfig();
|
|
2518
2518
|
expect(
|
|
2519
2519
|
config.llm.callSites?.mainAgent?.contextWindow?.targetBudgetRatio,
|
|
2520
2520
|
).toBeUndefined();
|
|
@@ -2527,13 +2527,13 @@ describe("loadConfig with schema validation", () => {
|
|
|
2527
2527
|
writeConfig({
|
|
2528
2528
|
rateLimit: { maxRequestsPerMinute: -1 },
|
|
2529
2529
|
});
|
|
2530
|
-
const config =
|
|
2530
|
+
const config = getConfig();
|
|
2531
2531
|
expect(config.rateLimit.maxRequestsPerMinute).toBe(0);
|
|
2532
2532
|
});
|
|
2533
2533
|
|
|
2534
2534
|
test("falls back for invalid auditLog.retentionDays", () => {
|
|
2535
2535
|
writeConfig({ auditLog: { retentionDays: -7 } });
|
|
2536
|
-
const config =
|
|
2536
|
+
const config = getConfig();
|
|
2537
2537
|
expect(config.auditLog.retentionDays).toBe(0);
|
|
2538
2538
|
});
|
|
2539
2539
|
|
|
@@ -2543,7 +2543,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2543
2543
|
writeConfig({
|
|
2544
2544
|
calls: { enabled: false, maxDurationSeconds: 600 },
|
|
2545
2545
|
});
|
|
2546
|
-
const config =
|
|
2546
|
+
const config = getConfig();
|
|
2547
2547
|
expect(config.calls.enabled).toBe(false);
|
|
2548
2548
|
expect(config.calls.maxDurationSeconds).toBe(600);
|
|
2549
2549
|
expect(config.calls.userConsultTimeoutSeconds).toBe(120);
|
|
@@ -2552,7 +2552,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2552
2552
|
|
|
2553
2553
|
test("falls back for invalid calls.provider", () => {
|
|
2554
2554
|
writeConfig({ calls: { provider: "vonage" } });
|
|
2555
|
-
const config =
|
|
2555
|
+
const config = getConfig();
|
|
2556
2556
|
expect(config.calls.provider).toBe("twilio");
|
|
2557
2557
|
});
|
|
2558
2558
|
|
|
@@ -2565,7 +2565,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2565
2565
|
llm: { callSites: { mainAgent: { maxTokens: 4096 } } },
|
|
2566
2566
|
filing: { activeHoursStart: 8 },
|
|
2567
2567
|
});
|
|
2568
|
-
const config =
|
|
2568
|
+
const config = getConfig();
|
|
2569
2569
|
expect(config.llm.callSites?.mainAgent?.maxTokens).toBe(4096);
|
|
2570
2570
|
expect(config.filing.activeHoursStart).toBeNull();
|
|
2571
2571
|
expect(config.filing.activeHoursEnd).toBeNull();
|
|
@@ -2579,7 +2579,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2579
2579
|
llm: { callSites: { mainAgent: { maxTokens: 4096 } } },
|
|
2580
2580
|
heartbeat: { activeHoursStart: null },
|
|
2581
2581
|
});
|
|
2582
|
-
const config =
|
|
2582
|
+
const config = getConfig();
|
|
2583
2583
|
expect(config.llm.callSites?.mainAgent?.maxTokens).toBe(4096);
|
|
2584
2584
|
expect(config.heartbeat.activeHoursStart).toBe(8);
|
|
2585
2585
|
expect(config.heartbeat.activeHoursEnd).toBe(22);
|
|
@@ -2595,7 +2595,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2595
2595
|
llm: { callSites: { mainAgent: { maxTokens: 4096 } } },
|
|
2596
2596
|
heartbeat: { activeHoursStart: null, activeHoursEnd: 8 },
|
|
2597
2597
|
});
|
|
2598
|
-
const config =
|
|
2598
|
+
const config = getConfig();
|
|
2599
2599
|
expect(config.llm.callSites?.mainAgent?.maxTokens).toBe(4096);
|
|
2600
2600
|
expect(config.heartbeat.activeHoursStart).toBe(8);
|
|
2601
2601
|
expect(config.heartbeat.activeHoursEnd).toBe(22);
|
|
@@ -2607,7 +2607,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2607
2607
|
llm: { callSites: { mainAgent: { maxTokens: 4096 } } },
|
|
2608
2608
|
heartbeat: { activeHoursStart: 22, activeHoursEnd: null },
|
|
2609
2609
|
});
|
|
2610
|
-
const config =
|
|
2610
|
+
const config = getConfig();
|
|
2611
2611
|
expect(config.llm.callSites?.mainAgent?.maxTokens).toBe(4096);
|
|
2612
2612
|
expect(config.heartbeat.activeHoursStart).toBe(8);
|
|
2613
2613
|
expect(config.heartbeat.activeHoursEnd).toBe(22);
|
|
@@ -2623,7 +2623,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2623
2623
|
llm: { callSites: { mainAgent: { maxTokens: 4096 } } },
|
|
2624
2624
|
heartbeat: { activeHoursStart: 22, activeHoursEnd: 22 },
|
|
2625
2625
|
});
|
|
2626
|
-
const config =
|
|
2626
|
+
const config = getConfig();
|
|
2627
2627
|
expect(config.llm.callSites?.mainAgent?.maxTokens).toBe(4096);
|
|
2628
2628
|
expect(config.heartbeat.activeHoursStart).toBe(8);
|
|
2629
2629
|
expect(config.heartbeat.activeHoursEnd).toBe(22);
|
|
@@ -2639,7 +2639,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2639
2639
|
llm: { callSites: { mainAgent: { maxTokens: 1234 } } },
|
|
2640
2640
|
filing: { activeHoursStart: 5, activeHoursEnd: 5 },
|
|
2641
2641
|
});
|
|
2642
|
-
const config =
|
|
2642
|
+
const config = getConfig();
|
|
2643
2643
|
expect(config.llm.callSites?.mainAgent?.maxTokens).toBe(1234);
|
|
2644
2644
|
expect(config.filing.activeHoursStart).toBeNull();
|
|
2645
2645
|
expect(config.filing.activeHoursEnd).toBeNull();
|
|
@@ -2647,7 +2647,7 @@ describe("loadConfig with schema validation", () => {
|
|
|
2647
2647
|
|
|
2648
2648
|
test("applies calls defaults when not specified", () => {
|
|
2649
2649
|
writeConfig({});
|
|
2650
|
-
const config =
|
|
2650
|
+
const config = getConfig();
|
|
2651
2651
|
expect(config.calls.enabled).toBe(true);
|
|
2652
2652
|
expect(config.calls.maxDurationSeconds).toBe(3600);
|
|
2653
2653
|
expect(config.calls.userConsultTimeoutSeconds).toBe(120);
|
|
@@ -2697,21 +2697,20 @@ describe("Call entrypoint gating", () => {
|
|
|
2697
2697
|
test("call_start tool returns error when calls.enabled is false", async () => {
|
|
2698
2698
|
writeConfig({ calls: { enabled: false } });
|
|
2699
2699
|
// Force config reload
|
|
2700
|
-
|
|
2700
|
+
getConfig();
|
|
2701
2701
|
|
|
2702
2702
|
const { executeCallStart: _executeCallStart } =
|
|
2703
2703
|
await import("../tools/calls/call-start.js");
|
|
2704
2704
|
|
|
2705
2705
|
// The tool is registered via side effect. We need to test the gating logic directly.
|
|
2706
2706
|
// Since the module registers itself, we test by loading config and checking behavior.
|
|
2707
|
-
const { getConfig } = await import("../config/loader.js");
|
|
2708
2707
|
const config = getConfig();
|
|
2709
2708
|
expect(config.calls.enabled).toBe(false);
|
|
2710
2709
|
});
|
|
2711
2710
|
|
|
2712
2711
|
test("calls_start route throws ForbiddenError when calls.enabled is false", async () => {
|
|
2713
2712
|
writeConfig({ calls: { enabled: false } });
|
|
2714
|
-
|
|
2713
|
+
getConfig();
|
|
2715
2714
|
|
|
2716
2715
|
const { ROUTES } = await import("../runtime/routes/call-routes.js");
|
|
2717
2716
|
const { RouteError } = await import("../runtime/routes/errors.js");
|
|
@@ -132,12 +132,10 @@ describe("config_set route - request validation", () => {
|
|
|
132
132
|
activeProfile: "my-custom-profile",
|
|
133
133
|
profiles: {
|
|
134
134
|
balanced: {
|
|
135
|
-
|
|
136
|
-
provider: "anthropic",
|
|
135
|
+
provider: "cadet",
|
|
137
136
|
model: "claude-sonnet-4-6",
|
|
138
137
|
},
|
|
139
138
|
"my-custom-profile": {
|
|
140
|
-
source: "user",
|
|
141
139
|
provider: "anthropic",
|
|
142
140
|
model: "claude-opus-4-6",
|
|
143
141
|
maxTokens: 32000,
|
|
@@ -162,14 +160,12 @@ describe("config_set route - request validation", () => {
|
|
|
162
160
|
|
|
163
161
|
const profiles = llm.profiles as Record<string, Record<string, unknown>>;
|
|
164
162
|
expect(profiles["my-custom-profile"]).toEqual({
|
|
165
|
-
source: "user",
|
|
166
163
|
provider: "anthropic",
|
|
167
164
|
model: "claude-opus-4-6",
|
|
168
165
|
maxTokens: 32000,
|
|
169
166
|
});
|
|
170
167
|
expect(profiles.balanced).toEqual({
|
|
171
|
-
|
|
172
|
-
provider: "anthropic",
|
|
168
|
+
provider: "cadet",
|
|
173
169
|
model: "claude-sonnet-4-6",
|
|
174
170
|
});
|
|
175
171
|
|