@mycadet/assistant 0.12.9 → 0.12.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dockerfile +0 -8
- package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +1 -1
- package/openapi.yaml +62 -910
- package/package.json +3 -7
- package/scripts/build-test-fixtures.ts +1 -1
- package/scripts/generate-openapi.ts +22 -6
- package/scripts/postinstall.ts +4 -10
- package/scripts/run-tests.ts +0 -21
- package/src/__tests__/adaptive-thinking-repair.test.ts +19 -57
- package/src/__tests__/agent-loop.test.ts +0 -76
- package/src/__tests__/anthropic-provider.test.ts +6 -6
- package/src/__tests__/assert-not-live-db.ts +1 -1
- package/src/__tests__/assistant-id-boundary-guard.test.ts +3 -3
- package/src/__tests__/attachments-store-heic-normalize.test.ts +1 -1
- package/src/__tests__/attachments-store.test.ts +1 -1
- package/src/__tests__/audit-log-rotation.test.ts +1 -1
- package/src/__tests__/btw-routes.test.ts +1 -1
- package/src/__tests__/byok-default-profile-ensure.test.ts +21 -27
- package/src/__tests__/call-conversation-messages.test.ts +0 -5
- package/src/__tests__/call-recovery.test.ts +2 -7
- package/src/__tests__/call-routes-http.test.ts +0 -12
- package/src/__tests__/call-store.test.ts +2 -7
- package/src/__tests__/catalog-files.test.ts +7 -5
- package/src/__tests__/checker.test.ts +1 -1
- package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +4 -4
- package/src/__tests__/cloud-client-verify-credential.test.ts +0 -4
- package/src/__tests__/cloud-credential-catalog-cli.test.ts +14 -14
- package/src/__tests__/cloud-profile-guard.test.ts +48 -401
- package/src/__tests__/compaction-events.test.ts +2 -2
- package/src/__tests__/config-loader-backfill.test.ts +74 -163
- package/src/__tests__/config-loader-cloud-defaults.test.ts +11 -11
- package/src/__tests__/config-loader-corrupt.test.ts +10 -10
- package/src/__tests__/config-loader-quarantine-notice.test.ts +7 -7
- package/src/__tests__/config-loader-validation-reset-notice.test.ts +11 -11
- package/src/__tests__/config-schema.test.ts +26 -27
- package/src/__tests__/config-set-route.test.ts +2 -6
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +28 -300
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +39 -246
- package/src/__tests__/conversation-agent-loop.test.ts +2 -58
- package/src/__tests__/conversation-clear-safety.test.ts +0 -30
- package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
- package/src/__tests__/conversation-queue.test.ts +1 -1
- package/src/__tests__/conversation-runtime-assembly.test.ts +1 -1
- package/src/__tests__/conversation-skill-tools.test.ts +4 -444
- package/src/__tests__/conversation-slash-commands.test.ts +1 -1
- package/src/__tests__/conversation-store.test.ts +1 -84
- package/src/__tests__/conversation-surface-state.test.ts +0 -16
- package/src/__tests__/credential-health-service.test.ts +14 -1
- package/src/__tests__/credential-record-retire.test.ts +1 -1
- package/src/__tests__/credential-record-write-through.test.ts +1 -1
- package/src/__tests__/credential-security-invariants.test.ts +0 -145
- package/src/__tests__/custom-profile-ensure.test.ts +1 -1
- package/src/__tests__/default-profile-catalog-fallback.test.ts +5 -15
- package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -2
- package/src/__tests__/dictation-profile-store.test.ts +6 -6
- package/src/__tests__/disk-usage.test.ts +28 -164
- package/src/__tests__/docker-signing-key-bootstrap.test.ts +1 -1
- package/src/__tests__/embedding-cloud-proxy-selection.test.ts +1 -1
- package/src/__tests__/emit-event-signal.test.ts +1 -1
- package/src/__tests__/gateway-client-cloud-outbound.test.ts +3 -3
- package/src/__tests__/gateway-only-enforcement.test.ts +1 -1
- package/src/__tests__/guardian-dispatch.test.ts +0 -13
- package/src/__tests__/helpers/seed-app.ts +1 -1
- package/src/__tests__/host-cu-routes-targeted.test.ts +1 -1
- package/src/__tests__/host-shell-tool.test.ts +1 -1
- package/src/__tests__/identity-routes.test.ts +1 -1
- package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
- package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
- package/src/__tests__/injector-chain.test.ts +1 -1
- package/src/__tests__/injector-config-quarantine-notice.test.ts +1 -1
- package/src/__tests__/injector-config-validation-reset-notice.test.ts +1 -1
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
- package/src/__tests__/{platform.test.ts → layout.test.ts} +1 -1
- package/src/__tests__/list-all-apps.test.ts +1 -1
- package/src/__tests__/live-workspace-guard.test.ts +2 -2
- package/src/__tests__/llm-resolver-override-or-default.test.ts +5 -6
- package/src/__tests__/llm-resolver.test.ts +7 -7
- package/src/__tests__/llm-schema-fallback-profile.test.ts +9 -10
- package/src/__tests__/llm-usage-store.test.ts +0 -495
- package/src/__tests__/log-export-routes.test.ts +1 -1
- package/src/__tests__/mcp-config-secret-boundary.test.ts +12 -53
- package/src/__tests__/mcp-list-plugin-servers.test.ts +1 -1
- package/src/__tests__/memory-config-file-parity.test.ts +1 -1
- package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
- package/src/__tests__/messages-read-boundary-guard.test.ts +0 -2
- package/src/__tests__/notification-guardian-path.test.ts +0 -7
- package/src/__tests__/onboarding-persona-write.test.ts +1 -1
- package/src/__tests__/openai-provider.test.ts +8 -8
- package/src/__tests__/path-policy.test.ts +1 -1
- package/src/__tests__/persona-resolver.test.ts +1 -1
- package/src/__tests__/plugin-app-serve-routes.test.ts +1 -1
- package/src/__tests__/plugin-effective-enabled-set.test.ts +1 -1
- package/src/__tests__/plugin-import-boundary-guard.test.ts +4 -6
- package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +0 -3
- package/src/__tests__/provider-cloud-proxy-integration.test.ts +1 -5
- package/src/__tests__/provider-connections-backfill.test.ts +10 -10
- package/src/__tests__/prune-old-conversations-job.test.ts +6 -31
- package/src/__tests__/resolve-app.test.ts +1 -1
- package/src/__tests__/run-due-schedules.test.ts +1 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -53
- package/src/__tests__/schedule-routes.test.ts +1 -1
- package/src/__tests__/schedule-store.test.ts +1 -1
- package/src/__tests__/secret-routes-cloud-proxy.test.ts +1 -1
- package/src/__tests__/skill-load-plugin-scope.test.ts +1 -1
- package/src/__tests__/surface-completion-compaction-boundary.test.ts +1 -1
- package/src/__tests__/tool-approval-handler.test.ts +1 -1
- package/src/__tests__/tool-audit.test.ts +5 -235
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +54 -114
- package/src/__tests__/tools-get-route.test.ts +1 -1
- package/src/__tests__/turn-outcome-read.test.ts +1 -1
- package/src/__tests__/twilio-routes.test.ts +0 -1
- package/src/__tests__/usage-attribution.test.ts +0 -31
- package/src/__tests__/verification-control-plane-policy.test.ts +3 -10
- package/src/__tests__/visible-app-context.test.ts +1 -1
- package/src/__tests__/voice-ingress-preflight.test.ts +1 -1
- package/src/__tests__/workspace-git-service.test.ts +1 -1
- package/src/__tests__/workspace-greetings.test.ts +1 -1
- package/src/acp/__tests__/helpers/acp-config-stub.ts +1 -1
- package/src/activation/progress-store.ts +1 -1
- package/src/activation/turn-hooks.ts +1 -1
- package/src/agent/loop.ts +0 -51
- package/src/apps/app-store.ts +1 -1
- package/src/avatar/__tests__/avatar-store.test.ts +2 -172
- package/src/avatar/accent-backfill.ts +1 -1
- package/src/avatar/avatar-manifest.ts +1 -1
- package/src/avatar/avatar-store.ts +10 -69
- package/src/avatar/ensure-raster.ts +1 -1
- package/src/avatar/identity-avatar.ts +1 -1
- package/src/avatar/sync-avatar.ts +1 -1
- package/src/avatar/traits-png-sync.ts +1 -1
- package/src/bundler/compiler-tools.ts +1 -1
- package/src/bundler/package-resolver.ts +1 -1
- package/src/calls/__tests__/call-controller.test.ts +25 -27
- package/src/calls/active-call-lease.ts +1 -1
- package/src/calls/call-controller.ts +3 -3
- package/src/calls/call-domain.ts +4 -8
- package/src/calls/call-store.ts +2 -76
- package/src/calls/resolve-call-tts-provider.ts +3 -3
- package/src/calls/twilio-config.ts +3 -3
- package/src/calls/twilio-rest.ts +2 -2
- package/src/calls/voice-ingress-preflight.ts +2 -2
- package/src/cli/bundled-modules.ts +0 -2
- package/src/cli/commands/__tests__/apps.test.ts +1 -1
- package/src/cli/commands/__tests__/plugins.test.ts +9 -66
- package/src/cli/commands/__tests__/ps.test.ts +67 -0
- package/src/cli/commands/auth.help.ts +2 -2
- package/src/cli/commands/avatar.ts +1 -1
- package/src/cli/commands/changelog.ts +1 -1
- package/src/cli/commands/cloud/__tests__/subscription.test.ts +2 -2
- package/src/cli/commands/cloud/index.help.ts +1 -1
- package/src/cli/commands/cloud/index.ts +2 -2
- package/src/cli/commands/db/refresh.ts +1 -1
- package/src/cli/commands/db/repair-step-conversation-backfill.ts +1 -1
- package/src/cli/commands/db/repair.ts +1 -1
- package/src/cli/commands/db/status.ts +1 -1
- package/src/cli/commands/inference-profiles.ts +1 -12
- package/src/cli/commands/memory/__tests__/memory-v3.test.ts +1 -116
- package/src/cli/commands/memory/index.help.ts +1 -43
- package/src/cli/commands/memory/memory-v3.ts +0 -64
- package/src/cli/commands/plugins.ts +54 -205
- package/src/cli/commands/ps.ts +5 -2
- package/src/cli/commands/status.ts +1 -1
- package/src/cli/index.help.ts +0 -2
- package/src/cli/lib/__tests__/inspect-plugin.test.ts +36 -66
- package/src/cli/lib/__tests__/install-from-cloud.test.ts +1 -1
- package/src/cli/lib/__tests__/install-from-github.test.ts +41 -117
- package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +2 -185
- package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +36 -66
- package/src/cli/lib/__tests__/plugin-catalog-visibility.test.ts +4 -6
- package/src/cli/lib/__tests__/plugin-details.test.ts +113 -96
- package/src/cli/lib/__tests__/search-plugins.test.ts +9 -16
- package/src/cli/lib/__tests__/uninstall-plugin.test.ts +1 -1
- package/src/cli/lib/__tests__/upgrade-plugin.test.ts +38 -15
- package/src/cli/lib/diff-plugin.ts +1 -1
- package/src/cli/lib/inspect-plugin.ts +13 -97
- package/src/cli/lib/install-from-cloud.ts +1 -1
- package/src/cli/lib/install-from-github.ts +75 -154
- package/src/cli/lib/install-plugin-dependencies.ts +1 -1
- package/src/cli/lib/list-installed-plugins.ts +1 -1
- package/src/cli/lib/open-browser.ts +1 -1
- package/src/cli/lib/plugin-catalog-cache.ts +8 -51
- package/src/cli/lib/plugin-catalog-resolve.ts +3 -22
- package/src/cli/lib/plugin-details.ts +5 -27
- package/src/cli/lib/plugin-marketplace.ts +18 -266
- package/src/cli/lib/search-plugins.ts +23 -43
- package/src/cli/lib/toggle-plugin.ts +1 -1
- package/src/cli/lib/uninstall-plugin.ts +1 -1
- package/src/cli/lib/upgrade-plugin.ts +3 -49
- package/src/cli/program.ts +1 -3
- package/src/cli.ts +1 -1
- package/src/cloud/client.ts +0 -6
- package/src/cloud/consent-cache.test.ts +22 -201
- package/src/cloud/consent-cache.ts +16 -111
- package/src/cloud/sync-identity.ts +1 -1
- package/src/config/__tests__/chat-settings.test.ts +1 -1
- package/src/config/__tests__/cloud-identity.test.ts +15 -2
- package/src/config/__tests__/default-plugin-skill-discovery.test.ts +1 -1
- package/src/config/__tests__/default-profile-catalog.test.ts +12 -51
- package/src/config/__tests__/deployment-context-defaults.test.ts +13 -13
- package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +4 -4
- package/src/config/__tests__/loader-last-known-good.test.ts +9 -9
- package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +7 -7
- package/src/config/__tests__/plugin-resident-skill-discovery.test.ts +1 -1
- package/src/config/__tests__/profile-materialization.test.ts +2 -4
- package/src/config/__tests__/sync-gated-profiles.test.ts +1 -106
- package/src/config/acp-agent-write.ts +1 -1
- package/src/config/bundled-skills/settings/tools/open-system-settings.test.ts +1 -1
- package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
- package/src/config/call-site-defaults.ts +0 -6
- package/src/config/cloud-identity.ts +12 -5
- package/src/config/composer-preferences.ts +1 -1
- package/src/config/default-profile-catalog.ts +8 -75
- package/src/config/default-profile-names.ts +2 -25
- package/src/config/env-registry.ts +1 -14
- package/src/config/env.ts +8 -6
- package/src/config/llm-resolver.ts +1 -2
- package/src/config/loader.ts +13 -17
- package/src/config/profile-materialization.ts +1 -1
- package/src/config/schema.ts +1 -7
- package/src/config/schemas/call-site-catalog.ts +0 -7
- package/src/config/schemas/llm.ts +22 -27
- package/src/config/seed-inference-profiles.ts +16 -17
- package/src/config/skills.ts +2 -2
- package/src/config/sync-gated-profiles.ts +6 -24
- package/src/credential-health/credential-health-service.ts +10 -3
- package/src/daemon/approval-generators.ts +3 -3
- package/src/daemon/config-watcher.ts +2 -2
- package/src/daemon/conversation-agent-loop-handlers.ts +0 -18
- package/src/daemon/conversation-agent-loop.ts +6 -97
- package/src/daemon/conversation-process.ts +1 -1
- package/src/daemon/conversation-skill-tools.ts +4 -72
- package/src/daemon/conversation-store.ts +1 -1
- package/src/daemon/conversation-surface-state.ts +0 -33
- package/src/daemon/conversation-surfaces.ts +1 -86
- package/src/daemon/conversation-tool-setup.test.ts +1 -1
- package/src/daemon/conversation-tool-setup.ts +0 -23
- package/src/daemon/conversation.ts +3 -5
- package/src/daemon/daemon-control.ts +3 -3
- package/src/daemon/dictation-profile-store.ts +3 -3
- package/src/daemon/event-loop-watchdog.test.ts +2 -198
- package/src/daemon/event-loop-watchdog.ts +0 -185
- package/src/daemon/external-plugins-bootstrap.ts +1 -1
- package/src/daemon/first-greeting.ts +1 -1
- package/src/daemon/handlers/skills.ts +1 -1
- package/src/daemon/host-app-control-proxy.ts +1 -1
- package/src/daemon/host-cu-proxy.ts +2 -2
- package/src/daemon/identity-helpers.ts +1 -1
- package/src/daemon/lifecycle.ts +11 -15
- package/src/daemon/main.ts +1 -1
- package/src/daemon/now-scratchpad.ts +1 -1
- package/src/daemon/process-message.ts +4 -4
- package/src/daemon/profiler-run-store.ts +2 -2
- package/src/daemon/providers-setup.ts +2 -2
- package/src/daemon/shutdown-handlers.ts +0 -10
- package/src/daemon/sqlite-corruption-watchdog.test.ts +2 -142
- package/src/daemon/sqlite-corruption-watchdog.ts +17 -81
- package/src/daemon/tool-side-effects.ts +1 -1
- package/src/desktop/desktop-session-manager.ts +1 -1
- package/src/desktop/desktop-wallpaper-renderer.ts +1 -1
- package/src/heartbeat/heartbeat-service.ts +1 -1
- package/src/home/feed-writer.ts +1 -1
- package/src/home/home-greeting-cache.ts +1 -1
- package/src/home/relationship-state-writer.ts +2 -2
- package/src/hooks/__tests__/hook-live-reload.test.ts +1 -1
- package/src/hooks/hook-loader.ts +2 -2
- package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
- package/src/inbound/oauth-callback-url.ts +3 -3
- package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
- package/src/ipc/socket-path.ts +1 -1
- package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
- package/src/live-voice/__tests__/live-voice-vad.test.ts +1 -1
- package/src/live-voice/live-voice-session.ts +3 -66
- package/src/mcp/__tests__/effective-config.test.ts +1 -1
- package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +2 -2
- package/src/mcp/__tests__/mcp-oauth-provider.test.ts +2 -3
- package/src/mcp/__tests__/reload-signal-emission.test.ts +1 -1
- package/src/mcp/__tests__/reload-signal.test.ts +1 -1
- package/src/mcp/__tests__/workspace-mcp-config.test.ts +19 -21
- package/src/mcp/reload-signal.ts +1 -1
- package/src/mcp/workspace-mcp-config.ts +1 -23
- package/src/messaging/draft-store.ts +1 -1
- package/src/monitoring/__tests__/active-conversations.test.ts +1 -1
- package/src/monitoring/__tests__/page-cache.test.ts +1 -1
- package/src/monitoring/__tests__/stall-capture.test.ts +1 -1
- package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +1 -1
- package/src/monitoring/active-conversations.ts +1 -1
- package/src/monitoring/control.ts +1 -1
- package/src/monitoring/daemon-boot-time.ts +1 -1
- package/src/monitoring/daemon-heartbeat.ts +1 -1
- package/src/monitoring/page-cache.ts +1 -1
- package/src/monitoring/plugin-auto-update.ts +1 -7
- package/src/monitoring/plugin-source-watch.ts +1 -1
- package/src/monitoring/recovery/db.ts +1 -1
- package/src/monitoring/recovery/inflight-content.ts +1 -1
- package/src/monitoring/resource-sampler.ts +3 -14
- package/src/monitoring/stall-capture.ts +1 -1
- package/src/monitoring/worker.ts +9 -76
- package/src/monitoring/workspace-git-heartbeat.ts +1 -1
- package/src/oauth/connect-orchestrator.ts +4 -4
- package/src/permissions/checker.ts +1 -1
- package/src/permissions/workspace-policy.ts +1 -1
- package/src/persistence/__tests__/main-db-readonly-probe.ts +27 -52
- package/src/persistence/__tests__/message-content-file.test.ts +1 -1
- package/src/persistence/__tests__/slow-sync-log.test.ts +0 -2
- package/src/persistence/attachments-store.ts +1 -1
- package/src/persistence/conversation-crud.ts +1 -38
- package/src/persistence/conversation-directories.ts +1 -1
- package/src/persistence/conversation-types.ts +0 -8
- package/src/persistence/db-async-query.ts +1 -1
- package/src/persistence/db-connection.ts +11 -1
- package/src/persistence/db-init.ts +1 -1
- package/src/persistence/db-maintenance.ts +1 -1
- package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +1 -1
- package/src/persistence/embeddings/embedding-local.ts +4 -4
- package/src/persistence/embeddings/embedding-runtime-manager.ts +1 -1
- package/src/persistence/embeddings/qdrant-client.ts +1 -1
- package/src/persistence/embeddings/qdrant-manager.ts +1 -1
- package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +1 -1
- package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +1 -1
- package/src/persistence/job-handlers/cleanup.ts +8 -17
- package/src/persistence/llm-usage-store.ts +2 -229
- package/src/persistence/message-content-file.ts +1 -1
- package/src/persistence/migrations/209-strip-thinking-from-consolidated.ts +1 -1
- package/src/persistence/migrations/222-strip-placeholder-sentinels-from-messages.ts +1 -1
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/329-move-onboarding-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/330-move-auth-fallback-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/331-move-lifecycle-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/332-move-skill-loaded-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/333-create-telemetry-events-table.test.ts +7 -4
- package/src/persistence/migrations/334-backfill-telemetry-events-outbox.test.ts +13 -0
- package/src/persistence/migrations/387-drop-telemetry-tables.ts +51 -0
- package/src/persistence/migrations/__tests__/327-create-flush-checkpoints.test.ts +9 -1
- package/src/persistence/migrations/__tests__/387-drop-telemetry-tables.test.ts +79 -0
- package/src/persistence/migrations/helpers/relocation.ts +1 -1
- package/src/persistence/migrations/run-migrations.ts +1 -1
- package/src/persistence/migrations/validate-migration-state.ts +1 -1
- package/src/persistence/raw-query.ts +1 -29
- package/src/persistence/slow-sync-log.ts +0 -23
- package/src/persistence/steps.ts +2 -0
- package/src/{telemetry → persistence}/tool-audit.ts +6 -121
- package/src/plugin-api/index.ts +1 -1
- package/src/plugin-api/plugin-name-env.ts +1 -1
- package/src/plugins/__tests__/installed-plugin-dirs.test.ts +1 -1
- package/src/plugins/collect-source-versions.ts +1 -1
- package/src/plugins/defaults/channel/package.json +1 -1
- package/src/plugins/defaults/cloud-hosted/package.json +1 -1
- package/src/plugins/defaults/compaction/package.json +1 -1
- package/src/plugins/defaults/documents/package.json +1 -1
- package/src/plugins/defaults/empty-response/package.json +1 -1
- package/src/plugins/defaults/exploration-drift/package.json +1 -1
- package/src/plugins/defaults/image-fallback/package.json +1 -1
- package/src/plugins/defaults/image-recovery/package.json +1 -1
- package/src/plugins/defaults/max-tokens-continue/package.json +1 -1
- package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/db-maintenance.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +0 -82
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-skill-card.test.ts +0 -41
- package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +0 -2
- package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -52
- package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +0 -18
- package/src/plugins/defaults/memory/package.json +1 -1
- package/src/plugins/defaults/memory/paths.ts +4 -4
- package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
- package/src/plugins/defaults/memory/src/memory-v2-routes.ts +5 -5
- package/src/plugins/defaults/memory/src/memory-v3-routes.ts +0 -207
- package/src/plugins/defaults/memory/src/memory-worker-routes.ts +1 -1
- package/src/plugins/defaults/memory/startup.ts +1 -22
- package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +2 -253
- package/src/plugins/defaults/memory/v3/orchestrate.ts +5 -129
- package/src/plugins/defaults/memory/worker-control.ts +1 -1
- package/src/plugins/defaults/memory/worker.ts +2 -2
- package/src/plugins/defaults/session/package.json +1 -1
- package/src/plugins/defaults/surface-completion-nudge/package.json +1 -1
- package/src/plugins/defaults/task-progress/package.json +1 -1
- package/src/plugins/defaults/task-progress-nudge/package.json +1 -1
- package/src/plugins/defaults/title-generate/package.json +1 -1
- package/src/plugins/defaults/tool-error/package.json +1 -1
- package/src/plugins/defaults/tool-result-truncate/package.json +1 -1
- package/src/plugins/defaults/turn-context/package.json +1 -1
- package/src/plugins/defaults/workspace/injectors.ts +1 -1
- package/src/plugins/defaults/workspace/package.json +1 -1
- package/src/plugins/disabled-state.ts +1 -1
- package/src/plugins/ensure-plugin-api-shim.ts +1 -1
- package/src/plugins/ensure-shared-dep-links.ts +1 -1
- package/src/plugins/installed-plugin-dirs.ts +1 -1
- package/src/plugins/mcp-servers.ts +7 -9
- package/src/plugins/mtime-cache.ts +2 -2
- package/src/plugins/source-versions.ts +1 -1
- package/src/prompts/bootstrap-cleanup.ts +1 -1
- package/src/prompts/persona-resolver.ts +1 -1
- package/src/prompts/sections.ts +2 -2
- package/src/prompts/system-prompt.ts +10 -42
- package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +0 -37
- package/src/providers/__tests__/cadet-connection-routing.test.ts +2 -2
- package/src/providers/cadet/client.ts +1 -1
- package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -1
- package/src/providers/inference/adapter-factory.ts +1 -1
- package/src/providers/inference/backfill.ts +3 -10
- package/src/providers/inference/profile-probe.ts +1 -1
- package/src/providers/retry.ts +0 -2
- package/src/providers/types.ts +0 -7
- package/src/providers/usage-tracking.ts +1 -1
- package/src/routes/__tests__/route-host.test.ts +1 -1
- package/src/routes/control.ts +1 -1
- package/src/routes/route-host-client.ts +1 -1
- package/src/routes/worker.ts +2 -2
- package/src/runtime/agent-wake.ts +1 -1
- package/src/runtime/assistant-stream-state.ts +1 -1
- package/src/runtime/auth/token-service.ts +1 -1
- package/src/runtime/background-job-runner.ts +1 -1
- package/src/runtime/middleware/twilio-validation.ts +2 -2
- package/src/runtime/routes/__tests__/app-pin-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +1 -1
- package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +3 -33
- package/src/runtime/routes/__tests__/cloud-credits-routes.test.ts +5 -4
- package/src/runtime/routes/__tests__/cloud-invoice-routes.test.ts +4 -3
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +59 -287
- package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/deprecated-route-context.test.ts +15 -62
- package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +105 -12
- package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/monitoring-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +47 -211
- package/src/runtime/routes/__tests__/route-host-worker-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/schedule-routes-disarm-reason.test.ts +1 -1
- package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-route-dispatcher-host.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-routes-cli.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-routes-notices.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-routes-request.test.ts +1 -1
- package/src/runtime/routes/app-management-routes.ts +1 -1
- package/src/runtime/routes/attachment-routes.ts +1 -1
- package/src/runtime/routes/audit-routes.ts +1 -1
- package/src/runtime/routes/avatar-routes.ts +3 -10
- package/src/runtime/routes/cloud-routes.ts +3 -3
- package/src/runtime/routes/content-source-routes.ts +1 -1
- package/src/runtime/routes/conversation-query-routes.ts +60 -621
- package/src/runtime/routes/conversation-routes.ts +1 -38
- package/src/runtime/routes/debug-routes.ts +1 -1
- package/src/runtime/routes/deprecated-route-context.ts +5 -61
- package/src/runtime/routes/heartbeat-routes.ts +1 -1
- package/src/runtime/routes/identity-routes.ts +1 -1
- package/src/runtime/routes/index.ts +0 -6
- package/src/runtime/routes/inference-profile-session-handler.ts +3 -3
- package/src/runtime/routes/inference-profiles-routes.ts +48 -21
- package/src/runtime/routes/inference-provider-connection-routes.ts +0 -1
- package/src/runtime/routes/llm-call-sites-routes.ts +3 -3
- package/src/runtime/routes/log-export/__tests__/installed-inventory.test.ts +1 -1
- package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +1 -1
- package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +1 -1
- package/src/runtime/routes/log-export/workspace-allowlist.ts +1 -1
- package/src/runtime/routes/log-export-routes.ts +17 -15
- package/src/runtime/routes/migration-rollback-routes.ts +1 -1
- package/src/runtime/routes/migration-routes.ts +2 -3
- package/src/runtime/routes/monitoring-routes.ts +2 -2
- package/src/runtime/routes/oauth-providers.ts +5 -5
- package/src/runtime/routes/plugins-routes.ts +38 -163
- package/src/runtime/routes/profiler-routes.ts +1 -1
- package/src/runtime/routes/route-host-worker-routes.ts +1 -1
- package/src/runtime/routes/sanity-routes.ts +1 -1
- package/src/runtime/routes/schedule-routes.ts +1 -1
- package/src/runtime/routes/schedule-worker-routes.ts +1 -1
- package/src/runtime/routes/settings-routes.ts +1 -1
- package/src/runtime/routes/sounds-config-routes.ts +1 -1
- package/src/runtime/routes/surface-conversation-resolver.ts +1 -7
- package/src/runtime/routes/user-route-dispatcher.ts +1 -3
- package/src/runtime/routes/user-route-import.ts +1 -1
- package/src/runtime/routes/user-route-resolution.ts +1 -1
- package/src/runtime/routes/user-routes-cli.ts +1 -1
- package/src/runtime/routes/workspace-commit-routes.ts +1 -1
- package/src/runtime/routes/workspace-greetings.ts +1 -1
- package/src/runtime/routes/workspace-routes.ts +1 -1
- package/src/runtime/routes/workspace-utils.ts +1 -1
- package/src/runtime/sync/resource-sync-events.ts +1 -1
- package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +1 -1
- package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1 -1
- package/src/schedule/plugin-schedule-availability.ts +1 -1
- package/src/schedule/plugin-schedule-declarations.ts +1 -1
- package/src/schedule/run-script.ts +1 -1
- package/src/schedule/scheduler.ts +1 -11
- package/src/schedule/worker-control.ts +1 -1
- package/src/schedule/worker.ts +3 -3
- package/src/security/oauth2.ts +2 -2
- package/src/security/secret-allowlist.ts +1 -1
- package/src/signals/cancel.ts +1 -1
- package/src/signals/conversation-undo.ts +1 -1
- package/src/signals/emit-event.ts +1 -1
- package/src/signals/event-stream.ts +1 -1
- package/src/signals/user-message.ts +1 -1
- package/src/skills/catalog-install.ts +2 -1
- package/src/skills/clawhub.ts +1 -1
- package/src/skills/cloud-store.ts +1 -1
- package/src/skills/path-classifier.ts +1 -1
- package/src/skills/skill-history.ts +1 -1
- package/src/skills/skillssh-registry.ts +1 -1
- package/src/skills/uninstall.ts +1 -1
- package/src/skills/workspace-skill-md-signature.ts +1 -1
- package/src/subagent/manager.ts +1 -1
- package/src/theme/workspace-theme.ts +1 -1
- package/src/tools/browser/auth-cache.ts +1 -1
- package/src/tools/browser/browser-manager.ts +1 -1
- package/src/tools/browser/runtime-check.ts +1 -1
- package/src/tools/executor.ts +4 -4
- package/src/tools/filesystem/write.ts +1 -1
- package/src/tools/permission-checker.ts +2 -51
- package/src/tools/run-standalone.ts +1 -1
- package/src/tools/skills/format-input-schema.ts +1 -1
- package/src/tools/skills/load.ts +1 -1
- package/src/tools/skills/scaffold-cloud.ts +0 -32
- package/src/tools/terminal/safe-env.ts +1 -2
- package/src/tools/terminal/sanitized-bash.ts +1 -1
- package/src/tools/terminal/shell.ts +1 -1
- package/src/tools/tool-approval-handler.ts +4 -1
- package/src/tools/workflows/manage-workflows.ts +2 -2
- package/src/tools/workflows/run-workflow.test.ts +1 -1
- package/src/tools/workspace-tools/loader.ts +1 -1
- package/src/tts/synthesis-stream.ts +2 -2
- package/src/usage/attribution.ts +1 -11
- package/src/util/browser.ts +1 -1
- package/src/util/bun-runtime.ts +2 -1
- package/src/util/device-id.ts +1 -1
- package/src/util/disk-usage.ts +4 -139
- package/src/util/layout.ts +3 -3
- package/src/util/logger.ts +1 -1
- package/src/util/logs-db-path.ts +1 -1
- package/src/util/memory-db-path.ts +1 -1
- package/src/util/{platform.ts → os.ts} +5 -30
- package/src/util/process-tree.ts +19 -0
- package/src/util/sqlite3-runtime.ts +1 -1
- package/src/util/telemetry-db-path.ts +1 -1
- package/src/watcher/__tests__/engine.test.ts +0 -23
- package/src/watcher/engine.ts +0 -7
- package/src/windows-compiled-cli.ts +0 -4
- package/src/windows-compiled-worker-entry.ts +0 -6
- package/src/workflows/leaf-runner.test.ts +1 -1
- package/src/workflows/leaf-runner.ts +1 -1
- package/src/workflows/library.ts +1 -1
- package/src/workspace/adaptive-thinking-repair.ts +5 -24
- package/src/workspace/byok-default-profile-ensure.ts +24 -26
- package/src/workspace/custom-profile-ensure.ts +2 -2
- package/src/workspace/git-service.ts +1 -1
- package/src/workspace/hatched-date.ts +1 -1
- package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +2 -2
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +1 -1
- package/src/workspace/migrations/077-seed-memory-router-callsite.ts +1 -1
- package/src/workspace/migrations/registry.ts +0 -4
- package/src/workspace/turn-commit.ts +1 -1
- package/docs/activation-funnel-telemetry.md +0 -324
- package/scripts/bundled-plugin-packages.ts +0 -154
- package/scripts/generate-bundled-plugin-packages.ts +0 -29
- package/src/__tests__/activation-early-marking.test.ts +0 -114
- package/src/__tests__/auth-fallback-events-store.test.ts +0 -99
- package/src/__tests__/config-get-vision-flag.test.ts +0 -139
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +0 -400
- package/src/__tests__/internal-telemetry-routes.test.ts +0 -213
- package/src/__tests__/telemetry-routes.test.ts +0 -182
- package/src/__tests__/turn-events-store.test.ts +0 -376
- package/src/__tests__/ui-channel-variants.test.ts +0 -53
- package/src/avatar/__tests__/avatar-changed-telemetry.test.ts +0 -217
- package/src/avatar/avatar-changed-telemetry.ts +0 -128
- package/src/calls/__tests__/call-funnel-telemetry.test.ts +0 -204
- package/src/cli/commands/telemetry.help.ts +0 -27
- package/src/cli/commands/telemetry.ts +0 -83
- package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +0 -251
- package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +0 -113
- package/src/cli/lib/__tests__/plugin-marketplace.test.ts +0 -384
- package/src/cli/lib/__tests__/plugin-pin-history.test.ts +0 -164
- package/src/cli/lib/__tests__/plugins-install-offline.test.ts +0 -228
- package/src/cli/lib/bundled-marketplace.json +0 -1575
- package/src/cli/lib/bundled-plugin-packages.json +0 -827
- package/src/cli/lib/bundled-plugin-packages.ts +0 -87
- package/src/cli/lib/plugin-catalog-local.ts +0 -94
- package/src/cli/lib/plugin-pin-history.ts +0 -276
- package/src/cloud/feature-gate.ts +0 -8
- package/src/config/__tests__/cloud-rehydration.test.ts +0 -180
- package/src/config/cloud-rehydration.ts +0 -35
- package/src/daemon/__tests__/auto-profile-router.test.ts +0 -380
- package/src/daemon/auto-profile-router.ts +0 -428
- package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +0 -391
- package/src/monitoring/__tests__/db-integrity-sample.test.ts +0 -113
- package/src/monitoring/__tests__/oom-kill-reporter.test.ts +0 -374
- package/src/monitoring/db-integrity-check.ts +0 -163
- package/src/monitoring/db-integrity-sample.ts +0 -176
- package/src/monitoring/oom-kill-reporter.ts +0 -469
- package/src/onboarding/__tests__/onboarding-events-store.test.ts +0 -158
- package/src/onboarding/onboarding-events-store.ts +0 -296
- package/src/persistence/__tests__/raw-query-telemetry.test.ts +0 -76
- package/src/persistence/lifecycle-events-store.test.ts +0 -134
- package/src/persistence/lifecycle-events-store.ts +0 -110
- package/src/plugins/defaults/memory/__tests__/activation-session-store.test.ts +0 -76
- package/src/plugins/defaults/memory/activation-session-store.ts +0 -50
- package/src/plugins/defaults/memory/src/__tests__/memory-v3-gate-stats.test.ts +0 -281
- package/src/runtime/routes/auto-profile-routes.ts +0 -83
- package/src/runtime/routes/internal-telemetry-routes.ts +0 -142
- package/src/runtime/routes/telemetry-routes.ts +0 -274
- package/src/security/auth-fallback-events-store.ts +0 -57
- package/src/telemetry/__tests__/activation-funnel.test.ts +0 -95
- package/src/telemetry/__tests__/config-setting-events-store.test.ts +0 -63
- package/src/telemetry/__tests__/config-setting-snapshot.test.ts +0 -143
- package/src/telemetry/__tests__/flush-checkpoints.test.ts +0 -56
- package/src/telemetry/__tests__/live-voice-funnel.test.ts +0 -174
- package/src/telemetry/__tests__/outbox-test-harness.ts +0 -85
- package/src/telemetry/__tests__/phone-call-funnel.test.ts +0 -72
- package/src/telemetry/__tests__/telemetry-event-fixtures.ts +0 -282
- package/src/telemetry/__tests__/watchdog-events-store.test.ts +0 -71
- package/src/telemetry/activation-funnel.ts +0 -172
- package/src/telemetry/config-setting-events-store.ts +0 -40
- package/src/telemetry/config-setting-snapshot.ts +0 -170
- package/src/telemetry/flush-checkpoints.ts +0 -70
- package/src/telemetry/live-voice-funnel.ts +0 -185
- package/src/telemetry/memory-corpus-size.test.ts +0 -120
- package/src/telemetry/memory-corpus-size.ts +0 -184
- package/src/telemetry/memory-tier-reporter.test.ts +0 -195
- package/src/telemetry/memory-tier-reporter.ts +0 -130
- package/src/telemetry/phone-call-funnel.ts +0 -144
- package/src/telemetry/skill-loaded-events-store.test.ts +0 -93
- package/src/telemetry/skill-loaded-events-store.ts +0 -39
- package/src/telemetry/telemetry-event-sources.test.ts +0 -223
- package/src/telemetry/telemetry-event-sources.ts +0 -597
- package/src/telemetry/telemetry-events-outbox.test.ts +0 -375
- package/src/telemetry/telemetry-events-outbox.ts +0 -237
- package/src/telemetry/telemetry-main-db.ts +0 -48
- package/src/telemetry/telemetry-wire-source.json +0 -4
- package/src/telemetry/telemetry-wire-validation.test.ts +0 -157
- package/src/telemetry/telemetry-wire-validation.ts +0 -162
- package/src/telemetry/telemetry-wire.generated.ts +0 -483
- package/src/telemetry/tool-executed-events-store.test.ts +0 -210
- package/src/telemetry/tool-executed-events-store.ts +0 -102
- package/src/telemetry/trace-collection-policy.test.ts +0 -28
- package/src/telemetry/trace-collection-policy.ts +0 -30
- package/src/telemetry/turn-events-store.ts +0 -216
- package/src/telemetry/turn-trace-store.test.ts +0 -884
- package/src/telemetry/turn-trace-store.ts +0 -399
- package/src/telemetry/types.test.ts +0 -38
- package/src/telemetry/types.ts +0 -780
- package/src/telemetry/usage-telemetry-reporter.test.ts +0 -3445
- package/src/telemetry/usage-telemetry-reporter.ts +0 -566
- package/src/telemetry/watchdog-direct-emit.test.ts +0 -112
- package/src/telemetry/watchdog-direct-emit.ts +0 -104
- package/src/telemetry/watchdog-events-store.ts +0 -31
- package/src/tools/ui-surface/channel-variants.ts +0 -52
- package/src/watcher/__tests__/telemetry.test.ts +0 -178
- package/src/watcher/telemetry.ts +0 -93
- package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +0 -165
- package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +0 -151
- /package/src/{telemetry → persistence}/tool-usage-store.ts +0 -0
- /package/src/{telemetry → persistence}/turn-outcome.ts +0 -0
|
@@ -14,7 +14,6 @@ import {
|
|
|
14
14
|
} from "../../providers/model-catalog.js";
|
|
15
15
|
import { isCodexSubscriptionModel } from "../../providers/openai/codex-models.js";
|
|
16
16
|
import {
|
|
17
|
-
AUTO_PROFILE_KEY,
|
|
18
17
|
DEFAULT_PROFILE_KEYS,
|
|
19
18
|
DEFAULT_PROFILE_PROVIDERS,
|
|
20
19
|
FALLBACK_PROFILE_BY_KEY,
|
|
@@ -29,9 +28,9 @@ import { InputModalitiesSchema } from "../input-modalities.js";
|
|
|
29
28
|
|
|
30
29
|
/**
|
|
31
30
|
* Managed-only keys that are valid reference targets on the cloud column
|
|
32
|
-
* whether or not a workspace stub exists. The flag-gated
|
|
33
|
-
*
|
|
34
|
-
* present, so
|
|
31
|
+
* whether or not a workspace stub exists. The flag-gated one (`os-beta`)
|
|
32
|
+
* is excluded: it resolves only while its reconciled stub is
|
|
33
|
+
* present, so it enters the reference set through `llm.profiles` alone.
|
|
35
34
|
*/
|
|
36
35
|
const ALWAYS_RESOLVING_MANAGED_ONLY_PROFILE_KEYS =
|
|
37
36
|
MANAGED_ONLY_PROFILE_KEYS.filter((key) => !isFlagGatedProfileKey(key));
|
|
@@ -241,7 +240,6 @@ export const LLMCallSiteEnum = z.enum([
|
|
|
241
240
|
"voiceEscalationJudge",
|
|
242
241
|
"voiceContinuationJudge",
|
|
243
242
|
"voiceContinuationLabel",
|
|
244
|
-
"autoProfileRouter",
|
|
245
243
|
"trustRuleSuggestion",
|
|
246
244
|
"homeGreeting",
|
|
247
245
|
"homeSuggestedPrompts",
|
|
@@ -505,13 +503,6 @@ const OpenRouterDeepPartialSchema = z.object({
|
|
|
505
503
|
// Profile metadata
|
|
506
504
|
// ---------------------------------------------------------------------------
|
|
507
505
|
|
|
508
|
-
/**
|
|
509
|
-
* Distinguishes daemon-cloud profiles (overwritten on every startup) from
|
|
510
|
-
* user-created ones (never touched by the daemon).
|
|
511
|
-
*/
|
|
512
|
-
const ProfileSource = z.enum(["managed", "user"]);
|
|
513
|
-
type ProfileSource = z.infer<typeof ProfileSource>;
|
|
514
|
-
|
|
515
506
|
// ---------------------------------------------------------------------------
|
|
516
507
|
// Pricing overrides
|
|
517
508
|
// ---------------------------------------------------------------------------
|
|
@@ -673,7 +664,6 @@ const MixSchema = z.array(MixArmSchema).min(2);
|
|
|
673
664
|
* resolver's deep-merge output.
|
|
674
665
|
*/
|
|
675
666
|
export const ProfileEntry = LLMConfigFragment.extend({
|
|
676
|
-
source: ProfileSource.optional(),
|
|
677
667
|
/**
|
|
678
668
|
* `.nullable()` is intentional: the PUT `/v1/config/llm/profiles/:name`
|
|
679
669
|
* route uses `null` as the "clear this field" sentinel (edit mode sends
|
|
@@ -812,9 +802,6 @@ function unresolvableProfileReason(
|
|
|
812
802
|
if (name === JEV_MANAGED_PROFILE_KEY) {
|
|
813
803
|
return "is the cloud Jev profile, which resolves only while llm.default is the cloud provider";
|
|
814
804
|
}
|
|
815
|
-
if (name === AUTO_PROFILE_KEY) {
|
|
816
|
-
return "is the cloud Auto profile, which resolves only while llm.default is the cloud provider";
|
|
817
|
-
}
|
|
818
805
|
return "is a cloud backup profile, which resolves only while llm.default is the cloud provider";
|
|
819
806
|
}
|
|
820
807
|
|
|
@@ -824,10 +811,10 @@ function unresolvableProfileReason(
|
|
|
824
811
|
* `llm.default`.
|
|
825
812
|
*
|
|
826
813
|
* Every on-disk key qualifies but one: a reserved backup name whose entry is
|
|
827
|
-
* a thin `
|
|
814
|
+
* a thin model-less `provider: "cadet"` stub. The stub is not a profile, it is the
|
|
828
815
|
* workspace's slot for a code-owned one, and it can reach disk on a cloud
|
|
829
816
|
* install through nothing more than a `config get` -> `config set` round-trip
|
|
830
|
-
* of the effective profile list (
|
|
817
|
+
* of the effective profile list (a write round-trip reduces the
|
|
831
818
|
* echoed body to exactly that stub). Counting it as an ordinary raw key would
|
|
832
819
|
* let it launder a backup reference past the provider gate: after a switch to
|
|
833
820
|
* a BYOK or ChatGPT default provider the reference would keep validating
|
|
@@ -837,7 +824,7 @@ function unresolvableProfileReason(
|
|
|
837
824
|
* A genuinely user-owned entry under a backup name is the opposite case: it
|
|
838
825
|
* carries its own body, and with no code-owned body to lose on a non-managed
|
|
839
826
|
* column `resolveAgainstBody` resolves the workspace entry itself. So it
|
|
840
|
-
* stays a valid target on every column. The
|
|
827
|
+
* stays a valid target on every column. The provider test is the same one
|
|
841
828
|
* the resolver uses, which is what keeps the two in step.
|
|
842
829
|
*/
|
|
843
830
|
function referenceableProfileKeys(
|
|
@@ -853,7 +840,7 @@ function referenceableProfileKeys(
|
|
|
853
840
|
value != null && typeof value === "object" && !Array.isArray(value)
|
|
854
841
|
? (value as Record<string, unknown>)
|
|
855
842
|
: null;
|
|
856
|
-
return entry != null && entry.
|
|
843
|
+
return entry != null && entry.provider !== "cadet";
|
|
857
844
|
})
|
|
858
845
|
.map(([name]) => name);
|
|
859
846
|
}
|
|
@@ -891,9 +878,9 @@ export function collectFallbackProfileIssues(
|
|
|
891
878
|
// (`default-profile-catalog.ts`) and resolve whether or not they are
|
|
892
879
|
// materialized in `llm.profiles`, so their names are always valid
|
|
893
880
|
// fallback targets (same rule as call-site `profile` references). The
|
|
894
|
-
//
|
|
881
|
+
// cloud backups resolve the same way, but on the cloud column only,
|
|
895
882
|
// so they are valid targets only under a cloud `llm.default`.
|
|
896
|
-
// A persisted
|
|
883
|
+
// A persisted cloud stub for a backup name does not change that, see
|
|
897
884
|
// `referenceableProfileKeys`.
|
|
898
885
|
const backupsResolve = backupProfilesResolveUnderDefaultProvider(
|
|
899
886
|
RawDefaultSelectionSchema.parse(llmDefault),
|
|
@@ -927,7 +914,7 @@ export function collectFallbackProfileIssues(
|
|
|
927
914
|
const expectedFallback = isDefaultProfileKey(name)
|
|
928
915
|
? FALLBACK_PROFILE_BY_KEY[name]
|
|
929
916
|
: undefined;
|
|
930
|
-
if (entry?.
|
|
917
|
+
if (entry?.provider !== "cadet" || fallback !== expectedFallback) {
|
|
931
918
|
issues.push({
|
|
932
919
|
profileName: name,
|
|
933
920
|
message: `Profile "${name}" cannot configure fallbackProfile. Automatic fallbacks are code-owned for Cadet Cloud default profiles.`,
|
|
@@ -1019,9 +1006,17 @@ export const LLMSchema = z
|
|
|
1019
1006
|
})
|
|
1020
1007
|
.superRefine((config, ctx) => {
|
|
1021
1008
|
for (const [name, entry] of Object.entries(config.profiles ?? {})) {
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1009
|
+
// A model-less entry under a code-defined default name is the thin
|
|
1010
|
+
// cloud stub — its content is code-owned, so the routing-identity
|
|
1011
|
+
// model check applies only to entries carrying their own body.
|
|
1012
|
+
const isCodeOwnedName =
|
|
1013
|
+
isDefaultProfileKey(name) ||
|
|
1014
|
+
isCloudOnlyProfileKey(name) ||
|
|
1015
|
+
isFlagGatedProfileKey(name);
|
|
1016
|
+
const issue =
|
|
1017
|
+
entry?.provider && (entry.model != null || !isCodeOwnedName)
|
|
1018
|
+
? routingIdentityModelIssue(entry.provider, entry.model ?? undefined)
|
|
1019
|
+
: null;
|
|
1025
1020
|
if (issue) {
|
|
1026
1021
|
ctx.addIssue({
|
|
1027
1022
|
code: z.ZodIssueCode.custom,
|
|
@@ -1062,7 +1057,7 @@ export const LLMSchema = z
|
|
|
1062
1057
|
// The flag-gated `os-beta` is excluded: it resolves only while a
|
|
1063
1058
|
// workspace entry exists, so a reference to it is valid only when that
|
|
1064
1059
|
// entry is present in `config.profiles`. A backup name materialized as a
|
|
1065
|
-
// thin
|
|
1060
|
+
// thin cloud stub does not re-enter the set on a non-cloud column
|
|
1066
1061
|
// either, see `referenceableProfileKeys`.
|
|
1067
1062
|
const backupsResolve = backupProfilesResolveUnderDefaultProvider(
|
|
1068
1063
|
config.default,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
MANAGED_PROFILE_TEMPLATES,
|
|
16
16
|
} from "./default-profile-catalog.js";
|
|
17
17
|
import { getIsCloud } from "./env-registry.js";
|
|
18
|
-
import {
|
|
18
|
+
import { getConfig, loadRawConfig, saveRawConfig } from "./loader.js";
|
|
19
19
|
import { isDispatchableProfile } from "./profile-dispatchability.js";
|
|
20
20
|
import {
|
|
21
21
|
isDefaultProviderChoice,
|
|
@@ -64,7 +64,7 @@ export type SeedInferenceProfilesOptions = {
|
|
|
64
64
|
export function seedInferenceProfiles(
|
|
65
65
|
options: SeedInferenceProfilesOptions = {},
|
|
66
66
|
): void {
|
|
67
|
-
const config =
|
|
67
|
+
const config = getConfig();
|
|
68
68
|
const llm = config.llm;
|
|
69
69
|
const profiles = llm.profiles;
|
|
70
70
|
|
|
@@ -173,20 +173,27 @@ export function seedInferenceProfiles(
|
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
// Advisor profile: defaults to the strongest active managed default.
|
|
176
|
+
// Advisor profile: defaults to the strongest active managed default. A
|
|
177
|
+
// default name the user shadowed (a non-cadet workspace entry) is user
|
|
178
|
+
// intent and is left alone; a disabled code-owned default is repaired.
|
|
177
179
|
const requestedAdvisorProfile = llm.advisorProfile;
|
|
178
180
|
const requestedAdvisorEntry =
|
|
179
181
|
requestedAdvisorProfile !== undefined
|
|
180
182
|
? effectiveProfiles[requestedAdvisorProfile]
|
|
181
183
|
: undefined;
|
|
184
|
+
const requestedAdvisorWorkspace =
|
|
185
|
+
requestedAdvisorProfile !== undefined
|
|
186
|
+
? (llm.profiles[requestedAdvisorProfile] ?? null)
|
|
187
|
+
: null;
|
|
182
188
|
const requestedAdvisorIsDisabledManaged =
|
|
183
|
-
requestedAdvisorEntry?.
|
|
184
|
-
|
|
189
|
+
requestedAdvisorEntry?.status === "disabled" &&
|
|
190
|
+
(requestedAdvisorWorkspace === null ||
|
|
191
|
+
requestedAdvisorWorkspace.provider === "cadet");
|
|
185
192
|
if (
|
|
186
193
|
requestedAdvisorProfile === undefined ||
|
|
187
194
|
requestedAdvisorIsDisabledManaged
|
|
188
195
|
) {
|
|
189
|
-
const defaultAdvisorProfile =
|
|
196
|
+
const defaultAdvisorProfile = firstActiveDefaultProfile(effectiveProfiles, [
|
|
190
197
|
"quality-optimized",
|
|
191
198
|
"balanced",
|
|
192
199
|
"cost-optimized",
|
|
@@ -223,14 +230,6 @@ export function seedInferenceProfiles(
|
|
|
223
230
|
}
|
|
224
231
|
llm.profileOrder = profileOrder;
|
|
225
232
|
|
|
226
|
-
// Tag any remaining profiles without a source as user-created.
|
|
227
|
-
for (const [name, profile] of Object.entries(profiles)) {
|
|
228
|
-
if (MANAGED_PROFILE_NAMES.has(name)) {
|
|
229
|
-
continue;
|
|
230
|
-
}
|
|
231
|
-
profile.source ??= "user";
|
|
232
|
-
}
|
|
233
|
-
|
|
234
233
|
// Persist: the seed only ever rewrites the `llm` section, so the typed
|
|
235
234
|
// view's `llm` lands on the raw base verbatim and every other section the
|
|
236
235
|
// user has on disk survives untouched.
|
|
@@ -274,7 +273,7 @@ function pruneNonDispatchableProfiles(
|
|
|
274
273
|
// Thin managed stubs carry no model/mix by design — their content is
|
|
275
274
|
// code-owned, so dispatchability is judged on the catalog body, never
|
|
276
275
|
// the stub. Only workspace-owned profiles are pruned.
|
|
277
|
-
if (MANAGED_PROFILE_NAMES.has(name)
|
|
276
|
+
if (MANAGED_PROFILE_NAMES.has(name)) {
|
|
278
277
|
continue;
|
|
279
278
|
}
|
|
280
279
|
if (!isDispatchableProfile(profile)) {
|
|
@@ -331,13 +330,13 @@ function pruneRemovedProfileReferences(
|
|
|
331
330
|
}
|
|
332
331
|
}
|
|
333
332
|
|
|
334
|
-
function
|
|
333
|
+
function firstActiveDefaultProfile(
|
|
335
334
|
profiles: Record<string, ProfileEntry>,
|
|
336
335
|
names: string[],
|
|
337
336
|
): string | undefined {
|
|
338
337
|
for (const name of names) {
|
|
339
338
|
const profile = profiles[name];
|
|
340
|
-
if (profile
|
|
339
|
+
if (profile && profile.status !== "disabled") {
|
|
341
340
|
return name;
|
|
342
341
|
}
|
|
343
342
|
}
|
package/src/config/skills.ts
CHANGED
|
@@ -33,12 +33,12 @@ import { parseToolManifestFile } from "../skills/tool-manifest.js";
|
|
|
33
33
|
import { computeSkillVersionHash } from "../skills/version-hash.js";
|
|
34
34
|
import type { OwnerInfo } from "../tools/types.js";
|
|
35
35
|
import { isBunVirtualPath } from "../util/bundled-asset.js";
|
|
36
|
-
import { getLogger } from "../util/logger.js";
|
|
37
36
|
import {
|
|
38
37
|
getWorkspaceDirDisplay,
|
|
39
38
|
getWorkspacePluginsDir,
|
|
40
39
|
getWorkspaceSkillsDir,
|
|
41
|
-
} from "../util/
|
|
40
|
+
} from "../util/layout.js";
|
|
41
|
+
import { getLogger } from "../util/logger.js";
|
|
42
42
|
import {
|
|
43
43
|
hasPluginManifest,
|
|
44
44
|
readPluginManifest,
|
|
@@ -3,15 +3,10 @@ import { isDeepStrictEqual } from "node:util";
|
|
|
3
3
|
import { getLogger } from "../util/logger.js";
|
|
4
4
|
import { isAssistantFeatureFlagEnabled } from "./assistant-feature-flags.js";
|
|
5
5
|
import {
|
|
6
|
-
AUTO_PROFILE_TEMPLATE,
|
|
7
6
|
type DefaultProfileTemplate,
|
|
8
7
|
OS_BETA_PROFILE_TEMPLATE,
|
|
9
8
|
} from "./default-profile-catalog.js";
|
|
10
|
-
import {
|
|
11
|
-
AUTO_PROFILE_FEATURE_FLAG_KEY,
|
|
12
|
-
AUTO_PROFILE_KEY,
|
|
13
|
-
OS_BETA_PROFILE_KEY,
|
|
14
|
-
} from "./default-profile-names.js";
|
|
9
|
+
import { OS_BETA_PROFILE_KEY } from "./default-profile-names.js";
|
|
15
10
|
import { getIsCloud } from "./env-registry.js";
|
|
16
11
|
import {
|
|
17
12
|
getConfigReadOnly,
|
|
@@ -57,14 +52,6 @@ const GATED_PROFILES: readonly GatedProfile[] = [
|
|
|
57
52
|
},
|
|
58
53
|
byokStartsDisabled: true,
|
|
59
54
|
},
|
|
60
|
-
{
|
|
61
|
-
key: AUTO_PROFILE_KEY,
|
|
62
|
-
flag: AUTO_PROFILE_FEATURE_FLAG_KEY,
|
|
63
|
-
template: AUTO_PROFILE_TEMPLATE,
|
|
64
|
-
// Auto leads the picker.
|
|
65
|
-
place: (profileOrder) => profileOrder.unshift(AUTO_PROFILE_KEY),
|
|
66
|
-
byokStartsDisabled: false,
|
|
67
|
-
},
|
|
68
55
|
];
|
|
69
56
|
|
|
70
57
|
/**
|
|
@@ -112,13 +99,8 @@ export function reconcileFlagGatedProfiles(): boolean {
|
|
|
112
99
|
|
|
113
100
|
const previous = readObject(profiles[gated.key]);
|
|
114
101
|
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
// user-sourced entry of the same name is left untouched on every path.
|
|
118
|
-
const isOursToManage = previous == null || previous.source === "managed";
|
|
119
|
-
if (!isOursToManage) {
|
|
120
|
-
continue;
|
|
121
|
-
}
|
|
102
|
+
// The gated names are code-owned and reserved, so every entry under one
|
|
103
|
+
// is ours to manage; a user-owned shadow cannot exist.
|
|
122
104
|
|
|
123
105
|
const order = llm.profileOrder as string[];
|
|
124
106
|
const profileChanged = enabled
|
|
@@ -149,9 +131,9 @@ function enableProfile(
|
|
|
149
131
|
): boolean {
|
|
150
132
|
// The profile's content is code-owned (`default-profile-catalog.ts`) and
|
|
151
133
|
// resolves through the effective view once this stub exists; the workspace
|
|
152
|
-
// entry carries
|
|
153
|
-
// `topP`).
|
|
154
|
-
const next: Record<string, unknown> = {
|
|
134
|
+
// entry carries the cadet-provider marker (its cloud identity) plus the
|
|
135
|
+
// overlay fields (`label`, `status`, `topP`).
|
|
136
|
+
const next: Record<string, unknown> = { provider: "cadet" };
|
|
155
137
|
|
|
156
138
|
// BYOK installs create the stub disabled: the cloud inference connection
|
|
157
139
|
// backing this profile isn't usable until the user enables it, so a fresh
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
|
|
26
26
|
import { isTokenExpired } from "@mycadet/credential-storage";
|
|
27
27
|
|
|
28
|
+
import { getCloudAssistantId } from "../config/env.js";
|
|
28
29
|
import type { Services } from "../config/schemas/services.js";
|
|
29
30
|
import { getConnectionAccessTokenResult } from "../oauth/credential-token-resolver.js";
|
|
30
31
|
import {
|
|
@@ -633,12 +634,13 @@ const ASSISTANT_API_KEY_CONNECTION_ID = "cadet:assistant_api_key";
|
|
|
633
634
|
* observed here and acted on by a client.
|
|
634
635
|
*
|
|
635
636
|
* Statuses map onto the shared vocabulary:
|
|
637
|
+
* - `missing_token`: no key is stored, so managed inference cannot run.
|
|
636
638
|
* - `revoked`: the cloud settled that the stored key is not accepted.
|
|
637
639
|
* - `unreachable`: the credential store or the cloud did not answer, so
|
|
638
640
|
* health is unknown. The heartbeat drops these before notifying, which is
|
|
639
641
|
* what keeps a transient outage from raising a credential alert.
|
|
640
642
|
*
|
|
641
|
-
* `canAutoRecover` is true for
|
|
643
|
+
* `canAutoRecover` is true for both failure statuses: recovery needs no
|
|
642
644
|
* re-authorization from the user, only a signed-in client to rotate the key.
|
|
643
645
|
*/
|
|
644
646
|
export async function checkAssistantApiKey(): Promise<CredentialHealthResult | null> {
|
|
@@ -667,8 +669,13 @@ export async function checkAssistantApiKey(): Promise<CredentialHealthResult | n
|
|
|
667
669
|
}
|
|
668
670
|
|
|
669
671
|
if (stored.value == null) {
|
|
670
|
-
// A workspace that was never connected to the cloud has no
|
|
671
|
-
//
|
|
672
|
+
// A workspace that was never connected to the cloud has no bound cloud
|
|
673
|
+
// identity and is not unhealthy. Only an install that already carries a
|
|
674
|
+
// cloud identity is missing something — identity resolves from the API
|
|
675
|
+
// key via the cloud validation API, never from a stored credential.
|
|
676
|
+
if (!getCloudAssistantId()) {
|
|
677
|
+
return null;
|
|
678
|
+
}
|
|
672
679
|
return {
|
|
673
680
|
...base,
|
|
674
681
|
status: "missing_token",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getConfig } from "../config/loader.js";
|
|
2
2
|
import { wrapWithCallSiteRouting } from "../providers/call-site-routing.js";
|
|
3
3
|
import {
|
|
4
4
|
mainAgentResolutionError,
|
|
@@ -82,7 +82,7 @@ const VALID_DISPOSITIONS: ReadonlySet<string> = new Set([
|
|
|
82
82
|
*/
|
|
83
83
|
export function createApprovalCopyGenerator(): ApprovalCopyGenerator {
|
|
84
84
|
return async (context, options = {}) => {
|
|
85
|
-
const config =
|
|
85
|
+
const config = getConfig();
|
|
86
86
|
// Connection-aware default-provider resolution. Throws
|
|
87
87
|
// `ConnectionResolutionError` on hard config errors (missing /
|
|
88
88
|
// unknown / mismatched connection). Returns null on soft credential
|
|
@@ -150,7 +150,7 @@ export function createApprovalCopyGenerator(): ApprovalCopyGenerator {
|
|
|
150
150
|
*/
|
|
151
151
|
export function createApprovalConversationGenerator(): ApprovalConversationGenerator {
|
|
152
152
|
return async (context) => {
|
|
153
|
-
const config =
|
|
153
|
+
const config = getConfig();
|
|
154
154
|
// Connection-aware default + per-call routing. `resolveDefaultProvider`
|
|
155
155
|
// throws `ConnectionResolutionError` on hard config errors (missing /
|
|
156
156
|
// unknown / mismatched connection) and returns null on soft credential
|
|
@@ -37,7 +37,6 @@ import { handleEmitEventSignal } from "../signals/emit-event.js";
|
|
|
37
37
|
import { handleUserMessageSignal } from "../signals/user-message.js";
|
|
38
38
|
import { WORKSPACE_THEME_RELATIVE_PATH } from "../theme/workspace-theme.js";
|
|
39
39
|
import { DebouncerMap } from "../util/debounce.js";
|
|
40
|
-
import { getLogger } from "../util/logger.js";
|
|
41
40
|
import {
|
|
42
41
|
getAvatarDir,
|
|
43
42
|
getSignalsDir,
|
|
@@ -45,7 +44,8 @@ import {
|
|
|
45
44
|
getWorkspaceDir,
|
|
46
45
|
getWorkspacePromptPath,
|
|
47
46
|
WORKSPACE_MCP_FILENAME,
|
|
48
|
-
} from "../util/
|
|
47
|
+
} from "../util/layout.js";
|
|
48
|
+
import { getLogger } from "../util/logger.js";
|
|
49
49
|
import { evictConversationsForReload } from "./conversation-store.js";
|
|
50
50
|
import { parseIdentityFields } from "./handlers/identity.js";
|
|
51
51
|
import { reloadMcpServers } from "./mcp-reload-service.js";
|
|
@@ -53,7 +53,6 @@ import {
|
|
|
53
53
|
updateMessageContent,
|
|
54
54
|
} from "../persistence/conversation-crud.js";
|
|
55
55
|
import { syncMessageToDisk } from "../persistence/conversation-disk-view.js";
|
|
56
|
-
import { AUTO_ROUTED_PROFILE_METADATA_KEY } from "../persistence/conversation-types.js";
|
|
57
56
|
import { enqueueLexicalIndexForMessage } from "../persistence/job-handlers/message-lexical.js";
|
|
58
57
|
import {
|
|
59
58
|
backfillMessageIdOnLogs,
|
|
@@ -277,12 +276,6 @@ export interface EventHandlerState {
|
|
|
277
276
|
* the model ever having seen it.
|
|
278
277
|
*/
|
|
279
278
|
pendingNotifiedInferenceProfile: string | null;
|
|
280
|
-
/**
|
|
281
|
-
* The default profile the Auto profile routed this turn to, stamped on the
|
|
282
|
-
* turn's assistant rows and carried on `message_complete` so clients can
|
|
283
|
-
* show which profile answered. `undefined` on every turn not run on Auto.
|
|
284
|
-
*/
|
|
285
|
-
autoRoutedProfile: string | undefined;
|
|
286
279
|
pendingDirectiveDisplayBuffer: string;
|
|
287
280
|
firstAssistantText: string;
|
|
288
281
|
/** Most recent resolved provider for the current exchange's usage accounting. */
|
|
@@ -708,7 +701,6 @@ export interface EventHandlerDeps {
|
|
|
708
701
|
export function createEventHandlerState(): EventHandlerState {
|
|
709
702
|
return {
|
|
710
703
|
pendingNotifiedInferenceProfile: null,
|
|
711
|
-
autoRoutedProfile: undefined,
|
|
712
704
|
pendingDirectiveDisplayBuffer: "",
|
|
713
705
|
firstAssistantText: "",
|
|
714
706
|
exchangeProviderName: undefined,
|
|
@@ -2997,13 +2989,6 @@ function annotatePersistedAssistantMessage(
|
|
|
2997
2989
|
display: surface.display,
|
|
2998
2990
|
...(surface.persistent ? { persistent: true } : {}),
|
|
2999
2991
|
...(surface.toolCallId ? { toolCallId: surface.toolCallId } : {}),
|
|
3000
|
-
// Daemon-only commit-timing activation tag, persisted so
|
|
3001
|
-
// restoreSurfaceStateFromHistory can rehydrate it after a reload. This
|
|
3002
|
-
// block lives only in server-side conversation history, never in the
|
|
3003
|
-
// client `ui_surface_show` message.
|
|
3004
|
-
...(surface.activationMoment
|
|
3005
|
-
? { activationMoment: surface.activationMoment }
|
|
3006
|
-
: {}),
|
|
3007
2992
|
// A surface answered before this write lands owns no persisted block for
|
|
3008
2993
|
// `markSurfaceCompleted` to patch, so its completion rides the snapshot.
|
|
3009
2994
|
...(surface.completed ? { completed: true } : {}),
|
|
@@ -3329,9 +3314,6 @@ export async function handleMessageComplete(
|
|
|
3329
3314
|
...(event.assistantTextVisibility
|
|
3330
3315
|
? { [ASSISTANT_TEXT_VISIBILITY_KEY]: event.assistantTextVisibility }
|
|
3331
3316
|
: {}),
|
|
3332
|
-
...(state.autoRoutedProfile
|
|
3333
|
-
? { [AUTO_ROUTED_PROFILE_METADATA_KEY]: state.autoRoutedProfile }
|
|
3334
|
-
: {}),
|
|
3335
3317
|
};
|
|
3336
3318
|
state.lastAssistantTextVisibility = event.assistantTextVisibility;
|
|
3337
3319
|
const persisted = await finalizeInflightContent(
|
|
@@ -25,8 +25,6 @@ import type {
|
|
|
25
25
|
TurnChannelContext,
|
|
26
26
|
TurnInterfaceContext,
|
|
27
27
|
} from "../channels/types.js";
|
|
28
|
-
import { getConversationProfilesForProvider } from "../config/default-profile-catalog.js";
|
|
29
|
-
import { AUTO_PROFILE_KEY } from "../config/default-profile-names.js";
|
|
30
28
|
import {
|
|
31
29
|
contextWindowConfigFromEffective,
|
|
32
30
|
type EffectiveContextWindow,
|
|
@@ -66,6 +64,7 @@ import {
|
|
|
66
64
|
backfillMessageIdOnLogs,
|
|
67
65
|
recordSyntheticAgentErrorMessageLog,
|
|
68
66
|
} from "../persistence/llm-request-log-store.js";
|
|
67
|
+
import { stampTurnOutcome } from "../persistence/turn-outcome.js";
|
|
69
68
|
import { HOOKS } from "../plugin-api/constants.js";
|
|
70
69
|
import type { ConversationGraphMemory } from "../plugins/defaults/memory/graph/conversation-graph-memory.js";
|
|
71
70
|
import { enqueueMemoryRetrospectiveOnCompaction } from "../plugins/defaults/memory/memory-retrospective-enqueue.js";
|
|
@@ -86,7 +85,6 @@ import { resolveTurnReplyMessageId } from "../runtime/channel-reply-delivery.js"
|
|
|
86
85
|
import { isNoResponseOnlyText } from "../runtime/no-response.js";
|
|
87
86
|
import { getByConversation as getPendingInteractionsByConversation } from "../runtime/pending-interactions.js";
|
|
88
87
|
import { publishConversationMessagesChanged } from "../runtime/sync/resource-sync-events.js";
|
|
89
|
-
import { stampTurnOutcome } from "../telemetry/turn-outcome.js";
|
|
90
88
|
import {
|
|
91
89
|
emitToolProfilingSummary,
|
|
92
90
|
startToolProfilingRequest,
|
|
@@ -102,12 +100,6 @@ import {
|
|
|
102
100
|
DEFAULT_TURN_COMMIT_MAX_WAIT_MS,
|
|
103
101
|
} from "./abort-watchdog.js";
|
|
104
102
|
import { cleanAssistantContent } from "./assistant-attachments.js";
|
|
105
|
-
import {
|
|
106
|
-
type AutoProfileRoute,
|
|
107
|
-
plainTextOf,
|
|
108
|
-
routeAutoProfile,
|
|
109
|
-
takeAutoProfilePreview,
|
|
110
|
-
} from "./auto-profile-router.js";
|
|
111
103
|
import { conversationSupportsDynamicUi } from "./channel-ui-capability.js";
|
|
112
104
|
import type { Conversation } from "./conversation.js";
|
|
113
105
|
import {
|
|
@@ -670,89 +662,16 @@ export async function runAgentLoopImpl(
|
|
|
670
662
|
// the row.
|
|
671
663
|
const config = getConfig();
|
|
672
664
|
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
// profile. That winner is named here so the router below covers every path
|
|
676
|
-
// that would otherwise dispatch the Auto body.
|
|
677
|
-
const readRequestedOverrideProfile = (): string | undefined => {
|
|
678
|
-
const explicit = options?.overrideProfile ?? resolveOverrideProfile(ctx);
|
|
679
|
-
if (explicit !== undefined) {
|
|
680
|
-
return explicit;
|
|
681
|
-
}
|
|
682
|
-
const winner = selectWinningProfile(inferenceCallSite, config.llm, {
|
|
683
|
-
selectionSeed: ctx.conversationId,
|
|
684
|
-
}).profileName;
|
|
685
|
-
return winner === AUTO_PROFILE_KEY ? AUTO_PROFILE_KEY : undefined;
|
|
686
|
-
};
|
|
665
|
+
const readRequestedOverrideProfile = (): string | undefined =>
|
|
666
|
+
options?.overrideProfile ?? resolveOverrideProfile(ctx);
|
|
687
667
|
|
|
688
|
-
// The Auto profile is a selection over the default profiles, made once per
|
|
689
|
-
// turn: the routed profile stands in for the Auto name on every read, so
|
|
690
|
-
// the whole turn (and any subagent inheriting the override) runs on one
|
|
691
|
-
// profile. A user profile that shadows the cloud name is a profile of
|
|
692
|
-
// its own and is not routed. Nothing here may throw: the turn's processing
|
|
693
|
-
// state is already held and its release lives in the loop's `finally`
|
|
694
|
-
// further down, so a routing failure degrades to the Auto body instead.
|
|
695
|
-
const routeAutoProfileForTurn =
|
|
696
|
-
async (): Promise<AutoProfileRoute | null> => {
|
|
697
|
-
try {
|
|
698
|
-
const profiles = getConversationProfilesForProvider(config.llm);
|
|
699
|
-
if (profiles[AUTO_PROFILE_KEY]?.source !== "managed") {
|
|
700
|
-
return null;
|
|
701
|
-
}
|
|
702
|
-
const userMessage = plainTextOf(
|
|
703
|
-
getMessageById(userMessageId)?.content ?? [],
|
|
704
|
-
);
|
|
705
|
-
// A draft the composer already previewed carries its pick over, so
|
|
706
|
-
// the reply lands on the profile the pill showed with no second call.
|
|
707
|
-
const previewed = takeAutoProfilePreview({
|
|
708
|
-
conversationId: ctx.conversationId,
|
|
709
|
-
text: userMessage,
|
|
710
|
-
history: ctx.messages,
|
|
711
|
-
profiles,
|
|
712
|
-
});
|
|
713
|
-
const route =
|
|
714
|
-
previewed ??
|
|
715
|
-
(await routeAutoProfile({
|
|
716
|
-
conversationId: ctx.conversationId,
|
|
717
|
-
history: ctx.messages,
|
|
718
|
-
userMessage,
|
|
719
|
-
profiles,
|
|
720
|
-
signal: abortController.signal,
|
|
721
|
-
}));
|
|
722
|
-
rlog.info(
|
|
723
|
-
{
|
|
724
|
-
outcome: route.outcome,
|
|
725
|
-
profile: route.profile,
|
|
726
|
-
confidence: route.confidence ?? null,
|
|
727
|
-
latencyMs: route.latencyMs,
|
|
728
|
-
reusedPreview: previewed !== undefined,
|
|
729
|
-
},
|
|
730
|
-
"Auto profile routed the turn",
|
|
731
|
-
);
|
|
732
|
-
return route;
|
|
733
|
-
} catch (err) {
|
|
734
|
-
rlog.warn(
|
|
735
|
-
{ err },
|
|
736
|
-
"Auto profile routing failed; running the Auto body",
|
|
737
|
-
);
|
|
738
|
-
return null;
|
|
739
|
-
}
|
|
740
|
-
};
|
|
741
668
|
const requestedOverrideProfile = readRequestedOverrideProfile();
|
|
742
|
-
const autoRoute =
|
|
743
|
-
requestedOverrideProfile === AUTO_PROFILE_KEY
|
|
744
|
-
? await routeAutoProfileForTurn()
|
|
745
|
-
: null;
|
|
746
|
-
const withAutoRoute = (profile: string | undefined): string | undefined =>
|
|
747
|
-
profile === AUTO_PROFILE_KEY && autoRoute ? autoRoute.profile : profile;
|
|
748
|
-
|
|
749
|
-
const userExplicitOverride = withAutoRoute(requestedOverrideProfile);
|
|
750
669
|
|
|
751
|
-
const turnOverrideProfile =
|
|
670
|
+
const turnOverrideProfile = requestedOverrideProfile;
|
|
752
671
|
const forceOverrideProfile = options?.forceOverrideProfile === true;
|
|
753
672
|
|
|
754
673
|
const readCurrentOverrideProfile = (): string | undefined =>
|
|
755
|
-
|
|
674
|
+
readRequestedOverrideProfile();
|
|
756
675
|
|
|
757
676
|
// Best-effort attribution for error classification: names the resolved
|
|
758
677
|
// connection and profile so credential/connection errors point at the
|
|
@@ -981,7 +900,6 @@ export async function runAgentLoopImpl(
|
|
|
981
900
|
startToolProfilingRequest(ctx.conversationId);
|
|
982
901
|
let turnStarted = false;
|
|
983
902
|
const state = createEventHandlerState();
|
|
984
|
-
state.autoRoutedProfile = autoRoute?.profile;
|
|
985
903
|
// Publish this turn's flushed-content watermark so the worker → daemon
|
|
986
904
|
// persist hand-off can cap a snapshot anchor at flushed content rather than
|
|
987
905
|
// the live seq counter, which runs ahead while the turn streams. Cleared in
|
|
@@ -1723,7 +1641,6 @@ export async function runAgentLoopImpl(
|
|
|
1723
1641
|
supportsDynamicUi: conversationSupportsDynamicUi(ctx),
|
|
1724
1642
|
trust: loopTrust,
|
|
1725
1643
|
overrideProfile: turnOverrideProfile,
|
|
1726
|
-
...(autoRoute ? { overrideProfileOrigin: "auto" as const } : {}),
|
|
1727
1644
|
...(forceOverrideProfile ? { forceOverrideProfile: true } : {}),
|
|
1728
1645
|
resolveOverrideProfile: refreshCurrentProfileState,
|
|
1729
1646
|
...(onModelCallPrepared !== undefined ? { onModelCallPrepared } : {}),
|
|
@@ -2183,9 +2100,7 @@ export async function runAgentLoopImpl(
|
|
|
2183
2100
|
overrideProfile: mainRowOverrideProfile,
|
|
2184
2101
|
...(state.exchangeInferenceProfile !== undefined
|
|
2185
2102
|
? { forceOverrideProfile: true }
|
|
2186
|
-
:
|
|
2187
|
-
? { overrideProfileOrigin: "auto" as const }
|
|
2188
|
-
: {}),
|
|
2103
|
+
: {}),
|
|
2189
2104
|
},
|
|
2190
2105
|
turnCronRunId,
|
|
2191
2106
|
);
|
|
@@ -2292,9 +2207,6 @@ export async function runAgentLoopImpl(
|
|
|
2292
2207
|
...(state.lastAssistantMessageId
|
|
2293
2208
|
? { messageId: state.lastAssistantMessageId }
|
|
2294
2209
|
: {}),
|
|
2295
|
-
...(state.autoRoutedProfile
|
|
2296
|
-
? { autoRoutedProfile: state.autoRoutedProfile }
|
|
2297
|
-
: {}),
|
|
2298
2210
|
modeSession: ctx.modeSessions.getTurnOwner(reqId),
|
|
2299
2211
|
});
|
|
2300
2212
|
publishLoopMessagesChanged();
|
|
@@ -2323,9 +2235,6 @@ export async function runAgentLoopImpl(
|
|
|
2323
2235
|
...(state.lastAssistantTextVisibility
|
|
2324
2236
|
? { assistantTextVisibility: state.lastAssistantTextVisibility }
|
|
2325
2237
|
: {}),
|
|
2326
|
-
...(state.autoRoutedProfile
|
|
2327
|
-
? { autoRoutedProfile: state.autoRoutedProfile }
|
|
2328
|
-
: {}),
|
|
2329
2238
|
});
|
|
2330
2239
|
if (shouldEmitQueuedConversationNotices) {
|
|
2331
2240
|
for (const notice of drainConversationNotices(ctx.conversationId)) {
|
|
@@ -35,6 +35,7 @@ import {
|
|
|
35
35
|
setConversationOriginInterfaceIfUnset,
|
|
36
36
|
} from "../persistence/conversation-crud.js";
|
|
37
37
|
import { isReplyPushIneligibleUserMessage } from "../persistence/conversation-types.js";
|
|
38
|
+
import { stampTurnOutcome } from "../persistence/turn-outcome.js";
|
|
38
39
|
import type { ContextWindowResult } from "../plugins/defaults/compaction/window-manager.js";
|
|
39
40
|
import { getCurrentSeq } from "../runtime/assistant-stream-state.js";
|
|
40
41
|
import {
|
|
@@ -42,7 +43,6 @@ import {
|
|
|
42
43
|
routeGuardianReply,
|
|
43
44
|
} from "../runtime/guardian-reply-router.js";
|
|
44
45
|
import { publishConversationMessagesChanged } from "../runtime/sync/resource-sync-events.js";
|
|
45
|
-
import { stampTurnOutcome } from "../telemetry/turn-outcome.js";
|
|
46
46
|
import { getLogger } from "../util/logger.js";
|
|
47
47
|
import type { CleanResult, Conversation } from "./conversation.js";
|
|
48
48
|
import { repairInterruptedToolUseBlocks } from "./conversation-interrupt-repair.js";
|