@mycadet/assistant 0.12.9 → 0.12.11
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/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
- package/node_modules/@mycadet/ces-client/src/http-credentials.ts +18 -1
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
- package/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
- package/node_modules/@mycadet/service-contracts/src/ingress.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 +87 -404
- 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 +25 -32
- 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 +72 -298
- 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 +49 -706
- 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
|
@@ -23,7 +23,7 @@ mock.module(
|
|
|
23
23
|
);
|
|
24
24
|
|
|
25
25
|
// ── Config ──────────────────────────────────────────────────────────
|
|
26
|
-
// These tests run against the real config loader. `
|
|
26
|
+
// These tests run against the real config loader. `getConfig()` returns the
|
|
27
27
|
// loader's live cached object, so tests set TTS/ingress fields by mutating it
|
|
28
28
|
// in place; `beforeEach` restores the fields the tests touch. The workspace
|
|
29
29
|
// config file itself is seeded once below (memory off, ingress base URL).
|
|
@@ -58,7 +58,7 @@ mock.module("../../config/cloud-speech-defaults.js", () => ({
|
|
|
58
58
|
resolveEffectiveSpeechProviders: async (config?: {
|
|
59
59
|
services: { stt: { provider: string }; tts: { provider: string } };
|
|
60
60
|
}) => {
|
|
61
|
-
const services = (config ??
|
|
61
|
+
const services = (config ?? getConfig()).services;
|
|
62
62
|
return { stt: services.stt.provider, tts: services.tts.provider };
|
|
63
63
|
},
|
|
64
64
|
}));
|
|
@@ -230,7 +230,7 @@ registerTestTtsProviders();
|
|
|
230
230
|
import { resetDbForTesting } from "../../__tests__/db-test-helpers.js";
|
|
231
231
|
import { createGuardianBinding } from "../../__tests__/helpers/create-guardian-binding.js";
|
|
232
232
|
import { setConfig } from "../../__tests__/helpers/set-config.js";
|
|
233
|
-
import {
|
|
233
|
+
import { getConfig } from "../../config/loader.js";
|
|
234
234
|
import type {
|
|
235
235
|
VoiceFrontModelConfig,
|
|
236
236
|
VoiceProgressConfig,
|
|
@@ -432,7 +432,6 @@ function setupController(
|
|
|
432
432
|
) {
|
|
433
433
|
ensureConversation("conv-ctrl-test");
|
|
434
434
|
const session = createCallSession({
|
|
435
|
-
direction: "inbound",
|
|
436
435
|
conversationId: "conv-ctrl-test",
|
|
437
436
|
provider: "twilio",
|
|
438
437
|
fromNumber: "+15551111111",
|
|
@@ -484,7 +483,6 @@ function setupControllerWithOrigin(task?: string) {
|
|
|
484
483
|
ensureConversation("conv-ctrl-voice");
|
|
485
484
|
ensureConversation("conv-ctrl-origin");
|
|
486
485
|
const session = createCallSession({
|
|
487
|
-
direction: "inbound",
|
|
488
486
|
conversationId: "conv-ctrl-voice",
|
|
489
487
|
provider: "twilio",
|
|
490
488
|
fromNumber: "+15551111111",
|
|
@@ -519,7 +517,7 @@ describe("call-controller", () => {
|
|
|
519
517
|
mockEndCallListenWindowMs = 0;
|
|
520
518
|
mockEndCallDrainMaxWaitMs = 15_000;
|
|
521
519
|
// Reset TTS config to defaults so per-test mutations don't leak.
|
|
522
|
-
const cfg =
|
|
520
|
+
const cfg = getConfig();
|
|
523
521
|
cfg.services.tts.provider = "elevenlabs";
|
|
524
522
|
cfg.services.tts.providers["fish-audio"].referenceId = "";
|
|
525
523
|
cfg.ingress.publicBaseUrl = "https://generic.example.com";
|
|
@@ -2966,7 +2964,7 @@ describe("call-controller", () => {
|
|
|
2966
2964
|
});
|
|
2967
2965
|
|
|
2968
2966
|
test("synthesized provider: if synthesis fails before first chunk, falls back to text-token speech without sending play URL", async () => {
|
|
2969
|
-
const cfg =
|
|
2967
|
+
const cfg = getConfig();
|
|
2970
2968
|
cfg.services.tts.provider = "fish-audio";
|
|
2971
2969
|
cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
|
|
2972
2970
|
|
|
@@ -3016,7 +3014,7 @@ describe("call-controller", () => {
|
|
|
3016
3014
|
});
|
|
3017
3015
|
|
|
3018
3016
|
test("synthesized provider: a superseded run does not emit native fallback text", async () => {
|
|
3019
|
-
const cfg =
|
|
3017
|
+
const cfg = getConfig();
|
|
3020
3018
|
cfg.services.tts.provider = "fish-audio";
|
|
3021
3019
|
cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
|
|
3022
3020
|
|
|
@@ -3075,7 +3073,7 @@ describe("call-controller", () => {
|
|
|
3075
3073
|
});
|
|
3076
3074
|
|
|
3077
3075
|
test("synthesized provider: play URL uses public base URL", async () => {
|
|
3078
|
-
const cfg =
|
|
3076
|
+
const cfg = getConfig();
|
|
3079
3077
|
cfg.ingress.publicBaseUrl = "https://twilio.example.com/";
|
|
3080
3078
|
cfg.services.tts.provider = "fish-audio";
|
|
3081
3079
|
cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
|
|
@@ -3119,7 +3117,7 @@ describe("call-controller", () => {
|
|
|
3119
3117
|
});
|
|
3120
3118
|
|
|
3121
3119
|
test("synthesized provider: stays 'processing' during synthesis latency until the play URL is sent", async () => {
|
|
3122
|
-
const cfg =
|
|
3120
|
+
const cfg = getConfig();
|
|
3123
3121
|
cfg.services.tts.provider = "fish-audio";
|
|
3124
3122
|
cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
|
|
3125
3123
|
|
|
@@ -3175,7 +3173,7 @@ describe("call-controller", () => {
|
|
|
3175
3173
|
});
|
|
3176
3174
|
|
|
3177
3175
|
test("synthesized provider: a superseded turn does not send a stale play URL", async () => {
|
|
3178
|
-
const cfg =
|
|
3176
|
+
const cfg = getConfig();
|
|
3179
3177
|
cfg.services.tts.provider = "fish-audio";
|
|
3180
3178
|
cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
|
|
3181
3179
|
|
|
@@ -3226,7 +3224,7 @@ describe("call-controller", () => {
|
|
|
3226
3224
|
});
|
|
3227
3225
|
|
|
3228
3226
|
test("synthesized provider: a turn error cancels the queued synthesis chain so no stale speech follows the recovery prompt", async () => {
|
|
3229
|
-
const cfg =
|
|
3227
|
+
const cfg = getConfig();
|
|
3230
3228
|
cfg.services.tts.provider = "fish-audio";
|
|
3231
3229
|
cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
|
|
3232
3230
|
|
|
@@ -3328,7 +3326,7 @@ describe("call-controller", () => {
|
|
|
3328
3326
|
});
|
|
3329
3327
|
|
|
3330
3328
|
test("Deepgram selected path resolves useSynthesizedPath to true", async () => {
|
|
3331
|
-
const cfg =
|
|
3329
|
+
const cfg = getConfig();
|
|
3332
3330
|
cfg.services.tts.provider = "deepgram";
|
|
3333
3331
|
|
|
3334
3332
|
const result = await resolveCallTtsProvider();
|
|
@@ -3338,7 +3336,7 @@ describe("call-controller", () => {
|
|
|
3338
3336
|
});
|
|
3339
3337
|
|
|
3340
3338
|
test("Deepgram synthesis failure does NOT fall back to native token TTS", async () => {
|
|
3341
|
-
const cfg =
|
|
3339
|
+
const cfg = getConfig();
|
|
3342
3340
|
cfg.services.tts.provider = "deepgram";
|
|
3343
3341
|
|
|
3344
3342
|
_resetTtsProviderOverridesForTests();
|
|
@@ -3386,7 +3384,7 @@ describe("call-controller", () => {
|
|
|
3386
3384
|
});
|
|
3387
3385
|
|
|
3388
3386
|
test("Fish Audio synthesis failure still falls back to native token TTS (unchanged behavior)", async () => {
|
|
3389
|
-
const cfg =
|
|
3387
|
+
const cfg = getConfig();
|
|
3390
3388
|
cfg.services.tts.provider = "fish-audio";
|
|
3391
3389
|
cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-abc";
|
|
3392
3390
|
|
|
@@ -3439,7 +3437,7 @@ describe("call-controller", () => {
|
|
|
3439
3437
|
onChunk: (chunk: Buffer) => void,
|
|
3440
3438
|
) => Promise<void>;
|
|
3441
3439
|
}): { synthesizedTexts: string[] } {
|
|
3442
|
-
const cfg =
|
|
3440
|
+
const cfg = getConfig();
|
|
3443
3441
|
cfg.services.tts.provider = "fish-audio";
|
|
3444
3442
|
cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
|
|
3445
3443
|
|
|
@@ -3548,7 +3546,7 @@ describe("call-controller", () => {
|
|
|
3548
3546
|
function registerDeepgramRequestRecorder(): {
|
|
3549
3547
|
requests: Array<{ voiceId?: string; language?: string }>;
|
|
3550
3548
|
} {
|
|
3551
|
-
const cfg =
|
|
3549
|
+
const cfg = getConfig();
|
|
3552
3550
|
cfg.services.tts.provider = "deepgram";
|
|
3553
3551
|
|
|
3554
3552
|
_resetTtsProviderOverridesForTests();
|
|
@@ -3572,7 +3570,7 @@ describe("call-controller", () => {
|
|
|
3572
3570
|
}
|
|
3573
3571
|
|
|
3574
3572
|
test("synthesized provider: a configured languageVoices entry for the call language rides the request as voiceId", async () => {
|
|
3575
|
-
const cfg =
|
|
3573
|
+
const cfg = getConfig();
|
|
3576
3574
|
cfg.services.tts.providers.deepgram.languageVoices = {
|
|
3577
3575
|
hi: "aura-2-hindi-voice",
|
|
3578
3576
|
};
|
|
@@ -3598,7 +3596,7 @@ describe("call-controller", () => {
|
|
|
3598
3596
|
});
|
|
3599
3597
|
|
|
3600
3598
|
test("synthesized provider: no voiceId when languageVoices has no entry for the call language", async () => {
|
|
3601
|
-
const cfg =
|
|
3599
|
+
const cfg = getConfig();
|
|
3602
3600
|
cfg.services.tts.providers.deepgram.languageVoices = {
|
|
3603
3601
|
hi: "aura-2-hindi-voice",
|
|
3604
3602
|
};
|
|
@@ -3996,7 +3994,7 @@ describe("call-controller", () => {
|
|
|
3996
3994
|
fishTexts: string[];
|
|
3997
3995
|
fallbackTexts: string[];
|
|
3998
3996
|
} {
|
|
3999
|
-
const cfg =
|
|
3997
|
+
const cfg = getConfig();
|
|
4000
3998
|
cfg.services.tts.provider = "fish-audio";
|
|
4001
3999
|
cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
|
|
4002
4000
|
|
|
@@ -4186,7 +4184,7 @@ describe("call-controller", () => {
|
|
|
4186
4184
|
test("returns fallback when the configured provider is not in the catalog", async () => {
|
|
4187
4185
|
// The schema enum rejects unknown providers, so this state can only be
|
|
4188
4186
|
// produced by mutating the loader's cached config directly.
|
|
4189
|
-
const cfg =
|
|
4187
|
+
const cfg = getConfig();
|
|
4190
4188
|
(cfg.services.tts as { provider: string }).provider =
|
|
4191
4189
|
"not-a-real-provider";
|
|
4192
4190
|
|
|
@@ -4197,7 +4195,7 @@ describe("call-controller", () => {
|
|
|
4197
4195
|
});
|
|
4198
4196
|
|
|
4199
4197
|
test("degrades fish-audio synthesized path when referenceId is missing", async () => {
|
|
4200
|
-
const cfg =
|
|
4198
|
+
const cfg = getConfig();
|
|
4201
4199
|
cfg.services.tts.provider = "fish-audio";
|
|
4202
4200
|
cfg.services.tts.providers["fish-audio"].referenceId = "";
|
|
4203
4201
|
|
|
@@ -4226,7 +4224,7 @@ describe("call-controller", () => {
|
|
|
4226
4224
|
});
|
|
4227
4225
|
|
|
4228
4226
|
test("returns synthesized path with deepgram provider", async () => {
|
|
4229
|
-
const cfg =
|
|
4227
|
+
const cfg = getConfig();
|
|
4230
4228
|
cfg.services.tts.provider = "deepgram";
|
|
4231
4229
|
|
|
4232
4230
|
const result = await resolveCallTtsProvider();
|
|
@@ -4239,7 +4237,7 @@ describe("call-controller", () => {
|
|
|
4239
4237
|
test("Deepgram does not apply fish-audio referenceId gate", async () => {
|
|
4240
4238
|
// Deepgram has no referenceId requirement. Verify the fish-audio
|
|
4241
4239
|
// config gate does not apply to deepgram resolution.
|
|
4242
|
-
const cfg =
|
|
4240
|
+
const cfg = getConfig();
|
|
4243
4241
|
cfg.services.tts.provider = "deepgram";
|
|
4244
4242
|
// fish-audio referenceId left empty — should not affect deepgram.
|
|
4245
4243
|
cfg.services.tts.providers["fish-audio"].referenceId = "";
|
|
@@ -5163,7 +5161,7 @@ describe("call-controller", () => {
|
|
|
5163
5161
|
function endpointingConfig(
|
|
5164
5162
|
overrides: Partial<VoiceFrontModelConfig> = {},
|
|
5165
5163
|
): VoiceFrontModelConfig {
|
|
5166
|
-
return { ...
|
|
5164
|
+
return { ...getConfig().voice.frontModel, ...overrides };
|
|
5167
5165
|
}
|
|
5168
5166
|
|
|
5169
5167
|
/**
|
|
@@ -5306,7 +5304,7 @@ describe("call-controller", () => {
|
|
|
5306
5304
|
// A provider that has gone quiet past its commit window plus the
|
|
5307
5305
|
// margin is gone, not slow, so the interim text is the only record of
|
|
5308
5306
|
// what the caller said.
|
|
5309
|
-
|
|
5307
|
+
getConfig().calls.voice.utteranceEndMs = 5;
|
|
5310
5308
|
const { controller } = setupController(undefined, {
|
|
5311
5309
|
frontModelConfig: endpointingConfig({ endpointExtensionMs: 20 }),
|
|
5312
5310
|
});
|
|
@@ -5323,7 +5321,7 @@ describe("call-controller", () => {
|
|
|
5323
5321
|
|
|
5324
5322
|
test("interim words re-arm the replay so it fires only once the caller stops", async () => {
|
|
5325
5323
|
const { legs } = mockHoldingBridge();
|
|
5326
|
-
|
|
5324
|
+
getConfig().calls.voice.utteranceEndMs = 5;
|
|
5327
5325
|
const { controller } = setupController(undefined, {
|
|
5328
5326
|
frontModelConfig: endpointingConfig({ endpointExtensionMs: 60 }),
|
|
5329
5327
|
});
|
|
@@ -9,8 +9,8 @@ import {
|
|
|
9
9
|
} from "node:fs";
|
|
10
10
|
import { dirname, join } from "node:path";
|
|
11
11
|
|
|
12
|
+
import { getWorkspaceDir } from "../util/layout.js";
|
|
12
13
|
import { getLogger } from "../util/logger.js";
|
|
13
|
-
import { getWorkspaceDir } from "../util/platform.js";
|
|
14
14
|
import { isTerminalState } from "./call-state-machine.js";
|
|
15
15
|
import type { CallSession } from "./types.js";
|
|
16
16
|
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
getRequestByPendingQuestionOrNull,
|
|
18
18
|
listGuardianRequestDeliveriesOrEmpty,
|
|
19
19
|
} from "../channels/gateway-guardian-requests.js";
|
|
20
|
-
import {
|
|
20
|
+
import { getConfig } from "../config/loader.js";
|
|
21
21
|
import type {
|
|
22
22
|
VoiceFrontModelConfig,
|
|
23
23
|
VoiceProgressConfig,
|
|
@@ -365,7 +365,7 @@ export class CallController {
|
|
|
365
365
|
opts?.resolveSynthesisLanguage ??
|
|
366
366
|
(() => resolveTelephonySynthesisLanguage());
|
|
367
367
|
this.frontModelConfig =
|
|
368
|
-
opts?.frontModelConfig ??
|
|
368
|
+
opts?.frontModelConfig ?? getConfig().voice.frontModel;
|
|
369
369
|
this.progressConfig =
|
|
370
370
|
opts?.progressConfig ?? this.frontModelConfig.progress;
|
|
371
371
|
this.progressNarrator =
|
|
@@ -936,7 +936,7 @@ export class CallController {
|
|
|
936
936
|
}
|
|
937
937
|
return Math.max(
|
|
938
938
|
extensionMs,
|
|
939
|
-
|
|
939
|
+
getConfig().calls.voice.utteranceEndMs +
|
|
940
940
|
PROVIDER_FINAL_FALLBACK_MARGIN_MS,
|
|
941
941
|
);
|
|
942
942
|
}
|
package/src/calls/call-domain.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { revokeScopedApprovalGrantsForContext } from "../approvals/scoped-approval-grants.js";
|
|
9
|
-
import {
|
|
9
|
+
import { getConfig } from "../config/loader.js";
|
|
10
10
|
import { VALID_CALLER_IDENTITY_MODES } from "../config/schema.js";
|
|
11
11
|
import type { AssistantConfig } from "../config/types.js";
|
|
12
12
|
import { resolveCallbackUrl } from "../inbound/cloud-callback-registration.js";
|
|
@@ -299,7 +299,6 @@ export async function createInboundVoiceSession(
|
|
|
299
299
|
const session = createCallSession({
|
|
300
300
|
conversationId: voiceConversationId,
|
|
301
301
|
provider: "twilio",
|
|
302
|
-
direction: "inbound",
|
|
303
302
|
fromNumber,
|
|
304
303
|
toNumber,
|
|
305
304
|
});
|
|
@@ -402,7 +401,7 @@ export async function startCall(
|
|
|
402
401
|
let sessionId: string | null = null;
|
|
403
402
|
|
|
404
403
|
try {
|
|
405
|
-
const config =
|
|
404
|
+
const config = getConfig();
|
|
406
405
|
|
|
407
406
|
// Resolve which phone number to use as caller ID
|
|
408
407
|
const identityResult = await resolveCallerIdentity(
|
|
@@ -439,7 +438,6 @@ export async function startCall(
|
|
|
439
438
|
signal?.throwIfAborted();
|
|
440
439
|
|
|
441
440
|
const session = createCallSession({
|
|
442
|
-
direction: "outbound",
|
|
443
441
|
conversationId,
|
|
444
442
|
provider: "twilio",
|
|
445
443
|
fromNumber,
|
|
@@ -950,7 +948,7 @@ export async function startVerificationCall(
|
|
|
950
948
|
let sessionId: string | null = null;
|
|
951
949
|
|
|
952
950
|
try {
|
|
953
|
-
const config =
|
|
951
|
+
const config = getConfig();
|
|
954
952
|
const provider = new TwilioVoiceProvider();
|
|
955
953
|
|
|
956
954
|
// Resolve the assistant's Twilio number as the caller ID
|
|
@@ -978,7 +976,6 @@ export async function startVerificationCall(
|
|
|
978
976
|
});
|
|
979
977
|
|
|
980
978
|
const session = createCallSession({
|
|
981
|
-
direction: "outbound",
|
|
982
979
|
conversationId,
|
|
983
980
|
provider: "twilio",
|
|
984
981
|
fromNumber: identityResult.fromNumber,
|
|
@@ -1083,7 +1080,7 @@ export async function startInviteCall(
|
|
|
1083
1080
|
let sessionId: string | null = null;
|
|
1084
1081
|
|
|
1085
1082
|
try {
|
|
1086
|
-
const config =
|
|
1083
|
+
const config = getConfig();
|
|
1087
1084
|
const provider = new TwilioVoiceProvider();
|
|
1088
1085
|
|
|
1089
1086
|
// Resolve the assistant's Twilio number as the caller ID
|
|
@@ -1112,7 +1109,6 @@ export async function startInviteCall(
|
|
|
1112
1109
|
});
|
|
1113
1110
|
|
|
1114
1111
|
const session = createCallSession({
|
|
1115
|
-
direction: "outbound",
|
|
1116
1112
|
conversationId,
|
|
1117
1113
|
provider: "twilio",
|
|
1118
1114
|
fromNumber: identityResult.fromNumber,
|
package/src/calls/call-store.ts
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import { and, desc, eq,
|
|
1
|
+
import { and, desc, eq, notInArray, or } from "drizzle-orm";
|
|
2
2
|
import { v4 as uuid } from "uuid";
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
recordPhoneCallEnded,
|
|
6
|
-
recordPhoneCallStarted,
|
|
7
|
-
} from "../onboarding/onboarding-events-store.js";
|
|
8
4
|
import { getDb } from "../persistence/db-connection.js";
|
|
9
5
|
import { rawChanges, rawRun } from "../persistence/raw-query.js";
|
|
10
6
|
import {
|
|
@@ -12,16 +8,10 @@ import {
|
|
|
12
8
|
callPendingQuestions,
|
|
13
9
|
callSessions,
|
|
14
10
|
} from "../persistence/schema/index.js";
|
|
15
|
-
import {
|
|
16
|
-
type PhoneCallDirection,
|
|
17
|
-
phoneCallEndScreen,
|
|
18
|
-
phoneCallSilenceReason,
|
|
19
|
-
phoneCallStartScreen,
|
|
20
|
-
} from "../telemetry/phone-call-funnel.js";
|
|
21
11
|
import { getLogger } from "../util/logger.js";
|
|
22
12
|
import { cast, createRowMapper } from "../util/row-mapper.js";
|
|
23
13
|
import { syncActiveCallLeaseFromSession } from "./active-call-lease.js";
|
|
24
|
-
import {
|
|
14
|
+
import { validateTransition } from "./call-state-machine.js";
|
|
25
15
|
import type {
|
|
26
16
|
CallEvent,
|
|
27
17
|
CallEventType,
|
|
@@ -95,12 +85,6 @@ export function createCallSession(opts: {
|
|
|
95
85
|
provider: string;
|
|
96
86
|
fromNumber: string;
|
|
97
87
|
toNumber: string;
|
|
98
|
-
/**
|
|
99
|
-
* Which way the call is being placed, for the funnel stamp. Stated rather
|
|
100
|
-
* than derived: a verification or invite call carries no task and is still
|
|
101
|
-
* outbound, so task presence is not a direction.
|
|
102
|
-
*/
|
|
103
|
-
direction: PhoneCallDirection;
|
|
104
88
|
task?: string;
|
|
105
89
|
callMode?: string;
|
|
106
90
|
verificationSessionId?: string;
|
|
@@ -138,14 +122,6 @@ export function createCallSession(opts: {
|
|
|
138
122
|
updatedAt: now,
|
|
139
123
|
};
|
|
140
124
|
db.insert(callSessions).values(row).run();
|
|
141
|
-
// The call is attempted the moment its row exists, which is before the
|
|
142
|
-
// provider dials: a call that never connects is exactly the one the funnel
|
|
143
|
-
// needs to count. An outbound attempt the ingress preflight rejects never
|
|
144
|
-
// reaches here; see `telemetry/phone-call-funnel.ts`.
|
|
145
|
-
recordPhoneCallStarted({
|
|
146
|
-
callSessionId: row.id,
|
|
147
|
-
screen: phoneCallStartScreen(opts.direction, row.callMode),
|
|
148
|
-
});
|
|
149
125
|
return { ...row, skipDisclosure };
|
|
150
126
|
}
|
|
151
127
|
|
|
@@ -248,13 +224,6 @@ export function updateCallSession(
|
|
|
248
224
|
.where(eq(callSessions.id, id))
|
|
249
225
|
.run();
|
|
250
226
|
|
|
251
|
-
// Terminal states are immutable and the validator above rejects any write
|
|
252
|
-
// that follows one, so the first terminal transition to get here is the only
|
|
253
|
-
// one: the ended event needs no separate once-only latch.
|
|
254
|
-
if (updates.status && isTerminalState(updates.status)) {
|
|
255
|
-
recordCallEndedEvent(id, updates.status);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
227
|
opts?.beforeLeaseSync?.();
|
|
259
228
|
|
|
260
229
|
if (shouldSyncActiveLease) {
|
|
@@ -269,35 +238,6 @@ export function updateCallSession(
|
|
|
269
238
|
}
|
|
270
239
|
}
|
|
271
240
|
|
|
272
|
-
// ── Recovery queries ─────────────────────────────────────────────────
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* Whether the call's own event log holds an event of this type. Existence
|
|
276
|
-
* only: the row itself is never read.
|
|
277
|
-
*/
|
|
278
|
-
function hasCallEvent(
|
|
279
|
-
id: string,
|
|
280
|
-
eventType: CallEventType,
|
|
281
|
-
payloadContains?: string,
|
|
282
|
-
): boolean {
|
|
283
|
-
const db = getDb();
|
|
284
|
-
const row = db
|
|
285
|
-
.select({ id: callEvents.id })
|
|
286
|
-
.from(callEvents)
|
|
287
|
-
.where(
|
|
288
|
-
and(
|
|
289
|
-
eq(callEvents.callSessionId, id),
|
|
290
|
-
eq(callEvents.eventType, eventType),
|
|
291
|
-
...(payloadContains
|
|
292
|
-
? [like(callEvents.payloadJson, `%${payloadContains}%`)]
|
|
293
|
-
: []),
|
|
294
|
-
),
|
|
295
|
-
)
|
|
296
|
-
.limit(1)
|
|
297
|
-
.get();
|
|
298
|
-
return row !== undefined;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
241
|
/**
|
|
302
242
|
* Emit the call's funnel end event, classifying a call that never took a
|
|
303
243
|
* caller turn by how far it got. Both signals come from the call's own event
|
|
@@ -310,20 +250,6 @@ function hasCallEvent(
|
|
|
310
250
|
* an event type of its own would be the real fix, but that vocabulary is read
|
|
311
251
|
* by other consumers and is not this change's to alter.
|
|
312
252
|
*/
|
|
313
|
-
function recordCallEndedEvent(id: string, status: CallStatus): void {
|
|
314
|
-
const spoke = hasCallEvent(id, "caller_spoke", '"transcript"');
|
|
315
|
-
const silence = spoke
|
|
316
|
-
? null
|
|
317
|
-
: phoneCallSilenceReason({
|
|
318
|
-
connected: hasCallEvent(id, "call_connected"),
|
|
319
|
-
});
|
|
320
|
-
|
|
321
|
-
recordPhoneCallEnded({
|
|
322
|
-
callSessionId: id,
|
|
323
|
-
screen: phoneCallEndScreen(status, silence),
|
|
324
|
-
outcome: status === "failed" ? "failed" : "completed",
|
|
325
|
-
});
|
|
326
|
-
}
|
|
327
253
|
|
|
328
254
|
/**
|
|
329
255
|
* Returns all call sessions that are in a non-terminal state
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { resolveEffectiveSpeechProviders } from "../config/cloud-speech-defaults.js";
|
|
11
|
-
import {
|
|
11
|
+
import { getConfig } from "../config/loader.js";
|
|
12
12
|
import {
|
|
13
13
|
getCatalogProvider,
|
|
14
14
|
getTtsProvider,
|
|
@@ -101,7 +101,7 @@ export async function resolveCallTtsProvider(
|
|
|
101
101
|
options?: ResolveCallTtsOptions,
|
|
102
102
|
): Promise<ResolvedCallTts> {
|
|
103
103
|
try {
|
|
104
|
-
const config =
|
|
104
|
+
const config = getConfig();
|
|
105
105
|
const effectiveProviderId = await effectiveTtsProviderId(config);
|
|
106
106
|
const resolved = resolveTtsConfig(config, effectiveProviderId);
|
|
107
107
|
|
|
@@ -192,7 +192,7 @@ export async function resolveCallTtsProvider(
|
|
|
192
192
|
* silent native path.
|
|
193
193
|
*/
|
|
194
194
|
async function effectiveTtsProviderId(
|
|
195
|
-
config: ReturnType<typeof
|
|
195
|
+
config: ReturnType<typeof getConfig>,
|
|
196
196
|
): Promise<TtsProviderId | undefined> {
|
|
197
197
|
try {
|
|
198
198
|
const { tts } = await resolveEffectiveSpeechProviders(config);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getConfig } from "../config/loader.js";
|
|
2
2
|
import { credentialKey } from "../security/credential-key.js";
|
|
3
3
|
import { getSecureKeyAsync } from "../security/secure-keys.js";
|
|
4
4
|
import { ConfigError } from "../util/errors.js";
|
|
@@ -23,7 +23,7 @@ export interface TwilioConfig {
|
|
|
23
23
|
*/
|
|
24
24
|
export function resolveTwilioPhoneNumber(): string {
|
|
25
25
|
try {
|
|
26
|
-
const config =
|
|
26
|
+
const config = getConfig();
|
|
27
27
|
if (config.twilio?.phoneNumber) {
|
|
28
28
|
return config.twilio.phoneNumber;
|
|
29
29
|
}
|
|
@@ -35,7 +35,7 @@ export function resolveTwilioPhoneNumber(): string {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export async function getTwilioConfig(): Promise<TwilioConfig> {
|
|
38
|
-
const accountSid =
|
|
38
|
+
const accountSid = getConfig().twilio?.accountSid || "";
|
|
39
39
|
const authToken =
|
|
40
40
|
(await getSecureKeyAsync(credentialKey("twilio", "auth_token"))) || "";
|
|
41
41
|
const phoneNumber = resolveTwilioPhoneNumber();
|
package/src/calls/twilio-rest.ts
CHANGED
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
updatePhoneNumberWebhooks as updateTwilioPhoneNumberWebhooks,
|
|
16
16
|
} from "@mycadet/twilio-client";
|
|
17
17
|
|
|
18
|
-
import {
|
|
18
|
+
import { getConfig } from "../config/loader.js";
|
|
19
19
|
import { credentialKey } from "../security/credential-key.js";
|
|
20
20
|
import { getSecureKeyAsync } from "../security/secure-keys.js";
|
|
21
21
|
import { ConfigError, ProviderError } from "../util/errors.js";
|
|
@@ -28,7 +28,7 @@ export interface TwilioCredentials {
|
|
|
28
28
|
/** Resolve the Twilio Account SID from config. */
|
|
29
29
|
function resolveAccountSid(): string | undefined {
|
|
30
30
|
try {
|
|
31
|
-
const config =
|
|
31
|
+
const config = getConfig();
|
|
32
32
|
return config.twilio?.accountSid || undefined;
|
|
33
33
|
} catch {
|
|
34
34
|
// Config may not be available during early startup
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getIsCloud } from "../config/env-registry.js";
|
|
2
|
-
import {
|
|
2
|
+
import { getConfig } from "../config/loader.js";
|
|
3
3
|
import type { AssistantConfig } from "../config/types.js";
|
|
4
4
|
import { getPublicBaseUrl } from "../inbound/public-ingress-urls.js";
|
|
5
5
|
import { resolveTelephonyCredentialReadiness } from "./telephony-credential-preflight.js";
|
|
@@ -31,7 +31,7 @@ function fail(error: string): VoiceIngressPreflightFailure {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
export async function preflightVoiceIngress(): Promise<VoiceIngressPreflightResult> {
|
|
34
|
-
const ingressConfig =
|
|
34
|
+
const ingressConfig = getConfig();
|
|
35
35
|
|
|
36
36
|
// The daemon performs both STT and TTS on the media-stream transport —
|
|
37
37
|
// in every deployment mode, cloud-hosted included — so credential
|
|
@@ -2,13 +2,11 @@ export interface BundledCliModules {
|
|
|
2
2
|
configEnv: typeof import("../config/env.js");
|
|
3
3
|
providerSecretCatalog: typeof import("../providers/provider-secret-catalog.js");
|
|
4
4
|
pluginCatalogCache: typeof import("./lib/plugin-catalog-cache.js");
|
|
5
|
-
pluginCatalogLocal: typeof import("./lib/plugin-catalog-local.js");
|
|
6
5
|
pluginDiff: typeof import("./lib/diff-plugin.js");
|
|
7
6
|
pluginInspect: typeof import("./lib/inspect-plugin.js");
|
|
8
7
|
pluginInstallGitHub: typeof import("./lib/install-from-github.js");
|
|
9
8
|
pluginInstallPlatform: typeof import("./lib/install-from-cloud.js");
|
|
10
9
|
pluginInstalled: typeof import("./lib/list-installed-plugins.js");
|
|
11
|
-
pluginPinHistory: typeof import("./lib/plugin-pin-history.js");
|
|
12
10
|
pluginSearch: typeof import("./lib/search-plugins.js");
|
|
13
11
|
pluginSurfaces: typeof import("./lib/plugin-surfaces.js");
|
|
14
12
|
pluginUninstall: typeof import("./lib/uninstall-plugin.js");
|
|
@@ -10,7 +10,7 @@ import { afterEach, beforeEach, describe, expect, test } from "bun:test";
|
|
|
10
10
|
import { mockIpc } from "../../../__tests__/requests-mock.js";
|
|
11
11
|
import { createApp, getAppDirPath } from "../../../apps/app-store.js";
|
|
12
12
|
import { writeAppSourceFingerprint } from "../../../apps/source-fingerprint.js";
|
|
13
|
-
import { getWorkspacePluginsDir } from "../../../util/
|
|
13
|
+
import { getWorkspacePluginsDir } from "../../../util/layout.js";
|
|
14
14
|
import { runCliCommand } from "./cli-test-harness.js";
|
|
15
15
|
|
|
16
16
|
const ipc = await mockIpc("cli");
|
|
@@ -450,45 +450,21 @@ describe("plugins install - declared-schedules consent", () => {
|
|
|
450
450
|
expect(r.exitCode).toBe(0);
|
|
451
451
|
});
|
|
452
452
|
|
|
453
|
-
test("a
|
|
454
|
-
|
|
453
|
+
test("a name install absent from the catalog refuses before anything runs", async () => {
|
|
454
|
+
// A name needs the cloud catalog to resolve; an unclaimed name refuses
|
|
455
|
+
// before any install machinery runs.
|
|
455
456
|
stageFixture = writeScheduleFixture;
|
|
456
457
|
confirmResults = ["confirmed"];
|
|
457
458
|
|
|
458
459
|
const r = await runCommand(["plugins", "install", "caveman"]);
|
|
459
460
|
|
|
460
461
|
expect(platformInstallCalls.length).toBe(0);
|
|
461
|
-
expect(installPluginCalls.length).toBe(
|
|
462
|
-
expect(
|
|
463
|
-
expect(
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
test("a local catalog source bypasses the cloud installer", async () => {
|
|
469
|
-
catalogMatches = [
|
|
470
|
-
{
|
|
471
|
-
name: "fathom",
|
|
472
|
-
path: "local:plugins/mcp-catalog/fathom@1.0.0",
|
|
473
|
-
category: "productivity",
|
|
474
|
-
source: {
|
|
475
|
-
kind: "local",
|
|
476
|
-
path: "plugins/mcp-catalog/fathom",
|
|
477
|
-
version: "1.0.0",
|
|
478
|
-
},
|
|
479
|
-
},
|
|
480
|
-
];
|
|
481
|
-
|
|
482
|
-
const r = await runCommand(["plugins", "install", "fathom"]);
|
|
483
|
-
|
|
484
|
-
expect(platformInstallCalls).toHaveLength(0);
|
|
485
|
-
expect(installPluginCalls).toHaveLength(1);
|
|
486
|
-
expect(installPluginCalls[0]?.trustedSource).toEqual({
|
|
487
|
-
kind: "local",
|
|
488
|
-
path: "plugins/mcp-catalog/fathom",
|
|
489
|
-
version: "1.0.0",
|
|
490
|
-
});
|
|
491
|
-
expect(r.exitCode).toBe(0);
|
|
462
|
+
expect(installPluginCalls.length).toBe(0);
|
|
463
|
+
expect(confirmCalls.length).toBe(0);
|
|
464
|
+
expect(r.stdout + r.stderr).toContain(
|
|
465
|
+
'Plugin "caveman" is not in the marketplace catalog.',
|
|
466
|
+
);
|
|
467
|
+
expect(r.exitCode).toBe(1);
|
|
492
468
|
});
|
|
493
469
|
|
|
494
470
|
test("falls back to the cloud installer when catalog discovery fails", async () => {
|
|
@@ -781,39 +757,6 @@ describe("plugins inspect - schedules surface", () => {
|
|
|
781
757
|
expect(r.stdout).toContain("weekly RRULE:FREQ=WEEKLY;BYDAY=MO (execute)");
|
|
782
758
|
expect(r.exitCode).toBe(0);
|
|
783
759
|
});
|
|
784
|
-
|
|
785
|
-
test("renders a bundled package location without a GitHub URL", async () => {
|
|
786
|
-
inspectResult = {
|
|
787
|
-
...inspectionWithSurfaces({
|
|
788
|
-
skills: [],
|
|
789
|
-
hooks: [],
|
|
790
|
-
tools: [],
|
|
791
|
-
schedules: [],
|
|
792
|
-
}),
|
|
793
|
-
installed: false,
|
|
794
|
-
status: "not-installed",
|
|
795
|
-
local: null,
|
|
796
|
-
remote: {
|
|
797
|
-
kind: "local",
|
|
798
|
-
repo: "",
|
|
799
|
-
path: "plugins/mcp-catalog/fathom",
|
|
800
|
-
commit: "1.0.0",
|
|
801
|
-
committedAt: null,
|
|
802
|
-
description: null,
|
|
803
|
-
homepage: null,
|
|
804
|
-
license: null,
|
|
805
|
-
category: "productivity",
|
|
806
|
-
marketplaceRef: "main",
|
|
807
|
-
version: "1.0.0",
|
|
808
|
-
},
|
|
809
|
-
};
|
|
810
|
-
|
|
811
|
-
const r = await runCommand(["plugins", "inspect", "fathom"]);
|
|
812
|
-
|
|
813
|
-
expect(r.stdout).toContain("bundled:plugins/mcp-catalog/fathom");
|
|
814
|
-
expect(r.stdout).not.toContain("https://github.com//");
|
|
815
|
-
expect(r.exitCode).toBe(0);
|
|
816
|
-
});
|
|
817
760
|
});
|
|
818
761
|
|
|
819
762
|
describe("plugins install - setup skill hint", () => {
|