@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
|
@@ -100,47 +100,8 @@ mock.module("../dense.js", () => ({
|
|
|
100
100
|
},
|
|
101
101
|
}));
|
|
102
102
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
// test file sharing the process falls through to the real store. Spread the
|
|
106
|
-
// real module so the query/type exports stay present.
|
|
107
|
-
const realWatchdogStore = {
|
|
108
|
-
...(await import("../../../../../telemetry/watchdog-events-store.js")),
|
|
109
|
-
};
|
|
110
|
-
let watchdogMockActive = false;
|
|
111
|
-
type RecordedEvent = {
|
|
112
|
-
checkName: string;
|
|
113
|
-
value?: number | null;
|
|
114
|
-
detail?: Record<string, unknown> | null;
|
|
115
|
-
};
|
|
116
|
-
let recordedGateEvents: RecordedEvent[] = [];
|
|
117
|
-
// Split by check_name rather than into one bucket: orchestrate emits a gate
|
|
118
|
-
// event AND a selection event per turn, and the gate assertions below count
|
|
119
|
-
// their events exactly.
|
|
120
|
-
let recordedSelectionEvents: RecordedEvent[] = [];
|
|
121
|
-
mock.module("../../../../../telemetry/watchdog-events-store.js", () => ({
|
|
122
|
-
...realWatchdogStore,
|
|
123
|
-
recordWatchdogEvent: (
|
|
124
|
-
record: Parameters<typeof realWatchdogStore.recordWatchdogEvent>[0],
|
|
125
|
-
) => {
|
|
126
|
-
if (!watchdogMockActive) {
|
|
127
|
-
return realWatchdogStore.recordWatchdogEvent(record);
|
|
128
|
-
}
|
|
129
|
-
if (record.checkName === MEMORY_V3_SELECTION_CHECK_NAME) {
|
|
130
|
-
recordedSelectionEvents.push(record);
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
recordedGateEvents.push(record);
|
|
134
|
-
},
|
|
135
|
-
}));
|
|
136
|
-
|
|
137
|
-
const {
|
|
138
|
-
orchestrate,
|
|
139
|
-
DEFAULT_NEEDLE_K,
|
|
140
|
-
DEFAULT_DENSE_K,
|
|
141
|
-
MEMORY_V3_INJECTION_GATE_CHECK_NAME,
|
|
142
|
-
MEMORY_V3_SELECTION_CHECK_NAME,
|
|
143
|
-
} = await import("../orchestrate.js");
|
|
103
|
+
const { orchestrate, DEFAULT_NEEDLE_K, DEFAULT_DENSE_K } =
|
|
104
|
+
await import("../orchestrate.js");
|
|
144
105
|
const { MemoryV3RetrievalUnavailableError } = await import("../pool-select.js");
|
|
145
106
|
|
|
146
107
|
// ---------------------------------------------------------------------------
|
|
@@ -350,13 +311,10 @@ function selectProvider(keep: Slug[]): Provider {
|
|
|
350
311
|
|
|
351
312
|
beforeEach(() => {
|
|
352
313
|
denseMockActive = true;
|
|
353
|
-
watchdogMockActive = true;
|
|
354
314
|
providerStub = null;
|
|
355
315
|
denseHits = [];
|
|
356
316
|
denseHitsByQuery = new Map();
|
|
357
317
|
denseCalls = [];
|
|
358
|
-
recordedGateEvents = [];
|
|
359
|
-
recordedSelectionEvents = [];
|
|
360
318
|
lastPool = [];
|
|
361
319
|
lastPoolLines = [];
|
|
362
320
|
lastPrefixBlock = null;
|
|
@@ -365,7 +323,6 @@ beforeEach(() => {
|
|
|
365
323
|
|
|
366
324
|
afterAll(() => {
|
|
367
325
|
denseMockActive = false;
|
|
368
|
-
watchdogMockActive = false;
|
|
369
326
|
});
|
|
370
327
|
|
|
371
328
|
// ---------------------------------------------------------------------------
|
|
@@ -1306,11 +1263,6 @@ describe("orchestrate — injection gate", () => {
|
|
|
1306
1263
|
expect(result.selections.map((s) => s.slug)).toContain("topic-a");
|
|
1307
1264
|
// The stale deleted page never reaches the pool either.
|
|
1308
1265
|
expect(lastPool).not.toContain("gone-page");
|
|
1309
|
-
// The lane WAS enabled, so this reports as an outage, not as disabled.
|
|
1310
|
-
expect(recordedGateEvents[0]!.detail).toMatchObject({
|
|
1311
|
-
pass: true,
|
|
1312
|
-
reason: "dense_unavailable",
|
|
1313
|
-
});
|
|
1314
1266
|
});
|
|
1315
1267
|
|
|
1316
1268
|
test("bypassForCore: true on a closed gate selects the stable prefix only (no finder lines)", async () => {
|
|
@@ -1407,47 +1359,6 @@ describe("orchestrate — injection gate", () => {
|
|
|
1407
1359
|
expect(result.selections.map((s) => s.slug)).toContain("topic-a");
|
|
1408
1360
|
});
|
|
1409
1361
|
|
|
1410
|
-
test("a scored gate run records ONE telemetry event carrying the decision", async () => {
|
|
1411
|
-
const lanes = await buildLanes();
|
|
1412
|
-
// Dense top-1 (0.9) clears denseThreshold (0.52) → dense_pass.
|
|
1413
|
-
denseHits = [{ article: "topic-b", section: 0, score: 0.9 }];
|
|
1414
|
-
providerStub = selectProvider(["topic-a"]);
|
|
1415
|
-
|
|
1416
|
-
await orchestrate(
|
|
1417
|
-
makeTurn(1, "apple"),
|
|
1418
|
-
depsOf(lanes, { denseK: 100, gateConfig: gateConfigOf() }),
|
|
1419
|
-
);
|
|
1420
|
-
|
|
1421
|
-
expect(recordedGateEvents).toHaveLength(1);
|
|
1422
|
-
const event = recordedGateEvents[0]!;
|
|
1423
|
-
expect(event.checkName).toBe(MEMORY_V3_INJECTION_GATE_CHECK_NAME);
|
|
1424
|
-
expect(event.value).toBe(1);
|
|
1425
|
-
expect(event.detail).toMatchObject({
|
|
1426
|
-
pass: true,
|
|
1427
|
-
reason: "dense_pass",
|
|
1428
|
-
scored: true,
|
|
1429
|
-
top_dense_score: 0.9,
|
|
1430
|
-
});
|
|
1431
|
-
});
|
|
1432
|
-
|
|
1433
|
-
test("a closed gate records pass:false with the failure reason", async () => {
|
|
1434
|
-
const lanes = await buildLanes();
|
|
1435
|
-
// No needle-term overlap and sub-threshold dense → fail_no_signal.
|
|
1436
|
-
denseHits = [{ article: "topic-b", section: 0, score: 0.1 }];
|
|
1437
|
-
providerStub = selectProvider([]);
|
|
1438
|
-
|
|
1439
|
-
await orchestrate(
|
|
1440
|
-
makeTurn(1, "zzzz nomatch"),
|
|
1441
|
-
depsOf(lanes, { denseK: 100, gateConfig: gateConfigOf() }),
|
|
1442
|
-
);
|
|
1443
|
-
|
|
1444
|
-
expect(recordedGateEvents).toHaveLength(1);
|
|
1445
|
-
expect(recordedGateEvents[0]!.detail).toMatchObject({
|
|
1446
|
-
pass: false,
|
|
1447
|
-
reason: "fail_no_signal",
|
|
1448
|
-
});
|
|
1449
|
-
});
|
|
1450
|
-
|
|
1451
1362
|
test("denseK: 0 records reason dense_disabled, not dense_unavailable", async () => {
|
|
1452
1363
|
const lanes = await buildLanes();
|
|
1453
1364
|
// denseK: 0 → the lane never ran → the gate passes open without scoring.
|
|
@@ -1468,13 +1379,6 @@ describe("orchestrate — injection gate", () => {
|
|
|
1468
1379
|
makeTurn(1, "apple"),
|
|
1469
1380
|
depsOf(lanes, { needle, denseK: 0, gateConfig: gateConfigOf() }),
|
|
1470
1381
|
);
|
|
1471
|
-
|
|
1472
|
-
expect(recordedGateEvents).toHaveLength(1);
|
|
1473
|
-
expect(recordedGateEvents[0]!.detail).toMatchObject({
|
|
1474
|
-
pass: true,
|
|
1475
|
-
reason: "dense_disabled",
|
|
1476
|
-
scored: false,
|
|
1477
|
-
});
|
|
1478
1382
|
});
|
|
1479
1383
|
|
|
1480
1384
|
test("an enabled dense lane yielding no live hits records reason dense_unavailable", async () => {
|
|
@@ -1498,13 +1402,6 @@ describe("orchestrate — injection gate", () => {
|
|
|
1498
1402
|
makeTurn(1, "apple"),
|
|
1499
1403
|
depsOf(lanes, { needle, denseK: 100, gateConfig: gateConfigOf() }),
|
|
1500
1404
|
);
|
|
1501
|
-
|
|
1502
|
-
expect(recordedGateEvents).toHaveLength(1);
|
|
1503
|
-
expect(recordedGateEvents[0]!.detail).toMatchObject({
|
|
1504
|
-
pass: true,
|
|
1505
|
-
reason: "dense_unavailable",
|
|
1506
|
-
scored: false,
|
|
1507
|
-
});
|
|
1508
1405
|
});
|
|
1509
1406
|
|
|
1510
1407
|
test("records the corpus size on a scored run", async () => {
|
|
@@ -1520,11 +1417,6 @@ describe("orchestrate — injection gate", () => {
|
|
|
1520
1417
|
gateConfig: gateConfigOf(),
|
|
1521
1418
|
}),
|
|
1522
1419
|
);
|
|
1523
|
-
|
|
1524
|
-
expect(recordedGateEvents[0]!.detail).toMatchObject({
|
|
1525
|
-
reason: "dense_pass",
|
|
1526
|
-
real_concept_page_count: 42,
|
|
1527
|
-
});
|
|
1528
1420
|
});
|
|
1529
1421
|
|
|
1530
1422
|
test("records the corpus size on a dense_disabled run", async () => {
|
|
@@ -1551,11 +1443,6 @@ describe("orchestrate — injection gate", () => {
|
|
|
1551
1443
|
gateConfig: gateConfigOf(),
|
|
1552
1444
|
}),
|
|
1553
1445
|
);
|
|
1554
|
-
|
|
1555
|
-
expect(recordedGateEvents[0]!.detail).toMatchObject({
|
|
1556
|
-
reason: "dense_disabled",
|
|
1557
|
-
real_concept_page_count: 3,
|
|
1558
|
-
});
|
|
1559
1446
|
});
|
|
1560
1447
|
|
|
1561
1448
|
test("omits the corpus size when the dep is not threaded", async () => {
|
|
@@ -1567,93 +1454,6 @@ describe("orchestrate — injection gate", () => {
|
|
|
1567
1454
|
makeTurn(1, "apple"),
|
|
1568
1455
|
depsOf(lanes, { denseK: 100, gateConfig: gateConfigOf() }),
|
|
1569
1456
|
);
|
|
1570
|
-
|
|
1571
|
-
expect(recordedGateEvents).toHaveLength(1);
|
|
1572
|
-
expect(recordedGateEvents[0]!.detail).not.toHaveProperty(
|
|
1573
|
-
"real_concept_page_count",
|
|
1574
|
-
);
|
|
1575
|
-
});
|
|
1576
|
-
|
|
1577
|
-
test("a passed gate that selects NOTHING is recorded as a zero selection", async () => {
|
|
1578
|
-
const lanes = await buildLanes();
|
|
1579
|
-
// The case the gate's own pass rate cannot see: retrieval was confident
|
|
1580
|
-
// enough to spend the selector call, and the selector judged that no
|
|
1581
|
-
// candidate was relevant. Pass rate says 100%; injection rate says 0%.
|
|
1582
|
-
denseHits = [{ article: "topic-b", section: 0, score: 0.9 }];
|
|
1583
|
-
providerStub = selectProvider([]);
|
|
1584
|
-
|
|
1585
|
-
await orchestrate(
|
|
1586
|
-
makeTurn(1, "apple"),
|
|
1587
|
-
depsOf(lanes, { denseK: 100, gateConfig: gateConfigOf() }),
|
|
1588
|
-
);
|
|
1589
|
-
|
|
1590
|
-
expect(recordedGateEvents[0]!.detail).toMatchObject({
|
|
1591
|
-
pass: true,
|
|
1592
|
-
reason: "dense_pass",
|
|
1593
|
-
});
|
|
1594
|
-
expect(recordedSelectionEvents).toHaveLength(1);
|
|
1595
|
-
const event = recordedSelectionEvents[0]!;
|
|
1596
|
-
expect(event.checkName).toBe(MEMORY_V3_SELECTION_CHECK_NAME);
|
|
1597
|
-
expect(event.value).toBe(0);
|
|
1598
|
-
expect(event.detail).toMatchObject({
|
|
1599
|
-
gate_reason: "dense_pass",
|
|
1600
|
-
gate_pass: true,
|
|
1601
|
-
selector_ran: true,
|
|
1602
|
-
selected_count: 0,
|
|
1603
|
-
});
|
|
1604
|
-
});
|
|
1605
|
-
|
|
1606
|
-
test("the selection event carries the gate reason and a non-zero count", async () => {
|
|
1607
|
-
const lanes = await buildLanes();
|
|
1608
|
-
denseHits = [{ article: "topic-b", section: 0, score: 0.9 }];
|
|
1609
|
-
providerStub = selectProvider(["topic-a"]);
|
|
1610
|
-
|
|
1611
|
-
await orchestrate(
|
|
1612
|
-
makeTurn(1, "apple"),
|
|
1613
|
-
depsOf(lanes, {
|
|
1614
|
-
denseK: 100,
|
|
1615
|
-
realConceptPageCount: 42,
|
|
1616
|
-
gateConfig: gateConfigOf(),
|
|
1617
|
-
}),
|
|
1618
|
-
);
|
|
1619
|
-
|
|
1620
|
-
expect(recordedSelectionEvents).toHaveLength(1);
|
|
1621
|
-
expect(recordedSelectionEvents[0]!.value).toBe(1);
|
|
1622
|
-
expect(recordedSelectionEvents[0]!.detail).toMatchObject({
|
|
1623
|
-
gate_reason: "dense_pass",
|
|
1624
|
-
selector_ran: true,
|
|
1625
|
-
selected_count: 1,
|
|
1626
|
-
real_concept_page_count: 42,
|
|
1627
|
-
});
|
|
1628
|
-
expect(
|
|
1629
|
-
Number(recordedSelectionEvents[0]!.detail!.pool_size),
|
|
1630
|
-
).toBeGreaterThan(0);
|
|
1631
|
-
});
|
|
1632
|
-
|
|
1633
|
-
test("selectorEnabled: false marks the passthrough as selector_ran: false", async () => {
|
|
1634
|
-
const lanes = await buildLanes();
|
|
1635
|
-
// The lean profile passes the whole pool through without consulting the
|
|
1636
|
-
// selector, so `selected_count` there is pool size, not a relevance
|
|
1637
|
-
// judgment. Without this flag those turns would read as a 100% hit rate.
|
|
1638
|
-
denseHits = [{ article: "topic-b", section: 0, score: 0.9 }];
|
|
1639
|
-
|
|
1640
|
-
await orchestrate(
|
|
1641
|
-
makeTurn(1, "apple"),
|
|
1642
|
-
depsOf(lanes, {
|
|
1643
|
-
denseK: 100,
|
|
1644
|
-
coreSlugs: ["topic-a"],
|
|
1645
|
-
selectorEnabled: false,
|
|
1646
|
-
gateConfig: gateConfigOf(),
|
|
1647
|
-
}),
|
|
1648
|
-
);
|
|
1649
|
-
|
|
1650
|
-
expect(recordedSelectionEvents).toHaveLength(1);
|
|
1651
|
-
expect(recordedSelectionEvents[0]!.detail).toMatchObject({
|
|
1652
|
-
selector_ran: false,
|
|
1653
|
-
});
|
|
1654
|
-
expect(
|
|
1655
|
-
Number(recordedSelectionEvents[0]!.detail!.selected_count),
|
|
1656
|
-
).toBeGreaterThan(0);
|
|
1657
1457
|
});
|
|
1658
1458
|
|
|
1659
1459
|
test("the recall-safe fallback (omitted ids) records selector_kept_all: true", async () => {
|
|
@@ -1675,12 +1475,6 @@ describe("orchestrate — injection gate", () => {
|
|
|
1675
1475
|
gateConfig: gateConfigOf(),
|
|
1676
1476
|
}),
|
|
1677
1477
|
);
|
|
1678
|
-
|
|
1679
|
-
expect(recordedSelectionEvents).toHaveLength(1);
|
|
1680
|
-
expect(recordedSelectionEvents[0]!.detail).toMatchObject({
|
|
1681
|
-
selector_ran: true,
|
|
1682
|
-
selector_kept_all: true,
|
|
1683
|
-
});
|
|
1684
1478
|
});
|
|
1685
1479
|
|
|
1686
1480
|
test("an explicit selection records selector_kept_all: false", async () => {
|
|
@@ -1692,10 +1486,6 @@ describe("orchestrate — injection gate", () => {
|
|
|
1692
1486
|
makeTurn(1, "apple"),
|
|
1693
1487
|
depsOf(lanes, { denseK: 100, gateConfig: gateConfigOf() }),
|
|
1694
1488
|
);
|
|
1695
|
-
|
|
1696
|
-
expect(recordedSelectionEvents[0]!.detail).toMatchObject({
|
|
1697
|
-
selector_kept_all: false,
|
|
1698
|
-
});
|
|
1699
1489
|
});
|
|
1700
1490
|
|
|
1701
1491
|
test("net_new_count counts only selections not already live in the conversation", async () => {
|
|
@@ -1713,11 +1503,6 @@ describe("orchestrate — injection gate", () => {
|
|
|
1713
1503
|
gateConfig: gateConfigOf(),
|
|
1714
1504
|
}),
|
|
1715
1505
|
);
|
|
1716
|
-
|
|
1717
|
-
expect(recordedSelectionEvents[0]!.detail).toMatchObject({
|
|
1718
|
-
selected_count: 2,
|
|
1719
|
-
net_new_count: 1,
|
|
1720
|
-
});
|
|
1721
1506
|
});
|
|
1722
1507
|
|
|
1723
1508
|
test("net_new_count is omitted when isResident is not threaded", async () => {
|
|
@@ -1729,10 +1514,6 @@ describe("orchestrate — injection gate", () => {
|
|
|
1729
1514
|
makeTurn(1, "apple"),
|
|
1730
1515
|
depsOf(lanes, { denseK: 100, gateConfig: gateConfigOf() }),
|
|
1731
1516
|
);
|
|
1732
|
-
|
|
1733
|
-
expect(recordedSelectionEvents[0]!.detail).not.toHaveProperty(
|
|
1734
|
-
"net_new_count",
|
|
1735
|
-
);
|
|
1736
1517
|
});
|
|
1737
1518
|
|
|
1738
1519
|
test("an empty pool is not a selector judgment", async () => {
|
|
@@ -1766,12 +1547,6 @@ describe("orchestrate — injection gate", () => {
|
|
|
1766
1547
|
}),
|
|
1767
1548
|
);
|
|
1768
1549
|
|
|
1769
|
-
expect(recordedSelectionEvents).toHaveLength(1);
|
|
1770
|
-
expect(recordedSelectionEvents[0]!.detail).toMatchObject({
|
|
1771
|
-
selector_ran: false,
|
|
1772
|
-
selected_count: 0,
|
|
1773
|
-
pool_size: 0,
|
|
1774
|
-
});
|
|
1775
1550
|
expect(result.selectorRan).toBe(false);
|
|
1776
1551
|
});
|
|
1777
1552
|
|
|
@@ -1791,14 +1566,6 @@ describe("orchestrate — injection gate", () => {
|
|
|
1791
1566
|
}),
|
|
1792
1567
|
);
|
|
1793
1568
|
|
|
1794
|
-
expect(recordedSelectionEvents).toHaveLength(1);
|
|
1795
|
-
expect(recordedSelectionEvents[0]!.detail).toMatchObject({
|
|
1796
|
-
gate_reason: "fail_no_signal",
|
|
1797
|
-
gate_pass: false,
|
|
1798
|
-
selector_ran: false,
|
|
1799
|
-
selected_count: 0,
|
|
1800
|
-
pool_size: 0,
|
|
1801
|
-
});
|
|
1802
1569
|
// The result carries the same fact for the pool record: the stable prefix
|
|
1803
1570
|
// is still reported as a lane, as computed, but the
|
|
1804
1571
|
// selector never ran over it.
|
|
@@ -1813,14 +1580,6 @@ describe("orchestrate — injection gate", () => {
|
|
|
1813
1580
|
providerStub = selectProvider(["topic-a"]);
|
|
1814
1581
|
|
|
1815
1582
|
await orchestrate(makeTurn(1, "apple"), depsOf(lanes, { denseK: 100 }));
|
|
1816
|
-
|
|
1817
|
-
expect(recordedGateEvents).toEqual([]);
|
|
1818
|
-
expect(recordedSelectionEvents).toHaveLength(1);
|
|
1819
|
-
expect(recordedSelectionEvents[0]!.detail).toMatchObject({
|
|
1820
|
-
gate_reason: null,
|
|
1821
|
-
gate_pass: null,
|
|
1822
|
-
selected_count: 1,
|
|
1823
|
-
});
|
|
1824
1583
|
});
|
|
1825
1584
|
|
|
1826
1585
|
test("no gate telemetry when the gate is disabled or omitted", async () => {
|
|
@@ -1836,8 +1595,6 @@ describe("orchestrate — injection gate", () => {
|
|
|
1836
1595
|
}),
|
|
1837
1596
|
);
|
|
1838
1597
|
await orchestrate(makeTurn(2, "apple"), depsOf(lanes));
|
|
1839
|
-
|
|
1840
|
-
expect(recordedGateEvents).toEqual([]);
|
|
1841
1598
|
});
|
|
1842
1599
|
});
|
|
1843
1600
|
|
|
@@ -2552,14 +2309,6 @@ describe("selector infrastructure failure", () => {
|
|
|
2552
2309
|
expect(result.selectorFailure).toBeInstanceOf(
|
|
2553
2310
|
MemoryV3RetrievalUnavailableError,
|
|
2554
2311
|
);
|
|
2555
|
-
expect(recordedSelectionEvents).toHaveLength(1);
|
|
2556
|
-
expect(recordedSelectionEvents[0]!.detail).toMatchObject({
|
|
2557
|
-
selector_ran: false,
|
|
2558
|
-
selector_failed: true,
|
|
2559
|
-
selector_kept_all: false,
|
|
2560
|
-
selected_count: 2,
|
|
2561
|
-
pool_size: 3,
|
|
2562
|
-
});
|
|
2563
2312
|
});
|
|
2564
2313
|
|
|
2565
2314
|
test("with no stable prefix the turn keeps nothing, and the failure still rides the result", async () => {
|
|
@@ -77,9 +77,7 @@ import {
|
|
|
77
77
|
recordLatencySubSpan,
|
|
78
78
|
timeLatencySubSpan,
|
|
79
79
|
} from "../../../../daemon/turn-latency-sub-spans.js";
|
|
80
|
-
import { recordWatchdogEvent } from "../../../../telemetry/watchdog-events-store.js";
|
|
81
80
|
import { getLogger } from "../logging.js";
|
|
82
|
-
import { injectionUnits } from "./capabilities.js";
|
|
83
81
|
import { denseLaneScored } from "./dense.js";
|
|
84
82
|
import type { EdgeGraph } from "./edge.js";
|
|
85
83
|
import { edgeExpand } from "./edge.js";
|
|
@@ -117,66 +115,6 @@ import {
|
|
|
117
115
|
// logger names the per-turn INJECTION gate wired in below.
|
|
118
116
|
const log = getLogger("memory-v3-injection-gate");
|
|
119
117
|
|
|
120
|
-
/** `check_name` of the `watchdog` telemetry event recorded once per
|
|
121
|
-
* injection-gate run. The cloud's memory admin analytics count and filter
|
|
122
|
-
* on this exact string — keep it stable. */
|
|
123
|
-
export const MEMORY_V3_INJECTION_GATE_CHECK_NAME = "memory_v3_injection_gate";
|
|
124
|
-
|
|
125
|
-
/** Record one injection-gate run to usage telemetry. `detail` keys are the
|
|
126
|
-
* platform-side contract (snake_case; scores, reason codes, and corpus-size
|
|
127
|
-
* counts only — never page titles, slugs, or conversation content). Never
|
|
128
|
-
* throws: the gate is pass-open by design, and a telemetry failure must not
|
|
129
|
-
* cost the turn its memory either.
|
|
130
|
-
*
|
|
131
|
-
* `detail.scored` says whether checkV3Gate actually weighed scores this run, as
|
|
132
|
-
* opposed to the run taking a pass-open shortcut (dense off, dense unavailable,
|
|
133
|
-
* gate threw). Pass rate is only meaningful over scored runs — the shortcuts are
|
|
134
|
-
* all unconditional passes and would otherwise inflate it. It is derivable from
|
|
135
|
-
* `reason`, but the daemon owns the reason set and adds to it freely, so it is
|
|
136
|
-
* reported explicitly rather than left for the cloud to re-derive from a
|
|
137
|
-
* hardcoded list that would silently miscount the next reason we add. */
|
|
138
|
-
function recordGateRun(detail: Record<string, unknown>): void {
|
|
139
|
-
try {
|
|
140
|
-
recordWatchdogEvent({
|
|
141
|
-
checkName: MEMORY_V3_INJECTION_GATE_CHECK_NAME,
|
|
142
|
-
value: 1,
|
|
143
|
-
detail,
|
|
144
|
-
});
|
|
145
|
-
} catch {
|
|
146
|
-
// recordWatchdogEvent already no-ops on opt-out and a missing telemetry
|
|
147
|
-
// DB; anything past that is not worth failing the turn over.
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/** `check_name` of the `watchdog` telemetry event recorded once per orchestrated
|
|
152
|
-
* turn, carrying what the SELECTOR did. Keep this string stable — the cloud's
|
|
153
|
-
* memory admin analytics filter on it. */
|
|
154
|
-
export const MEMORY_V3_SELECTION_CHECK_NAME = "memory_v3_selection";
|
|
155
|
-
|
|
156
|
-
/** Record one turn's selection outcome. Deliberately a SEPARATE event from
|
|
157
|
-
* {@link MEMORY_V3_INJECTION_GATE_CHECK_NAME} rather than extra keys on it: the
|
|
158
|
-
* gate records at decision time, before selection has run, so folding the
|
|
159
|
-
* outcome in would mean deferring the gate event until after `selectPool` — and
|
|
160
|
-
* losing every gate run whenever selection throws, which is exactly the
|
|
161
|
-
* incident we would want the gate telemetry for. This event carries
|
|
162
|
-
* `gate_reason` so the two still group together without a join.
|
|
163
|
-
*
|
|
164
|
-
* `value` is the selection count. Never throws, same as the gate counter. */
|
|
165
|
-
function recordSelectionRun(
|
|
166
|
-
value: number,
|
|
167
|
-
detail: Record<string, unknown>,
|
|
168
|
-
): void {
|
|
169
|
-
try {
|
|
170
|
-
recordWatchdogEvent({
|
|
171
|
-
checkName: MEMORY_V3_SELECTION_CHECK_NAME,
|
|
172
|
-
value,
|
|
173
|
-
detail,
|
|
174
|
-
});
|
|
175
|
-
} catch {
|
|
176
|
-
// Same contract as recordGateRun: telemetry must never cost a turn.
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
118
|
/** Default number of BM25 needle articles to fold into the pool. */
|
|
181
119
|
export const DEFAULT_NEEDLE_K = 12;
|
|
182
120
|
/** Default number of dense-lane articles to fold into the pool. */
|
|
@@ -797,15 +735,8 @@ export async function orchestrate(
|
|
|
797
735
|
// profile threshold rather than guessed at: `dense_disabled` is sub-threshold
|
|
798
736
|
// by construction, and whether those assistants sit at 1 page or 9 is the
|
|
799
737
|
// difference between "empty" and "about to cross".
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
deps.realConceptPageCount === undefined
|
|
803
|
-
? detail
|
|
804
|
-
: { ...detail, real_concept_page_count: deps.realConceptPageCount },
|
|
805
|
-
);
|
|
806
|
-
|
|
807
|
-
// This turn's gate decision, carried to the selection event so the two group
|
|
808
|
-
// together without a join. Null when the gate never ran (disabled/omitted).
|
|
738
|
+
// This turn's gate decision, carried on the result as `gateReason`. Null
|
|
739
|
+
// when the gate never ran (disabled/omitted).
|
|
809
740
|
let gateOutcome: { reason: string; pass: boolean } | null = null;
|
|
810
741
|
|
|
811
742
|
// What the SELECTOR did with the pool the gate let through — the outcome the
|
|
@@ -825,54 +756,13 @@ export async function orchestrate(
|
|
|
825
756
|
// the provider (also a 0%).
|
|
826
757
|
// The last is why `poolSize` decides this rather than each call site: an empty
|
|
827
758
|
// pool is not a judgment that nothing was relevant, and no caller has to
|
|
828
|
-
// remember that. `selectorRanOver` is that rule; the
|
|
829
|
-
//
|
|
830
|
-
// `selector_kept_all` and `net_new_count` separate what the selector JUDGED
|
|
831
|
-
// from what actually reaches the turn, which `selected_count` alone conflates:
|
|
832
|
-
// - kept_all: the recall-safe fallback fired (model omitted `ids`), so every
|
|
833
|
-
// candidate was kept without a real judgment. Distinguishes "kept the whole
|
|
834
|
-
// pool because it gave up" from "explicitly selected a large set", which
|
|
835
|
-
// otherwise look identical and inflate the same way.
|
|
836
|
-
// - net_new: the injection units among the selections (`injectionUnits`:
|
|
837
|
-
// each selected section, or the lead of a page selected with none, a
|
|
838
|
-
// capability page as one unit) not already live in the conversation,
|
|
839
|
-
// the injector renders only these (prior turns' sections ride
|
|
840
|
-
// history), so it is the real incremental injection, where
|
|
841
|
-
// `selected_count` re-counts the whole standing set every turn.
|
|
842
|
-
// Omitted when the caller did not supply `isResident` (tests,
|
|
843
|
-
// shadow-less paths). The count reads the same units the injector will
|
|
844
|
-
// (a closed gate's selections carry no sections, so it counts leads).
|
|
759
|
+
// remember that. `selectorRanOver` is that rule; the result's `selectorRan`
|
|
760
|
+
// reads it.
|
|
845
761
|
const selectorRanOver = (
|
|
846
762
|
poolSize: number,
|
|
847
763
|
failure?: MemoryV3RetrievalUnavailableError,
|
|
848
764
|
): boolean =>
|
|
849
765
|
deps.selectorEnabled !== false && poolSize > 0 && failure === undefined;
|
|
850
|
-
const recordSelection = (
|
|
851
|
-
selections: SelectedPage[],
|
|
852
|
-
poolSize: number,
|
|
853
|
-
keptAll: boolean,
|
|
854
|
-
failure?: MemoryV3RetrievalUnavailableError,
|
|
855
|
-
): void => {
|
|
856
|
-
const detail: Record<string, unknown> = {
|
|
857
|
-
gate_reason: gateOutcome?.reason ?? null,
|
|
858
|
-
gate_pass: gateOutcome?.pass ?? null,
|
|
859
|
-
selector_ran: selectorRanOver(poolSize, failure),
|
|
860
|
-
selector_failed: failure !== undefined,
|
|
861
|
-
selector_kept_all: keptAll,
|
|
862
|
-
selected_count: selections.length,
|
|
863
|
-
pool_size: poolSize,
|
|
864
|
-
};
|
|
865
|
-
const isResident = deps.isResident;
|
|
866
|
-
if (isResident !== undefined) {
|
|
867
|
-
detail.net_new_count = injectionUnits(selections).filter(
|
|
868
|
-
({ slug, key }) => !isResident(slug, key),
|
|
869
|
-
).length;
|
|
870
|
-
}
|
|
871
|
-
if (deps.realConceptPageCount !== undefined) {
|
|
872
|
-
detail.real_concept_page_count = deps.realConceptPageCount;
|
|
873
|
-
}
|
|
874
|
-
recordSelectionRun(selections.length, detail);
|
|
875
|
-
};
|
|
876
766
|
if (deps.gateConfig?.enabled) {
|
|
877
767
|
if (liveDensed.length === 0) {
|
|
878
768
|
const reason = denseEnabled ? "dense_unavailable" : "dense_disabled";
|
|
@@ -888,7 +778,6 @@ export async function orchestrate(
|
|
|
888
778
|
: "memory-v3 injection gate: dense lane disabled, passing open",
|
|
889
779
|
);
|
|
890
780
|
gateOutcome = { reason, pass: true };
|
|
891
|
-
recordGate({ pass: true, reason, scored: false });
|
|
892
781
|
} else {
|
|
893
782
|
let gate: V3GateResult | null = null;
|
|
894
783
|
try {
|
|
@@ -906,7 +795,6 @@ export async function orchestrate(
|
|
|
906
795
|
"memory-v3 injection gate threw; passing open (proceeding with selection)",
|
|
907
796
|
);
|
|
908
797
|
gateOutcome = { reason: "gate_error", pass: true };
|
|
909
|
-
recordGate({ pass: true, reason: "gate_error", scored: false });
|
|
910
798
|
}
|
|
911
799
|
if (gate) {
|
|
912
800
|
log.info(
|
|
@@ -918,14 +806,6 @@ export async function orchestrate(
|
|
|
918
806
|
"memory-v3 injection gate decision",
|
|
919
807
|
);
|
|
920
808
|
gateOutcome = { reason: gate.reason, pass: gate.pass };
|
|
921
|
-
recordGate({
|
|
922
|
-
pass: gate.pass,
|
|
923
|
-
reason: gate.reason,
|
|
924
|
-
scored: true,
|
|
925
|
-
top_dense_score: gate.topDenseScore,
|
|
926
|
-
top_norm_sparse_score: gate.topNormSparseScore,
|
|
927
|
-
checked_articles: gate.checkedArticles,
|
|
928
|
-
});
|
|
929
809
|
if (!gate.pass) {
|
|
930
810
|
// A closed gate produces no finder lane; only `selections` and
|
|
931
811
|
// `selectorRan` differ between bypass (stable prefix) and hard-skip.
|
|
@@ -975,7 +855,6 @@ export async function orchestrate(
|
|
|
975
855
|
} = await runSelection(stableOnly);
|
|
976
856
|
const selectedPoolSize =
|
|
977
857
|
selectedPool.stable.length + selectedPool.finder.length;
|
|
978
|
-
recordSelection(bypassed, selectedPoolSize, keptAll, failure);
|
|
979
858
|
return closed(
|
|
980
859
|
bypassed,
|
|
981
860
|
selectorRanOver(selectedPoolSize, failure),
|
|
@@ -985,9 +864,7 @@ export async function orchestrate(
|
|
|
985
864
|
}
|
|
986
865
|
// Hard skip: the selector is never consulted, so this is a zero
|
|
987
866
|
// selection BY CONSTRUCTION, not a judgment that nothing was relevant.
|
|
988
|
-
//
|
|
989
|
-
// result's `selectorRan` keeps it out of the persisted pool record.
|
|
990
|
-
recordSelection([], 0, false);
|
|
867
|
+
// The result's `selectorRan` is false.
|
|
991
868
|
return closed([], false);
|
|
992
869
|
}
|
|
993
870
|
}
|
|
@@ -1095,7 +972,6 @@ export async function orchestrate(
|
|
|
1095
972
|
} = await runSelection(pool);
|
|
1096
973
|
const selectedPoolSize =
|
|
1097
974
|
selectedPool.stable.length + selectedPool.finder.length;
|
|
1098
|
-
recordSelection(selections, selectedPoolSize, keptAll, failure);
|
|
1099
975
|
|
|
1100
976
|
return {
|
|
1101
977
|
selections,
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
import { writeFileSync } from "node:fs";
|
|
14
14
|
|
|
15
|
-
import {
|
|
15
|
+
import { ensureCloudIdentityIds } from "../../../config/cloud-identity.js";
|
|
16
16
|
import { getConfig } from "../../../config/loader.js";
|
|
17
17
|
import { isMemoryEnabled } from "../../../config/memory-v3-gate.js";
|
|
18
18
|
import { startConversationEvictor } from "../../../daemon/conversation-evictor.js";
|
|
@@ -63,7 +63,7 @@ async function main(): Promise<void> {
|
|
|
63
63
|
// conversations whose inference and background-wake requests go through the
|
|
64
64
|
// cloud proxy — without rehydration those requests hit the wrong platform
|
|
65
65
|
// and are rejected.
|
|
66
|
-
await
|
|
66
|
+
await ensureCloudIdentityIds();
|
|
67
67
|
|
|
68
68
|
// Jobs in this process wake real agent conversations, so it registers the
|
|
69
69
|
// default plugin hook surface (hooks and injectors, no init hooks) the same
|