@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
|
@@ -67,7 +67,7 @@ export const unifyLlmCallSiteConfigsMigration: WorkspaceMigration = {
|
|
|
67
67
|
// Idempotency: skip only when `llm.default` is present AND no legacy
|
|
68
68
|
// source key remains on disk. The `&& !hasLegacyData` clause matters
|
|
69
69
|
// because `AssistantConfigSchema` wires `llm: LLMSchema.default(LLMSchema
|
|
70
|
-
// .parse({}))`, which makes `
|
|
70
|
+
// .parse({}))`, which makes `getConfig()` inject a full schema-default
|
|
71
71
|
// `llm.default` block to disk on first daemon boot under the new schema.
|
|
72
72
|
// If that boot happened before this migration was added (or before the
|
|
73
73
|
// daemon binary that includes it landed on the user's machine),
|
|
@@ -454,7 +454,7 @@ function readTemperature(value: unknown): number | undefined {
|
|
|
454
454
|
* cover the `services.inference` and top-level legacy locations; their
|
|
455
455
|
* presence proves migration 039 hasn't yet stripped them, which means we
|
|
456
456
|
* MUST re-process even if `llm.default` already exists (it may have been
|
|
457
|
-
* injected by `
|
|
457
|
+
* injected by `getConfig()`'s schema-default backfill rather than by a
|
|
458
458
|
* previous run of this migration).
|
|
459
459
|
*/
|
|
460
460
|
function hasLegacyLlmDefaultSource(config: Record<string, unknown>): boolean {
|
|
@@ -21,7 +21,7 @@ import type { WorkspaceMigration } from "./types.js";
|
|
|
21
21
|
* overwriting any user-defined overrides.
|
|
22
22
|
* 2. **Fresh install** (config.json absent): write a minimal starter
|
|
23
23
|
* config with just the callSite seeds, using the default provider
|
|
24
|
-
* (anthropic — same as the schema default). `
|
|
24
|
+
* (anthropic — same as the schema default). `getConfig()` runs
|
|
25
25
|
* after migrations and applies schema defaults only to the
|
|
26
26
|
* in-memory config (disk is left untouched), so our seeded
|
|
27
27
|
* callSites are preserved verbatim.
|
|
@@ -11,7 +11,7 @@ import type { WorkspaceMigration } from "./types.js";
|
|
|
11
11
|
* 1. **Existing workspace** (config.json present): merge the seed into
|
|
12
12
|
* `llm.callSites` without overwriting a user-defined override.
|
|
13
13
|
* 2. **Fresh install** (config.json absent): write a minimal starter
|
|
14
|
-
* config with just this seed. `
|
|
14
|
+
* config with just this seed. `getConfig()` runs after migrations
|
|
15
15
|
* and applies schema defaults to the in-memory config without
|
|
16
16
|
* rewriting disk, so the seeded callSite is preserved as-is.
|
|
17
17
|
*
|
|
@@ -21,7 +21,7 @@ import type { WorkspaceMigration } from "./types.js";
|
|
|
21
21
|
* 1. Existing workspace (config.json present): merge the seed into
|
|
22
22
|
* `llm.callSites` without overwriting a user-defined override.
|
|
23
23
|
* 2. Fresh install (config.json absent): write a minimal starter
|
|
24
|
-
* config carrying just the seed; `
|
|
24
|
+
* config carrying just the seed; `getConfig()` applies schema
|
|
25
25
|
* defaults to the in-memory config after migrations run.
|
|
26
26
|
*
|
|
27
27
|
* Skipped when:
|
|
@@ -94,14 +94,12 @@ import { backfillLeafIdsMigration } from "./093-backfill-leaf-ids.js";
|
|
|
94
94
|
import { seedAvatarManifestMigration } from "./094-seed-avatar-manifest.js";
|
|
95
95
|
import { bumpHeartbeatInterval30mTo60mMigration } from "./095-bump-heartbeat-interval-30m-to-60m.js";
|
|
96
96
|
import { reduceQualityProfileEffortMigration } from "./096-reduce-quality-profile-effort.js";
|
|
97
|
-
import { enableAdaptiveThinkingCloudProfilesMigration } from "./097-enable-adaptive-thinking-managed-profiles.js";
|
|
98
97
|
import { removeStaleUpdatesBulletinFileMigration } from "./098-remove-stale-updates-bulletin-file.js";
|
|
99
98
|
import { disableCacheOneShotCallsitesMigration } from "./099-disable-cache-one-shot-callsites.js";
|
|
100
99
|
import { upgradeQualityProfileToFable5Migration } from "./100-upgrade-quality-profile-to-fable-5.js";
|
|
101
100
|
import { upgradeBalancedEconomyToMinimaxM3Migration } from "./101-upgrade-balanced-economy-to-minimax-m3.js";
|
|
102
101
|
import { preserveHeartbeatEnabledForExistingWorkspacesMigration } from "./102-preserve-heartbeat-enabled-for-existing-workspaces.js";
|
|
103
102
|
import { upgradeQualityProfileToOpus48Migration } from "./103-upgrade-quality-profile-to-opus-4-8.js";
|
|
104
|
-
import { recheckAdaptiveThinkingModelImpliedAnthropicMigration } from "./104-recheck-adaptive-thinking-model-implied-anthropic.js";
|
|
105
103
|
import { enableMemoryV3LiveForNewWorkspacesMigration } from "./105-enable-memory-v3-live-for-new-workspaces.js";
|
|
106
104
|
import { dropCollectUsageDataMigration } from "./106-drop-collect-usage-data.js";
|
|
107
105
|
import { dropSendDiagnosticsMigration } from "./107-drop-send-diagnostics.js";
|
|
@@ -264,14 +262,12 @@ export const WORKSPACE_MIGRATIONS: WorkspaceMigration[] = [
|
|
|
264
262
|
seedAvatarManifestMigration,
|
|
265
263
|
bumpHeartbeatInterval30mTo60mMigration,
|
|
266
264
|
reduceQualityProfileEffortMigration,
|
|
267
|
-
enableAdaptiveThinkingCloudProfilesMigration,
|
|
268
265
|
removeStaleUpdatesBulletinFileMigration,
|
|
269
266
|
disableCacheOneShotCallsitesMigration,
|
|
270
267
|
upgradeQualityProfileToFable5Migration,
|
|
271
268
|
upgradeBalancedEconomyToMinimaxM3Migration,
|
|
272
269
|
preserveHeartbeatEnabledForExistingWorkspacesMigration,
|
|
273
270
|
upgradeQualityProfileToOpus48Migration,
|
|
274
|
-
recheckAdaptiveThinkingModelImpliedAnthropicMigration,
|
|
275
271
|
enableMemoryV3LiveForNewWorkspacesMigration,
|
|
276
272
|
dropCollectUsageDataMigration,
|
|
277
273
|
dropSendDiagnosticsMigration,
|
|
@@ -13,8 +13,8 @@ import { existsSync, readFileSync } from "node:fs";
|
|
|
13
13
|
|
|
14
14
|
import { syncIdentityNameToPlatform } from "../cloud/sync-identity.js";
|
|
15
15
|
import { parseIdentityFields } from "../daemon/handlers/identity.js";
|
|
16
|
+
import { getWorkspacePromptPath } from "../util/layout.js";
|
|
16
17
|
import { getLogger } from "../util/logger.js";
|
|
17
|
-
import { getWorkspacePromptPath } from "../util/platform.js";
|
|
18
18
|
import { getEnrichmentService } from "./commit-message-enrichment-service.js";
|
|
19
19
|
import {
|
|
20
20
|
type CommitContext,
|
|
@@ -1,324 +0,0 @@
|
|
|
1
|
-
# Activation Funnel Telemetry — Runbook + Analytics Handoff
|
|
2
|
-
|
|
3
|
-
> **Linear:** event emission ticket — gates rollout and dashboard tickets.
|
|
4
|
-
> **Funnel version:** `activation_v1_2026_06`
|
|
5
|
-
> **LD flag:** `experiment-activation-flow-2026-06-03`
|
|
6
|
-
> **Cohort arm tag:** `ab_variant = "variant-a"` (treatment); `control` = the no-rail arm.
|
|
7
|
-
|
|
8
|
-
This doc is the single executable reference for the activation-rail funnel
|
|
9
|
-
telemetry: what it measures, how it flows, the event vocabulary, the dedup
|
|
10
|
-
contract, the local smoke-test runbook, the BigQuery verification query, and the
|
|
11
|
-
canonical handoff blurb for the dashboard work. It is meant to be runnable by
|
|
12
|
-
another engineer without reading the implementation.
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## 1. Overview — what it measures and how it flows
|
|
17
|
-
|
|
18
|
-
The activation funnel measures how far a new user gets on their first run of the
|
|
19
|
-
**activation rail** (the onboarding experience driven by
|
|
20
|
-
`BOOTSTRAP-ACTIVATION-RAIL.md`). It emits five milestone ("funnel") events per
|
|
21
|
-
session into the **existing onboarding telemetry substrate** — no new event type,
|
|
22
|
-
no new ingest endpoint, no new BigQuery table.
|
|
23
|
-
|
|
24
|
-
The north-star "≥5 user messages within 24h per LD variant" metric is **not** a
|
|
25
|
-
materialized activation event. It is computed downstream by joining the existing
|
|
26
|
-
per-user-message `turn` telemetry events (`turn_index` per conversation) to the
|
|
27
|
-
platform's `flag_assignment_raw` cohort-assignment table — so a dedicated event
|
|
28
|
-
and a custom daemon turn-counting hook are not needed.
|
|
29
|
-
|
|
30
|
-
Flow, end to end:
|
|
31
|
-
|
|
32
|
-
1. **Daemon records** an activation event into the SQLite `telemetry_events`
|
|
33
|
-
outbox — the row stores the record-time wire payload, including the
|
|
34
|
-
deterministic activation `daemon_event_id` (§3) — via
|
|
35
|
-
`recordActivationEvent()` in
|
|
36
|
-
`assistant/src/onboarding/onboarding-events-store.ts`:
|
|
37
|
-
- emission is **deterministic, tied to a `ui_show` surface** — there is no
|
|
38
|
-
model-facing tool. The model tags the surface it is already rendering for a
|
|
39
|
-
rail move with an optional `activation_moment` parameter on `ui_show` (the
|
|
40
|
-
param is present in ui_show's schema only for activation-rail
|
|
41
|
-
conversations — `injectActivationMomentParam` in
|
|
42
|
-
`tools/ui-surface/channel-variants.ts`, applied at tool resolution when
|
|
43
|
-
`isActivationSession` is true); the
|
|
44
|
-
daemon captures that tag on the surface's server-side state and records the
|
|
45
|
-
milestone (gated on `isActivationSession`). **Timing is per-moment**
|
|
46
|
-
(`ACTIVATION_MOMENT_EMIT_AT` in `activation-funnel.ts`): most moments record
|
|
47
|
-
when the user **commits** the surface (clicks an action / submits /
|
|
48
|
-
selects) via `handleSurfaceAction()`; the one exception is
|
|
49
|
-
`first_wow_executed`, which records at **render time** in
|
|
50
|
-
`surfaceProxyResolver` — the Run result/`work_result` surface is often
|
|
51
|
-
display-only and may never be committed, so a commit-time emit would never
|
|
52
|
-
fire (and deferring it to a later click would conflate "executed" with
|
|
53
|
-
"interacted"). Show-timing tags are recorded immediately and not stored, so
|
|
54
|
-
the commit path never double-emits. The token→step-name map and the
|
|
55
|
-
show/commit timing both live in
|
|
56
|
-
`assistant/src/telemetry/activation-funnel.ts`;
|
|
57
|
-
- emission is best-effort (wrapped in try/catch) and never blocks or alters
|
|
58
|
-
the surface-action flow;
|
|
59
|
-
- `recordActivationEvent` respects the cloud `share_analytics` consent gate
|
|
60
|
-
via `getRawShareAnalytics()`: only a confirmed opt-out (`false`) drops the
|
|
61
|
-
event; an `"unknown"` state (cold cache, no platform session) records and
|
|
62
|
-
lets the flush/ingest gates enforce consent before anything ships.
|
|
63
|
-
2. **Reporter flushes** every ~5 min: `usage-telemetry-reporter.ts`
|
|
64
|
-
(`REPORT_INTERVAL_MS = 5 * 60 * 1000`, with a one-time
|
|
65
|
-
`INITIAL_FLUSH_DELAY_MS = 30_000` after startup) POSTs queued onboarding
|
|
66
|
-
rows to `/v1/telemetry/ingest/` as `type: "onboarding"` events — the stored
|
|
67
|
-
record-time payloads as-is — and deletes the rows after a successful upload.
|
|
68
|
-
3. **Platform ingests** the onboarding events and writes GCS NDJSON.
|
|
69
|
-
4. **BigQuery** exposes them via the external table
|
|
70
|
-
`mycadet-prod.telemetry.onboarding_raw`, which already carries the
|
|
71
|
-
`session_id / step_name / step_index / completed_at / funnel_version /
|
|
72
|
-
ab_variant` columns. The existing dbt model dedups on `daemon_event_id`
|
|
73
|
-
(earliest-wins).
|
|
74
|
-
|
|
75
|
-
No platform / dbt / terraform change is required — the activation events ride the
|
|
76
|
-
`type: "onboarding"` substrate that already exists end to end.
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## 2. Event vocabulary
|
|
81
|
-
|
|
82
|
-
The single source of truth is `assistant/src/telemetry/activation-funnel.ts`
|
|
83
|
-
(`ACTIVATION_STEPS`). `funnel_version = "activation_v1_2026_06"`
|
|
84
|
-
(`ACTIVATION_FUNNEL_VERSION`). `ab_variant = "variant-a"`
|
|
85
|
-
(`ACTIVATION_AB_VARIANT`, the treatment arm).
|
|
86
|
-
|
|
87
|
-
Each step is recorded when the user commits the `ui_show` surface the model
|
|
88
|
-
tagged with the corresponding `activation_moment` token (see §1). The
|
|
89
|
-
token→step-name map is the `moment_*` column below.
|
|
90
|
-
|
|
91
|
-
| step_index | step_name | `activation_moment` token | Recorded on commit of |
|
|
92
|
-
| ---------- | --------------------------------- | ------------------------- | --------------------------------------------------------------- |
|
|
93
|
-
| 1 | `activation_moment_1_complete` | `moment_1` | Port-summary card OR no-port intake `choice` surface |
|
|
94
|
-
| 2 | `activation_moment_2_complete` | `moment_2` | Propose offer surface (the `ui_show` offer card/choice) |
|
|
95
|
-
| 3 | `activation_moment_3_complete` | `moment_3` | task-selection surface |
|
|
96
|
-
| 4 | `activation_first_wow_executed` | `first_wow_executed` | Run result surface (e.g. `work_result`) |
|
|
97
|
-
| 5 | `activation_first_wow_interacted` | `first_wow_interacted` | user clicks an action on the tagged result surface (see §1, §4) |
|
|
98
|
-
|
|
99
|
-
All five steps are recorded deterministically on surface commit. The north star
|
|
100
|
-
(≥5 user messages) is derived downstream from the existing `turn` telemetry, not
|
|
101
|
-
a materialized activation event (see §1).
|
|
102
|
-
|
|
103
|
-
On the wire, each onboarding event also sets `screen = step_name` (to satisfy
|
|
104
|
-
the cloud's legacy-path validation), and `completed_at` is the ISO-8601
|
|
105
|
-
record time.
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
## 3. Dedup contract
|
|
110
|
-
|
|
111
|
-
Activation rows carry a **deterministic** `daemon_event_id`:
|
|
112
|
-
|
|
113
|
-
```
|
|
114
|
-
daemon_event_id = `${funnel_version}:${session_id}:${step_name}`
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
Built by `buildActivationDaemonEventId()` in
|
|
118
|
-
`assistant/src/telemetry/activation-funnel.ts`. The store freezes the id into
|
|
119
|
-
the outbox payload **at record time**, keyed on the **funnel version the row was
|
|
120
|
-
recorded under**, NOT whatever constant the binary that later flushes it carries.
|
|
121
|
-
This keeps the id stable across a version bump so rows queued offline / flushed
|
|
122
|
-
after an upgrade still collapse with already-ingested rows from the same session.
|
|
123
|
-
|
|
124
|
-
A moment that fires more than once (e.g. a model double-emit) therefore lands
|
|
125
|
-
with the same `daemon_event_id` and is collapsed downstream by the existing dbt
|
|
126
|
-
earliest-wins dedup on `daemon_event_id`. For boolean "moment complete"
|
|
127
|
-
semantics, earliest-wins is correct.
|
|
128
|
-
|
|
129
|
-
**Flush safety:** each outbox row keeps its own random row `id`, and the reporter
|
|
130
|
-
acknowledges (deletes) shipped rows by that row id, NOT by `daemon_event_id`. The
|
|
131
|
-
deterministic id lives only in the wire payload, so it never affects flush
|
|
132
|
-
bookkeeping.
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## 4. Cohort scoping
|
|
137
|
-
|
|
138
|
-
Events only emit for conversations explicitly marked as **activation-rail
|
|
139
|
-
sessions**:
|
|
140
|
-
|
|
141
|
-
- The marker lives in the `activation_sessions` table
|
|
142
|
-
(`assistant/src/memory/activation-session-store.ts`,
|
|
143
|
-
`markActivationSession` / `isActivationSession`).
|
|
144
|
-
- It is set in `assistant/src/prompts/system-prompt.ts` **only when the
|
|
145
|
-
`BOOTSTRAP-ACTIVATION-RAIL.md` template is actually active** (i.e.
|
|
146
|
-
`bootstrapTemplate === ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE`), which the web
|
|
147
|
-
prechat context selects only for users whose
|
|
148
|
-
`experiment-activation-flow-2026-06-03` cohort puts them on the rail. (It is
|
|
149
|
-
also set up-front in `conversation.ts` `setOnboardingContext` so the marker is
|
|
150
|
-
available before the first turn's tool resolution.)
|
|
151
|
-
- Emission is **gated on the marker at commit time**: when a tagged `ui_show`
|
|
152
|
-
surface is committed, the daemon records the milestone only if
|
|
153
|
-
`isActivationSession(conversationId)` is true. A stray `activation_moment` tag
|
|
154
|
-
in a normal chat is therefore ignored and never pollutes the funnel. (`moment_4`
|
|
155
|
-
/ `first_wow_interacted` deduping is handled the same way as any other moment —
|
|
156
|
-
see the dedup contract in §3 — and the per-surface tag is cleared after the
|
|
157
|
-
first record so a single surface commit emits at most once.)
|
|
158
|
-
|
|
159
|
-
The activation **session id is the daemon `conversation_id`** of the rail
|
|
160
|
-
conversation. That same value is `session_id` on every activation event.
|
|
161
|
-
|
|
162
|
-
---
|
|
163
|
-
|
|
164
|
-
## 5. Local smoke-test runbook
|
|
165
|
-
|
|
166
|
-
Goal: drive one dev session through the activation cohort, emit all five events,
|
|
167
|
-
flush, and verify rows in BigQuery. Executable by another engineer.
|
|
168
|
-
|
|
169
|
-
### 5.1 Put the dev user in the activation cohort
|
|
170
|
-
|
|
171
|
-
The rail is gated by the LD flag `experiment-activation-flow-2026-06-03`. Two
|
|
172
|
-
options:
|
|
173
|
-
|
|
174
|
-
- **In-app feature-flags override (fastest):** open the in-app Feature Flags
|
|
175
|
-
panel and force `experiment-activation-flow-2026-06-03` ON for the dev user.
|
|
176
|
-
- **LaunchDarkly targeting:** target the dev user for the flag in the LD
|
|
177
|
-
dashboard (per the LD-flag-two-repo convention, targeting is dashboard-side).
|
|
178
|
-
|
|
179
|
-
When the flag is ON, the web prechat context selects
|
|
180
|
-
`BOOTSTRAP-ACTIVATION-RAIL.md` as the bootstrap template, and the daemon marks
|
|
181
|
-
the conversation in `activation_sessions` on first build of the system prompt.
|
|
182
|
-
|
|
183
|
-
### 5.2 Confirm share_analytics consent is on — and pick the right daemon mode
|
|
184
|
-
|
|
185
|
-
Two distinct concerns: whether record-time rows reach SQLite (consent gate), and
|
|
186
|
-
whether those rows reach BigQuery (flush gate, dev-disabled).
|
|
187
|
-
|
|
188
|
-
1. `recordActivationEvent` no-ops only on a confirmed `share_analytics` opt-out
|
|
189
|
-
(it reads `getRawShareAnalytics()`); an `"unknown"` state records, but the
|
|
190
|
-
flush defers until consent resolves. So for rows to actually SHIP, the dev
|
|
191
|
-
session must be signed in to
|
|
192
|
-
the cloud with `share_analytics` consent enabled, or no rows reach
|
|
193
|
-
SQLite. The consent cache is refreshed by `startConsentRefresh()` in
|
|
194
|
-
`assistant/src/daemon/lifecycle.ts`, which runs **regardless of dev mode** — so
|
|
195
|
-
a dev session signed in with `share_analytics` consent enabled writes
|
|
196
|
-
record-time rows to SQLite, where they can be inspected directly.
|
|
197
|
-
2. **Dev mode disables the flush entirely.** When the daemon runs in dev mode
|
|
198
|
-
(`CADET_DEV=1`), `assistant/src/daemon/lifecycle.ts` never starts the
|
|
199
|
-
`UsageTelemetryReporter` — rows accumulate in SQLite (consent permitting) but
|
|
200
|
-
are never POSTed, and the "wait/restart for flush" steps below will never reach
|
|
201
|
-
BigQuery. For an end-to-end smoke test, run the daemon **outside dev mode** (so
|
|
202
|
-
the reporter starts), or explicitly invoke the reporter's `flush()` via a dev
|
|
203
|
-
hook. The SQLite rows can be inspected directly in dev mode, but the BigQuery
|
|
204
|
-
verification (§6) requires a real flush.
|
|
205
|
-
|
|
206
|
-
### 5.3 Start a fresh activation conversation and capture its id
|
|
207
|
-
|
|
208
|
-
Start a brand-new conversation with the flag ON (it must be the rail bootstrap, so
|
|
209
|
-
start it from the web prechat flow / activation entry, not an existing chat).
|
|
210
|
-
Note its `conversation_id` — this is the `session_id` you will query on.
|
|
211
|
-
|
|
212
|
-
If multiple daemons are running, kill ALL `daemon/main.ts` processes, remove
|
|
213
|
-
`~/.cadet/cadet.sock`, and start fresh, so the conversation is served by a known
|
|
214
|
-
daemon writing to a known SQLite DB.
|
|
215
|
-
|
|
216
|
-
### 5.4 Drive the rail through all five model moments
|
|
217
|
-
|
|
218
|
-
Work the conversation through the rail moves so the model tags each surface and
|
|
219
|
-
you commit it (the model tags surfaces via `ui_show`'s `activation_moment`
|
|
220
|
-
parameter; which surface maps to which moment is documented in
|
|
221
|
-
`BOOTSTRAP-ACTIVATION-RAIL.md` and §2). Each milestone records when YOU commit
|
|
222
|
-
the tagged surface:
|
|
223
|
-
|
|
224
|
-
1. Commit the Port-summary card / no-port intake `choice` → `activation_moment_1_complete`.
|
|
225
|
-
2. Commit the Propose offer surface → `activation_moment_2_complete`.
|
|
226
|
-
3. Commit the task-selection surface → `activation_moment_3_complete`.
|
|
227
|
-
4. Commit the Run result surface → `activation_first_wow_executed`.
|
|
228
|
-
5. Click an action on the result surface → `activation_first_wow_interacted`.
|
|
229
|
-
|
|
230
|
-
### 5.5 Force / await a telemetry flush
|
|
231
|
-
|
|
232
|
-
The reporter flushes on a schedule: a first flush ~30s after startup
|
|
233
|
-
(`INITIAL_FLUSH_DELAY_MS`) and then every ~5 min (`REPORT_INTERVAL_MS`). Either:
|
|
234
|
-
|
|
235
|
-
- **Wait** for the next scheduled flush (≤ ~5 min), or
|
|
236
|
-
- **Restart the daemon** to take the ~30s post-startup flush, or
|
|
237
|
-
- call the reporter's `flush()` path directly if you have a dev hook into the
|
|
238
|
-
running daemon.
|
|
239
|
-
|
|
240
|
-
A successful flush POSTs the unreported onboarding rows to
|
|
241
|
-
`/v1/telemetry/ingest/` as `type: "onboarding"` events.
|
|
242
|
-
|
|
243
|
-
### 5.6 Verify in BigQuery
|
|
244
|
-
|
|
245
|
-
Wait for the cloud → GCS NDJSON → BigQuery pipeline to land the events, then
|
|
246
|
-
run the query in §6.
|
|
247
|
-
|
|
248
|
-
---
|
|
249
|
-
|
|
250
|
-
## 6. BigQuery verification query
|
|
251
|
-
|
|
252
|
-
```sql
|
|
253
|
-
SELECT step_name, step_index, COUNT(*) AS n
|
|
254
|
-
FROM `mycadet-prod.telemetry.onboarding_raw`
|
|
255
|
-
WHERE funnel_version = 'activation_v1_2026_06'
|
|
256
|
-
AND session_id = '<dev conversation id>'
|
|
257
|
-
GROUP BY 1, 2
|
|
258
|
-
ORDER BY 2;
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
**Expected:** all five `activation_*` step names for the one session, step_index
|
|
262
|
-
1–5, each with `n = 1`:
|
|
263
|
-
|
|
264
|
-
```
|
|
265
|
-
activation_moment_1_complete | 1 | 1
|
|
266
|
-
activation_moment_2_complete | 2 | 1
|
|
267
|
-
activation_moment_3_complete | 3 | 1
|
|
268
|
-
activation_first_wow_executed | 4 | 1
|
|
269
|
-
activation_first_wow_interacted | 5 | 1
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
A missing row means that milestone never emitted (re-drive that rail move); an
|
|
273
|
-
`n > 1` before dbt dedup is harmless (the deterministic `daemon_event_id`
|
|
274
|
-
collapses it earliest-wins).
|
|
275
|
-
|
|
276
|
-
---
|
|
277
|
-
|
|
278
|
-
## 7. Canonical handoff blurb (paste-ready for the final PR description)
|
|
279
|
-
|
|
280
|
-
> **Activation funnel telemetry — handoff for dashboard ticket.** The activation rail
|
|
281
|
-
> now emits five milestone funnel events into the existing onboarding telemetry
|
|
282
|
-
> substrate (`type: "onboarding"` → `/v1/telemetry/ingest/` → GCS NDJSON →
|
|
283
|
-
> `mycadet-prod.telemetry.onboarding_raw`), so no new event type, ingest
|
|
284
|
-
> endpoint, or BigQuery table is involved. Cohort is gated by the LaunchDarkly
|
|
285
|
-
> flag **`experiment-activation-flow-2026-06-03`**; only rail (treatment)
|
|
286
|
-
> conversations emit. Every event carries **`funnel_version =
|
|
287
|
-
"activation_v1_2026_06"`** and **`ab_variant`** tagged `"variant-a"` for
|
|
288
|
-
> treatment (`"control"` is the no-rail arm, measured for now from generic `turn`
|
|
289
|
-
> events). The event vocabulary (step_name → step_index): `activation_moment_1_complete`
|
|
290
|
-
> (1), `activation_moment_2_complete` (2), `activation_moment_3_complete` (3),
|
|
291
|
-
> `activation_first_wow_executed` (4), `activation_first_wow_interacted` (5).
|
|
292
|
-
> `session_id` is the rail conversation's id. The **north star** ("≥5 user
|
|
293
|
-
> messages within 24h per LD variant") is **not** a funnel event — compute it
|
|
294
|
-
> downstream by joining the existing `turn` telemetry events (`turn_index` per
|
|
295
|
-
> conversation) to the cloud's `flag_assignment_raw` cohort-assignment table.
|
|
296
|
-
> **Dedup contract:** each row's `daemon_event_id` is deterministic,
|
|
297
|
-
> `${funnel_version}:${session_id}:${step_name}`, keyed on the row's stored
|
|
298
|
-
> `funnel_version`; the existing dbt earliest-wins dedup on `daemon_event_id`
|
|
299
|
-
> collapses any repeated moment to a single row. Build funnel conversion as a
|
|
300
|
-
> step_index 1→5 progression per `session_id`, filtered to `funnel_version =
|
|
301
|
-
'activation_v1_2026_06'`.
|
|
302
|
-
|
|
303
|
-
---
|
|
304
|
-
|
|
305
|
-
## 8. Notes
|
|
306
|
-
|
|
307
|
-
- **"naming check" (resolved).** Events fire **deterministically on
|
|
308
|
-
the real user commit of a `ui_show` surface, not every text turn**. The model
|
|
309
|
-
passively tags the surface for a rail move with `activation_moment`; the daemon
|
|
310
|
-
records the milestone in `handleSurfaceAction` when the user commits that
|
|
311
|
-
surface (firing conditions / surface→moment mapping documented in
|
|
312
|
-
`BOOTSTRAP-ACTIVATION-RAIL.md`). This removes the standalone
|
|
313
|
-
`emit_activation_event` tool (and its cohort preactivation) entirely and ties
|
|
314
|
-
emission to a genuine user action, resolving the naming-check open
|
|
315
|
-
interpretation.
|
|
316
|
-
- **Stream B (multivariate cohort flag conversion) is NOT in this work.** It is
|
|
317
|
-
gated on the cloud team's in-flight string-flag serving — until the cloud
|
|
318
|
-
can serve string/multivariate flags, flipping
|
|
319
|
-
`experiment-activation-flow-2026-06-03` boolean→multivariate client-side would
|
|
320
|
-
silently disable the live allowlisted rail. Until then, `ab_variant` is the
|
|
321
|
-
constant `"variant-a"` (only treatment runs the rail), and the **control side**
|
|
322
|
-
of the comparison is measured from generic `turn` events split by the
|
|
323
|
-
platform's experiment exposure mapping. Once Stream B lands, the daemon tags the
|
|
324
|
-
real assigned arm and the cross-cohort comparison works with zero rework.
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import { lstatSync, readdirSync, readFileSync, realpathSync } from "node:fs";
|
|
2
|
-
import { join, relative, resolve, sep } from "node:path";
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
AGENT_PLUGINS_MCP_SCHEMA_URL,
|
|
6
|
-
SpecMcpDocumentSchema,
|
|
7
|
-
SpecMcpServerSchema,
|
|
8
|
-
} from "../src/mcp/spec-schema.js";
|
|
9
|
-
import {
|
|
10
|
-
readPluginManifest,
|
|
11
|
-
STANDARD_PLUGIN_MANIFEST,
|
|
12
|
-
} from "../src/util/plugin-manifest.js";
|
|
13
|
-
|
|
14
|
-
export interface BundledPackageFile {
|
|
15
|
-
path: string;
|
|
16
|
-
contentBase64: string;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface BundledPackage {
|
|
20
|
-
version: string;
|
|
21
|
-
files: BundledPackageFile[];
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/** Validate and embed every local source in the canonical marketplace. */
|
|
25
|
-
export function buildBundledPluginPackages(
|
|
26
|
-
repoRoot: string,
|
|
27
|
-
): Record<string, BundledPackage> {
|
|
28
|
-
const marketplacePath = join(repoRoot, "plugins", "marketplace.json");
|
|
29
|
-
const manifest = JSON.parse(readFileSync(marketplacePath, "utf8")) as {
|
|
30
|
-
plugins?: unknown;
|
|
31
|
-
};
|
|
32
|
-
if (!Array.isArray(manifest.plugins)) {
|
|
33
|
-
throw new Error("plugins/marketplace.json is missing its plugins array");
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const pluginsRoot = realpathSync(join(repoRoot, "plugins"));
|
|
37
|
-
const packages: Record<string, BundledPackage> = {};
|
|
38
|
-
for (const rawEntry of manifest.plugins) {
|
|
39
|
-
if (typeof rawEntry !== "object" || rawEntry === null) {
|
|
40
|
-
continue;
|
|
41
|
-
}
|
|
42
|
-
const entry = rawEntry as Record<string, unknown>;
|
|
43
|
-
const rawSource = entry.source;
|
|
44
|
-
if (typeof rawSource !== "object" || rawSource === null) {
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
const source = rawSource as Record<string, unknown>;
|
|
48
|
-
if (source.source !== "local") {
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
if (
|
|
52
|
-
typeof entry.name !== "string" ||
|
|
53
|
-
typeof source.path !== "string" ||
|
|
54
|
-
typeof source.version !== "string"
|
|
55
|
-
) {
|
|
56
|
-
throw new Error(
|
|
57
|
-
"local marketplace entries require name, path, and version",
|
|
58
|
-
);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
const pathSegments = source.path.split("/");
|
|
62
|
-
if (
|
|
63
|
-
!source.path.startsWith("plugins/") ||
|
|
64
|
-
source.path.includes("\\") ||
|
|
65
|
-
pathSegments.some(
|
|
66
|
-
(segment) => segment === "" || segment === "." || segment === "..",
|
|
67
|
-
)
|
|
68
|
-
) {
|
|
69
|
-
throw new Error(
|
|
70
|
-
`local marketplace package path is not canonical: ${source.path}`,
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
let packageRoot = resolve(repoRoot);
|
|
74
|
-
for (const segment of pathSegments) {
|
|
75
|
-
packageRoot = join(packageRoot, segment);
|
|
76
|
-
if (lstatSync(packageRoot).isSymbolicLink()) {
|
|
77
|
-
throw new Error(
|
|
78
|
-
`local marketplace package path may not contain symlinks: ${source.path}`,
|
|
79
|
-
);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
const packageRealpath = realpathSync(packageRoot);
|
|
83
|
-
const relativeToPlugins = relative(pluginsRoot, packageRealpath);
|
|
84
|
-
if (
|
|
85
|
-
relativeToPlugins === "" ||
|
|
86
|
-
relativeToPlugins === ".." ||
|
|
87
|
-
relativeToPlugins.startsWith(`..${sep}`)
|
|
88
|
-
) {
|
|
89
|
-
throw new Error(
|
|
90
|
-
`local marketplace package escapes plugins/: ${source.path}`,
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const pluginManifest = readPluginManifest(packageRealpath);
|
|
95
|
-
if (
|
|
96
|
-
pluginManifest.source !== STANDARD_PLUGIN_MANIFEST ||
|
|
97
|
-
pluginManifest.name !== entry.name ||
|
|
98
|
-
pluginManifest.version !== source.version
|
|
99
|
-
) {
|
|
100
|
-
throw new Error(
|
|
101
|
-
`local marketplace package ${source.path} must match entry name and version`,
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
const rawMcp = JSON.parse(
|
|
105
|
-
readFileSync(join(packageRealpath, "mcp.json"), "utf8"),
|
|
106
|
-
) as unknown;
|
|
107
|
-
const mcp = SpecMcpDocumentSchema.parse(rawMcp);
|
|
108
|
-
if (mcp.$schema !== AGENT_PLUGINS_MCP_SCHEMA_URL) {
|
|
109
|
-
throw new Error(
|
|
110
|
-
`local marketplace package ${source.path} must use the Agent Plugins MCP schema`,
|
|
111
|
-
);
|
|
112
|
-
}
|
|
113
|
-
if (Object.keys(mcp.mcpServers).length === 0) {
|
|
114
|
-
throw new Error(
|
|
115
|
-
`local marketplace package ${source.path} must declare an MCP server`,
|
|
116
|
-
);
|
|
117
|
-
}
|
|
118
|
-
for (const server of Object.values(mcp.mcpServers)) {
|
|
119
|
-
SpecMcpServerSchema.parse(server);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
const files: BundledPackageFile[] = [];
|
|
123
|
-
const visit = (directory: string): void => {
|
|
124
|
-
for (const child of readdirSync(directory, { withFileTypes: true })) {
|
|
125
|
-
const childPath = join(directory, child.name);
|
|
126
|
-
if (child.isSymbolicLink() || lstatSync(childPath).isSymbolicLink()) {
|
|
127
|
-
throw new Error(
|
|
128
|
-
`local marketplace packages may not contain symlinks: ${source.path}/${child.name}`,
|
|
129
|
-
);
|
|
130
|
-
}
|
|
131
|
-
if (child.isDirectory()) {
|
|
132
|
-
visit(childPath);
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
135
|
-
if (!child.isFile()) {
|
|
136
|
-
throw new Error(
|
|
137
|
-
`local marketplace package contains an unsupported entry: ${childPath}`,
|
|
138
|
-
);
|
|
139
|
-
}
|
|
140
|
-
files.push({
|
|
141
|
-
path: relative(packageRealpath, childPath).split(sep).join("/"),
|
|
142
|
-
contentBase64: readFileSync(childPath).toString("base64"),
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
|
-
visit(packageRealpath);
|
|
147
|
-
files.sort((a, b) => a.path.localeCompare(b.path));
|
|
148
|
-
if (packages[source.path]) {
|
|
149
|
-
throw new Error(`duplicate local marketplace package: ${source.path}`);
|
|
150
|
-
}
|
|
151
|
-
packages[source.path] = { version: source.version, files };
|
|
152
|
-
}
|
|
153
|
-
return packages;
|
|
154
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { writeFileSync } from "node:fs";
|
|
4
|
-
import { join, resolve } from "node:path";
|
|
5
|
-
|
|
6
|
-
import { buildBundledPluginPackages } from "./bundled-plugin-packages.js";
|
|
7
|
-
|
|
8
|
-
const repoRoot = resolve(import.meta.dir, "../..");
|
|
9
|
-
const output = {
|
|
10
|
-
version: 1,
|
|
11
|
-
packages: buildBundledPluginPackages(repoRoot),
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
if (process.argv.includes("--check")) {
|
|
15
|
-
console.log("✓ Local marketplace packages are valid");
|
|
16
|
-
} else {
|
|
17
|
-
writeFileSync(
|
|
18
|
-
join(
|
|
19
|
-
repoRoot,
|
|
20
|
-
"assistant",
|
|
21
|
-
"src",
|
|
22
|
-
"cli",
|
|
23
|
-
"lib",
|
|
24
|
-
"bundled-plugin-packages.json",
|
|
25
|
-
),
|
|
26
|
-
`${JSON.stringify(output, null, 2)}\n`,
|
|
27
|
-
);
|
|
28
|
-
console.log("✓ Generated bundled local plugin packages");
|
|
29
|
-
}
|