@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
|
@@ -1,428 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Picks which default profile answers a turn that runs on the Auto profile.
|
|
3
|
-
*
|
|
4
|
-
* The agent loop asks TypeSafe's System One model (Jev) one choice question
|
|
5
|
-
* over the user's latest message, with the recent conversation for context,
|
|
6
|
-
* and pins the turn to the answer. Every other outcome (no managed Jev route,
|
|
7
|
-
* provider error, timeout, an answer naming no candidate) pins the turn to
|
|
8
|
-
* Balanced, which is also the Auto profile's own body, so a turn the router
|
|
9
|
-
* cannot judge runs exactly as a Balanced turn would.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { getConversationProfilesForProvider } from "../config/default-profile-catalog.js";
|
|
13
|
-
import {
|
|
14
|
-
AUTO_PROFILE_KEY,
|
|
15
|
-
AUTO_PROFILE_ROUTER_CALL_SITE,
|
|
16
|
-
DEFAULT_PROFILE_KEYS,
|
|
17
|
-
type DefaultProfileKey,
|
|
18
|
-
isDefaultProfileKey,
|
|
19
|
-
} from "../config/default-profile-names.js";
|
|
20
|
-
import { getConfig } from "../config/loader.js";
|
|
21
|
-
import type { ProfileEntry } from "../config/schemas/llm.js";
|
|
22
|
-
import { getMessagesPaginated } from "../persistence/conversation-crud.js";
|
|
23
|
-
import { resolveConversationId } from "../persistence/conversation-key-store.js";
|
|
24
|
-
import { askTypesafe } from "../providers/jev/ask.js";
|
|
25
|
-
import type { ContentBlock, Message, Provider } from "../providers/types.js";
|
|
26
|
-
import { getLogger } from "../util/logger.js";
|
|
27
|
-
import { safeStringSlice } from "../util/unicode.js";
|
|
28
|
-
|
|
29
|
-
const log = getLogger("auto-profile-router");
|
|
30
|
-
|
|
31
|
-
export const AUTO_PROFILE_FALLBACK: DefaultProfileKey = "balanced";
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* The profile a turn runs on when the router cannot judge it: Balanced while
|
|
35
|
-
* it is a candidate, else the first candidate the user left enabled, else
|
|
36
|
-
* Balanced (the Auto body itself) when nothing is enabled.
|
|
37
|
-
*/
|
|
38
|
-
export function autoProfileFallback(
|
|
39
|
-
candidates: readonly DefaultProfileKey[],
|
|
40
|
-
): DefaultProfileKey {
|
|
41
|
-
if (candidates.includes(AUTO_PROFILE_FALLBACK)) {
|
|
42
|
-
return AUTO_PROFILE_FALLBACK;
|
|
43
|
-
}
|
|
44
|
-
return candidates[0] ?? AUTO_PROFILE_FALLBACK;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Budget before the turn proceeds on Balanced. The router runs before the
|
|
49
|
-
* turn's first provider call, so a Jev outage costs at most this much
|
|
50
|
-
* time-to-first-token per Auto turn and never blocks the reply. Jev's
|
|
51
|
-
* measured round trip sits well under it (the voice judge runs on 800ms).
|
|
52
|
-
*/
|
|
53
|
-
export const AUTO_PROFILE_ROUTER_TIMEOUT_MS = 1_000;
|
|
54
|
-
|
|
55
|
-
const HISTORY_TURNS = 6;
|
|
56
|
-
const HISTORY_TURN_MAX_CHARS = 600;
|
|
57
|
-
const MESSAGE_MAX_CHARS = 4_000;
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* What each default profile is for, phrased so the options exclude each
|
|
61
|
-
* other. The picker copy on the profiles describes a tier to a person;
|
|
62
|
-
* these describe the kind of message that belongs on it.
|
|
63
|
-
*/
|
|
64
|
-
const ROUTING_CRITERIA: Record<DefaultProfileKey, string> = {
|
|
65
|
-
balanced:
|
|
66
|
-
"Everyday requests: questions, drafting, summaries, ordinary coding, tasks that use tools. The choice when nothing else clearly applies.",
|
|
67
|
-
"quality-optimized":
|
|
68
|
-
"Hard problems: multi-step reasoning, subtle debugging, large or delicate code changes, careful analysis, writing where quality matters most.",
|
|
69
|
-
"cost-optimized":
|
|
70
|
-
"Simple, mechanical work: short factual answers, reformatting, extraction, small edits where a modest model is plenty.",
|
|
71
|
-
"latency-optimized":
|
|
72
|
-
"Quick conversational replies: greetings, acknowledgements, one-line answers where speed matters more than depth.",
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
const ROUTING_INSTRUCTIONS =
|
|
76
|
-
"Which model profile should answer the user's latest message? Judge the work the reply needs, using the recent conversation to interpret short follow-ups. Pick the cheapest profile that will still produce a good answer.";
|
|
77
|
-
|
|
78
|
-
export type AutoProfileRouteOutcome =
|
|
79
|
-
| "routed"
|
|
80
|
-
| "unavailable"
|
|
81
|
-
| "timeout"
|
|
82
|
-
| "error"
|
|
83
|
-
| "fallback";
|
|
84
|
-
|
|
85
|
-
export interface AutoProfileRoute {
|
|
86
|
-
profile: DefaultProfileKey;
|
|
87
|
-
outcome: AutoProfileRouteOutcome;
|
|
88
|
-
/** Jev's confidence in the pick, when it answered. */
|
|
89
|
-
confidence?: number;
|
|
90
|
-
latencyMs: number;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/** A message's spoken text: its text blocks minus injected `<...>` blocks. */
|
|
94
|
-
export function plainTextOf(content: readonly ContentBlock[]): string {
|
|
95
|
-
return content
|
|
96
|
-
.map((block) => (block.type === "text" ? block.text : ""))
|
|
97
|
-
.filter(
|
|
98
|
-
(text) => text.trim().length > 0 && !text.trimStart().startsWith("<"),
|
|
99
|
-
)
|
|
100
|
-
.join(" ")
|
|
101
|
-
.replace(/\s+/g, " ")
|
|
102
|
-
.trim();
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* The router's view of the conversation: the last few turns as plain text,
|
|
107
|
-
* without injected context blocks, tool traffic, or the current message
|
|
108
|
-
* (which the router receives on its own).
|
|
109
|
-
*/
|
|
110
|
-
export function recentConversationForRouter(
|
|
111
|
-
history: readonly Message[],
|
|
112
|
-
userMessage: string,
|
|
113
|
-
): string {
|
|
114
|
-
const lines: string[] = [];
|
|
115
|
-
for (const message of history) {
|
|
116
|
-
const text = plainTextOf(message.content);
|
|
117
|
-
if (text.length === 0) {
|
|
118
|
-
continue;
|
|
119
|
-
}
|
|
120
|
-
lines.push(
|
|
121
|
-
`${message.role}: ${safeStringSlice(text, 0, HISTORY_TURN_MAX_CHARS)}`,
|
|
122
|
-
);
|
|
123
|
-
}
|
|
124
|
-
const current = `user: ${userMessage.replace(/\s+/g, " ").trim()}`;
|
|
125
|
-
if (lines.length > 0 && lines[lines.length - 1] === current) {
|
|
126
|
-
lines.pop();
|
|
127
|
-
}
|
|
128
|
-
return lines.slice(-HISTORY_TURNS).join("\n");
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* The default profiles the router may pick from: the ones the conversation
|
|
133
|
-
* view offers and the user has not disabled.
|
|
134
|
-
*/
|
|
135
|
-
export function autoProfileCandidates(
|
|
136
|
-
profiles: Readonly<Record<string, ProfileEntry>>,
|
|
137
|
-
): DefaultProfileKey[] {
|
|
138
|
-
return DEFAULT_PROFILE_KEYS.filter((key) => {
|
|
139
|
-
const entry = profiles[key];
|
|
140
|
-
return entry != null && entry.status !== "disabled";
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Route one turn. Never rejects: every failure returns the fallback profile.
|
|
146
|
-
*/
|
|
147
|
-
export async function routeAutoProfile(args: {
|
|
148
|
-
conversationId: string;
|
|
149
|
-
history: readonly Message[];
|
|
150
|
-
userMessage: string;
|
|
151
|
-
profiles: Readonly<Record<string, ProfileEntry>>;
|
|
152
|
-
signal?: AbortSignal;
|
|
153
|
-
timeoutMs?: number;
|
|
154
|
-
/** Provider resolver, injectable for tests. */
|
|
155
|
-
resolveProvider?: () => Promise<Provider | null>;
|
|
156
|
-
}): Promise<AutoProfileRoute> {
|
|
157
|
-
const userMessage = args.userMessage.trim();
|
|
158
|
-
const candidates = autoProfileCandidates(args.profiles);
|
|
159
|
-
const fallback = autoProfileFallback(candidates);
|
|
160
|
-
// A choice needs two options; with fewer there is nothing to route.
|
|
161
|
-
if (userMessage.length === 0 || candidates.length < 2) {
|
|
162
|
-
return { profile: fallback, outcome: "fallback", latencyMs: 0 };
|
|
163
|
-
}
|
|
164
|
-
const criteria = Object.fromEntries(
|
|
165
|
-
candidates.map((key) => [
|
|
166
|
-
key,
|
|
167
|
-
`${args.profiles[key]?.label ?? key}: ${ROUTING_CRITERIA[key]}`,
|
|
168
|
-
]),
|
|
169
|
-
);
|
|
170
|
-
const result = await askTypesafe({
|
|
171
|
-
callSite: AUTO_PROFILE_ROUTER_CALL_SITE,
|
|
172
|
-
conversationId: args.conversationId,
|
|
173
|
-
state: {
|
|
174
|
-
recent_conversation:
|
|
175
|
-
recentConversationForRouter(args.history, userMessage) ||
|
|
176
|
-
"(start of conversation)",
|
|
177
|
-
latest_user_message: safeStringSlice(userMessage, 0, MESSAGE_MAX_CHARS),
|
|
178
|
-
},
|
|
179
|
-
questions: {
|
|
180
|
-
profile: {
|
|
181
|
-
type: "choice",
|
|
182
|
-
instructions: ROUTING_INSTRUCTIONS,
|
|
183
|
-
criteria,
|
|
184
|
-
},
|
|
185
|
-
},
|
|
186
|
-
timeoutMs: args.timeoutMs ?? AUTO_PROFILE_ROUTER_TIMEOUT_MS,
|
|
187
|
-
...(args.signal ? { signal: args.signal } : {}),
|
|
188
|
-
...(args.resolveProvider ? { resolveProvider: args.resolveProvider } : {}),
|
|
189
|
-
});
|
|
190
|
-
if (result.outcome !== "answered") {
|
|
191
|
-
return {
|
|
192
|
-
profile: fallback,
|
|
193
|
-
outcome: result.outcome,
|
|
194
|
-
latencyMs: result.latencyMs,
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
const answer = result.answers?.profile;
|
|
198
|
-
const choice =
|
|
199
|
-
typeof answer === "object" && answer !== null && "choice" in answer
|
|
200
|
-
? (answer as { choice?: unknown }).choice
|
|
201
|
-
: undefined;
|
|
202
|
-
const confidence =
|
|
203
|
-
typeof answer === "object" && answer !== null && "confidence" in answer
|
|
204
|
-
? (answer as { confidence?: unknown }).confidence
|
|
205
|
-
: undefined;
|
|
206
|
-
if (
|
|
207
|
-
typeof choice !== "string" ||
|
|
208
|
-
!isDefaultProfileKey(choice) ||
|
|
209
|
-
!candidates.includes(choice)
|
|
210
|
-
) {
|
|
211
|
-
log.warn(
|
|
212
|
-
{ conversationId: args.conversationId, choice },
|
|
213
|
-
"Auto profile router answered with no candidate profile",
|
|
214
|
-
);
|
|
215
|
-
return { profile: fallback, outcome: "error", latencyMs: result.latencyMs };
|
|
216
|
-
}
|
|
217
|
-
// Argmax with no confidence floor. A floor belongs here if flat
|
|
218
|
-
// distributions turn out to send trivial messages to Quality.
|
|
219
|
-
return {
|
|
220
|
-
profile: choice,
|
|
221
|
-
outcome: "routed",
|
|
222
|
-
...(typeof confidence === "number" ? { confidence } : {}),
|
|
223
|
-
latencyMs: result.latencyMs,
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// ---------------------------------------------------------------------------
|
|
228
|
-
// Draft preview and send-time reuse
|
|
229
|
-
// ---------------------------------------------------------------------------
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* How long a draft preview stays reusable by the turn that sends the same
|
|
233
|
-
* text. Long enough to cover the pause between the preview and the send,
|
|
234
|
-
* short enough that a stale pick never outlives the draft it was made for.
|
|
235
|
-
*/
|
|
236
|
-
export const AUTO_PROFILE_PREVIEW_REUSE_MS = 60_000;
|
|
237
|
-
|
|
238
|
-
/** Recent history rows the preview shows the router, matching the turn's window. */
|
|
239
|
-
const PREVIEW_HISTORY_ROWS = 12;
|
|
240
|
-
|
|
241
|
-
/** Cache key for a preview made before the conversation has a server id. */
|
|
242
|
-
const NO_CONVERSATION_KEY = "*";
|
|
243
|
-
|
|
244
|
-
interface RememberedPreview {
|
|
245
|
-
text: string;
|
|
246
|
-
/** What the router saw besides the text: the candidate set and the last
|
|
247
|
-
* line of recent history. A send whose context differs re-routes. */
|
|
248
|
-
context: string;
|
|
249
|
-
route: AutoProfileRoute;
|
|
250
|
-
at: number;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* Bound on remembered previews. Abandoned drafts never get taken, so
|
|
255
|
-
* expiry alone would let the map grow with every conversation ever
|
|
256
|
-
* previewed; oldest entries go first once the bound is reached.
|
|
257
|
-
*/
|
|
258
|
-
const MAX_REMEMBERED_PREVIEWS = 200;
|
|
259
|
-
|
|
260
|
-
const rememberedPreviews = new Map<string, RememberedPreview>();
|
|
261
|
-
|
|
262
|
-
function normalizeDraft(text: string): string {
|
|
263
|
-
return text.replace(/\s+/g, " ").trim();
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/**
|
|
267
|
-
* The routing inputs other than the draft, reduced to a comparable string:
|
|
268
|
-
* which profiles were candidates, and the last line of history the router
|
|
269
|
-
* saw. Both sides (preview from persisted rows, turn from the live history)
|
|
270
|
-
* render history through `recentConversationForRouter`, so the last line
|
|
271
|
-
* agrees whenever the conversation has not moved.
|
|
272
|
-
*/
|
|
273
|
-
export function autoProfilePreviewContext(
|
|
274
|
-
history: readonly Message[],
|
|
275
|
-
userMessage: string,
|
|
276
|
-
candidates: readonly DefaultProfileKey[],
|
|
277
|
-
): string {
|
|
278
|
-
const rendered = recentConversationForRouter(history, userMessage);
|
|
279
|
-
const lastLine = rendered.slice(rendered.lastIndexOf("\n") + 1);
|
|
280
|
-
return `${candidates.join(",")}\u0000${lastLine}`;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
function pruneRememberedPreviews(now: number): void {
|
|
284
|
-
for (const [key, entry] of rememberedPreviews) {
|
|
285
|
-
if (now - entry.at > AUTO_PROFILE_PREVIEW_REUSE_MS) {
|
|
286
|
-
rememberedPreviews.delete(key);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
while (rememberedPreviews.size >= MAX_REMEMBERED_PREVIEWS) {
|
|
290
|
-
const oldest = rememberedPreviews.keys().next().value;
|
|
291
|
-
if (oldest === undefined) {
|
|
292
|
-
break;
|
|
293
|
-
}
|
|
294
|
-
rememberedPreviews.delete(oldest);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
/**
|
|
299
|
-
* Keep a routed preview so the turn that sends the same text reuses it: one
|
|
300
|
-
* Jev call per message instead of two, and the reply's badge matches what
|
|
301
|
-
* the composer showed. Only a routed pick is kept; a fallback is worth
|
|
302
|
-
* retrying at send time.
|
|
303
|
-
*/
|
|
304
|
-
export function rememberAutoProfilePreview(
|
|
305
|
-
conversationId: string | undefined,
|
|
306
|
-
text: string,
|
|
307
|
-
route: AutoProfileRoute,
|
|
308
|
-
context: string,
|
|
309
|
-
now: number = Date.now(),
|
|
310
|
-
): void {
|
|
311
|
-
if (route.outcome !== "routed") {
|
|
312
|
-
return;
|
|
313
|
-
}
|
|
314
|
-
pruneRememberedPreviews(now);
|
|
315
|
-
rememberedPreviews.set(conversationId ?? NO_CONVERSATION_KEY, {
|
|
316
|
-
text: normalizeDraft(text),
|
|
317
|
-
context,
|
|
318
|
-
route,
|
|
319
|
-
at: now,
|
|
320
|
-
});
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
/**
|
|
324
|
-
* The remembered preview for this turn, consumed on read. It has to match
|
|
325
|
-
* the text and the routing context the turn would otherwise send to Jev.
|
|
326
|
-
* A preview made before the conversation existed saw an empty history, so
|
|
327
|
-
* it fits only a turn whose history is still empty: with no history and the
|
|
328
|
-
* same text and candidates, the two requests are identical.
|
|
329
|
-
*/
|
|
330
|
-
export function takeAutoProfilePreview(args: {
|
|
331
|
-
conversationId: string;
|
|
332
|
-
text: string;
|
|
333
|
-
history: readonly Message[];
|
|
334
|
-
profiles: Readonly<Record<string, ProfileEntry>>;
|
|
335
|
-
now?: number;
|
|
336
|
-
}): AutoProfileRoute | undefined {
|
|
337
|
-
const now = args.now ?? Date.now();
|
|
338
|
-
const wanted = normalizeDraft(args.text);
|
|
339
|
-
const candidates = autoProfileCandidates(args.profiles);
|
|
340
|
-
const context = autoProfilePreviewContext(args.history, wanted, candidates);
|
|
341
|
-
const historyIsEmpty =
|
|
342
|
-
recentConversationForRouter(args.history, wanted).length === 0;
|
|
343
|
-
const keys = historyIsEmpty
|
|
344
|
-
? [args.conversationId, NO_CONVERSATION_KEY]
|
|
345
|
-
: [args.conversationId];
|
|
346
|
-
for (const key of keys) {
|
|
347
|
-
const remembered = rememberedPreviews.get(key);
|
|
348
|
-
if (!remembered) {
|
|
349
|
-
continue;
|
|
350
|
-
}
|
|
351
|
-
if (now - remembered.at > AUTO_PROFILE_PREVIEW_REUSE_MS) {
|
|
352
|
-
rememberedPreviews.delete(key);
|
|
353
|
-
continue;
|
|
354
|
-
}
|
|
355
|
-
if (remembered.text === wanted && remembered.context === context) {
|
|
356
|
-
rememberedPreviews.delete(key);
|
|
357
|
-
return remembered.route;
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
return undefined;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
/** For tests. */
|
|
364
|
-
export function clearAutoProfilePreviewsForTesting(): void {
|
|
365
|
-
rememberedPreviews.clear();
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
/**
|
|
369
|
-
* Recent conversational rows for the preview: the same window the turn sees,
|
|
370
|
-
* counted over rows that carry spoken text so tool traffic cannot crowd a
|
|
371
|
-
* short follow-up's context out of the page.
|
|
372
|
-
*/
|
|
373
|
-
function recentHistoryFromDb(conversationId: string | undefined): Message[] {
|
|
374
|
-
const resolved = conversationId
|
|
375
|
-
? resolveConversationId(conversationId)
|
|
376
|
-
: null;
|
|
377
|
-
if (!resolved) {
|
|
378
|
-
return [];
|
|
379
|
-
}
|
|
380
|
-
return getMessagesPaginated(
|
|
381
|
-
resolved,
|
|
382
|
-
PREVIEW_HISTORY_ROWS,
|
|
383
|
-
undefined,
|
|
384
|
-
(row) =>
|
|
385
|
-
(row.role === "user" || row.role === "assistant") &&
|
|
386
|
-
plainTextOf(row.content).length > 0,
|
|
387
|
-
).messages.map((row) => ({
|
|
388
|
-
role: row.role as Message["role"],
|
|
389
|
-
content: row.content,
|
|
390
|
-
}));
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
/**
|
|
394
|
-
* Route a draft the user has not sent yet, so the composer can show the pick
|
|
395
|
-
* as they type. Returns null when the Auto profile is not available on this
|
|
396
|
-
* install; otherwise the same route a turn on the draft would get, remembered
|
|
397
|
-
* for that turn to reuse.
|
|
398
|
-
*/
|
|
399
|
-
export async function previewAutoProfile(args: {
|
|
400
|
-
conversationId?: string;
|
|
401
|
-
text: string;
|
|
402
|
-
signal?: AbortSignal;
|
|
403
|
-
}): Promise<AutoProfileRoute | null> {
|
|
404
|
-
const { llm } = getConfig();
|
|
405
|
-
const profiles = getConversationProfilesForProvider(llm);
|
|
406
|
-
if (profiles[AUTO_PROFILE_KEY]?.source !== "managed") {
|
|
407
|
-
return null;
|
|
408
|
-
}
|
|
409
|
-
const history = recentHistoryFromDb(args.conversationId);
|
|
410
|
-
const route = await routeAutoProfile({
|
|
411
|
-
conversationId: args.conversationId ?? NO_CONVERSATION_KEY,
|
|
412
|
-
history,
|
|
413
|
-
userMessage: args.text,
|
|
414
|
-
profiles,
|
|
415
|
-
...(args.signal ? { signal: args.signal } : {}),
|
|
416
|
-
});
|
|
417
|
-
rememberAutoProfilePreview(
|
|
418
|
-
args.conversationId,
|
|
419
|
-
args.text,
|
|
420
|
-
route,
|
|
421
|
-
autoProfilePreviewContext(
|
|
422
|
-
history,
|
|
423
|
-
normalizeDraft(args.text),
|
|
424
|
-
autoProfileCandidates(profiles),
|
|
425
|
-
),
|
|
426
|
-
);
|
|
427
|
-
return route;
|
|
428
|
-
}
|