@mycadet/assistant 0.12.9 → 0.12.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dockerfile +0 -8
- package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +1 -1
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
- package/node_modules/@mycadet/ces-client/src/http-credentials.ts +18 -1
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
- package/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
- package/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
- package/openapi.yaml +62 -910
- package/package.json +3 -7
- package/scripts/build-test-fixtures.ts +1 -1
- package/scripts/generate-openapi.ts +22 -6
- package/scripts/postinstall.ts +4 -10
- package/scripts/run-tests.ts +0 -21
- package/src/__tests__/adaptive-thinking-repair.test.ts +19 -57
- package/src/__tests__/agent-loop.test.ts +0 -76
- package/src/__tests__/anthropic-provider.test.ts +6 -6
- package/src/__tests__/assert-not-live-db.ts +1 -1
- package/src/__tests__/assistant-id-boundary-guard.test.ts +3 -3
- package/src/__tests__/attachments-store-heic-normalize.test.ts +1 -1
- package/src/__tests__/attachments-store.test.ts +1 -1
- package/src/__tests__/audit-log-rotation.test.ts +1 -1
- package/src/__tests__/btw-routes.test.ts +1 -1
- package/src/__tests__/byok-default-profile-ensure.test.ts +21 -27
- package/src/__tests__/call-conversation-messages.test.ts +0 -5
- package/src/__tests__/call-recovery.test.ts +2 -7
- package/src/__tests__/call-routes-http.test.ts +0 -12
- package/src/__tests__/call-store.test.ts +2 -7
- package/src/__tests__/catalog-files.test.ts +7 -5
- package/src/__tests__/checker.test.ts +1 -1
- package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +4 -4
- package/src/__tests__/cloud-client-verify-credential.test.ts +0 -4
- package/src/__tests__/cloud-credential-catalog-cli.test.ts +14 -14
- package/src/__tests__/cloud-profile-guard.test.ts +87 -404
- package/src/__tests__/compaction-events.test.ts +2 -2
- package/src/__tests__/config-loader-backfill.test.ts +74 -163
- package/src/__tests__/config-loader-cloud-defaults.test.ts +11 -11
- package/src/__tests__/config-loader-corrupt.test.ts +10 -10
- package/src/__tests__/config-loader-quarantine-notice.test.ts +7 -7
- package/src/__tests__/config-loader-validation-reset-notice.test.ts +11 -11
- package/src/__tests__/config-schema.test.ts +26 -27
- package/src/__tests__/config-set-route.test.ts +2 -6
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +28 -300
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +39 -246
- package/src/__tests__/conversation-agent-loop.test.ts +2 -58
- package/src/__tests__/conversation-clear-safety.test.ts +0 -30
- package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
- package/src/__tests__/conversation-queue.test.ts +1 -1
- package/src/__tests__/conversation-runtime-assembly.test.ts +1 -1
- package/src/__tests__/conversation-skill-tools.test.ts +4 -444
- package/src/__tests__/conversation-slash-commands.test.ts +1 -1
- package/src/__tests__/conversation-store.test.ts +1 -84
- package/src/__tests__/conversation-surface-state.test.ts +0 -16
- package/src/__tests__/credential-health-service.test.ts +14 -1
- package/src/__tests__/credential-record-retire.test.ts +1 -1
- package/src/__tests__/credential-record-write-through.test.ts +1 -1
- package/src/__tests__/credential-security-invariants.test.ts +0 -145
- package/src/__tests__/custom-profile-ensure.test.ts +1 -1
- package/src/__tests__/default-profile-catalog-fallback.test.ts +5 -15
- package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -2
- package/src/__tests__/dictation-profile-store.test.ts +6 -6
- package/src/__tests__/disk-usage.test.ts +28 -164
- package/src/__tests__/docker-signing-key-bootstrap.test.ts +1 -1
- package/src/__tests__/embedding-cloud-proxy-selection.test.ts +1 -1
- package/src/__tests__/emit-event-signal.test.ts +1 -1
- package/src/__tests__/gateway-client-cloud-outbound.test.ts +3 -3
- package/src/__tests__/gateway-only-enforcement.test.ts +1 -1
- package/src/__tests__/guardian-dispatch.test.ts +0 -13
- package/src/__tests__/helpers/seed-app.ts +1 -1
- package/src/__tests__/host-cu-routes-targeted.test.ts +1 -1
- package/src/__tests__/host-shell-tool.test.ts +1 -1
- package/src/__tests__/identity-routes.test.ts +1 -1
- package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
- package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
- package/src/__tests__/injector-chain.test.ts +1 -1
- package/src/__tests__/injector-config-quarantine-notice.test.ts +1 -1
- package/src/__tests__/injector-config-validation-reset-notice.test.ts +1 -1
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
- package/src/__tests__/{platform.test.ts → layout.test.ts} +1 -1
- package/src/__tests__/list-all-apps.test.ts +1 -1
- package/src/__tests__/live-workspace-guard.test.ts +2 -2
- package/src/__tests__/llm-resolver-override-or-default.test.ts +5 -6
- package/src/__tests__/llm-resolver.test.ts +7 -7
- package/src/__tests__/llm-schema-fallback-profile.test.ts +9 -10
- package/src/__tests__/llm-usage-store.test.ts +0 -495
- package/src/__tests__/log-export-routes.test.ts +1 -1
- package/src/__tests__/mcp-config-secret-boundary.test.ts +12 -53
- package/src/__tests__/mcp-list-plugin-servers.test.ts +1 -1
- package/src/__tests__/memory-config-file-parity.test.ts +1 -1
- package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
- package/src/__tests__/messages-read-boundary-guard.test.ts +0 -2
- package/src/__tests__/notification-guardian-path.test.ts +0 -7
- package/src/__tests__/onboarding-persona-write.test.ts +1 -1
- package/src/__tests__/openai-provider.test.ts +8 -8
- package/src/__tests__/path-policy.test.ts +1 -1
- package/src/__tests__/persona-resolver.test.ts +1 -1
- package/src/__tests__/plugin-app-serve-routes.test.ts +1 -1
- package/src/__tests__/plugin-effective-enabled-set.test.ts +1 -1
- package/src/__tests__/plugin-import-boundary-guard.test.ts +4 -6
- package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +0 -3
- package/src/__tests__/provider-cloud-proxy-integration.test.ts +1 -5
- package/src/__tests__/provider-connections-backfill.test.ts +10 -10
- package/src/__tests__/prune-old-conversations-job.test.ts +6 -31
- package/src/__tests__/resolve-app.test.ts +1 -1
- package/src/__tests__/run-due-schedules.test.ts +1 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -53
- package/src/__tests__/schedule-routes.test.ts +1 -1
- package/src/__tests__/schedule-store.test.ts +1 -1
- package/src/__tests__/secret-routes-cloud-proxy.test.ts +1 -1
- package/src/__tests__/skill-load-plugin-scope.test.ts +1 -1
- package/src/__tests__/surface-completion-compaction-boundary.test.ts +1 -1
- package/src/__tests__/tool-approval-handler.test.ts +1 -1
- package/src/__tests__/tool-audit.test.ts +5 -235
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +54 -114
- package/src/__tests__/tools-get-route.test.ts +1 -1
- package/src/__tests__/turn-outcome-read.test.ts +1 -1
- package/src/__tests__/twilio-routes.test.ts +0 -1
- package/src/__tests__/usage-attribution.test.ts +0 -31
- package/src/__tests__/verification-control-plane-policy.test.ts +3 -10
- package/src/__tests__/visible-app-context.test.ts +1 -1
- package/src/__tests__/voice-ingress-preflight.test.ts +1 -1
- package/src/__tests__/workspace-git-service.test.ts +1 -1
- package/src/__tests__/workspace-greetings.test.ts +1 -1
- package/src/acp/__tests__/helpers/acp-config-stub.ts +1 -1
- package/src/activation/progress-store.ts +1 -1
- package/src/activation/turn-hooks.ts +1 -1
- package/src/agent/loop.ts +0 -51
- package/src/apps/app-store.ts +1 -1
- package/src/avatar/__tests__/avatar-store.test.ts +2 -172
- package/src/avatar/accent-backfill.ts +1 -1
- package/src/avatar/avatar-manifest.ts +1 -1
- package/src/avatar/avatar-store.ts +10 -69
- package/src/avatar/ensure-raster.ts +1 -1
- package/src/avatar/identity-avatar.ts +1 -1
- package/src/avatar/sync-avatar.ts +1 -1
- package/src/avatar/traits-png-sync.ts +1 -1
- package/src/bundler/compiler-tools.ts +1 -1
- package/src/bundler/package-resolver.ts +1 -1
- package/src/calls/__tests__/call-controller.test.ts +25 -27
- package/src/calls/active-call-lease.ts +1 -1
- package/src/calls/call-controller.ts +3 -3
- package/src/calls/call-domain.ts +4 -8
- package/src/calls/call-store.ts +2 -76
- package/src/calls/resolve-call-tts-provider.ts +3 -3
- package/src/calls/twilio-config.ts +3 -3
- package/src/calls/twilio-rest.ts +2 -2
- package/src/calls/voice-ingress-preflight.ts +2 -2
- package/src/cli/bundled-modules.ts +0 -2
- package/src/cli/commands/__tests__/apps.test.ts +1 -1
- package/src/cli/commands/__tests__/plugins.test.ts +9 -66
- package/src/cli/commands/__tests__/ps.test.ts +67 -0
- package/src/cli/commands/auth.help.ts +2 -2
- package/src/cli/commands/avatar.ts +1 -1
- package/src/cli/commands/changelog.ts +1 -1
- package/src/cli/commands/cloud/__tests__/subscription.test.ts +2 -2
- package/src/cli/commands/cloud/index.help.ts +1 -1
- package/src/cli/commands/cloud/index.ts +2 -2
- package/src/cli/commands/db/refresh.ts +1 -1
- package/src/cli/commands/db/repair-step-conversation-backfill.ts +1 -1
- package/src/cli/commands/db/repair.ts +1 -1
- package/src/cli/commands/db/status.ts +1 -1
- package/src/cli/commands/inference-profiles.ts +1 -12
- package/src/cli/commands/memory/__tests__/memory-v3.test.ts +1 -116
- package/src/cli/commands/memory/index.help.ts +1 -43
- package/src/cli/commands/memory/memory-v3.ts +0 -64
- package/src/cli/commands/plugins.ts +54 -205
- package/src/cli/commands/ps.ts +5 -2
- package/src/cli/commands/status.ts +1 -1
- package/src/cli/index.help.ts +0 -2
- package/src/cli/lib/__tests__/inspect-plugin.test.ts +36 -66
- package/src/cli/lib/__tests__/install-from-cloud.test.ts +1 -1
- package/src/cli/lib/__tests__/install-from-github.test.ts +41 -117
- package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +2 -185
- package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +36 -66
- package/src/cli/lib/__tests__/plugin-catalog-visibility.test.ts +4 -6
- package/src/cli/lib/__tests__/plugin-details.test.ts +113 -96
- package/src/cli/lib/__tests__/search-plugins.test.ts +9 -16
- package/src/cli/lib/__tests__/uninstall-plugin.test.ts +1 -1
- package/src/cli/lib/__tests__/upgrade-plugin.test.ts +38 -15
- package/src/cli/lib/diff-plugin.ts +1 -1
- package/src/cli/lib/inspect-plugin.ts +13 -97
- package/src/cli/lib/install-from-cloud.ts +1 -1
- package/src/cli/lib/install-from-github.ts +75 -154
- package/src/cli/lib/install-plugin-dependencies.ts +1 -1
- package/src/cli/lib/list-installed-plugins.ts +1 -1
- package/src/cli/lib/open-browser.ts +1 -1
- package/src/cli/lib/plugin-catalog-cache.ts +8 -51
- package/src/cli/lib/plugin-catalog-resolve.ts +3 -22
- package/src/cli/lib/plugin-details.ts +5 -27
- package/src/cli/lib/plugin-marketplace.ts +18 -266
- package/src/cli/lib/search-plugins.ts +23 -43
- package/src/cli/lib/toggle-plugin.ts +1 -1
- package/src/cli/lib/uninstall-plugin.ts +1 -1
- package/src/cli/lib/upgrade-plugin.ts +3 -49
- package/src/cli/program.ts +1 -3
- package/src/cli.ts +1 -1
- package/src/cloud/client.ts +0 -6
- package/src/cloud/consent-cache.test.ts +22 -201
- package/src/cloud/consent-cache.ts +16 -111
- package/src/cloud/sync-identity.ts +1 -1
- package/src/config/__tests__/chat-settings.test.ts +1 -1
- package/src/config/__tests__/cloud-identity.test.ts +15 -2
- package/src/config/__tests__/default-plugin-skill-discovery.test.ts +1 -1
- package/src/config/__tests__/default-profile-catalog.test.ts +12 -51
- package/src/config/__tests__/deployment-context-defaults.test.ts +13 -13
- package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +4 -4
- package/src/config/__tests__/loader-last-known-good.test.ts +9 -9
- package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +7 -7
- package/src/config/__tests__/plugin-resident-skill-discovery.test.ts +1 -1
- package/src/config/__tests__/profile-materialization.test.ts +2 -4
- package/src/config/__tests__/sync-gated-profiles.test.ts +1 -106
- package/src/config/acp-agent-write.ts +1 -1
- package/src/config/bundled-skills/settings/tools/open-system-settings.test.ts +1 -1
- package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
- package/src/config/call-site-defaults.ts +0 -6
- package/src/config/cloud-identity.ts +12 -5
- package/src/config/composer-preferences.ts +1 -1
- package/src/config/default-profile-catalog.ts +8 -75
- package/src/config/default-profile-names.ts +2 -25
- package/src/config/env-registry.ts +1 -14
- package/src/config/env.ts +8 -6
- package/src/config/llm-resolver.ts +1 -2
- package/src/config/loader.ts +13 -17
- package/src/config/profile-materialization.ts +1 -1
- package/src/config/schema.ts +1 -7
- package/src/config/schemas/call-site-catalog.ts +0 -7
- package/src/config/schemas/llm.ts +25 -32
- package/src/config/seed-inference-profiles.ts +16 -17
- package/src/config/skills.ts +2 -2
- package/src/config/sync-gated-profiles.ts +6 -24
- package/src/credential-health/credential-health-service.ts +10 -3
- package/src/daemon/approval-generators.ts +3 -3
- package/src/daemon/config-watcher.ts +2 -2
- package/src/daemon/conversation-agent-loop-handlers.ts +0 -18
- package/src/daemon/conversation-agent-loop.ts +6 -97
- package/src/daemon/conversation-process.ts +1 -1
- package/src/daemon/conversation-skill-tools.ts +4 -72
- package/src/daemon/conversation-store.ts +1 -1
- package/src/daemon/conversation-surface-state.ts +0 -33
- package/src/daemon/conversation-surfaces.ts +1 -86
- package/src/daemon/conversation-tool-setup.test.ts +1 -1
- package/src/daemon/conversation-tool-setup.ts +0 -23
- package/src/daemon/conversation.ts +3 -5
- package/src/daemon/daemon-control.ts +3 -3
- package/src/daemon/dictation-profile-store.ts +3 -3
- package/src/daemon/event-loop-watchdog.test.ts +2 -198
- package/src/daemon/event-loop-watchdog.ts +0 -185
- package/src/daemon/external-plugins-bootstrap.ts +1 -1
- package/src/daemon/first-greeting.ts +1 -1
- package/src/daemon/handlers/skills.ts +1 -1
- package/src/daemon/host-app-control-proxy.ts +1 -1
- package/src/daemon/host-cu-proxy.ts +2 -2
- package/src/daemon/identity-helpers.ts +1 -1
- package/src/daemon/lifecycle.ts +11 -15
- package/src/daemon/main.ts +1 -1
- package/src/daemon/now-scratchpad.ts +1 -1
- package/src/daemon/process-message.ts +4 -4
- package/src/daemon/profiler-run-store.ts +2 -2
- package/src/daemon/providers-setup.ts +2 -2
- package/src/daemon/shutdown-handlers.ts +0 -10
- package/src/daemon/sqlite-corruption-watchdog.test.ts +2 -142
- package/src/daemon/sqlite-corruption-watchdog.ts +17 -81
- package/src/daemon/tool-side-effects.ts +1 -1
- package/src/desktop/desktop-session-manager.ts +1 -1
- package/src/desktop/desktop-wallpaper-renderer.ts +1 -1
- package/src/heartbeat/heartbeat-service.ts +1 -1
- package/src/home/feed-writer.ts +1 -1
- package/src/home/home-greeting-cache.ts +1 -1
- package/src/home/relationship-state-writer.ts +2 -2
- package/src/hooks/__tests__/hook-live-reload.test.ts +1 -1
- package/src/hooks/hook-loader.ts +2 -2
- package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
- package/src/inbound/oauth-callback-url.ts +3 -3
- package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
- package/src/ipc/socket-path.ts +1 -1
- package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
- package/src/live-voice/__tests__/live-voice-vad.test.ts +1 -1
- package/src/live-voice/live-voice-session.ts +3 -66
- package/src/mcp/__tests__/effective-config.test.ts +1 -1
- package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +2 -2
- package/src/mcp/__tests__/mcp-oauth-provider.test.ts +2 -3
- package/src/mcp/__tests__/reload-signal-emission.test.ts +1 -1
- package/src/mcp/__tests__/reload-signal.test.ts +1 -1
- package/src/mcp/__tests__/workspace-mcp-config.test.ts +19 -21
- package/src/mcp/reload-signal.ts +1 -1
- package/src/mcp/workspace-mcp-config.ts +1 -23
- package/src/messaging/draft-store.ts +1 -1
- package/src/monitoring/__tests__/active-conversations.test.ts +1 -1
- package/src/monitoring/__tests__/page-cache.test.ts +1 -1
- package/src/monitoring/__tests__/stall-capture.test.ts +1 -1
- package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +1 -1
- package/src/monitoring/active-conversations.ts +1 -1
- package/src/monitoring/control.ts +1 -1
- package/src/monitoring/daemon-boot-time.ts +1 -1
- package/src/monitoring/daemon-heartbeat.ts +1 -1
- package/src/monitoring/page-cache.ts +1 -1
- package/src/monitoring/plugin-auto-update.ts +1 -7
- package/src/monitoring/plugin-source-watch.ts +1 -1
- package/src/monitoring/recovery/db.ts +1 -1
- package/src/monitoring/recovery/inflight-content.ts +1 -1
- package/src/monitoring/resource-sampler.ts +3 -14
- package/src/monitoring/stall-capture.ts +1 -1
- package/src/monitoring/worker.ts +9 -76
- package/src/monitoring/workspace-git-heartbeat.ts +1 -1
- package/src/oauth/connect-orchestrator.ts +4 -4
- package/src/permissions/checker.ts +1 -1
- package/src/permissions/workspace-policy.ts +1 -1
- package/src/persistence/__tests__/main-db-readonly-probe.ts +27 -52
- package/src/persistence/__tests__/message-content-file.test.ts +1 -1
- package/src/persistence/__tests__/slow-sync-log.test.ts +0 -2
- package/src/persistence/attachments-store.ts +1 -1
- package/src/persistence/conversation-crud.ts +1 -38
- package/src/persistence/conversation-directories.ts +1 -1
- package/src/persistence/conversation-types.ts +0 -8
- package/src/persistence/db-async-query.ts +1 -1
- package/src/persistence/db-connection.ts +11 -1
- package/src/persistence/db-init.ts +1 -1
- package/src/persistence/db-maintenance.ts +1 -1
- package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +1 -1
- package/src/persistence/embeddings/embedding-local.ts +4 -4
- package/src/persistence/embeddings/embedding-runtime-manager.ts +1 -1
- package/src/persistence/embeddings/qdrant-client.ts +1 -1
- package/src/persistence/embeddings/qdrant-manager.ts +1 -1
- package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +1 -1
- package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +1 -1
- package/src/persistence/job-handlers/cleanup.ts +8 -17
- package/src/persistence/llm-usage-store.ts +2 -229
- package/src/persistence/message-content-file.ts +1 -1
- package/src/persistence/migrations/209-strip-thinking-from-consolidated.ts +1 -1
- package/src/persistence/migrations/222-strip-placeholder-sentinels-from-messages.ts +1 -1
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/329-move-onboarding-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/330-move-auth-fallback-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/331-move-lifecycle-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/332-move-skill-loaded-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/333-create-telemetry-events-table.test.ts +7 -4
- package/src/persistence/migrations/334-backfill-telemetry-events-outbox.test.ts +13 -0
- package/src/persistence/migrations/387-drop-telemetry-tables.ts +51 -0
- package/src/persistence/migrations/__tests__/327-create-flush-checkpoints.test.ts +9 -1
- package/src/persistence/migrations/__tests__/387-drop-telemetry-tables.test.ts +79 -0
- package/src/persistence/migrations/helpers/relocation.ts +1 -1
- package/src/persistence/migrations/run-migrations.ts +1 -1
- package/src/persistence/migrations/validate-migration-state.ts +1 -1
- package/src/persistence/raw-query.ts +1 -29
- package/src/persistence/slow-sync-log.ts +0 -23
- package/src/persistence/steps.ts +2 -0
- package/src/{telemetry → persistence}/tool-audit.ts +6 -121
- package/src/plugin-api/index.ts +1 -1
- package/src/plugin-api/plugin-name-env.ts +1 -1
- package/src/plugins/__tests__/installed-plugin-dirs.test.ts +1 -1
- package/src/plugins/collect-source-versions.ts +1 -1
- package/src/plugins/defaults/channel/package.json +1 -1
- package/src/plugins/defaults/cloud-hosted/package.json +1 -1
- package/src/plugins/defaults/compaction/package.json +1 -1
- package/src/plugins/defaults/documents/package.json +1 -1
- package/src/plugins/defaults/empty-response/package.json +1 -1
- package/src/plugins/defaults/exploration-drift/package.json +1 -1
- package/src/plugins/defaults/image-fallback/package.json +1 -1
- package/src/plugins/defaults/image-recovery/package.json +1 -1
- package/src/plugins/defaults/max-tokens-continue/package.json +1 -1
- package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/db-maintenance.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +0 -82
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-skill-card.test.ts +0 -41
- package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +0 -2
- package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -52
- package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +0 -18
- package/src/plugins/defaults/memory/package.json +1 -1
- package/src/plugins/defaults/memory/paths.ts +4 -4
- package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
- package/src/plugins/defaults/memory/src/memory-v2-routes.ts +5 -5
- package/src/plugins/defaults/memory/src/memory-v3-routes.ts +0 -207
- package/src/plugins/defaults/memory/src/memory-worker-routes.ts +1 -1
- package/src/plugins/defaults/memory/startup.ts +1 -22
- package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +2 -253
- package/src/plugins/defaults/memory/v3/orchestrate.ts +5 -129
- package/src/plugins/defaults/memory/worker-control.ts +1 -1
- package/src/plugins/defaults/memory/worker.ts +2 -2
- package/src/plugins/defaults/session/package.json +1 -1
- package/src/plugins/defaults/surface-completion-nudge/package.json +1 -1
- package/src/plugins/defaults/task-progress/package.json +1 -1
- package/src/plugins/defaults/task-progress-nudge/package.json +1 -1
- package/src/plugins/defaults/title-generate/package.json +1 -1
- package/src/plugins/defaults/tool-error/package.json +1 -1
- package/src/plugins/defaults/tool-result-truncate/package.json +1 -1
- package/src/plugins/defaults/turn-context/package.json +1 -1
- package/src/plugins/defaults/workspace/injectors.ts +1 -1
- package/src/plugins/defaults/workspace/package.json +1 -1
- package/src/plugins/disabled-state.ts +1 -1
- package/src/plugins/ensure-plugin-api-shim.ts +1 -1
- package/src/plugins/ensure-shared-dep-links.ts +1 -1
- package/src/plugins/installed-plugin-dirs.ts +1 -1
- package/src/plugins/mcp-servers.ts +7 -9
- package/src/plugins/mtime-cache.ts +2 -2
- package/src/plugins/source-versions.ts +1 -1
- package/src/prompts/bootstrap-cleanup.ts +1 -1
- package/src/prompts/persona-resolver.ts +1 -1
- package/src/prompts/sections.ts +2 -2
- package/src/prompts/system-prompt.ts +10 -42
- package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +0 -37
- package/src/providers/__tests__/cadet-connection-routing.test.ts +2 -2
- package/src/providers/cadet/client.ts +1 -1
- package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -1
- package/src/providers/inference/adapter-factory.ts +1 -1
- package/src/providers/inference/backfill.ts +3 -10
- package/src/providers/inference/profile-probe.ts +1 -1
- package/src/providers/retry.ts +0 -2
- package/src/providers/types.ts +0 -7
- package/src/providers/usage-tracking.ts +1 -1
- package/src/routes/__tests__/route-host.test.ts +1 -1
- package/src/routes/control.ts +1 -1
- package/src/routes/route-host-client.ts +1 -1
- package/src/routes/worker.ts +2 -2
- package/src/runtime/agent-wake.ts +1 -1
- package/src/runtime/assistant-stream-state.ts +1 -1
- package/src/runtime/auth/token-service.ts +1 -1
- package/src/runtime/background-job-runner.ts +1 -1
- package/src/runtime/middleware/twilio-validation.ts +2 -2
- package/src/runtime/routes/__tests__/app-pin-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +1 -1
- package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +3 -33
- package/src/runtime/routes/__tests__/cloud-credits-routes.test.ts +5 -4
- package/src/runtime/routes/__tests__/cloud-invoice-routes.test.ts +4 -3
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +72 -298
- package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/deprecated-route-context.test.ts +15 -62
- package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +105 -12
- package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/monitoring-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +47 -211
- package/src/runtime/routes/__tests__/route-host-worker-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/schedule-routes-disarm-reason.test.ts +1 -1
- package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-route-dispatcher-host.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-routes-cli.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-routes-notices.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-routes-request.test.ts +1 -1
- package/src/runtime/routes/app-management-routes.ts +1 -1
- package/src/runtime/routes/attachment-routes.ts +1 -1
- package/src/runtime/routes/audit-routes.ts +1 -1
- package/src/runtime/routes/avatar-routes.ts +3 -10
- package/src/runtime/routes/cloud-routes.ts +3 -3
- package/src/runtime/routes/content-source-routes.ts +1 -1
- package/src/runtime/routes/conversation-query-routes.ts +49 -706
- package/src/runtime/routes/conversation-routes.ts +1 -38
- package/src/runtime/routes/debug-routes.ts +1 -1
- package/src/runtime/routes/deprecated-route-context.ts +5 -61
- package/src/runtime/routes/heartbeat-routes.ts +1 -1
- package/src/runtime/routes/identity-routes.ts +1 -1
- package/src/runtime/routes/index.ts +0 -6
- package/src/runtime/routes/inference-profile-session-handler.ts +3 -3
- package/src/runtime/routes/inference-profiles-routes.ts +48 -21
- package/src/runtime/routes/inference-provider-connection-routes.ts +0 -1
- package/src/runtime/routes/llm-call-sites-routes.ts +3 -3
- package/src/runtime/routes/log-export/__tests__/installed-inventory.test.ts +1 -1
- package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +1 -1
- package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +1 -1
- package/src/runtime/routes/log-export/workspace-allowlist.ts +1 -1
- package/src/runtime/routes/log-export-routes.ts +17 -15
- package/src/runtime/routes/migration-rollback-routes.ts +1 -1
- package/src/runtime/routes/migration-routes.ts +2 -3
- package/src/runtime/routes/monitoring-routes.ts +2 -2
- package/src/runtime/routes/oauth-providers.ts +5 -5
- package/src/runtime/routes/plugins-routes.ts +38 -163
- package/src/runtime/routes/profiler-routes.ts +1 -1
- package/src/runtime/routes/route-host-worker-routes.ts +1 -1
- package/src/runtime/routes/sanity-routes.ts +1 -1
- package/src/runtime/routes/schedule-routes.ts +1 -1
- package/src/runtime/routes/schedule-worker-routes.ts +1 -1
- package/src/runtime/routes/settings-routes.ts +1 -1
- package/src/runtime/routes/sounds-config-routes.ts +1 -1
- package/src/runtime/routes/surface-conversation-resolver.ts +1 -7
- package/src/runtime/routes/user-route-dispatcher.ts +1 -3
- package/src/runtime/routes/user-route-import.ts +1 -1
- package/src/runtime/routes/user-route-resolution.ts +1 -1
- package/src/runtime/routes/user-routes-cli.ts +1 -1
- package/src/runtime/routes/workspace-commit-routes.ts +1 -1
- package/src/runtime/routes/workspace-greetings.ts +1 -1
- package/src/runtime/routes/workspace-routes.ts +1 -1
- package/src/runtime/routes/workspace-utils.ts +1 -1
- package/src/runtime/sync/resource-sync-events.ts +1 -1
- package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +1 -1
- package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1 -1
- package/src/schedule/plugin-schedule-availability.ts +1 -1
- package/src/schedule/plugin-schedule-declarations.ts +1 -1
- package/src/schedule/run-script.ts +1 -1
- package/src/schedule/scheduler.ts +1 -11
- package/src/schedule/worker-control.ts +1 -1
- package/src/schedule/worker.ts +3 -3
- package/src/security/oauth2.ts +2 -2
- package/src/security/secret-allowlist.ts +1 -1
- package/src/signals/cancel.ts +1 -1
- package/src/signals/conversation-undo.ts +1 -1
- package/src/signals/emit-event.ts +1 -1
- package/src/signals/event-stream.ts +1 -1
- package/src/signals/user-message.ts +1 -1
- package/src/skills/catalog-install.ts +2 -1
- package/src/skills/clawhub.ts +1 -1
- package/src/skills/cloud-store.ts +1 -1
- package/src/skills/path-classifier.ts +1 -1
- package/src/skills/skill-history.ts +1 -1
- package/src/skills/skillssh-registry.ts +1 -1
- package/src/skills/uninstall.ts +1 -1
- package/src/skills/workspace-skill-md-signature.ts +1 -1
- package/src/subagent/manager.ts +1 -1
- package/src/theme/workspace-theme.ts +1 -1
- package/src/tools/browser/auth-cache.ts +1 -1
- package/src/tools/browser/browser-manager.ts +1 -1
- package/src/tools/browser/runtime-check.ts +1 -1
- package/src/tools/executor.ts +4 -4
- package/src/tools/filesystem/write.ts +1 -1
- package/src/tools/permission-checker.ts +2 -51
- package/src/tools/run-standalone.ts +1 -1
- package/src/tools/skills/format-input-schema.ts +1 -1
- package/src/tools/skills/load.ts +1 -1
- package/src/tools/skills/scaffold-cloud.ts +0 -32
- package/src/tools/terminal/safe-env.ts +1 -2
- package/src/tools/terminal/sanitized-bash.ts +1 -1
- package/src/tools/terminal/shell.ts +1 -1
- package/src/tools/tool-approval-handler.ts +4 -1
- package/src/tools/workflows/manage-workflows.ts +2 -2
- package/src/tools/workflows/run-workflow.test.ts +1 -1
- package/src/tools/workspace-tools/loader.ts +1 -1
- package/src/tts/synthesis-stream.ts +2 -2
- package/src/usage/attribution.ts +1 -11
- package/src/util/browser.ts +1 -1
- package/src/util/bun-runtime.ts +2 -1
- package/src/util/device-id.ts +1 -1
- package/src/util/disk-usage.ts +4 -139
- package/src/util/layout.ts +3 -3
- package/src/util/logger.ts +1 -1
- package/src/util/logs-db-path.ts +1 -1
- package/src/util/memory-db-path.ts +1 -1
- package/src/util/{platform.ts → os.ts} +5 -30
- package/src/util/process-tree.ts +19 -0
- package/src/util/sqlite3-runtime.ts +1 -1
- package/src/util/telemetry-db-path.ts +1 -1
- package/src/watcher/__tests__/engine.test.ts +0 -23
- package/src/watcher/engine.ts +0 -7
- package/src/windows-compiled-cli.ts +0 -4
- package/src/windows-compiled-worker-entry.ts +0 -6
- package/src/workflows/leaf-runner.test.ts +1 -1
- package/src/workflows/leaf-runner.ts +1 -1
- package/src/workflows/library.ts +1 -1
- package/src/workspace/adaptive-thinking-repair.ts +5 -24
- package/src/workspace/byok-default-profile-ensure.ts +24 -26
- package/src/workspace/custom-profile-ensure.ts +2 -2
- package/src/workspace/git-service.ts +1 -1
- package/src/workspace/hatched-date.ts +1 -1
- package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +2 -2
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +1 -1
- package/src/workspace/migrations/077-seed-memory-router-callsite.ts +1 -1
- package/src/workspace/migrations/registry.ts +0 -4
- package/src/workspace/turn-commit.ts +1 -1
- package/docs/activation-funnel-telemetry.md +0 -324
- package/scripts/bundled-plugin-packages.ts +0 -154
- package/scripts/generate-bundled-plugin-packages.ts +0 -29
- package/src/__tests__/activation-early-marking.test.ts +0 -114
- package/src/__tests__/auth-fallback-events-store.test.ts +0 -99
- package/src/__tests__/config-get-vision-flag.test.ts +0 -139
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +0 -400
- package/src/__tests__/internal-telemetry-routes.test.ts +0 -213
- package/src/__tests__/telemetry-routes.test.ts +0 -182
- package/src/__tests__/turn-events-store.test.ts +0 -376
- package/src/__tests__/ui-channel-variants.test.ts +0 -53
- package/src/avatar/__tests__/avatar-changed-telemetry.test.ts +0 -217
- package/src/avatar/avatar-changed-telemetry.ts +0 -128
- package/src/calls/__tests__/call-funnel-telemetry.test.ts +0 -204
- package/src/cli/commands/telemetry.help.ts +0 -27
- package/src/cli/commands/telemetry.ts +0 -83
- package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +0 -251
- package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +0 -113
- package/src/cli/lib/__tests__/plugin-marketplace.test.ts +0 -384
- package/src/cli/lib/__tests__/plugin-pin-history.test.ts +0 -164
- package/src/cli/lib/__tests__/plugins-install-offline.test.ts +0 -228
- package/src/cli/lib/bundled-marketplace.json +0 -1575
- package/src/cli/lib/bundled-plugin-packages.json +0 -827
- package/src/cli/lib/bundled-plugin-packages.ts +0 -87
- package/src/cli/lib/plugin-catalog-local.ts +0 -94
- package/src/cli/lib/plugin-pin-history.ts +0 -276
- package/src/cloud/feature-gate.ts +0 -8
- package/src/config/__tests__/cloud-rehydration.test.ts +0 -180
- package/src/config/cloud-rehydration.ts +0 -35
- package/src/daemon/__tests__/auto-profile-router.test.ts +0 -380
- package/src/daemon/auto-profile-router.ts +0 -428
- package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +0 -391
- package/src/monitoring/__tests__/db-integrity-sample.test.ts +0 -113
- package/src/monitoring/__tests__/oom-kill-reporter.test.ts +0 -374
- package/src/monitoring/db-integrity-check.ts +0 -163
- package/src/monitoring/db-integrity-sample.ts +0 -176
- package/src/monitoring/oom-kill-reporter.ts +0 -469
- package/src/onboarding/__tests__/onboarding-events-store.test.ts +0 -158
- package/src/onboarding/onboarding-events-store.ts +0 -296
- package/src/persistence/__tests__/raw-query-telemetry.test.ts +0 -76
- package/src/persistence/lifecycle-events-store.test.ts +0 -134
- package/src/persistence/lifecycle-events-store.ts +0 -110
- package/src/plugins/defaults/memory/__tests__/activation-session-store.test.ts +0 -76
- package/src/plugins/defaults/memory/activation-session-store.ts +0 -50
- package/src/plugins/defaults/memory/src/__tests__/memory-v3-gate-stats.test.ts +0 -281
- package/src/runtime/routes/auto-profile-routes.ts +0 -83
- package/src/runtime/routes/internal-telemetry-routes.ts +0 -142
- package/src/runtime/routes/telemetry-routes.ts +0 -274
- package/src/security/auth-fallback-events-store.ts +0 -57
- package/src/telemetry/__tests__/activation-funnel.test.ts +0 -95
- package/src/telemetry/__tests__/config-setting-events-store.test.ts +0 -63
- package/src/telemetry/__tests__/config-setting-snapshot.test.ts +0 -143
- package/src/telemetry/__tests__/flush-checkpoints.test.ts +0 -56
- package/src/telemetry/__tests__/live-voice-funnel.test.ts +0 -174
- package/src/telemetry/__tests__/outbox-test-harness.ts +0 -85
- package/src/telemetry/__tests__/phone-call-funnel.test.ts +0 -72
- package/src/telemetry/__tests__/telemetry-event-fixtures.ts +0 -282
- package/src/telemetry/__tests__/watchdog-events-store.test.ts +0 -71
- package/src/telemetry/activation-funnel.ts +0 -172
- package/src/telemetry/config-setting-events-store.ts +0 -40
- package/src/telemetry/config-setting-snapshot.ts +0 -170
- package/src/telemetry/flush-checkpoints.ts +0 -70
- package/src/telemetry/live-voice-funnel.ts +0 -185
- package/src/telemetry/memory-corpus-size.test.ts +0 -120
- package/src/telemetry/memory-corpus-size.ts +0 -184
- package/src/telemetry/memory-tier-reporter.test.ts +0 -195
- package/src/telemetry/memory-tier-reporter.ts +0 -130
- package/src/telemetry/phone-call-funnel.ts +0 -144
- package/src/telemetry/skill-loaded-events-store.test.ts +0 -93
- package/src/telemetry/skill-loaded-events-store.ts +0 -39
- package/src/telemetry/telemetry-event-sources.test.ts +0 -223
- package/src/telemetry/telemetry-event-sources.ts +0 -597
- package/src/telemetry/telemetry-events-outbox.test.ts +0 -375
- package/src/telemetry/telemetry-events-outbox.ts +0 -237
- package/src/telemetry/telemetry-main-db.ts +0 -48
- package/src/telemetry/telemetry-wire-source.json +0 -4
- package/src/telemetry/telemetry-wire-validation.test.ts +0 -157
- package/src/telemetry/telemetry-wire-validation.ts +0 -162
- package/src/telemetry/telemetry-wire.generated.ts +0 -483
- package/src/telemetry/tool-executed-events-store.test.ts +0 -210
- package/src/telemetry/tool-executed-events-store.ts +0 -102
- package/src/telemetry/trace-collection-policy.test.ts +0 -28
- package/src/telemetry/trace-collection-policy.ts +0 -30
- package/src/telemetry/turn-events-store.ts +0 -216
- package/src/telemetry/turn-trace-store.test.ts +0 -884
- package/src/telemetry/turn-trace-store.ts +0 -399
- package/src/telemetry/types.test.ts +0 -38
- package/src/telemetry/types.ts +0 -780
- package/src/telemetry/usage-telemetry-reporter.test.ts +0 -3445
- package/src/telemetry/usage-telemetry-reporter.ts +0 -566
- package/src/telemetry/watchdog-direct-emit.test.ts +0 -112
- package/src/telemetry/watchdog-direct-emit.ts +0 -104
- package/src/telemetry/watchdog-events-store.ts +0 -31
- package/src/tools/ui-surface/channel-variants.ts +0 -52
- package/src/watcher/__tests__/telemetry.test.ts +0 -178
- package/src/watcher/telemetry.ts +0 -93
- package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +0 -165
- package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +0 -151
- /package/src/{telemetry → persistence}/tool-usage-store.ts +0 -0
- /package/src/{telemetry → persistence}/turn-outcome.ts +0 -0
|
@@ -44,12 +44,6 @@ export const SLOW_SYNC_THRESHOLD_MS = ((): number => {
|
|
|
44
44
|
return Number.isFinite(raw) && raw > 0 ? raw : 1000;
|
|
45
45
|
})();
|
|
46
46
|
|
|
47
|
-
/**
|
|
48
|
-
* `check_name` for slow-sync telemetry events. Stable so downstream
|
|
49
|
-
* grouping stays consistent; keep it in sync with any admin query.
|
|
50
|
-
*/
|
|
51
|
-
export const SLOW_SYNC_CHECK_NAME = "slow_sync_operation";
|
|
52
|
-
|
|
53
47
|
/** One recorded section entry: a static label plus monotonic start/end stamps. */
|
|
54
48
|
export interface SectionMark {
|
|
55
49
|
label: string;
|
|
@@ -157,23 +151,6 @@ export function reportSlowSync(
|
|
|
157
151
|
{ label, elapsedMs, ...detail },
|
|
158
152
|
"Slow synchronous DB operation blocked the event loop",
|
|
159
153
|
);
|
|
160
|
-
// Record telemetry via a lazy dynamic import. A static import would pull the
|
|
161
|
-
// telemetry → consent-cache → config/loader chain into the module graph of
|
|
162
|
-
// every raw-query / conversation-load caller, where a test's `mock.module`
|
|
163
|
-
// of the loader leaks across the shared test process and breaks unrelated
|
|
164
|
-
// files at eval time. Loading it only on the rare slow path keeps that chain
|
|
165
|
-
// off the hot path's static graph; best-effort, so a failure is swallowed.
|
|
166
|
-
void import("../telemetry/watchdog-events-store.js")
|
|
167
|
-
.then(({ recordWatchdogEvent }) => {
|
|
168
|
-
recordWatchdogEvent({
|
|
169
|
-
checkName: SLOW_SYNC_CHECK_NAME,
|
|
170
|
-
value: elapsedMs,
|
|
171
|
-
detail: { label, ...detail },
|
|
172
|
-
});
|
|
173
|
-
})
|
|
174
|
-
.catch(() => {
|
|
175
|
-
// Telemetry is best-effort — never let it escape the timed section.
|
|
176
|
-
});
|
|
177
154
|
}
|
|
178
155
|
|
|
179
156
|
/**
|
package/src/persistence/steps.ts
CHANGED
|
@@ -497,6 +497,7 @@ import { migrateNormalizeOpencodeHostConnections } from "./migrations/383-normal
|
|
|
497
497
|
import { migrateAddDocumentRevision } from "./migrations/384-add-document-revision.js";
|
|
498
498
|
import { migrateCreateDocumentRevisions } from "./migrations/385-create-document-revisions.js";
|
|
499
499
|
import { migrateConversationsLastReopenedAt } from "./migrations/386-conversations-last-reopened-at.js";
|
|
500
|
+
import { migrateDropTelemetryTables } from "./migrations/387-drop-telemetry-tables.js";
|
|
500
501
|
import type { MigrationStep } from "./migrations/run-migrations.js";
|
|
501
502
|
|
|
502
503
|
export const migrationSteps: MigrationStep[] = [
|
|
@@ -1667,4 +1668,5 @@ export const migrationSteps: MigrationStep[] = [
|
|
|
1667
1668
|
migrateAddDocumentRevision,
|
|
1668
1669
|
migrateCreateDocumentRevisions,
|
|
1669
1670
|
migrateConversationsLastReopenedAt,
|
|
1671
|
+
migrateDropTelemetryTables,
|
|
1670
1672
|
];
|
|
@@ -1,36 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Direct terminals for tool-execution auditing
|
|
2
|
+
* Direct terminals for tool-execution auditing.
|
|
3
3
|
*
|
|
4
4
|
* The executor and its permission/approval collaborators call these functions
|
|
5
5
|
* inline as each tool call reaches a terminal outcome (executed / error /
|
|
6
|
-
* denied
|
|
6
|
+
* denied). Each function owns exactly one side effect:
|
|
7
7
|
*
|
|
8
8
|
* - `recordToolExecuted` / `recordToolError` / `recordToolDenied` write the
|
|
9
9
|
* always-on `tool_invocations` audit row (redacting secrets from the
|
|
10
10
|
* stored input/result).
|
|
11
|
-
* - `recordToolPermissionPrompted` / `recordToolPermissionDecided` write the
|
|
12
|
-
* consent-gated `permission_prompt` and `permission_decided`
|
|
13
|
-
* lifecycle-telemetry rows. Both are called from the one site that owns an
|
|
14
|
-
* interactive prompt (`tools/permission-checker.ts`), so every prompt has
|
|
15
|
-
* exactly one decision and the two series reconcile.
|
|
16
11
|
* - `logToolFailure` emits the operator-facing failure log.
|
|
17
12
|
*
|
|
18
|
-
* The
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* `arg_bytes IS NOT NULL` filter excludes permanently. An unknown consent
|
|
22
|
-
* state (cold cache) populates the columns — NULLing them would destroy the
|
|
23
|
-
* data irreversibly, and consent is enforced again at flush time and platform
|
|
24
|
-
* ingest, so opted-out rows never leave the device. The audit fields
|
|
25
|
-
* themselves (tool name, decision, redacted input/result previews, duration)
|
|
26
|
-
* are unaffected — `tool_invocations` is a local always-on audit log.
|
|
13
|
+
* The payload-size + model-attribution columns are part of the local audit
|
|
14
|
+
* row — `tool_invocations` is a local always-on audit log and nothing in it
|
|
15
|
+
* ever leaves the device.
|
|
27
16
|
*/
|
|
28
17
|
|
|
29
|
-
import { getRawShareAnalytics } from "../cloud/consent-cache.js";
|
|
30
|
-
import {
|
|
31
|
-
type LifecycleEventAttributes,
|
|
32
|
-
recordLifecycleEvent,
|
|
33
|
-
} from "../persistence/lifecycle-events-store.js";
|
|
34
18
|
import { redactJsonStringLeaves } from "../security/redact-json.js";
|
|
35
19
|
import { redactSensitiveFields } from "../security/redaction.js";
|
|
36
20
|
import { redactSecrets } from "../security/secret-scanner.js";
|
|
@@ -154,87 +138,6 @@ export function recordToolDenied(entry: DeniedAuditEntry): void {
|
|
|
154
138
|
});
|
|
155
139
|
}
|
|
156
140
|
|
|
157
|
-
/**
|
|
158
|
-
* How an interactive permission prompt ended.
|
|
159
|
-
*
|
|
160
|
-
* `allow` / `deny` are answers a human gave. `abandoned` covers every way a
|
|
161
|
-
* prompt stops without one: it timed out, a new user message superseded it,
|
|
162
|
-
* the turn was cancelled, or the prompter was disposed (client disconnect /
|
|
163
|
-
* conversation teardown). The daemon resolves all of those to a deny for the
|
|
164
|
-
* agent loop, so without this bucket they are indistinguishable from a human
|
|
165
|
-
* saying no.
|
|
166
|
-
*/
|
|
167
|
-
export type PermissionPromptOutcome = "allow" | "deny" | "abandoned";
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Grouping dimensions recorded on both halves of a permission-prompt pair.
|
|
171
|
-
* The tool and its risk are always known at the prompt site, so they tighten
|
|
172
|
-
* to required; the rest are the lifecycle attributes as declared. Metadata
|
|
173
|
-
* only: never a file path, a command string, or any tool input.
|
|
174
|
-
*/
|
|
175
|
-
export interface PermissionPromptTelemetry extends LifecycleEventAttributes {
|
|
176
|
-
toolName: string;
|
|
177
|
-
riskLevel: string;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Server bounds on the lifecycle `event_name` and `tool_name`. A field over
|
|
182
|
-
* its bound fails validation, and a failed event is acked and discarded rather
|
|
183
|
-
* than retried, so both are clamped here. `event_name` has one variable-length
|
|
184
|
-
* part (the tool name, which can be a long `mcp__server__tool` id) and is much
|
|
185
|
-
* the tighter of the two, which is why `tool_name` carries the full-length
|
|
186
|
-
* value consumers join a prompt to its decision on.
|
|
187
|
-
*/
|
|
188
|
-
const LIFECYCLE_EVENT_NAME_LIMIT = 64;
|
|
189
|
-
const LIFECYCLE_TOOL_NAME_LIMIT = 255;
|
|
190
|
-
|
|
191
|
-
function permissionEventName(
|
|
192
|
-
prefix: string,
|
|
193
|
-
toolName: string,
|
|
194
|
-
suffix: string,
|
|
195
|
-
): string {
|
|
196
|
-
const budget = LIFECYCLE_EVENT_NAME_LIMIT - prefix.length - suffix.length;
|
|
197
|
-
return `${prefix}${toolName.slice(0, Math.max(budget, 0))}${suffix}`;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
function recordPermissionLifecycleEvent(
|
|
201
|
-
eventName: string,
|
|
202
|
-
entry: PermissionPromptTelemetry,
|
|
203
|
-
failureMessage: string,
|
|
204
|
-
): void {
|
|
205
|
-
try {
|
|
206
|
-
recordLifecycleEvent(eventName, {
|
|
207
|
-
...entry,
|
|
208
|
-
toolName: entry.toolName.slice(0, LIFECYCLE_TOOL_NAME_LIMIT),
|
|
209
|
-
});
|
|
210
|
-
} catch (err) {
|
|
211
|
-
log.warn({ err, eventName, toolName: entry.toolName }, failureMessage);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
/** Record the consent-gated telemetry row for an interactive permission prompt. */
|
|
216
|
-
export function recordToolPermissionPrompted(
|
|
217
|
-
entry: PermissionPromptTelemetry,
|
|
218
|
-
): void {
|
|
219
|
-
recordPermissionLifecycleEvent(
|
|
220
|
-
permissionEventName("permission_prompt:", entry.toolName, ""),
|
|
221
|
-
entry,
|
|
222
|
-
"Failed to record permission prompt telemetry",
|
|
223
|
-
);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/** Record the consent-gated telemetry row for how that prompt ended. */
|
|
227
|
-
export function recordToolPermissionDecided(
|
|
228
|
-
entry: PermissionPromptTelemetry,
|
|
229
|
-
outcome: PermissionPromptOutcome,
|
|
230
|
-
): void {
|
|
231
|
-
recordPermissionLifecycleEvent(
|
|
232
|
-
permissionEventName("permission_decided:", entry.toolName, `:${outcome}`),
|
|
233
|
-
entry,
|
|
234
|
-
"Failed to record permission decision telemetry",
|
|
235
|
-
);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
141
|
/** Operator-facing failure log: warn for expected failures, error otherwise. */
|
|
239
142
|
function logToolFailure(entry: ErrorAuditEntry): void {
|
|
240
143
|
const meta = {
|
|
@@ -303,32 +206,14 @@ function redactToolInput(
|
|
|
303
206
|
type TelemetryColumns = Pick<ToolInvocationRecord, "argBytes" | "resultBytes"> &
|
|
304
207
|
UsageAttributionColumns;
|
|
305
208
|
|
|
306
|
-
const NULL_TELEMETRY_COLUMNS: TelemetryColumns = {
|
|
307
|
-
argBytes: null,
|
|
308
|
-
resultBytes: null,
|
|
309
|
-
provider: null,
|
|
310
|
-
model: null,
|
|
311
|
-
inferenceProfile: null,
|
|
312
|
-
inferenceProfileSource: null,
|
|
313
|
-
};
|
|
314
|
-
|
|
315
209
|
/**
|
|
316
|
-
*
|
|
317
|
-
* confirmed `share_analytics` opt-out — the projection's `arg_bytes IS NOT
|
|
318
|
-
* NULL` filter excludes NULL rows permanently (the same mechanism that
|
|
319
|
-
* excludes legacy pre-migration rows, see tool-executed-events-store.ts), so
|
|
320
|
-
* an unknown consent state (cold cache) must populate the columns rather than
|
|
321
|
-
* destroy them. Consent is enforced again at flush time and platform ingest,
|
|
322
|
-
* so opted-out rows never ship.
|
|
210
|
+
* Payload sizes + model attribution, part of the local audit row.
|
|
323
211
|
*/
|
|
324
212
|
function telemetryColumns(
|
|
325
213
|
attribution: UsageAttributionSnapshot | null,
|
|
326
214
|
rawInput: string,
|
|
327
215
|
resultBytes: number,
|
|
328
216
|
): TelemetryColumns {
|
|
329
|
-
if (getRawShareAnalytics() === false) {
|
|
330
|
-
return NULL_TELEMETRY_COLUMNS;
|
|
331
|
-
}
|
|
332
217
|
return {
|
|
333
218
|
argBytes: Buffer.byteLength(rawInput, "utf8"),
|
|
334
219
|
resultBytes,
|
package/src/plugin-api/index.ts
CHANGED
|
@@ -294,7 +294,7 @@ export {
|
|
|
294
294
|
// Absolute path to the active workspace directory. A plugin that reads or
|
|
295
295
|
// writes files under the workspace (e.g. its own `plugins/<name>/data/`
|
|
296
296
|
// directory) resolves them against this instead of hardcoding a base path.
|
|
297
|
-
export { getWorkspaceDir } from "../util/
|
|
297
|
+
export { getWorkspaceDir } from "../util/layout.js";
|
|
298
298
|
// `String.prototype.slice` that never cuts a UTF-16 surrogate pair in half.
|
|
299
299
|
// Any text a plugin truncates by character budget and hands to a model must
|
|
300
300
|
// go through this: an orphaned half is invalid UTF-16 that strict provider
|
|
@@ -12,7 +12,7 @@ import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
|
12
12
|
import { fileURLToPath } from "node:url";
|
|
13
13
|
|
|
14
14
|
import { getCurrentPluginName } from "../plugins/plugin-execution-context.js";
|
|
15
|
-
import { getWorkspacePluginsDir } from "../util/
|
|
15
|
+
import { getWorkspacePluginsDir } from "../util/layout.js";
|
|
16
16
|
|
|
17
17
|
export const PLUGIN_NAME_ENV = "CADET_PLUGIN_NAME";
|
|
18
18
|
|
|
@@ -15,7 +15,7 @@ import { tmpdir } from "node:os";
|
|
|
15
15
|
import { join } from "node:path";
|
|
16
16
|
import { afterAll, beforeEach, describe, expect, test } from "bun:test";
|
|
17
17
|
|
|
18
|
-
import { getWorkspacePluginsDir } from "../../util/
|
|
18
|
+
import { getWorkspacePluginsDir } from "../../util/layout.js";
|
|
19
19
|
import { listInstalledPluginDirs } from "../installed-plugin-dirs.js";
|
|
20
20
|
|
|
21
21
|
const pluginsDir = getWorkspacePluginsDir();
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import { existsSync } from "node:fs";
|
|
16
16
|
import { join } from "node:path";
|
|
17
17
|
|
|
18
|
-
import { getWorkspaceHooksDir } from "../util/
|
|
18
|
+
import { getWorkspaceHooksDir } from "../util/layout.js";
|
|
19
19
|
import { listInstalledPluginDirs } from "./installed-plugin-dirs.js";
|
|
20
20
|
import { snapshotPluginSource } from "./source-fingerprint.js";
|
|
21
21
|
import type { PluginSourceVersion } from "./source-versions.js";
|
|
@@ -34,7 +34,7 @@ const {
|
|
|
34
34
|
parseChangesFromStdout,
|
|
35
35
|
} = await import("../../../../persistence/db-async-query.js");
|
|
36
36
|
const { findSqlite3 } = await import("../../../../util/sqlite3-runtime.js");
|
|
37
|
-
const { getDbPath } = await import("../../../../util/
|
|
37
|
+
const { getDbPath } = await import("../../../../util/layout.js");
|
|
38
38
|
|
|
39
39
|
await initializeDb();
|
|
40
40
|
|
|
@@ -26,7 +26,7 @@ const { maybeRunDbMaintenance, maybeRunPassiveWalCheckpoint } =
|
|
|
26
26
|
await import("../../../../persistence/db-maintenance.js");
|
|
27
27
|
const { getLastInteractiveUserMessageTimestamp } =
|
|
28
28
|
await import("../../../../persistence/conversation-crud.js");
|
|
29
|
-
const { getDbPath } = await import("../../../../util/
|
|
29
|
+
const { getDbPath } = await import("../../../../util/layout.js");
|
|
30
30
|
|
|
31
31
|
await initializeDb();
|
|
32
32
|
|
|
@@ -132,21 +132,6 @@ mock.module("../../../../persistence/conversation-tool-surface.js", () => ({
|
|
|
132
132
|
},
|
|
133
133
|
}));
|
|
134
134
|
|
|
135
|
-
const watchdogEvents: Array<{
|
|
136
|
-
checkName: string;
|
|
137
|
-
value?: number | null;
|
|
138
|
-
detail?: Record<string, unknown> | null;
|
|
139
|
-
}> = [];
|
|
140
|
-
mock.module("../../../../telemetry/watchdog-events-store.js", () => ({
|
|
141
|
-
recordWatchdogEvent: (record: {
|
|
142
|
-
checkName: string;
|
|
143
|
-
value?: number | null;
|
|
144
|
-
detail?: Record<string, unknown> | null;
|
|
145
|
-
}) => {
|
|
146
|
-
watchdogEvents.push(record);
|
|
147
|
-
},
|
|
148
|
-
}));
|
|
149
|
-
|
|
150
135
|
mock.module("../../../../daemon/conversation-registry.js", () => ({
|
|
151
136
|
findConversation: (id: string | undefined) => {
|
|
152
137
|
if (!id) {
|
|
@@ -494,7 +479,6 @@ function priorRetroMessage(rememberContents: string[]) {
|
|
|
494
479
|
|
|
495
480
|
describe("memoryRetrospectiveJob", () => {
|
|
496
481
|
beforeEach(() => {
|
|
497
|
-
watchdogEvents.length = 0;
|
|
498
482
|
mockState = null;
|
|
499
483
|
stateUpserts = [];
|
|
500
484
|
lastRunAtBumps = [];
|
|
@@ -604,16 +588,6 @@ describe("memoryRetrospectiveJob", () => {
|
|
|
604
588
|
expect(lastRunAtBumps).toHaveLength(0);
|
|
605
589
|
expect(wakeCalls).toHaveLength(0);
|
|
606
590
|
expect(forkCalls).toHaveLength(0);
|
|
607
|
-
// Every job run emits exactly one outcome counter for the health chart.
|
|
608
|
-
expect(
|
|
609
|
-
watchdogEvents.filter((e) => e.checkName === "memory_retrospective_run"),
|
|
610
|
-
).toEqual([
|
|
611
|
-
{
|
|
612
|
-
checkName: "memory_retrospective_run",
|
|
613
|
-
value: 1,
|
|
614
|
-
detail: { outcome: "no_new_messages" },
|
|
615
|
-
},
|
|
616
|
-
]);
|
|
617
591
|
});
|
|
618
592
|
|
|
619
593
|
test("assistant-only slice with the user-activity gate on: completed as a no-op, both pointers untouched", async () => {
|
|
@@ -642,15 +616,6 @@ describe("memoryRetrospectiveJob", () => {
|
|
|
642
616
|
expect(lastRunAtBumps).toHaveLength(0);
|
|
643
617
|
expect(wakeCalls).toHaveLength(0);
|
|
644
618
|
expect(forkCalls).toHaveLength(0);
|
|
645
|
-
expect(
|
|
646
|
-
watchdogEvents.filter((e) => e.checkName === "memory_retrospective_run"),
|
|
647
|
-
).toEqual([
|
|
648
|
-
{
|
|
649
|
-
checkName: "memory_retrospective_run",
|
|
650
|
-
value: 1,
|
|
651
|
-
detail: { outcome: "no_user_activity" },
|
|
652
|
-
},
|
|
653
|
-
]);
|
|
654
619
|
});
|
|
655
620
|
|
|
656
621
|
test("a user text row in the slice passes the user-activity gate", async () => {
|
|
@@ -828,17 +793,6 @@ describe("memoryRetrospectiveJob", () => {
|
|
|
828
793
|
const outcome = await memoryRetrospectiveJob(makeJob(), stubConfig);
|
|
829
794
|
|
|
830
795
|
expect(outcome.kind).toBe("wake_failed");
|
|
831
|
-
// The outcome counter carries the wake-failure reason so a fleet-wide
|
|
832
|
-
// spike is attributable (e.g. provider outage vs busy conversations).
|
|
833
|
-
expect(
|
|
834
|
-
watchdogEvents.filter((e) => e.checkName === "memory_retrospective_run"),
|
|
835
|
-
).toEqual([
|
|
836
|
-
{
|
|
837
|
-
checkName: "memory_retrospective_run",
|
|
838
|
-
value: 1,
|
|
839
|
-
detail: { outcome: "wake_failed", reason: "timeout" },
|
|
840
|
-
},
|
|
841
|
-
]);
|
|
842
796
|
if (outcome.kind === "wake_failed") {
|
|
843
797
|
expect(outcome.reason).toBe("timeout");
|
|
844
798
|
}
|
|
@@ -869,20 +823,6 @@ describe("memoryRetrospectiveJob", () => {
|
|
|
869
823
|
// Retryable: cooldown bump only, orphan fork cleaned up.
|
|
870
824
|
expect(lastRunAtBumps).toHaveLength(1);
|
|
871
825
|
expect(deletedConversationIds).toEqual(["fork-conv-1"]);
|
|
872
|
-
expect(
|
|
873
|
-
watchdogEvents.filter((e) => e.checkName === "memory_retrospective_run"),
|
|
874
|
-
).toEqual([
|
|
875
|
-
{
|
|
876
|
-
checkName: "memory_retrospective_run",
|
|
877
|
-
value: 1,
|
|
878
|
-
detail: {
|
|
879
|
-
outcome: "no_usable_output",
|
|
880
|
-
// The failure reason names what was missing, so an operator reading
|
|
881
|
-
// the job row can tell a lost write from an unfinished review.
|
|
882
|
-
reason: "run committed neither a memory write nor a concluding reply",
|
|
883
|
-
},
|
|
884
|
-
},
|
|
885
|
-
]);
|
|
886
826
|
});
|
|
887
827
|
|
|
888
828
|
test("a run whose reply reads as a conclusion but that the provider cut short: no_usable_output, prior retrospective preserved", async () => {
|
|
@@ -1118,17 +1058,6 @@ describe("memoryRetrospectiveJob", () => {
|
|
|
1118
1058
|
expect(stateUpserts).toHaveLength(1);
|
|
1119
1059
|
expect(stateUpserts[0]!.lastProcessedMessageId).toBe("m3");
|
|
1120
1060
|
expect(stateUpserts[0]!.rememberedLog).toEqual([]);
|
|
1121
|
-
expect(
|
|
1122
|
-
watchdogEvents.filter(
|
|
1123
|
-
(e) => e.checkName === "memory_retrospective_run",
|
|
1124
|
-
),
|
|
1125
|
-
).toEqual([
|
|
1126
|
-
{
|
|
1127
|
-
checkName: "memory_retrospective_run",
|
|
1128
|
-
value: 1,
|
|
1129
|
-
detail: { outcome: "invoked", noFindings: true },
|
|
1130
|
-
},
|
|
1131
|
-
]);
|
|
1132
1061
|
},
|
|
1133
1062
|
);
|
|
1134
1063
|
|
|
@@ -1309,17 +1238,6 @@ describe("memoryRetrospectiveJob", () => {
|
|
|
1309
1238
|
expect(stateUpserts).toHaveLength(0);
|
|
1310
1239
|
expect(lastRunAtBumps).toHaveLength(1);
|
|
1311
1240
|
expect(deletedConversationIds).toEqual(["fork-conv-1"]);
|
|
1312
|
-
// A thrown run still records an outcome counter (as "error") before the
|
|
1313
|
-
// rethrow — exception-flavored outages must show in the health metric.
|
|
1314
|
-
expect(
|
|
1315
|
-
watchdogEvents.filter((e) => e.checkName === "memory_retrospective_run"),
|
|
1316
|
-
).toEqual([
|
|
1317
|
-
{
|
|
1318
|
-
checkName: "memory_retrospective_run",
|
|
1319
|
-
value: 1,
|
|
1320
|
-
detail: { outcome: "error", reason: "LLM provider 503" },
|
|
1321
|
-
},
|
|
1322
|
-
]);
|
|
1323
1241
|
});
|
|
1324
1242
|
|
|
1325
1243
|
test("missing conversationId payload: no_new_messages, no side effects", async () => {
|
|
@@ -35,21 +35,6 @@ type ConversationStub = {
|
|
|
35
35
|
} | null;
|
|
36
36
|
let conversationOverrides: Record<string, ConversationStub> = {};
|
|
37
37
|
|
|
38
|
-
const watchdogEvents: Array<{
|
|
39
|
-
checkName: string;
|
|
40
|
-
value?: number | null;
|
|
41
|
-
detail?: Record<string, unknown> | null;
|
|
42
|
-
}> = [];
|
|
43
|
-
mock.module("../../../../telemetry/watchdog-events-store.js", () => ({
|
|
44
|
-
recordWatchdogEvent: (record: {
|
|
45
|
-
checkName: string;
|
|
46
|
-
value?: number | null;
|
|
47
|
-
detail?: Record<string, unknown> | null;
|
|
48
|
-
}) => {
|
|
49
|
-
watchdogEvents.push(record);
|
|
50
|
-
},
|
|
51
|
-
}));
|
|
52
|
-
|
|
53
38
|
mock.module("../../../../persistence/conversation-crud.js", () => ({
|
|
54
39
|
getMessagesAfter: (_id: string, _afterId: string | null) => [],
|
|
55
40
|
getMessages: (_id: string) => [],
|
|
@@ -171,7 +156,6 @@ function makeInsertJob(payload: Record<string, unknown>): MemoryJob {
|
|
|
171
156
|
|
|
172
157
|
describe("memory-retrospective skill card", () => {
|
|
173
158
|
beforeEach(() => {
|
|
174
|
-
watchdogEvents.length = 0;
|
|
175
159
|
addMessageCalls = [];
|
|
176
160
|
addMessageThrowsFor = null;
|
|
177
161
|
addMessageDeduplicatesFor = null;
|
|
@@ -334,31 +318,6 @@ describe("memory-retrospective skill card", () => {
|
|
|
334
318
|
expect(publishedConversationIds).toHaveLength(0);
|
|
335
319
|
});
|
|
336
320
|
|
|
337
|
-
test("a delivered card emits the skill_card_delivered counter; a dedup does not", async () => {
|
|
338
|
-
await insertSkillCardMessage("conv-source", "conv-run-telemetry", [
|
|
339
|
-
{ skillId: "s-1", name: "Skill One", description: "d1" },
|
|
340
|
-
{ skillId: "s-2", name: "Skill Two", description: "d2" },
|
|
341
|
-
]);
|
|
342
|
-
expect(
|
|
343
|
-
watchdogEvents.filter((e) => e.checkName === "skill_card_delivered"),
|
|
344
|
-
).toEqual([
|
|
345
|
-
{
|
|
346
|
-
checkName: "skill_card_delivered",
|
|
347
|
-
value: 2,
|
|
348
|
-
detail: { skill_count: 2 },
|
|
349
|
-
},
|
|
350
|
-
]);
|
|
351
|
-
|
|
352
|
-
// Retried delivery for the same run dedups on clientMessageId — the
|
|
353
|
-
// counter must not fire again.
|
|
354
|
-
await insertSkillCardMessage("conv-source", "conv-run-telemetry", [
|
|
355
|
-
{ skillId: "s-1", name: "Skill One", description: "d1" },
|
|
356
|
-
]);
|
|
357
|
-
expect(
|
|
358
|
-
watchdogEvents.filter((e) => e.checkName === "skill_card_delivered"),
|
|
359
|
-
).toHaveLength(1);
|
|
360
|
-
});
|
|
361
|
-
|
|
362
321
|
test("insert is best-effort: a persistence failure never throws", async () => {
|
|
363
322
|
addMessageThrowsFor = "src-conv-9";
|
|
364
323
|
|
|
@@ -193,7 +193,6 @@ interface TierKeyExemption {
|
|
|
193
193
|
* home for raw tier-predicate reads, and it compares v2 against v3.
|
|
194
194
|
* - `config/loader.ts` (v3) — seeds/normalizes the persisted `memory.v3`
|
|
195
195
|
* shape.
|
|
196
|
-
* - `telemetry/config-setting-snapshot.ts` (both) — reports both tier keys
|
|
197
196
|
* as-is.
|
|
198
197
|
* - the named migrations: append-only history that rewrites or reads the
|
|
199
198
|
* historical tier keys it was written for. Listed per file, not per
|
|
@@ -240,7 +239,6 @@ const TIER_KEY_READ_ALLOWLIST: readonly TierKeyExemption[] = [
|
|
|
240
239
|
},
|
|
241
240
|
{ path: "src/plugins/defaults/memory/v2/", keys: ["v2"] },
|
|
242
241
|
{ path: "src/plugins/defaults/memory/v3/", keys: ["v3"] },
|
|
243
|
-
{ path: "src/telemetry/config-setting-snapshot.ts", keys: ["v2", "v3"] },
|
|
244
242
|
{
|
|
245
243
|
path: "src/workspace/migrations/085-memory-v2-bm25-b-reembed-disabled-v2-pages.ts",
|
|
246
244
|
keys: ["v2"],
|
|
@@ -80,7 +80,6 @@ import {
|
|
|
80
80
|
import { resolveUserSlug } from "../../../prompts/persona-resolver.js";
|
|
81
81
|
import type { SystemPromptPersonaOverride } from "../../../prompts/system-prompt.js";
|
|
82
82
|
import { wakeAgentForOpportunity } from "../../../runtime/agent-wake.js";
|
|
83
|
-
import { recordWatchdogEvent } from "../../../telemetry/watchdog-events-store.js";
|
|
84
83
|
import { findMostRecentRetrospectiveFor } from "./find-most-recent-retrospective-for.js";
|
|
85
84
|
import { getLogger } from "./logging.js";
|
|
86
85
|
import {
|
|
@@ -134,9 +133,6 @@ const FOLLOW_UP_JOB_TYPES: readonly MemoryJobType[] = [] as const;
|
|
|
134
133
|
*/
|
|
135
134
|
export const STALE_SOURCE_PROCESSING_OVERRIDE_MS = 6 * 60 * 60 * 1000;
|
|
136
135
|
|
|
137
|
-
/** Watchdog check_name for the per-run retrospective outcome counter. */
|
|
138
|
-
const MEMORY_RETROSPECTIVE_RUN_CHECK_NAME = "memory_retrospective_run";
|
|
139
|
-
|
|
140
136
|
/**
|
|
141
137
|
* The agent-loop exit that means the MODEL ended the run: it answered without
|
|
142
138
|
* asking for another tool. Under every other exit something ended the run for
|
|
@@ -191,55 +187,10 @@ export async function memoryRetrospectiveJob(
|
|
|
191
187
|
return { kind: "disabled" };
|
|
192
188
|
}
|
|
193
189
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
// jobs worker's retry machinery, so a fleet-wide spike in
|
|
198
|
-
// `wake_failed`/`error` (e.g. a provider outage on the retrospective's
|
|
199
|
-
// resolved model) is visible without log access. The emitter itself
|
|
200
|
-
// never throws — the run's outcome must reach the jobs worker
|
|
201
|
-
// regardless.
|
|
202
|
-
const emitRunOutcome = (
|
|
203
|
-
outcome: string,
|
|
204
|
-
detail?: { reason?: string; noFindings?: boolean },
|
|
205
|
-
): void => {
|
|
206
|
-
try {
|
|
207
|
-
recordWatchdogEvent({
|
|
208
|
-
checkName: MEMORY_RETROSPECTIVE_RUN_CHECK_NAME,
|
|
209
|
-
value: 1,
|
|
210
|
-
detail: {
|
|
211
|
-
outcome,
|
|
212
|
-
...(detail?.reason ? { reason: detail.reason.slice(0, 200) } : {}),
|
|
213
|
-
...(detail?.noFindings !== undefined
|
|
214
|
-
? { noFindings: detail.noFindings }
|
|
215
|
-
: {}),
|
|
216
|
-
},
|
|
217
|
-
});
|
|
218
|
-
} catch {
|
|
219
|
-
// recordWatchdogEvent already no-ops on opt-out and a missing
|
|
220
|
-
// telemetry DB; anything past that is not worth surfacing here.
|
|
221
|
-
}
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
let outcome: MemoryRetrospectiveOutcome;
|
|
225
|
-
try {
|
|
226
|
-
outcome = await runForkBasedRetrospective(sourceConversationId, config, {
|
|
227
|
-
enforceSweepLookback: true,
|
|
228
|
-
enforceUserActivityGate: true,
|
|
229
|
-
});
|
|
230
|
-
} catch (err) {
|
|
231
|
-
emitRunOutcome("error", {
|
|
232
|
-
reason: err instanceof Error ? err.message : String(err),
|
|
233
|
-
});
|
|
234
|
-
throw err;
|
|
235
|
-
}
|
|
236
|
-
emitRunOutcome(outcome.kind, {
|
|
237
|
-
...(outcome.kind === "wake_failed" || outcome.kind === "no_usable_output"
|
|
238
|
-
? { reason: outcome.reason }
|
|
239
|
-
: {}),
|
|
240
|
-
...(outcome.kind === "invoked" ? { noFindings: outcome.noFindings } : {}),
|
|
190
|
+
return await runForkBasedRetrospective(sourceConversationId, config, {
|
|
191
|
+
enforceSweepLookback: true,
|
|
192
|
+
enforceUserActivityGate: true,
|
|
241
193
|
});
|
|
242
|
-
return outcome;
|
|
243
194
|
}
|
|
244
195
|
|
|
245
196
|
// ---------------------------------------------------------------------------
|