@mycadet/assistant 0.12.9 → 0.12.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dockerfile +0 -8
- package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +1 -1
- package/openapi.yaml +62 -910
- package/package.json +3 -7
- package/scripts/build-test-fixtures.ts +1 -1
- package/scripts/generate-openapi.ts +22 -6
- package/scripts/postinstall.ts +4 -10
- package/scripts/run-tests.ts +0 -21
- package/src/__tests__/adaptive-thinking-repair.test.ts +19 -57
- package/src/__tests__/agent-loop.test.ts +0 -76
- package/src/__tests__/anthropic-provider.test.ts +6 -6
- package/src/__tests__/assert-not-live-db.ts +1 -1
- package/src/__tests__/assistant-id-boundary-guard.test.ts +3 -3
- package/src/__tests__/attachments-store-heic-normalize.test.ts +1 -1
- package/src/__tests__/attachments-store.test.ts +1 -1
- package/src/__tests__/audit-log-rotation.test.ts +1 -1
- package/src/__tests__/btw-routes.test.ts +1 -1
- package/src/__tests__/byok-default-profile-ensure.test.ts +21 -27
- package/src/__tests__/call-conversation-messages.test.ts +0 -5
- package/src/__tests__/call-recovery.test.ts +2 -7
- package/src/__tests__/call-routes-http.test.ts +0 -12
- package/src/__tests__/call-store.test.ts +2 -7
- package/src/__tests__/catalog-files.test.ts +7 -5
- package/src/__tests__/checker.test.ts +1 -1
- package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +4 -4
- package/src/__tests__/cloud-client-verify-credential.test.ts +0 -4
- package/src/__tests__/cloud-credential-catalog-cli.test.ts +14 -14
- package/src/__tests__/cloud-profile-guard.test.ts +48 -401
- package/src/__tests__/compaction-events.test.ts +2 -2
- package/src/__tests__/config-loader-backfill.test.ts +74 -163
- package/src/__tests__/config-loader-cloud-defaults.test.ts +11 -11
- package/src/__tests__/config-loader-corrupt.test.ts +10 -10
- package/src/__tests__/config-loader-quarantine-notice.test.ts +7 -7
- package/src/__tests__/config-loader-validation-reset-notice.test.ts +11 -11
- package/src/__tests__/config-schema.test.ts +26 -27
- package/src/__tests__/config-set-route.test.ts +2 -6
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +28 -300
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +39 -246
- package/src/__tests__/conversation-agent-loop.test.ts +2 -58
- package/src/__tests__/conversation-clear-safety.test.ts +0 -30
- package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
- package/src/__tests__/conversation-queue.test.ts +1 -1
- package/src/__tests__/conversation-runtime-assembly.test.ts +1 -1
- package/src/__tests__/conversation-skill-tools.test.ts +4 -444
- package/src/__tests__/conversation-slash-commands.test.ts +1 -1
- package/src/__tests__/conversation-store.test.ts +1 -84
- package/src/__tests__/conversation-surface-state.test.ts +0 -16
- package/src/__tests__/credential-health-service.test.ts +14 -1
- package/src/__tests__/credential-record-retire.test.ts +1 -1
- package/src/__tests__/credential-record-write-through.test.ts +1 -1
- package/src/__tests__/credential-security-invariants.test.ts +0 -145
- package/src/__tests__/custom-profile-ensure.test.ts +1 -1
- package/src/__tests__/default-profile-catalog-fallback.test.ts +5 -15
- package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -2
- package/src/__tests__/dictation-profile-store.test.ts +6 -6
- package/src/__tests__/disk-usage.test.ts +28 -164
- package/src/__tests__/docker-signing-key-bootstrap.test.ts +1 -1
- package/src/__tests__/embedding-cloud-proxy-selection.test.ts +1 -1
- package/src/__tests__/emit-event-signal.test.ts +1 -1
- package/src/__tests__/gateway-client-cloud-outbound.test.ts +3 -3
- package/src/__tests__/gateway-only-enforcement.test.ts +1 -1
- package/src/__tests__/guardian-dispatch.test.ts +0 -13
- package/src/__tests__/helpers/seed-app.ts +1 -1
- package/src/__tests__/host-cu-routes-targeted.test.ts +1 -1
- package/src/__tests__/host-shell-tool.test.ts +1 -1
- package/src/__tests__/identity-routes.test.ts +1 -1
- package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
- package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
- package/src/__tests__/injector-chain.test.ts +1 -1
- package/src/__tests__/injector-config-quarantine-notice.test.ts +1 -1
- package/src/__tests__/injector-config-validation-reset-notice.test.ts +1 -1
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
- package/src/__tests__/{platform.test.ts → layout.test.ts} +1 -1
- package/src/__tests__/list-all-apps.test.ts +1 -1
- package/src/__tests__/live-workspace-guard.test.ts +2 -2
- package/src/__tests__/llm-resolver-override-or-default.test.ts +5 -6
- package/src/__tests__/llm-resolver.test.ts +7 -7
- package/src/__tests__/llm-schema-fallback-profile.test.ts +9 -10
- package/src/__tests__/llm-usage-store.test.ts +0 -495
- package/src/__tests__/log-export-routes.test.ts +1 -1
- package/src/__tests__/mcp-config-secret-boundary.test.ts +12 -53
- package/src/__tests__/mcp-list-plugin-servers.test.ts +1 -1
- package/src/__tests__/memory-config-file-parity.test.ts +1 -1
- package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
- package/src/__tests__/messages-read-boundary-guard.test.ts +0 -2
- package/src/__tests__/notification-guardian-path.test.ts +0 -7
- package/src/__tests__/onboarding-persona-write.test.ts +1 -1
- package/src/__tests__/openai-provider.test.ts +8 -8
- package/src/__tests__/path-policy.test.ts +1 -1
- package/src/__tests__/persona-resolver.test.ts +1 -1
- package/src/__tests__/plugin-app-serve-routes.test.ts +1 -1
- package/src/__tests__/plugin-effective-enabled-set.test.ts +1 -1
- package/src/__tests__/plugin-import-boundary-guard.test.ts +4 -6
- package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +0 -3
- package/src/__tests__/provider-cloud-proxy-integration.test.ts +1 -5
- package/src/__tests__/provider-connections-backfill.test.ts +10 -10
- package/src/__tests__/prune-old-conversations-job.test.ts +6 -31
- package/src/__tests__/resolve-app.test.ts +1 -1
- package/src/__tests__/run-due-schedules.test.ts +1 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -53
- package/src/__tests__/schedule-routes.test.ts +1 -1
- package/src/__tests__/schedule-store.test.ts +1 -1
- package/src/__tests__/secret-routes-cloud-proxy.test.ts +1 -1
- package/src/__tests__/skill-load-plugin-scope.test.ts +1 -1
- package/src/__tests__/surface-completion-compaction-boundary.test.ts +1 -1
- package/src/__tests__/tool-approval-handler.test.ts +1 -1
- package/src/__tests__/tool-audit.test.ts +5 -235
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +54 -114
- package/src/__tests__/tools-get-route.test.ts +1 -1
- package/src/__tests__/turn-outcome-read.test.ts +1 -1
- package/src/__tests__/twilio-routes.test.ts +0 -1
- package/src/__tests__/usage-attribution.test.ts +0 -31
- package/src/__tests__/verification-control-plane-policy.test.ts +3 -10
- package/src/__tests__/visible-app-context.test.ts +1 -1
- package/src/__tests__/voice-ingress-preflight.test.ts +1 -1
- package/src/__tests__/workspace-git-service.test.ts +1 -1
- package/src/__tests__/workspace-greetings.test.ts +1 -1
- package/src/acp/__tests__/helpers/acp-config-stub.ts +1 -1
- package/src/activation/progress-store.ts +1 -1
- package/src/activation/turn-hooks.ts +1 -1
- package/src/agent/loop.ts +0 -51
- package/src/apps/app-store.ts +1 -1
- package/src/avatar/__tests__/avatar-store.test.ts +2 -172
- package/src/avatar/accent-backfill.ts +1 -1
- package/src/avatar/avatar-manifest.ts +1 -1
- package/src/avatar/avatar-store.ts +10 -69
- package/src/avatar/ensure-raster.ts +1 -1
- package/src/avatar/identity-avatar.ts +1 -1
- package/src/avatar/sync-avatar.ts +1 -1
- package/src/avatar/traits-png-sync.ts +1 -1
- package/src/bundler/compiler-tools.ts +1 -1
- package/src/bundler/package-resolver.ts +1 -1
- package/src/calls/__tests__/call-controller.test.ts +25 -27
- package/src/calls/active-call-lease.ts +1 -1
- package/src/calls/call-controller.ts +3 -3
- package/src/calls/call-domain.ts +4 -8
- package/src/calls/call-store.ts +2 -76
- package/src/calls/resolve-call-tts-provider.ts +3 -3
- package/src/calls/twilio-config.ts +3 -3
- package/src/calls/twilio-rest.ts +2 -2
- package/src/calls/voice-ingress-preflight.ts +2 -2
- package/src/cli/bundled-modules.ts +0 -2
- package/src/cli/commands/__tests__/apps.test.ts +1 -1
- package/src/cli/commands/__tests__/plugins.test.ts +9 -66
- package/src/cli/commands/__tests__/ps.test.ts +67 -0
- package/src/cli/commands/auth.help.ts +2 -2
- package/src/cli/commands/avatar.ts +1 -1
- package/src/cli/commands/changelog.ts +1 -1
- package/src/cli/commands/cloud/__tests__/subscription.test.ts +2 -2
- package/src/cli/commands/cloud/index.help.ts +1 -1
- package/src/cli/commands/cloud/index.ts +2 -2
- package/src/cli/commands/db/refresh.ts +1 -1
- package/src/cli/commands/db/repair-step-conversation-backfill.ts +1 -1
- package/src/cli/commands/db/repair.ts +1 -1
- package/src/cli/commands/db/status.ts +1 -1
- package/src/cli/commands/inference-profiles.ts +1 -12
- package/src/cli/commands/memory/__tests__/memory-v3.test.ts +1 -116
- package/src/cli/commands/memory/index.help.ts +1 -43
- package/src/cli/commands/memory/memory-v3.ts +0 -64
- package/src/cli/commands/plugins.ts +54 -205
- package/src/cli/commands/ps.ts +5 -2
- package/src/cli/commands/status.ts +1 -1
- package/src/cli/index.help.ts +0 -2
- package/src/cli/lib/__tests__/inspect-plugin.test.ts +36 -66
- package/src/cli/lib/__tests__/install-from-cloud.test.ts +1 -1
- package/src/cli/lib/__tests__/install-from-github.test.ts +41 -117
- package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +2 -185
- package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +36 -66
- package/src/cli/lib/__tests__/plugin-catalog-visibility.test.ts +4 -6
- package/src/cli/lib/__tests__/plugin-details.test.ts +113 -96
- package/src/cli/lib/__tests__/search-plugins.test.ts +9 -16
- package/src/cli/lib/__tests__/uninstall-plugin.test.ts +1 -1
- package/src/cli/lib/__tests__/upgrade-plugin.test.ts +38 -15
- package/src/cli/lib/diff-plugin.ts +1 -1
- package/src/cli/lib/inspect-plugin.ts +13 -97
- package/src/cli/lib/install-from-cloud.ts +1 -1
- package/src/cli/lib/install-from-github.ts +75 -154
- package/src/cli/lib/install-plugin-dependencies.ts +1 -1
- package/src/cli/lib/list-installed-plugins.ts +1 -1
- package/src/cli/lib/open-browser.ts +1 -1
- package/src/cli/lib/plugin-catalog-cache.ts +8 -51
- package/src/cli/lib/plugin-catalog-resolve.ts +3 -22
- package/src/cli/lib/plugin-details.ts +5 -27
- package/src/cli/lib/plugin-marketplace.ts +18 -266
- package/src/cli/lib/search-plugins.ts +23 -43
- package/src/cli/lib/toggle-plugin.ts +1 -1
- package/src/cli/lib/uninstall-plugin.ts +1 -1
- package/src/cli/lib/upgrade-plugin.ts +3 -49
- package/src/cli/program.ts +1 -3
- package/src/cli.ts +1 -1
- package/src/cloud/client.ts +0 -6
- package/src/cloud/consent-cache.test.ts +22 -201
- package/src/cloud/consent-cache.ts +16 -111
- package/src/cloud/sync-identity.ts +1 -1
- package/src/config/__tests__/chat-settings.test.ts +1 -1
- package/src/config/__tests__/cloud-identity.test.ts +15 -2
- package/src/config/__tests__/default-plugin-skill-discovery.test.ts +1 -1
- package/src/config/__tests__/default-profile-catalog.test.ts +12 -51
- package/src/config/__tests__/deployment-context-defaults.test.ts +13 -13
- package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +4 -4
- package/src/config/__tests__/loader-last-known-good.test.ts +9 -9
- package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +7 -7
- package/src/config/__tests__/plugin-resident-skill-discovery.test.ts +1 -1
- package/src/config/__tests__/profile-materialization.test.ts +2 -4
- package/src/config/__tests__/sync-gated-profiles.test.ts +1 -106
- package/src/config/acp-agent-write.ts +1 -1
- package/src/config/bundled-skills/settings/tools/open-system-settings.test.ts +1 -1
- package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
- package/src/config/call-site-defaults.ts +0 -6
- package/src/config/cloud-identity.ts +12 -5
- package/src/config/composer-preferences.ts +1 -1
- package/src/config/default-profile-catalog.ts +8 -75
- package/src/config/default-profile-names.ts +2 -25
- package/src/config/env-registry.ts +1 -14
- package/src/config/env.ts +8 -6
- package/src/config/llm-resolver.ts +1 -2
- package/src/config/loader.ts +13 -17
- package/src/config/profile-materialization.ts +1 -1
- package/src/config/schema.ts +1 -7
- package/src/config/schemas/call-site-catalog.ts +0 -7
- package/src/config/schemas/llm.ts +22 -27
- package/src/config/seed-inference-profiles.ts +16 -17
- package/src/config/skills.ts +2 -2
- package/src/config/sync-gated-profiles.ts +6 -24
- package/src/credential-health/credential-health-service.ts +10 -3
- package/src/daemon/approval-generators.ts +3 -3
- package/src/daemon/config-watcher.ts +2 -2
- package/src/daemon/conversation-agent-loop-handlers.ts +0 -18
- package/src/daemon/conversation-agent-loop.ts +6 -97
- package/src/daemon/conversation-process.ts +1 -1
- package/src/daemon/conversation-skill-tools.ts +4 -72
- package/src/daemon/conversation-store.ts +1 -1
- package/src/daemon/conversation-surface-state.ts +0 -33
- package/src/daemon/conversation-surfaces.ts +1 -86
- package/src/daemon/conversation-tool-setup.test.ts +1 -1
- package/src/daemon/conversation-tool-setup.ts +0 -23
- package/src/daemon/conversation.ts +3 -5
- package/src/daemon/daemon-control.ts +3 -3
- package/src/daemon/dictation-profile-store.ts +3 -3
- package/src/daemon/event-loop-watchdog.test.ts +2 -198
- package/src/daemon/event-loop-watchdog.ts +0 -185
- package/src/daemon/external-plugins-bootstrap.ts +1 -1
- package/src/daemon/first-greeting.ts +1 -1
- package/src/daemon/handlers/skills.ts +1 -1
- package/src/daemon/host-app-control-proxy.ts +1 -1
- package/src/daemon/host-cu-proxy.ts +2 -2
- package/src/daemon/identity-helpers.ts +1 -1
- package/src/daemon/lifecycle.ts +11 -15
- package/src/daemon/main.ts +1 -1
- package/src/daemon/now-scratchpad.ts +1 -1
- package/src/daemon/process-message.ts +4 -4
- package/src/daemon/profiler-run-store.ts +2 -2
- package/src/daemon/providers-setup.ts +2 -2
- package/src/daemon/shutdown-handlers.ts +0 -10
- package/src/daemon/sqlite-corruption-watchdog.test.ts +2 -142
- package/src/daemon/sqlite-corruption-watchdog.ts +17 -81
- package/src/daemon/tool-side-effects.ts +1 -1
- package/src/desktop/desktop-session-manager.ts +1 -1
- package/src/desktop/desktop-wallpaper-renderer.ts +1 -1
- package/src/heartbeat/heartbeat-service.ts +1 -1
- package/src/home/feed-writer.ts +1 -1
- package/src/home/home-greeting-cache.ts +1 -1
- package/src/home/relationship-state-writer.ts +2 -2
- package/src/hooks/__tests__/hook-live-reload.test.ts +1 -1
- package/src/hooks/hook-loader.ts +2 -2
- package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
- package/src/inbound/oauth-callback-url.ts +3 -3
- package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
- package/src/ipc/socket-path.ts +1 -1
- package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
- package/src/live-voice/__tests__/live-voice-vad.test.ts +1 -1
- package/src/live-voice/live-voice-session.ts +3 -66
- package/src/mcp/__tests__/effective-config.test.ts +1 -1
- package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +2 -2
- package/src/mcp/__tests__/mcp-oauth-provider.test.ts +2 -3
- package/src/mcp/__tests__/reload-signal-emission.test.ts +1 -1
- package/src/mcp/__tests__/reload-signal.test.ts +1 -1
- package/src/mcp/__tests__/workspace-mcp-config.test.ts +19 -21
- package/src/mcp/reload-signal.ts +1 -1
- package/src/mcp/workspace-mcp-config.ts +1 -23
- package/src/messaging/draft-store.ts +1 -1
- package/src/monitoring/__tests__/active-conversations.test.ts +1 -1
- package/src/monitoring/__tests__/page-cache.test.ts +1 -1
- package/src/monitoring/__tests__/stall-capture.test.ts +1 -1
- package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +1 -1
- package/src/monitoring/active-conversations.ts +1 -1
- package/src/monitoring/control.ts +1 -1
- package/src/monitoring/daemon-boot-time.ts +1 -1
- package/src/monitoring/daemon-heartbeat.ts +1 -1
- package/src/monitoring/page-cache.ts +1 -1
- package/src/monitoring/plugin-auto-update.ts +1 -7
- package/src/monitoring/plugin-source-watch.ts +1 -1
- package/src/monitoring/recovery/db.ts +1 -1
- package/src/monitoring/recovery/inflight-content.ts +1 -1
- package/src/monitoring/resource-sampler.ts +3 -14
- package/src/monitoring/stall-capture.ts +1 -1
- package/src/monitoring/worker.ts +9 -76
- package/src/monitoring/workspace-git-heartbeat.ts +1 -1
- package/src/oauth/connect-orchestrator.ts +4 -4
- package/src/permissions/checker.ts +1 -1
- package/src/permissions/workspace-policy.ts +1 -1
- package/src/persistence/__tests__/main-db-readonly-probe.ts +27 -52
- package/src/persistence/__tests__/message-content-file.test.ts +1 -1
- package/src/persistence/__tests__/slow-sync-log.test.ts +0 -2
- package/src/persistence/attachments-store.ts +1 -1
- package/src/persistence/conversation-crud.ts +1 -38
- package/src/persistence/conversation-directories.ts +1 -1
- package/src/persistence/conversation-types.ts +0 -8
- package/src/persistence/db-async-query.ts +1 -1
- package/src/persistence/db-connection.ts +11 -1
- package/src/persistence/db-init.ts +1 -1
- package/src/persistence/db-maintenance.ts +1 -1
- package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +1 -1
- package/src/persistence/embeddings/embedding-local.ts +4 -4
- package/src/persistence/embeddings/embedding-runtime-manager.ts +1 -1
- package/src/persistence/embeddings/qdrant-client.ts +1 -1
- package/src/persistence/embeddings/qdrant-manager.ts +1 -1
- package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +1 -1
- package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +1 -1
- package/src/persistence/job-handlers/cleanup.ts +8 -17
- package/src/persistence/llm-usage-store.ts +2 -229
- package/src/persistence/message-content-file.ts +1 -1
- package/src/persistence/migrations/209-strip-thinking-from-consolidated.ts +1 -1
- package/src/persistence/migrations/222-strip-placeholder-sentinels-from-messages.ts +1 -1
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/329-move-onboarding-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/330-move-auth-fallback-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/331-move-lifecycle-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/332-move-skill-loaded-events-to-telemetry-db.test.ts +13 -0
- package/src/persistence/migrations/333-create-telemetry-events-table.test.ts +7 -4
- package/src/persistence/migrations/334-backfill-telemetry-events-outbox.test.ts +13 -0
- package/src/persistence/migrations/387-drop-telemetry-tables.ts +51 -0
- package/src/persistence/migrations/__tests__/327-create-flush-checkpoints.test.ts +9 -1
- package/src/persistence/migrations/__tests__/387-drop-telemetry-tables.test.ts +79 -0
- package/src/persistence/migrations/helpers/relocation.ts +1 -1
- package/src/persistence/migrations/run-migrations.ts +1 -1
- package/src/persistence/migrations/validate-migration-state.ts +1 -1
- package/src/persistence/raw-query.ts +1 -29
- package/src/persistence/slow-sync-log.ts +0 -23
- package/src/persistence/steps.ts +2 -0
- package/src/{telemetry → persistence}/tool-audit.ts +6 -121
- package/src/plugin-api/index.ts +1 -1
- package/src/plugin-api/plugin-name-env.ts +1 -1
- package/src/plugins/__tests__/installed-plugin-dirs.test.ts +1 -1
- package/src/plugins/collect-source-versions.ts +1 -1
- package/src/plugins/defaults/channel/package.json +1 -1
- package/src/plugins/defaults/cloud-hosted/package.json +1 -1
- package/src/plugins/defaults/compaction/package.json +1 -1
- package/src/plugins/defaults/documents/package.json +1 -1
- package/src/plugins/defaults/empty-response/package.json +1 -1
- package/src/plugins/defaults/exploration-drift/package.json +1 -1
- package/src/plugins/defaults/image-fallback/package.json +1 -1
- package/src/plugins/defaults/image-recovery/package.json +1 -1
- package/src/plugins/defaults/max-tokens-continue/package.json +1 -1
- package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/db-maintenance.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +0 -82
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-skill-card.test.ts +0 -41
- package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +0 -2
- package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -52
- package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +0 -18
- package/src/plugins/defaults/memory/package.json +1 -1
- package/src/plugins/defaults/memory/paths.ts +4 -4
- package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
- package/src/plugins/defaults/memory/src/memory-v2-routes.ts +5 -5
- package/src/plugins/defaults/memory/src/memory-v3-routes.ts +0 -207
- package/src/plugins/defaults/memory/src/memory-worker-routes.ts +1 -1
- package/src/plugins/defaults/memory/startup.ts +1 -22
- package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +2 -253
- package/src/plugins/defaults/memory/v3/orchestrate.ts +5 -129
- package/src/plugins/defaults/memory/worker-control.ts +1 -1
- package/src/plugins/defaults/memory/worker.ts +2 -2
- package/src/plugins/defaults/session/package.json +1 -1
- package/src/plugins/defaults/surface-completion-nudge/package.json +1 -1
- package/src/plugins/defaults/task-progress/package.json +1 -1
- package/src/plugins/defaults/task-progress-nudge/package.json +1 -1
- package/src/plugins/defaults/title-generate/package.json +1 -1
- package/src/plugins/defaults/tool-error/package.json +1 -1
- package/src/plugins/defaults/tool-result-truncate/package.json +1 -1
- package/src/plugins/defaults/turn-context/package.json +1 -1
- package/src/plugins/defaults/workspace/injectors.ts +1 -1
- package/src/plugins/defaults/workspace/package.json +1 -1
- package/src/plugins/disabled-state.ts +1 -1
- package/src/plugins/ensure-plugin-api-shim.ts +1 -1
- package/src/plugins/ensure-shared-dep-links.ts +1 -1
- package/src/plugins/installed-plugin-dirs.ts +1 -1
- package/src/plugins/mcp-servers.ts +7 -9
- package/src/plugins/mtime-cache.ts +2 -2
- package/src/plugins/source-versions.ts +1 -1
- package/src/prompts/bootstrap-cleanup.ts +1 -1
- package/src/prompts/persona-resolver.ts +1 -1
- package/src/prompts/sections.ts +2 -2
- package/src/prompts/system-prompt.ts +10 -42
- package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +0 -37
- package/src/providers/__tests__/cadet-connection-routing.test.ts +2 -2
- package/src/providers/cadet/client.ts +1 -1
- package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -1
- package/src/providers/inference/adapter-factory.ts +1 -1
- package/src/providers/inference/backfill.ts +3 -10
- package/src/providers/inference/profile-probe.ts +1 -1
- package/src/providers/retry.ts +0 -2
- package/src/providers/types.ts +0 -7
- package/src/providers/usage-tracking.ts +1 -1
- package/src/routes/__tests__/route-host.test.ts +1 -1
- package/src/routes/control.ts +1 -1
- package/src/routes/route-host-client.ts +1 -1
- package/src/routes/worker.ts +2 -2
- package/src/runtime/agent-wake.ts +1 -1
- package/src/runtime/assistant-stream-state.ts +1 -1
- package/src/runtime/auth/token-service.ts +1 -1
- package/src/runtime/background-job-runner.ts +1 -1
- package/src/runtime/middleware/twilio-validation.ts +2 -2
- package/src/runtime/routes/__tests__/app-pin-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +1 -1
- package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +3 -33
- package/src/runtime/routes/__tests__/cloud-credits-routes.test.ts +5 -4
- package/src/runtime/routes/__tests__/cloud-invoice-routes.test.ts +4 -3
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +59 -287
- package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/deprecated-route-context.test.ts +15 -62
- package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +105 -12
- package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/monitoring-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +47 -211
- package/src/runtime/routes/__tests__/route-host-worker-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/schedule-routes-disarm-reason.test.ts +1 -1
- package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-route-dispatcher-host.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-routes-cli.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-routes-notices.test.ts +1 -1
- package/src/runtime/routes/__tests__/user-routes-request.test.ts +1 -1
- package/src/runtime/routes/app-management-routes.ts +1 -1
- package/src/runtime/routes/attachment-routes.ts +1 -1
- package/src/runtime/routes/audit-routes.ts +1 -1
- package/src/runtime/routes/avatar-routes.ts +3 -10
- package/src/runtime/routes/cloud-routes.ts +3 -3
- package/src/runtime/routes/content-source-routes.ts +1 -1
- package/src/runtime/routes/conversation-query-routes.ts +60 -621
- package/src/runtime/routes/conversation-routes.ts +1 -38
- package/src/runtime/routes/debug-routes.ts +1 -1
- package/src/runtime/routes/deprecated-route-context.ts +5 -61
- package/src/runtime/routes/heartbeat-routes.ts +1 -1
- package/src/runtime/routes/identity-routes.ts +1 -1
- package/src/runtime/routes/index.ts +0 -6
- package/src/runtime/routes/inference-profile-session-handler.ts +3 -3
- package/src/runtime/routes/inference-profiles-routes.ts +48 -21
- package/src/runtime/routes/inference-provider-connection-routes.ts +0 -1
- package/src/runtime/routes/llm-call-sites-routes.ts +3 -3
- package/src/runtime/routes/log-export/__tests__/installed-inventory.test.ts +1 -1
- package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +1 -1
- package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +1 -1
- package/src/runtime/routes/log-export/workspace-allowlist.ts +1 -1
- package/src/runtime/routes/log-export-routes.ts +17 -15
- package/src/runtime/routes/migration-rollback-routes.ts +1 -1
- package/src/runtime/routes/migration-routes.ts +2 -3
- package/src/runtime/routes/monitoring-routes.ts +2 -2
- package/src/runtime/routes/oauth-providers.ts +5 -5
- package/src/runtime/routes/plugins-routes.ts +38 -163
- package/src/runtime/routes/profiler-routes.ts +1 -1
- package/src/runtime/routes/route-host-worker-routes.ts +1 -1
- package/src/runtime/routes/sanity-routes.ts +1 -1
- package/src/runtime/routes/schedule-routes.ts +1 -1
- package/src/runtime/routes/schedule-worker-routes.ts +1 -1
- package/src/runtime/routes/settings-routes.ts +1 -1
- package/src/runtime/routes/sounds-config-routes.ts +1 -1
- package/src/runtime/routes/surface-conversation-resolver.ts +1 -7
- package/src/runtime/routes/user-route-dispatcher.ts +1 -3
- package/src/runtime/routes/user-route-import.ts +1 -1
- package/src/runtime/routes/user-route-resolution.ts +1 -1
- package/src/runtime/routes/user-routes-cli.ts +1 -1
- package/src/runtime/routes/workspace-commit-routes.ts +1 -1
- package/src/runtime/routes/workspace-greetings.ts +1 -1
- package/src/runtime/routes/workspace-routes.ts +1 -1
- package/src/runtime/routes/workspace-utils.ts +1 -1
- package/src/runtime/sync/resource-sync-events.ts +1 -1
- package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +1 -1
- package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1 -1
- package/src/schedule/plugin-schedule-availability.ts +1 -1
- package/src/schedule/plugin-schedule-declarations.ts +1 -1
- package/src/schedule/run-script.ts +1 -1
- package/src/schedule/scheduler.ts +1 -11
- package/src/schedule/worker-control.ts +1 -1
- package/src/schedule/worker.ts +3 -3
- package/src/security/oauth2.ts +2 -2
- package/src/security/secret-allowlist.ts +1 -1
- package/src/signals/cancel.ts +1 -1
- package/src/signals/conversation-undo.ts +1 -1
- package/src/signals/emit-event.ts +1 -1
- package/src/signals/event-stream.ts +1 -1
- package/src/signals/user-message.ts +1 -1
- package/src/skills/catalog-install.ts +2 -1
- package/src/skills/clawhub.ts +1 -1
- package/src/skills/cloud-store.ts +1 -1
- package/src/skills/path-classifier.ts +1 -1
- package/src/skills/skill-history.ts +1 -1
- package/src/skills/skillssh-registry.ts +1 -1
- package/src/skills/uninstall.ts +1 -1
- package/src/skills/workspace-skill-md-signature.ts +1 -1
- package/src/subagent/manager.ts +1 -1
- package/src/theme/workspace-theme.ts +1 -1
- package/src/tools/browser/auth-cache.ts +1 -1
- package/src/tools/browser/browser-manager.ts +1 -1
- package/src/tools/browser/runtime-check.ts +1 -1
- package/src/tools/executor.ts +4 -4
- package/src/tools/filesystem/write.ts +1 -1
- package/src/tools/permission-checker.ts +2 -51
- package/src/tools/run-standalone.ts +1 -1
- package/src/tools/skills/format-input-schema.ts +1 -1
- package/src/tools/skills/load.ts +1 -1
- package/src/tools/skills/scaffold-cloud.ts +0 -32
- package/src/tools/terminal/safe-env.ts +1 -2
- package/src/tools/terminal/sanitized-bash.ts +1 -1
- package/src/tools/terminal/shell.ts +1 -1
- package/src/tools/tool-approval-handler.ts +4 -1
- package/src/tools/workflows/manage-workflows.ts +2 -2
- package/src/tools/workflows/run-workflow.test.ts +1 -1
- package/src/tools/workspace-tools/loader.ts +1 -1
- package/src/tts/synthesis-stream.ts +2 -2
- package/src/usage/attribution.ts +1 -11
- package/src/util/browser.ts +1 -1
- package/src/util/bun-runtime.ts +2 -1
- package/src/util/device-id.ts +1 -1
- package/src/util/disk-usage.ts +4 -139
- package/src/util/layout.ts +3 -3
- package/src/util/logger.ts +1 -1
- package/src/util/logs-db-path.ts +1 -1
- package/src/util/memory-db-path.ts +1 -1
- package/src/util/{platform.ts → os.ts} +5 -30
- package/src/util/process-tree.ts +19 -0
- package/src/util/sqlite3-runtime.ts +1 -1
- package/src/util/telemetry-db-path.ts +1 -1
- package/src/watcher/__tests__/engine.test.ts +0 -23
- package/src/watcher/engine.ts +0 -7
- package/src/windows-compiled-cli.ts +0 -4
- package/src/windows-compiled-worker-entry.ts +0 -6
- package/src/workflows/leaf-runner.test.ts +1 -1
- package/src/workflows/leaf-runner.ts +1 -1
- package/src/workflows/library.ts +1 -1
- package/src/workspace/adaptive-thinking-repair.ts +5 -24
- package/src/workspace/byok-default-profile-ensure.ts +24 -26
- package/src/workspace/custom-profile-ensure.ts +2 -2
- package/src/workspace/git-service.ts +1 -1
- package/src/workspace/hatched-date.ts +1 -1
- package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +2 -2
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +1 -1
- package/src/workspace/migrations/077-seed-memory-router-callsite.ts +1 -1
- package/src/workspace/migrations/registry.ts +0 -4
- package/src/workspace/turn-commit.ts +1 -1
- package/docs/activation-funnel-telemetry.md +0 -324
- package/scripts/bundled-plugin-packages.ts +0 -154
- package/scripts/generate-bundled-plugin-packages.ts +0 -29
- package/src/__tests__/activation-early-marking.test.ts +0 -114
- package/src/__tests__/auth-fallback-events-store.test.ts +0 -99
- package/src/__tests__/config-get-vision-flag.test.ts +0 -139
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +0 -400
- package/src/__tests__/internal-telemetry-routes.test.ts +0 -213
- package/src/__tests__/telemetry-routes.test.ts +0 -182
- package/src/__tests__/turn-events-store.test.ts +0 -376
- package/src/__tests__/ui-channel-variants.test.ts +0 -53
- package/src/avatar/__tests__/avatar-changed-telemetry.test.ts +0 -217
- package/src/avatar/avatar-changed-telemetry.ts +0 -128
- package/src/calls/__tests__/call-funnel-telemetry.test.ts +0 -204
- package/src/cli/commands/telemetry.help.ts +0 -27
- package/src/cli/commands/telemetry.ts +0 -83
- package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +0 -251
- package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +0 -113
- package/src/cli/lib/__tests__/plugin-marketplace.test.ts +0 -384
- package/src/cli/lib/__tests__/plugin-pin-history.test.ts +0 -164
- package/src/cli/lib/__tests__/plugins-install-offline.test.ts +0 -228
- package/src/cli/lib/bundled-marketplace.json +0 -1575
- package/src/cli/lib/bundled-plugin-packages.json +0 -827
- package/src/cli/lib/bundled-plugin-packages.ts +0 -87
- package/src/cli/lib/plugin-catalog-local.ts +0 -94
- package/src/cli/lib/plugin-pin-history.ts +0 -276
- package/src/cloud/feature-gate.ts +0 -8
- package/src/config/__tests__/cloud-rehydration.test.ts +0 -180
- package/src/config/cloud-rehydration.ts +0 -35
- package/src/daemon/__tests__/auto-profile-router.test.ts +0 -380
- package/src/daemon/auto-profile-router.ts +0 -428
- package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +0 -391
- package/src/monitoring/__tests__/db-integrity-sample.test.ts +0 -113
- package/src/monitoring/__tests__/oom-kill-reporter.test.ts +0 -374
- package/src/monitoring/db-integrity-check.ts +0 -163
- package/src/monitoring/db-integrity-sample.ts +0 -176
- package/src/monitoring/oom-kill-reporter.ts +0 -469
- package/src/onboarding/__tests__/onboarding-events-store.test.ts +0 -158
- package/src/onboarding/onboarding-events-store.ts +0 -296
- package/src/persistence/__tests__/raw-query-telemetry.test.ts +0 -76
- package/src/persistence/lifecycle-events-store.test.ts +0 -134
- package/src/persistence/lifecycle-events-store.ts +0 -110
- package/src/plugins/defaults/memory/__tests__/activation-session-store.test.ts +0 -76
- package/src/plugins/defaults/memory/activation-session-store.ts +0 -50
- package/src/plugins/defaults/memory/src/__tests__/memory-v3-gate-stats.test.ts +0 -281
- package/src/runtime/routes/auto-profile-routes.ts +0 -83
- package/src/runtime/routes/internal-telemetry-routes.ts +0 -142
- package/src/runtime/routes/telemetry-routes.ts +0 -274
- package/src/security/auth-fallback-events-store.ts +0 -57
- package/src/telemetry/__tests__/activation-funnel.test.ts +0 -95
- package/src/telemetry/__tests__/config-setting-events-store.test.ts +0 -63
- package/src/telemetry/__tests__/config-setting-snapshot.test.ts +0 -143
- package/src/telemetry/__tests__/flush-checkpoints.test.ts +0 -56
- package/src/telemetry/__tests__/live-voice-funnel.test.ts +0 -174
- package/src/telemetry/__tests__/outbox-test-harness.ts +0 -85
- package/src/telemetry/__tests__/phone-call-funnel.test.ts +0 -72
- package/src/telemetry/__tests__/telemetry-event-fixtures.ts +0 -282
- package/src/telemetry/__tests__/watchdog-events-store.test.ts +0 -71
- package/src/telemetry/activation-funnel.ts +0 -172
- package/src/telemetry/config-setting-events-store.ts +0 -40
- package/src/telemetry/config-setting-snapshot.ts +0 -170
- package/src/telemetry/flush-checkpoints.ts +0 -70
- package/src/telemetry/live-voice-funnel.ts +0 -185
- package/src/telemetry/memory-corpus-size.test.ts +0 -120
- package/src/telemetry/memory-corpus-size.ts +0 -184
- package/src/telemetry/memory-tier-reporter.test.ts +0 -195
- package/src/telemetry/memory-tier-reporter.ts +0 -130
- package/src/telemetry/phone-call-funnel.ts +0 -144
- package/src/telemetry/skill-loaded-events-store.test.ts +0 -93
- package/src/telemetry/skill-loaded-events-store.ts +0 -39
- package/src/telemetry/telemetry-event-sources.test.ts +0 -223
- package/src/telemetry/telemetry-event-sources.ts +0 -597
- package/src/telemetry/telemetry-events-outbox.test.ts +0 -375
- package/src/telemetry/telemetry-events-outbox.ts +0 -237
- package/src/telemetry/telemetry-main-db.ts +0 -48
- package/src/telemetry/telemetry-wire-source.json +0 -4
- package/src/telemetry/telemetry-wire-validation.test.ts +0 -157
- package/src/telemetry/telemetry-wire-validation.ts +0 -162
- package/src/telemetry/telemetry-wire.generated.ts +0 -483
- package/src/telemetry/tool-executed-events-store.test.ts +0 -210
- package/src/telemetry/tool-executed-events-store.ts +0 -102
- package/src/telemetry/trace-collection-policy.test.ts +0 -28
- package/src/telemetry/trace-collection-policy.ts +0 -30
- package/src/telemetry/turn-events-store.ts +0 -216
- package/src/telemetry/turn-trace-store.test.ts +0 -884
- package/src/telemetry/turn-trace-store.ts +0 -399
- package/src/telemetry/types.test.ts +0 -38
- package/src/telemetry/types.ts +0 -780
- package/src/telemetry/usage-telemetry-reporter.test.ts +0 -3445
- package/src/telemetry/usage-telemetry-reporter.ts +0 -566
- package/src/telemetry/watchdog-direct-emit.test.ts +0 -112
- package/src/telemetry/watchdog-direct-emit.ts +0 -104
- package/src/telemetry/watchdog-events-store.ts +0 -31
- package/src/tools/ui-surface/channel-variants.ts +0 -52
- package/src/watcher/__tests__/telemetry.test.ts +0 -178
- package/src/watcher/telemetry.ts +0 -93
- package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +0 -165
- package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +0 -151
- /package/src/{telemetry → persistence}/tool-usage-store.ts +0 -0
- /package/src/{telemetry → persistence}/turn-outcome.ts +0 -0
package/src/util/disk-usage.ts
CHANGED
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
import { execFile } from "node:child_process";
|
|
2
1
|
import { existsSync, statfsSync } from "node:fs";
|
|
3
|
-
import { promisify } from "node:util";
|
|
4
2
|
|
|
5
|
-
import {
|
|
6
|
-
getIsCloud,
|
|
7
|
-
getIsContainerized,
|
|
8
|
-
getMinikubeStorageSize,
|
|
9
|
-
} from "../config/env-registry.js";
|
|
10
|
-
import { getWorkspaceDir } from "./platform.js";
|
|
11
|
-
|
|
12
|
-
const execFileAsync = promisify(execFile);
|
|
3
|
+
import { getWorkspaceDir } from "./layout.js";
|
|
13
4
|
|
|
14
5
|
export interface DiskUsageInfo {
|
|
15
6
|
path: string;
|
|
@@ -19,111 +10,10 @@ export interface DiskUsageInfo {
|
|
|
19
10
|
}
|
|
20
11
|
|
|
21
12
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
13
|
+
* Report the filesystem containing the workspace using filesystem counters.
|
|
14
|
+
* Docker named volumes and minikube hostPath volumes report the backing
|
|
15
|
+
* filesystem, including usage outside the workspace and its provisioned quota.
|
|
24
16
|
*/
|
|
25
|
-
async function getDirectorySizeBytes(paths: string[]): Promise<number | null> {
|
|
26
|
-
try {
|
|
27
|
-
const existing = paths.filter((p) => existsSync(p));
|
|
28
|
-
if (existing.length === 0) {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
const { stdout } = await execFileAsync("du", ["-sb", ...existing], {
|
|
32
|
-
timeout: 30_000,
|
|
33
|
-
windowsHide: true,
|
|
34
|
-
});
|
|
35
|
-
let total = 0;
|
|
36
|
-
for (const line of stdout.trim().split("\n")) {
|
|
37
|
-
const size = parseInt(line.split("\t")[0], 10);
|
|
38
|
-
if (!isNaN(size) && size > 0) {
|
|
39
|
-
total += size;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return total > 0 ? total : null;
|
|
43
|
-
} catch {
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const DU_CACHE_TTL_MS = 60_000;
|
|
49
|
-
// Caches the in-flight promise so concurrent callers share one `du` run.
|
|
50
|
-
let duCacheValue: Promise<number | null> | null = null;
|
|
51
|
-
let duCacheTime = 0;
|
|
52
|
-
let duCachePaths: string | null = null;
|
|
53
|
-
|
|
54
|
-
function getCachedDirectorySizeBytes(paths: string[]): Promise<number | null> {
|
|
55
|
-
const key = paths.join("\0");
|
|
56
|
-
const now = Date.now();
|
|
57
|
-
if (
|
|
58
|
-
duCacheValue !== null &&
|
|
59
|
-
duCachePaths === key &&
|
|
60
|
-
now - duCacheTime < DU_CACHE_TTL_MS
|
|
61
|
-
) {
|
|
62
|
-
return duCacheValue;
|
|
63
|
-
}
|
|
64
|
-
duCacheValue = getDirectorySizeBytes(paths);
|
|
65
|
-
duCacheTime = now;
|
|
66
|
-
duCachePaths = key;
|
|
67
|
-
return duCacheValue;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export function __resetDiskUsageCacheForTests(): void {
|
|
71
|
-
duCacheValue = null;
|
|
72
|
-
duCacheTime = 0;
|
|
73
|
-
duCachePaths = null;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* How the workspace volume's capacity should be reported when statfsSync
|
|
78
|
-
* cannot see the volume directly.
|
|
79
|
-
*
|
|
80
|
-
* - `fixed-cap`: minikube hostPath PVC — the PVC request is the hard
|
|
81
|
-
* capacity, so usage is measured with `du` and free space is whatever
|
|
82
|
-
* remains within the quota.
|
|
83
|
-
* - `host-free`: local Docker named volume — the volume is backed by the
|
|
84
|
-
* host (or Colima VM) filesystem and can grow into its free space, so
|
|
85
|
-
* usage is measured with `du` and the effective capacity is current usage
|
|
86
|
-
* plus the host's remaining headroom.
|
|
87
|
-
* - `none`: statfsSync already reports the volume accurately (bare metal, or
|
|
88
|
-
* a cloud-managed instance on a CSI-backed PVC), so use it directly.
|
|
89
|
-
*/
|
|
90
|
-
type WorkspaceVolumeReporting =
|
|
91
|
-
| { kind: "none" }
|
|
92
|
-
| { kind: "fixed-cap"; totalBytes: number }
|
|
93
|
-
| { kind: "host-free" };
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Decide how to report the workspace volume's capacity. Both minikube
|
|
97
|
-
* hostPath PVCs and local Docker named volumes are backed by the host
|
|
98
|
-
* filesystem, so statfsSync reports the host's entire disk rather than the
|
|
99
|
-
* workspace volume — in both cases we measure actual usage with `du` instead.
|
|
100
|
-
*/
|
|
101
|
-
function classifyWorkspaceVolume(
|
|
102
|
-
fsTotalBytes: number,
|
|
103
|
-
): WorkspaceVolumeReporting {
|
|
104
|
-
// Minikube mode: the cloud passes the PVC storage size so we can report
|
|
105
|
-
// accurate capacity. Detect the hostPath case by comparing filesystem size
|
|
106
|
-
// against the PVC size — if the filesystem is larger, statfsSync is seeing
|
|
107
|
-
// the host disk and we should measure the directory instead.
|
|
108
|
-
const storageSizeRaw = getMinikubeStorageSize();
|
|
109
|
-
if (storageSizeRaw) {
|
|
110
|
-
const pvcTotalBytes = parseK8sMemoryBytes(storageSizeRaw);
|
|
111
|
-
if (pvcTotalBytes !== null && fsTotalBytes > pvcTotalBytes * 1.1) {
|
|
112
|
-
return { kind: "fixed-cap", totalBytes: pvcTotalBytes };
|
|
113
|
-
}
|
|
114
|
-
return { kind: "none" };
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// Local Docker hatch: the workspace is a Docker named volume backed by the
|
|
118
|
-
// host filesystem. Platform-managed remote instances run on CSI-backed PVCs
|
|
119
|
-
// where statfsSync already reports the volume, so they are excluded.
|
|
120
|
-
if (getIsContainerized() && !getIsCloud()) {
|
|
121
|
-
return { kind: "host-free" };
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
return { kind: "none" };
|
|
125
|
-
}
|
|
126
|
-
|
|
127
17
|
export async function getDiskUsageInfo(): Promise<DiskUsageInfo | null> {
|
|
128
18
|
try {
|
|
129
19
|
const wsDir = getWorkspaceDir();
|
|
@@ -134,31 +24,6 @@ export async function getDiskUsageInfo(): Promise<DiskUsageInfo | null> {
|
|
|
134
24
|
const bytesToMb = (b: number) =>
|
|
135
25
|
Math.round((b / (1024 * 1024)) * 100) / 100;
|
|
136
26
|
|
|
137
|
-
const reporting = classifyWorkspaceVolume(fsTotalBytes);
|
|
138
|
-
if (reporting.kind !== "none") {
|
|
139
|
-
const volumePaths = [diskPath];
|
|
140
|
-
if (diskPath !== "/data" && existsSync("/data")) {
|
|
141
|
-
volumePaths.push("/data");
|
|
142
|
-
}
|
|
143
|
-
const usedBytes = await getCachedDirectorySizeBytes(volumePaths);
|
|
144
|
-
if (usedBytes !== null) {
|
|
145
|
-
const totalBytes =
|
|
146
|
-
reporting.kind === "fixed-cap"
|
|
147
|
-
? reporting.totalBytes
|
|
148
|
-
: usedBytes + fsFreeBytes;
|
|
149
|
-
const freeBytes =
|
|
150
|
-
reporting.kind === "fixed-cap"
|
|
151
|
-
? Math.max(0, reporting.totalBytes - usedBytes)
|
|
152
|
-
: fsFreeBytes;
|
|
153
|
-
return {
|
|
154
|
-
path: diskPath,
|
|
155
|
-
totalMb: bytesToMb(totalBytes),
|
|
156
|
-
usedMb: bytesToMb(usedBytes),
|
|
157
|
-
freeMb: bytesToMb(freeBytes),
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
27
|
return {
|
|
163
28
|
path: diskPath,
|
|
164
29
|
totalMb: bytesToMb(fsTotalBytes),
|
package/src/util/layout.ts
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* writes, all rooted at the workspace ($CADET_WORKSPACE_DIR) and its
|
|
4
4
|
* internal data directory.
|
|
5
5
|
*
|
|
6
|
-
* Extracted from `util/platform.ts` — these are
|
|
7
|
-
* not platform-detection concerns
|
|
8
|
-
*
|
|
6
|
+
* Extracted from `util/platform.ts` (now deleted) — these are
|
|
7
|
+
* directory-layout concerns, not platform-detection concerns; the OS
|
|
8
|
+
* detection and PATH helpers live in `./os.js`.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { chmodSync, existsSync, mkdirSync } from "node:fs";
|
package/src/util/logger.ts
CHANGED
|
@@ -15,8 +15,8 @@ import {
|
|
|
15
15
|
getDebugStdoutLogs,
|
|
16
16
|
getIsContainerized,
|
|
17
17
|
} from "../config/env-registry.js";
|
|
18
|
+
import { getLogsDir } from "./layout.js";
|
|
18
19
|
import { logSerializers } from "./log-redact.js";
|
|
19
|
-
import { getLogsDir } from "./platform.js";
|
|
20
20
|
|
|
21
21
|
const loadModule = createRequire(import.meta.url);
|
|
22
22
|
let bundledPino: typeof import("pino") | undefined;
|
package/src/util/logs-db-path.ts
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Platform detection and environment
|
|
2
|
+
* Platform detection and host-environment shaping helpers.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* OS detection (`isMacOS`/`isLinux`/`isWindows`/`getPlatformName`), the
|
|
5
|
+
* per-user application-data root, and the PATH-shaping helpers
|
|
6
|
+
* daemon-spawned tools rely on. Directory-layout helpers (every canonical
|
|
7
|
+
* path under the workspace and its data dir) live in `./layout.js`.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { homedir } from "node:os";
|
|
11
11
|
import { delimiter, join } from "node:path";
|
|
12
12
|
|
|
13
|
-
export * from "./layout.js";
|
|
14
|
-
|
|
15
13
|
export function isMacOS(): boolean {
|
|
16
14
|
return process.platform === "darwin";
|
|
17
15
|
}
|
|
@@ -88,26 +86,3 @@ export function addToPathEnv(
|
|
|
88
86
|
export function getPlatformName(): string {
|
|
89
87
|
return process.platform;
|
|
90
88
|
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Normalize an assistant ID to its canonical form for DB operations.
|
|
94
|
-
*
|
|
95
|
-
* The system uses "self" as the canonical single-tenant identifier
|
|
96
|
-
* (see migration 007-assistant-id-to-self). However, the desktop UI
|
|
97
|
-
* sends the real assistant ID (e.g., "cadet-true-eel") while the
|
|
98
|
-
* inbound call path resolves phone numbers to config keys (typically
|
|
99
|
-
* "self"). This function maps the current assistant's ID to "self"
|
|
100
|
-
* so both sides use a consistent DB key.
|
|
101
|
-
*/
|
|
102
|
-
export function normalizeAssistantId(assistantId: string): string {
|
|
103
|
-
if (assistantId === "self") {
|
|
104
|
-
return "self";
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const ownName = process.env.CADET_ASSISTANT_NAME;
|
|
108
|
-
if (ownName && assistantId === ownName) {
|
|
109
|
-
return "self";
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
return assistantId;
|
|
113
|
-
}
|
package/src/util/process-tree.ts
CHANGED
|
@@ -129,6 +129,25 @@ export function deriveName(command: string): string {
|
|
|
129
129
|
return argv0;
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
+
/**
|
|
133
|
+
* Display cap for command-derived labels in `ps` output. `deriveName` can
|
|
134
|
+
* surface a whole argument list when an interpreter runs without a script
|
|
135
|
+
* (`bun x -y @scope/server --stdio …`), and a super-long label pads every
|
|
136
|
+
* row and stretches the whole table. The cap keeps the head (the interpreter
|
|
137
|
+
* or binary) and the tail (the identifying end), collapsing the middle to
|
|
138
|
+
* one ellipsis.
|
|
139
|
+
*/
|
|
140
|
+
export const MAX_COMMAND_LABEL_LENGTH = 60;
|
|
141
|
+
|
|
142
|
+
export function truncateCommandLabel(label: string): string {
|
|
143
|
+
if (label.length <= MAX_COMMAND_LABEL_LENGTH) {
|
|
144
|
+
return label;
|
|
145
|
+
}
|
|
146
|
+
const head = 16;
|
|
147
|
+
const tail = MAX_COMMAND_LABEL_LENGTH - head - 1; // 1 char for the ellipsis
|
|
148
|
+
return `${label.slice(0, head)}…${label.slice(-tail)}`;
|
|
149
|
+
}
|
|
150
|
+
|
|
132
151
|
/**
|
|
133
152
|
* Redacted command descriptor for a live PID from `/proc/<pid>/cmdline`, or
|
|
134
153
|
* null when the process is gone or its `/proc` entry is unreadable. Kernel
|
|
@@ -24,7 +24,7 @@ import { existsSync } from "node:fs";
|
|
|
24
24
|
import { homedir } from "node:os";
|
|
25
25
|
import { join } from "node:path";
|
|
26
26
|
|
|
27
|
-
import { isWindows } from "./
|
|
27
|
+
import { isWindows } from "./os.js";
|
|
28
28
|
|
|
29
29
|
let cachedSqlite3Path: string | undefined | null;
|
|
30
30
|
|
|
@@ -123,21 +123,6 @@ mock.module("../../runtime/background-job-runner.js", () => ({
|
|
|
123
123
|
},
|
|
124
124
|
}));
|
|
125
125
|
|
|
126
|
-
const inventoryCalls: number[] = [];
|
|
127
|
-
const llmProcessedCalls: Array<{
|
|
128
|
-
providerId: string;
|
|
129
|
-
conversationId: string;
|
|
130
|
-
}> = [];
|
|
131
|
-
|
|
132
|
-
mock.module("../telemetry.js", () => ({
|
|
133
|
-
recordWatcherInventoryIfDue: (now: number) => {
|
|
134
|
-
inventoryCalls.push(now);
|
|
135
|
-
},
|
|
136
|
-
recordWatcherLlmProcessed: (providerId: string, conversationId: string) => {
|
|
137
|
-
llmProcessedCalls.push({ providerId, conversationId });
|
|
138
|
-
},
|
|
139
|
-
}));
|
|
140
|
-
|
|
141
126
|
// Import after mocks are in place.
|
|
142
127
|
const { runWatchersOnce } = await import("../engine.js");
|
|
143
128
|
|
|
@@ -189,8 +174,6 @@ beforeEach(() => {
|
|
|
189
174
|
setConvCalls.length = 0;
|
|
190
175
|
dispositionCalls.length = 0;
|
|
191
176
|
runJobCalls.length = 0;
|
|
192
|
-
inventoryCalls.length = 0;
|
|
193
|
-
llmProcessedCalls.length = 0;
|
|
194
177
|
fakeProviderSource = "webhook";
|
|
195
178
|
insertedEvents.length = 0;
|
|
196
179
|
fetchedItems = [];
|
|
@@ -296,9 +279,6 @@ describe("runWatchersOnce — Phase 2 runBackgroundJob integration", () => {
|
|
|
296
279
|
expect(setConvCalls).toEqual([
|
|
297
280
|
{ watcherId: "watcher-1", conversationId: "conv-success" },
|
|
298
281
|
]);
|
|
299
|
-
expect(llmProcessedCalls).toEqual([
|
|
300
|
-
{ providerId: "linear", conversationId: "conv-success" },
|
|
301
|
-
]);
|
|
302
282
|
expect(dispositionCalls).toHaveLength(2);
|
|
303
283
|
for (const call of dispositionCalls) {
|
|
304
284
|
expect(call.disposition).toBe("silent");
|
|
@@ -344,7 +324,6 @@ describe("runWatchersOnce — Phase 2 runBackgroundJob integration", () => {
|
|
|
344
324
|
// which would clobber a valid prior conversation id in the DB.
|
|
345
325
|
expect(setConvCalls).toEqual([]);
|
|
346
326
|
// No conversation was bootstrapped, so no usage breadcrumb either.
|
|
347
|
-
expect(llmProcessedCalls).toEqual([]);
|
|
348
327
|
// Failure path still updates event dispositions.
|
|
349
328
|
expect(dispositionCalls).toHaveLength(1);
|
|
350
329
|
expect(dispositionCalls[0].disposition).toBe("error");
|
|
@@ -358,8 +337,6 @@ describe("runWatchersOnce — Phase 2 runBackgroundJob integration", () => {
|
|
|
358
337
|
|
|
359
338
|
expect(runJobCalls).toHaveLength(0);
|
|
360
339
|
expect(setConvCalls).toHaveLength(0);
|
|
361
|
-
// Inventory telemetry runs on every tick regardless of pending work.
|
|
362
|
-
expect(inventoryCalls).toHaveLength(1);
|
|
363
340
|
});
|
|
364
341
|
|
|
365
342
|
test("malicious payload reaches the runner only inside assistant-role sandwich.content", async () => {
|
package/src/watcher/engine.ts
CHANGED
|
@@ -25,10 +25,6 @@ import {
|
|
|
25
25
|
} from "./constants.js";
|
|
26
26
|
import { capPayloadForRender, capPayloadForStorage } from "./payload-bounds.js";
|
|
27
27
|
import { getWatcherProvider } from "./provider-registry.js";
|
|
28
|
-
import {
|
|
29
|
-
recordWatcherInventoryIfDue,
|
|
30
|
-
recordWatcherLlmProcessed,
|
|
31
|
-
} from "./telemetry.js";
|
|
32
28
|
import {
|
|
33
29
|
claimDueWatchers,
|
|
34
30
|
completeWatcherPoll,
|
|
@@ -229,8 +225,6 @@ export async function runWatchersOnce(
|
|
|
229
225
|
const now = Date.now();
|
|
230
226
|
let processed = 0;
|
|
231
227
|
|
|
232
|
-
recordWatcherInventoryIfDue(now);
|
|
233
|
-
|
|
234
228
|
// ── Phase 1: Poll providers for new events ──────────────────────
|
|
235
229
|
const claimed = claimDueWatchers(now);
|
|
236
230
|
for (const watcher of claimed) {
|
|
@@ -473,7 +467,6 @@ export async function runWatchersOnce(
|
|
|
473
467
|
// is empty) — otherwise we'd overwrite a valid prior id with "".
|
|
474
468
|
if (result.conversationId !== "") {
|
|
475
469
|
setWatcherConversationId(watcher.id, result.conversationId);
|
|
476
|
-
recordWatcherLlmProcessed(watcher.providerId, result.conversationId);
|
|
477
470
|
}
|
|
478
471
|
|
|
479
472
|
if (result.ok) {
|
|
@@ -5,8 +5,6 @@ import * as pluginInstallPlatform from "./cli/lib/install-from-cloud.js";
|
|
|
5
5
|
import * as pluginInstallGitHub from "./cli/lib/install-from-github.js";
|
|
6
6
|
import * as pluginInstalled from "./cli/lib/list-installed-plugins.js";
|
|
7
7
|
import * as pluginCatalogCache from "./cli/lib/plugin-catalog-cache.js";
|
|
8
|
-
import * as pluginCatalogLocal from "./cli/lib/plugin-catalog-local.js";
|
|
9
|
-
import * as pluginPinHistory from "./cli/lib/plugin-pin-history.js";
|
|
10
8
|
import * as pluginSurfaces from "./cli/lib/plugin-surfaces.js";
|
|
11
9
|
import * as pluginSearch from "./cli/lib/search-plugins.js";
|
|
12
10
|
import * as pluginUninstall from "./cli/lib/uninstall-plugin.js";
|
|
@@ -18,13 +16,11 @@ setBundledCliModules({
|
|
|
18
16
|
configEnv,
|
|
19
17
|
providerSecretCatalog,
|
|
20
18
|
pluginCatalogCache,
|
|
21
|
-
pluginCatalogLocal,
|
|
22
19
|
pluginDiff,
|
|
23
20
|
pluginInspect,
|
|
24
21
|
pluginInstallGitHub,
|
|
25
22
|
pluginInstallPlatform,
|
|
26
23
|
pluginInstalled,
|
|
27
|
-
pluginPinHistory,
|
|
28
24
|
pluginSearch,
|
|
29
25
|
pluginSurfaces,
|
|
30
26
|
pluginUninstall,
|
|
@@ -18,12 +18,6 @@ switch (worker) {
|
|
|
18
18
|
await import("./embedded/plugin-api.js");
|
|
19
19
|
await import("./routes/worker.js");
|
|
20
20
|
break;
|
|
21
|
-
case "db-integrity": {
|
|
22
|
-
const { runIntegrityCheck } =
|
|
23
|
-
await import("./monitoring/db-integrity-check.js");
|
|
24
|
-
console.log(JSON.stringify(runIntegrityCheck(process.argv[3] ?? "")));
|
|
25
|
-
break;
|
|
26
|
-
}
|
|
27
21
|
default:
|
|
28
22
|
throw new Error(`Unknown Windows worker entry: ${worker ?? "missing"}`);
|
|
29
23
|
}
|
|
@@ -136,7 +136,7 @@ import { initializeDb } from "../persistence/db-init.js";
|
|
|
136
136
|
import { conversations } from "../persistence/schema/index.js";
|
|
137
137
|
import { setBroadcastOverrideForTesting } from "../runtime/assistant-event-hub.js";
|
|
138
138
|
import type { Tool, ToolContext, ToolExecutionResult } from "../tools/types.js";
|
|
139
|
-
import { getWorkspaceDir } from "../util/
|
|
139
|
+
import { getWorkspaceDir } from "../util/layout.js";
|
|
140
140
|
import { runLeaf, WorkflowUnknownProfileError } from "./leaf-runner.js";
|
|
141
141
|
|
|
142
142
|
await initializeDb();
|
|
@@ -58,8 +58,8 @@ import {
|
|
|
58
58
|
import type { Message, ToolDefinition } from "../providers/types.js";
|
|
59
59
|
import { broadcastMessage } from "../runtime/assistant-event-hub.js";
|
|
60
60
|
import type { Tool, ToolContext, ToolExecutionResult } from "../tools/types.js";
|
|
61
|
+
import { getWorkspaceDir } from "../util/layout.js";
|
|
61
62
|
import { getLogger } from "../util/logger.js";
|
|
62
|
-
import { getWorkspaceDir } from "../util/platform.js";
|
|
63
63
|
|
|
64
64
|
const log = getLogger("workflow-leaf-runner");
|
|
65
65
|
|
package/src/workflows/library.ts
CHANGED
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
23
23
|
import { join } from "node:path";
|
|
24
24
|
|
|
25
|
+
import { getWorkspaceWorkflowsDir } from "../util/layout.js";
|
|
25
26
|
import { getLogger } from "../util/logger.js";
|
|
26
|
-
import { getWorkspaceWorkflowsDir } from "../util/platform.js";
|
|
27
27
|
import { extractWorkflowMeta, type WorkflowMeta } from "./engine.js";
|
|
28
28
|
|
|
29
29
|
const log = getLogger("workflow-library");
|
|
@@ -13,22 +13,14 @@ import { getCatalogProviderForModel } from "../providers/model-catalog.js";
|
|
|
13
13
|
// up on every boot because the seeder overwrites cloud profiles. On-platform
|
|
14
14
|
// instances preserve existing profiles (the cloud overlay is authoritative),
|
|
15
15
|
// so instances that were hatched before thinking was enabled in the templates
|
|
16
|
-
// are stuck with thinking disabled or absent.
|
|
17
|
-
//
|
|
18
|
-
// Workspace migration 097 patches the on-disk config once, but it runs before
|
|
19
|
-
// mergeDefaultWorkspaceConfig() which can overwrite the fix with overlay
|
|
20
|
-
// profiles that have thinking disabled or absent. lifecycle.ts calls this
|
|
21
|
-
// repair again after the overlay merge + profile seeding so the fix sticks.
|
|
22
|
-
// The migration keeps its own frozen copy of this logic (migration files are
|
|
23
|
-
// self-contained snapshots and must not be imported from).
|
|
16
|
+
// are stuck with thinking disabled or absent. lifecycle.ts calls this repair
|
|
17
|
+
// after the overlay merge + profile seeding so the fix sticks.
|
|
24
18
|
//
|
|
25
19
|
// The repair patches both profiles, adding thinking: { enabled: true,
|
|
26
20
|
// streamThinking: true } where it's missing or explicitly disabled. It skips
|
|
27
21
|
// profiles that:
|
|
28
22
|
// - Don't exist (no profile to patch)
|
|
29
23
|
// - Already have thinking enabled (idempotent)
|
|
30
|
-
// - Are source: "user" (user-created profiles are untouched)
|
|
31
|
-
// - Have a non-managed, non-absent source (unknown origin)
|
|
32
24
|
// - Resolve to a non-Anthropic provider (adaptive thinking is
|
|
33
25
|
// Anthropic-specific). Effective provider is the profile's explicit
|
|
34
26
|
// `provider`; otherwise the provider implied by a known catalog `model`
|
|
@@ -93,20 +85,9 @@ export function repairAdaptiveThinkingOnCloudProfiles(
|
|
|
93
85
|
continue;
|
|
94
86
|
}
|
|
95
87
|
|
|
96
|
-
// Only patch managed Anthropic
|
|
97
|
-
//
|
|
98
|
-
//
|
|
99
|
-
// of the canonical managed names (which TARGET_PROFILES already guarantees)
|
|
100
|
-
// and the effective provider is Anthropic. Effective provider is the
|
|
101
|
-
// explicit `provider`, else the provider implied by a known catalog
|
|
102
|
-
// `model`, else the inherited llm.default.provider. Explicit
|
|
103
|
-
// `source: "user"` profiles are always skipped.
|
|
104
|
-
if (profile.source === "user") {
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
if (profile.source !== undefined && profile.source !== "managed") {
|
|
108
|
-
continue;
|
|
109
|
-
}
|
|
88
|
+
// Only patch managed-name entries resolving to Anthropic. Effective
|
|
89
|
+
// provider is the explicit `provider`, else the provider implied by a
|
|
90
|
+
// known catalog `model`, else the inherited llm.default.provider.
|
|
110
91
|
const effectiveProvider = resolveEffectiveProvider(
|
|
111
92
|
profile,
|
|
112
93
|
defaultProvider,
|
|
@@ -78,22 +78,20 @@ const HATCH_ERA_PROFILE_KEYS = [
|
|
|
78
78
|
type HatchEraProfileKey = (typeof HATCH_ERA_PROFILE_KEYS)[number];
|
|
79
79
|
|
|
80
80
|
/**
|
|
81
|
-
* The exact stub shapes
|
|
82
|
-
* the workspace-owned overlay fields),
|
|
83
|
-
* per-key label, and a `status` of `"disabled"` (seeded at hatch,
|
|
84
|
-
* `"active"` (re-enabled through the guard; safe to delete because
|
|
85
|
-
* key resolves active post-conversion), or no `status` key at all
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
* other key (a cloud overlay body) is not a stub and is likewise left
|
|
94
|
-
* alone.
|
|
81
|
+
* The exact stub shapes hatching leaves on each default key: thin (only
|
|
82
|
+
* the cadet-provider marker plus workspace-owned overlay fields), the
|
|
83
|
+
* frozen per-key label, and a `status` of `"disabled"` (seeded at hatch,
|
|
84
|
+
* #30367), `"active"` (re-enabled through the guard; safe to delete because
|
|
85
|
+
* the bare key resolves active post-conversion), or no `status` key at all
|
|
86
|
+
* (label-only rewrites). Deletion requires the full shape: a thin managed
|
|
87
|
+
* entry differing in any other way (a guard-side edit on the bare key, or a
|
|
88
|
+
* non-frozen label or status carried off a retired copy by this pass) is
|
|
89
|
+
* user overlay state and stays. The carry arm below never writes the frozen
|
|
90
|
+
* label, so a match is always hatch-written modulo the status toggle. A
|
|
91
|
+
* cadet-provider entry with any other key (a cloud overlay body) is not a
|
|
92
|
+
* stub and is likewise left alone.
|
|
95
93
|
*/
|
|
96
|
-
const STUB_ONLY_KEYS = new Set(["
|
|
94
|
+
const STUB_ONLY_KEYS = new Set(["provider", "status", "label", "thinking"]);
|
|
97
95
|
const HATCH_STUB_LABELS: Record<HatchEraProfileKey, string> = {
|
|
98
96
|
balanced: "Balanced (Managed)",
|
|
99
97
|
"quality-optimized": "Quality (Managed)",
|
|
@@ -116,7 +114,7 @@ function isHatchStub(
|
|
|
116
114
|
entry: Record<string, unknown>,
|
|
117
115
|
): boolean {
|
|
118
116
|
return (
|
|
119
|
-
entry.
|
|
117
|
+
entry.provider === "cadet" &&
|
|
120
118
|
Object.keys(entry).every((k) => STUB_ONLY_KEYS.has(k)) &&
|
|
121
119
|
(!("status" in entry) ||
|
|
122
120
|
entry.status === "disabled" ||
|
|
@@ -332,7 +330,7 @@ export function ensureByokDefaultProfiles(workspaceDir: string): void {
|
|
|
332
330
|
const overlay = userOverlayState(entry, key);
|
|
333
331
|
delete profiles[name];
|
|
334
332
|
if (overlay !== null && readObject(profiles[key]) === null) {
|
|
335
|
-
const stub: Record<string, unknown> = {
|
|
333
|
+
const stub: Record<string, unknown> = { provider: "cadet", ...overlay };
|
|
336
334
|
// A carried label that reproduces the hatch-stub shape is
|
|
337
335
|
// indistinguishable from a genuine hatch stub and would be deleted by
|
|
338
336
|
// the stub arm on the next boot, so the colliding label is never
|
|
@@ -370,7 +368,7 @@ export function ensureByokDefaultProfiles(workspaceDir: string): void {
|
|
|
370
368
|
repairProfileSelections(llm, profiles, blob, carriedDisables);
|
|
371
369
|
|
|
372
370
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
373
|
-
// The lifecycle call site runs before the first
|
|
371
|
+
// The lifecycle call site runs before the first getConfig() of this boot;
|
|
374
372
|
// this guards callers that read config earlier (and future reordering).
|
|
375
373
|
invalidateConfigCache();
|
|
376
374
|
}
|
|
@@ -413,13 +411,9 @@ function isKnownUneditedBody(
|
|
|
413
411
|
) {
|
|
414
412
|
return false;
|
|
415
413
|
}
|
|
416
|
-
// Completion skips managed-source bodies, so a copy from the era whose
|
|
417
|
-
// templates wrote `source: "managed"` (#29755 to #29768, 2026-05-05) is
|
|
418
|
-
// compared as if user-source to keep both sides normalized identically.
|
|
419
414
|
const normalizedEntry: Record<string, unknown> = {
|
|
420
415
|
...entry,
|
|
421
416
|
provider: copyProvider,
|
|
422
|
-
...(entry.source === "managed" ? { source: "user" } : {}),
|
|
423
417
|
};
|
|
424
418
|
// The conventional personal binding is machinery-written (hatch stamps,
|
|
425
419
|
// completion re-stamps); normalize it away. Any other binding is user
|
|
@@ -485,8 +479,6 @@ function uniformCopyProvider(profiles: Record<string, unknown>): string | null {
|
|
|
485
479
|
* retiring the copy cannot switch keys. Any other connection value is a
|
|
486
480
|
* user edit and never matches.
|
|
487
481
|
*
|
|
488
|
-
* The final hatch-written deviation, `source: "managed"` from the earliest
|
|
489
|
-
* templates, is handled by the caller's source normalization.
|
|
490
482
|
*/
|
|
491
483
|
function hatchBodyVariants(
|
|
492
484
|
known: Record<string, unknown>,
|
|
@@ -653,9 +645,15 @@ function repairProfileSelections(
|
|
|
653
645
|
const advisor = llm.advisorProfile;
|
|
654
646
|
const advisorEntry =
|
|
655
647
|
typeof advisor === "string" ? effectiveEntry(advisor) : undefined;
|
|
648
|
+
// The workspace view decides ownership: a cadet-provider stub (or an
|
|
649
|
+
// absent entry) is a managed default the write governs; a non-cadet
|
|
650
|
+
// entry is a user shadow whose disable is user intent and stays.
|
|
651
|
+
const advisorWorkspace =
|
|
652
|
+
typeof advisor === "string" ? readObject(profiles[advisor]) : null;
|
|
656
653
|
const advisorUnusable =
|
|
657
654
|
advisorEntry === undefined ||
|
|
658
|
-
(advisorEntry.
|
|
655
|
+
(advisorEntry.status === "disabled" &&
|
|
656
|
+
(advisorWorkspace === null || advisorWorkspace.provider === "cadet"));
|
|
659
657
|
if (advisorUnusable) {
|
|
660
658
|
// A default key whose surviving workspace entry is a disabled managed
|
|
661
659
|
// stub still dispatches the pure catalog body (`providerAwareEntry` in
|
|
@@ -678,7 +676,7 @@ function repairProfileSelections(
|
|
|
678
676
|
const workspace = readObject(profiles[key]);
|
|
679
677
|
return (
|
|
680
678
|
workspace !== null &&
|
|
681
|
-
workspace.
|
|
679
|
+
workspace.provider === "cadet" &&
|
|
682
680
|
resolveDefaultProfileForProvider(undefined, key, defaultBlob)
|
|
683
681
|
?.status !== "disabled"
|
|
684
682
|
);
|
|
@@ -23,7 +23,7 @@ const log = getLogger("custom-profile-ensure");
|
|
|
23
23
|
// construction. Running
|
|
24
24
|
// unconditionally each boot also covers configs restored from backups
|
|
25
25
|
// and entries injected after the migration registry checkpoints — and it
|
|
26
|
-
// completes before the first `
|
|
26
|
+
// completes before the first `getConfig()`, so no resolution ever sees a
|
|
27
27
|
// partial custom profile.
|
|
28
28
|
//
|
|
29
29
|
// Idempotent and write-avoidant: entries that are already complete (and mix
|
|
@@ -87,7 +87,7 @@ export function ensureCompleteCustomProfiles(workspaceDir: string): void {
|
|
|
87
87
|
return;
|
|
88
88
|
}
|
|
89
89
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
90
|
-
// The lifecycle call site runs before the first
|
|
90
|
+
// The lifecycle call site runs before the first getConfig() of this boot;
|
|
91
91
|
// this guards callers that read config earlier (and future reordering).
|
|
92
92
|
invalidateConfigCache();
|
|
93
93
|
}
|
|
@@ -16,7 +16,7 @@ import { trackDaemonActivity } from "../daemon/activity-trail.js";
|
|
|
16
16
|
import { isFileUnheld } from "../util/file-use.js";
|
|
17
17
|
import { getLogger } from "../util/logger.js";
|
|
18
18
|
import { Mutex } from "../util/mutex.js";
|
|
19
|
-
import { addToPathEnv, getExtraToolPathDirs } from "../util/
|
|
19
|
+
import { addToPathEnv, getExtraToolPathDirs } from "../util/os.js";
|
|
20
20
|
import { PromiseGuard } from "../util/promise-guard.js";
|
|
21
21
|
import {
|
|
22
22
|
collectDirtyPathsFromPorcelain,
|